diff --git a/conf.py b/conf.py index 2c1cb121ad..3fcad0e5ee 100644 --- a/conf.py +++ b/conf.py @@ -232,12 +232,11 @@ # option. If a provided version has no label, the version string is used as label. versions_names = { 'master': "Master", + '19.0': "Odoo 19", 'saas-18.4': "Odoo 18.4", 'saas-18.3': "Odoo 18.3", 'saas-18.2': "Odoo 18.2", - 'saas-18.1': "Odoo 18.1", '18.0': "Odoo 18", - 'saas-17.4': "Odoo 17.4", '17.0': "Odoo 17", '16.0': "Odoo 16", } diff --git a/content/administration/odoo_online.rst b/content/administration/odoo_online.rst index 5d16c073ce..7057b7be7a 100644 --- a/content/administration/odoo_online.rst +++ b/content/administration/odoo_online.rst @@ -14,6 +14,8 @@ Odoo Online databases are accessed using any web browser and do not require a lo To quickly try out Odoo, shared `demo `_ instances are available. No registration is required, but each instance only lives for a few hours. +.. _odoo_online/database-management: + Database management =================== @@ -160,49 +162,21 @@ Web Services ============ In order to programmatically retrieve the list of the databases displayed in the -`database manager `_, call the method `list` of the model -`odoo.database` via a :doc:`Web Service ` call. - -Inspired from the examples provided in the :doc:`Web Services ` -section, this is how to retrieve this list with the library ``xmlrpc.client``:: - - import xmlrpc.client - - USER = 'user@domain.tld' - APIKEY = 'your_apikey' - - root = 'https://www.odoo.com/xmlrpc/' - uid = xmlrpc.client.ServerProxy(root + 'common').login('openerp', USER, APIKEY) - sock = xmlrpc.client.ServerProxy(root + 'object') - databases_list = sock.execute('openerp', uid, APIKEY, 'odoo.database', 'list') - -And here is the equivalent example with JSON-RPC:: - - import json - import random - import urllib.request - - USER = 'user@domain.tld' - APIKEY = 'your_apikey' - - def json_rpc(url, method, params): - data = { - 'jsonrpc': '2.0', - 'method': method, - 'params': params, - 'id': random.randint(0, 1000000000), - } - req = urllib.request.Request(url=url, data=json.dumps(data).encode(), headers={ - "Content-Type": "application/json", - }) - reply = json.loads(urllib.request.urlopen(req).read().decode('UTF-8')) - if reply.get('error'): - raise Exception(reply['error']) - return reply['result'] - - def call(url, service, method, *args): - return json_rpc(url, 'call', {'service': service, 'method': method, 'args': args}) - - url = 'https://www.odoo.com/jsonrpc' - uid = call(url, 'common', 'login', 'openerp', USER, APIKEY) - databases_list = call(url, 'object', 'execute', 'openerp', uid, APIKEY, 'odoo.database', 'list') +`database manager `_, call the method ``list`` of the model +``odoo.database`` via an :doc:`external JSON-2 API ` call. + +.. example:: + .. code:: python + + import requests + + APIKEY = "your_apikey" + + requests.post( + "https://www.odoo.com/json/2/odoo.database/list", + headers={ + "Authorization": f"bearer {APIKEY}", + "X-Odoo-Database": "openerp", + } + json={}, + ) diff --git a/content/administration/on_premise/geo_ip.rst b/content/administration/on_premise/geo_ip.rst index 25d3c2f9f5..5fb9ce8bc6 100644 --- a/content/administration/on_premise/geo_ip.rst +++ b/content/administration/on_premise/geo_ip.rst @@ -47,7 +47,7 @@ request IP address. To do so: .. code-block:: xml -

+

#. Save and refresh the page. diff --git a/content/administration/on_premise/source.rst b/content/administration/on_premise/source.rst index 3b43fc64a8..82442063d4 100644 --- a/content/administration/on_premise/source.rst +++ b/content/administration/on_premise/source.rst @@ -118,11 +118,14 @@ Prepare Python ~~~~~~ -Odoo requires **Python 3.10** or later to run. +Odoo requires **Python 3.12** or later to run. .. versionchanged:: 17 Minimum requirement updated from Python 3.7 to Python 3.10. +.. versionchanged:: 20 + Minimum requirement updated from Python 3.10 to Python 3.12. + .. tabs:: @@ -194,11 +197,17 @@ PostgreSQL Odoo uses PostgreSQL as its database management system. +.. versionchanged:: 19 + Minimum requirement updated from PostgreSQL 12 to PostgreSQL 13. + +.. versionchanged:: 20 + Minimum requirement updated from PostgreSQL 13 to PostgreSQL 16. + .. tabs:: .. group-tab:: Linux - Use a package manager to download and install PostgreSQL (supported versions: 12.0 or above). + Use a package manager to download and install PostgreSQL (supported versions: 16.0 or above). It can be achieved by executing the following: .. code-block:: console @@ -207,13 +216,13 @@ Odoo uses PostgreSQL as its database management system. .. group-tab:: Windows - `Download PostgreSQL `_ (supported versions: 12.0 + `Download PostgreSQL `_ (supported versions: 16.0 or above) and install it. .. group-tab:: Mac OS Use `Postgres.app `_ to download and install PostgreSQL (supported - version: 12.0 or above). + version: 16.0 or above). .. tip:: To make the command line tools bundled with Postgres.app available, make sure to set up the diff --git a/content/administration/supported_versions.rst b/content/administration/supported_versions.rst index 3325f732e6..2ff7f19731 100644 --- a/content/administration/supported_versions.rst +++ b/content/administration/supported_versions.rst @@ -31,60 +31,48 @@ This matrix shows the support status of every version. - On-Premise - Release date - End of support - * - Odoo SaaS 18.4 + * - **Odoo 19.0** + - |green| - |green| + - |green| + - September 2025 + - September 2028 (planned) + * - Odoo SaaS 18.4 + - |red| - N/A - N/A - July 2025 - * - Odoo SaaS 18.3 - - |green| + - |red| - N/A - N/A - May 2025 - * - Odoo SaaS 18.2 - - |green| + - |red| - N/A - N/A - March 2025 - - * - Odoo SaaS 18.1 - - |green| - - N/A - - N/A - - January 2025 - - * - **Odoo 18.0** - |green| - |green| - |green| - October 2024 - - October 2027 (planned) - * - Odoo SaaS 17.4 - - |red| - - N/A - - N/A - - July 2024 - - October 2024 - * - Odoo SaaS 17.2 - - |red| - - N/A - - N/A - - April 2024 - - October 2024 + - September 2027 (planned) * - **Odoo 17.0** - |green| - |green| - |green| - November 2023 - - October 2026 (planned) + - September 2026 (planned) * - **Odoo 16.0** - - |green| - - |green| - - |green| + - |red| + - |red| + - |red| - October 2022 - - October 2025 (planned) + - September 2025 * - **Odoo 15.0** - |red| - |red| diff --git a/content/applications/finance/accounting/bank.rst b/content/applications/finance/accounting/bank.rst index 8bb8c218c8..a9a5f8dde8 100644 --- a/content/applications/finance/accounting/bank.rst +++ b/content/applications/finance/accounting/bank.rst @@ -13,7 +13,7 @@ account. Both the journal and the account are automatically created and configur a bank account. .. note:: - Cash journals and accounts must be configured manually. + :ref:`Cash journals ` and accounts must be configured manually. Bank journals are displayed by default on the :guilabel:`Accounting Dashboard` in the form of cards which include action buttons. @@ -29,9 +29,9 @@ Manage bank and cash accounts Connect a bank for automatic synchronization -------------------------------------------- -To connect your bank account to your database, go to :menuselection:`Accounting --> Configuration ---> Add a Bank Account`, select your bank in the list, click :guilabel:`Connect`, and follow the -instructions. +To connect your bank account to your database, go to the :guilabel:`Accounting Dashboard` and on the +kanban card of an unconnected bank, click :guilabel:`Search over 26000 banks`. Select your bank from +the list, click on :guilabel:`Connect`, and follow the instructions. .. seealso:: :doc:`bank/bank_synchronization` @@ -44,153 +44,18 @@ Create a bank account If your banking institution is not available in Odoo, or if you don't want to connect your bank account to your database, you can configure your bank account manually. -To manually add a bank account, go to :menuselection:`Accounting --> Configuration --> Add a Bank -Account`, click :guilabel:`Record transactions manually` (at the bottom right), fill out the bank -information, and click :guilabel:`Create`. +To manually add a bank account, go to the :guilabel:`Accounting Dashboard` and on the kanban card of +an unconnected bank, click :guilabel:`Search over 26000 banks`. Then, click on :guilabel:`Record +transactions manually` (at the bottom right), fill out the bank information, and click +:guilabel:`Create`. .. note:: - Odoo automatically detects the bank account type (e.g., IBAN) and enables some features accordingly. - - A default bank journal is available and can be used to configure your bank account by going to - :menuselection:`Accounting --> Configuration --> Accounting: Journals --> Bank`. Open it and - edit the different fields to match your bank account information. - -Create a cash journal ---------------------- - -To create a new cash journal, go to :menuselection:`Accounting --> Configuration --> Accounting: -Journals`, click :guilabel:`Create` and select :guilabel:`Cash` in the :guilabel:`Type` field. - -For more information on the accounting information fields, read the -:ref:`accounting/bank/configuration` section of this page. - -.. note:: - A default cash journal is available and can be used straight away. You can review it by going to - :menuselection:`Accounting --> Configuration --> Accounting: Journals --> Cash`. - -Edit an existing bank or cash journal -------------------------------------- - -To edit an existing bank journal, go to :menuselection:`Accounting --> Configuration --> Accounting: -Journals` and select the journal you want to modify. - -.. _accounting/bank/configuration: - -Configuration -============= - -You can edit the accounting information and bank account number according to your needs. - -.. image:: bank/bank-journal-config.png - :alt: Manually configure your bank information - -.. seealso:: - - :doc:`get_started/multi_currency` - - :doc:`bank/transactions` - - `Bank configuration `_ - -.. _accounting/bank/suspense: - -Suspense account ----------------- - -Bank statement transactions are posted on the suspense account until they are reconciled. At any -moment, the suspense account's balance in the general ledger shows the balance of transactions that -have not yet been reconciled. - -.. note:: - When a bank transaction is reconciled, the journal entry is modified to replace the bank suspense - account with the account of the journal item it is reconciled with. This account is usually the - :ref:`outstanding receipts or payments account ` if - reconciling with a registered payment or the account receivable or payable if reconciling with - an invoice or bill directly. - -Profit and loss accounts ------------------------- - -The :guilabel:`Profit Account` is used to register a profit when the ending balance of a cash -register differs from what the system computes, while the :guilabel:`Loss Account` is used to -register a loss when the ending balance of a cash register differs from what the system computes. - -Currency --------- - -You can edit the currency used to enter the transactions. - -.. seealso:: - :doc:`get_started/multi_currency` - -.. _accounting/bank/account-number: - -Account number --------------- - -If you need to **edit your bank account details**, click the external link arrow next to your -:guilabel:`Account Number`. On the account page, click the external link arrow next to your -:guilabel:`Bank` and update your bank information accordingly. These details are used when -registering payments. - -.. image:: bank/bank-account-number.png - :alt: Edit your bank information - -Bank feeds ----------- - -:guilabel:`Bank Feeds` defines how the bank transactions are registered. Three options are -available: - -- :guilabel:`Undefined yet`, which should be selected when you don’t know yet if you will - synchronize your bank account with your database or not. -- :guilabel:`Import (CAMT, CODA, CSV, OFX, QIF)`, which should be selected if you want to import - your bank statements and transactions using a different format. -- :guilabel:`Automated Bank Synchronization`, which should be selected if your bank is synchronized - with your database. - -.. seealso:: - - :doc:`bank/bank_synchronization` - - :doc:`bank/transactions` - -.. _accounting/bank/outstanding-accounts: - -Outstanding accounts -==================== - -By default, payments in Odoo do not create journal entries, but they can easily be configured to -create journal entries using **outstanding accounts**. - -- An **outstanding receipts account** is where incoming payments are posted until they are linked - with incoming bank transactions. -- An **outstanding payments account** is where outgoing payments are posted until they are linked - with outgoing bank transactions. - -These accounts are usually of :ref:`type ` :guilabel:`Current Assets` and -:guilabel:`Current Liabilities`. - -Payments that are registered in Odoo are posted to the outstanding receipts and outstanding accounts -until they are reconciled. At any moment, the outstanding receipts account's balance in the general -ledger shows the balance of registered incoming payments that have not yet been reconciled, and the -outstanding payments account's balance in the general ledger shows the balance of registered -outgoing payments that have not yet been reconciled. - -Bank and cash journal configuration ------------------------------------ - -To configure payments to create journal entries, set outstanding accounts for the journal's payment -methods. This can be done for any journal with the :ref:`type ` -:guilabel:`Bank` or :guilabel:`Cash`. - -To configure the outstanding accounts for a journal's payment methods, first go to -:menuselection:`Accounting --> Configuration --> Journals` and select a bank or cash journal. In the -:guilabel:`Incoming Payments` and :guilabel:`Outgoing Payments` tabs, set :guilabel:`Outstanding -Receipts accounts` and :guilabel:`Outstanding Payments accounts` for each payment method that you -want to create journal entries. - -.. note:: - - If the main bank account of the journal is added as an outstanding receipts account or - outstanding payments account, when a payment is registered, the invoice or bill's status is - directly set to :guilabel:`Paid`. - - If the outstanding receipts or outstanding payments account for a payment method is left blank, - registering a payment with that payment method will not create any journal entry. + - A default :ref:`bank journal ` is available and can be used to + configure your bank account by going to :menuselection:`Accounting --> Configuration --> + Accounting: Journals --> Bank`. Open it and edit the different fields to match your bank + account information. .. toctree:: :titlesonly: diff --git a/content/applications/finance/accounting/bank/bank-journal-config.png b/content/applications/finance/accounting/bank/bank-journal-config.png deleted file mode 100644 index e60972fc1d..0000000000 Binary files a/content/applications/finance/accounting/bank/bank-journal-config.png and /dev/null differ diff --git a/content/applications/finance/accounting/bank/reconciliation.rst b/content/applications/finance/accounting/bank/reconciliation.rst index 0ee8dd93ca..e626718b6d 100644 --- a/content/applications/finance/accounting/bank/reconciliation.rst +++ b/content/applications/finance/accounting/bank/reconciliation.rst @@ -56,10 +56,9 @@ Transactions ------------ Every :doc:`transaction ` is linked to a journal entry that debits/credits the -journal's main account and its :ref:`suspense account ` until it is fully -reconciled. At that point, the suspense account is replaced with the account of the counterpart item -or, in the case of :ref:`manual matching `, the selected -account. +journal's main account and its suspense account until it is fully reconciled. At that point, the +suspense account is replaced with the account of the counterpart item or, in the case of +:ref:`manual matching `, the selected account. .. _accounting/reconciliation/action-buttons: diff --git a/content/applications/finance/accounting/get_started.rst b/content/applications/finance/accounting/get_started.rst index 4341b0b4c4..5b9b5569ad 100644 --- a/content/applications/finance/accounting/get_started.rst +++ b/content/applications/finance/accounting/get_started.rst @@ -191,6 +191,7 @@ Get started with Stripe and enable secure integrated credit and debit card payme get_started/cheat_sheet get_started/chart_of_accounts get_started/consolidation + get_started/journals get_started/multi_currency get_started/avg_price_valuation get_started/tax_units diff --git a/content/applications/finance/accounting/get_started/chart_of_accounts.rst b/content/applications/finance/accounting/get_started/chart_of_accounts.rst index eba7abcf4c..843e37a1a2 100644 --- a/content/applications/finance/accounting/get_started/chart_of_accounts.rst +++ b/content/applications/finance/accounting/get_started/chart_of_accounts.rst @@ -54,45 +54,45 @@ Correctly configuring the **account type** is critical as it serves multiple pur To configure an account type, open the :guilabel:`Type` field's drop-down selector and select the corresponding type from the following list: -+---------------+--------------+-------------------------+ -| Report | Category | Account Types | -+===============+==============+=========================+ -| Balance Sheet | Assets | Receivable | -| | +-------------------------+ -| | | Bank and Cash | -| | +-------------------------+ -| | | Current Assets | -| | +-------------------------+ -| | | Non-current Assets | -| | +-------------------------+ -| | | Prepayments | -| | +-------------------------+ -| | | Fixed Assets | -| +--------------+-------------------------+ -| | Liabilities | Payable | -| | +-------------------------+ -| | | Credit Card | -| | +-------------------------+ -| | | Current Liabilities | -| | +-------------------------+ -| | | Non-current Liabilities | -| +--------------+-------------------------+ -| | Equity | Equity | -| | +-------------------------+ -| | | Current Year Earnings | -+---------------+--------------+-------------------------+ -| Profit & Loss | Income | Income | -| | +-------------------------+ -| | | Other Income | -| +--------------+-------------------------+ -| | Expense | Expense | -| | +-------------------------+ -| | | Depreciation | -| | +-------------------------+ -| | | Cost of Revenue | -+---------------+--------------+-------------------------+ -|Other | Other | Off-Balance Sheet | -+---------------+--------------+-------------------------+ ++---------------+-------------+-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| Report | Category | Account Types | Description | ++===============+=============+=========================+=================================================================================================================+ +| Balance Sheet | Assets | Receivable | Money owed to the company by customers for goods or services delivered | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Bank and Cash | Funds held in company bank accounts or on hand as cash | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Current Assets | Short-term assets expected to be converted into cash within a year | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Non-current Assets | Long-term assets not expected to be converted to cash within a year | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Prepayments | Payments made in advance for goods or services to be received in the future | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Fixed Assets | Tangible long-term assets like buildings, machinery, and vehicles used in operation and subject to depreciation | +| +-------------+-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | Liabilities | Payable | Money the company owes to suppliers or vendors | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Credit Card | Balances and transactions associated with company credit card usage | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Current Liabilities | Obligations due within one year, such as short-term loans or accrued expenses | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Non-current Liabilities | Long-term debts and financial obligations due beyond one year | +| +-------------+-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | Equity | Equity | The owner's residual interest in the company after liabilities are deducted from assets | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Current Year Earnings | The company's net profit or loss accumulated in the current fiscal year | ++---------------+-------------+-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| Profit & Loss | Income | Income | Revenue generated from the company's primary business activities | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Other Income | Revenue from secondary or non-operational sources, like interest or asset sales | +| +-------------+-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | Expense | Expense | Costs incurred during operations to generate revenue | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Depreciation | The allocation of the cost of tangible assets over their useful life | +| | +-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| | | Cost of Revenue | Direct costs attributable to the production or delivery of goods and services | ++---------------+-------------+-------------------------+-----------------------------------------------------------------------------------------------------------------+ +| Other | Other | Off-Balance Sheet | Transactions not displayed on the balance sheet or profit and loss report | ++---------------+-------------+-------------------------+-----------------------------------------------------------------------------------------------------------------+ Assets ~~~~~~ @@ -156,18 +156,12 @@ and select :guilabel:`Hierarchy and Subtotals`. Allow reconciliation -------------------- -Some accounts, such as accounts made to record the transactions of a payment method, can be used for -the reconciliation of journal entries. +To keep the reconciliation process simple, when reconciling a bank, cash, or credit card transaction +with an existing journal item, only journal items that debit or credit accounts with the +:guilabel:`Allow reconciliation` option enabled are displayed as possible matches. -For example, an invoice paid with a credit card can be marked as :guilabel:`paid` if reconciled with -its payment. Therefore, the account used to record credit card payments needs to be configured as -**allowing reconciliation**. - -To do so, check the :guilabel:`Allow Reconciliation` box in the account's settings, and -:guilabel:`Save`; or enable the button from the chart of accounts view. - -.. image:: chart_of_accounts/chart-of-accounts-reconciliation.png - :alt: Allow reconciliation for accounts in Odoo Accounting +To enable this option on an account, tick the :guilabel:`Allow Reconciliation` checkbox in the +account's settings, and :guilabel:`Save`; or enable the button from the chart of accounts view. .. _coa_shared_accounts: diff --git a/content/applications/finance/accounting/get_started/chart_of_accounts/chart-of-accounts-reconciliation.png b/content/applications/finance/accounting/get_started/chart_of_accounts/chart-of-accounts-reconciliation.png deleted file mode 100644 index 8e17776bba..0000000000 Binary files a/content/applications/finance/accounting/get_started/chart_of_accounts/chart-of-accounts-reconciliation.png and /dev/null differ diff --git a/content/applications/finance/accounting/get_started/journals.rst b/content/applications/finance/accounting/get_started/journals.rst new file mode 100644 index 0000000000..c9492bfd1c --- /dev/null +++ b/content/applications/finance/accounting/get_started/journals.rst @@ -0,0 +1,266 @@ +======== +Journals +======== + +Journal entries are recorded in different **journals** to maintain an organized record of a +company's financial transactions. Odoo uses six different types of journals to organize accounting +records: + +- :ref:`Bank ` +- :ref:`Cash ` +- :ref:`Credit Card ` +- :ref:`Sales ` +- :ref:`Purchase ` +- :ref:`Miscellaneous ` + +.. note:: + It is possible to have multiple journals of the same type, such as two separate bank journals, + each for a unique bank account, or two separate sales journals to track :abbr:`B2B (business to + business)` versus :abbr:`B2C (business to customer)` income. + +.. _accounting/journals/configuration: + +Configuration +============= + +Each card on the :guilabel:`Accounting Dashboard` represents a journal. To edit the configuration of +a journal, click the :icon:`fa-ellipsis-v` :guilabel:`(vertical ellipsis)` on the journal card, then +click :guilabel:`Configuration`. Alternatively, go to :menuselection:`Accounting --> Configuration +--> Journals` to select and edit an existing journal or to create a new one. + +While different journal types have slightly different fields to configure, some fields are +consistent across all the journal types: + +- :guilabel:`Short Code`: Each journal must have a unique code (from 1 to 5 characters long). The + short code is used as the prefix for all journal entries belonging to this journal. +- :guilabel:`Currency`: If desired, set the currency of this journal. For bank and cash journals, + this is the currency of the journal's :doc:`transactions <../bank/transactions>`. This field is + only visible when :doc:`multiple currencies ` are enabled. + +The :guilabel:`Advanced Settings` tab contains more technical options: + +- :guilabel:`Allowed accounts`: Limit which accounts are available when recording journal entries in + this journal. Leave this field blank to allow all accounts. +- :guilabel:`Email Alias`: Set an email address to create journal entries by digitizing PDFs sent + to this address. This is most commonly used to create :ref:`customer invoices and vendor bills + `. +- :guilabel:`Secure Posted Entries with Hash`: Restrict the :doc:`alterability + <../reporting/data_inalterability>` of this journal's entries to comply with tax authorities in + certain countries. + +.. warning:: + The :guilabel:`Secure Posted Entries with Hash` option cannot be removed from a journal once the + journal has a posted journal entry. + +.. note:: + - Bank and cash journals do not have the :guilabel:`Secure Posted Entries with Hash` or + :guilabel:`Email Alias` fields. + - If an :ref:`alias domain ` has not yet been configured, a link to + :icon:`fa-arrow-right` :guilabel:`Configure Alias Domain` is displayed instead of the + :guilabel:`Email Alias` field. + +.. _accounting/journals/bank-cash-cc: + +Bank, cash, and credit card journals +------------------------------------ + +Bank, cash, and credit card journals share the following features: + +- :guilabel:`Suspense Account`: :doc:`../bank/transactions` on this journal are posted on this + account until they are reconciled, at which point this account is replaced with the account the + transaction was reconciled against. At any moment, the suspense account's balance in the general + ledger shows the balance of transactions that have not yet been reconciled. + + .. note:: + When a bank transaction is reconciled, the journal entry is modified to replace the bank + suspense account with the account of the journal item it is reconciled with. This account is + usually either: + + - the :ref:`outstanding receipts or payments account + ` if reconciling with a registered payment; or + - the account receivable or payable if reconciling with an invoice or bill directly. + +- :guilabel:`Dedicated Payment Sequence`: Tick this field to use separate sequences for payments + and transactions posted on this journal. + + .. note:: + If the :guilabel:`Dedicated Payment Sequence` field is ticked, payments that use an + :ref:`outstanding account ` will have references that + add :guilabel:`P` before the journal's short code. Otherwise, the references will begin with + :guilabel:`PAY`. + +The :guilabel:`Incoming Payments` and :guilabel:`Outgoing Payments` tabs contain the :ref:`payment +methods ` of this journal. Different payment methods are +available depending on the journal type. If desired, set :ref:`outstanding accounts +` on the payment methods. + +.. seealso:: + - :doc:`../bank` + - :doc:`multi_currency` + - :doc:`../bank/transactions` + - `Bank configuration `_ + +.. _accounting/journals/outstanding-accounts: + +Outstanding accounts +~~~~~~~~~~~~~~~~~~~~ + +By default, payments in Odoo do not create journal entries, but they can be configured to create +journal entries by using **outstanding accounts** on :ref:`bank ` and +:ref:`cash ` journals. + +- An **outstanding receipts account** is where incoming payments are posted until they are linked + with incoming bank transactions. +- An **outstanding payments account** is where outgoing payments are posted until they are linked + with outgoing bank transactions. + +These accounts are usually of :ref:`type ` :guilabel:`Current Assets` and +:guilabel:`Current Liabilities`. + +Payments that are registered in Odoo are posted to the outstanding receipts and outstanding accounts +until they are reconciled. At any moment, the outstanding receipts account's balance in the general +ledger shows the balance of registered incoming payments that have not yet been reconciled, and the +outstanding payments account's balance in the general ledger shows the balance of registered +outgoing payments that have not yet been reconciled. + +Configuration +************* + +To configure outstanding accounts, go to :menuselection:`Accounting --> Configuration --> Journals` +and select or create a bank or cash journal. In the :guilabel:`Incoming Payments` and +:guilabel:`Outgoing Payments` tabs, set :guilabel:`Outstanding Receipts accounts` and +:guilabel:`Outstanding Payments accounts` for each payment method that you want to create journal +entries. + +.. note:: + - If the main bank account of the journal is added as an outstanding receipts account or + outstanding payments account, when a payment is registered, the invoice or bill's status is + directly set to :guilabel:`Paid`. + - If the outstanding receipts or outstanding payments account for a payment method is left blank, + registering a payment with that payment method will not create any journal entry. + +.. _accounting/journals/bank: + +Bank +~~~~ + +Bank journals are used to record journal entries related to :doc:`bank transactions +<../bank/transactions>` and incoming and outgoing :doc:`payments <../payments>`. The following +fields are specific to bank journals: + +- :guilabel:`Bank Account`: This :guilabel:`Bank and Cash` type account is the default account for + this bank journal. +- :guilabel:`Account Number`: The bank account's number is used when registering payments and is + required for generating outgoing payment files, such as :doc:`SEPA <../payments/pay_sepa>` or + :ref:`NACHA `. To edit the bank account details, click on the + :icon:`oi-arrow-right` :guilabel:`(Internal link)` button next to the :guilabel:`Account Number` + and update the account information accordingly. +- :guilabel:`Bank`: The bank name is used when registering payments and is required for generating + outgoing payment files. To edit the bank account details, click on the :icon:`oi-arrow-right` + :guilabel:`(Internal link)` button next to the :guilabel:`Bank` name and update the account + information accordingly. +- :guilabel:`Bank Feeds`: Define the method of creating bank :doc:`transactions + <../bank/transactions>`, whether :guilabel:`Manual` or via :doc:`Online Synchronization + <../bank/bank_synchronization>`. +- :guilabel:`Split Transactions`: Split collective payments for CODA files. + +Multiple payment methods are available for bank journals, as are configurations for generating +outgoing payment files, such as :doc:`SEPA <../payments/pay_sepa>` or :ref:`NACHA `. + +.. _accounting/journals/cash: + +Cash +~~~~ + +Cash journals are used to record journal entries related to cash :doc:`transactions +<../bank/transactions>`. The following fields are specific to cash journals: + +- :guilabel:`Cash Account`: This :guilabel:`Bank and Cash` type account is the default account for + this cash journal. +- :guilabel:`Profit Account`: This :guilabel:`Income` or :guilabel:`Other Income` type account is + used to register a profit when the ending balance of a cash register is greater than expected. +- :guilabel:`Loss Account`: This :guilabel:`Expenses` type account is used to register a loss when + the ending balance of a cash register is less than expected. + +Only manual payment methods are available for cash journals. + +.. _accounting/journals/credit: + +Credit card +~~~~~~~~~~~ + +Credit card journals are used to record journal entries related to credit cards. The following +fields are specific to credit card journals: + +- :guilabel:`Journal Account`: This :guilabel:`Credit Card` type account is the default account for + this credit card journal. +- :guilabel:`Bank Feeds`: Define the method of creating credit card transactions, whether manual or + via :doc:`Online Synchronization <../bank/bank_synchronization>`. + +Only manual payment methods are available for credit card journals. + +.. _accounting/journals/sales-purchase-misc: + +Sales, purchase, and miscellaneous journals +------------------------------------------- + +.. _accounting/journals/sales: + +Sales +~~~~~ + +Sales journals, also known as income journals, are used to record journal entries related to +:doc:`customer invoices <../customer_invoices>`. The following fields are specific to customer +invoice journals: + +- :guilabel:`Default Income Account`: Invoices in this journal use this :guilabel:`Income` or + :guilabel:`Other Income` type account unless overwritten by another income account set on the + product category, product, or invoice line itself. +- :guilabel:`Dedicated Credit Note Sequence`: Check this box to use a separate sequence for the + reference of credit notes that increments separately from the main invoice sequence and adds an + `R` to the reference before the journal's short code. +- :guilabel:`Dedicated Debit Note Sequence`: Check this box to use a separate sequence for the + reference of credit notes that increments separately from the main invoice sequence and adds a `D` + before the journal's short code. + +Sales journals have additional fields in the :guilabel:`Advanced Settings` tab that allow you to set +the default communication format that will appear on customer invoices so that the customer can +refer to that particular invoice when making a payment: + +- :guilabel:`Communication Type`: Choose if the format of the payment reference communicated to the + customer should be based on the invoice number or the customer's number. +- :guilabel:`Communication Standard`: Choose the format of the payment reference itself that is + communicated to the customer. + +.. _accounting/journals/purchase: + +Purchase +~~~~~~~~ + +Purchase journals are used to record journal entries related to :doc:`vendor bills +<../vendor_bills>`. The following fields are specific to purchase journals: + +- :guilabel:`Default Expense Account`: Vendor bills in this journal use this :guilabel:`Expense` + type account unless overwritten by another expense account set on the product category, product, + or expense. +- :guilabel:`Private Part Account`: Select the account to be used to register the private part of + mixed expenses. +- :guilabel:`Dedicated Credit Note Sequence`: Check this box to use a separate sequence for the + reference of credit notes that increments separately from the main vendor bill sequence and adds + an `R` to the reference before the journal's short code. +- :guilabel:`Dedicated Debit Note Sequence`: Check this box to use a separate sequence for the + reference of credit notes that increments separately from the main invoice sequence and adds a `D` + before the journal's short code. + +.. _accounting/journals/misc: + +Miscellaneous +~~~~~~~~~~~~~ + +Miscellaneous journals are used to record journal entries that are not related to any of the other +journal types such as tax closing journal entries. + +.. seealso:: + - `Tax return eLearning `_ + - :doc:`../reporting/tax_returns` + - :doc:`../taxes` diff --git a/content/applications/finance/accounting/payments.rst b/content/applications/finance/accounting/payments.rst index d6994482d8..df127e0b32 100644 --- a/content/applications/finance/accounting/payments.rst +++ b/content/applications/finance/accounting/payments.rst @@ -113,8 +113,8 @@ After the payment is registered, the customer invoice or vendor bill is marked a .. group-tab:: Without outstanding accounts - If no :ref:`outstanding accounts ` are configured, no - journal entry is created. To display more information about the payment, click the + If no :ref:`outstanding accounts ` are configured, + no journal entry is created. To display more information about the payment, click the :guilabel:`Payments` smart button. When the invoice or vendor bill is :doc:`reconciled ` with a bank @@ -130,11 +130,11 @@ After the payment is registered, the customer invoice or vendor bill is marked a By default, payments in Odoo do not create journal entries, but they can easily be configured to create journal entries using :ref:`outstanding accounts - `. + `. Registering a payment on a customer invoice or vendor bill generates a new journal entry and reduces the :guilabel:`Amount Due` based on the payment amount. The counterpart is - reflected in an :ref:`outstanding ` **receipts** or + reflected in an :ref:`outstanding ` **receipts** or **payments** account. At this point, the customer invoice or vendor bill is marked as :guilabel:`In payment`. Then, when the payment is :doc:`reconciled ` with a bank transaction, the invoice or vendor bill status changes to :guilabel:`Paid`. @@ -172,7 +172,7 @@ directly linked to an invoice or bill. .. group-tab:: Without outstanding accounts Payments that are not linked to an invoice or bill should not be registered without using - :ref:`outstanding accounts `, as there is no way to + :ref:`outstanding accounts `, as there is no way to associate the payment with the invoice or bill since no journal entry is created for the payment. The amount paid or received is not reflected in the accounting and the :guilabel:`Amount Due` is not updated based on the payment amount. diff --git a/content/applications/finance/accounting/payments/batch_sdd.rst b/content/applications/finance/accounting/payments/batch_sdd.rst index 010f8df0e2..af89ec89a2 100644 --- a/content/applications/finance/accounting/payments/batch_sdd.rst +++ b/content/applications/finance/accounting/payments/batch_sdd.rst @@ -153,7 +153,7 @@ automatically withdraws the amount of that payment from the recipient's account, transaction for a negative amount is created to reflect the |sdd| rejection. |sdd| rejections are handled differently depending on whether :ref:`outstanding accounts -` are configured or not for the |sdd| payment method. +` are configured or not for the |sdd| payment method. .. note:: The following procedures assume that the incoming |sdd| payment's bank transaction has already @@ -163,8 +163,8 @@ transaction for a negative amount is created to reflect the |sdd| rejection. .. tab:: Without outstanding accounts - If no :ref:`outstanding accounts ` are configured for - the |sdd| payment method, no journal entry is created. In this case, you must cancel and + If no :ref:`outstanding accounts ` are configured + for the |sdd| payment method, no journal entry is created. In this case, you must cancel and unreconcile the payment. #. Access the invoice linked to the rejected |sdd| payment. @@ -180,11 +180,11 @@ transaction for a negative amount is created to reflect the |sdd| rejection. .. tab:: Using outstanding accounts - If an :ref:`outstanding account ` is set on the |sdd| - payment method, |sdd| payments create journal entries. If an |sdd| payment is rejected, you - must reverse the journal entry associated with the rejected payment and reconcile the reversal - of the journal entry with the transaction for the |sdd| rejection. To do so, follow these - steps: + If an :ref:`outstanding account ` is set on the + |sdd| payment method, |sdd| payments create journal entries. If an |sdd| payment is rejected, + you must reverse the journal entry associated with the rejected payment and reconcile the + reversal of the journal entry with the transaction for the |sdd| rejection. To do so, follow + these steps: #. Access the invoice linked to the rejected |sdd| payment. #. Click the :icon:`fa-info-circle` :guilabel:`(information)` icon in the footer of the diff --git a/content/applications/finance/accounting/reporting/year_end.rst b/content/applications/finance/accounting/reporting/year_end.rst index 8f265df59b..58b95784f4 100644 --- a/content/applications/finance/accounting/reporting/year_end.rst +++ b/content/applications/finance/accounting/reporting/year_end.rst @@ -47,7 +47,7 @@ Before closing a fiscal year, ensure that everything is accurate and up-to-date: - Confirm that all :doc:`vendor bills <../vendor_bills>` have been created and confirmed. - Ensure the accuracy of all :doc:`expenses <../../expenses>` and validate them. - Check that all :doc:`received payments <../payments>` have been encoded and confirmed. -- Close all :ref:`suspense accounts `. +- Close all :ref:`suspense accounts `. - Book all :doc:`depreciation <../vendor_bills/assets>` and :doc:`deferred revenue <../customer_invoices/deferred_revenues>` entries. diff --git a/content/applications/finance/accounting/taxes.rst b/content/applications/finance/accounting/taxes.rst index 3f7514c302..94b2fb70a3 100644 --- a/content/applications/finance/accounting/taxes.rst +++ b/content/applications/finance/accounting/taxes.rst @@ -20,9 +20,9 @@ are also used to prefill the :guilabel:`Taxes` field when adding a new line on a .. image:: taxes/default-configuration.png :alt: Odoo fills out the Tax field automatically according to the Default Taxes -To change your **default taxes**, go to :menuselection:`Accounting --> Configuration --> Settings ---> Taxes --> Default Taxes`, select the appropriate taxes for your default sales tax and purchase -tax, and click on :guilabel:`Save`. +To change your **default taxes**, go to :menuselection:`Accounting --> Configuration --> Settings`, +scroll down to the :guilabel:`Taxes` section, select the appropriate default sales and purchase +taxes in the :guilabel:`Default Taxes` field, and click on :guilabel:`Save`. .. image:: taxes/default-taxes.png :alt: Define which taxes to use by default on Odoo @@ -173,6 +173,46 @@ Tax scope The :guilabel:`Tax Scope` restricts the use of taxes to a type of product, either **goods** or **services**. +.. _taxes/tax-mapping: + +Tax mapping +----------- + +Taxes can be combined with :doc:`fiscal positions ` to map taxes to each +other so that the correct tax is applied based on the customer's or vendor's location and business +type. + +When configuring a tax, leave the :guilabel:`Fiscal Position` field blank to apply the tax across +all fiscal positions or select specific fiscal positions where this tax should be used. If one or +multiple fiscal positions are selected, use the :guilabel:`Replaces` field to select all of the +taxes that this tax should replace for the selected fiscal position(s). + +To replace one tax with multiple other taxes, configure each of the replacement taxes to replace the +default product tax. + +.. example:: + As a sales tax, the :guilabel:`0% Exports` tax applies to quotations, sales orders, and invoices + that use the :guilabel:`Foreign Trade` fiscal position. On those records, any time that the + :guilabel:`15%` tax would be used, the :guilabel:`0% Exports` tax is used instead. + +.. note:: + Since the first fiscal position in the sequence is considered the company's default, the taxes + set on products are expected to be used with that fiscal position, so the :guilabel:`Replaces` + field is not displayed on it. + + .. image:: taxes/tax-mapping-example.png + :alt: The **0% Exports** tax record + +.. tip:: + To more easily view which taxes are replaced, use the :icon:`oi-settings-adjust` + :guilabel:`adjust settings` in the taxes list view and display the :guilabel:`Replaces` field. + + .. image:: taxes/tax-mapping-list.png + :alt: The **Replaces** field shown in the list view + +.. note:: + Tax mapping only works with :ref:`taxes/active` taxes. + .. _taxes/definition-tab: Definition tab diff --git a/content/applications/finance/accounting/taxes/fiscal_positions.rst b/content/applications/finance/accounting/taxes/fiscal_positions.rst index cd3556c786..3646c3143b 100644 --- a/content/applications/finance/accounting/taxes/fiscal_positions.rst +++ b/content/applications/finance/accounting/taxes/fiscal_positions.rst @@ -3,11 +3,11 @@ Fiscal positions (tax and account mapping) ========================================== Default taxes and accounts are set on products and customers to create new transactions on the fly. -However, depending on the customers' and providers' localization and business type, using different +However, depending on the customers' and vendors' location and business type, using different taxes and accounts for a transaction might be necessary. -**Fiscal positions** allow the creation of rules to adapt the taxes and accounts used for a -transaction automatically. +**Fiscal positions** allow the creation of rules to adapt the taxes and the income and expense +accounts used for a transaction automatically. They can be applied :ref:`automatically `, :ref:`manually `, or :ref:`assigned to a partner `. @@ -16,38 +16,39 @@ They can be applied :ref:`automatically `, :ref:`man Several default fiscal positions are available as part of your :ref:`fiscal localization package `. +.. _fiscal_positions/configuration: + Configuration ============= - .. _fiscal_positions/mapping: +To edit or create a fiscal position, go to :menuselection:`Accounting --> Configuration --> Fiscal +Positions`, and open the record to modify or click :guilabel:`New`. -Tax and account mapping ------------------------ +.. tip:: + If any notes are legally required when using this fiscal position, add them in the + :guilabel:`Legal Notes...` field below the :ref:`tax mapping ` + section to display them on quotations, sales orders, invoices, and bills. -To edit or create a fiscal position, go to :menuselection:`Accounting --> Configuration --> Fiscal -Positions`, and open the entry to modify or click on :guilabel:`New`. +.. _fiscal_positions/tax-mapping: -The mapping of taxes and accounts is based on the default taxes and accounts defined in the -product form. +Tax mapping +----------- -- To map to another tax or account, fill out the right column (:guilabel:`Tax to Apply`/ - :guilabel:`Account to Use Instead`). +Fiscal positions are required to map taxes. :ref:`Tax mapping ` is configured on +taxes themselves. -.. image:: fiscal_positions/fiscal-positions-tax-mapping.png - :align: center - :alt: Example of a fiscal position's tax mapping +.. _fiscal_positions/account-mapping: -.. image:: fiscal_positions/fiscal-positions-account-mapping.png - :align: center - :alt: Example of a fiscal position's account mapping +Account mapping +--------------- -- To remove a tax, leave the field :guilabel:`Tax to Apply` empty. -- To replace a tax with several other taxes, add multiple lines using the same :guilabel:`Tax on - Product`. +Account mapping is based on the income and expense accounts defined on the product or product +category. To map to another account, select the account to be replaced in the left column +(:guilabel:`Account on Product`) and select the account to use instead in the right column +(:guilabel:`Account to Use Instead`). -.. note:: - The mapping only works with *active* taxes. Therefore, make sure they are active by going to - :menuselection:`Accounting --> Configuration --> Taxes`. +.. image:: fiscal_positions/fiscal-positions-account-mapping.png + :alt: Example of a fiscal position's account mapping Application =========== @@ -68,7 +69,6 @@ From there, several conditions can be activated: selected country or country group. .. image:: fiscal_positions/fiscal-positions-automatic.png - :align: center :alt: Example of a fiscal position automatic application settings .. note:: @@ -91,12 +91,11 @@ From there, several conditions can be activated: Manual application ------------------ -To manually select a fiscal position, open a sales order, invoice, or bill, go to the -:guilabel:`Other Info` tab and select the desired :guilabel:`Fiscal Position` before adding product -lines. +To manually select a fiscal position, open a sales order, purchase order, invoice, or bill, go to +the :guilabel:`Other Info` tab and select the desired :guilabel:`Fiscal Position` before adding +product lines. .. image:: fiscal_positions/fiscal-positions-manual.png - :align: center :alt: Selection of a fiscal position on a sales order, invoice, or bill .. _fiscal_positions/partner: @@ -109,9 +108,12 @@ To define which fiscal position must be used by default for a specific partner, :guilabel:`Sales & Purchase` tab, and select the :guilabel:`Fiscal Position`. .. image:: fiscal_positions/fiscal-positions-customer.png - :align: center :alt: Selection of a fiscal position on a customer +.. tip:: + To view all partners at once instead of only customers, remove the :guilabel:`Customer Invoices` + filter or use the **Contacts** application. + .. seealso:: * :doc:`../taxes` diff --git a/content/applications/finance/accounting/taxes/fiscal_positions/fiscal-positions-tax-mapping.png b/content/applications/finance/accounting/taxes/fiscal_positions/fiscal-positions-tax-mapping.png deleted file mode 100644 index ace6efff75..0000000000 Binary files a/content/applications/finance/accounting/taxes/fiscal_positions/fiscal-positions-tax-mapping.png and /dev/null differ diff --git a/content/applications/finance/accounting/taxes/tax-mapping-example.png b/content/applications/finance/accounting/taxes/tax-mapping-example.png new file mode 100644 index 0000000000..1b95f868e0 Binary files /dev/null and b/content/applications/finance/accounting/taxes/tax-mapping-example.png differ diff --git a/content/applications/finance/accounting/taxes/tax-mapping-list.png b/content/applications/finance/accounting/taxes/tax-mapping-list.png new file mode 100644 index 0000000000..145c22a0bb Binary files /dev/null and b/content/applications/finance/accounting/taxes/tax-mapping-list.png differ diff --git a/content/applications/finance/fiscal_localizations/argentina.rst b/content/applications/finance/fiscal_localizations/argentina.rst index 7315e6f888..7846701a43 100644 --- a/content/applications/finance/fiscal_localizations/argentina.rst +++ b/content/applications/finance/fiscal_localizations/argentina.rst @@ -696,9 +696,9 @@ Taxes` and removing the default :guilabel:`Sale or Purchase` filter. To verify t `: Journal entries are *not* created when payments are posted unless :ref:`outstanding accounts -` are set up. Thus, for this feature to work properly, it is -important to verify that *all* payment methods within the bank journals have an outstanding payment -and receipt account set. +` are set up. Thus, for this feature to work properly, it +is important to verify that *all* payment methods within the bank journals have an outstanding +payment and receipt account set. .. image:: argentina/l10n-ar-outstanding-payments.png :alt: An outstanding payment account must be set. diff --git a/content/applications/finance/fiscal_localizations/belgium.rst b/content/applications/finance/fiscal_localizations/belgium.rst index ef32ded339..7db802dc0c 100644 --- a/content/applications/finance/fiscal_localizations/belgium.rst +++ b/content/applications/finance/fiscal_localizations/belgium.rst @@ -428,6 +428,76 @@ Potential issues :guilabel:`CodaBox` section, click on :guilabel:`Manage Connection`, then click on :guilabel:`Revoke`. +.. _belgium/codaclean: + +Codaclean +--------- + +**Codaclean** is a service that allows Belgian companies and accounting firms to access bank +information and statements. Odoo provides a way to import such statements and their transactions +automatically. + +.. _belgium/codaclean-configuration: + +Configuration +~~~~~~~~~~~~~ + +.. note:: + Make sure to :ref:`install ` the :guilabel:`Codaclean` (`l10n_be_codaclean`) + module. + + +.. _belgium/codaclean-configuration-connection: + +Connection with Odoo +******************** + +To connect Odoo with Codaclean, follow these steps: + +#. Open the Settings app, navigate to the :ref:`Companies ` section, and + click :icon:`oi-arrow-right` :guilabel:`Manage Companies` to make sure the company's + :guilabel:`Country` is set to :guilabel:`Belgium`. +#. Go to :menuselection:`Accounting --> Configuration --> Settings` and scroll to the + :guilabel:`Codaclean` section. +#. Click :guilabel:`Manage Connection` to open the connection wizard, enter the Codaclean + :guilabel:`Username` and :guilabel:`Password` and click :guilabel:`Connect`. + +The :guilabel:`Status` is updated to :guilabel:`Connected`. + +.. tip:: + Once the connection is established, the :guilabel:`Manage Connection` wizard provides two options: + + - Update Codaclean credentials: Enter the new :guilabel:`Username` and :guilabel:`Password`, then + click :guilabel:`Change Credentials`. + - Remove Codaclean connection: Click :guilabel:`Disconnect`; no :guilabel:`Username` or + :guilabel:`Password` is required. + +.. _belgium/codaclean-configuration-journal: + +Journal creation +**************** + +A specific bank journal must be created for Codaclean synchronization. To do so, :doc:`create a new +bank journal <../accounting/bank>`, make sure to enter the correct IBAN in the :guilabel:`Bank +Account Number` field, and select :guilabel:`Codaclean Syncronization` in the :guilabel:`Bank Feeds` +field. + +.. tip:: + For bank transactions in different currencies, it is recommended to create a separate journal for + each currency, using the same bank account. + +.. _belgium/codaclean-synchronization: + +Synchronization +~~~~~~~~~~~~~~~ + +Once the connection is established, Odoo is synchronized with Codaclean, and new CODA files received +via Codaclean are checked every twelve hours. + +.. tip:: + To manually check for new CODA files, go to the Accounting Dashboard and click :guilabel:`Fetch + from Codaclean` on the relevant :ref:`journal ` . + Electronic invoicing ==================== diff --git a/content/applications/finance/fiscal_localizations/india.rst b/content/applications/finance/fiscal_localizations/india.rst index ade13a55e9..bf8c2ba511 100644 --- a/content/applications/finance/fiscal_localizations/india.rst +++ b/content/applications/finance/fiscal_localizations/india.rst @@ -425,153 +425,146 @@ Username`. File-in GST Return ------------------ -When the :guilabel:`GST E-Filing & Matching Feature` is enabled, you can file your GST return. Go -to :menuselection:`Accounting --> Reporting --> India --> GST Return periods` and create a new -**GST Return Period** if it does not exist. GST Return file-in is done in **three steps** in Odoo: +To file a GST return, make sure the :ref:`GST E-Filing & Matching Feature +` is enabled. Then, go to the Accounting dashboard and click +:guilabel:`Tax Returns` on the :guilabel:`Tax Returns` journal. In the +:guilabel:`Accounting Periods` window, fill in the following fields. -.. note:: - **Tax Return Periodicity** can be - :doc:`configured <../accounting/reporting/tax_returns>` according to the user's - needs. - -.. _india/gstr-1: - -Send GSTR-1 -~~~~~~~~~~~ - -#. Click :guilabel:`GSTR-1 Report` to verify the :ref:`GSTR-1 ` report before - uploading it to the **GST portal**. - - .. image:: india/gst-gstr-1-verify.png - :alt: GSTR-1 verify - - .. note:: - The system performs basic validations to ensure compliance with the GST portal's requirements. - Possible issues include: - - - **Incorrect Tax Application:** The tax type does not match the :guilabel:`Fiscal Position` - (:guilabel:`CGST/SGST` applied instead of :guilabel:`IGST` for interstate transactions, or - :guilabel:`IGST` applied instead of :guilabel:`CGST/SGST` for intrastate transactions). - - **Missing HSN Code:** No HSN Code is defined for the product. - - **Invalid HSN Code for Services:** The HSN Code for a service does not start with "99" or is - incorrect. - - **Non-compliant UQC:** The Unit Quantity Code (UQC) does not meet Indian GST standards. - - If any validation fails, the system alerts users with a warning, highlighting the - discrepancies and providing a direct link to the affected lines. - - .. image:: india/gst-gstr-1-validation.png - :alt: GSTR-1 validation warning - -#. Click :guilabel:`Generate` to view the report in **Spreadsheet view**. - - .. image:: india/gst-gstr-1-generate.png - :alt: GSTR-1 generate - - .. image:: india/gst-gstr-1-spreadsheet-view.png - :alt: GSTR-1 Spreadsheet View - -#. If the **GSTR-1** report is correct, then click :guilabel:`Push to GSTN` to send it to the **GST - portal**. The status of the :guilabel:`GSTR-1` report changes to :guilabel:`Sending`. - - .. image:: india/gst-gstr-1-sending.png - :alt: GSTR-1 in the Sending Status +- :guilabel:`Opening Date`: Starting date from which tax return periods are created. +- :guilabel:`Fiscal Year End`: End date of the fiscal year (e.g., :guilabel:`31 March`). +- :guilabel:`GSTIN Periodicity`: Frequency of return filing (e.g., :guilabel:`Monthly`). -#. After a few seconds, the status of the **GSTR-1** report changes to :guilabel:`Waiting for - Status`. It means that the **GSTR-1** report has been sent to the :guilabel:`GST Portal` and is - being verified on the :guilabel:`GST Portal`; +.. tip:: + Alternatively, go to :menuselection:`Accounting --> Reporting --> Tax Report`, click + :icon:`fa-book` :guilabel:`Report:` and select :guilabel:`GSTR-1 (IN)`. Then, click + :guilabel:`Returns` to file the return. - .. image:: india/gst-gstr-1-waiting.png - :alt: GSTR-1 in the Waiting for Status +.. note:: + To reconcile vendor bills with GST portal data, go to + :menuselection:`Accounting --> Reporting --> Tax Report`, click :icon:`fa-book` + :guilabel:`Report:` and select :guilabel:`GSTR-2B`, and click :guilabel:`Reconcile`. -#. Once more, after a few seconds, the status either changes to :guilabel:`Sent` or :guilabel:`Error - in Invoice`. The status :guilabel:`Error in Invoice` indicates that some of the invoices are not - correctly filled out to be validated by the **GST portal**; +.. _india/gstr-1: - - If the state of the **GSTR-1** is :guilabel:`Sent`, it means your **GSTR-1** report is ready to - be filed on the **GST portal**. +Filing GSTR-1 tax return +~~~~~~~~~~~~~~~~~~~~~~~~ - .. image:: india/gst-gstr-1-sent.png - :alt: GSTR-1 Sent +To file a GSTR-1 tax return, follow these steps: - - If the state of the **GSTR-1** is :guilabel:`Error in Invoice`, invoices can be checked for - errors in the chatter. Once issues have been resolved, the user can click - :guilabel:`Push to GSTN` to submit the file again on the **GST portal**. +#. Click the suitable :guilabel:`GSTR-1` report for the desired period to open the filing view. - .. image:: india/gst-gstr-1-error.png - :alt: GSTR-1 Error in Invoice + .. image:: india/gst-gstr-1-file.png + :alt: GSTR-1 filing view -#. Click :guilabel:`Mark as Filed` after filing the **GSTR-1** report on the **GST portal**. The - status of the report changes to :guilabel:`Filed` in **Odoo**. + .. note:: + It is recommended to file the return **five days before the filing date** to avoid any + penalties. - .. image:: india/gst-gstr-1-filed.png - :alt: GSTR-1 in the Filed Status +#. Odoo automatically performs validation checks before submission to ensure compliance with GST + portal requirements that must be addressed before filing. -.. _india/gstr-2B: + .. note:: + The following types of validation issues can be raised: + + - :guilabel:`Apply Appropriate Tax`: :guilabel:`IGST` is not applicable for intra-state + transactions. + - :guilabel:`Wrong CGST/SGST on Inter-State Transactions`: :guilabel:`CGST/SGST` cannot be + applied on inter-state transactions. + - :guilabel:`Fiscal Year Reversed Move`: Credit Notes for invoices issued in a given financial + year should not be included in GSTR-1 after **November 30th**; remove tax from these lines. + - :guilabel:`Invalid HSN Codes`: + - For products (non-services), HSN codes must not begin with `99`. + - For services, HSN codes must begin with `99`. + - :guilabel:`Missing HSN Codes`: Some product lines do not have HSN codes for journal + items. + - :guilabel:`Invalid UQC Codes`: The Unit Quantity Code (UQC) must comply with Indian GST + standards. + - :guilabel:`Missing Document Summary`: Document summary lines are mandatory for GSTR-1. This + check is always marked as :guilabel:`Anomaly` initially. After reviewing the summary by + clicking the relevant check, it changes to :guilabel:`Reviewed`. + - :guilabel:`Missing E-Invoice`: Some invoices are not linked to an e-invoice. + - :guilabel:`Unlinked Unregistered Credit Notes`: Credit Notes have been issued without + referencing an invoice. + + Validation checks have four stages: + + - :guilabel:`To Review`: Check requires review. + - :guilabel:`Reviewed`: Check has been reviewed. + - :guilabel:`Supervised`: Check is supervised, and a supervisor is assigned. + - :guilabel:`Anomaly`: Check has failed. + + Click on any individual check to view and resolve the corresponding issue. -Receive GSTR-2B -~~~~~~~~~~~~~~~ + .. tip:: + A tax return can only be validated when all checks are in the :guilabel:`Reviewed` or + :guilabel:`Supervised` stage. -Users can retrieve the **GSTR-2B Report** from the **GST portal**. This automatically reconciles -the **GSTR-2B** report with your Odoo bills; + After reviewing the checks, click :guilabel:`Validate`. The :guilabel:`Review` stage appears in + green then. -#. Click :guilabel:`Fetch GSTR-2B Summary` to retrieve the **GSTR-2B** summary. After a few seconds, - the status of the report changes to :guilabel:`Waiting for Reception`. This means Odoo is trying - to receive the **GSTR-2B** report from the **GST portal**; +#. Click :guilabel:`GSTR-1 (IN)` to review the report. - .. image:: india/gst-gstr-2b-waiting.png - :alt: GSTR-2B in Waiting for Reception +#. Click :guilabel:`Submit`, and click :guilabel:`Push Data` in the + :guilabel:`Submission Instructions` window to send the report to the GST portal. -#. Once more, after a few seconds, the status of the **GSTR-2B** changes to the :guilabel:`Being - Processed`. It means Odoo is reconciling the **GSTR-2B** report with your Odoo bills; + During this step, GST portal credentials must be verified. As the data is being sent, the + :guilabel:`Send` stage in the progress bar appears orange. Once the GST portal confirms receipt, + the stage turns green. If an error occurs, the :guilabel:`Send` stage changes to red. - .. image:: india/gst-gstr-2b-processed.png - :alt: GSTR-2B in Waiting for Reception + .. note:: + Click the :icon:`fa-ellipsis-v` :guilabel:`(ellipsis)` icon on the relevant :guilabel:`GSTR-1` + line to display additional options: -#. Once it is done, the status of the **GSTR-2B** report changes to either :guilabel:`Matched` or - :guilabel:`Partially Matched`; + - :guilabel:`Generate XLSX`: Download the GSTR-1 report as an XLSX file. + - :guilabel:`Reset`: Clear the current state and revert the return to the initial stage. - - If the status is :guilabel:`Matched`: +#. Click :guilabel:`Check Status` to retrieve the current status from the GST portal. + Once the confirmation is received, the :guilabel:`Review` stage in the progress bar turns green. + Then, click :guilabel:`Mark as Filed` to finalize and submit the return as filed. - .. image:: india/gst-gstr-2b-matched.png - :alt: GSTR-2B Matched + .. important:: + Once a return is marked as **Filed**, it cannot be reset or filed again. - - If the status is :guilabel:`Partially Matched`, you can review and modify the bills by - clicking :guilabel:`View Reconciled Bills`. This will display categorized discrepancies, such - as bills missing in Odoo or GSTR-2. After making the necessary corrections, click - :guilabel:`re-match` to update the reconciliation and ensure accuracy before finalizing the - report. +.. _india/gstr-2b: - .. image:: india/gst-gstr-2b-partially.png - :alt: GSTR-2B Partially Matched +Receive GSTR-2B tax reconciliation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. _india/gstr-3: +#. Select the relevant :guilabel:`GSTR-2B` report for the desired period that needs to be + reconciled. -GSTR-3 report -~~~~~~~~~~~~~ +#. In the validation checks view, click :guilabel:`Fetch E-Invoice` to retrieve vendor e-invoice + data for the reconciliation period. The check is initially marked as :guilabel:`Anomaly` and + changes to :guilabel:`Reviewed` after fetching. Then, click :guilabel:`Validate` to confirm and + mark the :guilabel:`Review` stage as green. -The :ref:`GSTR-3 ` report is a monthly summary of **sales** and **purchases**. -This return is auto-generated by extracting information from **GSTR-1** and **GSTR-2**. + .. important:: + The :guilabel:`Fetch E-Invoice` check only turns green if the e-invoice data is fetched + **two days after the end of the last month's reconciliation period**. -#. Users can compare the **GSTR-3** report with the **GSTR-3** report available on the - **GST portal** to verify if they match by clicking :guilabel:`GSTR-3 Report`; +#. Click :guilabel:`Fetch GSTR-2B` to retrieve all invoices from the GST portal. Once the data is + fetched, the :guilabel:`Fetch` stage in the progress bar turns green. To view the raw report + data, click :guilabel:`GSTR-2B (IN)`. -#. Once the **GSTR-3** report has been verified by the user and the tax amount on the **GST portal** - has been paid. Once paid, the report can be **closed** by clicking :guilabel:`Closing Entry`; +#. The fetched invoices are automatically matched with the E-invoices. Click :guilabel:`View Bills` + to see detailed matching results. - .. image:: india/gst-gstr-3-not_filed.png - :alt: GSTR-3 + .. note:: + The :guilabel:`Match` stage indicates the reconciliation status: -#. In :guilabel:`Closing Entry`, add the tax amount paid on the **GST portal** using challan, and - click :guilabel:`POST` to post the :guilabel:`Closing Entry`; + - Orange: Partially matched (some bills require correction). + - Green: Fully matched (all bills reconciled). - .. image:: india/gst-gstr-3-post.png - :alt: GSTR-3 Post Entry + In case of mismatches, correct the affected bills, then click the :icon:`fa-ellipsis-v` + :guilabel:`(ellipsis)` icon to access additional options: -#. Once posted, the **GSTR-3** report status changes to :guilabel:`Filed`. + - :guilabel:`Re-Match`: Re-run the matching process after making corrections. + - :guilabel:`Reset`: Reset the reconciliation to the :guilabel:`Match` stage. - .. image:: india/gst-gstr-3-filed.png - :alt: GSTR-3 Filed +#. After all bills are fully matched, click the :icon:`fa-ellipsis-v` :guilabel:`(ellipsis)` icon + and select :guilabel:`Mark as Complete`. + The :guilabel:`Complete` stage in the progress bar turns green, finalizing the bill + reconciliation. .. _india/gstr_reports: @@ -587,23 +580,35 @@ The :guilabel:`GSTR-1` report is divided into sections. It displays the :guilabe :abbr:`CGST (Central Goods and Services Tax)`, :abbr:`SGST (State Goods and Service Tax)`, :abbr:`IGST (Integrated Goods and Services Tax)`, and :guilabel:`CESS` for each section. - .. image:: india/gst-gstr-1-sale-report.png + .. image:: india/gst-gstr-1-report.png :alt: GSTR-1 Report -.. _india/gstr-3_report: +.. _india/gstr-2b_report: -GSTR-3 report -------------- +GSTR-2B report +-------------- + +The :guilabel:`GSTR-2` report is divided into sections. It displays the :guilabel:`Base` amount, +:abbr:`CGST (Central Goods and Services Tax)`, :abbr:`SGST (State Goods and Service Tax)`, +:abbr:`IGST (Integrated Goods and Services Tax)`, and :guilabel:`CESS` for each section. + + .. image:: india/gst-gstr-2b-report.png + :alt: GSTR-2B Report + +.. _india/gstr-3b_report: + +GSTR-3B report +-------------- -The :guilabel:`GSTR-3` report contains different sections: +The :guilabel:`GSTR-3B` report contains different sections: - Details of inward and outward supply subject to a **reverse charge**; - Eligible :abbr:`ITC (Income Tax Credit)`; - Values of **exempt**, **Nil-rated**, and **non-GST** inward supply; - Details of inter-state supplies made to **unregistered** persons. - .. image:: india/gst-gstr-3-report.png - :alt: GSTR-3 Report + .. image:: india/gst-gstr-3b-report.png + :alt: GSTR-3B Report Profit and Loss (IN) report --------------------------- diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-error.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-error.png deleted file mode 100644 index ca4caa1a15..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-error.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-file.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-file.png new file mode 100644 index 0000000000..8484054401 Binary files /dev/null and b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-file.png differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-filed.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-filed.png deleted file mode 100644 index 273d823ba8..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-filed.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-generate.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-generate.png deleted file mode 100644 index 66c2d4e4fe..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-generate.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-report.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-report.png new file mode 100644 index 0000000000..0b8720f00f Binary files /dev/null and b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-report.png differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-sale-report.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-sale-report.png deleted file mode 100644 index 0f71b165a7..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-sale-report.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-sending.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-sending.png deleted file mode 100644 index 9dccb719f8..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-sending.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-sent.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-sent.png deleted file mode 100644 index 5ae01fd28e..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-sent.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-spreadsheet-view.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-spreadsheet-view.png deleted file mode 100644 index f91327178e..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-spreadsheet-view.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-validation.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-validation.png deleted file mode 100644 index f99e9a1135..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-validation.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-verify.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-verify.png deleted file mode 100644 index a874060e7f..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-verify.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-waiting.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-1-waiting.png deleted file mode 100644 index 9ada52f7c7..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-1-waiting.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-matched.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-matched.png deleted file mode 100644 index 819785fad3..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-matched.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-partially.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-partially.png deleted file mode 100644 index 45bee9abea..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-partially.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-processed.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-processed.png deleted file mode 100644 index 043667dbca..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-processed.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-report.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-report.png new file mode 100644 index 0000000000..fbb634c9d8 Binary files /dev/null and b/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-report.png differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-waiting.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-waiting.png deleted file mode 100644 index cca7919308..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-2b-waiting.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-3-filed.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-3-filed.png deleted file mode 100644 index e7714ca3e6..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-3-filed.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-3-not_filed.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-3-not_filed.png deleted file mode 100644 index 9ec59fe894..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-3-not_filed.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-3-post.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-3-post.png deleted file mode 100644 index e72d8d1bce..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-3-post.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-3-report.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-3-report.png deleted file mode 100644 index 04cc5e27bd..0000000000 Binary files a/content/applications/finance/fiscal_localizations/india/gst-gstr-3-report.png and /dev/null differ diff --git a/content/applications/finance/fiscal_localizations/india/gst-gstr-3b-report.png b/content/applications/finance/fiscal_localizations/india/gst-gstr-3b-report.png new file mode 100644 index 0000000000..0d3e78c64d Binary files /dev/null and b/content/applications/finance/fiscal_localizations/india/gst-gstr-3b-report.png differ diff --git a/content/applications/finance/fiscal_localizations/mexico.rst b/content/applications/finance/fiscal_localizations/mexico.rst index 676444fd62..f0a183b0a6 100644 --- a/content/applications/finance/fiscal_localizations/mexico.rst +++ b/content/applications/finance/fiscal_localizations/mexico.rst @@ -11,6 +11,7 @@ Mexico Deferred)` .. |PUE| replace:: :abbr:`PUE (Pago en una Sola Exhibición/Payment in a Single Exhibition)` .. |CFDI| replace:: :abbr:`CFDI (Comprobante Fiscal Digital por Internet)` +.. |IEPS| replace:: :abbr:`IEPS (Impuesto Especial sobre Producción y Servicios)` .. _l10n/mx/modules: @@ -30,14 +31,14 @@ The following modules are automatically installed with the Mexican localization: - `l10n_mx` - The default :doc:`fiscal localization package <../fiscal_localizations>` adds accounting characteristics for the Mexican localization, such as: the most common taxes and the chart of - accounts – based on `the SAT account grouping code + accounts — based on `the SAT account grouping code `_. * - :guilabel:`EDI for Mexico` - `l10n_mx_edi` - Includes all the technical and functional requirements to generate and validate :doc:`electronics documents <../accounting/customer_invoices/electronic_invoicing>` — based on the technical documentation published by the |SAT|. This allows you to send invoices (with - or without addedums) and payment complements to the government. + or without addendums) and payment complements to the government. * - :guilabel:`Odoo Mexican Localization Reports` - `l10n_mx_reports` - Adapts reports for Mexico's electronic accounting: chart of accounts, trial balance, and @@ -66,7 +67,8 @@ if meeting a specific requirement for the business. * - :guilabel:`Mexico - Electronic Delivery Guide` - `l10n_mx_edi_stock` - Lets you create a *Carta Porte*: A bill of lading that proves to the government you are - sending goods between A & B with a signed electronic document. + sending goods between A & B with a signed electronic document. It will also install the + :doc:`Fleet <../../hr/fleet>` app. * - :guilabel:`Odoo Mexico Localization for Stock/Landing` - `l10n_mx_edi_landing` - Allows managing customs numbers related to landed costs in electronic documents. @@ -82,25 +84,19 @@ if meeting a specific requirement for the business. - `l10n_mx_edi_website_sale` - Adds extra fields to the :doc:`eCommerce <../../websites/ecommerce>` module to comply with the Mexican electronic invoicing requirements - * - :guilabel:`Employees - Mexico` - - `l10n_mx_hr` - - Adds extra fields to the :doc:`Employees <../../hr/employees>` module to comply with local - information for employees. - * - :guilabel:`Mexico - Payroll with Accounting` - - `l10n_mx_hr_payroll_account` - - Adds the required rules and parameters to manage local payroll calculation with the - :doc:`Payroll <../../hr/payroll>` app. .. _l10n/mx/video-tutorials: Video tutorials =============== -Videos on the Mexican localization are also available. Basic workflows and most topics covered -on this page are also available in video format, please check out the following: +Videos on the Mexican localization are also available. Basic workflows and most topics covered on +this page are also available in video format, please check out the following: -- `Odoo Smart Tutorial - Mexican localization `_ -- `Basic configurations and Youtube playlist `_ +- `Odoo Smart Tutorial - Mexican localization + `_ +- `Basic configurations and Youtube playlist + `_ .. _l10n/mx/overview: @@ -132,9 +128,9 @@ modules in Odoo: #. Have a `Certificado de Sello Digital / Digital Seal Certificate `_ (CSD). #. Choose a |PAC|. Currently, Odoo works with the following |PAC|\s: `Solución Factible - `_, - `Quadrum `_, and - `SW Sapien - Smarter Web `_. + `_, `Quadrum + `_, and `SW Sapien - Smarter Web + `_. .. _l10n/mx/company: @@ -148,9 +144,9 @@ select the company to configure. Enter the full :guilabel:`Address` in the resulting form, including: :guilabel:`ZIP` code, :guilabel:`State`, :guilabel:`Country`, and |RFC| (:guilabel:`Tax ID` number). -According to the requirements of the |CFDI| 4.0, the name of the main company contact **must** -match the business name registered in the |SAT|, without the legal entity abbreviation. This is the -same for the :guilabel:`ZIP` code. +According to the requirements of the |CFDI| 4.0, the name of the main company contact **must** match +the business name registered in the |SAT|, without the legal entity abbreviation. This is the same +for the :guilabel:`ZIP` code. .. important:: From a legal point of view, Mexican companies **must** use the local currency (MXN). To use @@ -167,22 +163,33 @@ Regime` that applies to the company from the drop-down list, and click :guilabel URGATE` as the :guilabel:`Company Name`. For the :guilabel:`Fiscal Regime`, use :guilabel:`General de Ley Personas Morales`. +Branches +-------- + +When using branches, all the invoicing information will be taken from the main company except for +the zip. Unless the |RFC| is set on the branch, then the information will be taken directly from the +branch. + +Branches enable users to establish multiple brands within the same parent company. Additionally, +when different fiscal regimes are required for invoicing purposes, it is necessary to create a +branch for each regime. By default, the regime is inherited from the parent company. However, if the +regime is explicitly set on the branch, Odoo will adopt the regime applicable to that branch. + .. _l10n/mx/contacts: Contacts -------- .. note:: - :ref:`Install ` the Contacts application to access contact records. + :ref:`Install ` the **Contacts** application to access contact records. -To create a contact that can be invoiced, go to :menuselection:`Contacts --> Create`. Then, enter -the contact name, full :guilabel:`Address` including the :guilabel:`ZIP` code, :guilabel:`State`, -:guilabel:`Country`, and |RFC| (:guilabel:`Tax ID`). +To create a contact that can be invoiced, go to the :menuselection:`Contacts` app and click +:guilabel:`New`. Then, enter the contact name, full :guilabel:`Address` including the +:guilabel:`ZIP` code, :guilabel:`State`, :guilabel:`Country`, and |RFC| (:guilabel:`Tax ID`). .. important:: - As with your own company, all contacts must have their correct business name registered in the - |SAT|. This also applies to the :guilabel:`Fiscal Regime`, which needs to be added in the - :guilabel:`Sales & Purchase` tab. + As with the company itself, all contacts must have their correct business name registered in the + |SAT|. The :guilabel:`Fiscal Regime` must also be added in the :guilabel:`Sales & Purchase` tab. .. warning:: Having a |RFC| (:guilabel:`Tax ID`) set but no :guilabel:`Country` configured may result in @@ -196,25 +203,48 @@ Taxes In order to properly sign invoices, set the :ref:`Factor Type ` and :ref:`Tax Object ` fields on sales taxes. +.. tip:: + RESICO ISR withholdings and some |IEPS| taxes are created automatically, but the feature is not + active by default. To enable it, go to :menuselection:`Accounting --> Configuration --> Taxes`. + .. _l10n/mx/factor-type: Factor type ~~~~~~~~~~~ -Both the :guilabel:`SAT Tax Type` and :guilabel:`Factor Type` fields are pre-loaded in the default -taxes. If new taxes are created, these fields must be set. To do so, go to -:menuselection:`Accounting --> Configuration --> Taxes`, then fill both fields in the -:guilabel:`Advanced Options` tab for all tax records, with the :guilabel:`Tax Type` set as -:guilabel:`Sales`. +Both the **Factor Type** and **SAT Tax Type** fields are pre-loaded in the default taxes. + +For new taxes, set these fields in :menuselection:`Accounting --> Configuration --> Taxes` and click +:guilabel:`New`. Set the :guilabel:`Tax Type` to :guilabel:`Sales`. In the :guilabel:`Advanced +Options` tab, fill :guilabel:`SAT Tax Type` and :guilabel:`Factor Type` fields. Odoo supports four groups of :guilabel:`SAT Tax Types`: :guilabel:`IVA`, :guilabel:`ISR`, :guilabel:`IEPS`, and :guilabel:`Local Taxes`. +If the factor type is :guilabel:`Quota`, standard calculation methods cannot be used. Instead, set +the tax calculation computation to :guilabel:`Custom Formula`. + +.. example:: + .. math:: + result = quantity * 6.455 + + - *quantity* = the number of items in the transaction + - *6.455* = the quota value (a fixed amount per unit) + - Only per-unit quotas are supported, not quotas based on other factors + .. tip:: Mexico manages two different kinds of 0% VAT to accommodate two scenarios: - - For *0% VAT*, set the :guilabel:`Factor Type` as :guilabel:`Tasa` - - For *VAT Exempt*, set the :guilabel:`Factor Type` as :guilabel:`Exento` + - For *0% VAT*, set the :guilabel:`Factor Type` to :guilabel:`Tasa` + - For *VAT Exempt*, set the :guilabel:`Factor Type` to :guilabel:`Exento` + +.. note:: + Local taxes are generated in a separate node in the XML file, these do not get validated by the + |PAC|. + +.. warning:: + Quotas and custom formulas require the :guilabel:`Define Taxes as Python Code` module. See + :doc:`Taxes <../accounting/taxes>`. .. _l10n/mx/tax-object: @@ -222,22 +252,55 @@ Tax object ~~~~~~~~~~ One requirement of the CFDI 4.0 is that the resulting XML file handles the breakdown of taxes of the -operation in accordance with the regulation. There are three different possible values that are +operation in accordance with the regulation. There are eight different possible values that are added in the XML file: -- `01`: Not subject to tax: This value is added automatically if the invoice line doesn't contain - any taxes. -- `02`: Subject to tax: This is the default configuration of any invoice line that contains taxes. -- `03`: Subject to tax and not forced to break down: This value can be triggered on demand for - certain customers to replace the value `02`. +- `01`: No tax Object: This value is added automatically if the invoice line doesn't contain any + taxes. +- `02`: Tax Object: This is the default configuration of any invoice line that contains taxes. +- `03`: Tax Object and doesn't require breakdown: This can only be added manually. +- `04`: Tax Object and doesn't have tax: This can only be added manually. +- `05`: Tax Object, VAT for PODEBI: This can only be added manually. +- `06`: VAT Object, No VAT forwarded: This object will be selected when there is an ISR withholding + and no VAT tax. +- `07`: No VAT forwarded, |IEPS| breakdown: This object will be selected when there is an ISR + withholding, |IEPS| tax and no VAT tax. +- `08`: No VAT forwarded, |IEPS| breakdown: This object can only be added manually. + +.. warning:: + Using either 01, 03, 04, or 05 will remove the tax node from the XML file. + +.. important:: + The :guilabel:`IEPS breakdown` status affects the behavior of the tax objects due to the missing + |IEPS| when the breakdown does not happen. + +.. _l10n/mx/local-taxes: + +Local taxes +~~~~~~~~~~~ -To use the `03` value for a contact, navigate to the contact's :guilabel:`Sales & Purchase` tab, and -activate the :guilabel:`No Tax Breakdown` checkbox under the :guilabel:`Fiscal Information` section. +Local taxes (e.g., *ISH*, *Cedullar*) require a separate XML node and may not follow standard tax +logic. + +When configuring a local tax, its name appears in the local tax complement. The rate is treated as a +withholding if negative, or carried forward if positive. + +.. _l10n/mx/ieps-breakdown: + +IEPS breakdown +~~~~~~~~~~~~~~ + +By default Odoo hides the |IEPS| in the invoices so that the subtotal on which the VAT is calculated +includes the amount of |IEPS|, this is to ensure that Fiscal Regimes that do not require it, do not +receive it. + +It is possible to make the |IEPS| visible in the XML by selecting the :guilabel:`IEPS Breakdown` +checkbox inside each contact on the :guilabel:`Sales & Purchase` tab. .. important:: - The :guilabel:`No Tax Breakdown` value applies **only** to specific fiscal regimes and/or taxes. - Consult your accountant first to see if it is needed for your business before making any - modification. + When using either :ref:`eCommerce invoicing ` or the :ref:`Self invoicing + portal `, the customer will have the option to decide whether or not to have + the |IEPS| breakdown. .. _l10n/mx/tax-config: @@ -253,13 +316,34 @@ delete this account**. .. _l10n/mx/products: +Withholdings +------------ + +By default, Odoo includes withholdings with special distributions to allocate VAT. + +When registering an invoice, add the withholding and its corresponding VAT. Both must be included on +the vendor bill to ensure correct accounting. Using :doc:`fiscal positions +<../accounting/taxes/fiscal_positions>` is recommended so the cash-basis entry properly splits the +distribution. + +.. example:: + For a lease vendor bill of `10000 MXN`, the `10.67%` lease withholding corresponds to a `16% VAT + 2/3 H`. Both taxes must be applied together to reflect the correct accounting. + +.. image:: mexico/mx-withholdings-cash-basis.png + :alt: Cash Basis entry with VAT split between paid and due. + +.. note:: + Withholdings |CFDI| is not currently supported. Consult with an accountant the proper + distribution. + Products -------- -To configure products, go to :menuselection:`Accounting --> Customers --> Products`, then select a -product to configure, or :guilabel:`Create` a new one. In the :guilabel:`Accounting` tab, in the -:guilabel:`UNSPSC Product Category` field, select the category that represents the product. The -process can be done manually, or through :doc:`a bulk import <../../essentials/export_import_data>`. +To configure products, go to :menuselection:`Accounting --> Customers --> Products`. Open an +existing product or click :guilabel:`New`. In the :guilabel:`Accounting` tab, set the +:guilabel:`UNSPSC Product Category`. Products and categories can be set manually, or through :doc:`a +bulk import <../../essentials/export_import_data>`. .. note:: All products need to have a |SAT| code associated with them in order to prevent validation @@ -289,9 +373,9 @@ your credentials (:guilabel:`PAC username` and :guilabel:`PAC password`). :alt: Configuring PAC credentials from the Accounting settings. .. tip:: - To test the electronic invoicing without credentials, activate the :guilabel:`MX PAC - test environment` checkbox, and select :guilabel:`Solucion Factible` as the :guilabel:`PAC`. It - is not required to add a username or password for a test environment. + To test the electronic invoicing without credentials, activate the :guilabel:`MX PAC test + environment` checkbox, and select :guilabel:`Solucion Factible` as the :guilabel:`PAC`. It is not + required to add a username or password for a test environment. .. _l10n/mx/certifications: @@ -300,8 +384,8 @@ your credentials (:guilabel:`PAC username` and :guilabel:`PAC password`). The `digital certificates of the company `_ must be uploaded within -the :guilabel:`Certificates` section. To do so, navigate to :menuselection:`Settings --> -General Settings --> Certificates and Keys`. +the :guilabel:`Certificates` section. To do so, navigate to :menuselection:`Settings --> General +Settings --> Certificates and Keys`. Under :guilabel:`Manage your certificates`, click the :icon:`fa-right-arrow` :guilabel:`Keys` link to access the :guilabel:`Keys` list view. Click :guilabel:`Create`, upload the digital @@ -319,8 +403,7 @@ menu. records are optional. .. tip:: - In order to test the electronic invoicing, - the following |SAT| test certificates are provided: + In order to test the electronic invoicing, the following |SAT| test certificates are provided: - :download:`Certificate ` - :download:`Certificate Key ` @@ -346,8 +429,33 @@ Customer invoices To start invoicing from Odoo, a customer invoice must be created using the :doc:`standard invoicing flow <../accounting/customer_invoices>`. -While the document is in draft mode, changes can be made to it (the correct :guilabel:`Payment Way` -or :guilabel:`Usage` that the customer might require can be added, for example.) +While the document is in draft mode, changes can be made to it, some fields take values previously +set on the sale order or the contact. + +The fields that need to be reviewed are: + +- CFDI to public. +- Usage +- Payment Policy +- Payment Method (If Payment Policy is not set as |PPD|) + +.. tip:: + :guilabel:`Usage`, :guilabel:`Payment Policy` and :guilabel:`Payment Method` can be previously + set on a sale order and/or can be set on the contact for every invoice. + +The payment policy is a selectable field on the invoice and can be manually set to the required +policy, however if no policy is selected, Odoo will compute an automatic policy based on the +following general rules: + +The value will be set to |PUE| if the due date in which the payment is expected is within the +current month, in case the date is outside the current month, the policy will be set to |PPD| +instead. + +.. warning:: + If the payment policy is not selected and |PPD| policy is expected, either select an invoice + :guilabel:`Due Date` on a different month than the current one, or choose :guilabel:`Payment + terms` that imply changing the due month (i.e., :guilabel:`30 Days`, or :guilabel:`15 Days`, as + long as they fall on the next month). After clicking on :guilabel:`Confirm` in the customer invoice, click on the :guilabel:`Send` button to process the invoice with the government. Make sure that the :guilabel:`CFDI` checkbox is marked. @@ -370,6 +478,12 @@ To download the PDF file locally, click the :guilabel:`Print` button. On a testing environment, the message :guilabel:`Not Found` will always come up. +.. warning:: + If the partner does not contain the :guilabel:`Country` or :guilabel:`Zip` the invoicing is + assumed as a |CFDI| to public and the invoicing will be addressed to the generic customer. If + however, these fields are left empty and the user unticks the :guilabel:`CFDI to public` + checkbox, a pop-up will appear blocking the operation. + .. _l10n/mx/credit-notes: Credit notes @@ -377,17 +491,43 @@ Credit notes While an invoice is a document type "I" (Ingreso), a credit note is a document type "E" (Egreso). -The only addition to the :doc:`standard flow for credit notes -<../accounting/customer_invoices/credit_notes>` is that, as a requirement of the |SAT|, there has -to be a relation between a credit note and an invoice through the fiscal folio. +An addition to the :doc:`standard flow for credit notes +<../accounting/customer_invoices/credit_notes>` is that, as a requirement of the |SAT|, there has to +be a relation between a credit note and an invoice through the fiscal folio. Because of this requirement, the field :guilabel:`CFDI Origin` adds this relation with a `01|`, -followed by the fiscal folio of the original invoice. +followed by the fiscal folio of the original :abbr:`UUID (universally unique identifier)`. .. tip:: For the :guilabel:`CFDI Origin` field to be automatically added, use the :guilabel:`Add Credit Note` button from the invoice, instead of creating it manually. +Generally credit notes reverse the main sales account defined in the journal, but it is also +possible to globally assign an account to all credit notes. To do so, go to +:menuselection:`Accounting --> Configuration --> Settings` and set the :guilabel:`Credit notes` +account under the :guilabel:`Default Accounts` section. + +.. note:: + On the default configuration, the credit notes account is set as :guilabel:`402.01.01 Returns, + discounts or bonuses over sales and/or services at the general rate`. + +.. _l10n/mx/vendor-bills: + +Vendor bills +~~~~~~~~~~~~ + +Vendor bills have to have a fiscal folio for reports and payments to work correctly, if the vendor +bill was created by the purchase app or added manually, just add the XML file of the invoice on the +chatter **As a log note** and the fiscal folio will be updated accordingly, keep in mind that the +bill **Must be in draft state** for the update to happen. + +.. tip:: + When clicking :guilabel:`Update SAT`, the :guilabel:`SAT status` field on the invoice will + confirm if the XML file is **Validated** by the |SAT|, this is also true for vendor bills. + +.. seealso:: + :doc:`../accounting/vendor_bills` + .. _l10n/mx/payments: Payments @@ -398,28 +538,22 @@ Payments Payment policy ************** -One addition of the Mexican localization is the :guilabel:`Payment Policy` field. `According to -the SAT documentation `_, +One addition of the Mexican localization is the :guilabel:`Payment Policy` field. `According to the +SAT documentation `_, there are two types of payments: - :guilabel:`PUE` (Pago en una Sola Exhibición/Payment in a Single Exhibition) - :guilabel:`PPD` (Pago en Parcialidades o Diferido/Payment in Installements or Deferred) -The difference lies in the :guilabel:`Due Date` or -:doc:`../accounting/customer_invoices/payment_terms` of the invoice. - -To configure |PUE| invoices, navigate to :menuselection:`Accounting --> Customers --> Invoices`, -and either select an invoice :guilabel:`Due Date` within the same month, or choose -:guilabel:`Payment terms` that do not imply changing the due month (i.e., :guilabel:`Immediate -Payment`, or :guilabel:`15 Days` or :guilabel:`21 Days`, as long as they fall within the current -month). +.. warning:: + Payment Complements are only generated if the policy of the invoice is set to |PPD|, please note + that it is a requirement to set the :guilabel:`Payment Method` to something different than **99 - + Por definir**. .. image:: mexico/mx-pue-payment.png :alt: Example of an invoice with the PUE requirements. -To configure |PPD| invoices, navigate to :menuselection:`Accounting --> Customers --> Invoices`, and -select an invoice with a :guilabel:`Due Date` after the first day of the following month. This also -applies if your :guilabel:`Payment Term` is due in the following month. +If the invoice has a due date outside the current month, it will default to |PPD|. .. image:: mexico/mx-ppd-payment.png :alt: Example of an invoice with the PPD requirements. @@ -470,7 +604,14 @@ both the invoice and the payment. Similar to an invoice or credit note, the PDF and XML can be sent to the final customer. To do so, click the :icon:`fa-cog` :guilabel:`(gear)` icon to open the actions drop-down menu and select -:guilabel:`Send receipt by email`. +:guilabel:`Send receipt by email` from the payment view. + +Regardless of whether the payment was created with or without reconciliation, it is possible to +download the payment PDF from the :guilabel:`CFDI` tab on the invoice by clicking the +:guilabel:`print` button. + +.. image:: mexico/mx-print-payment.png + :alt: Example of the print button on the CFDI tab. .. _l10n/mx/invoice-cancellations: @@ -485,6 +626,9 @@ there are two requirements for this: - After 24 hours from the invoice creation, the client must be asked to approve the cancellation. If there is no response within 72 hours, the cancellation is processed automatically. +Invoice cancellations are updated automatically on Odoo but can take some time, to check the status +of the cancellation just press the :guilabel:`Update SAT` button. + Invoice cancellations can be made for one of the following reasons: - 01 - Invoice issued with errors (with related document) @@ -518,8 +662,8 @@ Cancellation reason 01 replaces the previous invoice, along with the related |CFDI|. #. :guilabel:`Confirm` the draft and :guilabel:`Send & Print` the invoice. #. Return to the initial invoice (i.e., the invoice from which you first requested the - cancellation). Notice the :guilabel:`Substituted By` field appears with a reference to the - new replacement invoice. + cancellation). Notice the :guilabel:`Substituted By` field appears with a reference to the new + replacement invoice. #. Click :guilabel:`Request Cancel`. In the :guilabel:`Request CFDI Cancellation` pop-up window, the :guilabel:`01 - Invoice issued with errors (with related document)` option is automatically selected in the :guilabel:`Reason` field. @@ -553,15 +697,14 @@ tab. - The invoice is labeled as *No Cancelable* in the `SAT Website `_. due to the fact that it has a valid related document: Either another invoice linked with the - :guilabel:`CFDI Origin` field or a Payment Complemement. If so, you need to cancel any other + :guilabel:`CFDI Origin` field or a Payment Complement. If so, you need to cancel any other related document first. - The cancellation request is still being processed by the |SAT|. If so, wait a few minutes and try again. - - The final customer needs to reject or accept the cancellation request in their - `Buzón Tributario - `_. This - can take up to 72 hours and, in case that the cancellation requests gets rejected, you will - need to repeat the process again. + - The final customer needs to reject or accept the cancellation request in their `Buzón + Tributario `_. + This can take up to 72 hours and, in case that the cancellation requests gets rejected, you + will need to repeat the process again. .. seealso:: `Tool to validate Mexican Electronic Documents (CFDI) status @@ -588,8 +731,10 @@ Like with invoices, go to the payment and click :guilabel:`Update SAT` in order :guilabel:`SAT Status` and :guilabel:`Status` to :guilabel:`Cancelled`. .. note:: - Just like invoices, when creating a new payment complement, you can add the relation of the - original document, by adding a `04|` plus the fiscal folio in the :guilabel:`CFDI Origin` field. + Just like invoices, when creating a new payment complement, it is possible to add the relation of + the original document, by adding a `04|` plus the fiscal folio in the :guilabel:`CFDI Origin` + field. + This action cancels the invoice and marks the :guilabel:`Reason` as :guilabel:`01 - Invoice issued with errors (with related document)`. @@ -598,6 +743,42 @@ Like with invoices, go to the payment and click :guilabel:`Update SAT` in order Invoicing special use cases ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. _l10n/mx/cfdi-origin: + +CFDI relations +************** + +Sometimes it is needed to relate the current document to previously signed CFDIs, to do so just fill +the :guilabel:`CFDI Origin` field on the invoice indicating a relation, there are 7 possible values: + +- 01: Nota de crédito +- 02: Nota de débito de los documentos relacionados +- 03: Devolución de mercancía sobre facturas o traslados previos +- 04: Sustitución de los CFDI previos +- 05: Traslados de mercancias facturados previamente +- 06: Factura generada por los traslados previos +- 07: CFDI por aplicación de anticipo + +.. tip:: + The format is: Origin Type|UUID1, UUID2, ...., UUIDn where more than one Origin Type can be + added. + +.. example:: + Here is an example with two relations: + + .. code-block:: none + + 04|042FE739-7B45-4D64-B26D-360000876D83, + 07|A164BAF8-8016-428C-A422-D9BD2F68F6A0,CEAD9433-3B77-4270-85BF-AC2519587514 + + - The first section has relation type **04** with **1 UUID** + - The second section has relation type **07** with **2 UUIDs** + +Additionally any combination is also visible on the signed PDF. + +.. image:: mexico/mx-CFDI_3relations.png + :alt: Example of the PDF with 3 relations. + .. _l10n/mx/multicurrency: Multicurrency @@ -610,8 +791,8 @@ use of :doc:`multicurrency <../accounting/get_started/multi_currency>`, navigate Mexico` as the :guilabel:`Service` in the :guilabel:`Automatic Currency Rates` section. Then, set the :guilabel:`Interval` field to the frequency you wish to update the exchange rates. -This way, the XML file of the document will have the correct exchange rate, and the total amount, -in both the foreign currency and in MXN. +This way, the XML file of the document will have the correct exchange rate, and the total amount, in +both the foreign currency and in MXN. It is highly recommended to use separate :doc:`bank accounts for each currency <../accounting/bank/foreign_currency>`. @@ -636,9 +817,9 @@ In order to set this up, navigate to :menuselection:`Sales --> Products --> Prod product `Discounts`, make sure that it has a valid :guilabel:`Tax` (usually :guilabel:`IVA` at `16%`). -After this, create and sign the invoice via CFDI, and add the `Discounts` product at the bottom. In the XML -the discount should be subtracted from the first invoice line available, Odoo will try to subtract -from each line the total amount in order until all the discount has been applied. +After this, create and sign the invoice via |CFDI|, and add the `Discounts` product at the bottom. +In the XML, Odoo will distribute the discount between the lines evenly, while any math differences +will be added in a rounding product. .. tip:: A `Discount` and `UNSPSC Product Category` for each product variant related to :guilabel:`Gift @@ -650,12 +831,12 @@ Down payments ************* A common practice in Mexico is the usage of :doc:`down payments -<../../sales/sales/invoicing/down_payment>`. It's usage primarily consists of cases where you receive -a payment for a good or service where either the product or the price (or both) hasn't been -determinated at the moment. +<../../sales/sales/invoicing/down_payment>`. It's usage primarily consists of cases where you +receive a payment for a good or service where either the product or the price (or both) has not been +fully determined. -The |SAT| allows two diferent ways to handle this process: both of them involve linking all invoices -to each other with the :guilabel:`CFDI Origin` field. +The |SAT| allows two different ways to handle this process: both of them involve linking all +invoices to each other with the :guilabel:`CFDI Origin` field. .. note:: For this process, the :doc:`Sales <../../sales>` app must be installed. @@ -695,12 +876,12 @@ delete the line that contains the product *Anticipo*. be created. Then, copy the :guilabel:`Fiscal Folio` from the down payment invoice, and paste it into the -:guilabel:`CDFI Origin` of the final invoice, adding the prefix `07|` before the value and sign -the document via CFDI. +:guilabel:`CDFI Origin` of the final invoice, adding the prefix `07|` before the value and sign the +document via |CFDI|. Finally, create a credit note for the first invoice. Copy the :guilabel:`Fiscal Folio` from the final invoice, and paste it in the :guilabel:`CFDI Origin` of the credit note, adding the prefix -`07|`. Then, sign the document via CFDI. +`07|`. Then, sign the document via |CFDI|. With this, all electronic documents are linked to each other. The final step is to fully pay the new invoice. At the bottom of the new invoice, you can find the credit note in the @@ -722,7 +903,31 @@ rename the other products :guilabel:`Description` to include the text `CFDI por anticipo`. Don't forget to add the :guilabel:`Fiscal Folio` of the down payment invoice in the :guilabel:`CDFI Origin` of the final invoice, adding the prefix `07|`. -Finally, sign the final invoice via CFDI. +Finally, sign the final invoice via |CFDI|. + +.. _l10n/mx/addendas-and-complements: + +Addendas and complements +************************ + +Addendas and complements can be included in the XML. To add one, go to :menuselection:`Accounting +--> Configuration --> Addendas & Complementos (MX)` and :guilabel:`New` to enter the code to be +injected. Additional fields beyond standard Odoo may be required. + +.. warning:: + This section might require technical knowledge and may risk adding technical debt; it is + recommended to ask your account manager for the best technical advice. + +Once the desired nodes are created, they can be selected on each contact to make them appear on +every invoice addressed to that contact. By default, all the selected nodes will be added +automatically on every invoice. + +It is also possible to just select the nodes as needed on every invoice by selecting the +:guilabel:`Other info` tab and then selecting the desired nodes from :guilabel:`Addendas & +Complementos` + +.. tip:: + It is possible to add more than one per contact or per invoice. .. _l10n/mx/xml-reader: @@ -752,20 +957,20 @@ corresponding information. This can be done for :guilabel:`Vendor Bills` too. .. tip:: - - To retrieve the :guilabel:`Fiscal Folio`, drag and drop XML files for already created draft - invoices. + To retrieve the :guilabel:`Fiscal Folio`, drag and drop XML files as a log note in the chatter + for previously created draft invoices. .. _l10n/mx/cfdi: CFDI to public ************** -The Mexican government requires that any goods or services that are sold must be backed up by -an invoice. If the customer does not require an invoice or has no |RFC|, a -*CFDI to Public* has to be created also known as a "nominative" invoice. +The Mexican government requires that any goods or services that are sold must be backed up by an +invoice. If the customer does not require an invoice or has no |RFC|, a *CFDI to Public* has to be +created also known as a "nominative" invoice. A contact must be created and it must have a particular name. + If the :guilabel:`CFDI to Public` checkbox in either a sales order or an invoice is checked, the final XML will override the data in the invoice contact and will add the following characteristics: @@ -777,17 +982,17 @@ final XML will override the data in the invoice contact and will add the followi .. image:: mexico/mx-cfdi-to-public.png :alt: CFDI to Public Checkbox -.. important:: - If your contact :guilabel:`Country` is empty, the final invoice is considered as a *CFDI to - Public* for national customers. A non-blocking warning will be displayed before signing the - document. - If the final customer doesn't share any details, create a generic :guilabel:`Customer`. The name cannot be `PUBLICO EN GENERAL` or an error will be triggered (it can be, for example, `CLIENTE FINAL`). +.. warning:: + By default sending the invoice is not allowed if the partner does not have either the *Country* + or *Zip code* set, however this is not required if the :guilabel:`CFDI to public` checkbox is + active. + .. seealso:: - `Regla 2.7.1.21 Expedición de comprobantes en operaciones con el público en general. + `Regla 2.7.1.21 Expedición de comprobantes en operaciones con el público en general `_. .. _l10n/mx/global-invoice: @@ -804,7 +1009,8 @@ single invoice that can contain all operations, known as a *global invoice*. For this process, the :doc:`Sales <../../sales/sales>` app must be installed. .. seealso:: - `Guía de llenado del CFDI global `_ + `Guía de llenado del CFDI global + `_ Sales flow ^^^^^^^^^^ @@ -974,8 +1180,8 @@ provided by the |SAT|. For :guilabel:`Return of goods` or :guilabel:`Compensatio :guilabel:`Process Number`, also provided by the |SAT|. .. note:: - To see this report without sending it, use `ABC6987654/99` for the :guilabel:`Order - Number` or `AB123451234512` for the :guilabel:`Process Number`. + To see this report without sending it, use `ABC6987654/99` for the :guilabel:`Order Number` or + `AB123451234512` for the :guilabel:`Process Number`. .. _l10n/mx/diot: @@ -990,18 +1196,22 @@ vendor bills are provided to the |SAT|. .. note:: Since July 2025 the new 2025 version of the report is available. -Unlike other reports, the |DIOT| is uploaded to a software provided by the |SAT| that contains the +Unlike other reports, the |DIOT| is uploaded to a website provided by the |SAT| that contains the A-29 form. In Odoo, you can download the records of your transactions as a TXT file that can be uploaded to the form, avoiding direct capture of this data. -The transactions file contains the total amount of your payments registered in vendor bills, broken -down into the corresponding types of IVA. The :guilabel:`VAT` and :guilabel:`Country` is mandatory -for all vendors. +The transactions file contains the total amount of the payments registered in vendor bills, broken +down into the corresponding types of IVA. The :guilabel:`VAT`, :guilabel:`Country` and +:guilabel:`Type of operation` fields are mandatory for all vendors. To download the |DIOT| report as a TXT file, go to :menuselection:`Accounting --> Reports --> Tax Return`. Select the desired month, click :icon:`fa-cog` :guilabel:`(action menu)`, and select :guilabel:`DIOT (TXT)`. +In case new taxes are created on the database, there are two types of tags, the tags containing +**tax** must go into the tax distribution and the ones with the base name go on the base of the tax. +All lines of a VAT tax **must** containing at least one tax grid. + .. image:: mexico/mx-reports-diot.png :alt: DIOT (TXT) download button. @@ -1036,7 +1246,6 @@ description of the merchandise sold. Since January 1, 2018, external trade is a requirement for taxpayers who carry export operations of type A1. While the current CFDI is 4.0, the external trade is currently on version 2.0. - .. note:: In order to use this feature, the :guilabel:`EDI for Mexico (Advanced Features)` `l10n_mx_edi_extended` module must be installed. @@ -1045,6 +1254,8 @@ type A1. While the current CFDI is 4.0, the external trade is currently on versi Before installing, make sure your business needs to use this feature. Consult your accountant first, if needed, before installing any modules. + The :guilabel:`CFDI to public` checkbox must be ticked when creating foreign invoices. + Configuration ~~~~~~~~~~~~~ @@ -1078,11 +1289,6 @@ following fields completed to avoid errors: #. In the :guilabel:`Sales & Purchase` tab, to activate the :guilabel:`Needs external trade?` checkbox. -.. important:: - - Do not enable the :guilabel:`No Tax Breakdown` option for External Trade customers. Selecting - this option hides mandatory fields that are required for external trade contact configuration. - .. note:: In the resulting XML and PDF files, the :guilabel:`VAT` is automatically replaced by the generic VAT for abroad transactions: `XEXX010101000`. @@ -1123,6 +1329,10 @@ Then, with the correct exchange rate set up in :menuselection:`Accounting --> Se Currency`, set the :guilabel:`Incoterm` and the optional :guilabel:`Certificate Source` fields in the invoice's :guilabel:`Other Info` tab. +.. tip:: + While not mandatory, the information will be more complete if :guilabel:`CFDI to public` is also + active. + Finally, confirm the invoice with the same process as a regular invoice, and click the :guilabel:`Send` button to sign it via CFDI. @@ -1141,13 +1351,14 @@ and creating global invoices. Point of sale flow ------------------ -Other than the standard :doc:`Point of Sale configuration -<../../sales/point_of_sale/configuration>`, the only requirement for the Mexican localization is the -additional fact that each payment method needs to be configured with a correct :guilabel:`Payment -Way`. +On top of the standard :doc:`Point of Sale configuration <../../sales/point_of_sale/configuration>`, +the Mexican localization requires each payment method to be configured with a correct +:guilabel:`Payment Way` as well as a :guilabel:`Re-invoicing account` to handle the accounting for +invoices with the invoicing portal. .. tip:: - By default Odoo creates preconfigured payment methods for cash, credit card, and debit card. + By default, Odoo creates pre-configured payment methods for cash, credit card, and debit card and + assigns the :guilabel:`402.04.01 Re-invoicing` account as default for re-invoicing. While selling on the **Point of Sale**, click the :guilabel:`Customer` button to either create or select a customer. Here it is possible to review customer invoicing information (such as the |RFC| @@ -1176,8 +1387,9 @@ when processing a :ref:`refund `. .. important:: - In the Mexican localization, positive and negative lines in a **POS** session cannot be mixed. - - If a |SAT| validation error occurs customer will get a :doc:`Pro-Forma - <../../sales/sales/invoicing/proforma>` invoice instead. + + - If a |SAT| validation error occurs customer will get a :doc:`Pro-Forma invoice + <../../sales/sales/invoicing/proforma>` instead. .. _l10n/mx/pos/portal: @@ -1199,6 +1411,10 @@ Customers who scan this QR code or follow the URL will access to a menu where th fiscal information, including the *Usage* and *Fiscal Regime* once they enter the five digit code that is also provided on the receipt. +On the journal entries of the session, the previously selected **Re-invoicing account** will be used +to handle reversals of the sales entries when invoices are requested as well as be used as a sales +account for the new invoices. + .. seealso:: :doc:`../../sales/point_of_sale/receipts_invoices` @@ -1235,10 +1451,10 @@ eCommerce ========= The eCommerce adaptation of the Mexican Localization provides and extra step to create invoices that -comply with the |SAT| requirements on :doc:`eCommerce <../../websites/ecommerce>` by retrieving -the customer data after the **Checkout** and even allowing for the signature of **automatic -invoices** after the payment is processed, as well as sending customers the files via email and -granting them access to retrieve their PDF & XML files from their own customer portal. +comply with the |SAT| requirements on :doc:`eCommerce <../../websites/ecommerce>` by retrieving the +customer data after the **Checkout** and even allowing for the signature of **automatic invoices** +after the payment is processed, as well as sending customers the files via email and granting them +access to retrieve their PDF file from their own customer portal. .. _l10n/mx/ecommerce/flow: @@ -1247,17 +1463,43 @@ eCommerce flow During the regular checkout process, a new :guilabel:`Invoicing Info` step appears, where it is possible to request an invoice or not. If :guilabel:`No` is selected, a **CFDI to Public** is -created,. If :guilabel:`Yes` is selected, the :guilabel:`RFC`, :guilabel:`Fiscal Regime`, -and :guilabel:`Usage` are required in order to get all information in the sales order, where its -status will change to :guilabel:`To Invoice`. +created,. If :guilabel:`Yes` is selected, the :guilabel:`RFC`, :guilabel:`Fiscal Regime`, and +:guilabel:`Usage` are required in order to get all information in the sales order, where its status +will change to :guilabel:`To Invoice`. + +Additionally the customer can decide whether or not to request :ref:`IEPS Breakdown +`. .. important:: Make sure to add a :guilabel:`UNSPSC code` to the :ref:`shipping product `. -If you enable the :guilabel:`Automatic Invoicing` in :menuselection:`Settings --> Website --> +If the :guilabel:`Automatic Invoicing` is enabled in :menuselection:`Settings --> Website --> Invoicing`, the electronic document will be signed automatically. +.. _l10n/mx/sales: + +Sales +===== + +The **Sales** app contains fields that make invoicing easier, while the fields themselves do not +change the sales behavior, they are directly copied when creating an invoice. + +The copied fields are: + +- Payment Way +- Payment Policy +- CFDI to public +- Usage + +Additionally, it is possible to get a preview of the invoice for validation purposes with the +customer by installing the :doc:`pro-forma module <../../sales/sales/invoicing/proforma>`. This +module adds the mentioned fields to the sale order as well as: + +- Product code +- Unit code +- Fiscal regime + .. _l10n/mx/subscriptions: Subscriptions @@ -1267,6 +1509,10 @@ While handling subscriptions, all the sales fields are used to create the recurr are automatically signed and sent via email with the PDF and XML attached with no additional manual actions required. +.. important:: + All invoices generated by the subscription app will always be automatically signed with no + exceptions. + .. _l10n/mx/inventory: Inventory @@ -1283,8 +1529,8 @@ goods. According to the `Annex 20 `_ of CFDI 4.0, in documents where the invoiced goods come from a first-hand import operation, the -:guilabel:`Customs Number` field, needs to be added to all lines of products involved with the -operation. +:guilabel:`Customs Number` field needs to be added to all lines of products involved with the +operation, as does the date of the document. .. note:: To do so, the :guilabel:`Odoo Mexico Localization for Stock/Landing` `l10n_mx_edi_landing` module @@ -1304,23 +1550,34 @@ In order to track the correct customs number for a specific invoice, Odoo uses : :menuselection:`Inventory --> Configuration --> Settings`, and in the :guilabel:`Valuation` section, make sure that :guilabel:`Landed Costs` is activated. -Begin by creating a **service-type** product called, `Pedimento`. In the :guilabel:`Purchase` tab, -activate :guilabel:`Is a Landed Cost`, and select a :guilabel:`Default Split Method`. +.. Tip:: + It is recommended to add a :guilabel:`Default Journal` to automatically fill the mandatory + :guilabel:`Journal` field on landed costs even though landed costs that only add customs numbers + without adding :guilabel:`Additional Costs` do not create journal entries. + +Configure the **goods-type** products that hold the customs numbers. To do so, create the products +and complete these three requirements: + +- :guilabel:`Tracking` **must** be set to either :guilabel:`By Lots` or :guilabel:`By Unique Serial + Number` but **not** :guilabel:`By Quantity`. +- :guilabel:`Invoicing Policy` **must** be set to :guilabel:`Delivered quantities`. +- :doc:`Valuation by lots/serial numbers + <../../inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots>` + **must** be enabled. + +This will make the field :guilabel:`Customs invoicing` available on the :guilabel:`Accounting` tab. +Enable the field to use customs numbers with this product. -Then, configure the **goods-type** products that hold the customs numbers. To do so, create the -products, and make sure the :guilabel:`Product Category` has the following configuration: +It is important to make sure the product has a :guilabel:`Product Category` and has the following +configuration: - :guilabel:`Costing Method`: Either :guilabel:`FIFO` or :guilabel:`AVCO` -- :guilabel:`Inventory Valuation`: :guilabel:`Automated` -- :guilabel:`Stock Valuation Account`: :guilabel:`115.01.01 Inventory` -- :guilabel:`Stock Journal`: :guilabel:`Inventory Valuation` -- :guilabel:`Stock Input Account`: :guilabel:`115.05.01 Goods in transit` -- :guilabel:`Stock Output Account`: :guilabel:`115.05.01 Goods in transit` +- :guilabel:`Inventory Valuation`: Either :guilabel:`Periodic` or :guilabel:`Perpetual` .. note:: - Setting the :guilabel:`Inventory Valuation` to :guilabel:`Automated` requires first enabling the - feature. Go to :menuselection:`Accounting --> Configuration --> Settings`, and in the - :guilabel:`Stock Valuation` section, enable :guilabel:`Automatic Accounting`. + The feature works regardless of whether the :doc:`inventory valuation + <../../inventory_and_mrp/inventory/product_management/inventory_valuation/using_inventory_valuation>` + is set to either :guilabel:`Periodic (at closing)` or :guilabel:`Perpetual (at invoicing)`. .. image:: mexico/mx-landing-configuration.png :alt: Storable products general configuration. @@ -1336,28 +1593,40 @@ After configuring the product, follow the standard :doc:`purchase flow Create a purchase order from :menuselection:`Purchase --> Orders --> Purchase Order`. Then, confirm the order to display a :guilabel:`Receipt` smart button. Click on the :guilabel:`Receipt` smart -button and :guilabel:`Validate` the receipt. +button, add the lots or serial numbers and :guilabel:`Validate`. Go to :menuselection:`Inventory --> Operations --> Landed Costs`, and create a new record. In the -:guilabel:`Transfer`, add the receipt that was just validated, add the :guilabel:`Customs number` -and in the :guilabel:`Additional Costs` tab, add the :guilabel:`Pedimento` product. +:guilabel:`Transfer`, add the receipt that was just validated, and add the :guilabel:`Customs +number`. -Optionally, it is possible to add a cost amount. After this, :guilabel:`Validate` the landed cost. -Once :guilabel:`Posted`, all products related to that receipt have the customs number assigned. +.. tip:: + While it is possible to add costs related to the customs number at this stage of the process, it + is highly recommended to create a landed cost from a vendor bill from your customs agent. Learn + more about :doc:`Landed Costs here + <../../inventory_and_mrp/inventory/product_management/inventory_valuation/landed_costs>`. .. warning:: - The :guilabel:`Pedimento Number` field is not editable once it is set, so be careful when - associating the correct number with the transfer(s). + The :guilabel:`Customs number` field is not editable once it is set, and cannot be repeated, + however it is possible to fix the number on the lot or serial number later by selecting a + different landed cost. .. image:: mexico/mx-landing-inventory.png :alt: Customs number on a landed costs Inventory record. +The customs number assigned to a specific lot or serial number can be found on the its registry on +:menuselection:`Inventory --> Products --> Lots/Serial Numbers`. The :guilabel:`L10N Mx Edi Landed +Cost` field can be edited at any time to fix any mistakes that could have occurred when registering +the landed cost. Editing the :guilabel:`L10N Mx Edi Landed Cost` field automatically updates the +:guilabel:`Customs number` and the name of the lot or serial number. + Next, create a sales order and confirm it. Click on the :guilabel:`Delivery` smart button that -appears, and :guilabel:`Validate` the delivery order. +appears, and carefully review the assigned lots/serial numbers to make sure they are the desired +values, after that :guilabel:`Validate` the delivery order. Finally, :ref:`create an invoice from the sales order `, and confirm it. -The invoice line related to the product has a customs number on it. This number matches the customs -number added in the landed cost record created earlier. +The invoice lines are created according to the distribution of the delivery order, in cases where +more than one customs number were selected, Odoo will split the invoice lines by quantity and +customs numbers. .. image:: mexico/mx-landing-invoice.png :alt: Customs number on confirmed sales order product. @@ -1367,8 +1636,8 @@ number added in the landed cost record created earlier. Delivery guide -------------- -A `Carta Porte `_ is a bill of -lading: a document that states the type, quantity, and destination of goods being carried. +A `Carta Porte `_ is a bill +of lading: a document that states the type, quantity, and destination of goods being carried. On July 17th, 2024, version 3.1 of this |CFDI| was implemented for all transportation providers, intermediaries, and owners of goods. Odoo is able to generate a document type "T" (Traslado), which, @@ -1377,6 +1646,19 @@ unlike other documents, is created in a delivery order instead of an invoice or Odoo can create XML and PDF files with (or without) ground transport, and can process materials that are treated as *Dangerous Hazards*. +In order to print the PDF, the delivery order must be signed by the government and then it can be +printed using the :guilabel:`Print Carta Porte` button on the delivery order. + +.. tip:: + The PDF file contains a QR code to verify the CCP code for the authorities. + +In order to transport goods between warehouses, the logistic route must contain a **Delivery** type +of operation. + +.. seealso:: + :doc:`Inter-warehouse replenishment + <../../inventory_and_mrp/inventory/warehouses_storage/replenishment/resupply_warehouses>` + .. note:: In order to use this feature, the :guilabel:`Mexico - Electronic Delivery Guide` `l10n_mx_edi_stock` module must be installed. @@ -1385,7 +1667,9 @@ are treated as *Dangerous Hazards*. and :doc:`Sales <../../sales/sales>` apps installed. .. important:: - Odoo does not support Carta Porte type document type "I" (Ingreso), air, or marine transport. + Odoo does not support Carta Porte type document type "I" (Ingreso), air, train or marine + transport. + Consult your accountant first if this feature is needed before doing any modifications. Configuration @@ -1395,13 +1679,13 @@ Odoo manages two different types of CFDI type "T". Both can be created from eith shipments or delivery orders <../../inventory_and_mrp/inventory/shipping_receiving/daily_operations>`. -- :guilabel:`No Federal Highways` is used when the :guilabel:`Distance to Destination` is `less - than 30 km +- :guilabel:`No Federal Highways` is used when the :guilabel:`Distance to Destination` is `less than + 30 km `_. - :guilabel:`Federal Transport` is used when the :guilabel:`Distance to Destination` exceeds 30 km. -Other than the standard requirements of regular invoicing (the |RFC| of the customer, the UNSPSC -code, etc.), if you are using *No Federal Highways*, no external configuration is needed. +For No Federal Highways, no other configuration is required beyond the standard requirements of +regular invoicing (the |RFC| of the customer, the UNSPSC code, etc.). For *Federal Transport*, several configurations have to be added to contacts, vehicle setups, and products. Those configurations are then included in the XML and PDF files. @@ -1415,29 +1699,36 @@ with the `Official SAT Catalog for Carta Porte `_. .. tip:: - The field, :guilabel:`Locality`, is optional for both addresses. + The :guilabel:`Locality` field is optional for both addresses. .. important:: The origin address used for the delivery guide is set in :menuselection:`Inventory --> Configuration --> Warehouses`. While this is set as the company address by default, you can change it to your correct warehouse address. -Another addition to this feature is the :guilabel:`Vehicle Setups` menu found in -:menuselection:`Inventory --> Settings --> Vehicle Setups`. This menu lets you add all the -information related to the vehicle used for the delivery order. +This feature requires the use of :doc:`Fleet <../../hr/fleet/new_vehicle>` to manage vehicles. The +vehicle setup is managed directly on the vehicle, and all the required fields are only visible after +checking the :guilabel:`L10N Mx Is Freight Vehicle` field. -All fields are mandatory to create a correct delivery guide. +Checking the :guilabel:`L10N Mx Is Freight Vehicle` field displays the :guilabel:`MX Parameters` tab +where the mandatory fields are required to create a correct delivery guide. Additionally the vehicle +**must** contain a :guilabel:`License Plate`, a :guilabel:`Model Year`, and a :guilabel:`Driver`. .. tip:: - The fields, :guilabel:`Vehicle Plate Number` and :guilabel:`Number Plate`, must contain between - 5 and 7 characters. + The :guilabel:`Vehicle Plate Number` and :guilabel:`Number Plate` fields must contain between 5 + and 7 characters. -In the :guilabel:`Intermediaries` section, add the operator of the vehicle. The only mandatory -fields for this contact are the :guilabel:`VAT` and :guilabel:`Operator Licence`. +The main driver of the vehicle is set directly on the :guilabel:`Driver` field, and it is possible +to add more vehicle operators in the :guilabel:`Intermediaries` section. The only mandatory fields +for driver contacts are the :guilabel:`VAT` and :guilabel:`Operator License`. .. image:: mexico/mx-delivery-guide-vehicle.png :alt: Delivery guide vehicle configuration. +.. tip:: + If the vehicle is rented or more intermediaries are required, it is possible to add them in the + :guilabel:`Intermediaries` field. + Products ******** @@ -1446,18 +1737,19 @@ this, there are two extra configurations for products involved in delivery guide - The :guilabel:`Product Type` must be set as :guilabel:`Storable Product` for stock movements to be created. -- In the :guilabel:`Inventory` tab, the field :guilabel:`Weight` must be more than `0`. +- In the :guilabel:`Inventory` tab, the :guilabel:`Weight` field must be more than `0`. .. warning:: - Creating a delivery guide of a product with the value `0` will trigger an error. As the - :guilabel:`Weight` has been already stored in the delivery order, it is needed to return the - products and create the delivery order (and delivery guide) again with the correct amounts. + Creating a delivery guide of a product with the :guilabel:`Weight` set to `0` will trigger an + error. As the :guilabel:`Weight` is immediately stored in the delivery order, it is then + necessary to return the products and recreate the delivery order (and delivery guide) with the + correct values. Sales and inventory flow ~~~~~~~~~~~~~~~~~~~~~~~~ -To create a delivery guide, first, first create and confirm a sales order from :menuselection:`Sales ---> Sales Order`. Click the :guilabel:`Delivery` smart button that is generated, and +To create a delivery guide, first create and confirm a sales order from :menuselection:`Sales --> +Sales Order`. Click the :guilabel:`Delivery` smart button that is generated, and :guilabel:`Validate` the transfer. After the status is set to :guilabel:`Done`, you can edit the transfer, and select the @@ -1468,17 +1760,27 @@ click :guilabel:`Generate Delivery Guide`. The resulting XML can be found in the .. note:: Other than the :guilabel:`UNSPSC` on all products, delivery guides that use :guilabel:`No Federal - Highways` do not require any special configuration to be sent to the government. + Highways` do not require any special configuration to be sent to the government, as they are a + type "T" CFDI with no delivery guide complement. + +If using the :guilabel:`Federal Transport` :guilabel:`Transport Type`, the :guilabel:`Vehicle Setup` +is displayed to be selected. +The :guilabel:`Gross vehicle weight` is taken from the :guilabel:`Vehicle setup` configuration where +it is possible to add additional :guilabel:`Extra weight` to account for the drivers and luggage. -If using the :guilabel:`Federal Transport` :guilabel:`Transport Type`, the tab :guilabel:`MX EDI` -appears. There, enter a value in :guilabel:`Distance to Destination (KM)` greater than `0`, and -select the :guilabel:`Vehicle Setup` used for this delivery. +.. note:: + Odoo will calculate the :guilabel:`Gross vehicle weight` with the following formula: -Finally, add a :guilabel:`Gross Vehicle Weight` and click :guilabel:`Generate Delivery Guide`. + .. math:: + Gross vehicle weight = Vehicle weight + (Weight + Extra Weight) / 1000 -.. tip:: - Delivery Guides can also be created from :guilabel:`Receipts`, either from the Inventory app or - by the standard flow of the Purchase app. +Every delivery requires a value in :guilabel:`Distance to Destination (KM)` greater than `0`. +Finally, enter the :guilabel:`Delivery Date` and click :guilabel:`Generate Delivery Guide`. + +.. note:: + By default the :guilabel:`Scheduled Date` is filled and represents the time at which the shipment + leaves the warehouse and the :guilabel:`Delivery Date` is the time that the shipment is expected + to arrive at its destination. These values are declared in both the XML and PDF. Dangerous hazards ***************** @@ -1500,8 +1802,8 @@ First, select the product from :menuselection:`Inventory --> Products --> Produc hazard (for example *01010101*). If it is not dangerous, enter `0` in the :guilabel:`Hazardous Material Designation Code` field. -In :menuselection:`Inventory --> Settings --> Vehicle Setup`, complete the :guilabel:`Environment -Insurer` and :guilabel:`Environment Insurance Policy` well. After this, continue with the regular +In :guilabel:`MX Parameters`, complete the :guilabel:`Environment +Insurer` and :guilabel:`Environment Insurance Policy` as well. After this, continue with the regular process to create a delivery guide. Imports and Exports @@ -1513,8 +1815,8 @@ taken into account. First, make sure that all relevant :guilabel:`Products` have the following configuration: - :guilabel:`UNSPSC Category` cannot be :guilabel:`01010101 Does not exist in the catalog`. -- :guilabel:`Tariff Fraction` and :guilabel:`UMT Aduana` must be set, similar to the - :ref:`external trade ` flow. +- :guilabel:`Tariff Fraction` and :guilabel:`UMT Aduana` must be set, similar to the :ref:`external + trade ` flow. - :guilabel:`Material Type` must be set. Then, when creating a :guilabel:`Delivery Guide` from a delivery or receipt, fill the following @@ -1525,9 +1827,9 @@ fields: - :guilabel:`Customs Document Identification` Then, when creating a :guilabel:`Delivery Guide` for a receipt where the :guilabel:`Customs Document -Type` is :guilabel:`Pedimento`, two new fields appear: :guilabel:`Pedimento Number` and +Type` is :guilabel:`Customs number`, two new fields appear: :guilabel:`Customs Number` and :guilabel:`Importer`. .. tip:: - The field :guilabel:`Pedimento Number` should follow the pattern `xx xx xxxx xxxxxxx`. For - example, `15 48 3009 0001235`. + The field :guilabel:`Customs Number` should follow the pattern `xx xx xxxx xxxxxxx`. For example, + `15 48 3009 0001235` with **Two** spaces between text. diff --git a/content/applications/finance/fiscal_localizations/mexico/mx-CFDI_3relations.png b/content/applications/finance/fiscal_localizations/mexico/mx-CFDI_3relations.png new file mode 100644 index 0000000000..7935d4a27a Binary files /dev/null and b/content/applications/finance/fiscal_localizations/mexico/mx-CFDI_3relations.png differ diff --git a/content/applications/finance/fiscal_localizations/mexico/mx-delivery-guide-vehicle.png b/content/applications/finance/fiscal_localizations/mexico/mx-delivery-guide-vehicle.png index 33bd604483..b625b4201d 100644 Binary files a/content/applications/finance/fiscal_localizations/mexico/mx-delivery-guide-vehicle.png and b/content/applications/finance/fiscal_localizations/mexico/mx-delivery-guide-vehicle.png differ diff --git a/content/applications/finance/fiscal_localizations/mexico/mx-landing-configuration.png b/content/applications/finance/fiscal_localizations/mexico/mx-landing-configuration.png index 01fbac9912..3f84bb0dbc 100644 Binary files a/content/applications/finance/fiscal_localizations/mexico/mx-landing-configuration.png and b/content/applications/finance/fiscal_localizations/mexico/mx-landing-configuration.png differ diff --git a/content/applications/finance/fiscal_localizations/mexico/mx-landing-invoice.png b/content/applications/finance/fiscal_localizations/mexico/mx-landing-invoice.png index ec85ec9add..e2416e3aa6 100644 Binary files a/content/applications/finance/fiscal_localizations/mexico/mx-landing-invoice.png and b/content/applications/finance/fiscal_localizations/mexico/mx-landing-invoice.png differ diff --git a/content/applications/finance/fiscal_localizations/mexico/mx-print-payment.png b/content/applications/finance/fiscal_localizations/mexico/mx-print-payment.png new file mode 100644 index 0000000000..6c9f22ce3a Binary files /dev/null and b/content/applications/finance/fiscal_localizations/mexico/mx-print-payment.png differ diff --git a/content/applications/finance/fiscal_localizations/mexico/mx-withholdings-cash-basis.png b/content/applications/finance/fiscal_localizations/mexico/mx-withholdings-cash-basis.png new file mode 100644 index 0000000000..a6ec453ea6 Binary files /dev/null and b/content/applications/finance/fiscal_localizations/mexico/mx-withholdings-cash-basis.png differ diff --git a/content/applications/finance/fiscal_localizations/vietnam.rst b/content/applications/finance/fiscal_localizations/vietnam.rst index 908e67e2c0..d49a91f1fa 100644 --- a/content/applications/finance/fiscal_localizations/vietnam.rst +++ b/content/applications/finance/fiscal_localizations/vietnam.rst @@ -255,7 +255,7 @@ Enable :guilabel:`Include Reference` to include the invoice number in the QR cod .. important:: - The account holder's country must be set to `Vietnam`, and their city must be specified on the contact form. - - The :ref:`account number ` and bank must be set on the + - The :ref:`account number ` and bank must be set on the :guilabel:`Bank` journal. .. seealso:: diff --git a/content/applications/finance/payment_providers.rst b/content/applications/finance/payment_providers.rst index 50da629cf9..9793771d99 100644 --- a/content/applications/finance/payment_providers.rst +++ b/content/applications/finance/payment_providers.rst @@ -452,7 +452,7 @@ entries. We recommend you ask your accountant for advice. By default, the :guilabel:`Bank Account` defined for the :ref:`payment journal ` is used, but you can also specify an :ref:`outstanding account -` for each payment provider to separate the provider's +` for each payment provider to separate the provider's payments from other payments. .. image:: payment_providers/bank_journal.png diff --git a/content/applications/finance/payment_providers/razorpay.rst b/content/applications/finance/payment_providers/razorpay.rst index dc3e055635..db12717620 100644 --- a/content/applications/finance/payment_providers/razorpay.rst +++ b/content/applications/finance/payment_providers/razorpay.rst @@ -2,53 +2,85 @@ Razorpay ======== -`Razorpay `_ is an online payments provider established in India and -covering more than 100 payment methods. +`Razorpay `_ is an online payments provider established in India that +supports more than 100 payment methods. + +.. _payment_providers/razorpay/oauth-connection: + +Create a Razorpay account with Odoo (Indian companies only) +=========================================================== + +.. note:: + - This method is only available for Indian companies. + - This flow does not support the :ref:`test mode `. + +#. :ref:`Navigate to the Razorpay payment provider ` and + click :guilabel:`Connect`. +#. Go through the account creation process and enter the verification codes when prompted. + + .. tip:: + If you already have a Razorpay account, enter your Razorpay credentials, select the account + you want to link to your Odoo database (if applicable), then click :guilabel:`Continue`. + +#. At the end of the process, click :guilabel:`Authorize`. If all required information + has been submitted, you are then redirected to Odoo, and the payment provider is + :guilabel:`Enabled`. + +.. _payment_providers/razorpay/manual-connection: + +Manual credentials and webhook input +==================================== .. _payment_providers/razorpay/configure_dashboard: -Configuration on Razorpay Dashboard -=================================== +Razorpay configuration +---------------------- -#. Log into `Razorpay Dashboard `_ and go to - :menuselection:`Settings --> API Keys`. Generate the new keys and copy the values of the - :guilabel:`Key Id` and :guilabel:`Secret Key` fields and save them for later. -#. | Go to :menuselection:`Settings --> Webhooks`, click on :guilabel:`Create New Webhook`, - and enter your Odoo database URL followed by `/payment/razorpay/webhook` in - the :guilabel:`Webhook URL` text field. +#. `Create a Razorpay account `_ if necessary and log into the + `Razorpay Dashboard `_. +#. Go to the :guilabel:`Payments` tab at the top of the page. +#. Toggle the :guilabel:`Test Mode` switch in the left menu to try the integration without + charging customers. Toggle it off once you are ready to accept real payments. +#. Click :guilabel:`Account & Settings` in the left menu, then, under :guilabel:`Website and app + settings`, select `API Keys `_. +#. Copy the values of the :guilabel:`Key Id` and :guilabel:`Secret Key` fields and save them for + later. +#. Click :guilabel:`Account & Settings` in the left menu, then, under :guilabel:`Website and app + settings`, select `Webhooks `_. +#. | Click :guilabel:`Add New Webhook`, then enter your Odoo database URL followed by + `/payment/razorpay/webhook` in the :guilabel:`Webhook URL` field. | For example: `https://example.odoo.com/payment/razorpay/webhook`. #. Fill the :guilabel:`Secret` field with a password of your choice and save it for later. -#. Make sure the :guilabel:`payment.authorized`, :guilabel:`payment.captured`, - :guilabel:`payment.failed`, :guilabel:`refund.failed` and :guilabel:`refund.processed` - checkboxes are ticked. -#. Click on :guilabel:`Create Webhook` to finalize the configuration. +#. Enable the following events: :guilabel:`payment.authorized`, :guilabel:`payment.captured`, + :guilabel:`payment.failed`, :guilabel:`refund.failed`, and :guilabel:`refund.processed`. +#. Click :guilabel:`Create Webhook` to finalize the configuration. .. _payment_providers/razorpay/recurring_payments: .. important:: - The :guilabel:`Recurring payments` feature must - be activated if you want to make recurring payments. - Send a request to the `Razorpay Support team `_ to - enable recurring payments. + The `Recurring payments `_ feature must + be activated to accept recurring payments. To enable this feature, submit a request to the + `Razorpay Support team `_. .. _payment_providers/razorpay/configure_odoo: -Configuration on Odoo -===================== +Odoo configuration +------------------ -#. :ref:`Navigate to the payment provider Razorpay ` and change its - state to :guilabel:`Enabled`. +#. Activate :ref:`developer mode `. +#. :ref:`Navigate to the Razorpay payment provider `. #. In the :guilabel:`Credentials` tab, fill the :guilabel:`Key Id`, :guilabel:`Key Secret`, and - :guilabel:`Webhook Secret` with the values you saved at the step + :guilabel:`Webhook Secret` with the values you saved during :ref:`payment_providers/razorpay/configure_dashboard`. -#. Configure the rest of the options to your liking. +#. Configure the remaining options as needed. +#. Set the :guilabel:`State` field to :guilabel:`Enabled` (or :guilabel:`Test Mode` if you are + trying Razorpay as a :ref:`test `). .. important:: - If you configure Odoo to capture amounts manually: + If you configure Odoo to :ref:`capture amounts manually `: - - Be aware that the **manual voiding** of a transaction is not supported by Razorpay. - - After **five days**, if the transaction hasn't been captured yet, it'll automatically be - **voided**. + - **Manual voiding** of a transaction is not supported by Razorpay. + - Transactions that remain uncaptured for more than **five days** are automatically **voided**. .. seealso:: - - :doc:`../payment_providers` + :doc:`../payment_providers` diff --git a/content/applications/general/users/access_rights.rst b/content/applications/general/users/access_rights.rst index 6d587d97b0..f66350b2ba 100644 --- a/content/applications/general/users/access_rights.rst +++ b/content/applications/general/users/access_rights.rst @@ -28,6 +28,8 @@ should not have access to. Once complete, click :guilabel:`Save` to save the changes, and implement the user as an administrator. +.. _access-rights/user-permissions: + Manage user permissions ======================= @@ -52,6 +54,8 @@ The :guilabel:`Administration` field in the :guilabel:`Access Rights` tab has th .. image:: access_rights/user-permissions-dropdown-menu.png :alt: The Sales apps drop-down menu to set the user's level of permissions. +.. _access-rights/specific-user-permissions: + Manage specific permissions --------------------------- diff --git a/content/applications/hr/employees.rst b/content/applications/hr/employees.rst index 3f520bb782..3ebf52e47e 100644 --- a/content/applications/hr/employees.rst +++ b/content/applications/hr/employees.rst @@ -15,13 +15,18 @@ reporting. .. card:: New employees :target: employees/new_employee - Set up new employee records + Set up new employee records. .. card:: Departments :target: employees/departments Create and manage the departments employees are a part of. + .. card:: Contracts + :target: payroll/contracts + + Manage and create employee contracts. + .. card:: Certifications :target: employees/certifications diff --git a/content/applications/hr/employees/new_employee.rst b/content/applications/hr/employees/new_employee.rst index ae2cae68a7..c887e120f3 100644 --- a/content/applications/hr/employees/new_employee.rst +++ b/content/applications/hr/employees/new_employee.rst @@ -405,6 +405,8 @@ the information. Depending on the localization setting, other fields may be present. For example, for the United States, a :guilabel:`SSN No` (Social Security Number) field is present. +.. _employees/private-contact: + PRIVATE CONTACT --------------- diff --git a/content/applications/hr/payroll.rst b/content/applications/hr/payroll.rst index 18bec39a38..72d9cb2a69 100644 --- a/content/applications/hr/payroll.rst +++ b/content/applications/hr/payroll.rst @@ -895,13 +895,14 @@ form. .. seealso:: - :doc:`payroll/contracts` - :doc:`payroll/work_entries` + - :doc:`payroll/time_off_to_report` - :doc:`payroll/salary_attachments` - :doc:`payroll/payslips` - :doc:`payroll/batches` - :doc:`payroll/commissions` - :doc:`payroll/reporting` + - :doc:`payroll/headcount` - :doc:`payroll/work_entry_analysis` - - :doc:`payroll/salary_attachment` - :doc:`payroll/payroll_localizations` .. toctree:: @@ -909,11 +910,12 @@ form. payroll/contracts payroll/work_entries + payroll/time_off_to_report payroll/salary_attachments payroll/payslips payroll/batches payroll/commissions payroll/reporting + payroll/headcount payroll/work_entry_analysis - payroll/salary_attachment payroll/payroll_localizations diff --git a/content/applications/hr/payroll/contracts.rst b/content/applications/hr/payroll/contracts.rst index 20d1ec0195..1302f3d53c 100644 --- a/content/applications/hr/payroll/contracts.rst +++ b/content/applications/hr/payroll/contracts.rst @@ -4,52 +4,63 @@ Contracts Every employee in Odoo is required to have a running contract in order to be paid. A contract outlines the terms of an employee's position, their compensation, working hours, and any -other details about their position. +other relevant details pertaining to their compensation. .. important:: - Contract documents (PDFs) are uploaded and organized using the *Documents* application, and are - signed using the *Sign* application. Ensure these applications are installed to send and sign + Contract documents (PDFs) are uploaded and organized using the **Documents** application, and are + signed using the **Sign** application. Ensure these applications are installed to send and sign contracts. Please refer to the :doc:`../../productivity/documents` and - :doc:`../../productivity/sign` documentation. + :doc:`../../productivity/sign` documentation for more information. -To view the employee contracts, go to the :menuselection:`Payroll app --> Contracts --> Contracts` -from the top menu. All employee contracts, and their current contract status, are displayed in a -list view, by default. The list view displays running contracts, contracts that require action, -expired contracts, and cancelled contracts. +.. _payroll/contract-dashboard: + +Contracts dashboard +=================== + +Both the **Payroll** and **Employees** apps display *identical employee contract information*. + +To access the contracts dashboard from the **Employees** app, navigate to :menuselection:`Employees +app --> Employees --> Contracts`. To access the contracts dashboard from the **Payroll** app, +navigate to :menuselection:`Payroll app --> Contracts --> Contracts`. + +The :guilabel:`Contracts` dashboard displays all employee contracts in a default list view, grouped +by :guilabel:`Status`. The available status groupings are :guilabel:`New`, :guilabel:`Running`, +:guilabel:`Expired`, and :guilabel:`Cancelled`. Each grouping displays the number of contracts +within the grouping. .. image:: contracts/contracts-overview.png - :align: center :alt: Contracts dashboard view showing running contracts and contracts with issues. .. note:: - The list of contracts in the *Payroll* application matches the list of contracts in the - *Employees* application. + Any changes made to contracts in the **Employees** app is reflected in the **Payroll** app, and + vice versa. Contract information remains identical, regardless of where the contract information + is accessed. .. _payroll/new-contract: -In order for an employee to be paid, an active contract is required. If a new contract is needed, -click the :guilabel:`Create` button on the :guilabel:`Contracts` dashboard. A contract form appears -where the information can be entered. +Create a contract +================= -New contract form ------------------ +To create a new contract, click the :guilabel:`New` button on the :ref:`Contracts dashboard +`, and a blank contract form appears. .. _payroll/gen-info: General information section --------------------------- -- :guilabel:`Contact Reference`: type in the name or title for the contract, such as `John Smith +Enter the following information in the top-half of the blank contract form: + +- :guilabel:`Contact Reference`: Type in the name or title for the contract, such as `John Smith Contract`. This field is **required**. -- :guilabel:`Employee`: using the drop-down menu, select the employee that the contract applies to. -- :guilabel:`Contract Start Date`: the date the contract starts. To choose a date, click the - drop-down menu, navigate to the correct month and year with the :guilabel:`< > (arrow)` icons, - then click on the desired date. This field is **required**. -- :guilabel:`Contract End Date`: if the contract has a specific end date, click the drop-down menu, - navigate to the correct month and year with the :guilabel:`< > (arrow)` icons, then click on the - desired date. -- :guilabel:`Working Schedule`: select one of the working schedules from the drop-down menu. This - field is **required**. +- :guilabel:`Employee`: Using the drop-down menu, select the employee the contract is for. +- :guilabel:`Contract Start Date`: Required. Defaults to the current date. To choose a different + date, click into the field. In the popover calendar, select a different date. +- :guilabel:`Contract End Date`: Optional. Select a date from the calendar popover, or leave blank + for an indefinite contract. +- :guilabel:`Working Schedule`: Select one of the available working schedules the employee is + expected to work, from the drop-down menu. If this field is left blank, this allows the employee + to work as many or as few hours as desired every week, with no restrictions. .. tip:: The :guilabel:`Working Schedule` drop-down menu displays all the working schedules for the @@ -57,247 +68,217 @@ General information section Configuration --> Working Schedules`. Click :guilabel:`New`, and create a new working schedule, or click on an existing working schedule and make edits. -- :guilabel:`Work Entry Source`: select how the :doc:`work entries ` are generated. - This field is **required**. Click the radio button next to the desired selection. The options are: +- :guilabel:`Work Entry Source`: Using the drop-down menu, select how the :doc:`work entries + ` are generated. This field is **required**. Click the radio button next to the + desired selection. The options are: - - :guilabel:`Working Schedule`: work entries are generated based on the selected + - :guilabel:`Working Schedule`: Work entries are generated based on the selected :guilabel:`Working Schedule`. - - :guilabel:`Attendances`: work entries are generated based on the employee's check-in records in - the *Attendances* application. (This requires the *Attendances* application). - - :guilabel:`Planning`: work entries are generated based on the planned schedule for the employee - from the *Planning* application. (This requires the *Planning* application). + - :guilabel:`Attendances`: Work entries are generated based on the employee's check-in records in + the **Attendances** app. (This requires the **Attendances** app to be installed). + - :guilabel:`Planning`: Work entries are generated based on the planned schedule for the employee + from the **Planning** app. (This requires the **Planning** app to be installed). -- :guilabel:`Salary Structure Type`: select one of the salary structure types from the drop-down +- :guilabel:`Salary Structure Type`: Select one of the salary structure types from the drop-down menu. The default salary structure types are :guilabel:`Employee` or :guilabel:`Worker`. A :ref:`new salary structure type ` can be created, if needed. -- :guilabel:`Department`: select the department the contract applies to from the drop-down menu. -- :guilabel:`Job Position`: select the specific job position the contract applies to from the - drop-down menu. +- :guilabel:`Department`: Select the department the employee is working within, using the drop-down + menu. +- :guilabel:`Job Position`: Select the employee's specific job position using the drop-down menu. .. note:: If the selected :guilabel:`Job Position` has a contract template linked to it with a specific :guilabel:`Salary Structure Type`, the :guilabel:`Salary Structure Type` changes to the one associated with that :guilabel:`Job Position`. -- :guilabel:`Wage on Payroll`: enter the employee's monthly wage. -- :guilabel:`Contract Type`: choose either :guilabel:`Permanent`, :guilabel:`Temporary`, - :guilabel:`Seasonal`, :guilabel:`Full-Time`, or :guilabel:`Part-Time` from the drop-down menu. +- :guilabel:`Contract Type`: Using the drop-down menu, select the type of contract being created. + The default options are :guilabel:`Permanent`, :guilabel:`Temporary`, :guilabel:`Seasonal`, + :guilabel:`Full-Time`, :guilabel:`Intern`, :guilabel:`Student`, :guilabel:`Apprenticeship`, + :guilabel:`Thesis`, :guilabel:`Statutory`, and :guilabel:`Employee`. +- :guilabel:`Wage on Payroll`: Enter the employee's monthly wage in this field. -.. figure:: contracts/required-fields.png - :align: center - :alt: New contract form to be filled in when creating a new contract, with required fields - outlined in red. + .. tip:: + The :guilabel:`Working Schedule` drop-down menu displays all the working times for the selected + :guilabel:`Company`. To modify or add to this list, go to :menuselection:`Payroll app --> + Configuration --> Working Times`, and either :guilabel:`Create` a new working time, or click on + an existing working time, then edit it by clicking :guilabel:`Edit`. -.. tip:: - The :guilabel:`Working Schedule` drop-down menu displays all the working times for the selected - :guilabel:`Company`. To modify or add to this list, go to :menuselection:`Payroll app --> - Configuration --> Working Times`, and either :guilabel:`Create` a new working time, or click on - an existing working time, then edit it by clicking :guilabel:`Edit`. +- :guilabel:`HR Responsible`: Select the person who is responsible for validating the contract using + the drop-down menu. This field is required. + + .. note:: + The :guilabel:`HR Responsible` field only appears if the **Salary Configurator** + (`hr_contract_salary`) module and the **Sign** app are both installed. -- :guilabel:`Yearly Cost (Real)`: this field automatically updates after the :guilabel:`Schedule +.. figure:: contracts/required-fields.png + :alt: New contract form to be filled in when creating a new contract. + +Salary information tab +---------------------- + +The :guilabel:`Salary Information` tab is where the specific details of how much and how often the +employee is paid. Fill in the following fields in this tab: + +- :guilabel:`Wage Type`: Using the drop-down menu, select what kind of pay the employee receives. + The two default options are :guilabel:`Fixed Wage` or :guilabel:`Hourly Wage`. Select + :guilabel:`Fixed Wage` for salaried employees, and select :guilabel:`Hourly Wage` for employees + who are paid based on their logged worked hours. +- :guilabel:`Schedule Pay`: Using the drop-down menu, select how often the employee is paid. The + default options are :guilabel:`Annually`, :guilabel:`Semi-annually`, :guilabel:`Quarterly`, + :guilabel:`Bi-monthly`, :guilabel:`Monthly`, :guilabel:`Semi-monthly`, :guilabel:`Bi-weekly`, + :guilabel:`Weekly`, or :guilabel:`Daily`. +- :guilabel:`Wage`: Enter the amount the employee receives each pay period. The first field allows + for a wage to be entered, the second field displays how often the pay is issued to the employee. + The second field *cannot** be modified, and is updated when the :guilabel:`Schedule Pay` field + changes. +- :guilabel:`Yearly Cost (Real)`: This field automatically updates after the :guilabel:`Schedule Pay` and :guilabel:`Wage` fields are entered. This amount is the total yearly cost for the employer. This field can be modified. However, if this is modified, the :guilabel:`Wage` field updates, accordingly. Ensure both the :guilabel:`Wage` and :guilabel:`Yearly Cost (Real)` are correct if this field is modified. -- :guilabel:`Monthly Cost (Real)`: this field automatically updates after the :guilabel:`Schedule +- :guilabel:`Monthly Cost (Real)`: This field automatically updates after the :guilabel:`Schedule Pay` and :guilabel:`Wage` fields are entered. This amount is the total monthly cost for the employer. This field **cannot** be modified, and is calculated based on the :guilabel:`Yearly Cost (Real)`. - .. image:: contracts/salary-info.png - :align: center - :alt: Optional tabs for a new contract. +.. figure:: contracts/salary-info.png + :alt: The Salary Information tab filled out. -Contract Details tab --------------------- +Details tab +----------- -The :guilabel:`Contract Details` tab allows for the addition and editing of a contract, along with -specifying which template to use when a new contract is created. These fields **must** be populated -in order to create a new contract. +The :guilabel:`Details` tab of the contract houses the contract template information, accounting +information (refer to the :doc:`country-specific localization document ` for +more information), any part time work information, and notes. Fill out the following fields in this +tab: -.. important:: - To access the various contract template fields in the :guilabel:`Contract Details` tab, the - *Salary Configurator* (`hr_contract_salary`) module **must** be :ref:`installed - `. +- :guilabel:`Contract Template`: Using the drop-down menu, select a contract template to use when + making an offer to an applicant. - When the *Salary Configurator* module is installed, the *Salary Configurator - Holidays* and - *Salary Configurator - Payroll* modules install, as well. + .. note:: + Contract templates are typically created through the **Payroll** app configuration menu, and + stored in the **Documents** app. To view the contract templates, and to create new ones, + navigate to :menuselection:`Payroll app --> Configuration --> Templates`. - Once the modules are installed, the database reverts to the main dashboard. +- :guilabel:`Originated Offer`: This field automatically populates with the original offer sent to + the employee. This field is **not** modifiable, and is only populated if applicable. +- :guilabel:`Part Time`: Tick the checkbox if the contract is for part time work. Once enabled, a + percentage field appears next to the checkbox. The percentage **cannot** be modified, and + automatically updates based on the selected :guilabel:`Working Schedule` in the top-half of the + contract, compared to the typical working schedule for the company (typically 40 hours/week). -- :guilabel:`Contract Template`: select a pre-existing contract template from the drop-down menu. - Contract templates are typically created through the configuration menu, and stored in the - *Documents* application. -Sign section -~~~~~~~~~~~~ + - :guilabel:`Standard Calendar`: This field is automatically populated with the default working + schedule for the company. In most cases, this is :guilabel:`Standard 40 hours/week`. + - :guilabel:`Part Time Work Entry Type`: Using the drop-down menu, select the work entry type that + generates the balance of a full-time working schedule. -- :guilabel:`HR Responsible`: select the person who is responsible for validating the contract from - the drop-down menu. This field is required. -- :guilabel:`New Contract Document Template`: select a contract from the drop-down menu to be - modified for this new employee contract. These documents are stored in the *Sign* application. -- :guilabel:`Contract Update Document Template`: select a contract from the drop-down menu, if the - employee has an existing contract that requires updating. These documents are stored in the *Sign* - application. + .. example:: + An employee contract is being created for a part-time employee who works 20 hours a week. -.. important:: - The :guilabel:`HR Responsible`, :guilabel:`New Contract Document Template`, and - :guilabel:`Contract Update Document Template` fields are only visible if the *Sign* application - is installed, along with the `hr_contract_salary` and `hr_contract_salary_payroll` :doc:`modules - <../../general/apps_modules>`. The *Sign* application is where the contract templates are stored. - This application is required for an employee to sign any contract. - -Accounting section -~~~~~~~~~~~~~~~~~~ - -- :guilabel:`Analytic Account`: select the account the contract affects from the drop-down menu. It - is recommended to check with the accounting department to ensure the correct account is selected. - -Part Time section -~~~~~~~~~~~~~~~~~ - -- :guilabel:`Part Time`: tick this box if the employee is working part-time. When active, additional - fields appear: - - - :guilabel:`% (Percentage)`: enter the percent of time the employee works as compared to a - full-time employee. - - :guilabel:`Standard Calendar`: select the working hours that a typical full-time worker uses - from the drop-down menu. - - :guilabel:`Part Time Work Entry Type`: select the work entry type that generates the balance of - a full-time working schedule. - - .. example:: - If a full-time employee works 40 hours a week, and the employee works 20, enter `50` in the - :guilabel:`% (Percentage)` field (50% of 40 hours = 20 hours). The employee generates twenty - (20) hours of work entries under the work entry type `part-time`, and another twenty (20) - hours of work entries under the work entry type `generic time off`, for a total of forty (40) - hours worth of work entries. - -Notes section -~~~~~~~~~~~~~ - -- :guilabel:`Notes`: a text field where any notes for the employee contract are entered for future - reference. - -.. image:: contracts/contract-details.png - :align: center - :alt: Contract details in optional tabs for a new contract. - -Modify a contract template -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Click the :icon:`fa-external-link` :guilabel:`(external Link)` icon at the end of either the -:guilabel:`New Contract Document Template` or :guilabel:`Contract Update Document Template` to open -the corresponding contract template, and proceed to make any desired changes. - -Click the :guilabel:`Upload your file` button next to the corresponding document, navigate to the -file, then click :guilabel:`Open` to select the document and add it to the tab. - -Modifying document templates -============================ - -Contracts templates can be modified at any point when changes are needed. - -- :guilabel:`Tags`: select any tags associated with the contract. -- :guilabel:`Signed Document Workspace`: this is where the signatures are stored. Choose a - pre-configured workspace, or create a new one. To create a new :guilabel:`Signed Document - Workspace`, type in the name of the workspace, then click either :guilabel:`Create` to add the new - workspace, or :guilabel:`Create and Edit` to add the workspace and modify the workspace details. -- :guilabel:`Signed Document Tags`: select or create any tags that are only associated with the - signed contract, as opposed to the original unsigned contract. -- :guilabel:`Redirect Link`: enter a redirect link for the employee to access the contract. A - redirect link takes the user from one URL to another. In this case, it takes them to the - newly-updated contract specifically written for them. -- :guilabel:`Who can Sign`: select either :guilabel:`All Users` or :guilabel:`On Invitation`. - - - :guilabel:`All Users`: any user in the organization can sign the contract. - - :guilabel:`On Invitation`: only users selected in this field can sign the contract. - -- :guilabel:`Invited Users`: select the person (or people) that can sign the document. -- :guilabel:`Document`: the attached document can be replaced by clicking the :icon:`fa-pencil` - :guilabel:`(pencil)` icon. A pop-up window appears, so another document can be selected for - upload. The file **must** be a PDF. To remove the document, click the :icon:`fa-trash-o` - :guilabel:`(trash can)` icon. - -Once the edits are complete, click the :guilabel:`Save` button. All the information for the selected -contract template populates the fields in the :guilabel:`Salary Information` tab. Any additional -tabs, such as :guilabel:`Personal Documents`, appears if applicable. - -Personal documents ------------------- + To configure this, the employee's :guilabel:`Working Schedule` is set to :guilabel:`20 + Hours/Part time` in the :ref:`general information section `. In the + :guilabel:`Details` tab, the :guilabel:`Part Time` checkbox is ticked, and the percentage is + set to `50`. The :guilabel:`Standard Calendar` is set to :guilabel:`Standard 40 hours/week`, + and the :guilabel:`Part Time Work Entry Type` is set to :guilabel:`Unpaid`. -This tab **only** appears after an :guilabel:`Employee` is selected, and houses any documents that -are linked to the employee on their employee record. Documents cannot be added to this tab, this tab -**only** shows documents that are already uploaded and associated with the employee. + When a typical work week is processed in the **Payroll** app, the employee generates twenty + (20) hours of regular work entries under the work entry type `Attendance`, and another twenty + (20) hours of work entries under the work entry type `Unpaid`, for a total of forty (40) hours + worth of work entries. -The available documents in this tab can be downloaded. Click the :icon:`fa-download` -:guilabel:`(download)` icon next to the document to download it. +- :guilabel:`Notes`: Enter any relevant notes for the contract in this field. -Send the contract ------------------ +.. figure:: contracts/details-tab.png + :alt: The Details tab filled out. -Click on the following button to send the contract to the employee: +Signatories tab +--------------- -.. image:: contracts/send-contract.png - :align: center - :alt: Send the contract to the employee via one of the buttons. +The :guilabel:`Signatories` tab is where the default contract templates are selected, for both new +and updated contracts. -- :guilabel:`Generate Offer`: Clicking this opens a pop-up window that contains the basic - information from the contract, as well as a link for the contract when using the salary - configurator. Click :guilabel:`Send` to send an email to the employee, so they can sign - the contract. +Using the drop-down menu, select the default contract template to use when creating a new or updated +contract, in the respective fields. -At the bottom of the pop-up form is a :guilabel:`Link Expiration Date`. This is the timeframe that -the contract offer is valid for. By default, this field is pre-populated with `30 days`, but it can -be modified. +Once a PDF template is selected, any mapped signature fields in the file appear in a list, below the +selection, identifying who must sign the document. These fields **cannot** be updated. - .. note:: - In order to send a contract using the :guilabel:`Generate Simulation Link`, there **must** be a - signature field in the contract PDF being sent to the employee, so they can sign it. +Any changes to the template and signatories but be done in the **Sign** app, where contract +templates are uploaded, modified, and stored. + +.. important:: + The :guilabel:`PDF Template` fields are only visible if the **Sign** app is installed, along with + the :guilabel:`hr_contract_salary` and :guilabel:`hr_contract_salary_payroll` + :doc:`modules <../../general/apps_modules>`. + +.. figure:: contracts/signatories.png + :alt: The Signatories tab with the roles specified for signing. + +Personal documents tab +---------------------- -- :guilabel:`Signature Request`: clicking this reveals a pop-up window, where an email can be typed - to the employee. Select the document (such as a contract, NDA, or Homeworking Policy) from the - drop-down menu, and fill out the email section. Click :guilabel:`Send` when the email is ready to - be sent. +Occasionally, additional paperwork may be required when creating a contract, such as legal documents +declaring the employee is able to work in the country. When this situation occurs, Odoo allows for +one image file of the necessary document to be attached to a contract in the :guilabel:`Personal +Documents` tab. + +Click the :guilabel:`Upload your file` button, navigate to the desired document, and click +:guilabel:`Select` to attach the file to the contract. The file name appears on the +:guilabel:`Image` line. .. note:: - To send a contract using the :guilabel:`Generate Simulation Link`, there **must** be a signature - field in the contract PDF being sent to the employee, so they can sign it. + This tab **only** appears after an :guilabel:`Employee` is selected. Additionally, only image + files can be attached in this field at this time. Salary attachments ------------------ -Any automatic deductions or allocations for an employee, such as child support payments and wage -garnishments, are referred to as a *salary attachment*. This section is where all of these -deductions or allocations are set. - -To add a new deduction, first navigate to :menuselection:`Payroll app --> Contracts --> Salary -Attachments`. Next, click :guilabel:`Create`, and a new salary attachment form loads. - -.. image:: contracts/garnishment.png - :align: center - :alt: The salary attachment form with everything filled in for Ronnie Hart's child support. - -Fill out the following fields on the form: - -- :guilabel:`Employee`: using the drop-down menu, select the employee the salary attachment applies - to. -- :guilabel:`Description`: enter a short description for the salary attachment, such as `Child - Support` or `529 Contribution`. -- :guilabel:`Type`: using the drop-down menu, select the type of salary attachment being created. -- :guilabel:`Start Date`: the date the salary attachment starts. Choose a date by clicking on the - drop-down menu, navigating to the correct month and year by using the :icon:`fa-chevron-left` - :icon:`fa-chevron-right` :guilabel:`(arrow)` icons, then clicking on the desired date. This field - is **required**. -- :guilabel:`Estimated End Date`: this field automatically populates after both the - :guilabel:`Monthly Amount` and :guilabel:`Total Amount` fields are populated. This field is - **not** modifiable. -- :guilabel:`Document`: attach any documents relevant to the salary attachment. Click the - :guilabel:`Upload Your File` button, navigate to the desired document in the file explorer, then - click :guilabel:`Open` to select the document, and attach it to the form. To change the attached - document, click the :icon:`fa-pencil` :guilabel:`(pencil)` icon, and select a different document. - To remove a document, click the :icon:`fa-trash-o` :guilabel:`(trash can)` icon. -- :guilabel:`Monthly Amount`: enter the amount to be taken out of the employee's paycheck every - month for this specific salary attachment. -- :guilabel:`Total Amount`: enter the total amount that the employee pays for the salary attachment - to be completed. +After an employee is selected for the contract, a :icon:`fa-book` :guilabel:`Salary Attachments` +smart button appears at the top of the page. + +For new employees who do not currently have a contract, the smart button displays :guilabel:`New`. +If the contract is being updated for a current employee who already has salary attachments +configured, the smart button displays the number of salary attachments currently running. + +:doc:`Create or update any necessary salary attachments ` for the contract, +before sending. + +Send a contract +=============== + +After a contract has been created and configured, the next step is to send it to the employee or +applicant. Click the :guilabel:`Generate Offer` button, and the :guilabel:`Offer for (Employee)` +form loads. + +The :guilabel:`Offer for (Employee)` form displays all the basic information from the contract, as +well as a link the employee can use to sign the contract. The last field on the form is a +:guilabel:`Validity Days Count` field. This indicates how long the offer is valid. Enter the desired +number of days in the field. The default is `30` days. + +Click :guilabel:`Send By Email` and a pop-up email window loads, using a preconfigured default email +template. Click :guilabel:`Send` to send the offer. + +.. Important:: + In order to send a contract using the :guilabel:`Generate Offer` button, there **must** be an + employee signature field on the contract PDF being sent. + +.. image:: contracts/send-contract.png + :alt: Send the contract to the employee via one of the buttons. + +Contract status +=============== + +When creating and sending out a contract, the default status of the contract is :guilabel:`New`. + +Once there is a minimum of one completed signature on the document, the status changes to +:guilabel:`Partially Signed`. Internal users, such as HR and recruitment employees, are alerted in +the database when there is a signature requested of them. + +After all required parties have signed the contract, the status changes to :guilabel:`Fully Signed`. + +All status changes happen automatically as the document is signed. + +.. seealso:: + - :doc:`../../productivity/documents` + - :doc:`../../productivity/sign` diff --git a/content/applications/hr/payroll/contracts/contracts-overview.png b/content/applications/hr/payroll/contracts/contracts-overview.png index eaad0fcb64..b05a877610 100644 Binary files a/content/applications/hr/payroll/contracts/contracts-overview.png and b/content/applications/hr/payroll/contracts/contracts-overview.png differ diff --git a/content/applications/hr/payroll/contracts/details-tab.png b/content/applications/hr/payroll/contracts/details-tab.png new file mode 100644 index 0000000000..2ca8ea9509 Binary files /dev/null and b/content/applications/hr/payroll/contracts/details-tab.png differ diff --git a/content/applications/hr/payroll/contracts/required-fields.png b/content/applications/hr/payroll/contracts/required-fields.png index 648ab76bb7..880b5179f3 100644 Binary files a/content/applications/hr/payroll/contracts/required-fields.png and b/content/applications/hr/payroll/contracts/required-fields.png differ diff --git a/content/applications/hr/payroll/contracts/salary-info.png b/content/applications/hr/payroll/contracts/salary-info.png index 6e98b1e0aa..feba99fe67 100644 Binary files a/content/applications/hr/payroll/contracts/salary-info.png and b/content/applications/hr/payroll/contracts/salary-info.png differ diff --git a/content/applications/hr/payroll/contracts/send-contract.png b/content/applications/hr/payroll/contracts/send-contract.png index 3a0a2846d9..0308cee77c 100644 Binary files a/content/applications/hr/payroll/contracts/send-contract.png and b/content/applications/hr/payroll/contracts/send-contract.png differ diff --git a/content/applications/hr/payroll/contracts/signatories.png b/content/applications/hr/payroll/contracts/signatories.png new file mode 100644 index 0000000000..e266a517a4 Binary files /dev/null and b/content/applications/hr/payroll/contracts/signatories.png differ diff --git a/content/applications/hr/payroll/headcount.rst b/content/applications/hr/payroll/headcount.rst new file mode 100644 index 0000000000..8d9f0590ba --- /dev/null +++ b/content/applications/hr/payroll/headcount.rst @@ -0,0 +1,53 @@ +================ +Headcount report +================ + +The *Headcount report* in the **Payroll** app shows the number of employees on payroll and allows +headcount comparisons between different periods of time. + +Create a headcount report +========================= + +Create a headcount report to see the number of employees at a specific time or compare headcounts +across periods. + +To create a headcount report, navigate to :menuselection:`Payroll app --> Reporting --> Headcount` +and click :guilabel:`New`. + +- Report name: generated automatically as `Headcount for (Company Name) on the (YYYY-MM-DD)` and + **cannot** be modified. +- :guilabel:`Company`: populated automatically (works in both single and multi-company databases) +- :guilabel:`From`/:guilabel:`To` dates: defaults to current date (from) and blank (to). Adjust + these to define the period to analyze. + +.. image:: headcount/new-headcount.png + :alt: A headcount report form filled out for the third quarter of 2025. + +Next, click :guilabel:`Populate` to generate the report. + +At the top of the form, a :icon:`fa-people` :guilabel:`Employees` smart button appears. Clicking the +button displays the total number of employees for the selected period. + +View all headcount reports +========================== + +See how the company headcount has changed over time by viewing all headcount reports in a list view. + +To view all headcount reports, navigate to :menuselection:`Payroll app --> Reporting --> Headcount`. + +View employees in a headcount +----------------------------- + +TO get an overall view of employees and their salary impact on the company, view all employee +records of a specific headcount report. + +To view the employees of a specific headcount report, click the :icon:`fa-people` +:guilabel:`Employees` smart button at the top of a headcount report. + +All employees from the headcount appear in a list view, grouped by :guilabel:`Department`. + +- :guilabel:`Employee`: the employee's full name +- :guilabel:`Department`: the department their job position is in +- :guilabel:`Job Title`: their role +- :guilabel:`Employer Cost`: how much the company pays the employee each pay-period +- :guilabel:`Wage on Payroll`: the dollar amount on payroll reports diff --git a/content/applications/hr/payroll/headcount/new-headcount.png b/content/applications/hr/payroll/headcount/new-headcount.png new file mode 100644 index 0000000000..6907f4e1dd Binary files /dev/null and b/content/applications/hr/payroll/headcount/new-headcount.png differ diff --git a/content/applications/hr/payroll/payroll_localizations.rst b/content/applications/hr/payroll/payroll_localizations.rst index e7b88d402e..5500eadfee 100644 --- a/content/applications/hr/payroll/payroll_localizations.rst +++ b/content/applications/hr/payroll/payroll_localizations.rst @@ -82,7 +82,7 @@ Payroll localization modules are available for the countries listed below. - Lithuania - Luxembourg - Malaysia -- Mexico +- :doc:`Mexico ` - Morocco - Netherlands - Pakistan @@ -93,7 +93,7 @@ Payroll localization modules are available for the countries listed below. - Switzerland - Türkiye - :doc:`United Arab Emirates ` -- United States +- :doc:`United States ` .. toctree:: :titlesonly: @@ -103,5 +103,7 @@ Payroll localization modules are available for the countries listed below. payroll_localizations/egypt payroll_localizations/hong_kong payroll_localizations/jordan + payroll_localizations/mexico payroll_localizations/united_arab_emirates + payroll_localizations/united_states payroll_localizations/employment_hero diff --git a/content/applications/hr/payroll/payroll_localizations/mexico.rst b/content/applications/hr/payroll/payroll_localizations/mexico.rst new file mode 100644 index 0000000000..6808ac65b2 --- /dev/null +++ b/content/applications/hr/payroll/payroll_localizations/mexico.rst @@ -0,0 +1,545 @@ +====== +Mexico +====== + +.. |PAC| replace:: :abbr:`PAC (Proveedor Autorizado de Certificación / Authorized Certification + Provider)` +.. |RFC| replace:: :abbr:`RFC (Registro Federal de Contribuyentes)` +.. |CFDI| replace:: :abbr:`CFDI (Comprobante Fiscal Digital por Internet)` +.. |IMSS| replace:: :abbr:`IMSS (Instituto Mexicano del Seguro Social)` + +The Mexico payroll localization covers salary computations for employees, including employee and +employer payroll taxes. + +Before configuring the Mexico localization, review the general :doc:`payroll documentation +<../../payroll>`, which covers basic configurations and settings applicable to all localizations. + +.. _payroll/mexico_apps: + +Apps & modules +============== + +:ref:`Install ` the following modules to get all the features of the Mexico payroll +localization: + +.. list-table:: + :header-rows: 1 + + * - Name + - Technical name + - Dependencies + - Description + * - :guilabel:`Mexico - Payroll` + - `l10n_mx_hr_payroll` + - - hr_payroll + - hr_work_entry_holidays + - hr_payroll_holidays + - Adds the required fields to manage employee payroll and time off data. + * - :guilabel:`Mexico - Payroll CFDI` + - `l10n_mx_hr_payroll_account_edi` + - - l10n_mx_hr_payroll_account + - l10n_mx_edi + - Adds the ability to sign |CFDI| payroll documents with the government. + * - :guilabel:`Mexico - Payroll with Accounting` + - `l10n_mx_hr_payroll_account` + - - hr_payroll_account + - l10n_mx + - l10n_mx_hr_payroll + - l10n_mx_edi + - Adds the required rules and parameters to manage local payroll calculations. + +.. tip:: + Installing the :guilabel:`Mexico - Payroll CFDI` module automatically installs both the + :guilabel:`Mexico - Payroll` and :guilabel:`Mexico - Payroll with Accounting` modules. + +.. seealso:: + :doc:`Configure the Mexico fiscal localization <../../../finance/fiscal_localizations/mexico>` + +Company configurations +====================== + +First, the company must be configured. Navigate to :menuselection:`Settings app --> Users & +Companies --> Companies`. From the list, select the desired company, and configure the following +fields: + +- :guilabel:`Company Name`: Enter the business name in this field. +- :guilabel:`Address`: Complete the full address, including the :guilabel:`City`, :guilabel:`State`, + :guilabel:`Zip Code`, and :guilabel:`Country`. + + .. important:: + The state selected in the company's address is associated as the *work address* by default for + the employee, and the one used to calculate payroll taxes. + +- :guilabel:`RFC`: Enter the company's :abbr:`RFC (Registro Federal de Contribuyentes, or Federal + Taxpayer Registry)` number. +- :guilabel:`Company ID` : This field is not used in the Mexico localization, and should remain + blank. +- :guilabel:`Currency`: By default, :abbr:`MXN (Mexican pesos)` is selected. If not, select + :guilabel:`MXN` from the drop-down menu. +- :guilabel:`Phone`: Enter the company phone number. +- :guilabel:`Email`: Enter the email used for general contact information. + +.. warning:: + Ensure the information is accurate, as it is used when calculating various taxes. + +Employees +========= + +Every employee being paid must have their employee profiles configured for the Mexico payroll +localization. Additional fields are present after configuring the database for Mexico. + +To update an employee form, open the :menuselection:`Employees` app and click on the desired +employee record. On the employee form, configure the required fields in the related tabs. + +Work tab +-------- + +Enter the :guilabel:`Work Address` for the employee in the :guilabel:`Location` section of the +:guilabel:`Work` tab. + +.. important:: + The state selected in this address determines which salary rules Odoo applies when calculating + taxes. + +Personal tab +------------ + +Ensure the employee has a minimum of one :ref:`trusted bank account ` +listed in the :guilabel:`Bank Accounts` field in the :guilabel:`Private Contact` section. + +These accounts are used to pay the employee. Payroll **cannot** be processed for employees without a +*trusted* :ref:`bank account `. If no trusted bank account is set, a +warning appears on the **Payroll** dashboard and an error occurs when attempting to run payroll. + +Ensure the :guilabel:`Legal Name` and :guilabel:`Gender` fields are populated and configured in the +:guilabel:`Personal Information` section. + +Ensure the following fields are properly populated in the :guilabel:`Citizenship` section: + +- :guilabel:`Nationality (Country)`: The employee's country of citizenship. +- :guilabel:`SSN No (Social Security Number)`: A personal 11-digit :abbr:`NSS (Número de Seguridad + Social)` number. +- :guilabel:`RFC (Registro Federal de Contribuyentes)`: A personal 13-digit alphanumeric tax + identification number. +- :guilabel:`CURP (Clave Única de Registro de Población)`: A personal 18-character alphanumeric + code. + +.. image:: mexico/personal.png + :alt: Where all personal information is located on the employee profile. + +Payroll tab +----------- + +Contract overview section +~~~~~~~~~~~~~~~~~~~~~~~~~ + +This section holds information that drives salary calculations. Ensure the following fields are +configured: + +- :guilabel:`Contract`: The time period the contract is valid for. If the second field is left + blank, the contract runs indefinitely. +- :guilabel:`Wage Type`: Select how the employee is paid. + + - Select :guilabel:`Fixed Wage` for salaried employees who receive the same amount each pay + period. + - Select :guilabel:`Hourly Wage` for employees paid based on hours worked. + + .. tip:: + Set a default :guilabel:`Wage Type` in the salary :ref:`Structure Type + ` to configure employees in bulk. If needed, the default can be + overridden on individual employee records if exceptions are needed. + +- :guilabel:`Wage`: Enter the amount and frequency the employee is paid. +- :guilabel:`Contract Type`: Determines how the employee is paid and classified, such as + :guilabel:`Indefinite Term Employment Contract`, :guilabel:`Hourly Wage Employment`, + :guilabel:`Seasonal Employment Contract`. + + .. important:: + The :guilabel:`Contract Type` field is visible on payslips. + +- :guilabel:`Pay Category`: Select :guilabel:`Mexico: Employee.` for this field. This defines when + the employee is paid, their default working schedule, and the work entry type it applies to. +- :guilabel:`Regime Type`: Select the correct regime type (Régimen de Contratación) for the + employee. The selected regime type determines the employee's benefits, taxes, and social security + contributions. + +Schedule section +~~~~~~~~~~~~~~~~ + +- :guilabel:`Work Entry Source`: Select :guilabel:`Working Schedule`, which creates :doc:`work + entries <../work_entries>` based on the employee's assigned :ref:`working schedule + ` (e.g., 40 hours per week). + + .. note:: + The Mexico payroll localization is currently not able to create work entries from the + **Attendances** or **Planning** apps. + +- :guilabel:`Extra Hours`: Tick the checkbox to allow the **Attendances** app to add any extra work + entries logged by the employee. +- :guilabel:`Working Hours`: Using the drop-down menu, select the default work schedule. This is + particularly important for employees available to receive overtime pay (typically hourly + employees, not salaried). + +Options section +~~~~~~~~~~~~~~~ + +Enter the :guilabel:`Holiday Bonus Rate` percentage given annually ot the employee in the +corresponding field. The percentage is calculated from the employee's base salary. + +If the employee is contributing to a :guilabel:`Savings Fund`, enter the monthly amount to be +contributed. The employer typically matches this amount, and the money is placed in a savings +account that is accessible once a year to the employee. + +Vouchers section +~~~~~~~~~~~~~~~~ + +Some companies may offer extra benefits in the form of vouchers, which are paid to employees for +food and transportation costs. If the company provides these benefits, configure the following +fields: + +- :guilabel:`Payment Period`: Using the drop-down menu, select how often the vouchers are paid out. + The default options are either :guilabel:`Last Day of the Month`, if employees are paid at the end + of the month, or :guilabel:`In the period`, if the vouchers are broken up and evenly distributed + according to the payment schedule, such as weekly or bi-weekly. +- :guilabel:`Meal Vouchers`: Enter the monthly amount paid to the employee towards food expenses. +- :guilabel:`Transport Vouchers`: Enter the monthly amount paid to the employee towards + transportation, such as bus fare or parking fees. +- :guilabel:`Gasoline Vouchers`: Enter the monthly amount paid to the employee for their vehicle's + gas. + +.. note:: + The monetary amount for the vouchers is the *monthly amount* given to employees. If the + :guilabel:`Payment Period` is set to :guilabel:`In the period`, Odoo calculates the voucher + amount for each pay period. + + For example, if an employee is paid weekly, and their :guilabel:`Meal Voucher` is set to $100, + the employee receives $25 in every weekly paycheck. + +.. image:: mexico/payroll-tab.png + :alt: The payroll tab of an employee form, filled out for Mexico. + +Infonavit / Fonacot tab +----------------------- + +Infonavit section +~~~~~~~~~~~~~~~~~ + +:abbr:`INFONAVIT (Instituto del Fondo Nacional de la Vivienda para los Trabajadores)` is a +government institution that assists employees with affordable mortgage credits, which can be used to +buy, build, or remodel a home, or pay off an existing mortgage. + +Add an Infonavit credit +*********************** + +To create an :abbr:`INFONAVIT (Instituto del Fondo Nacional de la Vivienda para los Trabajadores)` +credit, click :guilabel:`Add a line`, and a :guilabel:`Create an Infonavit Credit` pop-up window +loads. + +By default, the :guilabel:`Status` field is populated with :guilabel:`In Progress`. This indicates +the credit is active. + +Next, select the :guilabel:`Type` of credit, either a :guilabel:`Fixed Monetary Fee`, a +:guilabel:`Percentage`, or a :guilabel:`Discount Factor`. After this field is configured, a +corresponding field appears on the form. + +Enter the :guilabel:`Monthly Insurance` to be paid directly to the debt. If any additional funds are +contributed by the employee, enter the additional amount in the :guilabel:`Extra Fixed Monthly +Contribution` field. + +The last field corresponds to the :guilabel:`Type` selected. Enter the :guilabel:`Fixed Monetary +Fee`, :guilabel:`Percentage`, or :guilabel:`Discount Factor` in the field. + +Once all fields are configured, click the :guilabel:`Save & Close` button, and the credit is added +to the :abbr:`INFONAVIT (Instituto del Fondo Nacional de la Vivienda para los Trabajadores)` +section. + +.. image:: mexico/infonavit.png + :alt: The INFONAVIT section filled out for an employee. + +.. important:: + Once :abbr:`INFONAVIT (Instituto del Fondo Nacional de la Vivienda para los Trabajadores)` + credits are fully paid, the payroll officer **must** change the :guilabel:`Status` of each + completed line item to :guilabel:`Closed`. + + If the payroll officer does **not** change the status, money will continue to be contributed to + the employee's account in all subsequent paychecks. + +Fonacot section +~~~~~~~~~~~~~~~ + +:abbr:`FONACOT (Fondo Nacional para el Consumo de los Trabajadores)` is a Mexican government program +that provides employees with low-cost loans for various needs, such as home improvements, education, +or emergencies. + +The :abbr:`FONACOT (Fondo Nacional para el Consumo de los Trabajadores)` section is where employee +repayments are configured. + +Add a Fonacot credit +******************** + +To add a line to the :abbr:`FONACOT (Fondo Nacional para el Consumo de los Trabajadores)` section, +click :guilabel:`Add a line`, and a blank line loads. The :guilabel:`Status` is set to :guilabel:`In +Progress`, by default. + +Enter the monthly payment amount in the :guilabel:`Import` field. If the employee wishes to make any +additional payments each month, enter the value in the :guilabel:`Extra Monthly Contribution` field. + +.. important:: + Once :abbr:`FONACOT (Fondo Nacional para el Consumo de los Trabajadores)` loans are paid off, the + payroll officer **must** change the :guilabel:`Status` of each completed line item to + :guilabel:`Closed`. + + If the payroll officer does **not** change the status, money will continue to be taken out of the + employee's account in all subsequent paychecks. + +Payroll configuration +===================== + +Several sections within the **Payroll** app installs a *salary structure*, *structure type*, +*rules*, and *rule parameters* specific to Mexico. + +Prior to running payroll, the :abbr:`CFDI (Comprobante Fiscal Digital por Internet)` must also be +configured. + +CFDI configuration +------------------ + +The :abbr:`CFDI (Comprobante Fiscal Digital por Internet)` is a **required** electronic tax receipt +that acts as a digital invoice. The :abbr:`CFDI (Comprobante Fiscal Digital por Internet)` **must** +be certified by a :abbr:`PAC (Authorized Certification Provider)` *before* being submitted to the +Mexican Tax Administration (:abbr:`SAT (Servicio de Administración Tributaria)`). + +This document serves as proof of income, expenses, and payroll, and requires both a :abbr:`UUID +(Universally Unique Identifier)` and a digital signature, to comply with Mexican tax laws. + +First, navigate to :menuselection:`Payroll app --> Configuration --> Settings`, and scroll to the +:guilabel:`CFDI` section. + +Enter the :guilabel:`Employer IMSS ID` in the corresponding field, and select the appropriate +:guilabel:`Risk Type` using the drop-down menu. If no risk is associated with the company, select +:guilabel:`Does Not Apply`. + +.. note:: + Mexico assigns different :guilabel:`Risk Types` based on several factors, including information + cross-referenced from previously submitted employee and employer. Consult the company's payroll + officer to determine the correct risk type. + +Salary structures & structure types +----------------------------------- + +When the **l10n_mx_hr_payroll** module is :ref:`installed `, a new +:guilabel:`Salary Structure` gets installed, :guilabel:`Mexico: Employee`. This structure includes +two :guilabel:`Structure Types`, a :guilabel:`Mexico: Regular Pay`, and a :guilabel:`Mexico: +Christmas Bonus`. + +The :guilabel:`Salary Structure` contains all the individual :ref:`salary rules +` for each :guilabel:`Structure Type`, which informs the **Payroll** app how +to calculate employee payslips. + +.. image:: mexico/structure-types.png + :alt: The Mexico salary structures in the salary structures list. + +.. _payroll/mexico_rules: + +Salary rules +------------ + +To view the salary rules that inform the salary structure what to do, navigate to +:menuselection:`Payroll app --> Configuration --> Structures` and expand the :guilabel:`Mexico: +Employee` group to reveal the two available structure types. Click :guilabel:`Mexico: Regular Pay` +to view the detailed regular pay salary rules. + +.. image:: mexico/mx-rules-top-half.png + :alt: The top portion of the US salary rules. + +Each rule defines how pay is calculated, taking into account factors such as bonuses, allowances, +vouchers, and taxes. + +Rule parameters +--------------- + +Some calculations require specific rates associated with them, such as bonuses and holidays. *Rule +Parameters* are capable of listing a value, either a percentage or a fixed amount, to reference in +the salary rules. + +Most rules pull information stored in the parameters module to get the rate of the rule (a +percentage) and the cap (a dollar amount). + +To view rule parameters, navigate to :menuselection:`Payroll app --> Configuration --> Rule +Parameters`. Here, all rule parameters are displayed with their linked :guilabel:`Salary Rules`, +which can be accessed. Review the parameters associated with a rule by looking for the +:guilabel:`Name` of the rule, and make any edits as needed. + +In Mexico, all companies are **required** to configure the following rule parameters: + +- :guilabel:`Mexico: Risk Bonus Rate` (Prima de Riesgo del IMSS): The :guilabel:`Risk Bonus Rate` is + referred to as the *Occupational Risk Premium (Prima de Riesgo de Trabajo)*. This is the amount + the company must contribution to the :abbr:`IMSS (Instituto Mexicano del Seguro Social)`, aka the + *Mexican Social Security Institute*. This amount is based on the company's *accident rate*, which + is calculated using multiple factors, including the number of accidents the company has reported, + and the general level of risk the type of company works with. The rate is determined by the + :abbr:`IMSS (Instituto Mexicano del Seguro Social)` for each company, therefore this rate **must** + be updated when configuring the Mexico payroll localization. +- :guilabel:`Mexico: Christmas Bonus` (Días de Aguinaldo): In Mexico, an annual Christmas bonus is + given to all employees. The bonus must be for a minimum of 15 days of pay. Companies that provide + a higher bonus **must** modify this value. In Odoo, all employees of a company recieve the same + amout of paid days for their Chirstmas bonus. +- :guilabel:`Mexico: Holiday Table` (Tabla de vacaciones): This rule outlines the number of vacation + days an employee is allocated, based on their years of service. This **must** be modified, if + needed, to reflect the company's paid vacation policy. + +.. example:: + The :guilabel:`Mexico: Risk Bonus Rate` of a company is different from the one added by default + in Odoo. To update this, navigate to :menuselection:`Payroll app --> Configuration --> Rule + Parameters`, then, filter the results by :guilabel:`Mexico: Risk Bonus Rate`, and edit the + :guilabel:`Parameter Value`. + +.. important:: + Odoo adds updated rule parameters for the current calendar year. It is **not** recommended to + edit rule parameters (other than the four that must be reviewed and updated, listed above) + **unless a national or state parameter has changed**, and is different from the rule parameters + created by Odoo. Check with all local and national regulations *before* making any changes to + rule parameters. + +.. _payroll/run_mexico: + +Run Mexico payroll +================== + +Before running payroll, the payroll officer must validate employee :doc:`work entries +<../work_entries>` to confirm pay accuracy and catch errors. This includes checking that all time +off is approved and any overtime is appropriate. + +Work entries sync based on the employee's :doc:`contract <../contracts>` configuration. Odoo pulls +from the assigned working schedule, attendance records, planning schedule, and approved time off. + +Any :ref:`discrepencies or conflicts ` must be resolved, then the work entries +can be :ref:`regenerated `. + +Once everything is correct, draft payslips can be :ref:`created individually ` or +in :doc:`batches <../batches>`, referred to in the **Payroll** app as *Pay Runs*. + +.. image:: mexico/mexico-work-entries.png + :alt: The work entries for a pay run, with some time off entered in the work entries. + +.. note:: + To cut down on the payroll officer's time, it is typical to process payslips in batches, either + by wage type (fixed salary vs hourly), pay schedule (weekly, bi-weekly, monthly, etc.), + department (direct cost vs. administration), or any other grouping that best suits the company. + +The process of running payroll includes different actions that need to be executed to ensure that +the amount withheld for funds and government institutions is correct, the amount that the employee +receives as their net salary is correct, and the computation of hours worked reflects the employee's +actual hours worked, among others. + +When running a payroll batch, check that the period, company, and employees included are correct +*before* starting to analyze or validate the data. + +Once the payslips are drafted, review them for accuracy. Check the :guilabel:`Worked Days` and +:guilabel:`Salary Inputs` tabs, and ensure the listed worked time is correct, as well as any other +inputs. Add any missing inputs, such as commissions, bonuses, and :abbr:`ISR (Impuesto Sobre la +Renta)` adjustments that are missing. + +Next, check the various totals (gross pay, vouchers, IMSS contributions, :abbr:`CEAV (Cesantía en +Edad Avanzada y Vejez)`, taxes, and gross pay), then click :guilabel:`Compute Sheet` to update the +salary calculations, if there were edits. If everything is correct, click :guilabel:`Validate`. + +.. image:: mexico/check-payslips.png + :alt: The worked days tab of a payslip. + +Accounting check +---------------- + +The accounting process when running payroll has two components: :ref:`creating journal entries +`, and :ref:`registering payments `. + +.. _payroll/journal-mx: + +Journal entry creation +~~~~~~~~~~~~~~~~~~~~~~ + +After payslips are confirmed and validated, journal entries are posted either individually, or in a +batch. The journal entry is created first as a draft. + +.. important:: + It must be decided if journal entries are done individually or in batches *before* running + payroll. + +.. image:: mexico/create-draft-entry.png + :alt: All payslips in a draft state. + +Twenty-two accounts from the Mexico :abbr:`CoA (Chart of Accounts)` are included with the payroll +localization: + +- :guilabel:`110.01.01 Employment subsidy to apply` +- :guilabel:`210.02.01 Provision for vacation to pay` +- :guilabel:`211.01.01 Provision for employer IMSS to pay` +- :guilabel:`211.02.01 Provision for SAR to pay` +- :guilabel:`216.01.01 Withholding or income tax for wages and salaries` +- :guilabel:`216.11.01 IMSS withholding tax` +- :guilabel:`601.01.01 Wages and salaries` +- :guilabel:`601.07.01 Holiday Bonus` +- :guilabel:`601.15.01 Pantry` +- :guilabel:`601.19.01 Savings fund` +- :guilabel:`601.26.01 IMSS quota` +- :guilabel:`601.27.01 Contributions to infonavit` +- :guilabel:`601.28.01 Contributions to the SAR` +- :guilabel:`201.01.02 Employee Reimbursement` +- :guilabel:`205.06.02 Other Various Short-Term Credits (Fonacot)` +- :guilabel:`210.03.01 Provision for bonus to pay` +- :guilabel:`210.04.01 Provision for savings fund to pay` +- :guilabel:`211.03.01 Provision for infonavit to pay` +- :guilabel:`601.12.01 Bonus` +- :guilabel:`601.16.02 Transport (gasoline vouchers)` +- :guilabel:`601.16.01 Transport (support)` +- :guilabel:`601.74.01 Commissions on sales` + +.. note:: + The :abbr:`CoA (Chart of Accounts)` configuration is done by default when a company is located in + Mexico. The account codes and names can be edited to suit the company's needs. If there is no + :abbr:`CoA (Chart of Accounts)` account associated with a salary rule (used in a salary + structure), Odoo uses the account `Salary Expenses` to create the journal entry, regardless of + the nature of the move. + +If everything seems correct on the journal entry draft, post the journal entries. + +.. image:: mexico/post-entries.png + :alt: Journal entries posted. + +.. _payroll/register-mx: + +Register Payments +----------------- + +After the :ref:`journal entries ` are validated, Odoo can generate payments. + +.. important:: + To generate payments from payslips,employee's **must** have a *trusted* bank account. If the + employee's bank account is *not* marked as `trusted`, CFDI files **cannot** be generated through + Odoo. + +.. image:: mexico/paid.png + :alt: Payslips with a status of paid. + +Generate CFDI XML files +----------------------- + +After payslips have bee processed and paid, a :abbr:`CFDI (Comprobante Fiscal Digital por Internet)` +XML file must be generated, which is then electronically submitted to Mexico's :abbr:`SAT (Servicio +de Administración Tributaria)`. + +To create the :abbr:`CFDI (Comprobante Fiscal Digital por Internet)` file, open the individual +payslip, and click the :guilabel:`Generate CFDI` button. + +Once the file has been created and sent, a record is stored in the chatter. + +Close Payroll +------------- + +If there are no errors, payroll is completed for the pay period. + +Run Christmas bonus payroll +=========================== + +To run the annual Christmas bonus, follow the same workflow for :ref:`regular Mexico payroll +`, using the :guilabel:`Mexico: Christmas Bonus` salary structure. diff --git a/content/applications/hr/payroll/payroll_localizations/mexico/check-payslips.png b/content/applications/hr/payroll/payroll_localizations/mexico/check-payslips.png new file mode 100644 index 0000000000..c106abb3e0 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/mexico/check-payslips.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/mexico/create-draft-entry.png b/content/applications/hr/payroll/payroll_localizations/mexico/create-draft-entry.png new file mode 100644 index 0000000000..8144858dbd Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/mexico/create-draft-entry.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/mexico/holiday-rules.png b/content/applications/hr/payroll/payroll_localizations/mexico/holiday-rules.png new file mode 100644 index 0000000000..729052d49e Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/mexico/holiday-rules.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/mexico/infonavit.png b/content/applications/hr/payroll/payroll_localizations/mexico/infonavit.png new file mode 100644 index 0000000000..4cdcf9cf7d Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/mexico/infonavit.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/mexico/mexico-work-entries.png b/content/applications/hr/payroll/payroll_localizations/mexico/mexico-work-entries.png new file mode 100644 index 0000000000..006b27b9e7 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/mexico/mexico-work-entries.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/mexico/mx-rules-top-half.png b/content/applications/hr/payroll/payroll_localizations/mexico/mx-rules-top-half.png new file mode 100644 index 0000000000..b835bd1883 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/mexico/mx-rules-top-half.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/mexico/paid.png b/content/applications/hr/payroll/payroll_localizations/mexico/paid.png new file mode 100644 index 0000000000..e9c068952b Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/mexico/paid.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/mexico/payroll-tab.png b/content/applications/hr/payroll/payroll_localizations/mexico/payroll-tab.png new file mode 100644 index 0000000000..bb266e4c03 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/mexico/payroll-tab.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/mexico/personal.png b/content/applications/hr/payroll/payroll_localizations/mexico/personal.png new file mode 100644 index 0000000000..c0ccc44afa Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/mexico/personal.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/mexico/post-entries.png b/content/applications/hr/payroll/payroll_localizations/mexico/post-entries.png new file mode 100644 index 0000000000..dd400ee9d9 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/mexico/post-entries.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/mexico/structure-types.png b/content/applications/hr/payroll/payroll_localizations/mexico/structure-types.png new file mode 100644 index 0000000000..5e1bea3a1c Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/mexico/structure-types.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states.rst b/content/applications/hr/payroll/payroll_localizations/united_states.rst new file mode 100644 index 0000000000..c94dea12a8 --- /dev/null +++ b/content/applications/hr/payroll/payroll_localizations/united_states.rst @@ -0,0 +1,621 @@ +============= +United States +============= + +The U.S. payroll localization covers salary computations for employees, including both employee and +employer payroll taxes. It accounts for federal and state regulations. + +The states included in this localization are: + +- California (CA) +- New York (NY) +- Texas (TX) +- Florida (FL) +- Colorado (CO) +- Alabama (AL) +- Washington (WA) +- Nevada (NV) + +.. note:: + Federal taxes (Income, :abbr:`FICA (Federal Insurance Contributions Act)`, and Unemployment) for + both employees and employers are covered by default in the Odoo U.S. Payroll localization. + Additional states will be added over time, so check back for updates. + +Before configuring the United States localization, refer to the general :doc:`payroll +<../../payroll>` documentation, which includes the basic information for all localizations, as well +as all universal settings and fields. + +.. _payroll/usa_apps: + +Apps & modules +============== + +:ref:`Install ` the following modules to get all the features of the United States +payroll localization: + +.. list-table:: + :header-rows: 1 + + * - Name + - Technical name + - Dependencies + - Description + * - :guilabel:`United States - Payroll` + - `l10n_us_hr_payroll` + - - hr_payroll + - hr_contract_reports + - hr_work_entry_holidays + - hr_payroll_holidays + - Provides U.S. payroll basics, including employee tax details, salary structures + (Basic/Gross/Net), tax rules, and W-2/3PA reporting. + * - :guilabel:`United States - Payroll with Accounting` + - `l10n_us_hr_payroll_account` + - - hr_payroll_account + - l10n_us + - l10n_us_hr_payroll + - Links payroll and accounting by creating journal entries (per payslip if needed) to record + payroll in the company's books. + +.. seealso:: + :doc:`Configure the United States fiscal localization + <../../../finance/fiscal_localizations/united_states>` + +General configurations +====================== + +First, the company must be configured. Navigate to :menuselection:`Settings app --> Users & +Companies --> Companies`. From the list, select the desired company, and configure the following +fields: + +- :guilabel:`Company Name`: Enter the business name in this field. +- :guilabel:`Address`: Complete the full address, including the :guilabel:`City`, :guilabel:`State`, + :guilabel:`Zip Code`, and :guilabel:`Country`. + + .. important:: + The state selected in the company's address is associated as the *work address* by default for + the employee, and the one used to calculate payroll taxes. + +- :guilabel:`Tax ID`: Enter the company's :abbr:`EIN (Employer Identification Number)`. +- :guilabel:`Company ID` : Enter the business's state ID number. +- :guilabel:`Currency`: By default, :abbr:`USD (US Dollars)` is selected. If not, select + :guilabel:`USD` from the drop-down menu. +- :guilabel:`Phone`: Enter the company phone number. +- :guilabel:`Email`: Enter the email used for general contact information. + +.. warning:: + Ensure the information is accurate, as it is used when creating W-2s. + +Employees +========= + +Every employee being paid must have their employee profiles configured for the United States payroll +localization. Additional fields are present after configuring the database for the United States. + +To update an employee form, open the :menuselection:`Employees` app and click on the desired +employee record. On the employee form, configure the required fields in the related tabs. + +Work tab +-------- + +Enter the :guilabel:`Work Address` for the employee in the :guilabel:`Location` section of the +:guilabel:`Work` tab. + +.. important:: + The state selected in this address determines which salary rules Odoo applies when calculating + taxes. + +Personal tab +------------ + +Ensure the employee has a minimum of one :ref:`trusted bank account ` +listed in the :guilabel:`Bank Accounts` field in the :guilabel:`Private Contact` section. + +These accounts are used to pay the employee, via an automation through a NACHA payment file. Payroll +**cannot** be processed for employees without a *trusted* :ref:`bank account +`. If no trusted bank account is set, a warning appears on the +**Payroll** dashboard and an error occurs when attempting to run payroll. + +Ensure there is a valid :guilabel:`SSN No` entered in the :guilabel:`Citizenship` section . The last +four digits of the :abbr:`SSN (Social Security Number)` number appears on the employee's payslips. + +.. image:: united_states/bank.png + :alt: Where bank account information is located on the employee profile. + +Payroll tab +----------- + +Contract overview section +~~~~~~~~~~~~~~~~~~~~~~~~~ + +This section holds information that drives salary calculations. Ensure the following fields are +configured: + +- :guilabel:`Contract`: The Validity of the compensation conditions can be updated depending on the + needs. +- :guilabel:`Wage Type`: Select how the employee is paid. + + - Select :guilabel:`Fixed Wage` for salaried employees who receive the same amount each pay + period. + - Select :guilabel:`Hourly Wage` for employees paid based on hours worked. + + .. tip:: + Set a default :guilabel:`Wage Type` in the salary :ref:`Structure Type + ` to configure employees in bulk. If needed, the default can be + overridden on individual employee records if exceptions are needed. + +- :guilabel:`Contract Type`: Determines how the employee is paid and classified, such as + :guilabel:`Salary-exempt`, :guilabel:`Salary-nonexempt`, :guilabel:`Hourly`. + + .. important:: + This field is visible on payslips. Some states require payslips to state if the employee is + exempt or non-exempt from overtime. Ensure the selection follows the state laws. + +- :guilabel:`Pay Category`: Select :guilabel:`United States: Employee` for this field. This defines + when the employee is paid, their default working schedule, and the work entry type it applies to. + +.. image:: united_states/payroll-overview.png + :alt: The contract overview section of the employee form of the payroll tab. + +Schedule section +~~~~~~~~~~~~~~~~ + +- :guilabel:`Work Entry Source`: Defines how :doc:`work entries <../work_entries>` are generated for + payroll during the specified pay period. The options are: + + - :guilabel:`Working Schedule`: Based on the employee's assigned :ref:`working schedule + ` (e.g., 40 hours per week). + - :guilabel:`Attendances`: Based on :doc:`approved checked-in hours + <../../attendances/management>` in the **Attendances** app. + - :guilabel:`Planning`: Based on :ref:`scheduled shifts ` in the **Planning** + app. + +- :guilabel:`Extra Hours`: Tick the checkbox to allow the **Attendances** app to add any extra work + entries logged by the employee. +- :guilabel:`Working Hours`: Using the drop-down menu, select the default work schedule. This is + particularly important for employees available to receive overtime pay (typically hourly + employees, not salaried). + +W-2 form section +~~~~~~~~~~~~~~~~ + +A W-2 is an annual tax form that reports an employee's wages, taxes, and benefits. Employees use it +to file their tax returns. The options below correspond to checkboxes in *box 13* of the W-2 form. +Select any that apply to the employee. + +- :guilabel:`Statutory Employee`: Tick this box if the employee is exempt from income tax, but + subject to :abbr:`FICA (Federal Insurance Contributions Act)` taxes. +- :guilabel:`Retirement Plan`: Tick this box if the employee is an active contributor to an + employer-sponsored retirement plan. +- :guilabel:`Third-Party Sick Pay`: Tick this box if the employee is covered under a plan where sick + pay benefits may be provided by a third party (e.g., an insurance company) during the year. + +W-4 form section +~~~~~~~~~~~~~~~~ + +A W-4 is an :abbr:`IRS (Internal Revenue Services)` form that determines an employee's federal tax +withholding, which the employer remits directly to the :abbr:`IRS (Internal Revenue Services)`. + +Configure any relevant fields for the employee in this section. + +State filing section +~~~~~~~~~~~~~~~~~~~~ + +An employee's marital status impacts their payroll taxes. Configure the following fields regarding +their status and withholdings. + +- :guilabel:`Status`: Using the drop-down menu, select the employee's *federal* filing status. The + options are :guilabel:`Single`, :guilabel:`Married/RDP filing jointly`, :guilabel:`Married/RDP + filing separately`, :guilabel:`Head of household`, or :guilabel:`Qualifying surviving spouse/RDP + with child`. This typically comes from the employee's W-4 form. +- :guilabel:`Tax Status`: Using the drop-down menu, select the employee's *state* filing status, if + applicable. + + .. tip:: + The federal and state statuses do **not** need to match. + + .. note:: + As of 2025, these states do **not** collect state income tax: Alaska, Florida, Nevada, New + Hampshire, South Dakota, Tennessee, Texas, Washington, and Wyoming. If a payroll localization + exists for these states, there are **no** corresponding state options in the :guilabel:`Tax + Status` field. Leave it blank. + +- :guilabel:`Withholding Allowance`: Enter the total annual amount to be withheld from the + employee's pay for the year, for state taxes. Only fill this out if the employee lives in a state + with state income tax. +- :guilabel:`Extra Withholding`: Enter the total *extra* annual amount (not including the + :guilabel:`Withholding Allowance` amount) to be withheld from the employee's pay for the year, for + state taxes, if the employee lives in a state with state income tax. + +.. image:: united_states/state-filing.png + :alt: The state filing section of the employee form, filled out. + +Common benefits +~~~~~~~~~~~~~~~ + +The following sections of benefits are considered common ones offered by US employers. This +information needs to be populated with the information selected by the employee. + +.. note:: + The benefits listed in this section are considered the most commonly offered by companies. If + other employee benefits exist that require regular paycheck deductions, they can be added as + *inputs*. + +Pre-tax deductions +****************** + +Pre-tax benefits lower the employee's gross wage, which decreases the base amount for tax +calculations. These are displayed at the beginning of the payslip before the gross wage is +stipulated. + +Retirement plans section +^^^^^^^^^^^^^^^^^^^^^^^^ + +This section is where the employee and employer 401(k) contributions are configured. Fill out the +following fields: + +- :guilabel:`401(k)`: Enter the amount of money taken out of the employee's payslip each pay period. + This can be entered either as a percentage (%) of the payslip amount, or a specific dollar amount + per payslip ($/slip). +- :guilabel:`Matching Amount`: Enter the matching amount the employer contributes to the employee's + 401(k), as compared to the employee's contributions. This field can also be configured as either a + percentage (%) of the employee's contribution, or a specific dollar amount ($/slip). +- :guilabel:`Matching Yearly Cap`: If there is a limit to the employer's contribution, enter it as a + percentage of the employee's annual salary. + +.. example:: + A company allows employees to contribute to a 401(k) retirement plan, and matches 50% of the + employee's contributions, up to $5,000 USD a year. The employee earns $50,000 USD a year, and + contributes 20% of their pay to their 401(k), which is $10,000 USD. + + To configure this, enter `20.00` in the :guilabel:`401(k)` field, `50.00` in the + :guilabel:`Matching Amount` field, and `20.00` in the :guilabel:`Matching Yearly Cap` field. + + .. image:: united_states/retirement.png + :alt: An employee's retirement configurations. + +Health benefits section +^^^^^^^^^^^^^^^^^^^^^^^ + +This section is where the employee's health contributions are configured. Populate each of the +fields with the corresponding amount deducted from *each paycheck* for the employee. + +.. image:: united_states/health.png + :alt: The health benefits section for an employee, filled out with payslip deductions. + +Other benefits section +^^^^^^^^^^^^^^^^^^^^^^ + +This section currently only houses a :guilabel:`Commuter` benefit field. Enter the amount being +deducted per paycheck, for applicable commuter benefits. + +Post-tax deductions section +*************************** + +These types of benefits count as deductions *after* taxes are calculated. They appear towards the +end of the payslip before the net amount is displayed. Currently, only one field, :guilabel:`ROTH +401(k)` appears in this section. Enter either a percentage (%) of the payslip amount, or a specific +dollar amount per payslip ($/slip) being deducted from the employee's pay, and deposited into a ROTH +401(k) account. + +Payroll configuration +===================== + +Several sections within the **Payroll** app installs a Salary Structure, Structure Type, Rules, and +Parameters specific to the United States. + +Salary structures & structure types +----------------------------------- + +When the **l10n_us_hr_payroll** module is :ref:`installed `, a new +:guilabel:`Salary Structure` gets installed, :guilabel:`United States: Regular Pay`. This structure +includes one :guilabel:`Structure Type`, :guilabel:`United States: Regular Pay`. + +The :guilabel:`Salary Structure` contains all the individual :ref:`salary rules ` +that informs the **Payroll** app how to calculate employee payslips. + +.. image:: united_states/structure-types.png + :alt: The United States salary structure in the salary structures list. + +.. _payroll/usa_rules: + +Salary rules +------------ + +To view the salary rules that inform the salary structure what to do, navigate to +:menuselection:`Payroll app --> Configuration --> Structures` and expand the :guilabel:`United +States: Employee` group to reveal the :guilabel:`United States: Regular Pay` structure type. Click +:guilabel:`United States: Regular Pay` to view the detailed salary rules. + +.. image:: united_states/us-rules-top-half.png + :alt: The top portion of the US salary rules. + +Each rule defines how pay is calculated, taking into account factors such as commissions, bonuses, +taxes, and insurance. The *logic* behind the :guilabel:`United States: Regular Pay` rules is as +follows: + +- The first four rules listed reflects all sources of income, including the basic wage listed on the + contract (:guilabel:`Basic Salary`), plus any allowances, such as :guilabel:`Commissions`, + :guilabel:`Tips`, and :guilabel:`Bonuses`. + + .. image:: united_states/first-rules.png + :alt: The basic salary rules for the US localization. + +- Adding up these inputs is how the gross salary (:guilabel:`Gross Pay`) is calculated. This amount + is the base amount used to calculate payroll taxes. + +- The next set of rules are the various pre-tax benefits and taxable income, such as + :guilabel:`Medical` insurance contributions and :guilabel:`Commuter Benefits`. After the + employee's :guilabel:`Gross Pay` is calculated, Odoo deducts all the pre-tax benefits listed on + the employee's contract to determine the employee's :guilabel:`Taxable Income`. + + .. image:: united_states/pre-tax.png + :alt: The pre-tax rules for the US localization. + +- Next, all the various tax rules are listed where both federal and state payroll withholdings are + outlined. First, federal tax rules are listed, then any state rules (if any) are listed. + + .. image:: united_states/irs.png + :alt: The federal tax rules for the US localization. + + .. note:: + The rule for federal withholdings for `Worker's Compensation` appears *after* several + state-specific withholdings are listed, and does **not** appear in the above image, but are + listed in the rules. + +- The last rules listed are the post-tax employee deductions. + + .. image:: united_states/post-tax.png + :alt: The post-tax rules for the US localization. + +- The :guilabel:`Other Inputs` tab contains anything else affecting payroll. This includes items to + be added to the payslip, such as :guilabel:`Tips`, and other deductions, such as :guilabel:`Child + Support`. + + .. image:: united_states/other-inputs.png + :alt: The other inputs for the US localization. + +- The employee's net salary is the amount the employee receives from the employer. The formula to + calculate the net salary is: + + .. math:: + + \text{Gross Salary} + \text{Allowances} - \text{Payroll Taxes} - \text{General Deductions} + +- Additionally, an extra section exists in payroll calculation for the US called `Employer + Deductions`, and it breaks down the payments the employer must make as their portion of payroll + taxes. + + .. image:: united_states/employer-deductions.png + :alt: The employer deduction rules for the US localization. + + .. note:: + The rule for employer deductions for `Worker's Compensation` appears *after* several + state-specific employer deductions are listed, and does **not** appear in the above image, but + are listed in the rules. + +Rule parameters +--------------- + +Some calculations require specific rates associated with them, or wage caps. *Rules Parameters* are +capable of listing a value, either a percentage or a fixed amount, to reference in the salary rules. + +.. example:: + The wage base for Social Security tax calculations has a cap for 2025, accounted for in the `US: + FICA OASDI Cap` parameter. + +Most rules pull information stored in the parameters module to get the rate of the rule (a +percentage) and the cap (a dollar amount). + +To view rule parameters, navigate to :menuselection:`Payroll app --> Configuration --> Rule +Parameters`. Here, all rule parameters are displayed with their linked :guilabel:`Salary Rules`, +which can be accessed. Review the parameters associated with a rule by looking for the +:guilabel:`Name` of the rule, and make any edits as needed. + +.. example:: + The Unemployment tax of a company is different from the one added by default in Odoo. To update + this, navigate to :menuselection:`Payroll app --> Configuration --> Rule Parameters`, then, + filter the results by :abbr:`FUTA (Federal Unemployment Tax Act)`, or the name of the state that + needs editing, and edit the corresponding rate from the list. + +.. important:: + Odoo adds updated rule parameters for the current calendar year. It is **not** recommended to + edit rule parameters **unless a federal or state parameter has changed**, and is different from + the rule parameters created by Odoo. Check with all local and national regulations *before* + making any changes to rule parameters. + +Run US payroll +============== + +Before running paypoll, the payroll officer must validate employee :doc:`work entries +<../work_entries>` to confirm pay accuracy and catch errors. This includes checking that all time +off is approved and any overtime is appropriate. + +Work entries sync based on the employee's :doc:`contract <../contracts>` configuration. Odoo pulls +from the assigned working schedule, attendance records, planning schedule, and approved time off. + +Any :ref:`discrepencies or conflicts ` must be resolved, then the work entries +can be :ref:`regenerated `. + +Once everything is correct, draft payslips can be :ref:`created individually ` or +in :doc:`batches <../batches>`, referred to in the **Payroll** app as *Pay Runs*. + +.. image:: united_states/work-entries.png + :alt: The work entries for a pay run, with some time off entered in the work entries. + +.. note:: + To cut down on the payroll officer's time, it is typical to process payslips in batches, either + by wage type (fixed salary vs hourly), pay schedule (weekly, bi-weekly, monthly, etc.), + department (direct cost vs. administration), or any other grouping that best suits the company. + +The process of running payroll includes different actions that need to be executed to ensure that +the amount withheld from payroll taxes is correct, the amount that the employee receives as their +net salary is correct, and the computation of hours worked reflects the employee's actual hours +worked, among others. + +When running a payroll batch, check that the period, company, and employees included are correct +*before* starting to analyze or validate the data. + +Once the payslips are drafted, review them for accuracy. Check the :guilabel:`Worked Days & Inputs` +tab, and ensure the listed worked time is correct, as well as any other inputs. Add any missing +inputs, such as commissions, tips, reimbursements, that are missing. + +Next, check the various totals (gross pay, employee taxes, benefits, employer taxes, net salaries), +then click :guilabel:`Compute Sheet` to update the salary calculations, if there were edits. If +everything is correct, click :guilabel:`Validate`. + +.. image:: united_states/check-payslips.png + :alt: The worked days tab of a payslip. + +Accounting check +---------------- + +The accounting process when running payroll has two components: :ref:`creating journal entries +`, and :ref:`registering payments `. + +.. _payroll/journal: + +Journal entry creation +~~~~~~~~~~~~~~~~~~~~~~ + +After payslips are confirmed and validated, journal entries are posted either individually, or in a +batch. The journal entry is created first as a draft. + +.. important:: + It must be decided if journal entries are done individually or in batches *before* running + payroll. + +.. image:: united_states/create-draft-entry.png + :alt: All payslips in a draft state. + +Four accounts from the US :abbr:`CoA (Chart of Accounts)` are included with the payroll +localization: + +- `611000 Salaries & Wages`: Records gross salary and the employer's portion of payroll expenses. + Also groups values from rules without specific accounts (e.g., company-specific benefits). +- `230100 Employee Payroll Taxes`: Withheld taxes from employees, which the employer must file and + pay. The partner and label columns of the journal entry indicate the specific tax. +- `230200 Employer Payroll Taxes`: Employer portion of payroll taxes to be filed and paid. The + partner and label columns of the journal entry indicate the specific tax. +- `230000 Salary Payable`: Net salary owed to the employee. + +.. note:: + The :abbr:`CoA (Chart of Accounts)` configuration is done by default when a company is located in + the US. The account codes and names can be edited to suit the company's needs. If there is no + :abbr:`CoA (Chart of Accounts)` account associated with a salary rule (used in a salary + structure), Odoo uses the account `Salary Expenses` to create the journal entry, regardless of + the nature of the move. + +If everything seems correct on the journal entry draft, post the journal entries. + +.. image:: united_states/post-entries.png + :alt: Journal entries posted. + +.. _payroll/register: + +Register Payments +----------------- + +After the :ref:`journal entries ` are validated, Odoo can generate payments. + +.. important:: + To generate payments from payslips,employee's **must** have a *trusted* bank account. If the + employee's bank account is *not* marked as `trusted`, NACHA files **cannot** be generated through + Odoo. + +Payments can be :guilabel:`Grouped by Partner` if there is a partner associated with a salary rule. + +.. image:: united_states/paid.png + :alt: Payslips with a status of paid. + +Close Payroll +------------- + +If there are no errors, payroll is completed for the pay period. + +Reports +======= + +The US localization contains several reports unique to the US, which provide tax information for +employees, as well as the ability to integrate with outside organizations such as ADP. + +W2 Report +--------- + +The *W2 Report* provides a CSV file that allows employees to e-file their W2 report with third-party +software. To access this report, navigate to :menuselection:`Payroll -> Reporting -> United States +-> W2`. + +To create a W2 form, click :guilabel:`New`, and a blank :guilabel:`Create W2 Form` page loads. Set +the :guilabel:`Start Date` and :guilabel:`End Date` (typically a calendar year), and select the +:guilabel:`Company`, if in a multi-company database. + +All pay runs for the time period appear in a list view. To add any missing pay runs, click +:guilabel:`Add a line` at the bottom of the list, and select the missing files. + +When done, click the :guilabel:`Generate` button to create a CSV file with a summary of all payroll +related payments made during the specified time period. + +.. image:: united_states/w2.png + :alt: The W2 report screen, with the file to download in the top half. + +Form 941 +-------- + +The *Form 941* report is meant to inform the government of the amount of federal income tax, +:abbr:`FICA (Federal Insurance Contributions Act)` taxes (Medicare and Social Security) withheld +from employee paychecks. It also reports the employee's side of taxes. + +To create this report, navigate to :menuselection:`Payroll -> Reporting -> United States -> Form +941`. Click the :guilabel:`New` button, and a new :guilabel:`Form 941` report page loads. Configure +the information on the top portion of the form, including the :guilabel:`Company`, :guilabel:`Tax +Year`, :guilabel:`Quarter`, :guilabel:`IRS Payment Option` (how the money is being sent to the IRS), +and :guilabel:`Deposit Schedule and Tax Liability` (how often payments are made to the IRS). + +All pay runs for the time period appear in a list view. To add any missing pay runs, click +:guilabel:`Add a line` at the bottom of the list, and select the missing files. + +When done, click :guilabel:`Generate`, and the report is created as a CSV file, and appears on the +:guilabel:`Form 941` report dashboard. Companies then download and submit this report through a +third party for e-filing. + +.. image:: united_states/941.png + :alt: The 941 report screen, with the file to download in the top half. + +Form 940 +-------- + +The *Form 940* report details the annual :abbr:`FUTA (Federal Unemployment Tax Act)` withheld for +payroll. + +To create this report, navigate to :menuselection:`Payroll -> Reporting -> United States -> Form +940`. Click the :guilabel:`New` button, and a new :guilabel:`Form 940` report page loads. Configure +the information on the top portion of the form, including the :guilabel:`Company`, :guilabel:`Tax +Year`, :guilabel:`Single State Payer`, :guilabel:`Multi State Employer`, :guilabel:`Paid in Credit +Reduction State`, and :guilabel:`IRS Payment Option` (how the money is being sent to the IRS). + +All pay runs for the time period appear in a list view. To add any missing pay runs, click +:guilabel:`Add a line` at the bottom of the list, and select the missing files. + +When done, click :guilabel:`Generate`, and the report is created as a CSV file, and appears on the +:guilabel:`Form 940` report dashboard. Companies then download and submit this report through a +third party for e-filing. + +.. image:: united_states/940.png + :alt: The 940 report screen, with the file to download in the top half. + +Export data to third-party apps +------------------------------- + +The *ADP Export* report generates a CSV file that can be submitted to ADP, which then makes payments +to the employees. + +The CSV file summarizes the employee's worked hours during a specified time period, correlating to +their salary or hourly wage. The report is generated from :doc:`work entry <../work_entries>` +*after* any time off is confirmed. + +The export format is meant to match with the ADP format. Since companies can customize their portal +and may require some changes, the data is there to be fed to ADP to run payroll in it. + +.. important:: + To access the ADP Export report, the `United States - Payroll - Export to ADP` module **must** be + :ref:`installed `. diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/940.png b/content/applications/hr/payroll/payroll_localizations/united_states/940.png new file mode 100644 index 0000000000..21dabe4393 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/940.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/941.png b/content/applications/hr/payroll/payroll_localizations/united_states/941.png new file mode 100644 index 0000000000..f34afc89c8 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/941.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/bank.png b/content/applications/hr/payroll/payroll_localizations/united_states/bank.png new file mode 100644 index 0000000000..b2d44fc362 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/bank.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/check-payslips.png b/content/applications/hr/payroll/payroll_localizations/united_states/check-payslips.png new file mode 100644 index 0000000000..078aa2cf09 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/check-payslips.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/create-draft-entry.png b/content/applications/hr/payroll/payroll_localizations/united_states/create-draft-entry.png new file mode 100644 index 0000000000..c67c88456b Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/create-draft-entry.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/employer-deductions.png b/content/applications/hr/payroll/payroll_localizations/united_states/employer-deductions.png new file mode 100644 index 0000000000..dca52d729b Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/employer-deductions.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/first-rules.png b/content/applications/hr/payroll/payroll_localizations/united_states/first-rules.png new file mode 100644 index 0000000000..9c4f1338d1 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/first-rules.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/health.png b/content/applications/hr/payroll/payroll_localizations/united_states/health.png new file mode 100644 index 0000000000..264e8efdcb Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/health.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/irs.png b/content/applications/hr/payroll/payroll_localizations/united_states/irs.png new file mode 100644 index 0000000000..bc7335d107 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/irs.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/other-inputs.png b/content/applications/hr/payroll/payroll_localizations/united_states/other-inputs.png new file mode 100644 index 0000000000..87aad650c7 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/other-inputs.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/paid.png b/content/applications/hr/payroll/payroll_localizations/united_states/paid.png new file mode 100644 index 0000000000..61f0f78d71 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/paid.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/payroll-overview.png b/content/applications/hr/payroll/payroll_localizations/united_states/payroll-overview.png new file mode 100644 index 0000000000..ff7aaf3cad Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/payroll-overview.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/post-entries.png b/content/applications/hr/payroll/payroll_localizations/united_states/post-entries.png new file mode 100644 index 0000000000..25e3dc30c1 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/post-entries.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/post-tax.png b/content/applications/hr/payroll/payroll_localizations/united_states/post-tax.png new file mode 100644 index 0000000000..9ccd54e979 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/post-tax.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/pre-tax.png b/content/applications/hr/payroll/payroll_localizations/united_states/pre-tax.png new file mode 100644 index 0000000000..0e1b592be4 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/pre-tax.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/retirement.png b/content/applications/hr/payroll/payroll_localizations/united_states/retirement.png new file mode 100644 index 0000000000..452a38b30a Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/retirement.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/state-filing.png b/content/applications/hr/payroll/payroll_localizations/united_states/state-filing.png new file mode 100644 index 0000000000..a5ebb87b04 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/state-filing.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/structure-types.png b/content/applications/hr/payroll/payroll_localizations/united_states/structure-types.png new file mode 100644 index 0000000000..cc803dd8b2 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/structure-types.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/us-rules-top-half.png b/content/applications/hr/payroll/payroll_localizations/united_states/us-rules-top-half.png new file mode 100644 index 0000000000..30a3acd7b4 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/us-rules-top-half.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/w2.png b/content/applications/hr/payroll/payroll_localizations/united_states/w2.png new file mode 100644 index 0000000000..4397932bb2 Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/w2.png differ diff --git a/content/applications/hr/payroll/payroll_localizations/united_states/work-entries.png b/content/applications/hr/payroll/payroll_localizations/united_states/work-entries.png new file mode 100644 index 0000000000..a8238af21b Binary files /dev/null and b/content/applications/hr/payroll/payroll_localizations/united_states/work-entries.png differ diff --git a/content/applications/hr/payroll/payslips.rst b/content/applications/hr/payroll/payslips.rst index b39a4d7a03..db309f40ac 100644 --- a/content/applications/hr/payroll/payslips.rst +++ b/content/applications/hr/payroll/payslips.rst @@ -2,222 +2,172 @@ Payslips ======== -*Payslips* are generated by payroll officers through the :menuselection:`Payroll` application. - -The :guilabel:`Payslips` drop-down header of the :menuselection:`Payroll` application consists of -three sections: :guilabel:`To Pay`, :guilabel:`All Payslips`, and :guilabel:`Batches`. - -These three sections provide all the tools needed to create payslips for employees, including -individual payslips, a batch of payslips, or commission payslips. - -.. image:: payslips/payslips.png - :align: center - :alt: Payslips menu selection in Payroll. - -.. _payroll/to-pay: - -To pay -====== - -Click on :menuselection:`Payroll app --> Payslips --> To Pay` to see the payslips that need to be -paid. - -.. image:: payslips/all-pay-slips.png - :align: center - :alt: View all payslips that need to be paid on the Payslips To Pay page. - -Each payslip lists the :guilabel:`Reference` number for the individual payslip, the -:guilabel:`Employee` name, the :guilabel:`Batch Name`, the :guilabel:`Company`, the :guilabel:`Basic -Wage`, :guilabel:`Gross Wage`, :guilabel:`Net Wage`, and the :guilabel:`Status` of the payslip. - -Click on an individual payslip entry to view the details for that individual payslip. +*Payslips* are individual records of payment, containing all the details of how the pay was +calculated (hours, deductions, other inputs, etc.), and generated by payroll officers through the +**Payroll** application. Payslips can be created and processed individually, or multiple payslips +can be processed at one time, in a single batch. .. _payroll/new-payslip: -Create a new payslip --------------------- +Create a payslip +================ A new payslip can be created from either the :ref:`Payslips To Pay ` page or the :ref:`Employee Payslips ` page. -Create a new payslip by clicking the :guilabel:`New` button in the top-left corner. - -A blank payslip form is loaded, where the necessary payslip information can be entered. +Navigate to :menuselection:`Payroll app --> Payslips`, and click either :guilabel:`To Pay` or +:guilabel:`All Payslips`. Click the :guilabel:`New` button in the top-left corner, and a blank +payslip form loads. Payslip form -~~~~~~~~~~~~ - -On the blank payslip form, several fields are required. Most of the required fields auto-populate -after an employee is selected. +------------ Fill out the following information on the payslip form: -- :guilabel:`Employee`: type in the name of an employee, or select the desired employee from the - drop-down list in this field. This field is **required**. +- :guilabel:`Employee`: Using the drop-down menu, select the employee in this field. This field is + **required**. Once a selection is made, other fields may auto-populate according to the employee + record. .. note:: It is recommended to **only** create payslips for employees that are already in the database. If there is no current employee record (and therefore no employee contract) it is recommended - to create the new employee in the *Employees* application **before** creating payslips for that + to create the new employee in the **Employees** application *before* creating payslips for that employee. Refer to the :doc:`new employee <../employees/new_employee>` documentation for instructions on how to add an employee. -- :guilabel:`Period`: the first day to the last day of the *current* month auto-populates the +- :guilabel:`Contract`: The current contract for the selected employee populates this field. This + field is **required**. + + .. important:: + All employees are required to have a contract in order to generate payslips. Additionally, + *only one* contract can be in the running stage for each employee, therefore the current + contract populates this field, and it is **not** recommended to make changes to this field. + +- :guilabel:`Batch`: Using the drop-down menu, select the payslip batch this new payslip should be + added to, if applicable. +- :guilabel:`Structure`: The structure linked to the employee's contract auto-populates this field + by default. If desired, use the drop-down menu to select a different structure. +- :guilabel:`Period`: The first day to the last day of the *current* month auto-populates the :guilabel:`Period` fields by default. The dates can be changed, if desired. To change the start date, click on the first date in the :guilabel:`Period` field to reveal a - pop-up calendar. On this calendar, use the :guilabel:`< (less-than)` and :guilabel:`> - (greater-than)` icons to select the desired month. Then, click on the desired day to select that + pop-up calendar. Navigate to the desired month, and click on the desired day to select that specific date. Repeat this process to modify the end date for the payslip. These fields are **required**. -- :guilabel:`Contract`: using the drop-down menu, select the desired contract for the employee. Only - the available corresponding contracts for the selected employee appear as options. This field is - **required**. -- :guilabel:`Batch`: using the drop-down menu in this field, select the batch of payslips this new - payslip should be added to. -- :guilabel:`Structure`: using the drop-down menu, select the salary structure type. Only the - corresponding structures associated with the selected contract for the employee appear as options. - - If no employee and/or no contract is selected yet, all available :guilabel:`Structures` appear in - the list. Once an employee and/or contract is selected, any unavailable :guilabel:`Structures` set - for that employee and/or contract do not appear. This field is **required**. - -.. image:: payslips/new-payslip.png - :align: center - :alt: The top fields for a new payslip all filled out for a February payslip. .. note:: Typically, after making a selection in the :guilabel:`Employee` field, Odoo auto-populates all other required fields (besides the :guilabel:`Period` field), but **only** if that information is - already on that employee's form in the *Employees* app. + already on that employee's form in the **Employees** app. .. important:: If modifications to auto-populated fields are made, it is recommended to check with the - accounting department to ensure every entry that affects the *Accounting* application is correct. + accounting department to ensure every entry that affects the **Accounting** application is + correct. + +.. image:: payslips/new-payslip.png + :alt: The top fields for a new payslip all filled out for a February payslip. .. _payroll/worked-days-inputs: Worked days & inputs tab -************************ +~~~~~~~~~~~~~~~~~~~~~~~~ + +The :guilabel:`Worked Days & Inputs` tab details the number of days and hours the employee worked +during the specified :guilabel:`Period` of time on the top portion of the payslip form, and is +calculated based on the selected :guilabel:`Contract` and :guilabel:`Structure` fields. -- :guilabel:`Worked Days`: the entries under :guilabel:`Worked Days` (including the - :guilabel:`Type`, :guilabel:`Description`, :guilabel:`Number of Days`, :guilabel:`Number of - Hours`, and :guilabel:`Amount`) are automatically filled in, based on what was entered for the - :guilabel:`Period`, :guilabel:`Contract`, and :guilabel:`Structure` fields of the payslip form. -- :guilabel:`Other Inputs`: additional inputs affecting the payslip can be entered in this section, - such as deductions, reimbursements, and expenses. +The :guilabel:`Worked Days` section is automatically populated and lists all the individual +attendance records for the time period, including both worked time and any time off taken. - Click :guilabel:`Add a line` to create an entry in the :guilabel:`Other Inputs` section. +Each individual entry lists the :guilabel:`Type`, :guilabel:`Description`, :guilabel:`Number of +Days`, :guilabel:`Number of Hours`, and the total :guilabel:`Amount`. - Using the drop-down menu in the :guilabel:`Type` column, select a :guilabel:`Type` for the input. - Next, enter a :guilabel:`Description`, if desired. Lastly, enter the amount in the - :guilabel:`Count` field. +Additional records cannot be created for the :guilabel:`Worked Days & Inputs` as it is +auto-populated according to the employee's attendance records or working schedule on their +:ref:`employee record `. + +The :guilabel:`Other Inputs` section is where additional inputs are listed, such as deductions, +reimbursements, and expenses. + +Each individual item lists the :guilabel:`Type`, :guilabel:`Description`, and :guilabel:`Count`. To +add a new input, click :guilabel:`Add a line`, and using the drop-down menu, select the +:guilabel:`Type`. Next, enter a brief :guilabel:`Description`, and last, enter the +:guilabel:`Count`. .. image:: payslips/worked-days-tab.png - :align: center :alt: The fields filled out in the worked days and inputs tab. Salary computation tab -********************** +~~~~~~~~~~~~~~~~~~~~~~ -- :guilabel:`Salary Computation`: the :guilabel:`Salary Computation` tab is automatically filled in - after the :guilabel:`Compute Sheet` button is clicked. Doing so displays the wages, deductions, - taxes, etc. for the entry. +The :guilabel:`Salary Computation` tab is where all the individual salary rules are listed and +calculated, including everything from the employee's salary, to all the deductions and allowances, +such as taxes, expenses, benefit contributions, and any other items associated with the installed +:doc:`payroll localization `. -.. image:: payslips/salary-comp-tab.png - :align: center - :alt: The fields filled out in the salary computation tab. +When the payslip is first created, this tab remains blank. Click the :guilabel:`Compute Sheet` +button in the upper-left corner, and the :guilabel:`Salary Computation` tab is populated. -Other info tab -************** - -- :guilabel:`Payslip Name`: type in a name for the payslip in this field. The name should be short - and descriptive, such as `(Employee Name) April 2023`. This field is **required**. -- :guilabel:`Company`: select the company the payslip applies to using the drop-down menu in this - field. This field is **required**. -- :guilabel:`Close Date`: enter the date that the payment is made to the employee in this field. - - Click in the field to reveal a calendar pop-up window. Using the :guilabel:`< > - (less-than/greater-than)` icons, navigate to the desired month and year. - - Then, click on the desired date to select it. -- :guilabel:`Date Account`: enter the date on which the payslip should be posted in this field. -- :guilabel:`Salary Journal`: this field auto-populates after selecting an existing - :guilabel:`Employee`. This field **cannot** be edited, as it is linked to the *Accounting* - application. This field is **required**. -- :guilabel:`Accounting Entry`: if applicable, this field is automatically populated once the - payslip is confirmed. This field **cannot** be modified. -- :guilabel:`Add an Internal Note...`: any note or reference message for the new entry can be typed - in this field. +.. important:: + It is **not** possible to make edits to this tab, as the calculations are based on other entries + on the payslip. -.. image:: payslips/other-info-tab.png - :align: center - :alt: The fields filled out in the other info tab. +.. tip:: + The :guilabel:`Compute Sheet` button does not disappear from view after it is clicked, so the + payslip can be recalculated at any point prior to :ref:`processing it `. -Process the new payslip -~~~~~~~~~~~~~~~~~~~~~~~ + If any changes need to be made to the :ref:`Worked Days & Inputs ` + tab, click the :guilabel:`Compute Sheet` button to recalculate the payslip. -When all the necessary information on the payslip is entered, click the :guilabel:`Compute Sheet` -button. Upon doing so, all the information on the payslip is saved, and the :guilabel:`Salary -Computation` tab auto-populates, based on the information on the employee's contract or attendance -records. +.. image:: payslips/salary-comp-tab.png + :alt: The fields filled out in the salary computation tab. -If any modifications need to be made, first click the :guilabel:`Cancel` button, then click the -:guilabel:`Set to Draft` button. Make any desired changes, then click the :guilabel:`Compute Sheet` -button once again, and the changes are reflected in the :guilabel:`Worked Days` and -:guilabel:`Salary Computation` tabs. +Other info tab +~~~~~~~~~~~~~~ -Once everything on the payslip form is correct, click the :guilabel:`Create Draft Entry` button to -create the payslip. +The :guilabel:`Other Info` tab houses information that is required, but not associated with any +inputs or calculations, as the other tabs do. -Then, a confirmation pop-up window appears, asking :guilabel:`Are you sure you want to proceed?`. -Click :guilabel:`OK` to confirm. +The :guilabel:`Payslip Name` is auto-populated according to the employee name and the time period +the payslip is for. Make any desired edits to the name in this field. This field is **required**. -.. note:: - The database may need to be refreshed for the payslip and email to appear. +The :guilabel:`Company` field is also automatically populated according to the employee's record, +and cannot be modified. -To print the payslip, click the :guilabel:`Print` button. To cancel the payslip, click the -:guilabel:`Cancel` button. +The end date selected in the :guilabel:`Period` field in the top half of the form populates both the +:guilabel:`Close Date` and :guilabel:`Date Account` fields, by default. The :guilabel:`Close Date` +is the date the payment is issued to the employee, while the :guilabel:`Date Account` is the end +date the payslip covers. Modify the dates, if needed. -.. image:: payslips/payslip-chatter.png - :align: center - :alt: The new payslip is emailed to the employee and the email appears in the chatter. +The :guilabel:`Salary Journal` field is populated by default, and **cannot** be edited. This is the +accounting journal the paycheck is logged in. -Next, the payment must be sent to the employee. To do this, click the :guilabel:`Register Payment` -button. Doing so reveals a pop-up form, in which the desired :guilabel:`Bank Journal` that the -payment should be made against must be selected from a drop-down menu. Then, click the -:guilabel:`Confirm` button to confirm the journal, and return to the payslip. +If there are any additional notes or information needed for the payslip, add them to the +:guilabel:`Add an Internal Note...` field. -.. important:: - In order for a payslip to be paid, the employee *must* have a bank account entered in their - contact information. If there is no bank information, a payslip cannot be paid, and an error - appears when the :guilabel:`Make Payment` button is clicked. Banking information can be found in - the :ref:`Private Information ` tab on the employee's card in the - *Employees* app. Edit the employee card, and add banking information, if it is missing. +.. image:: payslips/other-info-tab.png + :alt: The fields filled out in the other info tab. - .. image:: payslips/banking.png - :align: center - :alt: Banking information can be entered in an employee's card. +.. _payroll/process: -Odoo automatically checks bank account information. If there is an error with the employee's listed -bank account, an error appears in a pop-up window, stating, *The employee bank account is -untrusted.* If this error appears, update the employee's bank account information on their -:ref:`Employee Form `. +Process a payslip +================= -If a payment needs to be cancelled or refunded, click the corresponding :guilabel:`Cancel` or -:guilabel:`Refund` button, located at the top-left of the screen. +When all the necessary information on the payslip is entered, the payslip can be processed. First, a +:ref:`draft of the journal entry ` is created, followed by a :ref:`payment +report `, and finally, the employee is :ref:`paid `. .. tip:: - Before processing payslips, it is best practice to check the *Warnings* section of the *Payroll* - app dashboard. Here, all possible issues concerning payroll appear. + Before processing payslips, it is best practice to check the *Warnings* section of the + **Payroll** app dashboard. Here, all possible issues concerning payroll appear. To view the warnings, navigate to :menuselection:`Payroll app --> Dashboard`. The warnings appear in the top-left corner of the dashboard. .. image:: payslips/warnings.png - :align: center - :alt: The dashboard view of the Payroll app, with the warnings box highlighted. + :alt: The dashboard view of the Payroll app, with the warnings box visible. Warnings are grouped by type, such as `Employees Without Running Contracts` or `Employees Without Bank account Number`. Click on a warning to view all entries associated with that specific issue. @@ -226,17 +176,147 @@ If a payment needs to be cancelled or refunded, click the corresponding :guilabe occur. Errors appear in a pop-up window, and provide details for the error, and how to resolve them. +.. _payroll/draft-entry: + +Create draft entry +------------------ + +Once everything on the payslip form is correct, click the :guilabel:`Create Draft Entry` button to +create the payslip. A :guilabel:`Confirmation` pop-up window appears, asking :guilabel:`Are you sure +you want to proceed?` Click :guilabel:`OK` to confirm. + +Once the payslip draft is created, the status changes to :guilabel:`Done`, a :icon:`fa-usd` +:guilabel:`Journal Entry (Draft)` smart button appears at the top, and additional buttons appear in +the top-left corner. + +.. note:: + After creating a draft entry, Odoo considers the payslip as confirmed. + +Click the :icon:`fa-usd` :guilabel:`Journal Entry (Draft)` smart button to view the detailed +accounting journal entry. Click :guilabel:`Post` to post the entry. Using the breadcrumb menu, +return to the payslip. + +After the journal entry is posted, the smart button at the top changes to :icon:`fa-usd` +:guilabel:`Journal Entry (Posted)` + +.. note:: + Employees cannot be :ref:`paid ` until the journal entry is posted. + +.. _payroll/payment-report: + +Create payment report +--------------------- + +Once the payslip status has changed to :guilabel:`Done`, a payment report must be created. A payment +report is a document that contains all the necessary information to transfer the employee's earnings +from the company's bank account to theirs. These are submitted by the payroll department to the +appropriate institution. + +Click the :guilabel:`Create Payment Report` and a pop-up window loads. Using the drop-down menu, +select the :guilabel:`Export Format` for the payment report. The two default options available are +:guilabel:`NACHA` and :guilabel:`CSV`. :guilabel:`NACHA` stands for the :abbr:`National Automated +Clearing House Association (NACHA)`, and this selection creates a compatible ACH file which is sent +to the company's bank. + +.. note:: + Other options may be available depending on the :doc:`payroll localization + ` installed in the database. + + If :guilabel:`CSV` is selected, all other fields are hidden from view. + +Next, select the desired :guilabel:`Bank Journal` the paycheck is logged to. Last, using the +calendar selector, set the date the paycheck is issued in the :guilabel:`Effective Date` field. + +Once the pop-up window is configured, click the :guilabel:`Generate` button, and the file appears on +the payslip form, in a new :guilabel:`Payment Report` field. + +.. _payroll/pay-employee: + +Pay employee +------------ + +Next, the payment must be sent to the employee. To do this, click the :guilabel:`Pay` button in the +upper-left corner. Doing so reveals a :guilabel:`Pay` pop-up form. + +All the necessary information is pre-populated on the form according to the payslip configuration, +but modifications can be made, if necessary, to any of the fields *except* the :guilabel:`Amount`. +This is populated according to the payslip calculations, and **cannot** be modified. + +- :guilabel:`Journal`: The accounting journal the payslip is logged to. +- :guilabel:`Payment Method`: Using the drop-down menu, select how the employee is being paid. The + default options are: + + - :guilabel:`Manual Payment`: Select this if paying the employee in a method *other* than A + :guilabel:`Check` or :guilabel:`NACHA`. + - :guilabel:`Check`: Select this when issuing a check directly to the employee. + - :guilabel:`NACHA`: Select this if using the :abbr:`National Automated Clearing House Association + (NACHA)` to transfer the payment to the employee, via direct deposit. + +- :guilabel:`Group Payments`: If the employee has multiple payslips for the same time period (for + example, payroll, reimbursement, and commission checks), tick the checkbox to group all payments + into one payment. +- :guilabel:`Payment Date`: Using the calendar selector, select the date the employee is to be paid. + +Once the pop-up :guilabel:`Pay` form is complete, click the :guilabel:`Create Payments` button, and +the payment is processed. + +After the payment is processed, and there is confirmation that the checks have been issued, or the +funds have been directly deposited to the employee's bank account, click the :guilabel:`Mark as +paid` button to mark the payslip as paid. + +.. image:: payslips/pay.png + :alt: Banking information can be entered in an employee's card. + +.. important:: + In order for a payslip to be paid, the employee **must** have a bank account entered in the + :ref:`private information tab ` of their employee record, *and* the bank + account must be marked as :guilabel:`Trusted`. + + If there is no bank information, or if the bank is not listed as :guilabel:`Trusted`, payslips + cannot be paid, and an error appears when the :guilabel:`Pay` button is clicked. Edit the + employee record, and add banking information, or trust the bank account, as needed. + +Refund a payslip +================ + +When refunding a payment, the refund is achieved by creating a payslip for a negative amount of the +original payslip. + +.. example:: + An employee is paid $5,000.00 USD in a paycheck, in error. When refunding the payslip, a new + payslip is created in the amount of $-5,000.00. + +If a payment needs to be refunded, navigate to the individual payslip being refunded, and click the +:guilabel:`Refund` button, located at the top-left of the screen. The :guilabel:`Refund Payslip` +dashboard loads, with all refund payslips appearing in a list view. + +.. note:: + Since refunds are uncommon, typically only the one payslip being refunded appears in the list. + +By default, the refund payslip has a status of :guilabel:`Waiting`. This refund payslip is processed +:ref:`in the same way a regular payslip is processed `. + +Print a payslip +=============== + +To print a payslip, click the :guilabel:`Print` button in the upper-left corner of the individual +payslip record. A PDF file is downloaded, and the payslip appears in the chatter, and the file is +attached to the payslip record. + +.. image:: payslips/payslip-chatter.png + :alt: The new payslip is emailed to the employee and the email appears in the chatter. + .. _payroll/all-payslips: -All payslips -============ +View all payslips +================= To view all payslips, regardless of status, go to :menuselection:`Payroll app --> Payslips --> All Payslips`. The :guilabel:`Employee Payslips` page loads, displaying all payslips, organized by batch, in a default nested list view. -Click on the :guilabel:`▶ (right arrow)` next to an individual batch name to view all the payslips -in that particular batch, along with all the payslip details. +Click the :guilabel:`▶ (right arrow)` next to an individual batch name to expand the list, and view +all the payslips in that particular batch, along with all the payslip details. The number of payslips in the batch is written in parenthesis after the batch name. The :guilabel:`Status` for each individual payslip appears on the far-right side, indicating one of the @@ -250,7 +330,6 @@ following status options: - :guilabel:`Paid`: the employee has been paid. .. image:: payslips/all-payslips.png - :align: center :alt: View all payslips organized by batches. Click on the arrow to expand each batch. Click on an individual payslip to view the details for that payslip on a separate page. Using the @@ -259,32 +338,38 @@ breadcrumb menu, click :guilabel:`Employee Payslips` to go back to the list view A new payslip can be created from the :guilabel:`Employee Payslips` page, by clicking the :guilabel:`New` button in the upper-left corner. Doing so reveals a separate blank payslip form page. On that blank payslip form page, enter all the necessary information, as described in the -:ref:`Create new payslips ` section. - -To print PDF versions of payslips from the *Payslips to Pay* or :guilabel:`Employee Payslips` pages, -first select the desired payslips by clicking on the individual checkbox to the left of each payslip -to be printed. Or, click the box to the left of the :guilabel:`Reference` column title, which -selects all visible payslips on the page. Then, click the :guilabel:`Print` button to print the -payslips. +:ref:`Create a payslip ` section. Payslips can also be exported to an Excel spreadsheet. To export **all** payslips, click on the -:guilabel:`⚙️ (gear)` icon at the end of the words :guilabel:`Employee Payslips` in the top-left -corner. This reveals a drop-down menu. Click :guilabel:`Export All` to export all payslips to a -spreadsheet. - -.. image:: payslips/export.png - :align: center - :alt: Click on the Export All smart button to export all payslips to an Excel payslip. +:icon:`fa-cog` :guilabel:`(gear)` icon at the end of the words :guilabel:`Employee Payslips` in the +top-left corner. This reveals a drop-down menu. Click :icon:`fa-upload` :guilabel:`Export All` to +export all payslips to a spreadsheet. To export only select payslips, first select the payslips to be exported from the list. Then, click the checkbox to the left of each individual payslip to select it. As payslips are selected, a smart button appears in the top-center of the page, indicating the number of selected payslips. Then, -click the :guilabel:`⚙️ (gear) Actions` icon in the top-center of the page, and click -:guilabel:`Export`. - -.. image:: payslips/export-select.png - :align: center - :alt: The individual list of employee payslips with three selected to be exported. +click the :icon:`fa-cog` :guilabel:`Actions` icon in the top-center of the page, and click +:icon:`fa-upload` :guilabel:`Export`. .. note:: Both *To Pay* and *All Payslips* display all the detailed information for each payslip. + +.. _payroll/to-pay: + +View payslips to pay +==================== + +To only view the payslips awaiting to be processed, navigate to :menuselection:`Payroll app --> +Payslips --> To Pay`. + +.. image:: payslips/all-pay-slips.png + :alt: View all payslips that need to be paid on the Payslips To Pay page. + +Each payslip lists the :guilabel:`Reference` number for the individual payslip, the +:guilabel:`Employee` name, the :guilabel:`Batch Name`, the :guilabel:`Company`, the :guilabel:`Basic +Wage`, :guilabel:`Gross Wage`, :guilabel:`Net Wage`, and the :guilabel:`Status` of the payslip. + +Click on an individual payslip entry to view the details for that individual payslip. + +Process the payslips :ref:`in the same way a regular payslip is processed `, or in +a batch. diff --git a/content/applications/hr/payroll/payslips/all-pay-slips.png b/content/applications/hr/payroll/payslips/all-pay-slips.png index 1f99b48fec..44e84a0876 100644 Binary files a/content/applications/hr/payroll/payslips/all-pay-slips.png and b/content/applications/hr/payroll/payslips/all-pay-slips.png differ diff --git a/content/applications/hr/payroll/payslips/all-payslips.png b/content/applications/hr/payroll/payslips/all-payslips.png index 14ea996560..ad2f1734e9 100644 Binary files a/content/applications/hr/payroll/payslips/all-payslips.png and b/content/applications/hr/payroll/payslips/all-payslips.png differ diff --git a/content/applications/hr/payroll/payslips/banking.png b/content/applications/hr/payroll/payslips/banking.png deleted file mode 100644 index bc37ea68ac..0000000000 Binary files a/content/applications/hr/payroll/payslips/banking.png and /dev/null differ diff --git a/content/applications/hr/payroll/payslips/export-select.png b/content/applications/hr/payroll/payslips/export-select.png deleted file mode 100644 index ea96233629..0000000000 Binary files a/content/applications/hr/payroll/payslips/export-select.png and /dev/null differ diff --git a/content/applications/hr/payroll/payslips/export.png b/content/applications/hr/payroll/payslips/export.png deleted file mode 100644 index 50121bcd18..0000000000 Binary files a/content/applications/hr/payroll/payslips/export.png and /dev/null differ diff --git a/content/applications/hr/payroll/payslips/new-payslip.png b/content/applications/hr/payroll/payslips/new-payslip.png index 496c1a46ef..7f8cd4d278 100644 Binary files a/content/applications/hr/payroll/payslips/new-payslip.png and b/content/applications/hr/payroll/payslips/new-payslip.png differ diff --git a/content/applications/hr/payroll/payslips/other-info-tab.png b/content/applications/hr/payroll/payslips/other-info-tab.png index 0069818989..4ab1b6adb7 100644 Binary files a/content/applications/hr/payroll/payslips/other-info-tab.png and b/content/applications/hr/payroll/payslips/other-info-tab.png differ diff --git a/content/applications/hr/payroll/payslips/pay.png b/content/applications/hr/payroll/payslips/pay.png new file mode 100644 index 0000000000..48b90dce7a Binary files /dev/null and b/content/applications/hr/payroll/payslips/pay.png differ diff --git a/content/applications/hr/payroll/payslips/payslip-chatter.png b/content/applications/hr/payroll/payslips/payslip-chatter.png index a4b9d4a431..12e9f69d58 100644 Binary files a/content/applications/hr/payroll/payslips/payslip-chatter.png and b/content/applications/hr/payroll/payslips/payslip-chatter.png differ diff --git a/content/applications/hr/payroll/payslips/payslips.png b/content/applications/hr/payroll/payslips/payslips.png deleted file mode 100644 index 25b9dc894d..0000000000 Binary files a/content/applications/hr/payroll/payslips/payslips.png and /dev/null differ diff --git a/content/applications/hr/payroll/payslips/salary-comp-tab.png b/content/applications/hr/payroll/payslips/salary-comp-tab.png index bf53868c97..db47e2d4ad 100644 Binary files a/content/applications/hr/payroll/payslips/salary-comp-tab.png and b/content/applications/hr/payroll/payslips/salary-comp-tab.png differ diff --git a/content/applications/hr/payroll/payslips/warnings.png b/content/applications/hr/payroll/payslips/warnings.png index 7012a2e7c9..dd7ab50b05 100644 Binary files a/content/applications/hr/payroll/payslips/warnings.png and b/content/applications/hr/payroll/payslips/warnings.png differ diff --git a/content/applications/hr/payroll/payslips/worked-days-tab.png b/content/applications/hr/payroll/payslips/worked-days-tab.png index 7c5b463c29..be88835b16 100644 Binary files a/content/applications/hr/payroll/payslips/worked-days-tab.png and b/content/applications/hr/payroll/payslips/worked-days-tab.png differ diff --git a/content/applications/hr/payroll/salary_attachment.rst b/content/applications/hr/payroll/salary_attachment.rst deleted file mode 100644 index a00f6d1b4e..0000000000 --- a/content/applications/hr/payroll/salary_attachment.rst +++ /dev/null @@ -1,63 +0,0 @@ -======================== -Salary attachment report -======================== - -*Salary attachments* in Odoo refer to a portion of an employee's earnings that are designated for -a specific purpose, both voluntary and involuntary. These can include contributions to a retirement -plan, repayment of a loan, wage garnishments, or child support. - -Voluntary salary attachments, such as repaying a loan, or contributing to a charity on a monthly -basis, are considered *Assignments of Salary* in Odoo. Salary attachments that are required, such as -a lawsuit settlement repayment, or repaying a tax lien, are considered *Attachments of Salary* in -Odoo. Child support payments have their own category, and are simply referred to as *Child Support* -in Odoo. - -To view this report, navigate to :menuselection:`Payroll app --> Reporting --> Salary Attachment -Report`. The :guilabel:`Salary Attachment Report` shows all deductions or allocations per employee, -organized by payslip, in a default pivot table. The default filter is the end of the current year -(:guilabel:`Payslip End Date: (year)`). The employees populate the rows, while the various -deductions populate the columns, organized by type of deduction, and further grouped by individual -payslip. - -The default report contains **all** payslips for the current year, so the report typically contains -a large number of columns. This could make it difficult to view all the data at once, as the report -may be very wide and require scrolling to view all the data. - -To view a condensed version of salary attachments, and have all the salary attachment columns -visible on one page, click the :icon:`fa-minus-square-o` :guilabel:`Total` icon at the top of the -report, above the various payslips. - -This presents the salary attachments for the current year, and only displays three columns, -:guilabel:`Attachment of Salary`, :guilabel:`Assignment of Salary`, and :guilabel:`Child Support.` - -Each entry displays the total amount paid for each specific type of salary attachment, for each -employee. - -.. image:: salary_attachment/salary-attachment.png - :alt: The Attachment of Salary report that shows all salary garnishments in a condensed view. - -The report can be downloaded as an XLSX file, or :doc:`inserted into a spreadsheet -<../../productivity/spreadsheet/insert>` using the corresponding buttons at the top. - -Click the :guilabel:`Measures` button to reveal the options of what data is displayed. -:guilabel:`Assignment of salary`, :guilabel:`Attachment of salary`, and :guilabel:`Child support` -are all selected and visible, by default, while the :guilabel:`Count` option is not. - -Click an option to either show or hide that particular metric. A :icon:`fa-check` -:guilabel:`(checkmark)` icon indicates the data is visible. - -Compare to previous year -======================== - -The :guilabel:`Salary Attachment Report` can be compared to the report for the previous time period -or the previous year. - -To view these comparisons, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon in the -search bar, then click either :guilabel:`Payslip End Date: Previous Period` or :guilabel:`Payslip -End Date: Previous Year`, beneath the :icon:`fa-adjust` :guilabel:`Comparison` column. - -The report updates and displays the current time period values, and the previous time period values, -as well as the :guilabel:`Variation` between the two, in a percentage. - -.. image:: salary_attachment/comparison-attachment.png - :alt: The salary attachment report modified to compare to the previous year. diff --git a/content/applications/hr/payroll/salary_attachment/comparison-attachment.png b/content/applications/hr/payroll/salary_attachment/comparison-attachment.png deleted file mode 100644 index d43e8d944e..0000000000 Binary files a/content/applications/hr/payroll/salary_attachment/comparison-attachment.png and /dev/null differ diff --git a/content/applications/hr/payroll/salary_attachment/salary-attachment.png b/content/applications/hr/payroll/salary_attachment/salary-attachment.png deleted file mode 100644 index cd6106c3e2..0000000000 Binary files a/content/applications/hr/payroll/salary_attachment/salary-attachment.png and /dev/null differ diff --git a/content/applications/hr/payroll/salary_attachments.rst b/content/applications/hr/payroll/salary_attachments.rst index d78d86734a..579a4f3998 100644 --- a/content/applications/hr/payroll/salary_attachments.rst +++ b/content/applications/hr/payroll/salary_attachments.rst @@ -163,6 +163,3 @@ Any salary attachment can be cancelled at any time. To cancel a salary attachmen individual attachment record from the main :guilabel:`Salary Attachment` dashboard to open the record. From the :guilabel:`Salary Attachment` record, click the :guilabel:`Cancel` button to cancel the salary attachment, and stop having the designated money taken out of future paychecks. - -.. seealso:: - :doc:`salary_attachment` diff --git a/content/applications/hr/payroll/time_off_to_report.rst b/content/applications/hr/payroll/time_off_to_report.rst new file mode 100644 index 0000000000..5ad8247412 --- /dev/null +++ b/content/applications/hr/payroll/time_off_to_report.rst @@ -0,0 +1,77 @@ +================== +Time off to report +================== + +Payroll is often processed a few days before the end of a pay period, so that employees can be paid +in a timely manner. When work schedules are predictable, this method often works. However, sometimes +employees take time off unexpectedly, especially sick time. When this occurs, there can be +discrepancies in payroll that must be addressed. + +.. example:: + The payroll department for a medium-sized company processes paychecks every two weeks, on + Wednesdays. Each employee is paid on the Friday after. + + One employee is sick on the last Thursday and Friday of the two-week pay period. Since they have + automatically generated work entries based on their working schedule, and payroll is processed on + Wednesdays, the paycheck they receive incorrectly states that they were paid for a regular work + day for all ten days of the two-week pay period. + + Instead of cancelling the paycheck and reissuing it, causing delays for the employee and more + work for the payroll department, Odoo allows for the deferral of the time off taken, to the + following pay period. + + This ensures all time off balances are correct, and the employee is properly compensated for + their time. + +.. _payroll/time-off-dashboard: + +Time off dashboard +================== + +When time off requests are submitted for a time period that was already processed on a payslip, the +time off requests appear in the *Time Off* page of the **Payroll** app. To access this, navigate to +:menuselection:`Payroll app --> Work Entries --> Time Off to Report`. + +The :guilabel:`Time Off` page default filter is :guilabel:`To Defer`, and displays all requests with +a :guilabel:`Payslip State` of :guilabel:`To defer to next payslip`. This is because the employee +was *already paid* for that time as worked time, and it was logged as regular time spent at work. + +.. image:: time_off_to_report/time-off-to-report.png + :alt: A list of all time off requests that were not approved before payslips were generated. + +Defer multiple time off entries +=============================== + +In order to keep the employee's time off balances correct, the time off request **must** be applied +to the following pay period. This not only ensures time off request balances are current, it also +eliminates the need to redo work entries, cancel paychecks, and reissue paychecks. + +To select the work entries to defer, tick the box to the left of the work entry line on the +:ref:`Time Off page `. To select all work entries in the list, tick the +box to the left of the :guilabel:`Employee` column title, at the top of the list. + +Once any work entry is selected, two buttons appear at the top of the report: a :guilabel:`(#) +selected` button, and an :icon:`fa-gear` :guilabel:`Actions` button. The :guilabel:`(#) selected` +button indicates how many entries are currently selected. + +When all the desired work entries are selected, click the :icon:`fa-gear` :guilabel:`Actions` +button, and a menu appears with several choices. Click :guilabel:`Defer to Next Month` in the list, +and all selected entries are deferred to the following month. + +Defer individual time off entries +================================= + +Time off requests appearing on the :ref:`Time Off page ` can be deferred +individually. Click on an individual time off request, and the details for that request load. + +The specific details for the time off request appear on the left-hand side, and all of the +employee's submitted time off requests appear on the right-hand side (including the request in the +details on the left-hand side). + +To defer the time off request to the next payslip, click the :guilabel:`Report to Next Month` button +in the upper-left corner. Once processed, the :guilabel:`Report to Next Month` button disappears, +and the :guilabel:`Payslip State` changes from :guilabel:`To defer to next payslip` to +:guilabel:`Computed in Current Payslip`. + +.. image:: time_off_to_report/single-defer.png + :alt: The time off details for an individual request that needs to be deferred. diff --git a/content/applications/hr/payroll/time_off_to_report/single-defer.png b/content/applications/hr/payroll/time_off_to_report/single-defer.png new file mode 100644 index 0000000000..725e5fb866 Binary files /dev/null and b/content/applications/hr/payroll/time_off_to_report/single-defer.png differ diff --git a/content/applications/hr/payroll/time_off_to_report/time-off-to-report.png b/content/applications/hr/payroll/time_off_to_report/time-off-to-report.png new file mode 100644 index 0000000000..65db9a6722 Binary files /dev/null and b/content/applications/hr/payroll/time_off_to_report/time-off-to-report.png differ diff --git a/content/applications/hr/payroll/work_entries.rst b/content/applications/hr/payroll/work_entries.rst index ba653aff5a..4ba19144d6 100644 --- a/content/applications/hr/payroll/work_entries.rst +++ b/content/applications/hr/payroll/work_entries.rst @@ -2,12 +2,20 @@ Work entries ============ -Work entries are created automatically in the *Payroll* app, based on the employee's :ref:`salary -structure type `, and from the *Planning*, *Attendances*, and *Time Off* -applications. +The **Payroll** app automatically creates work entries based on the employee's :ref:`salary +structure type `, and from the **Planning**, **Attendances**, and **Time +Off** applications. -The *Work Entries* dashboard of the *Payroll* application provides a visual overview of the -individual work entries for every employee. +Work entries provide the **Payroll** app with the worked hours used to compute employee paychecks, +if the employee's salary is based on work entries, as opposed to a salaried position. + +.. _payroll/work-entry-dashboard: + +Work entry dashboard +==================== + +The *Work Entries* dashboard of the **Payroll** app provides a visual overview of the individual +work entries for every employee. To open the dashboard, navigate to :menuselection:`Payroll app --> Work Entries --> Work Entries`. @@ -15,72 +23,72 @@ On the :guilabel:`Work Entry` dashboard, work entries appear in alphabetical ord first name of the employees. The entire month is displayed, with the current day highlighted in pale yellow. -If any entries have :ref:`conflicts ` that need to be resolved, the dashboard -defaults to filter only the :guilabel:`Conflicting` entries. - -To remove the filter from the :guilabel:`Search...` bar to view all work entries, click the -:guilabel:`✖️ (remove)` icon on the :guilabel:`Conflicting` filter in the :guilabel:`Search...` bar, -and all work entries appear in the list. +The :guilabel:`Work Entry` dashboard has a default :guilabel:`Conflicting` filter, which displays +only work entries with :ref:`conflicts ` to be resolved. .. image:: work_entries/work-entries-overview.png - :align: center :alt: Conflicts dashboard view showing all employee's conflicts in work entries. +.. tip:: + Remove the default :guilabel:`Conflicting` filter from the search bar to view *all* work entries. + .. _payroll/adjust-view: -To change the view, so only the entries for a single day, week, or month are shown, click on -:guilabel:`Month`. A drop-down menu appears with the options of :guilabel:`Day`, :guilabel:`Week`, -or :guilabel:`Month`. Click on one of the options to only display data for that specific selection. +Adjust view +----------- + +To change the view so that only the entries for a single day, week, month, quarter, or year are +shown, click the :icon:`fa-calendar` :guilabel:`(Month)(Year)` button. A drop-down menu appears with +the options of :guilabel:`Today`, :guilabel:`This week`, :guilabel:`This month`, :guilabel:`This +quarter`, or :guilabel:`This year`. Click on one of the options to only display data for that +specific selection. -Use the :guilabel:`⬅️ (left arrow)` and :guilabel:`➡️ (right arrow)` icons on the left and right -side of the :guilabel:`Month` button to adjust the displayed dates. The arrows adjust the date based -on the type of time selected. +Use the :icon:`oi-arrow-left` :guilabel:`(left arrow)` and :icon:`oi-arrow-right` :guilabel:`(right +arrow)` buttons to adjust the displayed dates. The arrows adjust the date based on the type of time +selected. For example, if :guilabel:`Month` is selected, the arrows move one month with each click of the arrow. If :guilabel:`Week` or :guilabel:`Day` is selected, the time moves by either a week or a day for each click of the arrow, respectively. -At any point, to return to a view containing the current day, click the :guilabel:`Today` button. +At any point, to return to a view containing the current day, click the :icon:`fa-crosshairs` +:guilabel:`(Focus Today)` button. .. _payroll/new-work-entry: Add a new work entry ==================== -If a work entry is missing and needs to be added, such as sick time, or if an employee forgot to -clock in and out for a shift, click :guilabel:`New` on the :guilabel:`Work Entry` dashboard, to -create a new work entry. +If a work entry is missing, such as sick time, or if an employee forgot to clock in and out for a +shift, a new work entry must be created for the missing shift. -A :guilabel:`Create` work entry pop-up form appears. +Click :guilabel:`New` on the :ref:`work entry dashboard `, and a blank +:guilabel:`Create` work entry pop-up form appears. Enter the following information on the form: -Enter the following information on the form: - -- :guilabel:`Description`: enter a short description for the work entry, such as `Sick Time`. If - this field is left blank, it automatically populates once an employee is selected. The default - entry is `Attendance: (Employee)`. -- :guilabel:`Employee`: select the employee the work entry is for, using the drop-down menu. -- :guilabel:`Work Entry Type`: select the :ref:`work entry type ` using the +- :guilabel:`Description`: Enter a short description for the work entry, such as `Sick Time`. The + default entry is `Attendance: (Employee)`. +- :guilabel:`Employee`: Select the employee the work entry is for, using the drop-down menu. +- :guilabel:`Work Entry Type`: Select the :ref:`work entry type ` using the drop-down menu. -- :guilabel:`From` and :guilabel:`To`: enter the start (:guilabel:`From`) and end (:guilabel:`To`) +- :guilabel:`From` and :guilabel:`To`: Enter the start (:guilabel:`From`) and end (:guilabel:`To`) dates and times for the work entry. First, click on either the :guilabel:`From` or :guilabel:`To` line to reveal a calendar pop-up - window. Select the date by navigating to the correct month and year, using the :guilabel:`< (left - arrow)` and :guilabel:`> (right arrow)` icons, then click on the specific day. + window. Select the date by navigating to the correct month, then click on the specific day to + select it. Next, select the time, by clicking on either the hour or minute fields at the bottom of the - calendar, and select the desired time for both the hour and minutes. + calendar, and set the desired time. - When the date and time are correct for the entry, click the :guilabel:`Apply` button. -- :guilabel:`Duration`: displays the hours based on the :guilabel:`To` and :guilabel:`From` entries. - Modifying this field modifies the :guilabel:`To` field (the :guilabel:`From` field does not - change). + When the date and time for the entry are correct, click the :guilabel:`Apply` button. +- :guilabel:`Duration`: This field displays the hours based on the :guilabel:`To` and + :guilabel:`From` entries. Modifying this field modifies the :guilabel:`To` field (the + :guilabel:`From` field does not change). Once the desired information is entered, click :guilabel:`Save & Close` to save the entry, and close the pop-up form. .. image:: work_entries/create.png - :align: center :alt: Filling in the work entry Create form in Odoo. .. _payroll/conflicts: @@ -88,9 +96,9 @@ the pop-up form. Conflicts ========= -A conflict appears for any request that has not been approved, such as sick time or vacation, or if -there are any errors on the work entry, such as required fields being left blank. Conflicts are -required to be resolved before payslips can be generated. +A conflict occurs when a request has not been approved, such as sick time or vacation, or if there +are any errors on the work entry. Conflicts that span the current pay period being processed +**must** be resolved before payslips can be generated. Any work entry that has a conflict to be resolved is indicated on the main :guilabel:`Work Entry` dashboard, which can be accessed by navigating to :menuselection:`Payroll app --> Work Entries --> @@ -101,49 +109,62 @@ entry. Click on an individual work entry to see the date and time for the specif click :guilabel:`Edit` to view the conflict details in a pop-up window. .. image:: work_entries/conflict-pop-up.png - :align: center :alt: A row of conflicts, with one entry showing details for the conflict. The conflict is briefly explained in an orange text box in the :guilabel:`Open` pop-up window that appears. -The :guilabel:`Description`, :guilabel:`Employee`, and :guilabel:`Work Entry Type` are listed on -the left side of the pop-up window. The :guilabel:`From` and :guilabel:`To` date and time range, as -well as the total time (in hours) in the :guilabel:`Duration` field, appears on the right side. - -If the conflict is due to a time off request that has not been approved yet, a :guilabel:`Time Off` -field appears on the left side, with the type of time off requested in the description. - -.. image:: work_entries/conflict-details.png - :align: center - :alt: The detailed conflict pop-up window that appears when Edit is clicked. +The :guilabel:`Description`, :guilabel:`Employee`, and :guilabel:`Work Entry Type` are listed on the +left side of the pop-up window. The :guilabel:`From` and :guilabel:`To` date and time range, as well +as the total time (in hours) in the :guilabel:`Duration` field, appears on the right side. Time off conflicts ------------------ -The most common work entry conflicts are for time off requests that have been submitted, but not yet -approved, which results in duplicate work entries for that employee (one for time off and another +The most common work entry conflicts are for time off requests. Odoo automatically generates work +entries for specific time periods. When time off is requested after these work entries are +generated, it results in duplicate work entries for that employee (one for time off and another for regular work). If there is a conflict because a time off request is in the system for the same time that a regular -work entry already exists, the time off request is entered in the :guilabel:`Time Off` field. +work entry already exists, the time off request is entered in a :guilabel:`Time Off` field. -The time off conflict can be resolved either on the work entry pop-up window, or on a detailed time -off request pop-up window. +Conflicts can be resolved either directly on the work entry or in the detailed time off request +form. + +.. _payroll/time-off-work-entry: Resolve on work entry ~~~~~~~~~~~~~~~~~~~~~ -To resolve the time off conflict on this work entry pop-up window, click the :guilabel:`Approve Time -Off` button to approve the time off request, and resolve the work entry conflict. +If no additional details are needed to determine if a time off request should be approved or +refused, the time off conflict can be resolved directly from the work entry pop-up window. + +Click either the :guilabel:`Refuse Time Off` or :guilabel:`Approve Time Off` buttons to refuse or +approve the time off request, then the two buttons disappear. Click the :guilabel:`Save & Close` +button to close the pop-up window. + +The conflict disappears from the :guilabel:`Work Entry` dashboard, since the conflict is now +resolved. -The :guilabel:`Approve Time Off` and :guilabel:`Refuse Time Off` buttons disappear. Click the -:guilabel:`Save & Close` button to close the pop-up window. The conflict disappears from the -:guilabel:`Work Entry` dashboard, since the conflict is resolved. +.. image:: work_entries/conflict-details.png + :alt: The detailed conflict pop-up window that appears when the Edit button is clicked. + +.. note:: + If the time off is approved, the status of the work entry conflict changes to + :guilabel:`Cancelled`. If the time off is refused, the status changes to :guilabel:`Draft`. + +.. _payroll/time-off-request-form: Resolve on time off request ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If more details are needed to make a decision about the time off request, hover over the entry in +the :guilabel:`Time Off` field, and click the :icon:`fa-external-link` :guilabel:`(Internal Link)` +icon that appears at the end of the line. This causes an :guilabel:`Open: Time Off` pop-up window to +load, with all the time off request details. Click either the :guilabel:`Approve` or +:guilabel:`Refuse` buttons to approve or refuse the request. + To resolve the time off conflict on the detailed time off request pop-up window, click the :guilabel:`Internal Link` button at the end of the :guilabel:`Time Off` entry line, and the time off request details appear in a new pop-up window. The request can be modified, if needed. @@ -151,9 +172,8 @@ request details appear in a new pop-up window. The request can be modified, if n Click the :guilabel:`Approve` button to approve the request, then click the :guilabel:`Save & Close` button to save the changes, and go back to the work entry conflict pop-up window. -.. image:: work_entries/time-off-details.png - :align: center - :alt: The detailed time off request form. +.. image:: work_entries/entry-details.png + :alt: The detailed time off request information. Now, the :guilabel:`Approve Time Off` button is hidden, only the :guilabel:`Refuse Time Off` button is visible. @@ -170,170 +190,44 @@ it has been resolved. Regenerate work entries ======================= -When regenerating work entries, any manual changes, such as resolved conflicts, are overwritten, -and work entries are regenerated (or recreated) from the applications that created them. +After conflicts are resolved, the affected work entries must be regenerated. This recreates the +specified work entries, and overwrites the previously conflicting work entries. -This method for correcting a large amount of conflicts is recommended to keep all records correct. While :ref:`conflicts ` *can* be resolved individually, if the conflicts are -caused from another application, it is best practice to ensure the records in the other applications -are also correct. That is why it is recommended to resolve these conflicts in the applications that -created the conflict. - -Another reason this method is recommended is because, when work entries are regenerated, the -conflicts reappear, if the issue in the related application is **not** resolved. +caused from another application, such as **Planning** or **Attendances**, it is best practice to +correct the record in the application causing the conflict. The reason this method is recommended is +because, if the issue in the related application is **not** resolved, when work entries are +regenerated, the conflicts reappear. First, ensure the issues are resolved in the specific applications that caused the work entry -conflicts. +conflicts. Once the conflicts have been resolved in the corresponding apps, open the work entry +dashboard by navigating to :menuselection:`Payroll app --> Work Entries --> Work Entries`. -Next, click the :guilabel:`Regenerate Work Entries` button at the top of the :guilabel:`Work -Entries` dashboard, and a :guilabel:`Work Entry Regeneration` pop-up window appears. +Click the :guilabel:`Regenerate Work Entries` button at the top of the :guilabel:`Work Entries` +dashboard, and a :guilabel:`Work Entry Regeneration` pop-up window appears. -Select the :guilabel:`Employees` to regenerate work entries for from the drop-down menu, and adjust +Select the :guilabel:`Employees` to regenerate work entries for, using the drop-down menu. Adjust the :guilabel:`From` and :guilabel:`To` fields, so the correct date range is displayed. Click the :guilabel:`Regenerate Work Entries` button, and the work entries are recreated. Once finished, the pop-up window closes. .. image:: work_entries/regenerate-details.png - :align: center :alt: Regenerate a work entry for a particular employee. .. example:: - An employee has incorrect work entries generated from the *Planning* app because they were - incorrectly assigned to two work stations simultaneously. This should be fixed in the *Planning* - app, instead of the *Payroll* app. - - To correct this issue, modify the employee's schedule in the *Planning* app, so they are - correctly assigned to only one work station. Then, in the *Payroll* app, regenerate work entries - for that employee, for that specific time period. - - The *Payroll* app then pulls the new, corrected data form the *Planning* app, and recreates the - correct work entries for that employee. All conflicts for that employee are now resolved. - -Generating payslips -=================== - -To generate payslips, :ref:`navigate to the time period ` the payslips should -be generated for. Ensure the :guilabel:`Conflicting` filter is removed. When the desired pay period -is displayed, click the :guilabel:`Generate Payslips` button. - -.. tip:: - If the :guilabel:`Generate Payslips` button is not active (appears pale purple, instead of dark - purple), that indicates there are conflicts, or the date selected includes dates in the future. - Resolve all conflicts before generating payslips. - -When the :guilabel:`Generate Payslips` button is clicked, a batch entry appears on a separate page -for the time period selected. - -The batch name populates the :guilabel:`Batch Name` field in a default `From (date) to (date)` -format. - -The date range to which the payslips apply appears in the :guilabel:`Period` field, and the company -appears in the :guilabel:`Company` field. It is **not** possible to make changes to this form. + An employee has incorrect work entries generated from the **Planning** app because they were + incorrectly assigned to two work stations simultaneously. This should be fixed in the + **Planning** app, instead of the **Payroll** app. -Click the :guilabel:`Create Draft Entry` button to create the payslips for the batch. + To correct this issue, modify the employee's schedule in the **Planning** app, so they are + correctly assigned to only one work station. Then, in the **Payroll** app, regenerate work + entries for that employee, for that specific time period. -Click the :guilabel:`Payslips` smart button at the top of the page to view all the payslips for the -batch. - -.. image:: work_entries/generate-payslips.png - :align: center - :alt: Information that appears when generating payslips. - -Printing payslips ------------------ - -To print payslips, first view the individual payslips by clicking the :guilabel:`Payslips` smart -button on the batch form. - -Next, select the payslips to print from the :guilabel:`Payslips` list. Click the box next to each -payslip to print, or click the box to the left of the :guilabel:`Reference` column title, to select -all the payslips in the list at once. - -Click the :guilabel:`Print` button, and a PDF file is created with all the specified payslips. - -.. image:: work_entries/print-payslips.png - :align: center - :alt: Print button for printing the payslips. - -.. note:: - The :guilabel:`Print` button does **not** appear until at least one payslip is selected in the - list. - -Time off to report -================== - -If a time off request is submitted for a time period that was already processed on a payslip, the -time off request appears in the *Time Off* page in the *Payroll* app, which is accessible by -navigating to :menuselection:`Payroll app --> Work Entries --> Time Off to Report`. - -On the :guilabel:`Time Off` page, the request appears with a status of :guilabel:`To defer to next -payslip`. This is because the employee was already paid for that day, and it was logged as time -spent at work, as a typical work day. - -In order to keep the employee's time off balances correct, the time off request **must** be applied -to the following pay period. This not only ensures time off request balances are current, it also -eliminates the need to redo work entries, cancel paychecks, and reissue paychecks. - -The most common scenario when this situation occurs, is when payslips are processed a day or two -before the pay period ends, and an employee is unexpectedly sick on one of the last days of the pay -period. The employee puts in a time off request for a day that was already processed on a payslip as -a regular work day. Instead of cancelling the payslip, modifying the work entries, and reissuing the -paycheck, Odoo allows for those time off requests to be applied to the following pay period, -instead. - -To view all the time off requests that need to be deferred to the next payslip, navigate to -:menuselection:`Payroll app --> Work Entries --> Time Off to Report`. The default filter for this -report is :guilabel:`To Defer`. - -All time off requests that need to be applied to the following pay period appear with a -:guilabel:`Payslip State` of :guilabel:`To defer to next payslip`. - -.. image:: work_entries/time-off-to-report.png - :align: center - :alt: A list of all time off requests that were not approved before payslips were generated. - -Defer multiple time off entries -------------------------------- - -To select the work entries to defer, click the box to the left of the work entry line. To select all -work entries in the list, click the box to the left of the :guilabel:`Employees` column title, at -the top of the list. - -Once any work entry is selected, two buttons appear at the top of the report: a :guilabel:`(#) -Selected` button, and an :guilabel:`Actions` button. The :guilabel:`(#) Selected` button indicates -how many entries are currently selected. - -When all the desired work entries are selected, click the :guilabel:`Actions` button, and a menu -appears with several choices. Click :guilabel:`Defer to Next Month` in the list, and all selected -entries are deferred to the following month. - -.. image:: work_entries/batch-defer.png - :align: center - :alt: The actions button and # Selected buttons that appear after any selections are made. - -Defer individual time off entries ---------------------------------- - -Time off requests appearing on the :guilabel:`Time Off to Report` list can be deferred individually. - -Click on an individual time off request, and the details for that request load. - -The specific details for the time off request appear on the left-hand side, and all of the -employee's submitted time off requests appear on the right-hand side (including the request in the -details on the left-hand side). - -To defer the time off request to the next payslip, click the :guilabel:`Report to Next Month` button -at the top. Once processed, the :guilabel:`Report to Next Month` button disappears, and the -:guilabel:`Payslip State` changes from :guilabel:`To defer to next payslip` to :guilabel:`Computed -in Current Payslip`. - -To go back to the :guilabel:`Time Off to Report` list, click on :guilabel:`Time Off` in the -breadcrumb menu. - -.. image:: work_entries/single-defer.png - :align: center - :alt: The time off details for an individual request that needs to be deferred. + The **Payroll** app then pulls the new, corrected data form the **Planning** app, and recreates + the correct work entries for that employee. All conflicts for that employee are now resolved. .. seealso:: - :ref:`Configure work entries ` + :doc:`payslips` + + :doc:`batches` diff --git a/content/applications/hr/payroll/work_entries/batch-defer.png b/content/applications/hr/payroll/work_entries/batch-defer.png deleted file mode 100644 index 07b38e8c89..0000000000 Binary files a/content/applications/hr/payroll/work_entries/batch-defer.png and /dev/null differ diff --git a/content/applications/hr/payroll/work_entries/conflict-details.png b/content/applications/hr/payroll/work_entries/conflict-details.png index 6a64f5b61a..dbc4c6c325 100644 Binary files a/content/applications/hr/payroll/work_entries/conflict-details.png and b/content/applications/hr/payroll/work_entries/conflict-details.png differ diff --git a/content/applications/hr/payroll/work_entries/conflict-pop-up.png b/content/applications/hr/payroll/work_entries/conflict-pop-up.png index fab9235c74..27ec2e222c 100644 Binary files a/content/applications/hr/payroll/work_entries/conflict-pop-up.png and b/content/applications/hr/payroll/work_entries/conflict-pop-up.png differ diff --git a/content/applications/hr/payroll/work_entries/create.png b/content/applications/hr/payroll/work_entries/create.png index 58638b8000..9db489955c 100644 Binary files a/content/applications/hr/payroll/work_entries/create.png and b/content/applications/hr/payroll/work_entries/create.png differ diff --git a/content/applications/hr/payroll/work_entries/entry-details.png b/content/applications/hr/payroll/work_entries/entry-details.png new file mode 100644 index 0000000000..11d0b62ebf Binary files /dev/null and b/content/applications/hr/payroll/work_entries/entry-details.png differ diff --git a/content/applications/hr/payroll/work_entries/generate-payslips.png b/content/applications/hr/payroll/work_entries/generate-payslips.png deleted file mode 100644 index 05790e0c43..0000000000 Binary files a/content/applications/hr/payroll/work_entries/generate-payslips.png and /dev/null differ diff --git a/content/applications/hr/payroll/work_entries/print-payslips.png b/content/applications/hr/payroll/work_entries/print-payslips.png deleted file mode 100644 index e2b6d1d63f..0000000000 Binary files a/content/applications/hr/payroll/work_entries/print-payslips.png and /dev/null differ diff --git a/content/applications/hr/payroll/work_entries/regenerate-details.png b/content/applications/hr/payroll/work_entries/regenerate-details.png index e3d316e8d8..2b6c7e4c5e 100644 Binary files a/content/applications/hr/payroll/work_entries/regenerate-details.png and b/content/applications/hr/payroll/work_entries/regenerate-details.png differ diff --git a/content/applications/hr/payroll/work_entries/single-defer.png b/content/applications/hr/payroll/work_entries/single-defer.png deleted file mode 100644 index 8d2e35aeb4..0000000000 Binary files a/content/applications/hr/payroll/work_entries/single-defer.png and /dev/null differ diff --git a/content/applications/hr/payroll/work_entries/time-off-details.png b/content/applications/hr/payroll/work_entries/time-off-details.png deleted file mode 100644 index 23cf54486b..0000000000 Binary files a/content/applications/hr/payroll/work_entries/time-off-details.png and /dev/null differ diff --git a/content/applications/hr/payroll/work_entries/time-off-to-report.png b/content/applications/hr/payroll/work_entries/time-off-to-report.png deleted file mode 100644 index d9475dd712..0000000000 Binary files a/content/applications/hr/payroll/work_entries/time-off-to-report.png and /dev/null differ diff --git a/content/applications/hr/payroll/work_entries/work-entries-overview.png b/content/applications/hr/payroll/work_entries/work-entries-overview.png index 4bc836f687..9a16153d82 100644 Binary files a/content/applications/hr/payroll/work_entries/work-entries-overview.png and b/content/applications/hr/payroll/work_entries/work-entries-overview.png differ diff --git a/content/applications/hr/time_off.rst b/content/applications/hr/time_off.rst index 661e730e03..c8a31b2268 100644 --- a/content/applications/hr/time_off.rst +++ b/content/applications/hr/time_off.rst @@ -153,14 +153,15 @@ off is visible to other users, and how the time off affects the **Payroll** app. request would be for three hours, since the two extra worked hours are used first, and deducted from the request. -- :guilabel:`Public Holiday Included`: Enable this option if public holidays should be excluded from - a time off request. +- :guilabel:`Public Holiday Included`: Enable this option if public holidays should be included in + time off requests. .. example:: An employee in the United States requests time off for the week of July 4th, for a total of five days. Since the 4th of July is a holiday in the United States, the time off request is - automatically modified for four days off instead of five. That is because the holiday is - included, and the user does not need to use their own vacation time for a public holiday. + automatically modified to use four vacation days and one public holiday, instead of five + vacation days. That is because the holiday is included, and the user does not need to use their + own vacation time for a public holiday. This option reduces extra work for users, enabling them to make only one time off request for the entire week, instead of making two separate requests, one for the days *before* the diff --git a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst index e1f86bdf71..bcdfa486e7 100644 --- a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst +++ b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst @@ -33,7 +33,6 @@ Then, click :guilabel:`Save`. - :ref:`Print GS1 barcodes for lots and serial numbers ` .. image:: lots/enabled-lots-setting.png - :align: center :alt: Enabled lots and serial numbers feature in inventory settings. .. _inventory/management/track_products_by_lots: @@ -45,9 +44,10 @@ Once the :guilabel:`Lots & Serial Numbers` feature is activated, configure indiv tracked using lots. To do this, go to :menuselection:`Inventory app --> Products --> Products`, and choose a product to configure. -On the product form, go to the :guilabel:`Inventory` tab. In the :guilabel:`Traceability` section, -select the :guilabel:`By Lots` option in the :guilabel:`Tracking` field. Now, new or existing lot -numbers can be assigned to newly-received or manufactured batches of this product. +On the product form, click into the :guilabel:`General Information` tab. In the :guilabel:`Track +Inventory` field, tick the checkbox, then select :guilabel:`By Lots` from the drop-down menu. Now, +new or existing lot numbers can be assigned to newly-received or manufactured batches of this +product. .. seealso:: :doc:`expiration_dates` @@ -58,7 +58,6 @@ numbers can be assigned to newly-received or manufactured batches of this produc products in stock. .. image:: lots/tracking-product-form.png - :align: center :alt: Enabled tracking by lots feature on product form. Assign lots for shipping and receiving @@ -90,14 +89,12 @@ warehouse receipt form. lot number **must** be assigned before validating the receipt. .. image:: lots/user-error.png - :align: center :alt: Add lot/serial number user error popup. On the receipt form, on the product line in the :guilabel:`Operations` tab, select the |list| icon to the right of the product that is tracked by lot numbers. .. image:: lots/list-icon.png - :align: center :alt: Show the bulleted list icon on the product line. Doing so opens the :guilabel:`Open: Stock move` pop-up window, where the :guilabel:`Lot/Serial @@ -118,7 +115,6 @@ Package`, if any. :guilabel:`Quantity` column matches the :guilabel:`Demand` at the top. .. image:: lots/assign-lots-popup.png - :align: center :alt: Assign lot number detailed operations popup. Import lots @@ -127,14 +123,7 @@ Import lots In the :guilabel:`Open: Stock move` pop-up window, click :guilabel:`Import Serials/Lots`, then paste the bulk lot numbers, in the :guilabel:`Lots/Serial numbers` field. -.. figure:: lots/lots-excel-spreadsheet.png - :align: center - :alt: List of lot numbers copied on excel spreadsheet. - - List of lot numbers copied on *Google* spreadsheets. - .. figure:: lots/bulk-sn.png - :align: center :alt: Lot numbers copied to the lot number line. Lot numbers pasted to the "Lots/Serial numbers" field, in the **Import Lots** pop-up window. @@ -193,7 +182,6 @@ Repeat the above steps to select enough lots to fulfill the :guilabel:`Demand`, |DO| to deliver the products. .. image:: lots/pick-from-lots.png - :align: center :alt: Popup for source lot number on sales order. .. seealso:: @@ -212,7 +200,6 @@ displays the existing lot numbers. Select a lot number to :ref:`modify or add de button. .. figure:: lots/lot-dashboard.png - :align: center :alt: Show the "Lot/Serial Number" dashboard. Display lot numbers, grouped by products, on the **Lot/Serial Number** dashboard. @@ -243,7 +230,6 @@ On the lot number form, the following fields can be modified: modified, as the lot numbers are linked with existing stock moves. .. image:: lots/lot-number.png - :align: center :alt: Show the lot number form. .. seealso:: @@ -259,14 +245,13 @@ on a lot number form: :icon:`fa-cogs` :guilabel:`Add Properties` from the drop-down menu. #. Click the :icon:`fa-plus` :guilabel:`Add a Property` button, located below the existing fields. -Name and :doc:`configure the new field `. Once -finished, enter the property value in the new field. +Name and :doc:`configure the new field `. Once finished, +enter the property value in the new field. .. example:: The new property, `Wood type`, is added. The value is recorded as `Cherry wood`. .. image:: lots/add-properties.png - :align: center :alt: Show the "Add Properties" button on a lot number form. .. seealso:: @@ -298,21 +283,11 @@ number will be assigned. The lot number, `000001`, is created for the product, `Drawer Black`. .. image:: lots/new-lot-number.png - :align: center :alt: New lot number creation form with assigned product. After a new lot number has been created, saved, and assigned to the desired product, the lot number is saved as an existing lot number linked to the product, and can be selected when :ref:`assigning -lot numbers to products on a receipt `, or when making an -inventory adjustment. - -.. example:: - After creating the lot number, `000001` appears as an option for `Drawer Black` when assigning - lot numbers on the :guilabel:`Inventory Adjustment` page. - - .. image:: lots/inventory-adjustment.png - :align: center - :alt: Show how to assign lot numbers on the Inventory Adjustment page. +lot numbers to products on a receipt `. Manage lots for different operations types ========================================== @@ -330,7 +305,6 @@ On the operation type form, under the :guilabel:`Lots/Serial Numbers` section, t Choose :guilabel:`Use Existing ones` if only existing lot numbers can be selected. .. image:: lots/operation-type-form.png - :align: center :alt: Enabled traceability setting on operations type form. .. tip:: @@ -398,7 +372,6 @@ Doing so reorganizes all the records on the page to display all existing lots an and can be expanded to show all quantities of products with that assigned number. .. image:: lots/group-by-number.png - :align: center :alt: Lots and serial numbers traceability report. Traceability report @@ -409,7 +382,6 @@ To view a full stock moves report for a lot number, select the lot number line f smart button. .. image:: lots/traceability-report.png - :align: center :alt: Show the Traceability Report for a lot, that displays the stock moves. .. seealso:: diff --git a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/add-properties.png b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/add-properties.png index 79bc45bb82..fef22f9deb 100644 Binary files a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/add-properties.png and b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/add-properties.png differ diff --git a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/enabled-lots-setting.png b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/enabled-lots-setting.png index 43bb06ddbe..3fc3796c85 100644 Binary files a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/enabled-lots-setting.png and b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/enabled-lots-setting.png differ diff --git a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/inventory-adjustment.png b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/inventory-adjustment.png deleted file mode 100644 index 93730a798f..0000000000 Binary files a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/inventory-adjustment.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/list-icon.png b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/list-icon.png index 611c485df3..de2e8362f3 100644 Binary files a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/list-icon.png and b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/list-icon.png differ diff --git a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/lots-excel-spreadsheet.png b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/lots-excel-spreadsheet.png deleted file mode 100644 index 1a61585d5d..0000000000 Binary files a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/lots-excel-spreadsheet.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/new-lot-number.png b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/new-lot-number.png index 08c88d4ae1..e6374ce881 100644 Binary files a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/new-lot-number.png and b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/new-lot-number.png differ diff --git a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/operation-type-form.png b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/operation-type-form.png index fada50022d..4b396d85a2 100644 Binary files a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/operation-type-form.png and b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/operation-type-form.png differ diff --git a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/tracking-product-form.png b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/tracking-product-form.png index 586dfb84fb..880e4d35b4 100644 Binary files a/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/tracking-product-form.png and b/content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots/tracking-product-form.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst index eb59cb8564..afb1ec2cf1 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst @@ -27,6 +27,13 @@ manufacturing order (MO), with the best choice depending on the business process Automatically suggest or generate POs or MOs when stock falls below a minimum level. + .. card:: Just in time logic + :target: replenishment/just_in_time + :tag: Recommended + :large: + + Avoid overstocking by placing order precisely to meet deadlines. + .. card:: MTO :target: replenishment/mto :tag: Beginner-friendly @@ -67,8 +74,8 @@ Key points include: - :ref:`Manual reordering rules `: Generate suggestions in the replenishment report for user review, allowing adjustments and batch orders while meeting deadlines. -- :ref:`Just-in-time logic `: A strategy to replenish - only what is needed to prevent overstocking. +- :doc:`Just in time logic `: A strategy to replenish only what is + needed to prevent overstocking. .. seealso:: - :doc:`replenishment/reordering_rules` @@ -119,6 +126,7 @@ disrupts its manual replenishment method. replenishment/mto replenishment/reordering_rules + replenishment/just_in_time replenishment/report replenishment/lead_times replenishment/resupply_warehouses diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time.rst new file mode 100644 index 0000000000..33bb3e3ccf --- /dev/null +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time.rst @@ -0,0 +1,84 @@ +================== +Just in time logic +================== + +.. |SO| replace:: :abbr:`SO (Sales Order)` +.. |SOs| replace:: :abbr:`SOs (Sales Orders)` + +*Just-in-time logic* in Odoo minimizes storage costs by placing orders precisely to meet deadlines. +This is achieved using the :ref:`forecasted date `, +which determines when replenishment is necessary to avoid overstocking. For example, for a product +with a 5-day total lead time and a sales order delivery date in 10 days, Odoo waits 5 days to place +the order, ensuring it arrives just in time for delivery. + +The forecasted date is the **earliest possible date** to receive a product if the replenishment +process starts immediately. It is calculated by summing the lead times linked to the replenishment +process, such as :ref:`vendor lead times ` and +:ref:`purchasing delays ` for purchases, or +:ref:`manufacturing lead times ` for production. This works +with both automatic and manual reordering rules. + +.. tip:: + If utilizing just-in-time logic feels risky, consider adding buffer time or :doc:`adjusting lead + times ` for more flexibility. While lead times and just-in-time logic provide + additional control, reordering rules work perfectly fine without them. Keeping delivery dates on + |SOs| as their *creation date* ensures purchases are immediately triggered when needed. + +.. _inventory/warehouses_storage/forecasted-date: + +Forecasted date and to order quantity +===================================== + +The *forecasted date* is the earliest receipt date for a product, if it is ordered right now. It is +calculated by summing the lead times linked to the product's replenishment process. The total of +these lead times, added to the current date, determines when Odoo checks for demanded stock. + +To view the forecasted date go to :menuselection:`Inventory app --> Operations --> Replenishment` to +access the :doc:`replenishment report `, then click the :icon:`fa-info-circle` +:guilabel:`(info)` icon for the desired reordering rule. The :guilabel:`Replenishment Information` +pop-up window displays the :guilabel:`Forecasted Date` and various lead times. + +The just-in-time logic ensures replenishment occurs only when required to meet forecasted demand, +reducing the risk of overstocking. + +.. note:: + Just-in-time logic determines the exact timing of replenishment. If you want to extend this logic + to also consider near-future demand beyond the forecast date, see :ref:`Visibility Days + ` + +If the forecasted quantity falls below the minimum on the forecasted date, replenishment is +triggered immediately to prevent shortages. If the quantity falls below the minimum after the +forecasted date, replenishment is deferred. + +The :guilabel:`To Order` quantity is defined as the total demand on the forecasted date. + +By scheduling purchase orders according to combined lead times, Odoo minimizes inventory while +ensuring that future demand is met on time. + +.. example:: + A manual reordering rule is set up with no minimum or maximum quantities. + + - Vendor lead time is 4 days, and the days to purchase is 2 days. + - Today's date is October 2. + - These add up to 6 days, making the forecasted date, October 8. + + A confirmed |SO| for 5 units has a delivery date of October 8th (6 days from today). This demand + will appear on the replenishment report today, in the :guilabel:`To Order` field. + + However, if the delivery date were later than October 8th, it would not yet appear on the report. + Odoo only displays quantities to replenish when they fall within the forecasted date window, + ensuring orders are placed precisely when needed. + + .. image:: just_in_time/replenishment-info.png + :alt: Show forecasted date in Odoo. + +.. important:: + |SOs| scheduled after the :guilabel:`Forecasted Date` are not included in the :guilabel:`Forecast` + quantities of a reordering rule. However, they do appear in the forecasted report, since it + reflects the long-term forecasted quantity. To access the forecasted report, click + :icon:`fa-area-chart` :guilabel:`(area chart)` icon on the replenishment report. + +.. seealso:: + - :doc:`Reordering Rules ` + - :doc:`Replenishment Report ` + - :doc:`Lead Times ` diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time/replenishment-info.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time/replenishment-info.png new file mode 100644 index 0000000000..aabb252da3 Binary files /dev/null and b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/just_in_time/replenishment-info.png differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst index d5cd5d35e7..42911a6e3e 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/lead_times.rst @@ -168,8 +168,8 @@ confirm a request for quotation (RFQ) and when to expect the goods. - Arrival date of the products. Calculated by *Order Deadline* + *Vendor Lead Time* In addition, Odoo has global security lead times, which are buffers that widen the -:ref:`just-in-time ` (JIT) forecast window. The security -lead times affect **only** replenishment methods that use :doc:`pull rules +:doc:`just-in-time ` (JIT) forecast window. The security lead times affect **only** +replenishment methods that use :doc:`pull rules <../../shipping_receiving/daily_operations/use_routes>`—for example :doc:`reordering rules ` or :doc:`make to order (MTO) `. They do not change the interval between *Order Deadline* and *Expected Arrival*. diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst index d33e3a9707..34b3275298 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst @@ -11,18 +11,27 @@ Replenish on order (MTO) .. |BOM| replace:: :abbr:`BOM (bill of materials)` *Replenish on order*, also known as *MTO* (make to order), is a replenishment strategy that creates -a draft order for a product every time it is required to fulfill a sales order (SO), or when it is -needed as a component in a manufacturing order (MO). +a draft order every time a product is needed to fulfill a sales order (SO) or as a component in a +manufacturing order (MO). -For products that are purchased from a vendor, a request for quotation (RFQ) is created to replenish -the product, while an |MO| is created for products that are manufactured. The creation of an |RFQ| -or |MO| occurs every time an |SO| or |MO| that requires the product is confirmed, regardless of the -current stock level of the product being ordered. +- For :doc:`purchased products <../../../purchase/manage_deals/rfq>`, Odoo creates a |RFQ| +- For :doc:`manufactured products + <../../../manufacturing/basic_setup/configure_manufacturing_product>`, it creates a |MO| + +If stock is available, no |RFQ| or |MO| is generated and the sale proceeds normally. Otherwise, the +|RFQ| or |MO| is generated and directly linked to the originating |SO| through a smart button. + +This approach offers clear traceability, since each |RFQ| or |MO| is tied back to its demand. .. important:: - In order to use the |MTO| route, the :guilabel:`Multi-Step Routes` feature must be enabled. To do - so, navigate to :menuselection:`Inventory app --> Configuration --> Settings`, and tick the - checkbox next to :guilabel:`Multi-Step Routes`, under the :guilabel:`Warehouse` heading. + The |RFQ| or |MO| generated by |MTO| is designed to fulfill the originating |SO|. These documents + should normally be confirmed or adjusted rather than cancelled. If the demand changes, update the + document instead of cancelling it. + +.. note:: + If an |RFQ| or |MO| is cancelled, Odoo does not automatically generate a replacement. A new + replenishment document must be created manually, but it **cannot** be linked back to the original + |SO| through the smart button. Finally, click :guilabel:`Save` to save the change. @@ -31,6 +40,10 @@ current stock level of the product being ordered. Unarchive MTO route =================== +In order to use the |MTO| route, the :guilabel:`Multi-Step Routes` feature must be enabled. To do +so, navigate to :menuselection:`Inventory app --> Configuration --> Settings`, and tick the checkbox +next to :guilabel:`Multi-Step Routes`, under the :guilabel:`Warehouse` heading. + By default, Odoo sets the |MTO| route as *archived*. This is because |MTO| is a somewhat niche workflow that is only used by certain companies. However, it is easy to unarchive the route in just a few simple steps. @@ -121,10 +134,11 @@ Click :guilabel:`Confirm`, and the quotation is turned into an |SO|. A :guilabel:`Purchase` smart button now appears at the top of the page. Clicking it opens the |RFQ| associated with the |SO|. -Click :guilabel:`Confirm Order` to confirm the |RFQ|, and turn it into a |PO|. A purple -:guilabel:`Receive Products` button now appears above the |PO|. Once the products are received, -click :guilabel:`Receive Products` to open the receipt order, and click :guilabel:`Validate` to -enter the products into inventory. +After receiving approval from the vendor that they can meet the demand by the :guilabel:`Expected +Arrival` date, click :guilabel:`Confirm Order` to turn it into a |PO|. A purple :guilabel:`Receive +Products` button now appears above the |PO|. Once the products are received, click +:guilabel:`Receive Products` to open the receipt order, and click :guilabel:`Validate` to enter the +products into inventory. Return to the |SO| by clicking the :guilabel:`SO` breadcrumb, or by navigating to :menuselection:`Sales app --> Orders --> Orders`, and selecting the|SO|. @@ -133,6 +147,14 @@ Finally, click the :guilabel:`Delivery` smart button at the top of the order to order. Once the products have been shipped to the customer, click :guilabel:`Validate` to confirm the delivery. +Cancelling an SO with an MTO product +------------------------------------ + +When a |SO| is cancelled, and it had created an |RFQ| or |MO|, the related delivery order is +cancelled automatically. However, the |RFQ| or |MO| themselves are **not** cancelled. Instead, a +warning appears in their chatter noting the |SO| cancellation. These documents remain active, so the +user can either cancel them manually or repurpose the replenishment for another order. + .. seealso:: For information on workflows that include the |MTO| route, see the following documentation: diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst index 941afcb2a4..70ba3edcfc 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst @@ -35,7 +35,7 @@ To set up reordering rules for the first time, refer to: To understand and optimize replenishment using advanced features, see: -- :ref:`Just-in-time logic ` +- :doc:`Just in time logic ` - :ref:`Visibility days ` - :ref:`Horizon days ` @@ -127,8 +127,8 @@ rule line item: .. note:: To learn how the :guilabel:`On Hand`, :guilabel:`Forecast`, and :guilabel:`To Order` fields are - calculated using on-hand quantities and future demand, see the :ref:`Just-in-time logic - ` section. + calculated using on-hand quantities and future demand, see :doc:`Just in time logic + ` For advanced usage, learn about the following reordering rule fields: @@ -386,102 +386,8 @@ advanced configurations of reordering rules. Consider the following: five products' reordering rules. This ensures future demands for these products are managed separately and assigned to different |RFQs| (the usual behavior). -.. _inventory/warehouses_storage/just-in-time: - -Just-in-time logic -================== - -*Just-in-time logic* in Odoo minimizes storage costs by placing orders precisely to meet deadlines. -This is achieved using the :ref:`forecasted date `, -which determines when replenishment is necessary to avoid overstocking. - -The forecasted date is the **earliest possible date** to receive a product if the replenishment -process starts immediately. It is calculated by summing the lead times linked to the replenishment -process, such as :ref:`vendor lead times ` and -:ref:`purchasing delays ` for purchases, or -:ref:`manufacturing lead times ` for production. Both -automatic and manual reordering rules work this way. - -.. example:: - For a product with a 5-day total lead time and a sales order delivery date in 10 days, Odoo waits - 5 days to place the order, ensuring it arrives just in time for delivery. - -Important considerations: - -- **If this feels risky**, consider adding buffer time or :doc:`adjusting lead times ` - for more flexibility. -- While lead times and just-in-time logic provide additional control, **reordering rules work - perfectly fine without them**. Keeping delivery dates on sales orders as their *creation date* - ensures purchases are immediately triggered when needed - -.. _inventory/warehouses_storage/forecasted-date: - -Forecasted date and To Order quantity -------------------------------------- - -The *forecasted date* is the earliest receipt date for a product, if it is ordered right now. It is -calculated by summing the lead times linked to the product's replenishment process. The total of -these lead times, added to the current date, determines when Odoo checks for demanded stock. - -To view the forecasted date go to the replenishment report and click the :icon:`fa-info-circle` -:guilabel:`(info)` icon for the desired reordering rule. The :guilabel:`Replenishment Information` -pop-up window displays the :guilabel:`Forecasted Date` and various lead times. - -.. example:: - A manual reordering rule is set up with no minimum or maximum quantities. - - - Vendor lead time is 4 days, the purchase security lead time is 1 day, and the days to purchase - is 2 days. - - Today's date is November 26. - - These add up to 7 days, making the forecasted date, December 3rd. - - A confirmed |SO| for 5 units has a delivery date of December 3rd (7 days from today). This demand - will appear on the replenishment report today, in the **To Order** field. - - However, if the delivery date were later than December 3rd, it would not yet appear on the - report. Odoo only displays quantities to replenish when they fall within the forecasted date - window, ensuring orders are placed precisely when needed. - - .. image:: reordering_rules/replenishment-info.png - :alt: Show forecasted date in Odoo. - -The *just-in-time* logic ensures replenishment happens only when it's necessary for the forecasted -date's demand, helping avoid overstocking. - -For example: - -- If the forecasted quantity drops below the minimum **on** the forecasted date, replenishment must - begin immediately to avoid shortages. -- If the quantity drops below the minimum **after** the forecasted date, replenishment can wait. - -The **To Order** quantity is the total demand on the forecasted date. - -By timing purchase orders based on the combined lead times, Odoo optimizes stock levels, keeping -inventory minimal while ensuring future requirements are ordered at the last possible -moment—strategic procrastination without the stress! - -Common confusion about forecasted quantities --------------------------------------------- - -|SOs| due **after** the :guilabel:`Forecasted Date` are not accounted for in the -:guilabel:`Forecast` quantities of the reordering rule. - -They are, however, accounted for on the forecasted report that is opened by clicking the -:icon:`fa-area-chart` :guilabel:`(graph)` icon on the replenishment report, as this one represents -the **long-term forecasted quantity**. - -.. example:: - - .. figure:: reordering_rules/zero-forecast.png - :alt: Forecast and To Order quantities is zero. - - Continuing the above example, when the sales order's deadline is adjusted to December 4th, the - :guilabel:`Forecast` and :guilabel:`To Order` quantities are zero. - - .. figure:: reordering_rules/five-forecast.png - :alt: Show forecasted report. - - Opening the :guilabel:`Forecasted Report` shows the :guilabel:`Forecasted` units is `5.00`. +.. seealso:: + :doc:`Just-in-time logic ` .. _inventory/warehouses_storage/visibility-days: @@ -493,6 +399,11 @@ planned replenishment. Odoo checks if forecasted stock on the forecasted date wi minimum in the reordering rule. **Only if** it is time to reorder, visibility days check additional future demand by the specified number of days. +.. note:: + Visibility days extend the standard just-in-time replenishment logic by looking beyond the + immediate forecasted date. To fully understand how Odoo determines when replenishment is + triggered, refer to the :doc:`Just-in-time logic ` + This feature helps consolidate orders by grouping immediate and near-future needs, reducing transport costs and enabling supplier discounts for larger orders. diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/five-forecast.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/five-forecast.png deleted file mode 100644 index c21f2287c0..0000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/five-forecast.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/replenishment-info.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/replenishment-info.png deleted file mode 100644 index a51425d8af..0000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/replenishment-info.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/zero-forecast.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/zero-forecast.png deleted file mode 100644 index 44edfaf6d0..0000000000 Binary files a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/zero-forecast.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report.rst index d0c3d7c351..eb20181b92 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/report.rst @@ -119,8 +119,8 @@ In each line of the replenishment report, clicking the :icon:`fa-info-circle` :g icon opens the :guilabel:`Replenishment Information` pop-up window, which displays the *lead times* and *forecasted date*. -For detailed information on how to use this feature for replenishment, go to the :ref:`Just in time -logic ` section. +For detailed information on how to use this feature for replenishment, go to the :doc:`just-in-time +` section. Select a warehouse ------------------ diff --git a/content/applications/inventory_and_mrp/manufacturing/reporting.rst b/content/applications/inventory_and_mrp/manufacturing/reporting.rst index aba1a819fa..a944f922e7 100644 --- a/content/applications/inventory_and_mrp/manufacturing/reporting.rst +++ b/content/applications/inventory_and_mrp/manufacturing/reporting.rst @@ -5,6 +5,7 @@ Reporting .. toctree:: :titlesonly: + reporting/delayed reporting/allocation reporting/oee reporting/production_analysis diff --git a/content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst b/content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst new file mode 100644 index 0000000000..2916fc6b2e --- /dev/null +++ b/content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst @@ -0,0 +1,65 @@ +====== +Delays +====== + +.. |SO| replace:: :abbr:`SO (sales order)` +.. |SOs| replace:: :abbr:`SOs (sales orders)` +.. |MO| replace:: :abbr:`MO (manufacturing order)` +.. |MOs| replace:: :abbr:`MOs (manufacturing orders)` +.. |RfQ| replace:: :abbr:`RfQ (request for quotation)` + +Odoo's *Manufacturing* app displays *delays* in manufacturing orders through the :guilabel:`Delayed +Productions` filter. If the |MO|'s end date exceeds its deadline, the deadline is highlighted in red +to draw attention to the delay. + +.. image:: delayed/delayed-filter.png + :alt: The delayed production filter in Odoo. + +Deadline calculation +==================== + +The |MO| deadline depends on how the |MO| was created, and is calculated as follows: + +- **Make To Order**: the |MO| deadline is the *Sales Order Delivery Date*. +- **Replenishment**: the |MO| deadline is *today + Manufacturing Lead Time*. +- **Manually created MO**: the deadline field remains empty. + +.. important:: + The |MO| *deadline* is not the same as the |MO| *end date*. + + The end date is computed as: + + .. math:: + \text{End date} = + \text{Scheduled start date} + +\text{Total duration of all operations} + +Filters +======= + +Several additional filters are available to help track delays: + +- :guilabel:`Delayed Productions`: the |MO|'s *scheduled start date* is later than the deadline. +- :guilabel:`Late`: the |MO|'s *scheduled end date* exceeds the deadline, highlighted in red. +- :guilabel:`Late Availability`: one or more required components are not available before the + deadline. For example, a confirmed purchase order or manufacturing order for components is + scheduled to end *after* the |MO| deadline. +- :guilabel:`Components Available`: all components are available to begin production. + +Use case +======== + +Consider an |MO| with a deadline of **September 17th**: + +- If production on the |MO| starts after September 17th, it appears in the :guilabel:`Delayed + Productions` filter. +- If required components are scheduled to arrive after September 17th, the |MO| appears in the + :guilabel:`Late Availability` filter. +- If the |MO| has a scheduled end date after September 17th, it appears in the :guilabel:`Late` + filter. + +.. image:: delayed/deadline.png + :alt: An MO with the deadline emphasized. + +By combining these indicators, planners can quickly identify where production is at risk of missing +delivery commitments. diff --git a/content/applications/inventory_and_mrp/manufacturing/reporting/delayed/deadline.png b/content/applications/inventory_and_mrp/manufacturing/reporting/delayed/deadline.png new file mode 100644 index 0000000000..f9e7991a09 Binary files /dev/null and b/content/applications/inventory_and_mrp/manufacturing/reporting/delayed/deadline.png differ diff --git a/content/applications/inventory_and_mrp/manufacturing/reporting/delayed/delayed-filter.png b/content/applications/inventory_and_mrp/manufacturing/reporting/delayed/delayed-filter.png new file mode 100644 index 0000000000..3464c540f1 Binary files /dev/null and b/content/applications/inventory_and_mrp/manufacturing/reporting/delayed/delayed-filter.png differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst index 49ed880b3a..6d127b6830 100644 --- a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst +++ b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst @@ -1,53 +1,41 @@ -===================== -Bill control policies -===================== +================ +Control policies +================ .. _purchase/manage_deals/control-bills: .. |PO| replace:: :abbr:`PO (Purchase Order)` .. |POs| replace:: :abbr:`POs (Purchase Orders)` -In Odoo's *Purchase* app, the *bill control* policy determines the quantities billed by vendors on -every purchase order (PO), for either ordered or received quantities. +In Odoo's **Purchase** app, the *Control Policy* determines the quantities billed by vendors on +every purchase order (PO). For example, choosing *On ordered quantities* means the bill is based on +ordered items, even if they have not been received yet. -The policy selected in the *Purchase* app settings acts as the default value, and is applied to any -new product created. +The control policy is selected on the *Product* record. Configuration ============= -To configure the *bill control* policy, navigate to :menuselection:`Purchase app --> Configuration ---> Settings`, and scroll down to the :guilabel:`Invoicing` section. Under :guilabel:`Bill Control`, -select either :guilabel:`Ordered quantities` or :guilabel:`Received quantities`. Then, click -:guilabel:`Save`. +To configure the control policy for a product, navigate to :menuselection:`Purchse app --> Prodcuts +--> Products`, then click on a product record to open it. Click to the :guilabel:`Purchase` tab. +Scroll to the :guilabel:`Vendor Bills` section. Under :guilabel:`Control Policy`, tick the radio +button for either :guilabel:`On ordered quantities` or :guilabel:`On recieved quantities`. -.. image:: control_bills/control-bills-selected-policy.png - :align: center - :alt: Selected bill control policy in Purchase app settings. +- :guilabel:`On ordered quantities`: Creates a vendor bill as soon as a |PO| is confirmed. The + products and quantities in the |PO| are used to generate a draft bill. +- :guilabel:`On received quantities`: A bill is created only *after* part of the total order has + been received. The products and quantities received are used to generate a draft bill. An error + message appears if creation of a vendor bill is attempted without receiving anything. -- :guilabel:`Ordered quantities`: creates a vendor bill as soon as a |PO| is confirmed. The products - and quantities in the |PO| are used to generate a draft bill. -- :guilabel:`Received quantities`: a bill is created only *after* part of the total order has been - received. The products and quantities received are used to generate a draft bill. An error message - appears if creation of a vendor bill is attempted without receiving anything. +The default control policy for a product is determined by the :guilabel:`Product Type`: - .. image:: control_bills/control-bills-error-message-popup.png - :align: center - :alt: Bill control policy draft bill error message. +- **Services**: The default control policy is *On ordered quantities*. +- **Goods**: The default control policy is *On delivered quantities* -.. note:: - If a specific product should use a different control policy than selected in the *Purchase* app - settings, the :guilabel:`Bill Control` policy for that product can be changed from its product - form. - - To do that, navigate to :menuselection:`Purchase app --> Products --> Products`, and select a - product. From the product form, click the :guilabel:`Purchase` tab. Under the :guilabel:`Vendor - Bills` section, modify the selection in the :guilabel:`Control Policy` field. - -3-way matching -============== +Pay vendor bills with 3-way matching +==================================== -The *3-way matching* feature ensures vendor bills are only paid once some (or all) of the products +The *3-way matching* feature ensures vendor bills are only paid once some, or all, of the products included in the |PO| have been received. To activate *3-way matching*, navigate to :menuselection:`Purchase app --> Configuration --> @@ -55,16 +43,8 @@ Settings`, and scroll down to the :guilabel:`Invoicing` section. Then, tick the :guilabel:`3-way matching` to enable the feature, and click :guilabel:`Save`. .. image:: control_bills/control-bills-three-way-matching.png - :align: center :alt: Enabled 3-way matching feature in Purchase app settings. -.. important:: - The :guilabel:`3-way matching` feature **only** works with the :guilabel:`Bill Control` policy - set to :guilabel:`Received quantities`. - -Pay vendor bills with 3-way matching ------------------------------------- - When *3-way matching* is enabled, vendor bills display a :guilabel:`Should Be Paid` field under the :guilabel:`Other Info` tab. When a new vendor bill is created, the field is set to :guilabel:`Yes`, since a bill **cannot** be created until at least some of the products included in a |PO| have been @@ -78,18 +58,15 @@ Paid` field. .. important:: The |PO| selected from the list **must not** be billed yet, or an :guilabel:`Invalid Operation` - pop-up window appears. This occurs for |POs| with a :guilabel:`Received quantities` policy, and a - :guilabel:`Fully Billed` :guilabel:`Billing Status`. + pop-up window appears. .. image:: control_bills/control-bills-invalid-operation.png - :align: center :alt: Invalid Operation pop-up window for billed Purchase Order. Click the drop-down menu next to :guilabel:`Should Be Paid` to view the available options: :guilabel:`Yes`, :guilabel:`No`, and :guilabel:`Exception`. .. image:: control_bills/control-bills-should-be-paid.png - :align: center :alt: Should Be Paid field status on draft vendor bill. .. note:: @@ -131,7 +108,6 @@ Orders --> Purchase Orders`, and select a |PO| to view. Click the :guilabel:`Other Information` tab, and locate the :guilabel:`Billing Status` field. .. image:: control_bills/control-bills-billing-status.png - :align: center :alt: Billing status field on a purchase order form. The table below details the different values the :guilabel:`Billing Status` field could read, and diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-billing-status.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-billing-status.png index a9542b57ab..97772e831f 100644 Binary files a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-billing-status.png and b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-billing-status.png differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-error-message-popup.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-error-message-popup.png deleted file mode 100644 index 9ef0f70aa4..0000000000 Binary files a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-error-message-popup.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-selected-policy.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-selected-policy.png deleted file mode 100644 index 552e836356..0000000000 Binary files a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-selected-policy.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-should-be-paid.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-should-be-paid.png index 523df59353..4f55cd6690 100644 Binary files a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-should-be-paid.png and b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-should-be-paid.png differ diff --git a/content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst b/content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst index 79089af29d..e9b488068e 100644 --- a/content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst +++ b/content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst @@ -50,6 +50,8 @@ Select a quality check type from the :guilabel:`Type` drop-down field: - :guilabel:`Instructions` provides specific instructions for how to conduct the quality check. - :guilabel:`Take a Picture` requires a picture to be attached to the check before the check can be completed. +- :guilabel:`Print label` opens a pop-up from which labels can be printed. This step can be + customized to provide instructions about where to add the labels on a product. - :guilabel:`Pass - Fail` is used when the product being checked must meet a certain criteria to pass the check. - Selecting :guilabel:`Measure` causes a :guilabel:`Measure` input field to appear, in which a diff --git a/content/applications/marketing/sms_marketing/twilio.rst b/content/applications/marketing/sms_marketing/twilio.rst index 94635ebe6e..9d32e49092 100644 --- a/content/applications/marketing/sms_marketing/twilio.rst +++ b/content/applications/marketing/sms_marketing/twilio.rst @@ -43,9 +43,14 @@ be able to send SMS messages. These cost credits that are to be bought on Twilio #. Go back to bottom of the :guilabel:`Dashboard` page #. Copy the :guilabel:`Account SID` and :guilabel:`Auth Token` -Beware that sending SMS to some countries (such as the US or Canada) might require a registration. -This can only be done by you, and not by Odoo. Please check out `Twilio's Help Center -`_ +.. important:: + In case of a testing account, you will only be able to send SMS to phones that you have verified + within `Twilio's console `_. + +.. note:: + Sending SMS to some countries (such as the US or Canada) might require a registration. This can + only be done by you, and not by Odoo. Please check out `Twilio's Help Center + `_. Setup Odoo to use Twilio diff --git a/content/applications/productivity.rst b/content/applications/productivity.rst index c93354bc84..60c9e3d682 100644 --- a/content/applications/productivity.rst +++ b/content/applications/productivity.rst @@ -10,6 +10,7 @@ Productivity productivity/documents productivity/sign productivity/spreadsheet + productivity/dashboards productivity/knowledge productivity/calendar productivity/appointments diff --git a/content/applications/productivity/dashboards.rst b/content/applications/productivity/dashboards.rst new file mode 100644 index 0000000000..693defac45 --- /dev/null +++ b/content/applications/productivity/dashboards.rst @@ -0,0 +1,281 @@ +:show-content: + +========== +Dashboards +========== + +.. toctree:: + :titlesonly: + + dashboards/build_and_customize_dashboards + dashboards/my_dashboard + +**Odoo Dashboards** allows you to consult, customize, and build interactive dashboards that display +real-time data from your Odoo database in an easy-to-understand way. By centralizing data from +various Odoo sources in a single location, dashboards provide an overview of key business metrics +that can help you monitor business performance and make informed decisions. + +:doc:`Odoo spreadsheets <../../applications/productivity/spreadsheet>` serve as the foundation for +dashboards, with tables and charts used to structure and visualize dynamic Odoo data. :ref:`Data +sources ` connect a dashboard's underlying spreadsheet to your +database, ensuring the most recent data is retrieved every time the dashboard is opened or +refreshed. + +With Odoo Dashboards, users can, depending on their :ref:`access rights +`: + +- :ref:`consult dashboards `, including :ref:`standard, + pre-configured dashboards ` +- :ref:`interact with dashboards ` using filters and by + accessing underlying data +- :ref:`share a snapshot of a dashboard ` with internal users who do + not have the appropriate access rights or with external users +- :doc:`build custom dashboards + <../../applications/productivity/dashboards/build_and_customize_dashboards>` using Odoo + Spreadsheet +- :ref:`customize dashboards ` to modify what data is + shown, the layout, or the filters available +- :ref:`manage access rights ` to dashboards +- centralize frequently consulted Odoo views on a personal + :doc:`../../applications/productivity/dashboards/my_dashboard` page + +.. tip:: + - Once a spreadsheet has been converted into a dashboard, it can only be accessed via the + Dashboards app. + - Unlike other Odoo dashboards, :guilabel:`My Dashboard` is not based on Odoo Spreadsheet, but + rather on :doc:`Odoo views <../studio/views>`. + +.. _dashboards/consult-dashboards: + +Consult dashboards +================== + +On the main Dashboards page, the left panel lists all :ref:`dashboards a user has access to +`, grouped by section. Clicking on a dashboard name opens that +dashboard in the main part of the page. + +.. tip:: + Clicking the :icon:`fa-angle-double-left` :guilabel:`(double chevron)` icon at the top of the + left panel collapses the panel, maximizing the space available for dashboards. + +.. _dashboards/consult-dashboards/standard: + +Standard dashboards +------------------- + +Depending on which apps are installed, a series of standard dashboards is available by default. + +These pre-configured dashboards have been designed to provide the most relevant insights +for the topic in question. Data on specific aspects of the topic is presented in tables and charts, +while dashboard-specific filters allow users to tailor the view to their needs. + +.. example:: + Within the :guilabel:`Sales` section in the Dashboards app, the :guilabel:`Sales` dashboard gives + an overview of the number of quotations and orders, the revenue, and the average order value, as + well as a chart showing monthly sales. It also includes tables listing top quotations and sales + orders, top-performing products and salespeople, and top countries served. + + A series of pre-configured global filters, available via the search bar above the dashboard, + allows the entire dashboard to be filtered by, e.g., product or sales team. A default value of + `Last 90 days` in the period filter means data from the previous 90 days is automatically + retrieved every time the dashboard is opened or refreshed. + + .. image:: dashboards/sales-dashboard.png + :alt: Overview of Sales dashboard + +Standard dashboards can be :ref:`customized ` by a user +with the appropriate :ref:`access rights `. +For example, dashboard elements like tables and charts, or global filters can be added, edited, or +removed. + +.. important:: + When customizing a standard dashboard, it is highly recommended to :ref:`duplicate the dashboard + ` and make any changes on the + duplicated version. Standard dashboards are reinstalled at each Odoo version upgrade, meaning any + customizations on the original version are lost. + +.. _dashboards/use-dashboards/interact: + +Interact with dashboards +------------------------ + +In addition to consulting a dashboard for a high-level overview of key business data, it is also +possible to interact with the dashboard for a more detailed analysis: + +- **Filter data**: Most standard dashboards have one or more :doc:`global filters + `, shown as dropdown menus, at the top of the dashboard. These filters + allow all the data on the dashboard to be filtered at the same time, for example, to show data + only for a specific period of time, or for one or more salespeople or customers. + +- **Open underlying database records**: To access database records referenced by a dashboard, click + on the relevant value in a table or on a data point on a chart. Doing so opens either the + individual record, or, in the case of charts or tables displaying consolidated data, a list of the + referenced records. + +- **Open underlying database views**: To access the view from which the data for a specific chart + or table is retrieved, click on the title of the chart or table. Doing so opens the corresponding + list view, pivot view or graph view. + +.. tip:: + To return to a dashboard after drilling down to underlying records or views, click the + :guilabel:`Dashboards` breadcrumb at the upper left of the page. + +.. _dashboards/configuration: + +Configuration +============= + +.. note:: + Only a user with the appropriate :ref:`access rights ` can configure or + modify settings for dashboards and dashboard sections. + +To manage dashboards and dashboard sections, go to :menuselection:`Configuration --> Dashboards`. +The following actions are possible at the level of dashboard sections: + +- **Change the order of dashboard sections** by using the :icon:`oi-draggable` :guilabel:`(drag + handle)` icon to move a section to a new position. + +- **Duplicate a dashboard section** by selecting the relevant section name, clicking the + :icon:`fa-cog` :guilabel:`Actions` button, and then :icon:`fa-clone` :guilabel:`Duplicate`. The + dashboards within the section are not duplicated. + +- **Delete a dashboard section** by selecting the relevant section name, clicking the :icon:`fa-cog` + :guilabel:`Actions` button then :icon:`fa-trash-o` :guilabel:`Delete`. + + .. tip:: + Standard, pre-installed dashboard sections cannot be deleted; custom dashboard sections, on + the other hand, can be deleted. + +- **Create a new dashboard section** by clicking :guilabel:`New`, then entering the section name. + When creating a new section, it is possible to add a dashboard to the new section + directly by clicking :guilabel:`Add a spreadsheet`. + +Clicking on an individual dashboard section lists all dashboards within that section. The following +actions are possible: + +- **Change the order of a dashboard within its section** by using the :icon:`oi-draggable` + :guilabel:`(drag handle)` icon to move the dashboard to a new position. + +- **Edit the name of a dashboard section or dashboard** by clicking the name and modifying it. + +- **Add or remove user groups** to :ref:`control access to the dashboard + `. + +- **Select a company** if, in a :doc:`multi-company + <../../applications/general/companies/multi_company>` database, the dashboard should only be + visible to users of one company. If this field is left blank, the dashboard is visible to all + users with the appropriate access rights, regardless of which company is currently selected in the + database. + +- **Unpublish a dashboard** by disabling the :guilabel:`Is Published` toggle. + +- **Edit the underlying spreadsheet** of a dashboard by clicking :icon:`fa-pencil` :guilabel:`Edit` + on the line of the relevant dashboard. + + .. important:: + When customizing a standard dashboard, it is highly recommended to :ref:`duplicate the + dashboard ` and make any changes + on the underlying spreadsheet of the duplicated version. Standard dashboards are reinstalled at + each Odoo version upgrade, meaning any customizations on the original version are lost. + +- **Delete a dashboard** by clicking the :icon:`fa-trash` :guilabel:`(trash)` icon. + + .. tip:: + A standard dashboard that is deleted is reinstalled at the next Odoo version upgrade. + +- **Add a new dashboard to the section** by clicking :guilabel:`Add a spreadsheet`. Two options + exist: + + - To convert an existing spreadsheet into a dashboard and add it to the new section, select the + relevant spreadsheet, then click :guilabel:`Confirm`. Back in the section overview, update the + :guilabel:`Group` and :guilabel:`Company` fields if needed. + + - To start creating a dashboard from scratch, select :guilabel:`Blank spreadsheet`. To return to + the section overview, click the name of the section at the top left of the page. Update the + :guilabel:`Group` and :guilabel:`Company` fields if needed. + + .. note:: + After a spreadsheet has been converted into a dashboard, it can only be :ref:`accessed and + edited via the Dashboards app `. + + .. tip:: + - A newly created dashboard is by default accessible to users belonging to the default internal + :ref:`user group `. Edit this if needed via the configuration page of + the relevant dashboard section. + - It is also possible to :ref:`convert a spreadsheet into a dashboard + ` and add it to a dashboard section + starting from the spreadsheet in the Documents app. + +.. _dashboards/access-and-sharing: + +Access rights and sharing +========================= + +.. _dashboards/access-and-sharing/viewing: + +Consulting dashboards +--------------------- + +The *right to view and interact with a dashboard* is based on :ref:`user groups +`, and is managed in the :ref:`Configuration settings +` of the Dashboards app. Only users who are part +of a group that has been granted access to a specific dashboard see that dashboard in the left-hand +panel on the main Dashboards page. Users with `Dashboard / Admin` access rights can view all +dashboards. + +However, the *visibility of dynamic Odoo data within a dashboard* is handled separately. This is +based on a user's :ref:`access rights ` to the model from which the +data has been retrieved, and takes into account any record rules that may restrict access. + +.. important:: + User permissions are taken into account when a user opens a dashboard, with the dashboard only + being populated with data the user is authorized to see. This means that a user could in theory + be able to view a dashboard but, due to a lack of appropriate permissions, not be able to see the + Odoo data the dashboard's creator intended to be displayed. + + Therefore, it is crucial to take user permissions into consideration when granting dashboard + access to groups. + +.. example:: + Granting the user group `Sales / User: Own Documents Only` access to the :guilabel:`Sales` + dashboard would serve little purpose. While users belonging to that group would be able to view + and interact with the dashboard, they would only see data related to their own sales, rendering + the overall dashboard misleading. + +.. _dashboards/access-and-sharing/manage-view-access: + +Manage access rights to view dashboards +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To manage users' rights to view and interact with a dashboard: + +#. In the Dashboards app, go to :menuselection:`Configuration --> Dashboards`. +#. From the list of dashboard sections, open the relevant section. +#. On the line of the relevant dashboard, in the :guilabel:`Group` column: + + - add a user group by clicking the field until a dropdown with user groups appears, then + selecting the appropriate user group. In the dropdown, click :guilabel:`Search More` to access + the full list of user groups; + - remove a user group by clicking the relevant group name, then clicking :icon:`fa-times` + :guilabel:`(Delete)`. + +.. _dashboards/access-and-sharing/customize-configure-build: + +Building, customizing and configuring dashboards +------------------------------------------------ + +Only users with `Dashboards / Admin` access rights can :ref:`customize dashboards +` or :ref:`configure dashboard settings +`. To :ref:`build a dashboard from scratch +`, a user must have both `Dashboards / Admin` and, at minimum +for the Documents app, `Documents / User` access rights. + +.. _dashboards/access-and-sharing/sharing: + +Share dashboard snapshot +------------------------ + +To share a frozen version of a dashboard with an internal user who does not have the appropriate +access or with an external party, click :icon:`fa-share-alt` :guilabel:`Share` at the top-right of +the page then click the :icon:`fa-clone` :guilabel:`(copy)` icon to copy a shareable link to your +clipboard. diff --git a/content/applications/productivity/dashboards/build_and_customize_dashboards.rst b/content/applications/productivity/dashboards/build_and_customize_dashboards.rst new file mode 100644 index 0000000000..a8fc987be2 --- /dev/null +++ b/content/applications/productivity/dashboards/build_and_customize_dashboards.rst @@ -0,0 +1,223 @@ +============================== +Build and customize dashboards +============================== + +In addition to consulting :ref:`standard dashboards `, users +with the appropriate :ref:`access rights ` +can :ref:`build custom dashboards from scratch ` or +:ref:`customize existing dashboards ` to respond to +specific business needs. + +.. _build_and_customize_dashboards/build: + +Build a dashboard +================= + +In its most simple terms, building a dashboard involves :doc:`inserting Odoo data into a spreadsheet +<../../../applications/productivity/spreadsheet/insert>` then :ref:`converting that spreadsheet into +a dashboard `. + +However, to build a dashboard that delivers relevant and valuable insights, it is important to +consider the process in terms of three key stages: :ref:`preparation +`, :ref:`data insertion and manipulation +`, and :ref:`data visualization +`. + +.. _build_and_customize_dashboards/build-preparation: + +Preparation +----------- + +This stage involves: + +- defining the purpose of the dashboard, in other words, the business questions it needs to answer, + and deciding what data would answer those questions; +- determining where to find the relevant Odoo data and deciding which :doc:`type of view + <../../../applications/studio/views>` (i.e., list, pivot table, or chart) is most suited for the + data analysis needed; +- preparing the Odoo data by refining the views to focus on the most relevant information, e.g., by + using :doc:`search filters <../../../applications/essentials/search>`, by making only certain list + fields visible, or by deciding which dimensions and measures a pivot table should use; +- sourcing any other information needed to support the dashboard. + +.. _build_and_customize_dashboards/build-insertion-manipulation: + +Data insertion and manipulation +------------------------------- + +This stage involves: + +- :doc:`inserting the prepared lists, pivot tables or charts + <../../../applications/productivity/spreadsheet/insert>` into the spreadsheet you will use to + build your dashboard; +- manipulating the data, if needed, to be able to draw the necessary insights. This may involve + performing calculations or creating custom metrics using :doc:`standard or Odoo-specific functions + and formulas <../../../applications/productivity/spreadsheet/functions>`, referencing data from + various sources within the spreadsheet, or :doc:`converting static pivot tables to dynamic pivot + tables <../../../applications/productivity/spreadsheet/dynamic_pivot_tables>`. + +.. _build_and_customize_dashboards/build-visualization: + +Data visualization +------------------ + +This stage involves: + +- presenting the data on at least the first sheet of your spreadsheet (i.e., the sheet that will + serve as the front end of your dashboard) in a clear, visual, and meaningful way so it is easy to + interpret. Concretely, this means deciding on the layout and order of elements such as tables and + charts, as well as using tools and techniques to guide the user, such as clear and descriptive + headings, text formatting and colors, carefully chosen chart types, and conditional formatting to + highlight specific data visually; +- :ref:`inserting clickable links `, if relevant, to provide + access to Odoo menu items, URLs, or other sheets within the same spreadsheet if these should also + be accessible from the front end of your dashboard; +- :doc:`creating global filters <../../../applications/productivity/spreadsheet/global_filters>` to + allow users to tailor the view to their needs; +- :ref:`converting the spreadsheet into a dashboard + `, determining whether to add the dashboard + to an existing or new dashboard section, and :ref:`managing access rights to the dashboard + `. + +.. tip:: + - Use standard dashboards as inspiration for how to best present and visualize data. For example, + for charts, :ref:`open the underlying spreadsheet + ` of a standard dashboard, hover + over a chart and click the :icon:`fa-bars` :guilabel:`(menu)` icon, then + :icon:`fa-pencil-square-o` :guilabel:`Edit` to see the chart properties on the right side of + the screen. + - The possibility to link to other sheets within the same spreadsheet allows the creation of a + multi-page dashboard, with users able to navigate between pages thanks to clickable links. + Global filters apply across all pages of a dashboard. + +.. seealso:: + `Odoo Tutorial: Dashboard from scratch + `_ + +.. _build_and_customize_dashboards/customize: + +Customize a dashboard +===================== + +Dashboards are customized by editing the dashboard's underlying spreadsheet. + +.. important:: + When customizing a :ref:`standard dashboard `, it is + highly recommended to :ref:`duplicate the dashboard + ` and make any changes on + the underlying spreadsheet of the duplicated version. Standard dashboards are reinstalled at + each Odoo version upgrade, meaning any customizations on the original version are lost. + +.. _build_and_customize_dashboards/customize/open-spreadsheet: + +Open the underlying spreadsheet +------------------------------- + +To open a dashboard's underlying spreadsheet: + +#. In the Dashboards app, go to :menuselection:`Configuration --> Dashboards`. +#. Open the relevant dashboard section, then, on the line of the relevant dashboard, click + :icon:`fa-pencil` :guilabel:`Edit`. + +.. tip:: + - Users who do not have the appropriate :ref:`access rights + ` to customize a dashboard can still + access a read-only version of the dashboard's underlying spreadsheet. + - To temporarily unpublish a dashboard while you make changes, disable :guilabel:`Is Published` + *before* editing the dashboard, making note to republish it when the customization has been + finalized. + - With :ref:`developer mode ` activated, click on the :icon:`fa-pencil` + :guilabel:`(Edit)` icon beside the name of a dashboard in the left panel to open its underlying + spreadsheet. + +The spreadsheet that opens typically consists of at least two sheets: + +- **The first sheet** always serves as the front end of your dashboard, and contains the tables + and charts used to structure and visualize the data. + +- **The second and any subsequent sheets** typically contain data used for the calculation of key + metrics shown on the first sheet. + +.. note:: + The :ref:`data sources ` that maintain the connection between + the spreadsheet and the relevant models in your database can be viewed by clicking + :menuselection:`Data` on the spreadsheet's menu bar. These data sources are identified by + their respective :icon:`oi-view-pivot` :guilabel:`(pivot table)`, :icon:`oi-view-list` + :guilabel:`(list)` or :icon:`fa-bar-chart` :guilabel:`(chart)` icon, followed by their ID and + name, e.g., :icon:`oi-view-pivot` *(#1) Sales Analysis by Product*. + + For :ref:`standard dashboards `, while the data sources + are still active and visible in the :menuselection:`Data` menu, the corresponding lists and pivot + tables have been removed from the spreadsheet for better performance and a neater appearance. + +.. _build_and_customize_dashboards/customize/duplicate-dashboard: + +Duplicate a dashboard +~~~~~~~~~~~~~~~~~~~~~ + +To duplicate a dashboard: + +#. In the Dashboards app, go to :menuselection:`Configuration --> Dashboards`. +#. Open the relevant dashboard section, then, on the line of the dashboard you want to duplicate, + click :icon:`fa-pencil` :guilabel:`Edit`. +#. In the spreadsheet that opens, click :menuselection:`File -->` :icon:`os-copy-file` + :menuselection:`Make a copy`. +#. Rename the duplicated dashboard by clicking the name of the spreadsheet at the top left of the + screen and editing as needed. + +.. tip:: + - To return to the overview of the dashboard section, click the name of the original dashboard at + the top left of the page, then the name of the dashboard section. + - After duplicating a dashboard, delete the original dashboard by clicking the :icon:`fa-trash` + :guilabel:`(trash)` icon or rename it by clicking on the name then editing it. + +.. _dashboards/customize-dashboard/edit-spreadsheet: + +Add, edit, or remove dashboard elements +--------------------------------------- + +Dashboards can be customized in various ways, such as by: + +- adding new tables and charts based on previously inserted or :ref:`newly inserted Odoo data + `. This requires a similar approach + to :ref:`building a dashboard from scratch `; +- :doc:`adding new global filters <../../../applications/productivity/spreadsheet/global_filters>` + or editing or deleting existing ones; +- :ref:`adding or editing clickable links ` to Odoo menus, URLs, + or to other sheets within the same spreadsheet. + +.. tip:: + Dashboard elements that are no longer needed can be deleted from the spreadsheet. If, after + deleting a dashboard element, a :ref:`data source ` is no longer + being used in the spreadsheet, this is indicated by a :icon:`fa-exclamation-triangle` + :guilabel:`(warning)` icon in the :guilabel:`Data` menu. + + .. image:: build_and_customize_dashboards/list-deleted.png + :alt: Warning to indicate data source no longer used in spreadsheet + +.. _dashboards/customize-dashboard/edit-spreadsheet-new-odoo-data: + +Insert new Odoo data +-------------------- + +Inserting new Odoo data into a dashboard's underlying spreadsheet requires starting from the +relevant Odoo view. To do so: + +#. With the relevant list view, pivot view or graph view open in your database, proceed as follows: + + - For a list view, click the :icon:`fa-cog` :guilabel:`(Actions)` icon beside the name of the + view, then :guilabel:`Spreadsheet -->` :icon:`oi-view-list` :menuselection:`Insert list in + spreadsheet`. + - For a pivot or graph view, click :guilabel:`Insert in Spreadsheet` at the top left of the view. + +#. In the window that opens, edit the name if needed. For a list, edit the number of records, i.e., + rows to be inserted, if needed. +#. Click the :guilabel:`Dashboards` tab then select in which dashboard the list, pivot table, or + chart should be inserted. + +A list or pivot table is inserted into a new sheet in the dashboard's underlying spreadsheet; a +chart is inserted on the first sheet of the spreadsheet. + +.. seealso:: + :doc:`Inserting Odoo data into a spreadsheet + <../../../applications/productivity/spreadsheet/insert>` diff --git a/content/applications/productivity/dashboards/build_and_customize_dashboards/list-deleted.png b/content/applications/productivity/dashboards/build_and_customize_dashboards/list-deleted.png new file mode 100644 index 0000000000..95799cbf39 Binary files /dev/null and b/content/applications/productivity/dashboards/build_and_customize_dashboards/list-deleted.png differ diff --git a/content/applications/productivity/dashboards/my_dashboard.rst b/content/applications/productivity/dashboards/my_dashboard.rst new file mode 100644 index 0000000000..7c6d322ad1 --- /dev/null +++ b/content/applications/productivity/dashboards/my_dashboard.rst @@ -0,0 +1,70 @@ +============ +My Dashboard +============ + +**My Dashboard** allows you to centralize the :doc:`Odoo views <../../studio/views>` you consult +most regularly, making it possible to see critical tasks at a glance without having to first +navigate through multiple apps. Unlike other Odoo dashboards, My Dashboard is not based on **Odoo +Spreadsheet**. + +Views inserted in My Dashboard are fully dynamic and retain many features of the source view, e.g., +sorting of lists, changing the measures used for a pivot table or cohort view, changing the chart +type, or clicking on a value or data point to view the underlying record(s). + +.. tip:: + It is not possible to change the domain, i.e., the filtering or grouping, of a view that has been + added to My Dashboard. To change the domain, make the necessary changes in the original view, + then re-insert the view in My Dashboard and delete the originally inserted view. + +Add views +========= + +Most Odoo views can be added to My Dashboard, including: + +- :ref:`multiple record views ` like list, kanban, and map +- :ref:`timeline views ` like calendar, cohort, and gantt +- :ref:`reporting views ` like pivot and graph + +To add a view to My Dashboard: + +#. With the relevant view open in your database, click the :icon:`fa-cog` :guilabel:`(Actions)` icon + beside the name of the view, then :menuselection:`Dashboard`. +#. Under :guilabel:`Add to my Dashboard`, rename the view if desired, then click :guilabel:`Add`. + + .. image:: my_dashboard/add-view.png + :alt: Adding a view to My Dashboard + :scale: 80% + +#. Refresh the page. + +The added view is now visible as a widget in My Dashboard in the Dashboards app. + +.. tip:: + If added views are not showing in My Dashboard, refresh the browser page. + +Customize layout +================ + +When at least one view has been added to My Dashboard, the page can be customized as follows: + +- **Change the layout of the page**: Click :guilabel:`Change Layout` in the top-right corner and + select the desired layout. + + .. tip:: + For multi-column layouts, the column limits are identified by :icon:`fa-caret-left` + :guilabel:`(left caret)` and :icon:`fa-caret-right` :guilabel:`(right caret)` icons at the + bottom of the page. If needed, scroll to the bottom of the page to see the column limits. + + .. image:: my_dashboard/column-limits.png + :alt: Column limits visible at bottom of page + +- **Collapse and expand widgets**: By default, an inserted widget is shown fully expanded. To + collapse, or minimize, a widget, and show only the title, click the :icon:`fa-window-minimize` + :guilabel:`(minimize)` icon at the top right of the widget. To expand a widget, click the + :icon:`fa-window-maximize` :guilabel:`(maximize)` icon. +- **Move widgets**: Drag and drop widgets to the desired location in the same column or a different + column. +- **Remove widgets**: To remove a widget from the page, click the :icon:`fa-times` + :guilabel:`(remove)` icon. + + diff --git a/content/applications/productivity/dashboards/my_dashboard/add-view.png b/content/applications/productivity/dashboards/my_dashboard/add-view.png new file mode 100644 index 0000000000..f44e8dfe0b Binary files /dev/null and b/content/applications/productivity/dashboards/my_dashboard/add-view.png differ diff --git a/content/applications/productivity/dashboards/my_dashboard/column-limits.png b/content/applications/productivity/dashboards/my_dashboard/column-limits.png new file mode 100644 index 0000000000..620b22fa58 Binary files /dev/null and b/content/applications/productivity/dashboards/my_dashboard/column-limits.png differ diff --git a/content/applications/productivity/dashboards/sales-dashboard.png b/content/applications/productivity/dashboards/sales-dashboard.png new file mode 100644 index 0000000000..53b1874fa5 Binary files /dev/null and b/content/applications/productivity/dashboards/sales-dashboard.png differ diff --git a/content/applications/productivity/spreadsheet.rst b/content/applications/productivity/spreadsheet.rst index d06ec7b030..83c01985ba 100644 --- a/content/applications/productivity/spreadsheet.rst +++ b/content/applications/productivity/spreadsheet.rst @@ -38,13 +38,17 @@ The Spreadsheet module is part of **Odoo Documents**. to browse and execute spreadsheet commands via the keyboard, without having to navigate menus. .. note:: - Odoo spreadsheets serve as the foundation for the dashboards available in **Odoo Dashboards**. On - a dashboard, charts and data tables are used to display dynamic Odoo data and provide an overview - of key business metrics. - - Standard, pre-configured dashboards can be customized by editing the dashboard's underlying - spreadsheet via Dashboards. Custom dashboards can also be created from scratch, starting - from an Odoo spreadsheet; any subsequent modifications are performed via Dashboards. + Odoo spreadsheets serve as the foundation for the :doc:`dashboards available in Odoo Dashboards + <../../applications/productivity/dashboards>`. On a dashboard, charts and data tables are used to + display dynamic Odoo data and provide an overview of key business metrics. + + :ref:`Standard, pre-configured dashboards + ` can be :ref:`customized + ` by editing the dashboard's underlying spreadsheet via + Dashboards. :ref:`Custom dashboards + ` can also be created from scratch, starting from an Odoo + spreadsheet; any subsequent :ref:`modifications ` are + performed via Dashboards. .. _spreadsheet/create-new: @@ -126,16 +130,9 @@ spreadsheet via the :guilabel:`File` menu: - :icon:`fa-print` :guilabel:`Print`: prints a copy of the spreadsheet on a connected printer. - :icon:`os-cog` :guilabel:`Settings`: allows you to view and change the :ref:`locale ` of the current spreadsheet. -- :icon:`os-add-to-dashboard` :guilabel:`Add to dashboard`: allows you to turn the current - spreadsheet into a new dashboard that is accessible via Odoo Dashboards. The following fields must - be completed: :guilabel:`Dashboard Name`, the :guilabel:`Dashboard Section` in which the new - dashboard will be saved, and :guilabel:`Access Groups` to determine which user groups can access - the dashboard. - - .. note:: - When a spreadsheet is converted into a dashboard, the original spreadsheet is deleted from Odoo - Spreadsheet. However, it is still possible to edit the dashboards's underlying spreadsheet via - Odoo Dashboards. +- :icon:`os-add-to-dashboard` :guilabel:`Add to dashboard`: :ref:`converts + ` the current spreadsheet into an Odoo + dashboard. .. _spreadsheet/manage-spreadsheets/version-history: @@ -202,3 +199,30 @@ right of the spreadsheet. To change the locale, select the appropriate locale fr If no :icon:`fa-globe` :guilabel:`(globe)` icon is shown, this means the spreadsheet's locale is the same as that of your user profile. + +.. _spreadsheet/manage-spreadsheets/convert-to-dashboard: + +Convert a spreadsheet into a dashboard +-------------------------------------- + +A user with the appropriate :ref:`access rights ` can convert an Odoo +spreadsheet into a dashboard that is then accessible via +:doc:`Odoo Dashboards <../../../applications/productivity/dashboards>`. To do so: + +#. Click :menuselection:`File -->` :icon:`os-add-to-dashboard` :menuselection:`Add to dashboard` + from the menu bar. +#. Enter the :guilabel:`Dashboard Name`. +#. Select the relevant :guilabel:`Dashboard Section` from the dropdown or, to create a new dashboard + section, type the name of the new section, then click :guilabel:`Create`. +#. If necessary, modify the :guilabel:`Access Groups` to determine which :ref:`user groups + ` can access the dashboard. +#. Click :guilabel:`Create`. + +.. tip:: + - By default, the first tab of the spreadsheet serves as the front end of the dashboard. + - It is also possible to convert a spreadsheet to a dashboard from within the :ref:`Dashboard + configuration settings `, by directly adding the spreadsheet to + an existing or new dashboard section. + - After a spreadsheet has been converted to a dashboard, it is deleted from Odoo Documents. Any + subsequent :ref:`modifications ` need to be made via + Odoo Dashboards. diff --git a/content/applications/productivity/spreadsheet/global_filters.rst b/content/applications/productivity/spreadsheet/global_filters.rst index 1b675a28e4..734ebfbcba 100644 --- a/content/applications/productivity/spreadsheet/global_filters.rst +++ b/content/applications/productivity/spreadsheet/global_filters.rst @@ -270,6 +270,8 @@ With the :guilabel:`Filter properties` pane open: .. image:: global_filters/field-matching-checkbox.png :alt: A yes/no filter with the Active field set as matching field +.. _spreadsheet/global-filters/manage: + Manage and use global filters ============================= diff --git a/content/applications/productivity/voip.rst b/content/applications/productivity/voip.rst index ccc58fbe02..e844b4ac18 100644 --- a/content/applications/productivity/voip.rst +++ b/content/applications/productivity/voip.rst @@ -123,6 +123,7 @@ VoIP workflows voip/onsip voip/axivox + voip/didww voip/voip_widget voip/devices_integrations voip/sales_calls diff --git a/content/applications/productivity/voip/didww.rst b/content/applications/productivity/voip/didww.rst new file mode 100644 index 0000000000..b8e04c60e0 --- /dev/null +++ b/content/applications/productivity/voip/didww.rst @@ -0,0 +1,84 @@ +================================ +VoIP services in Odoo with DIDWW +================================ + +*DIDWW* is a global *VoIP* and SIP trunking provider. An active account with DIDWW is required to +use this service. + +Before creating an account with DIDWW, make sure that the company's location and the applicable +regions are supported by DIDWW's services. + +DIDWW setup +=========== + +After verifying country coverage and availability, create an account with `DIDWW +`_. Then navigate to the `DIDWW Dashboard +`_. + +To transfer existing numbers from an existing telephone network service provider, follow the steps +outlined on the `DIDWW website `_. + +Purchase new numbers +-------------------- + +To puchase new phone numbers, click :guilabel:`Buy Numbers` in the dashboard, then follow the +instructions to complete the purchase. + +When buying a new number, it **must** support both inbound calls and Local CLI. + +.. image:: didww/didww-purchase-numbers.png + :alt: The purchase dashboard in DIDWW. + +Enable phone.systems +-------------------- + +Next, click :guilabel:`Cloud Phone System` in the dashboard sidebar. Then, click :guilabel:`Launch +admin UI`. + +.. important:: + The *phone.systems PBX* feature is an extra paid service in DIDWW, and may require additional + fees. + +To create a new user, click :guilabel:`Users`, click the plus sign, then enter the necessary +information. + +.. image:: didww/add-user.png + :alt: The add a new user screen in DIDWW. + +Click :guilabel:`Contact Methods`, then click the plus sign to add a new *SIP Device Route*. + +Configure or add the following parameters: + +- :guilabel:`Allowed Codecs`: `OPUS`, `PCMU`, `PCMA`, `telephone-event`, `g722`, `g729`. +- :guilabel:`Allowed media types`: `SRTP-DTLS` +- :guilabel:`Default media type`: `SRTP-DTLS` +- :guilabel:`Transport protocol`: `UDP`, `TCP`, `WSS`, `TLS` + +.. image:: didww/sip-device-route.png + :alt: The settings for a new contact method in DIDWW. + +.. tip:: + If no phone number available from drop-down selection in *Inbound and Outbound DID/Caller ID* + selection, the :guilabel:`Inbound voice trunk` needs to be modified. Navigate to the dashboard, + then click :guilabel:`My Numbers`. Scroll to :guilabel:`Configuration`. In the :guilabel:`Inbound + voice trunk` field, select :guilabel:`phone.systems`. + +Odoo setup +========== + +In *Odoo*, navigate to :menuselection:`Settings app --> Integrations --> VoIP --> Manage Providers`. +Click :guilabel:`New`. + +Enter the name, `DIDWW`, then update the :guilabel:`WebSocket` field with `wss://sip.phone.systems`. +Under :guilabel:`PBX Server IP`, enter `sip.phone.systems`. + +.. image:: didww/new-provider.png + :alt: The VoIP providers page in Odoo. + +To configure a user's VoIP provider, click the user avatar icon in the top-right corner of the +database, and then choose :guilabel:`My Preferences` from the sub-menu. Then click into the +:guilabel:`VoIP` tab, and under the :guilabel:`Voip Provider` field, select :guilabel:`DIDWW`. +Finally, enter the :guilabel:`Voip Username` and :guilabel:`Voip Secret`, then save. + +.. image:: didww/odoo-credentials.png + :alt: DIDWW provider, username, and secret credentials entered. diff --git a/content/applications/productivity/voip/didww/add-user.png b/content/applications/productivity/voip/didww/add-user.png new file mode 100644 index 0000000000..a6407b110f Binary files /dev/null and b/content/applications/productivity/voip/didww/add-user.png differ diff --git a/content/applications/productivity/voip/didww/didww-purchase-numbers.png b/content/applications/productivity/voip/didww/didww-purchase-numbers.png new file mode 100644 index 0000000000..29d20a0b95 Binary files /dev/null and b/content/applications/productivity/voip/didww/didww-purchase-numbers.png differ diff --git a/content/applications/productivity/voip/didww/new-provider.png b/content/applications/productivity/voip/didww/new-provider.png new file mode 100644 index 0000000000..e5b3d13e10 Binary files /dev/null and b/content/applications/productivity/voip/didww/new-provider.png differ diff --git a/content/applications/productivity/voip/didww/odoo-credentials.png b/content/applications/productivity/voip/didww/odoo-credentials.png new file mode 100644 index 0000000000..cc8a5c10e2 Binary files /dev/null and b/content/applications/productivity/voip/didww/odoo-credentials.png differ diff --git a/content/applications/productivity/voip/didww/sip-device-route.png b/content/applications/productivity/voip/didww/sip-device-route.png new file mode 100644 index 0000000000..d5affd7c6a Binary files /dev/null and b/content/applications/productivity/voip/didww/sip-device-route.png differ diff --git a/content/applications/productivity/whatsapp.rst b/content/applications/productivity/whatsapp.rst index 92e306fb81..d2c87b8f2e 100644 --- a/content/applications/productivity/whatsapp.rst +++ b/content/applications/productivity/whatsapp.rst @@ -56,8 +56,8 @@ number), then Odoo will open a group chat with all operators responsible for thi `Magic Sheet - WhatsApp configuration [PDF] `_ -WhatsApp configuration in a Meta -================================ +WhatsApp configuration in Meta +============================== A WhatsApp integration with Odoo uses a standard :abbr:`API (Application Programming Interface)` connection, and is configured on Meta in the following steps: @@ -206,8 +206,8 @@ test message. .. note:: If the browser is not on the :guilabel:`Quickstart` page for WhatsApp, navigate to - ``_ and click on the app that is being configured, (the - app name is `Odoo` if the instructions above were followed). + ``_ and click on the app that is being configured, (the app + name is `Odoo` if the instructions above were followed). Then, in the menu on the left-hand side of the page, click the :guilabel:`v (menu toggle)` icon next to the :guilabel:`WhatsApp` section heading. A small menu will open, containing the @@ -410,8 +410,8 @@ depending on the verification method chosen. Enter that verification code into t :guilabel:`Verification code` field and click :guilabel:`Next` to finish. .. warning:: - If a payment method has not been added, this is necessary to proceed. `Visit Meta's - documentation on how to add a payment method in Meta's Business Manager + If a payment method has not been added, this is necessary to proceed. `Visit Meta's documentation + on how to add a payment method in Meta's Business Manager `_. This is part of Meta's fraud detection system, in order to ensure that the account/company are real a payment method is required to proceed. @@ -460,6 +460,7 @@ permissions: - `business_management` - `whatsapp_business_messaging` - `whatsapp_business_management` +- `whatsapp_business_manage_events` When permissions are set, click :guilabel:`Generate token`. Copy the token value that populates on the screen that follows. @@ -548,10 +549,10 @@ action will apply to for this template. .. tip:: These models can also be accessed in :ref:`developer mode `. On a contact form - (or similar relevant form in Odoo), navigate to the model that is referenced, and hover over - any field name. A box of backend information will reveal itself with the specific Odoo - :guilabel:`Model` name in the backend. Search (using the front-end name) for this model in the - :guilabel:`Applies to` drop-down menu in the WhatsApp template. + (or similar relevant form in Odoo), navigate to the model that is referenced, and hover over any + field name. The backend information box displays the Odoo :guilabel:`Model` name. Search (using + the front-end name) for this model in the :guilabel:`Applies to` drop-down menu in the WhatsApp + template. .. warning:: Often when changing the model or :guilabel:`Applies to` field, the :guilabel:`Phone Field` may @@ -774,8 +775,7 @@ Enter the :guilabel:`Name` of the template and then select the :guilabel:`Langua template. .. note:: - Multiple languages can be selected by typing the language names and selecting the other - languages as needed. + Multiple languages can be selected. .. image:: whatsapp/template-config.png :alt: Template configuration options listed, with Marketing, Utility, Name and Language diff --git a/content/applications/sales/point_of_sale/payment_methods/terminals.rst b/content/applications/sales/point_of_sale/payment_methods/terminals.rst index 99d7384719..2852165ca6 100644 --- a/content/applications/sales/point_of_sale/payment_methods/terminals.rst +++ b/content/applications/sales/point_of_sale/payment_methods/terminals.rst @@ -26,7 +26,8 @@ To activate a payment terminal and allow processing payments with it, follow the - :doc:`Adyen ` - :doc:`Ingenico ` - :doc:`Mercado Pago ` - - :doc:`QFPay configuration ` + - :doc:`Pine Labs ` + - :doc:`QFPay ` - :doc:`Razorpay ` - :doc:`SIX ` - :doc:`Stripe ` @@ -58,6 +59,7 @@ Once the transaction is successful, the payment is automatically validated in Po terminals/adyen terminals/ingenico terminals/mercado_pago + terminals/pine_labs terminals/qfpay terminals/razorpay terminals/six diff --git a/content/applications/sales/point_of_sale/payment_methods/terminals/mercado_pago.rst b/content/applications/sales/point_of_sale/payment_methods/terminals/mercado_pago.rst index 397b2273a2..ee8c972769 100644 --- a/content/applications/sales/point_of_sale/payment_methods/terminals/mercado_pago.rst +++ b/content/applications/sales/point_of_sale/payment_methods/terminals/mercado_pago.rst @@ -6,8 +6,8 @@ Connecting a payment terminal allows you to offer a fluid payment flow to your c the work of your cashiers. .. important:: - Only **Point Smart** payment terminals in **Argentina**, **Brazil**, and **Mexico** are - supported. They can be purchased on `Mercado Pago's website + Only **Point Smart** payment terminals in Argentina, Brazil, Chile, Colombia, Mexico, Peru, and + Uruguay are supported. They can be purchased on `Mercado Pago's website `_. .. seealso:: diff --git a/content/applications/sales/point_of_sale/payment_methods/terminals/pine_labs.rst b/content/applications/sales/point_of_sale/payment_methods/terminals/pine_labs.rst new file mode 100644 index 0000000000..3ece53c61d --- /dev/null +++ b/content/applications/sales/point_of_sale/payment_methods/terminals/pine_labs.rst @@ -0,0 +1,53 @@ +========= +Pine Labs +========= + +`Pine Labs `_ offers in-store payment solutions for +customer transactions through several `physical terminals +`_. + +.. important:: + - The Odoo Pine Labs module is only available for Indian companies. + - Pine Labs terminals accept credit/debit cards (Visa, MasterCard, and RuPay) and UPI QR codes + by swiping, scanning, or tapping. + +.. _pos/pine-labs/credentials: + +Pine Labs credentials +===================== + +`Create a Pine Labs account and order at least one terminal +`_. The system then sends an email with the +following credentials: + +- Merchant ID +- Store ID +- Client ID +- Security Token + +.. _pos/pine-labs/odoo-configuration: + +Odoo configuration +================== + +To enable Pine Labs in Odoo, first :ref:`install the POS Pine Labs module ` to +make it visible in the list of payment terminals. Then, follow these steps to connect the Pine Labs +terminal with Odoo Point of Sale: + +#. Go to :menuselection:`Point of Sale --> Configuration --> Settings`, scroll down to the + :guilabel:`Payment Terminals` section, enable the relevant :ref:`payment terminal + `, and click :guilabel:`Save`. +#. Go to :menuselection:`Point of Sale --> Configuration --> Payment Methods` and :doc:`create a + payment method <../../payment_methods>`. +#. Set the :guilabel:`Journal` field to :guilabel:`Bank`. +#. Set the :guilabel:`Integration` field to :guilabel:`Terminal`. +#. Set the :guilabel:`Integrate with` field to :guilabel:`Pine Labs`. +#. Paste the copied :ref:`credentials ` in their corresponding fields. +#. Select the preferred payment mode in the :guilabel:`Pine Labs Allowed Payment Modes` field and + save. +#. Go to :menuselection:`Point of Sale --> Configuration --> Settings` and add the created payment + method to the :guilabel:`Payment Methods` list to use it in a POS. +#. Click :guilabel:`Save`. + +.. tip:: + Enable the :guilabel:`Pine Labs Test Mode` to test transaction processes with a device. diff --git a/content/applications/sales/point_of_sale/pricing/fiscal_position.rst b/content/applications/sales/point_of_sale/pricing/fiscal_position.rst index 759847adff..481518d7f3 100644 --- a/content/applications/sales/point_of_sale/pricing/fiscal_position.rst +++ b/content/applications/sales/point_of_sale/pricing/fiscal_position.rst @@ -27,7 +27,7 @@ Then, set a default fiscal position that should be applied to all sales in the s According to the :doc:`fiscal localization package <../../../finance/fiscal_localizations>` activated, several fiscal positions are preconfigured and can be set and used in POS. However, you -can also :ref:`create new fiscal positions `. +can also :ref:`create new fiscal positions `. .. note:: If you do not set a fiscal position, the tax remains as defined in the **customer taxes** field diff --git a/content/applications/sales/subscriptions.rst b/content/applications/sales/subscriptions.rst index ca0b6c8e9f..07aa991bbb 100644 --- a/content/applications/sales/subscriptions.rst +++ b/content/applications/sales/subscriptions.rst @@ -80,9 +80,9 @@ After giving the recurring plan a suitable :guilabel:`Name` (e.g. `Monthly`, `Bi `Quarterly`, etc.), proceed to the form's :guilabel:`DETAILS` section to fill out the following configuration fields: -- :guilabel:`Billing Period`: determines the recurrence period of the recurring plan. Set the - numerical value in the text field and contextualize the quantity with a unit of time in the - corresponding drop-down menu, in :guilabel:`Weeks`, :guilabel:`Months`, or :guilabel:`Years`. +- :guilabel:`Billing Period`: determines the frequency with which the subscription is billed. Set + the unit of time (:guilabel:`Weeks`, :guilabel:`Months`, or :guilabel:`Years`) in the drop-down + menu and the numerical value in the corresponding text field. - :guilabel:`Automatic Closing`: a numerical value, in days, where the subscription is set to close automatically if payment is not made. @@ -91,8 +91,19 @@ configuration fields: Closing` value is set to `15` :guilabel:`Days`, then the subscription will close on the 16th of that month if payment is not received. -- :guilabel:`Align to Period Start`: optionally force new and recurring subscription renewal dates - under this plan to the first day of what is defined in the :guilabel:`Billing Period`. +- :guilabel:`Align to Period Start`: sets new and recurring subscription plans to bill on the first + day of the next :guilabel:`Billing Period`. When a subscription plan is purchased in the middle of + a billing period, the invoice shows a reduced cost. Setting a custom period start dates (such as + the 5th of each month) requires custom development and is not available by default. + + .. example:: + On the 15th of July, a customer purchases a monthly subscription for a streaming service. + Selecting :guilabel:`Align to Period Start` for this recurring plan configures this + subscription to bill on the 1st of each month. The subscription begins as soon as payment is + confirmed. The quotation shows the full cost of the subscription for July 1 - 31, but the + invoice shows an adjusted cost for July 15 - 31. On the 1st of August, the customer is charged + the full price for the month's subscription. + - :guilabel:`Company`: optional assignment, if the database has :doc:`Multi-company <../general/companies/multi_company>` functionality enabled. Assigning this value will make the recurring plan available for that company's location, specifically. diff --git a/content/applications/services/project/project_management/project_dashboard.rst b/content/applications/services/project/project_management/project_dashboard.rst index ab4c5e3034..1c8edc9fae 100644 --- a/content/applications/services/project/project_management/project_dashboard.rst +++ b/content/applications/services/project/project_management/project_dashboard.rst @@ -68,9 +68,14 @@ Milestones ---------- This section is only visible if :doc:`milestones ` -have been enabled in the Project’s app settings. Click :guilabel:`Add Milestone` to create a new -milestone. Click a milestone in the checklist to edit it, enable its checkbox to mark it as -completed, or click the :icon:`fa-trash` (:guilabel:`trash`) icon to remove it. +have been enabled in the project you're browsing: go to :guilabel:`Project`, click the +:icon:`fa-ellipsis-v` (:guilabel:`vertical ellipsis`) icon on one of your projects, and click on +:guilabel:`Settings`. Click on the :guilabel:`Settings` tab, look for :guilabel:`Tasks Management` +and make sure :guilabel:`Milestones` is enabled. + +In a project's Dashboard, click :guilabel:`Add Milestone` to create a new milestone. Click a +milestone in the checklist to edit it, enable its checkbox to mark it as completed, or click the +:icon:`fa-trash` (:guilabel:`trash`) icon to remove it. The milestones are displayed in red if they’re past their deadline, or in green if they are ready to be marked as reached (i.e. tasks linked to the milestone that have been marked with :guilabel:`done` diff --git a/content/applications/services/project/tasks/recurring_tasks.rst b/content/applications/services/project/tasks/recurring_tasks.rst index ba02433e99..100d8678dc 100644 --- a/content/applications/services/project/tasks/recurring_tasks.rst +++ b/content/applications/services/project/tasks/recurring_tasks.rst @@ -12,8 +12,10 @@ creation of those tasks. Configuration ============= -To enable recurring tasks, go to :menuselection:`Project --> Configuration --> Settings`, then -activate :guilabel:`Recurring Tasks`, and press :guilabel:`Save`. +To use task dependencies in a project, go to :guilabel:`Project`, click the :icon:`fa-ellipsis-v` +(:guilabel:`vertical ellipsis`) icon on one of your projects, and click on :guilabel:`Settings`. +Click on the :guilabel:`Settings` tab, look for :guilabel:`Tasks Management` and make sure +:guilabel:`Recurring Tasks` is enabled. Set up task recurrence ---------------------- diff --git a/content/applications/services/project/tasks/task_dependencies.rst b/content/applications/services/project/tasks/task_dependencies.rst index 00b87589bb..46d0c33100 100644 --- a/content/applications/services/project/tasks/task_dependencies.rst +++ b/content/applications/services/project/tasks/task_dependencies.rst @@ -6,8 +6,10 @@ Odoo Project allows you to break down projects into tasks and establish relation tasks to determine the order in which they are executed. Task dependencies ensure that certain tasks begin only after the preceding tasks are completed. -To enable task dependencies in projects, go to :menuselection:`Project --> Configuration --> -Settings`, enable :guilabel:`Task Dependencies`, and click :guilabel:`Save`. +To use task dependencies in a project, go to :guilabel:`Project`, click the :icon:`fa-ellipsis-v` +(:guilabel:`vertical ellipsis`) icon on one of your projects, and click on :guilabel:`Settings`. +Click on the :guilabel:`Settings`. Click on the :guilabel:`Settings` tab, look for :guilabel:`Tasks +Management` and make sure :guilabel:`Task Dependencies` is enabled. Set task dependencies ===================== diff --git a/content/applications/studio.rst b/content/applications/studio.rst index e6248779d0..66621659f5 100644 --- a/content/applications/studio.rst +++ b/content/applications/studio.rst @@ -15,8 +15,8 @@ Studio studio/pdf_reports studio/approval_rules -**Studio** is a toolbox used to customize Odoo without coding knowledge. For example, in any app, -add or modify: +**Odoo Studio** is a toolbox used to customize Odoo without coding knowledge. For example, in any +app, add or modify: - :doc:`Fields ` - :doc:`Views ` @@ -31,10 +31,22 @@ Learn how to :doc:`build an app from scratch `. .. _studio/access: -To access Studio, navigate to the app and model you want to modify, then click the :icon:`oi-studio` -(:guilabel:`Toggle Studio`) icon, or vice versa. +To access **Studio**, navigate to the app and model you want to modify, then click the +:icon:`oi-studio` (:guilabel:`Toggle Studio`) icon. Alternatively, with any app open, click the +:icon:`oi-studio` (:guilabel:`Toggle Studio`) icon and navigate to the relevant app and model. To close **Studio**, click :guilabel:`Close` in the upper-right corner. +.. warning:: + Installing **Studio** in an Odoo database on the *Standard* pricing plan automatically triggers + an upsell to the *Custom* pricing plan. + + - **For yearly or multi-year contracts**: An upsell order is created with a 30-day limit. + - **For monthly contracts**: The subscription automatically switches to the *Custom* plan and + the new rate is applied when the next bill is generated. + + For more information, refer to `Odoo's pricing page `_ or + contact your account manager. + .. seealso:: `Odoo Tutorials: Studio `_ diff --git a/content/applications/studio/automated_actions.rst b/content/applications/studio/automated_actions.rst index 196713b861..db3505ebdf 100644 --- a/content/applications/studio/automated_actions.rst +++ b/content/applications/studio/automated_actions.rst @@ -4,34 +4,50 @@ Automation rules ================ -Automation rules are used to trigger automatic changes based on user actions (e.g., apply a -modification when a field is set to a specific value), email events, time conditions (e.g., archive -a record 7 days after its last update), or external events. +Automation rules allow the execution of one or more predefined actions in response to a specific +trigger, e.g., create an activity when a field is set to a specific value, or archive a record 7 +days after its last update. -To create an automation rule with Studio, proceed as follows: +When creating an automation rule, it is possible to :ref:`add conditions that must be met +` for the automation rule to run, e.g., the opportunity must be +assigned to a specific salesperson, or the state of the record must not be :guilabel:`Draft`. + +To create an automation rule with **Odoo Studio**: #. :ref:`Open Studio ` and click :guilabel:`Automations`, then :guilabel:`New`. -#. Select the :ref:`studio/automated-actions/trigger` and, if necessary, fill in the fields that - appear on the screen based on the chosen trigger. -#. Click :guilabel:`Add an action`, then select the :guilabel:`Type` of - :ref:`action ` and fill in the fields that appear on the screen - based on your selected action. -#. Click :guilabel:`Save & Close` or :guilabel:`Save & New`. +#. Give the automation rule a clear, meaningful name that identifies its purpose. +#. Select the :ref:`Trigger ` and, if necessary, fill in the + fields that appear on the screen based on the chosen trigger. +#. Click :guilabel:`Add an action` in the :guilabel:`Actions To Do` tab. + + .. tip:: + If no explicit name is entered, the name of the action will be automatically generated based + on the action you define; the name can be updated at any time. + +#. Select the :guilabel:`Type` of :ref:`action ` and complete the + relevant fields based on the chosen action. +#. Click :guilabel:`Save & Close` or, to define additional actions, :guilabel:`Save & New`. .. example:: - .. image:: automated_actions/automation-rule-ex.png - :alt: Example of an automated action on the Subscription model + To ensure follow-up on less satisfied clients, this automation rule creates an activity 3 months + after a sales order is created for clients with a satisfaction percentage lower than 30%. + + .. image:: automated_actions/trigger-timing-conditions.png + :alt: Example of an automation rule on the Subscription model + :scale: 90% .. tip:: - - To modify the :doc:`model ` of the automation rule, switch models before - clicking :guilabel:`Automations` in Studio, or :ref:`activate the developer mode + - Use the :guilabel:`Notes` tab to document the purpose and functioning of automation rules. This + makes rules easier to maintain and facilitates collaboration between users. + - To modify the :doc:`model ` targeted by the automation rule, switch models + before clicking :guilabel:`Automations` in Studio, or :ref:`activate developer mode `, create or edit an automation rule, and select the :guilabel:`Model` in the :guilabel:`Automation Rules` form. - - You can also create automation rules from any kanban stage by clicking the gear icon - (:guilabel:`⚙` ) next to the kanban stage name, then selecting :guilabel:`Automations`. In this - case, the :guilabel:`Trigger` is set to :guilabel:`Stage is set to` by default, but you can - change it if necessary. + - Automation rules can be created from any kanban stage by clicking the :icon:`fa-cog` + :guilabel:`(Settings)` icon that appears when hovering over the kanban stage name, then + selecting :guilabel:`Automations`. In this case, the :guilabel:`Trigger` is set to + :guilabel:`Stage is set to` by default, but it can be changed if necessary. .. image:: automated_actions/automations-kanban.png :alt: Create automations from a kanban stage @@ -41,102 +57,146 @@ To create an automation rule with Studio, proceed as follows: Trigger ======= -The :guilabel:`Trigger` is used to define when the automation rule should be applied. The available -triggers depend on the :doc:`model `. Five trigger categories are available -overall: +The :guilabel:`Trigger` is used to define what kind of event needs to occur for the automation rule +to run. The available triggers depend on the :doc:`model `. Five trigger +categories are available overall: + +- :ref:`studio/automated-actions/trigger-values-updated` +- :ref:`studio/automated-actions/trigger-email-events` +- :ref:`studio/automated-actions/trigger-timing-conditions` +- :ref:`studio/automated-actions/trigger-custom` +- :ref:`studio/automated-actions/trigger-external` + +.. _studio/automated-actions/conditions: -- :ref:`studio/automated-actions/trigger/values-updated` -- :ref:`studio/automated-actions/trigger/email-events` -- :ref:`studio/automated-actions/trigger/values-timing-conditions` -- :ref:`studio/automated-actions/trigger/custom` -- :ref:`studio/automated-actions/trigger/external` +Adding conditions +----------------- + +Domain filters allow you to determine the records an automation rule should target or exclude. +Efficient filtering enhances overall performance as it avoids unnecessary processing on records that +are not impacted by the rule. .. tip:: - You can also define a :guilabel:`Before Update Domain` to specify the conditions that must be met - *before* the automation rule is triggered. In contrast, the conditions defined using the - :ref:`Extra Conditions ` and - :ref:`Apply on ` filters are checked *during* the - execution of the automation rule. + :ref:`Activate developer mode ` before creating an automation rule to have the + most flexibility in adding domain filters. + +Depending on the trigger chosen, it is possible to define one or more conditions a record must meet +*before* and/or *after* a trigger occurs. + +- The :guilabel:`Before Update Domain` defines the conditions a record must meet *before* the + trigger event occurs, e.g., the record must have `Type = Customer Invoice` and `Status = Posted`. + + With developer mode activated, click :guilabel:`Edit Domain`, if available, then + :guilabel:`New Rule`. + +- The :guilabel:`Apply on` domain defines the conditions a record must meet *after* the trigger + event occurs, e.g., the customer invoice must have `Payment Status = Partially Paid`. - To define a :guilabel:`Before Update Domain`, :ref:`activate the developer mode - `, create or edit an automation rule, click :guilabel:`Edit Domain`, then click - :guilabel:`New Rule`. + With developer mode activated, click :guilabel:`Edit Domain` then :guilabel:`New Rule`. - For example, if you want the automated action to happen when an email address is set on a - contact that did not have an address before (in contrast to modifying their existing address), - define the :guilabel:`Before Update Domain` to :guilabel:`Email is not set`, and the - :guilabel:`Apply on` domain to :guilabel:`Email is set`. + .. tip:: + If developer mode is not activated, to define an :guilabel:`Apply on` domain, click + :icon:`fa-plus` :guilabel:`Add condition`. Complete or delete the suggested condition. To add a + condition, click :guilabel:`New Rule`. + +When a :ref:`trigger ` occurs, e.g., the payment status of a +posted customer invoice is updated, the automation rule checks the defined conditions and only +executes the :ref:`action ` if the record matches those conditions. + +.. example:: + If the automated action should be executed when an email address is set for the first time (in + contrast to modifying an email address) on an existing contact that is an individual rather than + a company, use `Email is not set` and `Is a Company is not set` as the :guilabel:`Before Update + Domain` and `Email is set` as the :guilabel:`Apply on` domain. .. image:: automated_actions/before-update-domain.png :alt: Example of a trigger with a Before Update Domain + :scale: 80% -.. _studio/automated-actions/trigger/values-updated: +.. note:: + The :guilabel:`Before Update Domain` is not checked upon the creation of a record. + +.. _studio/automated-actions/trigger-values-updated: Values Updated -------------- -The triggers available in this category depend on the model and are based on common field changes, -such as adding a specific tag (e.g., to a task) or setting the :guilabel:`User` field. Select the -trigger, then select a value if required. +Trigger automated actions when specific changes happen in the database. The triggers available in +this category depend on the model and are based on common changes, such as adding a specific tag +(e.g., to a task) or setting a field's value (e.g., setting the :guilabel:`User` field). -.. image:: automated_actions/values-updated-trigger.png - :alt: Example of a Values Updated trigger +Select the trigger, then select a value if required. -.. _studio/automated-actions/trigger/email-events: +.. _studio/automated-actions/trigger-email-events: Email Events ------------ Trigger automated actions upon receiving or sending emails. -.. _studio/automated-actions/trigger/values-timing-conditions: +.. _studio/automated-actions/trigger-timing-conditions: Timing Conditions ----------------- -Trigger automated actions based on a date field. The following triggers are available: +Trigger automated actions at a point in time relative to a date field or to the creation or update +of a record. The following triggers are available: -- :guilabel:`Based on date field`: Select the field to be used next to the :guilabel:`Delay` field. -- :guilabel:`After creation`: The action is triggered when a record is created and saved. -- :guilabel:`After last update`: The action is triggered when an existing record is edited and - saved. +- :guilabel:`Based on date field`: The action is triggered a defined period of time before or after + the date of the selected date field. +- :guilabel:`After creation`: The action is triggered a defined period of time after a record is + created and saved. +- :guilabel:`After last update`: The action is triggered a defined period of time after an existing + record is edited and saved. You can then define: -- a :guilabel:`Delay`: Specify the number of minutes, hours, days, or months. To trigger the action - before the trigger date, specify a negative number. If you selected the :guilabel:`Based on date - field` trigger, you must also select the date field to be used to determine the delay. -- :guilabel:`Extra Conditions`: Click :guilabel:`Add condition`, then specify the conditions to be - met to trigger the automation rule. Click :guilabel:`New Rule` to add another condition. +- a :guilabel:`Delay`: Specify the number of :guilabel:`Minutes`, :guilabel:`Hours`, + :guilabel:`Days`, or :guilabel:`Months` after which the action should be triggered. If you + selected the :guilabel:`Based on date field` trigger, the action can be triggered + :guilabel:`After` or :guilabel:`Before` the selected date field. -The action is triggered when the delay is reached and the conditions are met. + .. note:: + By default, the scheduler checks for time-triggered automation rules every 240 minutes, or 4 + hours. This frequency is generally sufficient for delays such as 3 months after the order date + or 7 days after the last update. -.. example:: - If you want to send a reminder email 30 minutes before the start of a calendar event, select the - :guilabel:`Start (Calendar Event)` under :guilabel:`Trigger Date` and set the :guilabel:`Delay` - to **-30** :guilabel:`Minutes`. + For delays of less than the equivalent of 2400 minutes, or 40 hours, the system recalculates + the frequency of this check to ensure that more granular delays, e.g., 1 hour before the event + start date and time, or 30 minutes after creation, can be respected as closely as possible. - .. image:: automated_actions/timing-conditions-trigger.png - :alt: Example of a Based on date field trigger + To view or manually edit the frequency of the scheduler for a time-triggered automation rule, + with :ref:`developer mode activated `, click :guilabel:`Scheduled action`. -.. note:: - By default, the scheduler checks for trigger dates every 4 hours, meaning lower granularity in - time-based automations may not always be honored. + .. image:: automated_actions/trigger-delay-scheduled-action.png + :alt: Direct link to scheduled action for automations + + In the :guilabel:`Automation Rules: check and execute` scheduled action that opens, update the + value of the :guilabel:`Execute Every` field, if desired. Clicking :guilabel:`Run Manually` + triggers the scheduled action to run immediately. To return to the automation rule setup, click + the automation rule name in the breadcrumbs. + +- :guilabel:`Extra Conditions`: Click :guilabel:`Add condition`, then specify the conditions to be + met for the automation rule to run. Click :guilabel:`New Rule` to add another condition. + +The action is executed when the delay is reached and the conditions are met. -.. _studio/automated-actions/trigger/custom: +.. _studio/automated-actions/trigger-custom: Custom ------ Trigger automated actions: -- :guilabel:`On save`: When the record is saved; -- :guilabel:`On deletion`: When a record is deleted; -- :guilabel:`On UI change`: When a field's value is changed on the :ref:`Form view - `, even before saving the record. +- :guilabel:`On create`: when a record is saved for the first time. +- :guilabel:`On create and edit`: when a record is saved for the first time and any subsequent time. +- :guilabel:`On deletion`: when a record is deleted. +- :guilabel:`On UI change`: when a field's value is changed on the :ref:`Form view + `, even before the record is saved. -For the :guilabel:`On save` and :guilabel:`On UI change` triggers, you **must** then select the -field(s) to be used to trigger the automation rule in the :guilabel:`When updating` field. +For the :guilabel:`On create and edit` and :guilabel:`On UI change` triggers, you **must** then +select the field(s) to be used to trigger the automation rule in the :guilabel:`When updating` +field. .. warning:: If no field is selected in the :guilabel:`When updating` field, the automated action may be @@ -146,137 +206,267 @@ Optionally, you can also define additional conditions to be met to trigger the a the :guilabel:`Apply on` field. .. note:: - The :guilabel:`On UI change` trigger can only be used with the - :ref:`studio/automated-actions/action/python-code` action and only works when a modification is - made manually. The action is not executed if the field is changed through another automation - rule. + The :guilabel:`On UI change` trigger can only be used with the :ref:`Execute Code + ` action and only works when a modification is made + manually. The action is not executed if the field is changed through another automation rule. -.. _studio/automated-actions/trigger/external: +.. _studio/automated-actions/trigger-external: External -------- -Trigger automated actions based on an external event using a webhook. A webhook is a method of -communication between two systems where the source system sends an HTTP(S) request to a destination -system based on a specific event. It usually includes a data payload containing information about -the event that occurred. +Trigger automated actions based on a specific event in an external system or application using a +:doc:`webhook `. -To configure the :guilabel:`On webhook` trigger, copy the :guilabel:`URL` generated by Odoo into the -destination system (i.e., the system receiving the request). Then, in the :guilabel:`Target Record` -field, enter the code to run to define the record(s) to be updated using the automation rule. +After the webhook is configured in Odoo, where the webhook's URL is generated and the target record +defined, it needs to be implemented in the external system. .. warning:: - The URL must be treated as **confidential**; sharing it online or without caution could - potentially expose your system to malicious parties. Click the :guilabel:`Rotate Secret` button - to change the URL's secret if necessary. + It is *highly recommended* to consult with a developer, solution architect, or another technical + role when deciding to use webhooks and throughout the implementation process. If not properly + configured, webhooks may disrupt the Odoo database and can take time to revert. + +.. image:: automated_actions/webhook-update-record.png + :alt: Example of a Based on date field trigger + :scale: 80% .. note:: - - The code defined by default in the :guilabel:`Target Record` field works for webhooks coming - from another Odoo database. It is used to determine the record(s) to be updated using the - information in the payload. - - If you wish to use the webhook's content for a purpose other than to find the record(s) (e.g., - *create* a record), your only option is to use an :ref:`studio/automated-actions/action/python-code` - action. In this case, the :guilabel:`Target record` field must contain any valid code, but its - result doesn't have any effect on the automated action itself. - - The webhook content is available in the server action context as a `payload` variable (i.e., a - dictionary that contains the GET parameters or POST JSON body of the incoming request). - -You can also choose to :guilabel:`Log Calls` to record the payloads received, e.g., to make sure the -data sent by the source system matches the expected format and content. This also helps identify -and diagnose any issues that may arise. To access the logs, click the :guilabel:`Logs` smart -button at the top of the :guilabel:`Automation rules` form. + It is also possible to set up an automated action that :ref:`sends data to a external system's + webhook ` when an event occurs in your Odoo database. .. seealso:: - :doc:`automated_actions/webhooks` + :doc:`Webhook documentation ` .. _studio/automated-actions/action: Actions ======= -Once you have defined the automation rule's :ref:`trigger `, click -:guilabel:`Add an action` to define the action to be executed. +Once you have defined the automation rule's :ref:`trigger `, +click :guilabel:`Add an action` in the :guilabel:`Actions To Do` tab to define the action(s) to be +executed. .. tip:: - You can define multiple actions for the same trigger/automation rule. The actions are executed - in the order they are defined. This means, for example, that if you define an - :guilabel:`Update record` action and then a :guilabel:`Send email` action, the email uses the - updated values. However, if the :guilabel:`Send email` action is defined before the - :guilabel:`Update record` action, the email uses the values set *before* the update action is - run. + You can define multiple actions for the same automation rule. By default, actions are executed in + the order in which they were defined. + + This means, for example, that if you define an :guilabel:`Update record` action and then a + :guilabel:`Send email` action where the email references the field that was updated, the email + uses the updated values. However, if the :guilabel:`Send email` action is defined before the + :guilabel:`Update record` action, the email uses the values set *before* the record is updated. + + To change the order of defined actions, click the :icon:`oi-draggable` :guilabel:`(drag handle)` + icon beside an action and drag it to the desired position. -.. _studio/automated-actions/action/update-record: +.. _studio/automated-actions/action-update-record: Update Record ------------- -This action allows to update one of the record's (related) fields. Click the :guilabel:`Update` -field and, in the list that opens, select or search for the field to be updated; click the right -arrow next to the field name to access the list of related fields if needed. +This action is used to update one of the record's (related) fields. The following options are +available: + +- :guilabel:`Update`: updates the selected field with the specified value. +- :guilabel:`Update with AI`: updates the selected field dynamically based on the AI prompt + provided. This option requires the **Odoo AI** app to be installed. +- :guilabel:`Sequence`: update the selected field with a defined sequence. +- :guilabel:`Compute`: updates the selected field dynamically using Python code. + +To define the action: + +#. With the :guilabel:`Update`, :guilabel:`Update with AI`, :guilabel:`Sequence` or + :guilabel:`Compute` option selected, as relevant, select or search for the field to be updated or + computed. If needed, click the :icon:`oi-chevron-right` :guilabel:`(right arrow)` next to the + field name to access the list of related fields. +#. Provide the relevant information based on the option selected. -If you selected a :ref:`many2many field `, choose whether -the field must be updated by :guilabel:`Adding`, :guilabel:`Removing`, or :guilabel:`Setting it to` -the selected value or by :guilabel:`Clearing it`. +Update +~~~~~~ + +Select or enter the updated value for the field. + +If a :ref:`many2many field ` is being updated, choose +whether the field must be updated by :guilabel:`Adding`, :guilabel:`Removing`, or :guilabel:`Setting +it to` the selected value or by :guilabel:`Clearing it`. .. example:: If you want the automated action to remove a tag from the customer record, set the - :guilabel:`Update` field to :guilabel:`Customer > Tags`, select :guilabel:`By Removing`, then - select the tag. + :guilabel:`Update` field to :guilabel:`Customer > Tags`, select :guilabel:`by Removing`, then + select the tag to be removed. - .. image:: automated_actions/update-record-action.png + .. image:: automated_actions/update-record-tags.png :alt: Example of an Update Record action + :scale: 80% -.. tip:: - Alternatively, you can also set a record's field dynamically using Python code. To do so, select - :guilabel:`Compute` instead of :guilabel:`Update`, then enter the code to be used for computing - the field's value. For example, if you want the automation rule to compute a custom - :ref:`datetime field ` when a task's priority is set to - `High` (by starring the task), you can define the trigger :guilabel:`Priority is set to` to - `High` and define the :guilabel:`Update Record` action as follows: +Update with AI +~~~~~~~~~~~~~~ + +Enter a prompt to instruct Odoo AI how to update the field. Type `/` to open the :guilabel:`AI +prompt tools`; use :guilabel:`Field Selector` to tell Odoo AI which related fields to check for +context, and :guilabel:`Records Selector` to provide possible values for the updated field. + +.. example:: + If you want the automation rule to update the :guilabel:`Assignees` field of a newly created + task based on the employees' expertise, you can write a prompt to instruct Odoo AI to check + the :guilabel:`Display Name` field of the task for the context, then to assign the most suitable + employee. + + .. image:: automated_actions/update-record-ai.png + :alt: Example of updating a record using AI + :scale: 80% + +Sequence +~~~~~~~~ + +Select an existing sequence or, to create a new sequence: + +#. Click :guilabel:`Search more`, then click :guilabel:`New`. +#. In the window that opens, enter the :guilabel:`Name` of the sequence. +#. Configure the sequence, adding a :guilabel:`Prefix` and/or :guilabel:`Suffix` as desired. + + .. tip:: + Use dynamic placeholders like :guilabel:`Current Year with Century: %(year)s` in the + :guilabel:`Prefix` and/or :guilabel:`Suffix` to create sequences with elements like current + year, month, etc. Possible placeholders are shows at the bottom of the window. + +#. Click :guilabel:`Save`. + +.. example:: + If you want the automated action to create a sequential customer reference each time a new + customer is created, set the :guilabel:`Sequence` field to :guilabel:`Reference`, then, in the + dropdown, click :guilabel:`Search more`. Click :guilabel:`New` to create a new sequence. + + In the example, each new customer receives a sequential reference with the prefix ` + + .. image:: automated_actions/update-record-sequence.png + :alt: Example of an Update Record action using a sequence + :scale: 80% + +Compute +~~~~~~~ + +Enter the code to be used for computing the field's value. + +.. example:: + If you want the automation rule to compute a custom :ref:`datetime field + `, :guilabel:`Escalated on`, when a task's priority is set + to `Very high` (three stars), you can define the trigger :guilabel:`Priority is set to` to `Very + High` and define the :guilabel:`Update Record` action as follows: .. image:: automated_actions/update-record-compute.png :alt: Compute a custom datetime field using a Python expression + :scale: 80% + +.. _studio/automated-actions/action-create-record: + +Create Record and Duplicate Record +---------------------------------- + +These actions are used to create a new or duplicated record on any model. + +To define the action: + +#. With :guilabel:`Create Record` or :guilabel:`Duplicate Record` selected as the :guilabel:`Type` + of action, as relevant, select the required model in the :guilabel:`Record to Create` field; the + field contains the current model by default. +#. Specify a :guilabel:`Name` for the record, or, if the action duplicates a record, indicate the + record being duplicated in the :guilabel:`Duplicate from` field. +#. If the new or duplicated record is being created on another model, select a field in the + :guilabel:`Link Field` field to link the record that triggered the creation of the new or + duplicated record. + +.. tip:: + The :guilabel:`Link Field` dropdown menu only contains :ref:`one2many fields + ` existing on the current model that are linked to a + :ref:`many2one field ` on the target model. + +.. example:: + If you want the automation rule to duplicate a project, e.g. a project template with predefined + tasks, when an opportunity is set to `Won`, add a custom `Related opportunity` :ref:`many2one + field ` field on the *Project* model and a custom + `Related project` :ref:`one2many field ` field on the + *Lead* model, then provide the following details about the record being duplicated: + + .. image:: automated_actions/duplicate-record.png + :alt: Duplicate a record in a different model + :scale: 80% + +.. tip:: + You can create another automation rule with :ref:`studio/automated-actions/action-update-record` + actions to update the fields of the new or duplicated record if necessary. For example, you can + use a :guilabel:`Create Record` action to create a new project task and then assign it to a + specific user using an :guilabel:`Update Record` action. + +.. _studio/automated-actions/action-create-activity: Create Activity --------------- -This action is used to schedule a new activity linked to the record. Select an :guilabel:`Activity -Type`, enter a :guilabel:`Title` and description, then specify when you want the activity to be -scheduled in the :guilabel:`Due Date In` field, and select a :guilabel:`User type`: +This action is used to schedule a new activity linked to the record. -- To always assign the activity to the same user, select :guilabel:`Specific User` and add the user - in the :guilabel:`Responsible` field; -- To target a user linked to the record dynamically, select :guilabel:`Dynamic User (based on - record)` and change the :guilabel:`User Field` if necessary. +To define the action: + +#. With :guilabel:`Create Activity` selected as the :guilabel:`Type` of action, select the + appropriate :guilabel:`Activity Type` from the dropdown menu. +#. Enter a :guilabel:`Title`. +#. Indicate by when the activity should be completed by specifying a number of :guilabel:`Days`, + :guilabel:`Weeks`, or :guilabel:`Months` in the :guilabel:`Due Date In` field. +#. Select a :guilabel:`User type`: + + - To always assign the activity to the same user, select :guilabel:`Specific User`, then add the + user in the :guilabel:`Responsible` field. + - To target a user linked to the record dynamically, select :guilabel:`Dynamic User (based on + record)`. If needed, change the :guilabel:`User Field` by clicking on the placeholder field + name then selecting or searching for the user field in the list that appears. Clicking the + :icon:`oi-chevron-right` :guilabel:`(right arrow)` next to the field name allows you to access + related fields if needed. +#. Optionally, add a :guilabel:`Note` to provide more information about the activity. .. example:: - After a lead is turned into an opportunity, you want the automated action to set up a call for - the user responsible for the lead. To do so, set the :guilabel:`Activity Type` to - :guilabel:`Call` and the :guilabel:`User Type` to :guilabel:`Dynamic User (based on record)`. + After a proposition is sent to a opportunity with a high expected revenue, you want to create an + activity for the salesperson's team leader to call the potential client to increase the chances + of closing the deal. + + To do so, set the :guilabel:`Activity Type` to :guilabel:`Call` and the :guilabel:`User Type` to + :guilabel:`Dynamic User (based on record)`. Click on the placeholder field and select + :guilabel:`Sales Team`, then click the :icon:`oi-chevron-right` :guilabel:`(right arrow)` and + select :guilabel:`Team Leader`. .. image:: automated_actions/create-activity-action.png :alt: Example of a Create Activity action + :scale: 80% + +.. _studio/automated-actions/action-send-email-sms: Send Email and Send SMS ----------------------- These actions are used to send an email or a text message to a contact linked to a specific record. -To do so, select or create an :guilabel:`Email Template` or an :guilabel:`SMS Template`, then, in -the :guilabel:`Send Email As` or :guilabel:`Send SMS As` field, choose how you want to send the -email or text message: - -- :guilabel:`Email`: to send the message as an email to the recipients of the :guilabel:`Email - Template`. -- :guilabel:`Message`: to post the message on the record and notify the record's followers. -- :guilabel:`Note`: to send the message as an internal note visible to internal users in the - chatter. -- :guilabel:`SMS (without note)`: to send the message as a text message to the recipients of the - :guilabel:`SMS template`. -- :guilabel:`SMS (with note)`: to send the message as a text message to the recipients of the - :guilabel:`SMS template` and post it as an internal note in the chatter. -- :guilabel:`Note only`: to only post the message as an internal note in the chatter. - -.. _studio/automated-actions/action/send-whatsapp: + +To define the action: + +#. With :guilabel:`Send Email` or :guilabel:`Send SMS` selected as the :guilabel:`Type` of action, + as relevant, select or create an :guilabel:`Email Template` or :guilabel:`SMS Template`. +#. In the :guilabel:`Send Email As` or :guilabel:`Send SMS As` field, choose how you want to send the + email or text message. + + For an email, select: + + - :guilabel:`Email`: to send the message as an email to the recipients of the :guilabel:`Email + Template`. + - :guilabel:`Message`: to post the message on the record and notify the record's followers. + - :guilabel:`Note`: to send the message as an internal note visible to internal users in the + chatter. + + For a text message, select: + + - :guilabel:`SMS (without note)`: to send the message as a text message to the recipients of the + :guilabel:`SMS template`. + - :guilabel:`SMS (with note)`: to send the message as a text message to the recipients of the + :guilabel:`SMS template` and post it as an internal note in the chatter. + - :guilabel:`Note only`: to only post the message as an internal note in the chatter. + +.. _studio/automated-actions/action-send-whatsapp: Send WhatsApp ------------- @@ -286,41 +476,48 @@ Send WhatsApp :ref:`WhatsApp templates ` must be created. This action is used to send a WhatsApp message to a contact linked to a specific record. -To do so, select the appropriate :guilabel:`WhatsApp Template` from the drop-down menu. -.. _studio/automated-actions/action/add-followers: +With :guilabel:`Send WhatsApp` selected as the :guilabel:`Type` of action, select the appropriate +:guilabel:`WhatsApp Template` from the dropdown menu. + +.. _studio/automated-actions/action-add-remove-followers: Add Followers and Remove Followers ---------------------------------- -Use these actions to (un)subscribe existing contacts to/from the record. +This action is used to subscribe/unsubscribe existing contacts as followers of the record. -Create Record -------------- +With :guilabel:`Add Followers` or :guilabel:`Remove Followers` selected as the :guilabel:`Type` of +action, as relevant, select a :guilabel:`Followers Type`: -This action is used to create a new record on any model. +- To always add/remove the same contact(s), select :guilabel:`Specific Followers` then select the + contact(s) from the dropdown menu. Multiple contacts can be added/removed. -Select the required model in the :guilabel:`Record to Create` field; it contains the current model -by default. Specify a :guilabel:`Name` for the record, and then, if you want to create the record on -another model, select a field in the :guilabel:`Link Field` field to link the record that -triggered the creation of the new record. +- To add/remove a contact linked to the record dynamically, select :guilabel:`Dynamic Followers`. If + needed, change the :guilabel:`Followers Field` by clicking on the placeholder field name then + selecting or searching for the partner field in the list that appears. Clicking the + :icon:`oi-chevron-right` :guilabel:`(right arrow)` next to the field name allows you to access + related fields if needed. -.. note:: - The dropdown list related to the :guilabel:`Link Field` field only contains :ref:`one2many fields - ` existing on the current model that are linked to a - :ref:`many2one field ` on the target model. +.. example:: + To keep customers informed of progress on a project, this automated action adds the relevant + customer as a follower when a project task is set to `In progress`. -.. tip:: - You can create another automation rule with :ref:`studio/automated-actions/action/update-record` - actions to update the fields of the new record if necessary. For example, you can use a - :guilabel:`Create Record` action to create a new project task and then assign it to a specific - user using an :guilabel:`Update Record` action. + .. image:: automated_actions/add-followers-action.png + :alt: Adding the customer as a follower when project task set to in progress + :scale: 80% -.. _studio/automated-actions/action/python-code: +.. _studio/automated-actions/action-execute-code: Execute Code ------------ +.. important:: + For automation rules that require the execution of :ref:`custom code + `, note that maintenance of custom code is not + included in the *Standard* or *Custom* pricing plans and incurs :ref:`additional fees + `. + This action is used to execute Python code. You can write your code into the :guilabel:`Code` tab using the following variables: @@ -341,25 +538,44 @@ using the following variables: .. tip:: The available variables are described both in the :guilabel:`Code` and :guilabel:`Help` tabs. +.. seealso:: + :doc:`Odoo's ORM capabilities <../../developer/reference/backend/orm>` + .. _studio/automated-actions/action-webhook: Send Webhook Notification ------------------------- -This action allows to send a POST request with the values of the :guilabel:`Fields` to the URL -specified in the :guilabel:`URL` field. +This action is used to send a `POST` API request with the values of the selected :guilabel:`Fields` +to the webhook URL specified in the :guilabel:`URL` field. The :guilabel:`Sample Payload` provides a preview of the data included in the request using a random record's data or dummy data if no record is available. -.. _studio/automated-actions/action/several-actions: +.. note:: + It is also possible to set up an automated action that :doc:`uses a webhook to receive data from + an external system ` when a predefined event occurs in that system. + +.. _studio/automated-actions/action-existing-actions: + +Multi Actions +------------- + +This action is used to trigger multiple actions (linked to the current model) at the same time. + +To define the actions: + +#. With :guilabel:`Multi Actions` selected as the :guilabel:`Type` of action, click :guilabel:`Add + an action`. +#. In the :guilabel:`Add: Child Actions` pop-up: -Execute Existing Actions ------------------------- + - select one or more existing actions and click :guilabel:`Select`; or + - click :guilabel:`New`, define the action to be executed, then click :guilabel:`Save & Close` + or, to create additional actions, :guilabel:`Save & New` . +#. Repeat as many times as needed. -The action is used to trigger multiple actions (linked to the current model) at the same time. To do -so, click on :guilabel:`Add a line`, then, in the :guilabel:`Add: Child Actions` pop-up, select an -existing action or click :guilabel:`New` to create a new one. +.. image:: automated_actions/multi-actions.png + :alt: Define multiple actions to be executed .. toctree:: :titlesonly: diff --git a/content/applications/studio/automated_actions/add-followers-action.png b/content/applications/studio/automated_actions/add-followers-action.png new file mode 100644 index 0000000000..a5e33c6013 Binary files /dev/null and b/content/applications/studio/automated_actions/add-followers-action.png differ diff --git a/content/applications/studio/automated_actions/automation-rule-ex.png b/content/applications/studio/automated_actions/automation-rule-ex.png deleted file mode 100644 index 221bb156cd..0000000000 Binary files a/content/applications/studio/automated_actions/automation-rule-ex.png and /dev/null differ diff --git a/content/applications/studio/automated_actions/before-update-domain.png b/content/applications/studio/automated_actions/before-update-domain.png index a775c61598..fad4436e2b 100644 Binary files a/content/applications/studio/automated_actions/before-update-domain.png and b/content/applications/studio/automated_actions/before-update-domain.png differ diff --git a/content/applications/studio/automated_actions/create-activity-action.png b/content/applications/studio/automated_actions/create-activity-action.png index cc6e2f42d0..90c1e4f59d 100644 Binary files a/content/applications/studio/automated_actions/create-activity-action.png and b/content/applications/studio/automated_actions/create-activity-action.png differ diff --git a/content/applications/studio/automated_actions/duplicate-record.png b/content/applications/studio/automated_actions/duplicate-record.png new file mode 100644 index 0000000000..ebe9bb320d Binary files /dev/null and b/content/applications/studio/automated_actions/duplicate-record.png differ diff --git a/content/applications/studio/automated_actions/multi-actions.png b/content/applications/studio/automated_actions/multi-actions.png new file mode 100644 index 0000000000..9172e48283 Binary files /dev/null and b/content/applications/studio/automated_actions/multi-actions.png differ diff --git a/content/applications/studio/automated_actions/on-save-on-creation.png b/content/applications/studio/automated_actions/on-save-on-creation.png new file mode 100644 index 0000000000..773650963e Binary files /dev/null and b/content/applications/studio/automated_actions/on-save-on-creation.png differ diff --git a/content/applications/studio/automated_actions/timing-conditions-trigger.png b/content/applications/studio/automated_actions/timing-conditions-trigger.png deleted file mode 100644 index 41ca2575d0..0000000000 Binary files a/content/applications/studio/automated_actions/timing-conditions-trigger.png and /dev/null differ diff --git a/content/applications/studio/automated_actions/trigger-delay-scheduled-action.png b/content/applications/studio/automated_actions/trigger-delay-scheduled-action.png new file mode 100644 index 0000000000..1866e4a96e Binary files /dev/null and b/content/applications/studio/automated_actions/trigger-delay-scheduled-action.png differ diff --git a/content/applications/studio/automated_actions/trigger-timing-conditions.png b/content/applications/studio/automated_actions/trigger-timing-conditions.png new file mode 100644 index 0000000000..eb8cb0cc22 Binary files /dev/null and b/content/applications/studio/automated_actions/trigger-timing-conditions.png differ diff --git a/content/applications/studio/automated_actions/update-record-action.png b/content/applications/studio/automated_actions/update-record-action.png deleted file mode 100644 index 1915eef219..0000000000 Binary files a/content/applications/studio/automated_actions/update-record-action.png and /dev/null differ diff --git a/content/applications/studio/automated_actions/update-record-ai.png b/content/applications/studio/automated_actions/update-record-ai.png new file mode 100644 index 0000000000..b6ef3797c1 Binary files /dev/null and b/content/applications/studio/automated_actions/update-record-ai.png differ diff --git a/content/applications/studio/automated_actions/update-record-compute.png b/content/applications/studio/automated_actions/update-record-compute.png index c0c8129128..9eb9e702e7 100644 Binary files a/content/applications/studio/automated_actions/update-record-compute.png and b/content/applications/studio/automated_actions/update-record-compute.png differ diff --git a/content/applications/studio/automated_actions/update-record-sequence.png b/content/applications/studio/automated_actions/update-record-sequence.png new file mode 100644 index 0000000000..4839ea5698 Binary files /dev/null and b/content/applications/studio/automated_actions/update-record-sequence.png differ diff --git a/content/applications/studio/automated_actions/update-record-tags.png b/content/applications/studio/automated_actions/update-record-tags.png new file mode 100644 index 0000000000..c2e6c62868 Binary files /dev/null and b/content/applications/studio/automated_actions/update-record-tags.png differ diff --git a/content/applications/studio/automated_actions/values-updated-trigger.png b/content/applications/studio/automated_actions/values-updated-trigger.png deleted file mode 100644 index 39758f7057..0000000000 Binary files a/content/applications/studio/automated_actions/values-updated-trigger.png and /dev/null differ diff --git a/content/applications/studio/automated_actions/webhook-update-record.png b/content/applications/studio/automated_actions/webhook-update-record.png new file mode 100644 index 0000000000..13cb528c06 Binary files /dev/null and b/content/applications/studio/automated_actions/webhook-update-record.png differ diff --git a/content/applications/studio/automated_actions/webhooks.rst b/content/applications/studio/automated_actions/webhooks.rst index bd16143347..0032354306 100644 --- a/content/applications/studio/automated_actions/webhooks.rst +++ b/content/applications/studio/automated_actions/webhooks.rst @@ -7,280 +7,278 @@ Webhooks role when deciding to use webhooks and throughout the implementation process. If not properly configured, webhooks may disrupt the Odoo database and can take time to revert. -Webhooks, which can be created in **Studio**, are automation rules triggered by external events via -user-defined HTTP callbacks. When an external system sends data to an Odoo webhook's URL (the -"trigger") with a data file (the "payload"), Odoo responds with a predefined action in the database. +Webhooks, which can be created in **Odoo Studio**, allow you to automate an action in your Odoo +database when a specific event occurs in another, external system. -Unlike scheduled actions or manual API calls, webhooks enable real-time communication and -automation. For example, if a sales order is confirmed in an external POS system, a webhook can -instantly update Odoo's inventory, ensuring system synchronization. +In practice, this works as follows: when the event occurs in the external system, a data file (the +"payload") is sent to the Odoo webhook's URL via a `POST` API request, and a predefined action is +performed in your Odoo database. -.. note:: - This article covers creating a webhook that *takes in* data from an external source. However, - an automated action that :ref:`sends an API call to an external webhook - ` can also be created. - -Create a webhook in Studio -========================== +Unlike scheduled actions, which run at predefined intervals, or manual API requests, which need to +be explicitly invoked, webhooks enable real-time, event-driven communication and automation. For +example, you can set up a webhook to have your Odoo inventory data updated automatically when a +sales order is confirmed in an external point-of-sale system. -Webhooks are configured in **Studio**, and their setup is split between their :ref:`trigger -` and their :ref:`actions `. +Setting up a webhook in Odoo requires no coding when connecting two Odoo databases, but +:ref:`testing a webhook ` requires an external tool. +:ref:`Custom target records or actions ` may require programming +skills. -.. tip:: - - Setting up a webhook in Odoo requires no coding when connecting Odoo databases, but testing - requires an external tool like `Postman `_. :ref:`Custom target - records or actions ` may require programming skills. - - :ref:`Activate developer mode ` to modify the model targeted by the webhook - (e.g., sales orders or contact information) and to find the model's technical name (which may be - required for proper payload configuration). - -.. _studio/webhooks/webhook_trigger: +.. note:: + This article covers creating a webhook that *receives* data from an external source. However, + it is also possible to create an automated action that :ref:`sends data to an external webhook + ` when a change occurs in your Odoo database. -Set the webhook's trigger -------------------------- +.. _studio/webhooks/create-webhook: -To create a webhook with **Studio**, :ref:`open Studio `, click :guilabel:`Webhooks`, -then :guilabel:`New`. From here, name the webhook, modify the webhook's model (the kind of database -entry to be targeted) if needed, and toggle whether calls made to the webhook URL should be logged -(which would track the webhook's call history for troubleshooting). +Create a webhook in Odoo +======================== -The webhook's URL is automatically generated. This is the URL that should be used for testing the -webhook and connecting it to the external system that will send updates to the database. +.. important:: + Before implementing a webhook in a live database, configure and test it using a :ref:`duplicate + database ` to ensure the webhook performs as intended. -.. danger:: - The webhook's URL is **confidential** and should be treated with care. Sharing it online or - without caution can provide unintended access to the Odoo database. Click :guilabel:`Rotate - Secret` to change the URL if needed. +.. tip:: + :ref:`Activating developer mode ` before creating up a webhook gives greater + flexibility in selecting the :doc:`model <../models_modules_apps>` the automation rule + targets. It also allows you to find the technical name of the model and fields, which may be + needed to configure the payload. -Finally, if the system sending the webhook is not Odoo, adjust the :guilabel:`Target Record` actions -to look for the JSON record that is included in the API call's payload when the call is made to the -webhook's URL. If the system sending the webhook is an Odoo database, then make sure that the `id` -and `model` appear in the payload. + To find a model's technical name, with developer mode activated, hover over the model name and + then click :icon:`fa-arrow-right` :guilabel:`(Internal link)`. The technical name can be found in + the :guilabel:`Model` field. For example, a sales order webhook uses the *Sales + Order* model, but the technical name `sale.order` is used in the payload. -.. tip:: - Although the :guilabel:`Model` is set in Odoo, it is the model's technical name that must be - included in the payload. Hover over the model name, then click the :icon:`fa-arrow-right` - :guilabel:`(Internal link)` icon to find this technical name in the :guilabel:`Model` field. For - example, a sales order webhook uses the *Sales Order* model, but the technical name `sale.order` - is used in the payload. +To create a webhook in **Studio**, proceed as follows: -.. note:: - When creating a record in the Odoo database, the target record's default format should not be - used. Instead, use `model.browse(i)` or `model.search(i)`. +#. :ref:`Open Studio ` and click :guilabel:`Webhooks`, then :guilabel:`New`. +#. Give the webhook a clear, meaningful name that identifies its purpose. +#. If needed, and provided developer mode is activated, select the appropriate :guilabel:`Model` + from the dropdown. If developer mode is not activated, the automation rule targets the current + model by default. -.. _studio/webhooks/webhook_action: +#. The webhook's URL is automatically generated, but can be changed if needed by clicking + :guilabel:`Rotate Secret`. This is the URL that should be used when implementing the webhook in + the external system that will send updates to the database. -Set the webhook's action ------------------------- + .. warning:: + The URL is **confidential** and should be treated with care. Sharing it online or without + caution can provide unintended access to the Odoo database. If the URL is updated after the + initial implementation, make sure to update it in the external system. -To set a webhook's action while configuring a webhook, click :guilabel:`Add an action` under the -:guilabel:`Actions To Do` tab. Click the action's :guilabel:`Type` and set the fields as needed. +#. If desired, enable :guilabel:`Log Calls` to track the history of API requests made to the + webhook's URL, e.g., for troubleshooting purposes. -.. _studio/webhooks/test_webhook: +#. If the system sending the webhook is not Odoo, adjust the :guilabel:`Target Record` code to look + for the JSON record included in the payload when the API request is made to the webhook's URL. If + the system sending the webhook is an Odoo database, ensure that the `id` and `model` appear in + the payload. -Test the webhook ----------------- + If the webhook is used to create records in the Odoo database, use `model.browse(i)` or + `model.search(i)` instead of the default :guilabel:`Target Record` format. -.. note:: - Testing the webhook requires the webhook to be set up, a test payload to send to the webhook, and - an external tool or system to send the payload through a `POST` API request. Consider using a - tool like `Postman `_ so less technical skills are required. +#. Click :guilabel:`Add an action` in the :guilabel:`Actions To Do` tab to define the :ref:`actions + ` to be executed. +#. Before implementing the webhook in the external system, :ref:`test + ` it to ensure it works as intended. -If a message saying `200 OK` or `status: ok` gets returned during testing, then the webhook is -functioning properly on Odoo's side. From here, implementation can begin with the other tool to -automatically send those webhook calls into Odoo using the webhook's URL. +.. tip:: + - Webhooks can also be created via the :guilabel:`Automations` menu in **Studio** by selecting + the trigger :guilabel:`On webhook`. + - To access the history of API requests if :guilabel:`Log Calls` has been enabled, click the + :guilabel:`Logs` smart button at the top of the :guilabel:`Automation rules` form. + - If the purpose of the webhook is anything other than to update an existing record, e.g., to + create a new record, the :guilabel:`Execute Code` action must be chosen. -If any other responses are returned, the number sent in the response helps to identify the problem. -For example, a `500 Internal Server Error` means that Odoo could not interpret the call properly. If -this gets returned, ensure the fields found in the JSON file are properly mapped in the webhook's -configuration and in the system sending the test call. Turning on call logging in the webhook's -configuration provides error logs if the webhook is not functioning as intended. +.. _studio/webhooks/test-webhook: -Implement the webhook ---------------------- +Test a webhook +============== -Once the webhook is fully configured, begin connecting it to the system that sends data to the Odoo -database through this webhook. Make sure that the API calls are sent to the webhook's URL when -setting that system up. +Testing a webhook requires a test payload and an external tool or system, like +`Postman `_, to send the payload via a `POST` API request. This section +presents the steps to test a webhook in Postman. -.. _studio/webhooks/webhook_examples: +.. tip:: + - See the :ref:`webhook use cases section ` for step-by-step + explanations of how to test webhooks using test payloads. + - To get specific help with testing a webhook with Postman, contact their support team. -Webhook use cases -================= +#. In Postman, create a new HTTP request and set its method to :guilabel:`POST`. +#. Copy the webhook's URL from your Odoo database using the :icon:`fa-link` :guilabel:`(link)` icon + and paste it into the URL field in Postman. +#. Click the :guilabel:`Body` tab and select :guilabel:`raw`. +#. Set the file type to :guilabel:`JSON`, then copy the code from the test payload and paste it into + the code editor. +#. Click :guilabel:`Send`. -Below are two examples of how to use webhooks in Odoo. These webhooks require external tools (which -are listed with the example). +.. _studio/webhooks/test-webhook-response: -.. warning:: - Consult with a developer, solution architect, or another technical role when deciding to - implement webhooks. If not properly configured, webhooks may disrupt the Odoo database and can - take time to revert. +In the :guilabel:`Response` viewer at the bottom of the screen in Postman, details, including a HTTP +response code, indicate whether or not the webhook is functioning correctly. -Update a sales order's currency -------------------------------- +- A `200 OK` or `status: ok` message indicates that the webhook is functioning properly on Odoo's + side. From here, implementation can begin with the other system to automatically send the API + requests to the Odoo webhook's URL. -This webhook updates a sales order in the **Sales** app to USD. It useful for subsidiaries outside -the United States with a mother company located inside the United States or during mergers when -consolidating data into one Odoo database. - -Set the webhook's trigger -~~~~~~~~~~~~~~~~~~~~~~~~~ - -To set up this webhook, open the **Sales** app. Then, :ref:`set the trigger -` so the :guilabel:`Model` is set to `Sales Order`. Also, set -the :guilabel:`Target Record` to `model.env[payload.get('model')].browse(int(payload.get('id')))`. -This is broken down below. - -- **model**: what gets updated in Odoo (in this case, sales orders). This matches the - :guilabel:`Model` set earlier. -- **env**: where the action takes place. In this case, it is Odoo. -- **payload**: what is sent to the webhook's URL. This contains the information that updates - the sales order. -- **get('model')**: tells the webhook what database record to look at. In this case, the - webhook retrieves (`get`) the data tied to a specific `model`. In this example, this is the - Sales Order model. -- **browse**: tells the webhook to look in the `model` (Sales Order) set by the payload for what to - update. -- **int**: turns the target into an `integer` (a whole number). This is important in case some - words (a `string`) or a decimal number is included in the payload's target record. -- **get('id')**: identifies the sales order number that is being updated in Odoo. - -Set the webhook's action -~~~~~~~~~~~~~~~~~~~~~~~~ - -After setting the trigger, set the webhook's action by clicking :guilabel:`Add an action`. For the -:guilabel:`Type`, click :guilabel:`Update Record`. Then, select `Update`, choose the field -`Currency`, and select `USD` to have the currency field updated to USD. Finally, click -:guilabel:`Save & Close`. - -Webhook setup summary -~~~~~~~~~~~~~~~~~~~~~ - -To summarize what is set up, the webhook targets sales orders, identified by their sales order -number, and updates their currency to `USD` when a POST request is sent to the webhook's URL that -includes that sales order number (which is identified by the payload's `id` record). +- If any other response is returned, the number associated with it helps to identify the problem. + For example, a `500 Internal Server Error` message means that Odoo could not interpret the call + properly. In this case, ensure the fields found in the JSON file are properly mapped in the + webhook's configuration and in the system sending the test call. -Test the webhook -~~~~~~~~~~~~~~~~ +.. tip:: + Turning on call logging in the webhook's configuration in Odoo provides error logs if the webhook + is not functioning as intended. -Test the webhook's setup to make sure everything is correct. This process uses a tool called -`Postman `_ to send the simulated trigger. +Implement a webhook in an external system +========================================= -This section walks through the steps to test this webhook in Postman, but does not offer help if -there's an issue within that tool. To get specific help with Postman, contact their support team. +When the webhook has been successfully created in Odoo and tested, implement it in the system that +sends data to the Odoo database, making sure the `POST` API requests are sent to the webhook's URL. -Once Postman is open, create a new :guilabel:`HTTP` request and set its method to :guilabel:`POST`. -Next, copy the webhook's URL that is being tested and paste it into the URL field in Postman. After -that, click the :guilabel:`Body` tab and select the :guilabel:`raw` option. Set the file type to -:guilabel:`JSON`, then copy this code and paste it into the file. +.. _studio/webhooks/webhook-examples: -.. code-block:: json +Webhook use cases +================= - { - "model": "sale.order", - "id": "SALES ORDER NUMBER" - } +Below are two examples of how to use webhooks in Odoo. A test payload is provided for each example, +and can be found in the section on testing the webhook. `Postman `_ is +used to send the test payload. -From here, choose a sales order to test the webhook on. If it is not possible to test in a live -Odoo database, consider creating a demo database with a sample sales order and the webhook that was -configured. Replace `SALES ORDER NUMBER` with the sales order's number without the `S` or any zeros -before the number. For example, a sales order with the number `S00007` should be entered as `7` in -Postman. Finally, click :guilabel:`Send` in Postman. +Update a sales order's currency +------------------------------- -If a message saying `200 OK` or `status: ok` gets returned, then the webhook is functioning properly -on Odoo's side. The test sales order's currency is updated. From here, implementation can begin with -the other tool to automatically send those webhook calls into Odoo using the webhook's URL. +This webhook updates a sales order in the **Sales** app to `USD` when the external system sends a +`POST` API request to the webhook's URL that includes that sales order number (which is identified +by the payload's `id` record). -If any other responses are returned, the number associated with them helps to identify the problem. -For example, a `500 Internal Server Error` means that Odoo could not interpret the call properly. If -this gets returned, ensure the `model` and `id` fields are properly mapped in the webhook's -configuration and in Postman. +This could be useful for subsidiaries outside the United States with a mother company located inside +the United States or during mergers when consolidating data into one Odoo database. -.. _studio/webhooks/webhook-example: +Create the webhook +~~~~~~~~~~~~~~~~~~ -Create a new contact --------------------- +To create this webhook, proceed as follows: -This webhook uses custom code to create a new contact in an Odoo database. This could be helpful for -automatically creating new vendors or customers. +#. Open the **Sales** app, then :ref:`open Studio ` and click :guilabel:`Webhooks`. + The *Sales Order* model is selected by default. +#. Click :guilabel:`New`. The :guilabel:`Trigger` is set to :guilabel:`On webhook` by default. +#. Set the :guilabel:`Target Record` to + `model.env[payload.get('_model')].browse(int(payload.get('_id')))`, where: -Set the webhook's trigger -~~~~~~~~~~~~~~~~~~~~~~~~~ + - `payload.get('_model')` retrieves the value associated with the `model` key in the payload, + i.e., `sale.order`, which is the technical name of the *Sales Order* model. + - `payload.get('_id')` retrieves the value associated with the `id` key in the payload, i.e., + the number of the target sales order in your Odoo database with the `S` and leading + zeros removed. + - `int` converts the retrieved id to an integer (i.e., a whole number) because the method + `browse()` can only be used with an integer. -To set up this webhook, open the **Contacts** app. Then, :ref:`set the trigger -` so the :guilabel:`Model` is set to `Contact`. Also, set the -:guilabel:`Target Record` to `model.browse([2])`. This is broken down below. +#. Click :guilabel:`Add an action`. +#. In the :guilabel:`Type` section, click :guilabel:`Update Record`. +#. In the :guilabel:`Action details` section, select :guilabel:`Update`, choose the field + :guilabel:`Currency`, and select :guilabel:`USD`. +#. Click :guilabel:`Save & Close`. -- **model**: what gets updated in Odoo (in this case, a contact). This matches the :guilabel:`Model` - set earlier. -- **browse**: tells the webhook to look in the `model` (the contacts) set by the payload for - what to create. +Test the webhook +~~~~~~~~~~~~~~~~ -Set the webhook's action -~~~~~~~~~~~~~~~~~~~~~~~~ +To test this webhook, proceed as follows: -After setting the trigger, set the webhook's action by clicking :guilabel:`Add an action`. For the -:guilabel:`Type`, click :guilabel:`Execute Code`, then set the :guilabel:`code` to the sample code -below. Finally, click :guilabel:`Save & Close`. +#. With `Postman `_ open, create a new HTTP request and set its method to + :guilabel:`POST`. +#. Copy the URL of the Odoo webhook using the :icon:`fa-link` :guilabel:`(link)` icon and paste it + into the URL field in Postman. +#. Click the :guilabel:`Body` tab and select :guilabel:`raw`. +#. Set the file type to :guilabel:`JSON`, then copy this code, i.e., the payload, and paste it into + the code editor: -.. code-block:: python + .. code-block:: json - # variables to retrieve and hold data from the payload - contact_name = payload.get('name') - contact_email = payload.get('email') - contact_phone = payload.get('phone') + { + "_model": "sale.order", + "_id": "SALES ORDER NUMBER" + } - # a Python function to turn the variables into a contact in Odoo - if contact_name and contact_email: - new_partner = env['res.partner'].create({ - 'name': contact_name, - 'email': contact_email, - 'phone': contact_phone, - 'company_type':'person', - 'customer_rank': 1, - }) - # an error message for missing required data in the payload - else: - raise ValueError("Missing required fields: 'name' and 'email'") +#. In your Odoo database, choose a sales order to test the webhook on. In the pasted code, replace + `SALES ORDER NUMBER` with the sales order's number without the `S` or any zeros before the + number. For example, a sales order with the number `S00007` should be entered as `7` in Postman. +#. Click :guilabel:`Send`. +#. Consult the :ref:`Response viewer ` in Postman to + determine whether or not the webhook is functioning properly. If a message other than `200 OK` or + `status: ok` is returned, the number associated with the message helps to identify the problem. +.. _studio/webhooks/webhook-example: -Webhook setup summary -~~~~~~~~~~~~~~~~~~~~~ +Create a new contact +-------------------- -To summarize what is set up, the webhook creates a contact when an API call is sent to the webhook's -URL that includes the contact's information. +This webhook uses custom code to create a new contact in an Odoo database when the external system +sends a `POST` API request to the webhook's URL that includes the contact's information. This could +be helpful for automatically creating new vendors or customers. + +Create the webhook +~~~~~~~~~~~~~~~~~~ + +To create this webhook, proceed as follows: + +#. Open the **Contacts** app, then :ref:`open Studio ` and click :guilabel:`Webhooks`. + The *Contact* model is selected by default. +#. Click :guilabel:`New`. The :guilabel:`Trigger` is set to :guilabel:`On webhook` by default. +#. Set the :guilabel:`Target Record` to `model.browse([2])`. This is essentially a placeholder as + the code in the automated action tells the webhook what needs to be retrieved from the payload + and in which model the record needs to be created. +#. Click :guilabel:`Add an action`. +#. In the :guilabel:`Type` section, click :guilabel:`Execute Code`. +#. Copy this code and paste it into the code editor in the :guilabel:`Code` tab of the + :guilabel:`Action details` section: + + .. code-block:: python + + # variables to retrieve and hold data from the payload + contact_name = payload.get('name') + contact_email = payload.get('email') + contact_phone = payload.get('phone') + + # a Python function to turn the variables into a contact in Odoo + if contact_name and contact_email: + new_partner = env['res.partner'].create({ + 'name': contact_name, + 'email': contact_email, + 'phone': contact_phone, + 'company_type':'person', + 'customer_rank': 1, + }) + # an error message for missing required data in the payload + else: + raise ValueError("Missing required fields: 'name' and 'email'") + +#. Click :guilabel:`Save & Close`. Test the webhook ~~~~~~~~~~~~~~~~ -Test the webhook's setup to make sure everything is correct. This process uses a tool called -`Postman `_ to send the simulated trigger. - -This section walks through the steps to test this webhook in Postman, but does not offer help if -there's an issue within that tool. To get specific help with Postman, contact their support team. - -Once Postman is open, create a new request, and set its method to :guilabel:`POST`. Next, copy the -webhook's URL that is being tested and paste it into the URL field in Postman. After that, click the -:guilabel:`Body` tab and click :guilabel:`raw`. Set the file type to :guilabel:`JSON`, then copy -this code and paste it into the file. - -.. code-block:: json - - { - "name": "CONTACT NAME", - "email": "CONTACTEMAIL@EMAIL.COM", - "phone": "CONTACT PHONE NUMBER" - } - -Replace the fields above with a new contact's information in Postman, and then click -:guilabel:`Send`. - -If a message saying `200 OK` or `status: ok` gets returned, then the webhook is functioning properly -on Odoo's side. The new test contact appears in the **Contacts** app. From here, implementation can -begin with the other tool to automatically send those webhook calls into Odoo using the webhook's -URL. - -If any other responses are returned, the number associated with them helps to identify the problem. -For example, a `500 Internal Server Error` means that Odoo could not interpret the call properly. If -this gets returned, ensure the fields found in the JSON file are properly mapped in the webhook's -configuration and in Postman. +To test this webhook, proceed as follows: + +#. In `Postman `_, create a new HTTP request and set its method to + :guilabel:`POST`. +#. Copy the URL of the Odoo webhook using the :icon:`fa-link` :guilabel:`(link)` icon and paste it + into the URL field in Postman. +#. Click the :guilabel:`Body` tab and select :guilabel:`raw`. +#. Set the file type to :guilabel:`JSON`, then copy this code, i.e., the payload, and paste it into + the code editor: + + .. code-block:: json + + { + "name": "CONTACT NAME", + "email": "CONTACTEMAIL@EMAIL.COM", + "phone": "CONTACT PHONE NUMBER" + } + +#. In the pasted code, replace the `CONTACT NAME`, `CONTACTEMAIL@EMAIL.COM`, and `CONTACT PHONE + NUMBER` with a new contact's information. +#. Click :guilabel:`Send`. +#. Consult the :ref:`Response viewer ` in Postman to + determine whether or not the webhook is functioning properly. If a message other than `200 OK` or + `status: ok` is returned, the number associated with the message helps to identify the problem. diff --git a/content/applications/websites/elearning.rst b/content/applications/websites/elearning.rst index 8f395d83f3..ad5b6be91e 100644 --- a/content/applications/websites/elearning.rst +++ b/content/applications/websites/elearning.rst @@ -15,27 +15,32 @@ learning experience enhances their attentiveness and fosters heightened producti .. seealso:: `Odoo Tutorials: eLearning `_ +.. _elearning/courses: + Courses ======= -By going to :menuselection:`eLearning --> Courses --> Courses`, you can get an overview of all your -courses. +To get an overview of all courses, go to :menuselection:`eLearning --> Courses --> Courses`. + +Click on a course card to edit the course on the back end. Click :guilabel:`View course` to access +the course on the front end. -Click on a course title to edit your course on the back end. Click on :guilabel:`View course` to -access your course on the front end. +.. _elearning/course-creation: Course creation --------------- -Click :guilabel:`New` to create a new course. When the page pops up, you can add your -:guilabel:`Course Title` and one or more :guilabel:`Tags` to describe your course. You can add an -image to illustrate your course by hovering your mouse on the camera placeholder image and clicking -on the edit icon. Four tabs allow you to edit your course further: -:ref:`Content `, :ref:`Description `, -:ref:`Options `, and :ref:`Karma `. +Click :guilabel:`New` to create a new course. In the form that opens, add a :guilabel:`Course Title` +and one or more :guilabel:`Tags` to categorize the course and :ref:`allow users +to filter courses based on their tags `. +To add an image to illustrate the course, hover your mouse on the camera placeholder image and +click on :icon:`fa-pencil` :guilabel:`(Edit)`. + +Four tabs allow you to edit your course further: :ref:`Content `, +:ref:`Description `, :ref:`Options `, and +:ref:`Karma `. .. image:: elearning/elearning-course-creation.png - :align: center :alt: Create your elearning course. .. _elearning/content: @@ -43,22 +48,21 @@ on the edit icon. Four tabs allow you to edit your course further: Content tab ~~~~~~~~~~~ -This tab allows you to manage your course content. Click on :guilabel:`Add Section` to divide your -course into different sections. Click on :guilabel:`Add Content` to create -:ref:`content `. Click on :guilabel:`Add Certification` to assess the -level of understanding of your attendees, certify their skills, and motivate them. **Certification** -is part of the :doc:`Surveys <../marketing/surveys/create>` app. +This tab allows you to manage the course content. Click :guilabel:`Add Section` to divide the +course into different sections. Click :guilabel:`Add Content` to create :ref:`content items +`. Click :guilabel:`Add Certification` to assess the attendees' level of +understanding, certify their skills, and motivate them. **Certification** is part of the +:doc:`Surveys <../marketing/surveys/create>` app. .. _elearning/description: Description tab ~~~~~~~~~~~~~~~ -You can add a short description or information related to your course in the :guilabel:`Description` -tab. It appears under your course title on your website. +You can add a short description or information related to the course in the :guilabel:`Description` +tab. It appears under the course title on your website. .. image:: elearning/course-description.png - :align: center :alt: Add a description to your course. .. _elearning/options: @@ -67,70 +71,122 @@ Options tab ~~~~~~~~~~~ In the :guilabel:`Options` tab, different configurations are available: -:ref:`Course `, :ref:`Communication `, -:ref:`Access rights `, and :ref:`Display `. +:ref:`Course `, :ref:`Access rights `, +:ref:`Communication ` and :ref:`Display +`. .. image:: elearning/options-tab.png - :align: center :alt: Overview of the Options tab -.. _elearning/course: +.. _elearning/options-course: Course ****** -Assign a :guilabel:`Responsible` user for your course. If you have multiple websites, use the -:guilabel:`Website` field to only display the course on the selected website. +Assign a :guilabel:`Responsible` user for the course. If you have multiple websites, use the +:guilabel:`Website` field to display the course only on the selected website. -.. _elearning/communication: +.. _elearning/options-access-rights: -Communication +Access rights ************* -- :guilabel:`Allow Reviews`: tick the box to allow attendees to like and comment on your content and - to submit reviews on your course; -- :guilabel:`Forum`: add a dedicated forum to your course (only shown if the **Forum** feature is - enabled in the app's settings); -- :guilabel:`New Content Notification`: select an email template sent to your attendees when you - upload new content. Click on the internal link button (:guilabel:`➜`) to have access to the email - template editor; -- :guilabel:`Completion Notification`: select an email template sent to your attendees once they - reach the end of your course. Click on the internal link button (:guilabel:`➜`) to access the - email template editor; +- :guilabel:`Prerequisites`: Set one or more other courses that users are advised to complete before + accessing the course. +- :guilabel:`Prerequisite Of`: If the course has been defined as a prerequisite for one or more + courses, this read-only field displays the course name(s). +- :guilabel:`Show course to`: Define who can see the course on your website. Select one of the + following: -.. _elearning/access-rights: + - :guilabel:`Everyone`: The course is publicly visible. + - :guilabel:`Signed In`: The course is only visible to users who are logged in. + - :guilabel:`Course Attendees`: The course is only visible to users who are already enrolled in + the course. + - :guilabel:`Anyone with the link`: The course can only be accessed via a direct link. -Access rights -************* +- :guilabel:`Enroll Policy`: Define how people can enroll in the course. The choice of policy also + determines which internal eLearning users can add, i.e., manually enroll, attendees via the + :guilabel:`Add attendees` button or invite attendees to enroll via the :guilabel:`Invite` button. + + .. note:: + Internal eLearning users have either `Officer` or `Manager` :doc:`access rights + `. + + Select one of the following: + + - :guilabel:`Open`: + + - Anyone who can see the course can enroll. + - Any eLearning Officer or eLearning Manager can add or invite internal or external + attendees. + + - :guilabel:`On invitation`: + + - Only people who have received an invitation can enroll in the course. + - If the course visibility is set to :guilabel:`Everyone`, :guilabel:`Signed In`, or + :guilabel:`Anyone with the link`, any non-invited person who logs in can request access to the + course via the course page. Enter an :guilabel:`Enroll Message` to explain how to enroll, + e.g., "Contact Responsible". + + .. tip:: + The request creates a to-do assigned to the course's :guilabel:`Responsible` user, allowing + them to :guilabel:`Grant Access` or :guilabel:`Refuse Access`. The to-do is visible to the + :guilabel:`Responsible` user and any eLearning Manager in the course's chatter, and the + :guilabel:`Responsible` user is notified via email. Either the :guilabel:`Responsible` user + or an eLearning Manager can grant access, in which case the requestor is automatically + enrolled in the course, or refuse access. -- :guilabel:`Prerequisites`: set one or more courses that users are advised to complete before - accessing your course; -- :guilabel:`Show course to`: define who can access your course and their content between - :guilabel:`Everyone`, :guilabel:`Signed In` or :guilabel:`Course Attendees`; -- :guilabel:`Enroll Policy`: define how people enroll in your course. Select: + - Only the :guilabel:`Responsible` user for the course or an eLearning Manager can add or invite + internal or external attendees. - - :guilabel:`Open`: if you want your course to be available to anyone; - - :guilabel:`On Invitation`: if only people who received an invitation can enroll to your course. - If selected, fill in the :guilabel:`Enroll Message` explaining the course's enrollment process. - This message appears on your website under the course title; - - :guilabel:`On Payment`: if only people who bought your course can attend it. The - :guilabel:`Paid Courses` feature must be enabled to get this option. If you select - :guilabel:`On Payment`, you must add a :guilabel:`Product` for your course. + - :guilabel:`On payment`: - .. note:: - Only products set up with :guilabel:`Course` as their :guilabel:`Product Type` are - displayed. + - This option is only shown if the :guilabel:`Paid courses` feature is enabled in the + :ref:`eLearning settings `. + - Anyone who can see the course can enroll in the course upon payment. + - Any eLearning Officer can *invite* internal or external attendees to enroll in the course. + - Only the :guilabel:`Responsible` user for the course or an eLearning Manager can *add* + attendees. Payment is not required when an attendee is added in this way. + - To set a course as :guilabel:`On payment`, a :guilabel:`Product` must be selected; only + products set up with :guilabel:`Course` as their :guilabel:`Product Type` are available for + selection. -.. _elearning/display: +.. tip:: + To add or invite an attendee, the attendee must be an existing contact or created as a new + contact. A person who creates a customer account on your website is automatically a contact. + +.. _elearning/options-communication: + +Communication +************* + +- :guilabel:`Allow Reviews`: Enable this option to allow attendees to like, comment on, and submit + reviews for the course content. +- :guilabel:`Forum`: Add a dedicated forum to the course. This option is only shown if the + :guilabel:`Forum` feature is enabled in the :ref:`eLearning settings `. +- :guilabel:`New Content Notification`: Select an email template to send emails to attendees when + you upload new content items. Click on :icon:`oi-arrow-right` :guilabel:`Internal link` to access + the email template editor. +- :guilabel:`Completion Notification`: Select an email template to send emails to attendees once + they reach the end of the course. Click on :icon:`oi-arrow-right` :guilabel:`Internal link` to + access the email template editor. + +.. note:: + If the :guilabel:`Mailing` feature is enabled in the :ref:`eLearning settings + `, it is possible to send mass mailings to people enrolled in a course via a + :guilabel:`Contact Attendees` button at the top left of the course form. The button is only + visible to eLearning Officers who also have `User` :doc:`access rights + ` for Email Marketing and to eLearning Managers. + +.. _elearning/options-display: Display ******* -- :guilabel:`Training`: the course content appears as a training program, and the courses must be +- :guilabel:`Training`: The course content appears as a training program, and the courses must be taken in the proposed order. -- :guilabel:`Documentation`: the content is available in any order. If you choose this option, you - can choose which page should be promoted on the course homepage by using the - :guilabel:`Featured Content` field. +- :guilabel:`Documentation`: The content is available in any order. Use the :guilabel:`Featured + Content` field to define which content items are promoted on the course homepage. .. _elearning/karma: @@ -139,118 +195,192 @@ Karma tab This tab is about gamification to make eLearning fun and interactive. -In the :guilabel:`Rewards` section, choose how many karma points you want to grant your students +In the :guilabel:`Rewards` section, choose how many karma points you want to grant attendees when they :guilabel:`Review` or :guilabel:`Finish` a course. -In the :guilabel:`Access Rights` section, define the karma needed to :guilabel:`Add Review`, +In the :guilabel:`Access Rights` section, define the karma points needed to :guilabel:`Add Review`, :guilabel:`Add Comment`, or :guilabel:`Vote` on the course. -.. note:: - From your course, click the :guilabel:`Contact Attendees` button to reach people who are - enrolled in the course. - .. _elearning/course-groups: Course groups ------------- -Use the **Course Groups** to inform users and allow them to filter the courses from the -:guilabel:`All Courses` dashboard. +**Course Groups** allow users to filter the :guilabel:`All Courses` dashboard on your website and +find the course that meets their interests, needs, level, etc. -You can manage them by going to :menuselection:`Configuration --> -Course Groups`. Click :guilabel:`New` to create a new course group. Add the :guilabel:`Course Group -Name`, tick the :guilabel:`Menu Entry` box to allow users to search by course group on the website, -and add tags in the :guilabel:`Tag Name` column. For each tag, you can select a corresponding color. +To manage them, go to :menuselection:`eLearning --> Configuration --> Course Groups`. Click +:guilabel:`New` to create a new course group. Add the :guilabel:`Course Group Name`, enable +:guilabel:`Menu Entry` to allow users to search by course group on the website, and add tags in +the :guilabel:`Tag Name` column. For each tag, you can select a corresponding color. + +.. _elearning/settings: Settings -------- -You can enable different features to customize your courses by going to :menuselection:`eLearning ---> Configuration --> Settings`: +The following options are available in the eLearning settings. Go to :menuselection:`eLearning --> +Configuration --> Settings`, then enable the desired feature: + +- :guilabel:`Certifications`: Assess attendees' knowledge and provide official certification of + their skills. +- :guilabel:`Paid Courses`: Sell course access directly through your website and track revenue. + + .. note:: + Enabling :guilabel:`Paid Courses` automatically installs the :guilabel:`eCommerce` module, + which may impact your `pricing plan `_. -- **Certifications**: to evaluate the knowledge of your attendees and certify their skills; -- **Paid courses**: to sell access to your courses on your website and track revenues; -- **Mailing**: to update all your attendees at once through mass mailings; -- **Forum**: to create a community and let attendees answer each other's questions. + .. seealso:: + :doc:`eCommerce documentation ` -.. _elearning/create-content: +- :guilabel:`Mailing`: Send mass mailings to keep all attendees informed and up to date. +- :guilabel:`Forum`: Build a community space where attendees can ask questions and help each other. + +.. _elearning/content-creation: Content ======= -Manage your content by going to :menuselection:`eLearning --> Courses --> Contents`. Click -:guilabel:`New` to create content. Add your :guilabel:`Content Title`, and if you want -:ref:`Tags `, then fill in the related information among the different tabs. +To manage course content, go to :menuselection:`eLearning --> Courses --> Contents`. Click +:guilabel:`New` to create a content item. Add the :guilabel:`Content Title` and any desired +:ref:`Tags `, then fill in the required information in the different tabs. .. image:: elearning/elearning-content-tab.png - :align: center :alt: Create your content. +.. tip:: + You can also create new content from within a course. Go to :menuselection:`eLearning --> Courses + --> Courses`, click the relevant course card, then click :guilabel:`Add content` at the bottom + of the :guilabel:`Content` tab. + +.. _elearning/content-document: + Document tab ------------ -- :guilabel:`Course`: select the course your content belongs to; -- :guilabel:`Content Type`: select the type of your content; -- :guilabel:`Responsible`: add a responsible person for your content; -- :guilabel:`Duration`: indicate the time required to complete the course; -- :guilabel:`Allow Download`: allow users to download the content of the slide. This option is only - visible when the content is a document; -- :guilabel:`Allow Preview`: the course is accessible by anyone. -- :guilabel:`# of Public Views`: displays the number of views from non-enrolled participants; +For each content type, provide the following information: + +- :guilabel:`Course`: Select the course to which the content item belongs. +- :guilabel:`Content Type`: Select the relevant :ref:`content type ` and + provide the required information. +- :guilabel:`Responsible`: Select the user responsible for the content item. By default, this is the + user who creates the course, but another user can be selected. +- :guilabel:`Duration`: Enter the time required to complete the lesson. +- :guilabel:`Allow Preview`: Enable this if the content should be accessible to anyone. + +.. note:: + If the :ref:`Content Type ` is :guilabel:`Document`, enabling + :guilabel:`Allow Download` allows users to download the content. + +Two read-only fields provide data about how often the content item is viewed: + +- :guilabel:`# of Public Views`: displays the number of views from non-enrolled participants. - :guilabel:`# Total Views`: displays the total number of views (non-enrolled and enrolled participants). +.. image:: elearning/elearning-document-tab.png + :alt: Provide information about the content. + +.. _elearning/content-type: + +Content types +~~~~~~~~~~~~~ + +You can add the following content types: + +- :guilabel:`Image`: To upload an image, select :guilabel:`Upload from Device`, click + :guilabel:`Upload your file`, then select the relevant file. Supported formats include JPG, JPEG, + PNG, SVG, GIF, and WEBP. The maximum file size is 25MB. + + Alternatively, to add an image saved on Google Drive, select :guilabel:`Retrieve from Google + Drive`, then add the Google Drive link to the image. + +- :guilabel:`Article`: Articles are website pages that are customized using the website + builder on your website's front end. + + With the :guilabel:`Course` selected, click the :guilabel:`Go to Website` smart button, then, at + the top-right of the screen, click :icon:`fa-pencil` :guilabel:`(Edit)`. Write the article's + content and :doc:`customize the page using the website builder `. + +- :guilabel:`Document`: To upload a document, select :guilabel:`Upload from Device`, click + :guilabel:`Upload your file`, then select the relevant file. Only PDF documents can be uploaded. + + Alternatively, to add a Google Slides presentation, Google Doc document, or Google Sheets + spreadsheet, click :guilabel:`Retrieve from Google Drive` and add the Google Drive link to the + file. + +- :guilabel:`Video`: Add the YouTube, Google Drive, or Vimeo link to the video. +- :guilabel:`Quiz`: Open the :ref:`Quiz tab ` to create a quiz. + +.. _elearning/content-description: + Description tab --------------- -You can add a description of your content that appears front end in the :guilabel:`About` section of -your course content. +Add a description for the content. This text is displayed in the :guilabel:`About` section of the +content item on your website. + +.. _elearning/content-additional-resources: Additional Resources tab ------------------------ Click :guilabel:`Add a line` to add a link or a file that supports your participants' learning. -It appears in the course content on your website. +The resource appears in the course content on your website. .. image:: elearning/additional-content.png - :align: center :alt: Additional ressources -.. _elearning/quiz: +.. _elearning/content-quiz: Quiz tab -------- -From this tab you can create a quiz to assess your students at the end of the course. +From this tab, you can create a quiz to assess your students at the end of the course. -The :guilabel:`Points Rewards` section lets you give a specific number of karma points depending on -how many tries they need to correctly answer the question. Then, create your questions and the -possible answers by clicking on :guilabel:`Add a line`. A new window pops up, add the question by -filling in the :guilabel:`Question Name` and add multiple answers by clicking on :guilabel:`Add a -line`. Tick the :guilabel:`Is correct answer` to mark one or more answers as correct. You can also -fill in the :guilabel:`Comment` field to display additional information when the answer is chosen by -the participant. +The :guilabel:`Points Rewards` section allows you to assign karma points based on how many attempts +are needed to answer correctly. To create a question, click :guilabel:`Add a line`, enter the +:guilabel:`Question Name`, and add possible answers. Mark the correct answer(s) by selecting +:guilabel:`Is correct answer`. You can also use the :guilabel:`Comment` field to provide additional +information when an answer is selected. -.. _elearning/tags: +.. _elearning/content-tags: Content Tags ------------ -The **Content Tags** help users to classify the content from the :guilabel:`Contents` dashboard. +**Content Tags** are visible on the :guilabel:`Contents` dashboard of a course on your website, and +can help users identify the kind of content a particular lesson contains, e.g., theory, or exercises. -You can manage them by going to :menuselection:`eLearning --> Configuration --> Content Tags`. Click +To manage content tags, go to :menuselection:`eLearning --> Configuration --> Content Tags`. Click :guilabel:`New` to create a new tag. -Publish your content -==================== +.. _elearning/publish-content: -Everything created on the back end needs to be published from the front end. Unpublished content is -always visible from your website but still needs to be published to be available to your audience. +Publish courses and content +=========================== -You must be on your website's front end to publish your content. To do so, click on the -:guilabel:`Go To Website` smart button, and tick the :guilabel:`Publish` option available in the -right-hand corner. +Courses and content items must be published from the front end to be available to your audience. +To access the front end, click the :guilabel:`Go to Website` smart button at the top of the course +form or an individual content form. + +A course and its content items are published separately: + +- To publish a course, access the main course page, then toggle the switch in the + upper-right corner from :guilabel:`Unpublished` to :guilabel:`Published`. +- To publish individual content items, click on an item to open it, then toggle the switch + from :guilabel:`Unpublished` to :guilabel:`Published`. .. image:: elearning/elearning-publish-button.png - :align: center :alt: Publish your content. + +.. tip:: + When publishing a new course, publish the individual content items before publishing the course + itself. Published content is only available to your audience once the course it is part of is + published. + +To unpublish a course or an individual content item, open the course or item, then toggle the switch +from :guilabel:`Published` to :guilabel:`Unpublished`. + +.. note:: + Unpublishing a course renders the course *and* its content unavailable to your audience. diff --git a/content/applications/websites/elearning/elearning-document-tab.png b/content/applications/websites/elearning/elearning-document-tab.png new file mode 100644 index 0000000000..a652921dcd Binary files /dev/null and b/content/applications/websites/elearning/elearning-document-tab.png differ diff --git a/content/applications/websites/elearning/options-tab.png b/content/applications/websites/elearning/options-tab.png index 10e2de774c..6af51b578a 100644 Binary files a/content/applications/websites/elearning/options-tab.png and b/content/applications/websites/elearning/options-tab.png differ diff --git a/content/applications/websites/forum.rst b/content/applications/websites/forum.rst index 216e43fc1d..be89253b68 100644 --- a/content/applications/websites/forum.rst +++ b/content/applications/websites/forum.rst @@ -54,7 +54,7 @@ having moderator rights. They are also used to set user :ref:`ranks ` and by :ref:`completing quizzes `. + ` and by :ref:`completing quizzes `. .. _forum/karma-gains: diff --git a/content/applications/websites/website/web_design.rst b/content/applications/websites/website/web_design.rst index 9fce7dbc11..98c099e2f3 100644 --- a/content/applications/websites/website/web_design.rst +++ b/content/applications/websites/website/web_design.rst @@ -1,9 +1,46 @@ :nosearch: +:show-content: +:hide-page-toc: ========== Web design ========== +Design your website using :doc:`building blocks <../website/web_design/building_blocks>`, customize +its :doc:`theme <../website/web_design/themes>` with various options, structure and present content +with :doc:`elements <../website/web_design/elements>`, and display or hide building blocks using +:doc:`visibility settings <../website/web_design/visibility>`. + +.. cards:: + + .. card:: Building blocks + :target: web_design/building_blocks + :large: + + Design your website by dragging and dropping building blocks, then editing them to fit your + content and layout needs. + + .. card:: General theme + :target: web_design/themes + :large: + + Customize your website’s theme by adjusting its colors, fonts, and layout. + + .. card:: Elements + :target: web_design/elements + :large: + + Structure and present content effectively with elements such as titles, lists, etc. + + .. card:: Visibility + :target: web_design/visibility + :large: + + Display or hide building blocks based on several criteria. + +.. seealso:: + `Odoo Tutorials: Website `_ + .. toctree:: :titlesonly: diff --git a/content/contributing/development/coding_guidelines.rst b/content/contributing/development/coding_guidelines.rst index b491f1b3ff..d6736e8233 100644 --- a/content/contributing/development/coding_guidelines.rst +++ b/content/contributing/development/coding_guidelines.rst @@ -877,7 +877,7 @@ Symbols and Conventions - When defining *report* model (SQL views e.i.) : use ``.report.``, based on the Transient convention. -- Odoo Python Class : use camelcase (Object-oriented style). +- Odoo Python Class : use Pascal case (Object-oriented style). .. code-block:: python @@ -886,7 +886,7 @@ Symbols and Conventions ... - Variable name : - - use camelcase for model variable + - use Pascal case for model variable - use underscore lowercase notation for common variable. - suffix your variable name with *_id* or *_ids* if it contains a record id or list of id. Don't use ``partner_id`` to contain a record of res.partner @@ -1017,7 +1017,7 @@ Javascript coding guidelines - ``use strict;`` is recommended for all javascript files - Use a linter (jshint, ...) - Never add minified Javascript Libraries -- Use camelcase for class declaration +- Use Pascal case for class declaration More precise JS guidelines are detailed in the `github wiki `_. You may also have a look at existing API in Javascript by looking Javascript diff --git a/content/contributing/development/git_guidelines.rst b/content/contributing/development/git_guidelines.rst index 9323555f14..c5a9f1a52b 100644 --- a/content/contributing/development/git_guidelines.rst +++ b/content/contributing/development/git_guidelines.rst @@ -66,6 +66,8 @@ Tags are used to prefix your commit. They should be one of the following - **[CLA]** for signing the Odoo Individual Contributor License; - **[I18N]** for changes in translation files; - **[PERF]** for performance patches; +- **[CLN]** for code cleanup; +- **[LINT]** for linting passes; After tag comes the modified module name. Use the technical name as functional name may change with time. If several modules are modified, list them or use diff --git a/content/developer/howtos.rst b/content/developer/howtos.rst index f9a14f24e3..eed9af1718 100644 --- a/content/developer/howtos.rst +++ b/content/developer/howtos.rst @@ -14,7 +14,6 @@ How-to guides howtos/frontend_owl_components howtos/website_themes - howtos/web_services howtos/company howtos/create_reports howtos/accounting_localization @@ -69,11 +68,6 @@ Server-side development .. cards:: - .. card:: Web services - :target: howtos/web_services - - Learn more about Odoo's web services. - .. card:: Multi-company guidelines :target: howtos/company diff --git a/content/developer/howtos/standalone_owl_application.rst b/content/developer/howtos/standalone_owl_application.rst index 807b41fe29..880270d20a 100644 --- a/content/developer/howtos/standalone_owl_application.rst +++ b/content/developer/howtos/standalone_owl_application.rst @@ -117,9 +117,9 @@ Now that we have created our assets bundle, we need to create a diff --git a/content/developer/howtos/translations.rst b/content/developer/howtos/translations.rst index 0544ab66e5..fdddf39615 100644 --- a/content/developer/howtos/translations.rst +++ b/content/developer/howtos/translations.rst @@ -176,8 +176,8 @@ Blocks **Do** keep in one block, giving the full context to translators:: # good, allow to change position of the number in the translation - _("You have %s invoices wainting") % len(invoices) - _.str.sprintf(_t("You have %s invoices wainting"), invoices.length); + _("You have %s invoices waiting") % len(invoices) + _.str.sprintf(_t("You have %s invoices waiting"), invoices.length); # good, full sentence is understandable _("Reference of the document that generated " + \ diff --git a/content/developer/howtos/web_services.rst b/content/developer/howtos/web_services.rst deleted file mode 100644 index 14f8deae33..0000000000 --- a/content/developer/howtos/web_services.rst +++ /dev/null @@ -1,148 +0,0 @@ -============ -Web Services -============ - -The web-service module offers a common interface for all web services: - -- XML-RPC -- JSON-RPC - -Business objects can also be accessed via the distributed object -mechanism. They can all be modified via the client interface with contextual -views. - -Odoo is accessible through XML-RPC/JSON-RPC interfaces, for which libraries -exist in many languages. - -XML-RPC Library ---------------- - -The following example is a Python 3 program that interacts with an Odoo -server with the library ``xmlrpc.client``:: - - import xmlrpc.client - - root = 'http://%s:%d/xmlrpc/' % (HOST, PORT) - - uid = xmlrpc.client.ServerProxy(root + 'common').login(DB, USER, PASS) - print("Logged in as %s (uid: %d)" % (USER, uid)) - - # Create a new note - sock = xmlrpc.client.ServerProxy(root + 'object') - args = { - 'color' : 8, - 'memo' : 'This is a note', - 'create_uid': uid, - } - note_id = sock.execute(DB, uid, PASS, 'note.note', 'create', args) - -.. exercise:: Add a new service to the client - - Write a Python program able to send XML-RPC requests to a PC running - Odoo (yours, or your instructor's). This program should display all - the sessions, and their corresponding number of seats. It should also - create a new session for one of the courses. - - .. only:: solutions - - .. code-block:: python - - import functools - import xmlrpc.client - HOST = 'localhost' - PORT = 8069 - DB = 'openacademy' - USER = 'admin' - PASS = 'admin' - ROOT = 'http://%s:%d/xmlrpc/' % (HOST,PORT) - - # 1. Login - uid = xmlrpc.client.ServerProxy(ROOT + 'common').login(DB,USER,PASS) - print("Logged in as %s (uid:%d)" % (USER,uid)) - - call = functools.partial( - xmlrpc.client.ServerProxy(ROOT + 'object').execute, - DB, uid, PASS) - - # 2. Read the sessions - sessions = call('openacademy.session','search_read', [], ['name','seats']) - for session in sessions: - print("Session %s (%s seats)" % (session['name'], session['seats'])) - # 3.create a new session - session_id = call('openacademy.session', 'create', { - 'name' : 'My session', - 'course_id' : 2, - }) - - Instead of using a hard-coded course id, the code can look up a course - by name:: - - # 3.create a new session for the "Functional" course - course_id = call('openacademy.course', 'search', [('name','ilike','Functional')])[0] - session_id = call('openacademy.session', 'create', { - 'name' : 'My session', - 'course_id' : course_id, - }) - -.. seealso:: - - :doc:`../reference/external_api`: The in-depth tutorial on XML-RPC, with examples spanning multiple programming languages. - -JSON-RPC Library ----------------- - -The following example is a Python 3 program that interacts with an Odoo server -with the standard Python libraries ``urllib.request`` and ``json``. This -example assumes the **Productivity** app (``note``) is installed:: - - import json - import random - import urllib.request - - HOST = 'localhost' - PORT = 8069 - DB = 'openacademy' - USER = 'admin' - PASS = 'admin' - - def json_rpc(url, method, params): - data = { - "jsonrpc": "2.0", - "method": method, - "params": params, - "id": random.randint(0, 1000000000), - } - req = urllib.request.Request(url=url, data=json.dumps(data).encode(), headers={ - "Content-Type":"application/json", - }) - reply = json.loads(urllib.request.urlopen(req).read().decode('UTF-8')) - if reply.get("error"): - raise Exception(reply["error"]) - return reply["result"] - - def call(url, service, method, *args): - return json_rpc(url, "call", {"service": service, "method": method, "args": args}) - - # log in the given database - url = "http://%s:%s/jsonrpc" % (HOST, PORT) - uid = call(url, "common", "login", DB, USER, PASS) - - # create a new note - args = { - 'color': 8, - 'memo': 'This is another note', - 'create_uid': uid, - } - note_id = call(url, "object", "execute", DB, uid, PASS, 'note.note', 'create', args) - -Examples can be easily adapted from XML-RPC to JSON-RPC. - -.. note:: - - There are a number of high-level APIs in various languages to access Odoo - systems without *explicitly* going through XML-RPC or JSON-RPC, such as: - - * https://github.com/akretion/ooor - * https://github.com/OCA/odoorpc - * https://github.com/nicolas-van/openerp-client-lib - * http://pythonhosted.org/OdooRPC - * https://github.com/abhishek-jaiswal/php-openerp-lib diff --git a/content/developer/howtos/website_themes/setup.rst b/content/developer/howtos/website_themes/setup.rst index 9d13d60d31..9de7d8e30d 100644 --- a/content/developer/howtos/website_themes/setup.rst +++ b/content/developer/howtos/website_themes/setup.rst @@ -114,15 +114,23 @@ Static vs. Dynamic .. _website_themes/setup/databases/views/standard_vs_inherited : -Standard vs. Inherited -********************** +Base vs. Inherited vs. Duplicated +********************************* -- **Standard views** are base views implemented by Odoo. They are directly derived from their model. - You should never change them as they allow updating an Odoo database without overwriting a - client's modifications. -- **Inherited views** are duplicated views. Modifications always take place in an inherited view. If - there is a duplicate view, there will be two views with the same name in the database, but the - duplicated view will not have an ID like for standard view. +- **Base view:** View natively implemented by Odoo. It is directly derived from their model. + A base view should never be altered as it allows updating an Odoo database without overwriting a + client's modification. + +Modifications always take place in either a duplicated or inherited view with some differences: + +- **Inherited view** always has an `inherit_id` and applies modifications based on the source + code of the base view it inherits from. +- **Duplicated view** is a duplication from another one. Most of the time this kind of view is + created by Odoo when the end-user applies modifications through the Website Builder. This + mechanism prevents data loss when the module is updated because only the source view will be + updated, not the duplicated one. If a duplicated view exists, both the original view and the + duplicated one are visible in the list but only the duplicated one has an `external_id` (an + `external_id` set means that the view has been created by the source code of a module). .. _website_themes/setup/databases/import : @@ -143,7 +151,8 @@ Dump Odoo SaaS ********* -Go to `/saas_worker/dump`. +#. Log in to a user account with sufficient access rights. +#. Go to `/saas_worker/dump`. .. _website_themes/setup/databases/import/sh : diff --git a/content/developer/reference.rst b/content/developer/reference.rst index af531f28ca..65345865b9 100644 --- a/content/developer/reference.rst +++ b/content/developer/reference.rst @@ -17,4 +17,5 @@ Reference reference/cli reference/upgrades reference/external_api + reference/external_rpc_api reference/extract_api diff --git a/content/developer/reference/backend/performance.rst b/content/developer/reference/backend/performance.rst index 17c10f2424..36599a2d00 100644 --- a/content/developer/reference/backend/performance.rst +++ b/content/developer/reference/backend/performance.rst @@ -160,8 +160,7 @@ can access from the top menu. .. important:: Even though the profiler has been designed to be as light as possible, it can still impact - performance, especially when using the :ref:`Sync collector - `. Keep that in mind when analyzing speedscope results. + performance. Keep that in mind when analyzing speedscope results. .. _performance/profiling/collectors: @@ -175,7 +174,7 @@ individually enabled from the user interface through their dedicated toggle butt :ref:`developer mode tools `, or from Python code through their key or class. -There are currently four collectors available in Odoo: +There are currently three collectors available in Odoo: .. list-table:: :header-rows: 1 @@ -196,10 +195,6 @@ There are currently four collectors available in Odoo: - :guilabel:`Record qweb` - `qweb` - `QwebCollector` - * - :ref:`Sync collector ` - - No - - `traces_sync` - - `SyncCollector` By default, the profiler enables the SQL and the Periodic collectors. Both when it is enabled from the user interface or Python code. @@ -252,26 +247,13 @@ It is mainly useful for optimizing views. .. autoclass:: QwebCollector -.. _performance/profiling/collectors/sync: - -Sync collector -~~~~~~~~~~~~~~ - -This collector saves the stack for every function's call and return and runs on the same thread, -which greatly impacts performance. - -It can be useful to debug and understand complex flows, and follow their execution in the code. It -is however not recommended for performance analysis because the overhead is high. - -.. autoclass:: SyncCollector - .. _performance/profiling/pitfalls: Performance pitfalls -------------------- -- Be careful with randomness. Multiple executions may lead to different results. E.g., a garbage - collector being triggered during execution. +- Be careful with randomness. Multiple executions may lead to different results. E.g., other + processes or threads running on the system during the profiling. - Be careful with blocking calls. In some cases, external `c_call` may take some time before releasing the GIL, thus leading to unexpected long frames with the :ref:`Periodic collector `. This should be detected by the profiler and give a diff --git a/content/developer/reference/backend/security.rst b/content/developer/reference/backend/security.rst index 0fea6bfa13..47d7c4f0d6 100644 --- a/content/developer/reference/backend/security.rst +++ b/content/developer/reference/backend/security.rst @@ -383,8 +383,8 @@ While formatting the template differently would prevent such vulnerabilities.
-
-
+
+
diff --git a/content/developer/reference/cli.rst b/content/developer/reference/cli.rst index 3fe68ce757..824eb29c78 100644 --- a/content/developer/reference/cli.rst +++ b/content/developer/reference/cli.rst @@ -34,16 +34,20 @@ environment `, :ref:`scaffold an Odoo module `_. -.. _reference/cmdline/help: +.. _reference/cmdline/extra: -Help & version -============== +Version +======= .. program:: odoo-bin .. option:: -h, --help - shows help text with all available options + it can be used in combination with any command available, and it displays + the options of the current command. + + If no command is used, it will act as per the `help` command + :ref:`below `. .. option:: --version @@ -53,17 +57,29 @@ Help & version .. code-block:: bash - echo "complete -W '`./odoo-bin --help | \ - sed -e 's/[^a-z_-]\(-\+[a-z0-9_-]\+\)/\n\1\n/' | \ - grep -- '^-' | sort | uniq | tr '\n' ' '`' odoo-bin" >> ~/.bash_completion + COMMANDS=$(odoo-bin --help | sed -e "s/^ \([^ ]\+\).*$/ \1/gp;d" | xargs) + echo "complete -W '$COMMANDS' odoo-bin" >> ~/.bash_completion + +.. _reference/cmdline/help: + +`help` - Show available commands +================================ + +.. program:: odoo-bin help + +This command shows all the available commands for Odoo. + +It has no options. .. _reference/cmdline/server: -Running the server -================== +`server` - Run the Server +========================= .. program:: odoo-bin +This command is the default one: you can omit it, and it will be chosen anyway. + .. option:: -d , --database database(s) used when installing or updating modules. @@ -74,8 +90,7 @@ Running the server .. option:: -i , --init - comma-separated list of modules to install before running the server - (requires :option:`-d`). + comma-separated list of modules to install before running the server (requires :option:`-d`). .. option:: -u , --update @@ -169,8 +184,8 @@ Running the server .. _reference/cmdline/testing: -Testing Configuration -===================== +Testing +------- .. option:: --test-enable @@ -371,39 +386,16 @@ Emails Internationalisation -------------------- -Use these options to translate Odoo to another language. See i18n section of -the user manual. Option '-d' is mandatory. Option '-l' is mandatory in case -of importation - .. option:: --load-language specifies the languages (separated by commas) for the translations you want to be loaded -.. option:: -l, --language - - specify the language of the translation file. Use it with --i18n-export - or --i18n-import - -.. option:: --i18n-export - - export all sentences to be translated to a CSV file, a PO file or a TGZ - archive and exit. - -.. option:: --i18n-import - - import a CSV or a PO file with translations and exit. The '-l' option is - required. - .. option:: --i18n-overwrite overwrites existing translation terms on updating a module or importing a CSV or a PO file. -.. option:: --modules - - specify modules to export. Use in combination with --i18n-export - .. _reference/cmdline/advanced: Advanced Options @@ -673,8 +665,6 @@ Some conversions don't match the pattern: ``log_handler``, use that directly in the configuration file * :option:`--smtp` is stored as ``smtp_server`` * :option:`--database` is stored as ``db_name`` -* :option:`--i18n-import` and :option:`--i18n-export` aren't available at all - from configuration files .. _reference/cmdline/config_file: @@ -706,13 +696,15 @@ Here is a sample file: https://werkzeug.palletsprojects.com/en/0.16.x/middleware/proxy_fix/#module-werkzeug.middleware.proxy_fix .. _pyinotify: https://github.com/seb-m/pyinotify/wiki + .. _reference/cmdline/shell: -Shell -===== +`shell` - Open a Shell +====================== The Odoo command line also allows launching Odoo as a Python console environment, enabling direct -interaction with the :ref:`orm ` and its functionalities. +interaction with the :ref:`orm ` and its functionalities. Since running a shell +involves starting the server, the configuration file options do apply. .. code-block:: console @@ -750,13 +742,432 @@ interaction with the :ref:`orm ` and its functionalities. Specify a preferred `REPL` to use in shell mode. This shell is started with the `env` variable already initialized to be able to access the `ORM` and other Odoo modules. + .. seealso:: :ref:`reference/orm/environment` -.. _reference/cmdline/scaffold: -Neutralize -========== +.. _reference/cmdline/db: + +`db` - Manage a Database +======================== + +.. program:: odoo-bin db + +This command lets you manage databases through a command-line interface. The operations are +specified using subcommands. + +For all subcommands, these options to configure your environment are available: + +- :option:`--addons-path ` +- :option:`--config ` +- :option:`--data-dir ` +- :option:`--db_user ` +- :option:`--db_password ` +- :option:`--db_host ` +- :option:`--db_port ` +- :option:`--db_sslmode ` +- :option:`--pg_path ` + + +.. _reference/cmdline/db/init: + +`db init` - Initialize a Database +--------------------------------- + +.. program:: odoo-bin db init + +This command creates a new database and installs the `base` module. You can specify the +language and country of the main company. + +.. code-block:: console + + $ odoo-bin db init + +.. option:: database + + Name of the database to be initialized. + +.. option:: --with-demo + + Install demo data in the initialized database. + +.. option:: --force + + Delete the database if it already exists, before initializing the new one. + +.. option:: --country + + Code of the country to be set on the main company + +.. option:: --language + + Default language for the instance, default `en_US` + +.. option:: --username + + Username for the new database, default `admin` + +.. option:: --password + + Password for the new database, default `admin` + + +.. _reference/cmdline/db/dump: + +`db dump` - Save a Database Dump +-------------------------------- + +.. program:: odoo-bin db dump + +Creates a dump file. + +.. code-block:: console + + $ odoo-bin db dump + +.. option:: database + + Name of the database to dump. + +.. option:: dump_path + + (Optional) Database is dumped to specified path. By default it is dumped + to `stdout`. + +.. option:: --format + + If provided, database is dumped used the specified format. + Supported formats are `zip` (default), `dump` (pg_dump format). + +.. option:: --no-filestore + + If provided, zip database is dumped without filestore + + +.. _reference/cmdline/db/load: + +`db load` - Load a Database Dump +-------------------------------- + +.. program:: odoo-bin db load + +Loads a dump file into an Odoo database, the dump file can be a URL. + +.. code-block:: console + + $ odoo-bin db load + +.. option:: database + + (Optional) Name of the database to create from the dump. + If not provided, the dump filename without extension is used. + +.. option:: dump_file + + `.zip` or `pg_dump` file to be loaded. + +.. option:: -f,--force + + Delete the database if it already exists, before loading the new one. + +.. option:: -n,--neutralize + + Neutralize the database after restoring it. + + +.. _reference/cmdline/db/duplicate: + +`db duplicate` - Duplicate a Database +------------------------------------- + +.. program:: odoo-bin db duplicate + +Duplicate a database including filestore. + +.. code-block:: console + + $ odoo-bin db duplicate + +.. option:: source + + Name of the source database. + +.. option:: target + + Name of the target database. + +.. option:: -n,--neutralize + + Neutralize the database, after restoring it. + +.. option:: -f,--force + + Delete the target database if it already exists, before initializing the new one. + + +.. _reference/cmdline/db/rename: + +`db rename` - Rename a Database +------------------------------- + +.. program:: odoo-bin db rename + +Rename a database from an old name to a new one. + +.. code-block:: console + + $ odoo-bin db rename + +.. option:: source + + Current name of the database. + +.. option:: target + + New name for the database. + +.. option:: -f,--force + + Delete the target database if it already exists, before renaming the source one. + + +.. _reference/cmdline/db/drop: + +`db drop` - Delete a Database +----------------------------- + +.. code-block:: console + + $ odoo-bin db drop + +.. program:: odoo-bin db drop + +.. option:: database + + Name of the database to drop. + + +.. _reference/cmdline/i18n: + +`i18n` - Internationalization +============================= + +.. program:: odoo-bin i18n + +This command has subcommands that enable you to import or export internationalization files +and setup languages on the Odoo instance. + +For all subcommands, these options to configure your environment are available: + +- :option:`--addons-path ` +- :option:`--config ` +- :option:`--database ` + +.. note:: + + Language codes must follow the XPG (POSIX) locale format. + + To list available codes, you can search them querying the database: + + .. code-block:: console + + $ psql -d -c "SELECT iso_code FROM res_lang ORDER BY iso_code" + + .. seealso:: + + `GNU libc Locale Names `_ + + .. example:: + + .. code-block:: console + + $ odoo-bin i18n loadlang -l en # English (U.S.) + $ odoo-bin i18n loadlang -l es es_AR # Spanish (Spain, Argentina) + $ odoo-bin i18n loadlang -l sr@latin # Serbian (Latin) + +.. _reference/cmdline/i18n/import: + +`i18n import` - Import i18n files +--------------------------------- + +.. program:: odoo-bin i18n import + +This command imports provided translation files in the `.po` or `.csv` formats. +By default, only new entries will be added, but you can choose to overwrite +existing terms. All the files must refer to the specified language. + +.. code-block:: console + + $ odoo-bin i18n import --overwrite --language + +.. option:: files + + | List of files to be imported. + | Allowed extensions: `.po`, `.csv`. + +.. option:: -l,--language + + (Required) Language code of the translations in the files. + +.. option:: -w,--overwrite + + Overwrite existing translation when importing. + + + .. _reference/cmdline/i18n/export: + +`i18n export` - Export i18n files +--------------------------------- + +.. program:: odoo-bin i18n export + +This command exports existing translation terms for modules in the Odoo database +to a range of formats: `.po`, `.pot`, `.tgz`, `.csv`. In case of `.po` and `.pot` +files, they will be created under the `i18n/` folder of the module they belong to. +If you specify an output parameter, only one language can be selected, and all +the output will refer to that language. +The `.tgz` output format makes all output be archived in a single file. + +.. code-block:: console + + $ odoo-bin i18n export --languages + +.. option:: modules + + List of modules you want to export the internationalization files from. + +.. option:: -l,--languages + + List of language codes you want to export, `pot` for template (default). + +.. option:: -o,--output + + | Path of an only output file with translations from all provided modules. + | Allowed extensions: `.po`, `.pot`, `.tgz`, `.csv` + | If `-` is provided, the content is written as a `.po` file to stdout. + + Only one language is allowed when this option is active. + + +.. _reference/cmdline/i18n/loadlang: + +`i18n loadlang` - Load language +------------------------------- + +.. program:: odoo-bin i18n loadlang + +This command loads one of the available languages into the Odoo database and activates it. + +.. code-block:: console + + $ odoo-bin i18n loadlang + +.. option:: languages + + language codes of the languages to be installed. + + +.. _reference/cmdline/module: + +`module` - Manage modules +========================= + +.. program:: odoo-bin module + +This command has subcommands that enable you to install, uninstall and upgrade modules +on the Odoo instance. There's also a command to force install the demo data into the +database. + +For all subcommands, these options are available: + +- :option:`--addons-path ` +- :option:`--config ` +- :option:`--database ` + + +.. _reference/cmdline/module/install: + +`module install` - Install modules +---------------------------------- + +.. program:: odoo-bin module install + +This command installs all selected modules straight away. + +Before installing modules, the Odoo database needs to be created and initialized +on your PostgreSQL instance, e.g. using the :ref:`reference/cmdline/db/init` command. + +.. code-block:: console + + $ odoo-bin module install + +.. option:: modules + + List of modules you want to install. + + +.. _reference/cmdline/module/uninstall: + +`module uninstall` - Uninstall modules +-------------------------------------- + +.. program:: odoo-bin module uninstall + +This command uninstalls all selected modules straight away. + +.. code-block:: console + + $ odoo-bin module uninstall + +.. option:: modules + + List of modules you want to uninstall. + + +.. _reference/cmdline/module/upgrade: + +`module upgrade` - Upgrade modules +---------------------------------- + +.. program:: odoo-bin module upgrade + +This command upgrades all selected modules straight away. + +.. code-block:: console + + $ odoo-bin module upgrade + +.. option:: modules + + List of modules you want to upgrade. + +.. option:: --outdated + + Only update modules that have a newer version on disk. + + +.. _reference/cmdline/module`u/forcedemo: + +`module forcedemo` - Force demo data install +-------------------------------------------- + +.. program:: odoo-bin module forcedemo + +This command forces the installation of :ref:`Demo Data ` + +.. warning:: + + Once installed, there is no way to undo it, so you might want to save a backup of the database + first with the command :ref:`db dump ` + +There are no additional options to this command. + + +.. _reference/cmdline/neutralize: + +`neutralize` - Neutralize a Database +==================================== .. program:: odoo-bin neutralize @@ -765,9 +1176,9 @@ database option. .. code-block:: console - $ odoo-bin --addons-path neutralize -d + $ odoo-bin --addons-path neutralize -d -.. option:: -d +.. option:: -d , --database Specify the database name that you would like to neutralize. @@ -779,8 +1190,10 @@ database option. .. seealso:: :doc:`../../administration/neutralized_database` -Scaffolding -=========== +.. _reference/cmdline/scaffold: + +`scaffold` - Scaffold a Module +============================== .. program:: odoo-bin scaffold @@ -815,8 +1228,8 @@ This will create module *my_module* in directory */addons/*. .. _reference/cmdline/populate: -Database population -=================== +`populate` - Populate a Database +================================ .. program:: odoo-bin populate @@ -833,32 +1246,35 @@ It also follows x2Many relationships. name of the database to populate -.. option:: --models +.. option:: --models list of models to populate. Models appearing twice will only be populated once. -.. option:: --factors +.. option:: --factors list of populate factors. In case a factor is missing for a model, the last factor in the list will be used. -.. option:: --sep +.. option:: --sep separator used to generate record names .. _reference/cmdline/cloc: -Cloc -==== +`cloc` - Count Lines of Code +============================ .. program:: odoo-bin cloc -Odoo Cloc is a tool to count the number of relevant lines written in +Odoo Cloc is a tool to count the number of relevant lines of code written in Python, Javascript, CSS, SCSS, or XML. This can be used as a rough metric for pricing maintenance of extra modules. -Command-line options --------------------- +.. code-block:: console + + $ odoo-bin cloc -c config.conf -d my_database + + .. option:: -d , --database | Process the code of all extra modules installed on the provided database, @@ -911,10 +1327,6 @@ Multiple paths can be provided by repeating the option. Specify a configuration file to use in place of the :option:`--addons-path` option. -.. code-block:: console - - $ odoo-bin cloc -c config.conf -d my_database - .. option:: -v, --verbose @@ -1003,20 +1415,198 @@ load. If the module works despite the presence of those files, they are probably not loaded and should therefore be removed from the module, or at least excluded in the manifest via ``cloc_exclude``. -TSConfig Generator -================== -.. program:: odoo-bin tsconfig +.. _reference/cmdline/obfuscate: + +`obfuscate` - Obfuscate database +================================ + +.. program:: odoo-bin obfuscate -When working on javascript, there are ways to help your editor providing you with -powerful auto-completion. One of those ways is the use of a tsconfig.json file. -Originally meant for typescript, editors can use its information with plain javascript also. -With this config file, you will now have full auto-completion across modules. +This command provides a quick and easy way to obfuscate some of the data in the +Odoo instance, mainly used for instructional purposes or to make quick videos for +the support team helping technicians avoid leaking sensitive information. -The command to generate this files takes as many unnamed arguments as you need. Those are relative paths -to your addon directories. In the example below, we move up one folder to save the tsconfig file in the folder -containing community and enterprise. +.. warning:: + + This command must be used carefully, as it is **not** considered a safe method + for full anonymizing data before transfer to a third party. Images, PDF + attachments, amounts, many other informations may not be obfuscated and cause + sensitive information leaks. A thorough review is required before sharing data + to ensure that no sensitive information is exposed. + +Obfuscation is symmetric, so content can be unobfuscated using the same password. + +All the configurations available for the :ref:`server ` +command are available here too. + +.. code-block:: console + + $ odoo-bin obfuscate --pwd= + +.. option:: --pwd + + (Required) the password that will be used to symmetrically obfuscate content. + +.. option:: --unobfuscate + + if you want to unobfuscate instead of obfuscate. + +.. option:: --fields + + comma-separated list of `table.column` entries to obfuscate/unobfuscate. + +.. option:: --file + + file containing the list of `table.column` entries to obfuscate/unobfuscate. + +.. option:: --exclude + + comma-separated list of `table.column` entries not to obfuscate/unobfuscate. + +.. option:: --allfields + + used only when :option:`--unobfuscate` is selected. + + Try to unobfuscate all fields. It's slower than specifying the fields manually. + +.. option:: --vacuum + + used only when :option:`--unobfuscate` is selected. + + After unobfuscation, completely clear the obfuscated tables and reclaim unused disk space. + +.. option:: --pertablecommit + + commit once per table, after obfuscation. + + It avoids big transactions that might get a timeout or face rollback after an error. + +.. option:: -y,--yes + + don't ask for manual confirmation. + + Only use if you're sure that you're not going to leak sensible information by sharing + the database to third party without a review. + + +.. _reference/cmdline/deploy: + +`deploy` - Deploy module remotely +================================= + +.. program:: odoo-bin deploy + +This command uploads a module to a remote Odoo server and installs it. +It's simpler than manually connecting to the remote server, and it does not require full access +to the machine that hosts the Odoo instance, only the Odoo administrative credentials. + +.. code-block:: console + + $ odoo-bin deploy --db --login --password + +.. note:: + + Prerequisites: + + - The server must have the module `base_import_module` installed. + - The user selected with the `--login` option must have administrative rights. + +.. option:: path + + path of the module to be deployed + +.. option:: url + + (Optional) url of the server where the module must be deployed + (default `http://localhost:8069`) + +.. option:: db + + database name (if the server does not use the `--db-filter` option) + +.. option:: --login + + name of the user with admin rights (default `admin`) + +.. option:: --password + + password of the user with admin rights (default `admin`) + +.. option:: --verify-ssl + + verify the server's SSL certificate, to ensure the target instance is legit. + +.. option:: --force + + re-initialize the module in case it's already installed. It will update + `noupdate="1"` records. + + +.. _reference/cmdline/upgrade_code: + +`upgrade_code` - Rewrite source code +==================================== + +.. program:: odoo-bin upgrade_code + +This command rewrites the entire source code using the scripts found in the +`odoo/upgrade_code` folder. It is used for doing the heavy-lifting when +dealing with big code migrations and forward ports. + +.. note:: + + All the scripts are doing a best-effort at migrating the source code, but + they are not silver bullets. + +It accepts the :option:`--addons-path ` option. .. code-block:: console - $ community/odoo-bin tsconfig --addons-path community/addons,community/odoo/addons,enterprise > tsconfig.json + $ odoo-bin upgrade_code --from 18.0 --to 19.0 --dry-run + +.. option:: --script + + run a single script + +.. option:: --from + + run all script starting from this version included + +.. option:: --to + + to be used with :option:`--from`. Run all scripts up to this version included. + Default is `odoo.release.version`. + +.. option:: --glob + + filter the files to be rewritten, default is every file (`\*\*/\*`) + +.. option:: --dry-run + + list the files that would be re-written, but do not apply changes + +Code upgrade scripts +-------------------- + +The scripts must be named `{version}-{name}.py`, and must expose an `upgrade` +function that takes a single `file_manager` argument and have no return. + +The `file_manager` argument is a sequence of `files`, which have 3 attributes +and some helper methods: + +- `path`: the `pathlib.Path` where the file is on the file system. +- `addon`: the addon the file belongs to. +- `content`: the re-writtable content of the file (lazy). +- `print_progress(current, total)`: outputs the current progress. + +.. example:: + + .. code-block:: python + + def upgrade(file_manager): + files = (file for file in file_manager if file.path.suffix == '.py') + for fileno, file in enumerate(files, start=1): + file.content = file.content.replace(..., ...) + file_manager.print_progress(fileno, len(files)) + diff --git a/content/developer/reference/external_api.rst b/content/developer/reference/external_api.rst index ba37db0cec..9d520f3bf9 100644 --- a/content/developer/reference/external_api.rst +++ b/content/developer/reference/external_api.rst @@ -1,16 +1,16 @@ -============ -External API -============ +=================== +External JSON-2 API +=================== -Odoo is usually extended internally via modules, but many of its features and -all of its data are also available from the outside for external analysis or -integration with various tools. Part of the :ref:`reference/orm/model` API is -easily available over XML-RPC_ and accessible from a variety of languages. +.. versionadded:: 19.0 -.. important:: - Starting with PHP8, the XML-RPC extension may not be available by default. - Check out the `manual `_ - for the installation steps. +Odoo is usually extended internally via modules, but many of its features and all of its data are +also available externally for analysis or integration with various other softwares. Part of the +:ref:`reference/orm/model` API is easily available over HTTP via the ``/json/2`` endpoint. + +.. tip:: + The actual models, fields and methods available are specific to every database and can be + consulted on their ``/doc`` page. .. note:: Access to data via the external API is only available on *Custom* Odoo pricing plans. Access to @@ -18,1445 +18,533 @@ easily available over XML-RPC_ and accessible from a variety of languages. visit the `Odoo pricing page `_ or reach out to your Customer Success Manager. -.. seealso:: - - :doc:`Tutorial on web services <../howtos/web_services>` - -Connection -========== - -Configuration -------------- - -If you already have an Odoo server installed, you can just use its parameters. - -.. important:: - - For Odoo Online instances (.odoo.com), users are created without a - *local* password (as a person you are logged in via the Odoo Online - authentication system, not by the instance itself). To use XML-RPC on Odoo - Online instances, you will need to set a password on the user account you - want to use: - - * Log in your instance with an administrator account. - * Go to :menuselection:`Settings --> Users & Companies --> Users`. - * Click on the user you want to use for XML-RPC access. - * Click on :guilabel:`Action` and select :guilabel:`Change Password`. - * Set a :guilabel:`New Password` value then click :guilabel:`Change Password`. - - The *server url* is the instance's domain (e.g. - *https://mycompany.odoo.com*), the *database name* is the name of the - instance (e.g. *mycompany*). The *username* is the configured user's login - as shown by the *Change Password* screen. - -.. tabs:: - - .. code-tab:: python - - url = - db = - username = 'admin' - password = - - .. code-tab:: ruby - - url = - db = - username = "admin" - password = - - .. code-tab:: php - - $url = ; - $db = ; - $username = "admin"; - $password = ; - - .. code-tab:: java - - final String url = , - db = , - username = "admin", - password = ; - - .. code-tab:: go - - var ( - url = - db = - username = "admin" - password = - ) - -.. _api/external_api/keys: - -API Keys -~~~~~~~~ - -.. versionadded:: 14.0 - -Odoo has support for **api keys** and (depending on modules or settings) may -**require** these keys to perform webservice operations. - -The way to use API Keys in your scripts is to simply replace your **password** -by the key. The login remains in-use. You should store the API Key as carefully -as the password as they essentially provide the same access to your user -account (although they can not be used to log-in via the interface). - -In order to add a key to your account, simply go to your -:guilabel:`Preferences` (or :guilabel:`My Profile`): - -.. image:: external_api/preferences.png - :align: center - -then open the :guilabel:`Account Security` tab, and click -:guilabel:`New API Key`: - -.. image:: external_api/account-security.png - :align: center - -Input a description for the key, **this description should be as clear and -complete as possible**: it is the only way you will have to identify your keys -later and know whether you should remove them or keep them around. - -Click :guilabel:`Generate Key`, then copy the key provided. **Store this key -carefully**: it is equivalent to your password, and just like your password -the system will not be able to retrieve or show the key again later on. If you lose -this key, you will have to create a new one (and probably delete the one you -lost). - -Once you have keys configured on your account, they will appear above the -:guilabel:`New API Key` button, and you will be able to delete them: - -.. image:: external_api/delete-key.png - :align: center - -**A deleted API key can not be undeleted or re-set**. You will have to generate -a new key and update all the places where you used the old one. - -Test database -~~~~~~~~~~~~~ - -To make exploration simpler, you can also ask https://demo.odoo.com for a test -database: - -.. tabs:: - - .. code-tab:: python - - import xmlrpc.client - info = xmlrpc.client.ServerProxy('https://demo.odoo.com/start').start() - url, db, username, password = info['host'], info['database'], info['user'], info['password'] - - .. code-tab:: ruby - - require "xmlrpc/client" - info = XMLRPC::Client.new2('https://demo.odoo.com/start').call('start') - url, db, username, password = info['host'], info['database'], info['user'], info['password'] - - .. group-tab:: PHP - - .. code-block:: php - - require_once('ripcord.php'); - $info = ripcord::client('https://demo.odoo.com/start')->start(); - list($url, $db, $username, $password) = array($info['host'], $info['database'], $info['user'], $info['password']); - - .. note:: - These examples use the `Ripcord `_ - library, which provides a simple XML-RPC API. Ripcord requires that - `XML-RPC support be enabled - `_ in your PHP - installation. - - Since calls are performed over - `HTTPS `_, it also requires that - the `OpenSSL extension - `_ be enabled. - - .. group-tab:: Java - - .. code-block:: java - - final XmlRpcClient client = new XmlRpcClient(); - - final XmlRpcClientConfigImpl start_config = new XmlRpcClientConfigImpl(); - start_config.setServerURL(new URL("https://demo.odoo.com/start")); - final Map info = (Map)client.execute( - start_config, "start", emptyList()); - - final String url = info.get("host"), - db = info.get("database"), - username = info.get("user"), - password = info.get("password"); - - .. note:: - These examples use the `Apache XML-RPC library `_. - - The examples do not include imports as these imports couldn't be - pasted in the code. - - .. group-tab:: Go - - .. code-block:: go +API +=== - client, err := xmlrpc.NewClient("https://demo.odoo.com/start", nil) - if err != nil { - log.Fatal(err) - } - info := map[string]string{} - client.Call("start", nil, &info) - url = info["host"].(string) - db = info["database"].(string) - username = info["user"].(string) - password = info["password"].(string) +.. _reference/external_api/request: - .. note:: - These examples use the `github.com/kolo/xmlrpc library `_. +Request +------- - The examples do not include imports as these imports couldn't be - pasted in the code. +Post a JSON object at the ``/json/2//`` URL. -Logging in ----------- +**HTTP Headers** -Odoo requires users of the API to be authenticated before they can query most -data. +:Host: Required, the hostname of the server. +:Autorization: Required, ``bearer`` followed by an :ref:`API key `. +:Content-Type: Required, ``application/json``, a charset is recommended. +:X-Odoo-Database: Optional, the name of the database to connect to. +:User-Agent: Recommended, the name of your software. -The ``xmlrpc/2/common`` endpoint provides meta-calls which don't require -authentication, such as the authentication itself or fetching version -information. To verify if the connection information is correct before trying -to authenticate, the simplest call is to ask for the server's version. The -authentication itself is done through the ``authenticate`` function and -returns a user identifier (``uid``) used in authenticated calls instead of -the login. +**URL Path** -.. tabs:: - - .. code-tab:: python - - common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url)) - common.version() - - .. code-tab:: ruby - - common = XMLRPC::Client.new2("#{url}/xmlrpc/2/common") - common.call('version') - - .. code-tab:: php - - $common = ripcord::client("$url/xmlrpc/2/common"); - $common->version(); - - .. code-tab:: java - - final XmlRpcClientConfigImpl common_config = new XmlRpcClientConfigImpl(); - common_config.setServerURL(new URL(String.format("%s/xmlrpc/2/common", url))); - client.execute(common_config, "version", emptyList()); - - .. code-tab:: go - - client, err := xmlrpc.NewClient(fmt.Sprintf("%s/xmlrpc/2/common", url), nil) - if err != nil { - log.Fatal(err) - } - common := map[string]any{} - if err := client.Call("version", nil, &common); err != nil { - log.Fatal(err) - } - -Result: - -.. code-block:: json - - { - "server_version": "13.0", - "server_version_info": [13, 0, 0, "final", 0], - "server_serie": "13.0", - "protocol_version": 1, - } - - -.. tabs:: - - .. code-tab:: python - - uid = common.authenticate(db, username, password, {}) - - .. code-tab:: ruby - - uid = common.call('authenticate', db, username, password, {}) - - .. code-tab:: php - - $uid = $common->authenticate($db, $username, $password, array()); - - .. code-tab:: java - - int uid = (int)client.execute(common_config, "authenticate", asList(db, username, password, emptyMap())); - - .. code-tab:: go - - var uid int64 - if err := client.Call("authenticate", []any{ - db, username, password, - map[string]any{}, - }, &uid); err != nil { - log.Fatal(err) - } +:model: Required, the technical model name. +:method: Required, the method to execute. -.. _api/external_api/calling_methods: +**Body JSON object** -Calling methods -=============== - -The second endpoint is ``xmlrpc/2/object``. It is used to call methods of odoo -models via the ``execute_kw`` RPC function. - -Each call to ``execute_kw`` takes the following parameters: - -* the database to use, a string -* the user id (retrieved through ``authenticate``), an integer -* the user's password, a string -* the model name, a string -* the method name, a string -* an array/list of parameters passed by position -* a mapping/dict of parameters to pass by keyword (optional) +:ids: An array of record ids on which to execute the method. Empty or omitted when calling an + ``@api.model``-decorated method. +:context: Optional, an object of additional values. e.g. ``{"lang": "en_US"}``. +:*param*: As many time as needed, the method's parameters. .. example:: - - For instance, to search for records in the ``res.partner`` model, we can call - ``name_search`` with ``name`` passed by position and ``limit`` passed by - keyword (in order to get maximum 10 results): - - .. tabs:: - - .. code-tab:: python - - models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url)) - models.execute_kw(db, uid, password, 'res.partner', 'name_search', ['foo'], {'limit': 10}) - - .. code-tab:: ruby - - models = XMLRPC::Client.new2("#{url}/xmlrpc/2/object").proxy - models.execute_kw(db, uid, password, 'res.partner', 'name_search', ['foo'], {limit: 10}) - - .. code-tab:: php - - $models = ripcord::client("$url/xmlrpc/2/object"); - $models->execute_kw($db, $uid, $password, 'res.partner', 'name_search', array('foo'), array('limit' => 10)); - - .. code-tab:: java - - final XmlRpcClient models = new XmlRpcClient() {{ - setConfig(new XmlRpcClientConfigImpl() {{ - setServerURL(new URL(String.format("%s/xmlrpc/2/object", url))); - }}); - }}; - models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "name_search", - asList("foo"), - new HashMap() {{ put("limit", 10); }} - )); - - .. code-tab:: go - - models, err := xmlrpc.NewClient(fmt.Sprintf("%s/xmlrpc/2/object", url), nil) - if err != nil { - log.Fatal(err) - } - var result bool - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "name_search", - []string{"foo"}, - map[string]bool{"limit": 10}, - }, &result); err != nil { - log.Fatal(err) - } - - Result: - - .. code-block:: json - - true - -List records ------------- - -Records can be listed and filtered via :meth:`~odoo.models.Model.search`. - -:meth:`~odoo.models.Model.search` takes a mandatory -:ref:`domain ` filter (possibly empty), and returns the -database identifiers of all records matching the filter. + .. code:: http + + POST /json/2/res.partner/search_read HTTP/1.1 + Host: mycompany.example.com + X-Odoo-Database: mycompany + Authorization: bearer 6578616d706c65206a736f6e20617069206b6579 + Content-Type: application/json; charset=utf-8 + User-Agent: mysoftware python-requests/2.25.1 + + { + "context": { + "lang": "en_US" + }, + "domain": [ + ["name", "ilike", "%deco%"], + ["is_company", "=", true] + ], + "fields": ["name"] + } + +.. _reference/external_api/response: + +Response +-------- + +In case of **success**, a **200** status with the JSON-serialized return value of the called method +in the body. .. example:: + .. code:: http - To list customer companies, for instance: - - .. tabs:: - - .. code-tab:: python - - models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', True]]]) - - .. code-tab:: ruby - - models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', true]]]) - - .. code-tab:: php - - $models->execute_kw($db, $uid, $password, 'res.partner', 'search', array(array(array('is_company', '=', true)))); - - .. code-tab:: java + HTTP/1.1 200 OK + Content-Type: application/json; charset=utf-8 - asList((Object[])models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "search", - asList(asList( - asList("is_company", "=", true))) - ))); - - .. code-tab:: go - - var records []int64 - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "search", - []any{[]any{ - []any{"is_company", "=", true}, - }}, - }, &records); err != nil { - log.Fatal(err) - } - - Result: - - .. code-block:: json - - [7, 18, 12, 14, 17, 19, 8, 31, 26, 16, 13, 20, 30, 22, 29, 15, 23, 28, 74] - -Pagination -~~~~~~~~~~ - -By default a search will return the ids of all records matching the -condition, which may be a huge number. ``offset`` and ``limit`` parameters are -available to only retrieve a subset of all matched records. - -.. example:: - - .. tabs:: - - .. code-tab:: python - - models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', True]]], {'offset': 10, 'limit': 5}) - - .. code-tab:: ruby - - models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', true]]], {offset: 10, limit: 5}) - - .. code-tab:: php - - $models->execute_kw($db, $uid, $password, 'res.partner', 'search', array(array(array('is_company', '=', true))), array('offset'=>10, 'limit'=>5)); - - .. code-tab:: java - - asList((Object[])models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "search", - asList(asList( - asList("is_company", "=", true))), - new HashMap() {{ put("offset", 10); put("limit", 5); }} - ))); - - .. code-tab:: go - - var records []int64 - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "search", - []any{[]any{ - []any{"is_company", "=", true}, - }}, - map[string]int64{"offset": 10, "limit": 5}, - }, &records); err != nil { - log.Fatal(err) - } - - Result: - - .. code-block:: json - - [13, 20, 30, 22, 29] - -Count records -------------- - -Rather than retrieve a possibly gigantic list of records and count them, -:meth:`~odoo.models.Model.search_count` can be used to retrieve -only the number of records matching the query. It takes the same -:ref:`domain ` filter as -:meth:`~odoo.models.Model.search` and no other parameter. - -.. example:: - - .. tabs:: - - .. code-tab:: python - - models.execute_kw(db, uid, password, 'res.partner', 'search_count', [[['is_company', '=', True]]]) - - .. code-tab:: ruby - - models.execute_kw(db, uid, password, 'res.partner', 'search_count', [[['is_company', '=', true]]]) - - .. code-tab:: php - - $models->execute_kw($db, $uid, $password, 'res.partner', 'search_count', array(array(array('is_company', '=', true)))); - - .. code-tab:: java - - (Integer)models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "search_count", - asList(asList( - asList("is_company", "=", true))) - )); - - .. code-tab:: go - - var counter int64 - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "search_count", - []any{[]any{ - []any{"is_company", "=", true}, - }}, - }, &counter); err != nil { - log.Fatal(err) - } - - Result: - - .. code-block:: json - - 19 - -.. note:: - Calling ``search`` then ``search_count`` (or the other way around) may not - yield coherent results if other users are using the server: stored data - could have changed between the calls. + [ + {"id": 25, "name": "Deco Addict"} + ] -Read records ------------- +In case of **error**, a **4xx**/**5xx** status with a JSON-serialized error object in the body. -Record data are accessible via the :meth:`~odoo.models.Model.read` method, -which takes a list of ids (as returned by -:meth:`~odoo.models.Model.search`), and optionally a list of fields to -fetch. By default, it fetches all the fields the current user can read, -which tends to be a huge amount. +:name: The fully qualified name of the Python exception that occured. +:message: The exception message, usually the same as `arguments[0]`. +:arguments: All the exception arguments. +:context: The context used by the request. +:debug: The exception traceback, for debugging purpose. .. example:: .. tabs:: - .. code-tab:: python - - ids = models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', True]]], {'limit': 1}) - [record] = models.execute_kw(db, uid, password, 'res.partner', 'read', [ids]) - # count the number of fields fetched by default - len(record) - - .. code-tab:: ruby - - ids = models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', true]]], {limit: 1}) - record = models.execute_kw(db, uid, password, 'res.partner', 'read', [ids]).first - # count the number of fields fetched by default - record.length - - .. code-tab:: php - - $ids = $models->execute_kw($db, $uid, $password, 'res.partner', 'search', array(array(array('is_company', '=', true))), array('limit'=>1)); - $records = $models->execute_kw($db, $uid, $password, 'res.partner', 'read', array($ids)); - // count the number of fields fetched by default - count($records[0]); - - .. code-tab:: java - - final List ids = asList((Object[])models.execute( - "execute_kw", asList( - db, uid, password, - "res.partner", "search", - asList(asList( - asList("is_company", "=", true))), - new HashMap() {{ put("limit", 1); }}))); - final Map record = (Map)((Object[])models.execute( - "execute_kw", asList( - db, uid, password, - "res.partner", "read", - asList(ids) - ) - ))[0]; - // count the number of fields fetched by default - record.size(); - - .. code-tab:: go - - var ids []int64 - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "search", - []any{[]any{ - []any{"is_company", "=", true}, - }}, - map[string]int64{"limit": 1}, - }, &ids); err != nil { - log.Fatal(err) - } - var records []any - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "read", - ids, - }, &records); err != nil { - log.Fatal(err) - } - // count the number of fields fetched by default - count := len(records) - - Result: - - .. code-block:: json - - 121 - - Conversely, picking only three fields deemed interesting. + .. tab:: HTTP + .. code:: http + + HTTP/1.1 401 Unauthorized + Content-Type: application/json; charset=utf-8 + + { + "name": "werkzeug.exceptions.Unauthorized", + "message": "Invalid apikey", + "arguments": ["Invalid apikey", 401], + "context": {}, + "debug": "Traceback (most recent call last):\n File \"/opt/Odoo/community/odoo/http.py\", line 2212, in _transactioning\n return service_model.retrying(func, env=self.env)\n File \"/opt/Odoo/community/odoo/service/model.py\", line 176, in retrying\n result = func()\n File \"/opt/Odoo/community/odoo/http.py\", line 2177, in _serve_ir_http\n self.registry['ir.http']._authenticate(rule.endpoint)\n File \"/opt/Odoo/community/odoo/addons/base/models/ir_http.py\", line 274, in _authenticate\n cls._authenticate_explicit(auth)\n File \"/opt/Odoo/community/odoo/addons/base/models/ir_http.py\", line 283, in _authenticate_explicit\n getattr(cls, f'_auth_method_{auth}')()\n File \"/opt/Odoo/community/odoo/addons/base/models/ir_http.py\", line 240, in _auth_method_bearer\n raise werkzeug.exceptions.Unauthorized(\nwerkzeug.exceptions.Unauthorized: 401 Unauthorized: Invalid apikey\n" + } + + .. tab:: Debug + .. code:: + + Traceback (most recent call last): + File "/opt/Odoo/community/odoo/http.py", line 2212, in _transactioning + return service_model.retrying(func, env=self.env) + File "/opt/Odoo/community/odoo/service/model.py", line 176, in retrying + result = func() + File "/opt/Odoo/community/odoo/http.py", line 2177, in _serve_ir_http + self.registry['ir.http']._authenticate(rule.endpoint) + File "/opt/Odoo/community/odoo/addons/base/models/ir_http.py", line 274, in _authenticate + cls._authenticate_explicit(auth) + File "/opt/Odoo/community/odoo/addons/base/models/ir_http.py", line 283, in _authenticate_explicit + getattr(cls, f'_auth_method_{auth}')() + File "/opt/Odoo/community/odoo/addons/base/models/ir_http.py", line 240, in _auth_method_bearer + raise werkzeug.exceptions.Unauthorized( + werkzeug.exceptions.Unauthorized: 401 Unauthorized: Invalid apikey - .. tabs:: - - .. code-tab:: python - - models.execute_kw(db, uid, password, 'res.partner', 'read', [ids], {'fields': ['name', 'country_id', 'comment']}) - - .. code-tab:: ruby - - models.execute_kw(db, uid, password, 'res.partner', 'read', [ids], {fields: %w(name country_id comment)}) - - .. code-tab:: php - - $models->execute_kw($db, $uid, $password, 'res.partner', 'read', array($ids), array('fields'=>array('name', 'country_id', 'comment'))); - - .. code-tab:: java - - asList((Object[])models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "read", - asList(ids), - new HashMap() {{ - put("fields", asList("name", "country_id", "comment")); - }} - ))); - - .. code-tab:: go +Configuration +============= - var recordFields []map[string]any - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "read", - ids, - map[string][]string{ - "fields": {"name", "country_id", "comment"}, - }, - }, &recordFields); err != nil { - log.Fatal(err) - } +.. _reference/external_api/api_key: - Result: +API Key +------- - .. code-block:: json +An API key must be set in the ``Authorization`` request header, as a bearer token. - [{"comment": false, "country_id": [21, "Belgium"], "id": 7, "name": "Agrolait"}] +Create a new API key for a user via :menuselection:`Preferences --> Account Security --> +New API Key`. -.. note:: - Even if the ``id`` field is not requested, it is always returned. +.. have the three images appear next to each other +.. list-table:: -List record fields ------------------- + * - .. image:: external_api/preferences2.png + :align: center -:meth:`~odoo.models.Model.fields_get` can be used to inspect -a model's fields and check which ones seem to be of interest. + - .. image:: external_api/account-security2.png + :align: center -Because it returns a large amount of meta-information (it is also used by client -programs) it should be filtered before printing, the most interesting items -for a human user are ``string`` (the field's label), ``help`` (a help text if -available) and ``type`` (to know which values to expect, or to send when -updating a record). + - .. image:: external_api/new-api-key.png + :align: center -.. example:: - - .. tabs:: +Both a description and a duration are needed to create a new API key. The description makes it +possible to identify the key, and to determine later whether the key is still in use or should be +removed. The duration determines the lifetime of the key, after which the key becomes invalid. It is +recommended to set a short duration (typically one day) for interactive usage. For security reasons, +it is not possible to create keys that last for more than three months. This means that long lasting +keys must be rotated at least once every three months. - .. code-tab:: python +The :guilabel:`Generate Key` button creates a strong 160-bits random key. The key value is displayed +only once during creation and cannot be retrieved later. Copy the key immediately and store it +securely. If the key is compromised or lost, delete it immediately and generate a new one. - models.execute_kw(db, uid, password, 'res.partner', 'fields_get', [], {'attributes': ['string', 'help', 'type']}) +Please refer to `OWASP's Secrets Management Cheat Sheet +`_ +for further guidance on the management of API keys. - .. code-tab:: ruby +.. _reference/external_api/access_rights: - models.execute_kw(db, uid, password, 'res.partner', 'fields_get', [], {attributes: %w(string help type)}) - - .. code-tab:: php - - $models->execute_kw($db, $uid, $password, 'res.partner', 'fields_get', array(), array('attributes' => array('string', 'help', 'type'))); - - .. code-tab:: java +Access Rights +------------- - (Map>)models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "fields_get", - emptyList(), - new HashMap() {{ - put("attributes", asList("string", "help", "type")); - }} - )); +The JSON-2 API uses the standard :ref:`security models of Odoo `. All operations +are validated against the access rights, record rules and field accesses of the user. - .. code-tab:: go +For **interactive usage**, such as discovering the API or running one-time scripts, it is fine to +use a **personal account**. - recordFields := map[string]string{} - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "fields_get", - []any{}, - map[string][]string{ - "attributes": {"string", "help", "type"}, - }, - }, &recordFields); err != nil { - log.Fatal(err) - } +For **extended automated usage**, such as an integration with another software, it is recommended to +create and use **dedicated bot users**. Using dedicated bot users has several benefits: - Result: +* The minimum required permissions can be granted to the bot, limiting the impact if the API key + gets compromised. +* The password can be set empty to disable login/password authentication, limiting the likelihood + of the account getting compromised. +* The :ref:`reference/fields/automatic/log_access` use the bot account. No user is impersonalized. - .. code-block:: json +.. _reference/external_api/database: - { - "ean13": { - "type": "char", - "help": "BarCode", - "string": "EAN13" - }, - "property_account_position_id": { - "type": "many2one", - "help": "The fiscal position will determine taxes and accounts used for the partner.", - "string": "Fiscal Position" - }, - "signup_valid": { - "type": "boolean", - "help": "", - "string": "Signup Token is Valid" - }, - "date_localization": { - "type": "date", - "help": "", - "string": "Geo Localization Date" - }, - "ref_company_ids": { - "type": "one2many", - "help": "", - "string": "Companies that refers to partner" - }, - "sale_order_count": { - "type": "integer", - "help": "", - "string": "# of Sales Order" - }, - "purchase_order_count": { - "type": "integer", - "help": "", - "string": "# of Purchase Order" - }, +Database +-------- -Search and read ---------------- +Depending on the deployment, the ``Host`` and/or ``X-Odoo-Database`` request headers might be +required. The ``Host`` header is required by HTTP/1.1 and is needed on servers where Odoo is +installed next to other web applications, so that a web-server/reverse-proxy is able to route the +request to the Odoo server. The ``X-Odoo-Database`` header is required when a single Odoo server +hosts multiple databases and the :ref:`dbfilter` wasn't configured to use the ``Host`` header. -Because it is a very common task, Odoo provides a -:meth:`~odoo.models.Model.search_read` shortcut which, as its name suggests, is -equivalent to a :meth:`~odoo.models.Model.search` followed by a -:meth:`~odoo.models.Model.read`, but avoids having to perform two requests -and keep ids around. +Most HTTP client libraries automatically set the ``Host`` header using the connection URL. -Its arguments are similar to :meth:`~odoo.models.Model.search`'s, but it -can also take a list of ``fields`` (like :meth:`~odoo.models.Model.read`, -if that list is not provided it will fetch all fields of matched records). +.. _reference/external_api/transaction: -.. example:: +Transaction +=========== - .. tabs:: +All calls to the JSON-2 endpoint run in their own SQL transaction. The transaction is committed in +case of success and is discarded in case of error. Using the JSON-2 API, it is not possible to chain +multiple calls inside a single transaction. It means that one must be cautious when making multiple +consecutive calls, as the database might be modified by other concurrent transactions. This is +especially dangerous when performing operations related to reservations, payments, and such. - .. code-tab:: python +The solution is to always call a single method that performs all the related operations in a single +transaction. This way, the data is guaranteed to stay consistent: either everything is done +(success, commit), or nothing is done (error, rollback). - models.execute_kw(db, uid, password, 'res.partner', 'search_read', [[['is_company', '=', True]]], {'fields': ['name', 'country_id', 'comment'], 'limit': 5}) +In the ORM, the ``search_read`` method is an example of a single method that performs multiple +operations (``search`` then ``read``) in a single transaction. If a concurrent request removes one +of the records ``search`` retrieves, then there is a risk that subsequent calls to ``read`` fail for +a missing record error. Such a problem cannot occur in ``search_read``, as the system guarantees +proper isolation between transactions. - .. code-tab:: ruby +In business models, those methods are often prefixed by ``action_``, such as +``sale.order``'s ``action_confirm`` method, which verifies that a sales order is valid before +confirming it. - models.execute_kw(db, uid, password, 'res.partner', 'search_read', [[['is_company', '=', true]]], {fields: %w(name country_id comment), limit: 5}) +When no method exists for a set of related operations, a new one can be created in a dedicated +module. - .. code-tab:: php +.. seealso:: + - :doc:`Tutorial to create a module <../tutorials/server_framework_101>` + - PostgreSQL - Transaction Isolation - `Repeatable Read + `_ - $models->execute_kw($db, $uid, $password, 'res.partner', 'search_read', array(array(array('is_company', '=', true))), array('fields'=>array('name', 'country_id', 'comment'), 'limit'=>5)); +.. _reference/external_api/code_example: - .. code-tab:: java +Code Example +============ - asList((Object[])models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "search_read", - asList(asList( - asList("is_company", "=", true))), - new HashMap() {{ - put("fields", asList("name", "country_id", "comment")); - put("limit", 5); - }} - ))); +The following examples showcase how to execute two of the :ref:`common ORM methods +` on a dummy database ``mycompany`` hosted on the dummy website +``https://mycompany.example.com``. Its :ref:`dynamic documentation +` would be available at https://mycompany.example.com/doc. - .. code-tab:: go +.. tabs:: - var recordFields []map[string]any - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "search_read", - []any{[]any{ - []any{"is_company", "=", true}, - }}, - map[string]any{ - "fields": []string{"name", "country_id", "comment"}, - "limit": 5, - }, - }, &recordFields); err != nil { - log.Fatal(err) - } + .. code-tab:: python - Result: + import requests - .. code-block:: json + BASE_URL = "https://mycompany.example.com/json/2" + API_KEY = ... # get it from a secure location + headers = { + "Authorization": f"bearer {API_KEY}", + "X-Odoo-Database": "mycompany", + "User-Agent": "mysoftware " + requests.utils.default_user_agent(), + } - [ - { - "comment": false, - "country_id": [ 21, "Belgium" ], - "id": 7, - "name": "Agrolait" - }, - { - "comment": false, - "country_id": [ 76, "France" ], - "id": 18, - "name": "Axelor" + res_search = requests.post( + f"{BASE_URL}/res.partner/search", + headers=headers, + json={ + "context": {"lang": "en_US"}, + "domain": [ + ("name", "ilike", "%deco%"), + ("is_company", "=", True), + ], }, - { - "comment": false, - "country_id": [ 233, "United Kingdom" ], - "id": 12, - "name": "Bank Wealthy and sons" - }, - { - "comment": false, - "country_id": [ 105, "India" ], - "id": 14, - "name": "Best Designers" - }, - { - "comment": false, - "country_id": [ 76, "France" ], - "id": 17, - "name": "Camptocamp" + ) + res_search.raise_for_status() + ids = res_search.json() + + res_read = requests.post( + f"{BASE_URL}/res.partner/read", + headers=headers, + json={ + "ids": ids, + "context": {"lang": "en_US"}, + "fields": ["name"], + } + ) + res_read.raise_for_status() + names = res_read.json() + print(names) + + .. code-tab:: javascript + + (async () => { + const BASE_URL = "https://mycompany.example.com/json/2"; + const API_KEY = ; // get it from a secure location + const headers = { + "Content-Type": "application/json", + "Authorization": "bearer " + API_KEY, + "X-Odoo-Database": DATABASE, } - ] - -Create records --------------- - -Records of a model are created using :meth:`~odoo.models.Model.create`. The -method creates a single record and returns its database identifier. - -:meth:`~odoo.models.Model.create` takes a mapping of fields to values, used -to initialize the record. For any field which has a default value and is not -set through the mapping argument, the default value will be used. - -.. example:: - - .. tabs:: - - .. code-tab:: python - id = models.execute_kw(db, uid, password, 'res.partner', 'create', [{'name': "New Partner"}]) + const reqSearch = { + method: "POST", + headers: headers, + body: { + context: {lang: "en_US"}, + domain: [ + ["name", "ilike", "%deco%"], + ["is_company", "=", true], + ], + }, + }; + const resSearch = await fetch(BASE_URL + "/res.partner/search_read", reqSearch); + if (!response.ok) throw new Error(resSearch.json()); + const ids = await resSearch.json(); + + const reqRead = { + method: "POST", + headers: headers, + body: { + ids: ids, + context: {lang: "en_US"}, + fields: ["name"], + }, + }; + const resRead = await fetch(BASE_URL + "/res.partner/search_read", reqRead); + if (!response.ok) throw new Error(resRead.json()); + const names = await resRead.json(); + console.log(names); + })(); + + .. code-tab:: bash + + set -eu + + DATABASE=mycompany + BASE_URL=https://$DATABASE.odoo.com/json/2 + API_KEY= + + ids=$(curl $BASE_URL/res.partner/search \ + -X POST \ + --oauth2-bearer $API_KEY \ + -H "X-Odoo-Database: $DATABASE" \ + -H "Content-Type: application/json" \ + -d '{"context": {"lang": "en_US"}, "domain": [["name", "ilike", "%deco%"], ["is_company", "=", true]]}' \ + --silent \ + --fail + ) + curl $BASE_URL/res.partner/read \ + -X POST \ + --oauth2-bearer $API_KEY \ + -H "X-Odoo-Database: $DATABASE" \ + -H "Content-Type: application/json" \ + -d "{\"ids\": $ids, \"context\": {\"lang\": \"en_US\"}, \"fields\": [\"name\"]}" \ + --silent \ + --fail-with-body + +The above example is equivalent to running:: + + Model = self.env["res.partner"].with_context({"lang": "en_US"}) + records = Model.search([("name", "ilike", "%deco%"), ("is_company", "=", True)]) + return json.dumps(records.ids) + +Then, in a new transaction:: + + records = self.env["res.partner"].with_context({"lang": "en_US"}).browse(ids) + names = records.read(["name"]) + return json.dumps(names) + +.. _reference/external_api/dynamic_doc: + +Dynamic Documentation +===================== + +Under construction + +.. _reference/external_api/migration: + +Migrating from XML-RPC / JSON-RPC +================================= + +Both the XML-RPC and JSON-RPC APIs at endpoints ``/xmlrpc``, ``/xmlrpc/2`` and ``/jsonrpc`` are +scheduled for removal in Odoo 20 (fall 2026). Both RPC APIs expose the three same services: common, +db (database) and object. All three services are deprecated. - .. code-tab:: ruby +.. note:: - id = models.execute_kw(db, uid, password, 'res.partner', 'create', [{name: "New Partner"}]) + The other controllers ``@route(type='jsonrpc')`` (known until Odoo 18 as ``type='json'``) are not + subject to this deprecation notice. - .. code-tab:: php +Common service +-------------- - $id = $models->execute_kw($db, $uid, $password, 'res.partner', 'create', array(array('name'=>"New Partner"))); +The common service defines 3 fonctions: - .. code-tab:: java +1. ``version()`` +2. ``login(db, login, password)`` +3. ``authenticate(db, login, password, user_agent_env)`` - final Integer id = (Integer)models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "create", - asList(new HashMap() {{ put("name", "New Partner"); }}) - )); +The version function is replaced by the ``/web/version`` endpoint. - .. code-tab:: go +.. code:: http - var id int64 - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "create", - []map[string]string{ - {"name": "New Partner"}, - }, - }, &id); err != nil { - log.Fatal(err) - } + GET /web/version HTTP/1.1 - Result: +.. code:: http - .. code-block:: json + HTTP/1.1 200 OK + Content-Type: application/json - 78 + {"version_info": [19, 0, 0, "final", 0, ""], "version": "19.0"} -.. warning:: - While most value types are what would expect (integer for - :class:`~odoo.fields.Integer`, string for :class:`~odoo.fields.Char` - or :class:`~odoo.fields.Text`), +The two ``login`` and ``authenticate`` functions return the user ID corresponding to the user after +a successful login. The user ID and password are necessary for subsequent RPC calls to the *object* +service. The JSON-2 API uses a different authentication scheme where neither the user ID nor the +password are used. It is still possible to retrieve the user's own ID by sending a JSON-2 request to +``res.users/context_get`` with no ID (the current user is extracted from the API key). - - :class:`~odoo.fields.Date`, :class:`~odoo.fields.Datetime` and - :class:`~odoo.fields.Binary` fields use string values - - :class:`~odoo.fields.One2many` and :class:`~odoo.fields.Many2many` - use a special command protocol detailed in :meth:`the documentation to - the write method `. +Database service +---------------- -Update records +.. seealso:: + :ref:`db_manager_security` + +The db service defines 13 fonctions: + +#. ``create_database(master_pwd, db_name, demo, lang, user_password, login, country_code, phone)`` +#. ``duplicate_database(master_pwd, db_original_name, db_name, neutralize_database)`` +#. ``drop(master_pwd, db_name)`` +#. ``dump(master_pwd, db_name, format)`` +#. ``restore(master_pwd, db_name, data, copy)`` +#. ``change_admin_password(master_pwd, new_password)`` +#. ``rename(master_pwd, old_name, new_name)`` +#. ``migrate_databases(master_pwd, databases)`` +#. ``db_exist(db_name)`` +#. ``list()`` +#. ``list_lang()`` +#. ``list_countries(master_pwd)`` +#. ``server_version()`` + +Many of those function are accessible via the ``/web/database`` controllers. Those controllers +work hand-in-hand with the HTML form at ``/web/database/manager`` and are accessible via HTTP. + +The following controllers use the verb ``POST`` and content-type +``application/x-www-form-urlencoded``. + +#. ``/web/database/create`` takes inputs ``master_pwd``, ``name``, ``login``, ``password``, + ``demo``, ``lang``, and ``phone``. +#. ``/web/database/duplicate`` takes inputs ``master_pwd``, ``name``, ``new_name``, and + ``neutralize_database`` (not neutralized by default). +#. ``/web/database/drop`` takes inputs ``master_pwd`` and ``name``. +#. ``/web/database/backup`` takes inputs ``master_pwd``, ``name``, and ``backup_format`` (zip by + default), and returns the backup in the http response. +#. ``/web/database/change_password`` takes inputs ``master_pwd`` and ``master_pwd_new``. + +The following controller uses the verb ``POST`` and content-type ``multipart/form-data``. + +* ``/web/database/restore`` takes inputs ``master_pwd``, ``name``, ``copy`` (not copied by + default) and ``neutralize`` (not neutralized by default), it takes a file input ``backup_file``. + +The following controller uses the verb ``POST`` and content-type ``application/json-rpc``. + +* ``/web/database/list`` takes an empty JSON object as input, and returns the database list under + the JSON response's ``result`` entry. + +The remaining function are: ``server_version``, which exists under ``/web/version``, ``list_lang``, +and ``list_countries``, which exist via JSON-2 on the ``res.lang`` and ``res.country`` models, and +``migrate_databases``, which as non-programmable API at the moment. + +Object service -------------- -Records can be updated using :meth:`~odoo.models.Model.write`. It takes -a list of records to update and a mapping of updated fields to values similar -to :meth:`~odoo.models.Model.create`. - -Multiple records can be updated simultaneously, but they will all get the same -values for the fields being set. It is not possible to perform -"computed" updates (where the value being set depends on an existing value of -a record). +The object service defines 2 fonctions: -.. example:: +#. ``execute(db, uid, passwd, model, method, *args)`` +#. ``execute_kw(db, uid, passwd, model, method, args, kw={})`` - .. tabs:: +They both give for access to all public model methods, including the generic ORM ones. - .. code-tab:: python - - models.execute_kw(db, uid, password, 'res.partner', 'write', [[id], {'name': "Newer partner"}]) - # get record name after having changed it - models.execute_kw(db, uid, password, 'res.partner', 'read', [[id], ['display_name']]) - - .. code-tab:: ruby - - models.execute_kw(db, uid, password, 'res.partner', 'write', [[id], {name: "Newer partner"}]) - # get record name after having changed it - models.execute_kw(db, uid, password, 'res.partner', 'read', [[id], ['display_name']]) - - .. code-tab:: php - - $models->execute_kw($db, $uid, $password, 'res.partner', 'write', array(array($id), array('name'=>"Newer partner"))); - // get record name after having changed it - $models->execute_kw($db, $uid, $password, - 'res.partner', 'read', array(array($id), array('display_name'))); - - .. code-tab:: java - - models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "write", - asList( - asList(id), - new HashMap() {{ put("name", "Newer Partner"); }} - ) - )); - // get record name after having changed it - asList((Object[])models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "read", - asList(asList(id), asList("display_name")) - ))); - - .. code-tab:: go - - var result bool - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "write", - []any{ - []int64{id}, - map[string]string{"name": "Newer partner"}, - }, - }, &result); err != nil { - log.Fatal(err) - } - // get record name after having changed it - var record []any - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "name_get", - []any{ - []int64{id}, - }, - }, &record); err != nil { - log.Fatal(err) - } - - Result: - - .. code-block:: json - - [[78, "Newer partner"]] - -Delete records --------------- +Both functions are stateless. It means that the database, user ID and user password are to be +provided for each call. The model, method and arguments must be provided, too. The ``execute`` +function takes as many extra positional arguments as necessary. The ``execute_kw`` function takes an +``args`` list of positional arguments and an optional ``kw`` dict of keyword arguments. -Records can be deleted in bulk by providing their ids to -:meth:`~odoo.models.Model.unlink`. +The records IDs are extracted from the first ``args``. When the called method is decorated with +``@api.model``, no record ID is extracted, and ``args`` is left as-is. It is only possible to give a +context with ``execute_kw``, as it is extracted from the keyword argument named ``context``. .. example:: - - .. tabs:: - - .. code-tab:: python - - models.execute_kw(db, uid, password, 'res.partner', 'unlink', [[id]]) - # check if the deleted record is still in the database - models.execute_kw(db, uid, password, 'res.partner', 'search', [[['id', '=', id]]]) - - .. code-tab:: ruby - - models.execute_kw(db, uid, password, 'res.partner', 'unlink', [[id]]) - # check if the deleted record is still in the database - models.execute_kw(db, uid, password, 'res.partner', 'search', [[['id', '=', id]]]) - - .. code-tab:: php - - $models->execute_kw($db, $uid, $password, 'res.partner', 'unlink', array(array($id))); - // check if the deleted record is still in the database - $models->execute_kw( - $db, $uid, $password, 'res.partner', 'search', array(array(array('id', '=', $id))) - ); - - .. code-tab:: java - - models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "unlink", - asList(asList(id)))); - // check if the deleted record is still in the database - asList((Object[])models.execute("execute_kw", asList( - db, uid, password, - "res.partner", "search", - asList(asList(asList("id", "=", 78))) - ))); - - .. code-tab:: go - - var result bool - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "unlink", - []any{ - []int64{id}, - }, - }, &result); err != nil { - log.Fatal(err) - } - // check if the deleted record is still in the database - var record []any - if err := models.Call("execute_kw", []any{ - db, uid, password, - "res.partner", "search", - []any{[]any{ - []any{"id", "=", id}, - }}, - }, &record); err != nil { - log.Fatal(err) - } - - Result: - - .. code-block:: json - - [] - -Inspection and introspection ----------------------------- - -While we previously used :meth:`~odoo.models.Model.fields_get` to query a -model and have been using an arbitrary model from the start, Odoo stores -most model metadata inside a few meta-models which allow both querying the -system and altering models and fields (with some limitations) on the fly over -XML-RPC. - -.. _reference/webservice/inspection/models: - -``ir.model`` -~~~~~~~~~~~~ - -Provides information about Odoo models via its various fields. - -``name`` - a human-readable description of the model -``model`` - the name of each model in the system -``state`` - whether the model was generated in Python code (``base``) or by creating - an ``ir.model`` record (``manual``) -``field_id`` - list of the model's fields through a :class:`~odoo.fields.One2many` to - :ref:`reference/webservice/inspection/fields` -``view_ids`` - :class:`~odoo.fields.One2many` to the :doc:`../reference/user_interface/view_architectures` - defined for the model -``access_ids`` - :class:`~odoo.fields.One2many` relation to the - :ref:`reference/security/acl` set on the model - -``ir.model`` can be used to - -- Query the system for installed models (as a precondition to operations - on the model or to explore the system's content). -- Get information about a specific model (generally by listing the fields - associated with it). -- Create new models dynamically over RPC. - -.. important:: - * Custom model names must start with ``x_``. - * The ``state`` must be provided and set to ``manual``, otherwise the model will - not be loaded. - * It is not possible to add new *methods* to a custom model, only fields. + To run the following: + + .. code:: python + + (env['res.partner'] + .with_user(2) # admin + .with_context(lang='en_US') + .browse([1, 2, 3]) + .read(['name'], load=None) + ) + + Using XML-RPC (JSON-RPC would be similar): + + .. code:: python + + from xmlrpc.client import ServerProxy + object = ServerProxy(...) + ids = [1, 2, 3] + fields = ['name'] + load = None + + object.execute("database", 2, "admin", "res.partner", "read", ids, fields, load) + object.execute("database", 2, "admin", "res.partner", "search", [ + ids, + fields, + ], { + "context": {"lang": "en_US"}, + "load": load, + }) + +The JSON-2 API replaces the object service with a few differences. The database must only be +provided (via the ``X-Odoo-Database`` HTTP header) on systems where there are multiple databases +available for a same domain. The login/password authentication scheme is replaced by an API key (via +the ``Authorization: bearer`` HTTP header). The ``model`` and ``method`` are placed in the URL. The +request body is a JSON object with all the methods arguments, plus ``ids`` and ``context``. All +the arguments are named; there is no way in JSON-2 to call a function with positional arguments. .. example:: + Using JSON-2: - A custom model will initially contain only the "built-in" fields available - on all models: + .. code:: python - .. tabs:: + import requests - .. code-tab:: python - - models.execute_kw(db, uid, password, 'ir.model', 'create', [{ - 'name': "Custom Model", - 'model': "x_custom_model", - 'state': 'manual', - }]) - models.execute_kw(db, uid, password, 'x_custom_model', 'fields_get', [], {'attributes': ['string', 'help', 'type']}) - - .. code-tab:: php - - $models->execute_kw($db, $uid, $password, 'ir.model', 'create', array(array( - 'name' => "Custom Model", - 'model' => 'x_custom_model', - 'state' => 'manual' - ))); - $models->execute_kw($db, $uid, $password, 'x_custom_model', 'fields_get', array(), array('attributes' => array('string', 'help', 'type'))); - - .. code-tab:: ruby - - models.execute_kw(db, uid, password, 'ir.model', 'create', [{ - name: "Custom Model", - model: 'x_custom_model', - state: 'manual' - }]) - fields = models.execute_kw(db, uid, password, 'x_custom_model', 'fields_get', [], {attributes: %w(string help type)}) - - .. code-tab:: java - - models.execute( - "execute_kw", asList( - db, uid, password, - "ir.model", "create", - asList(new HashMap() {{ - put("name", "Custom Model"); - put("model", "x_custom_model"); - put("state", "manual"); - }}) - )); - final Object fields = models.execute( - "execute_kw", asList( - db, uid, password, - "x_custom_model", "fields_get", - emptyList(), - new HashMap () {{ - put("attributes", asList( - "string", - "help", - "type")); - }} - )); - - .. code-tab:: go - - var id int64 - if err := models.Call("execute_kw", []any{ - db, uid, password, - "ir.model", "create", - []map[string]string{ - { - "name": "Custom Model", - "model": "x_custom_model", - "state": "manual", - }, - }, - }, &id); err != nil { - log.Fatal(err) - } - recordFields := map[string]string{} - if err := models.Call("execute_kw", []any{ - db, uid, password, - "x_custom_model", "fields_get", - []any{}, - map[string][]string{ - "attributes": {"string", "help", "type"}, - }, - }, &recordFields); err != nil { - log.Fatal(err) - } - - Result: - - .. code-block:: json - - { - "create_uid": { - "type": "many2one", - "string": "Created by" - }, - "create_date": { - "type": "datetime", - "string": "Created on" - }, - "__last_update": { - "type": "datetime", - "string": "Last Modified on" - }, - "write_uid": { - "type": "many2one", - "string": "Last Updated by" - }, - "write_date": { - "type": "datetime", - "string": "Last Updated on" + DATABSE = ... + DOMAIN = ... + API_KEY = "6578616d706c65206a736f6e20617069206b6579" + + requests.post( + f"https://{DOMAIN}/json/2/res.partner/read", + headers={ + # "X-Odoo-Database": DATABASE, # only when DOMAIN isn't enough + "Authorization": f"bearer {API_KEY}", }, - "display_name": { - "type": "char", - "string": "Display Name" + json={ + "ids": [1, 2, 3], + "context": {"lang": "en_US"}, + "fields": ["name"], + "load": None, }, - "id": { - "type": "integer", - "string": "Id" - } - } - -.. _reference/webservice/inspection/fields: - -``ir.model.fields`` -~~~~~~~~~~~~~~~~~~~ - -Provides information about the fields of Odoo models and allows adding -custom fields without using Python code. - -``model_id`` - :class:`~odoo.fields.Many2one` to - :ref:`reference/webservice/inspection/models` to which the field belongs -``name`` - the field's technical name (used in ``read`` or ``write``) -``field_description`` - the field's user-readable label (e.g. ``string`` in ``fields_get``) -``ttype`` - the :ref:`type ` of field to create -``state`` - whether the field was created via Python code (``base``) or via - ``ir.model.fields`` (``manual``) -``required``, ``readonly``, ``translate`` - enables the corresponding flag on the field -``groups`` - :ref:`field-level access control `, a - :class:`~odoo.fields.Many2many` to ``res.groups`` -``selection``, ``size``, ``on_delete``, ``relation``, ``relation_field``, ``domain`` - type-specific properties and customizations, see :ref:`the fields - documentation ` for details - -.. important:: - - Like custom models, only new fields created with ``state="manual"`` are activated as actual - fields on the model. - - Computed fields can not be added via ``ir.model.fields``, some field meta-information - (defaults, onchange) can not be set either. - -.. example:: - - .. tabs:: - - .. code-tab:: python - - id = models.execute_kw(db, uid, password, 'ir.model', 'create', [{ - 'name': "Custom Model", - 'model': "x_custom", - 'state': 'manual', - }]) - models.execute_kw(db, uid, password, 'ir.model.fields', 'create', [{ - 'model_id': id, - 'name': 'x_name', - 'ttype': 'char', - 'state': 'manual', - 'required': True, - }]) - record_id = models.execute_kw(db, uid, password, 'x_custom', 'create', [{'x_name': "test record"}]) - models.execute_kw(db, uid, password, 'x_custom', 'read', [[record_id]]) - - .. code-tab:: php - - $id = $models->execute_kw($db, $uid, $password, 'ir.model', 'create', array(array( - 'name' => "Custom Model", - 'model' => 'x_custom', - 'state' => 'manual' - ))); - $models->execute_kw($db, $uid, $password, 'ir.model.fields', 'create', array(array( - 'model_id' => $id, - 'name' => 'x_name', - 'ttype' => 'char', - 'state' => 'manual', - 'required' => true - ))); - $record_id = $models->execute_kw($db, $uid, $password, 'x_custom', 'create', array(array('x_name' => "test record"))); - $models->execute_kw($db, $uid, $password, 'x_custom', 'read', array(array($record_id))); - - .. code-tab:: ruby - - id = models.execute_kw(db, uid, password, 'ir.model', 'create', [{ - name: "Custom Model", - model: "x_custom", - state: 'manual' - }]) - models.execute_kw(db, uid, password, 'ir.model.fields', 'create', [{ - model_id: id, - name: "x_name", - ttype: "char", - state: "manual", - required: true - }]) - record_id = models.execute_kw(db, uid, password, 'x_custom', 'create', [{x_name: "test record"}]) - models.execute_kw(db, uid, password, 'x_custom', 'read', [[record_id]]) - - .. code-tab:: java - - final Integer id = (Integer)models.execute( - "execute_kw", asList( - db, uid, password, - "ir.model", "create", - asList(new HashMap() {{ - put("name", "Custom Model"); - put("model", "x_custom"); - put("state", "manual"); - }}) - )); - models.execute( - "execute_kw", asList( - db, uid, password, - "ir.model.fields", "create", - asList(new HashMap() {{ - put("model_id", id); - put("name", "x_name"); - put("ttype", "char"); - put("state", "manual"); - put("required", true); - }}) - )); - final Integer record_id = (Integer)models.execute( - "execute_kw", asList( - db, uid, password, - "x_custom", "create", - asList(new HashMap() {{ - put("x_name", "test record"); - }}) - )); - - client.execute( - "execute_kw", asList( - db, uid, password, - "x_custom", "read", - asList(asList(record_id)) - )); - - .. code-tab:: go - - var id int64 - if err := models.Call("execute_kw", []any{ - db, uid, password, - "ir.model", "create", - []map[string]string{ - { - "name": "Custom Model", - "model": "x_custom", - "state": "manual", - }, - }, - }, &id); err != nil { - log.Fatal(err) - } - var fieldId int64 - if err := models.Call("execute_kw", []any{ - db, uid, password, - "ir.model.fields", "create", - []map[string]any{ - { - "model_id": id, - "name": "x_name", - "ttype": "char", - "state": "manual", - "required": true, - }, - }, - }, &fieldId); err != nil { - log.Fatal(err) - } - var recordId int64 - if err := models.Call("execute_kw", []any{ - db, uid, password, - "x_custom", "create", - []map[string]string{ - {"x_name": "test record"}, - }, - }, &recordId); err != nil { - log.Fatal(err) - } - var recordFields []map[string]any - if err := models.Call("execute_kw", []any{ - db, uid, password, - "x_custom", "read", - [][]int64{{recordId}}, - }, recordFields); err != nil { - log.Fatal(err) - } - - Result: - - .. code-block:: json - - [ - { - "create_uid": [1, "Administrator"], - "x_name": "test record", - "__last_update": "2014-11-12 16:32:13", - "write_uid": [1, "Administrator"], - "write_date": "2014-11-12 16:32:13", - "create_date": "2014-11-12 16:32:13", - "id": 1, - "display_name": "test record" - } - ] - -.. _PostgreSQL: https://www.postgresql.org -.. _XML-RPC: https://en.wikipedia.org/wiki/XML-RPC -.. _base64: https://en.wikipedia.org/wiki/Base64 + ).json() diff --git a/content/developer/reference/external_api/account-security2.png b/content/developer/reference/external_api/account-security2.png new file mode 100644 index 0000000000..e7333bc2d9 Binary files /dev/null and b/content/developer/reference/external_api/account-security2.png differ diff --git a/content/developer/reference/external_api/new-api-key.png b/content/developer/reference/external_api/new-api-key.png new file mode 100644 index 0000000000..cb77f6db6f Binary files /dev/null and b/content/developer/reference/external_api/new-api-key.png differ diff --git a/content/developer/reference/external_api/preferences2.png b/content/developer/reference/external_api/preferences2.png new file mode 100644 index 0000000000..35698dd6b2 Binary files /dev/null and b/content/developer/reference/external_api/preferences2.png differ diff --git a/content/developer/reference/external_rpc_api.rst b/content/developer/reference/external_rpc_api.rst new file mode 100644 index 0000000000..c84fb603cd --- /dev/null +++ b/content/developer/reference/external_rpc_api.rst @@ -0,0 +1,1467 @@ +================ +External RPC API +================ + +.. danger:: + + .. deprecated:: 19.0 + + Both the XML-RPC and JSON-RPC APIs at endpoints ``/xmlrpc``, ``/xmlrpc/2`` and ``/jsonrpc`` are + scheduled for removal in Odoo 20 (fall 2026). The :doc:`external_api` acts as a replacement. + + The other controllers ``@route(type='jsonrpc')`` (known until Odoo 18 as ``type='json'``) are not + subject to this deprecation notice. + +Odoo is usually extended internally via modules, but many of its features and +all of its data are also available from the outside for external analysis or +integration with various tools. Part of the :ref:`reference/orm/model` API is +easily available over XML-RPC_ and accessible from a variety of languages. + +Starting with PHP8, the XML-RPC extension may not be available by default. +Check out the `manual `_ +for the installation steps. + +Access to data via the external API is only available on *Custom* Odoo pricing plans. Access to +the external API is not available on *One App Free* or *Standard* plans. For more information +visit the `Odoo pricing page `_ or reach out to your Customer +Success Manager. + +Connection +========== + +Configuration +------------- + +If you already have an Odoo server installed, you can just use its parameters. + +.. important:: + + For Odoo Online instances (.odoo.com), users are created without a + *local* password (as a person you are logged in via the Odoo Online + authentication system, not by the instance itself). To use XML-RPC on Odoo + Online instances, you will need to set a password on the user account you + want to use: + + * Log in your instance with an administrator account. + * Go to :menuselection:`Settings --> Users & Companies --> Users`. + * Click on the user you want to use for XML-RPC access. + * Click on :guilabel:`Action` and select :guilabel:`Change Password`. + * Set a :guilabel:`New Password` value then click :guilabel:`Change Password`. + + The *server url* is the instance's domain (e.g. + *https://mycompany.odoo.com*), the *database name* is the name of the + instance (e.g. *mycompany*). The *username* is the configured user's login + as shown by the *Change Password* screen. + +.. tabs:: + + .. code-tab:: python + + url = + db = + username = 'admin' + password = + + .. code-tab:: ruby + + url = + db = + username = "admin" + password = + + .. code-tab:: php + + $url = ; + $db = ; + $username = "admin"; + $password = ; + + .. code-tab:: java + + final String url = , + db = , + username = "admin", + password = ; + + .. code-tab:: go + + var ( + url = + db = + username = "admin" + password = + ) + +.. _api/external_api/keys: + +API Keys +~~~~~~~~ + +.. versionadded:: 14.0 + +Odoo has support for **api keys** and (depending on modules or settings) may +**require** these keys to perform webservice operations. + +The way to use API Keys in your scripts is to simply replace your **password** +by the key. The login remains in-use. You should store the API Key as carefully +as the password as they essentially provide the same access to your user +account (although they can not be used to log-in via the interface). + +In order to add a key to your account, simply go to your +:guilabel:`Preferences` (or :guilabel:`My Profile`): + +.. image:: external_api/preferences.png + :align: center + +then open the :guilabel:`Account Security` tab, and click +:guilabel:`New API Key`: + +.. image:: external_api/account-security.png + :align: center + +Input a description for the key, **this description should be as clear and +complete as possible**: it is the only way you will have to identify your keys +later and know whether you should remove them or keep them around. + +Click :guilabel:`Generate Key`, then copy the key provided. **Store this key +carefully**: it is equivalent to your password, and just like your password +the system will not be able to retrieve or show the key again later on. If you lose +this key, you will have to create a new one (and probably delete the one you +lost). + +Once you have keys configured on your account, they will appear above the +:guilabel:`New API Key` button, and you will be able to delete them: + +.. image:: external_api/delete-key.png + :align: center + +**A deleted API key can not be undeleted or re-set**. You will have to generate +a new key and update all the places where you used the old one. + +Test database +~~~~~~~~~~~~~ + +To make exploration simpler, you can also ask https://demo.odoo.com for a test +database: + +.. tabs:: + + .. code-tab:: python + + import xmlrpc.client + info = xmlrpc.client.ServerProxy('https://demo.odoo.com/start').start() + url, db, username, password = info['host'], info['database'], info['user'], info['password'] + + .. code-tab:: ruby + + require "xmlrpc/client" + info = XMLRPC::Client.new2('https://demo.odoo.com/start').call('start') + url, db, username, password = info['host'], info['database'], info['user'], info['password'] + + .. group-tab:: PHP + + .. code-block:: php + + require_once('ripcord.php'); + $info = ripcord::client('https://demo.odoo.com/start')->start(); + list($url, $db, $username, $password) = array($info['host'], $info['database'], $info['user'], $info['password']); + + .. note:: + These examples use the `Ripcord `_ + library, which provides a simple XML-RPC API. Ripcord requires that + `XML-RPC support be enabled + `_ in your PHP + installation. + + Since calls are performed over + `HTTPS `_, it also requires that + the `OpenSSL extension + `_ be enabled. + + .. group-tab:: Java + + .. code-block:: java + + final XmlRpcClient client = new XmlRpcClient(); + + final XmlRpcClientConfigImpl start_config = new XmlRpcClientConfigImpl(); + start_config.setServerURL(new URL("https://demo.odoo.com/start")); + final Map info = (Map)client.execute( + start_config, "start", emptyList()); + + final String url = info.get("host"), + db = info.get("database"), + username = info.get("user"), + password = info.get("password"); + + .. note:: + These examples use the `Apache XML-RPC library `_. + + The examples do not include imports as these imports couldn't be + pasted in the code. + + .. group-tab:: Go + + .. code-block:: go + + client, err := xmlrpc.NewClient("https://demo.odoo.com/start", nil) + if err != nil { + log.Fatal(err) + } + info := map[string]string{} + client.Call("start", nil, &info) + url = info["host"].(string) + db = info["database"].(string) + username = info["user"].(string) + password = info["password"].(string) + + .. note:: + These examples use the `github.com/kolo/xmlrpc library `_. + + The examples do not include imports as these imports couldn't be + pasted in the code. + +Logging in +---------- + +Odoo requires users of the API to be authenticated before they can query most +data. + +The ``xmlrpc/2/common`` endpoint provides meta-calls which don't require +authentication, such as the authentication itself or fetching version +information. To verify if the connection information is correct before trying +to authenticate, the simplest call is to ask for the server's version. The +authentication itself is done through the ``authenticate`` function and +returns a user identifier (``uid``) used in authenticated calls instead of +the login. + +.. tabs:: + + .. code-tab:: python + + common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url)) + common.version() + + .. code-tab:: ruby + + common = XMLRPC::Client.new2("#{url}/xmlrpc/2/common") + common.call('version') + + .. code-tab:: php + + $common = ripcord::client("$url/xmlrpc/2/common"); + $common->version(); + + .. code-tab:: java + + final XmlRpcClientConfigImpl common_config = new XmlRpcClientConfigImpl(); + common_config.setServerURL(new URL(String.format("%s/xmlrpc/2/common", url))); + client.execute(common_config, "version", emptyList()); + + .. code-tab:: go + + client, err := xmlrpc.NewClient(fmt.Sprintf("%s/xmlrpc/2/common", url), nil) + if err != nil { + log.Fatal(err) + } + common := map[string]any{} + if err := client.Call("version", nil, &common); err != nil { + log.Fatal(err) + } + +Result: + +.. code-block:: json + + { + "server_version": "13.0", + "server_version_info": [13, 0, 0, "final", 0], + "server_serie": "13.0", + "protocol_version": 1, + } + + +.. tabs:: + + .. code-tab:: python + + uid = common.authenticate(db, username, password, {}) + + .. code-tab:: ruby + + uid = common.call('authenticate', db, username, password, {}) + + .. code-tab:: php + + $uid = $common->authenticate($db, $username, $password, array()); + + .. code-tab:: java + + int uid = (int)client.execute(common_config, "authenticate", asList(db, username, password, emptyMap())); + + .. code-tab:: go + + var uid int64 + if err := client.Call("authenticate", []any{ + db, username, password, + map[string]any{}, + }, &uid); err != nil { + log.Fatal(err) + } + +.. _api/external_api/calling_methods: + +Calling methods +=============== + +The second endpoint is ``xmlrpc/2/object``. It is used to call methods of odoo +models via the ``execute_kw`` RPC function. + +Each call to ``execute_kw`` takes the following parameters: + +* the database to use, a string +* the user id (retrieved through ``authenticate``), an integer +* the user's password, a string +* the model name, a string +* the method name, a string +* an array/list of parameters passed by position +* a mapping/dict of parameters to pass by keyword (optional) + +.. example:: + + For instance, to search for records in the ``res.partner`` model, we can call + ``name_search`` with ``name`` passed by position and ``limit`` passed by + keyword (in order to get maximum 10 results): + + .. tabs:: + + .. code-tab:: python + + models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url)) + models.execute_kw(db, uid, password, 'res.partner', 'name_search', ['foo'], {'limit': 10}) + + .. code-tab:: ruby + + models = XMLRPC::Client.new2("#{url}/xmlrpc/2/object").proxy + models.execute_kw(db, uid, password, 'res.partner', 'name_search', ['foo'], {limit: 10}) + + .. code-tab:: php + + $models = ripcord::client("$url/xmlrpc/2/object"); + $models->execute_kw($db, $uid, $password, 'res.partner', 'name_search', array('foo'), array('limit' => 10)); + + .. code-tab:: java + + final XmlRpcClient models = new XmlRpcClient() {{ + setConfig(new XmlRpcClientConfigImpl() {{ + setServerURL(new URL(String.format("%s/xmlrpc/2/object", url))); + }}); + }}; + models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "name_search", + asList("foo"), + new HashMap() {{ put("limit", 10); }} + )); + + .. code-tab:: go + + models, err := xmlrpc.NewClient(fmt.Sprintf("%s/xmlrpc/2/object", url), nil) + if err != nil { + log.Fatal(err) + } + var result bool + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "name_search", + []string{"foo"}, + map[string]bool{"limit": 10}, + }, &result); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + true + +List records +------------ + +Records can be listed and filtered via :meth:`~odoo.models.Model.search`. + +:meth:`~odoo.models.Model.search` takes a mandatory +:ref:`domain ` filter (possibly empty), and returns the +database identifiers of all records matching the filter. + +.. example:: + + To list customer companies, for instance: + + .. tabs:: + + .. code-tab:: python + + models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', True]]]) + + .. code-tab:: ruby + + models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', true]]]) + + .. code-tab:: php + + $models->execute_kw($db, $uid, $password, 'res.partner', 'search', array(array(array('is_company', '=', true)))); + + .. code-tab:: java + + asList((Object[])models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "search", + asList(asList( + asList("is_company", "=", true))) + ))); + + .. code-tab:: go + + var records []int64 + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "search", + []any{[]any{ + []any{"is_company", "=", true}, + }}, + }, &records); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + [7, 18, 12, 14, 17, 19, 8, 31, 26, 16, 13, 20, 30, 22, 29, 15, 23, 28, 74] + +Pagination +~~~~~~~~~~ + +By default a search will return the ids of all records matching the +condition, which may be a huge number. ``offset`` and ``limit`` parameters are +available to only retrieve a subset of all matched records. + +.. example:: + + .. tabs:: + + .. code-tab:: python + + models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', True]]], {'offset': 10, 'limit': 5}) + + .. code-tab:: ruby + + models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', true]]], {offset: 10, limit: 5}) + + .. code-tab:: php + + $models->execute_kw($db, $uid, $password, 'res.partner', 'search', array(array(array('is_company', '=', true))), array('offset'=>10, 'limit'=>5)); + + .. code-tab:: java + + asList((Object[])models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "search", + asList(asList( + asList("is_company", "=", true))), + new HashMap() {{ put("offset", 10); put("limit", 5); }} + ))); + + .. code-tab:: go + + var records []int64 + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "search", + []any{[]any{ + []any{"is_company", "=", true}, + }}, + map[string]int64{"offset": 10, "limit": 5}, + }, &records); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + [13, 20, 30, 22, 29] + +Count records +------------- + +Rather than retrieve a possibly gigantic list of records and count them, +:meth:`~odoo.models.Model.search_count` can be used to retrieve +only the number of records matching the query. It takes the same +:ref:`domain ` filter as +:meth:`~odoo.models.Model.search` and no other parameter. + +.. example:: + + .. tabs:: + + .. code-tab:: python + + models.execute_kw(db, uid, password, 'res.partner', 'search_count', [[['is_company', '=', True]]]) + + .. code-tab:: ruby + + models.execute_kw(db, uid, password, 'res.partner', 'search_count', [[['is_company', '=', true]]]) + + .. code-tab:: php + + $models->execute_kw($db, $uid, $password, 'res.partner', 'search_count', array(array(array('is_company', '=', true)))); + + .. code-tab:: java + + (Integer)models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "search_count", + asList(asList( + asList("is_company", "=", true))) + )); + + .. code-tab:: go + + var counter int64 + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "search_count", + []any{[]any{ + []any{"is_company", "=", true}, + }}, + }, &counter); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + 19 + +.. note:: + Calling ``search`` then ``search_count`` (or the other way around) may not + yield coherent results if other users are using the server: stored data + could have changed between the calls. + +Read records +------------ + +Record data are accessible via the :meth:`~odoo.models.Model.read` method, +which takes a list of ids (as returned by +:meth:`~odoo.models.Model.search`), and optionally a list of fields to +fetch. By default, it fetches all the fields the current user can read, +which tends to be a huge amount. + +.. example:: + + .. tabs:: + + .. code-tab:: python + + ids = models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', True]]], {'limit': 1}) + [record] = models.execute_kw(db, uid, password, 'res.partner', 'read', [ids]) + # count the number of fields fetched by default + len(record) + + .. code-tab:: ruby + + ids = models.execute_kw(db, uid, password, 'res.partner', 'search', [[['is_company', '=', true]]], {limit: 1}) + record = models.execute_kw(db, uid, password, 'res.partner', 'read', [ids]).first + # count the number of fields fetched by default + record.length + + .. code-tab:: php + + $ids = $models->execute_kw($db, $uid, $password, 'res.partner', 'search', array(array(array('is_company', '=', true))), array('limit'=>1)); + $records = $models->execute_kw($db, $uid, $password, 'res.partner', 'read', array($ids)); + // count the number of fields fetched by default + count($records[0]); + + .. code-tab:: java + + final List ids = asList((Object[])models.execute( + "execute_kw", asList( + db, uid, password, + "res.partner", "search", + asList(asList( + asList("is_company", "=", true))), + new HashMap() {{ put("limit", 1); }}))); + final Map record = (Map)((Object[])models.execute( + "execute_kw", asList( + db, uid, password, + "res.partner", "read", + asList(ids) + ) + ))[0]; + // count the number of fields fetched by default + record.size(); + + .. code-tab:: go + + var ids []int64 + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "search", + []any{[]any{ + []any{"is_company", "=", true}, + }}, + map[string]int64{"limit": 1}, + }, &ids); err != nil { + log.Fatal(err) + } + var records []any + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "read", + ids, + }, &records); err != nil { + log.Fatal(err) + } + // count the number of fields fetched by default + count := len(records) + + Result: + + .. code-block:: json + + 121 + + Conversely, picking only three fields deemed interesting. + + .. tabs:: + + .. code-tab:: python + + models.execute_kw(db, uid, password, 'res.partner', 'read', [ids], {'fields': ['name', 'country_id', 'comment']}) + + .. code-tab:: ruby + + models.execute_kw(db, uid, password, 'res.partner', 'read', [ids], {fields: %w(name country_id comment)}) + + .. code-tab:: php + + $models->execute_kw($db, $uid, $password, 'res.partner', 'read', array($ids), array('fields'=>array('name', 'country_id', 'comment'))); + + .. code-tab:: java + + asList((Object[])models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "read", + asList(ids), + new HashMap() {{ + put("fields", asList("name", "country_id", "comment")); + }} + ))); + + .. code-tab:: go + + var recordFields []map[string]any + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "read", + ids, + map[string][]string{ + "fields": {"name", "country_id", "comment"}, + }, + }, &recordFields); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + [{"comment": false, "country_id": [21, "Belgium"], "id": 7, "name": "Agrolait"}] + +.. note:: + Even if the ``id`` field is not requested, it is always returned. + +List record fields +------------------ + +:meth:`~odoo.models.Model.fields_get` can be used to inspect +a model's fields and check which ones seem to be of interest. + +Because it returns a large amount of meta-information (it is also used by client +programs) it should be filtered before printing, the most interesting items +for a human user are ``string`` (the field's label), ``help`` (a help text if +available) and ``type`` (to know which values to expect, or to send when +updating a record). + +.. example:: + + .. tabs:: + + .. code-tab:: python + + models.execute_kw(db, uid, password, 'res.partner', 'fields_get', [], {'attributes': ['string', 'help', 'type']}) + + .. code-tab:: ruby + + models.execute_kw(db, uid, password, 'res.partner', 'fields_get', [], {attributes: %w(string help type)}) + + .. code-tab:: php + + $models->execute_kw($db, $uid, $password, 'res.partner', 'fields_get', array(), array('attributes' => array('string', 'help', 'type'))); + + .. code-tab:: java + + (Map>)models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "fields_get", + emptyList(), + new HashMap() {{ + put("attributes", asList("string", "help", "type")); + }} + )); + + .. code-tab:: go + + recordFields := map[string]string{} + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "fields_get", + []any{}, + map[string][]string{ + "attributes": {"string", "help", "type"}, + }, + }, &recordFields); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + { + "ean13": { + "type": "char", + "help": "BarCode", + "string": "EAN13" + }, + "property_account_position_id": { + "type": "many2one", + "help": "The fiscal position will determine taxes and accounts used for the partner.", + "string": "Fiscal Position" + }, + "signup_valid": { + "type": "boolean", + "help": "", + "string": "Signup Token is Valid" + }, + "date_localization": { + "type": "date", + "help": "", + "string": "Geo Localization Date" + }, + "ref_company_ids": { + "type": "one2many", + "help": "", + "string": "Companies that refers to partner" + }, + "sale_order_count": { + "type": "integer", + "help": "", + "string": "# of Sales Order" + }, + "purchase_order_count": { + "type": "integer", + "help": "", + "string": "# of Purchase Order" + }, + +Search and read +--------------- + +Because it is a very common task, Odoo provides a +:meth:`~odoo.models.Model.search_read` shortcut which, as its name suggests, is +equivalent to a :meth:`~odoo.models.Model.search` followed by a +:meth:`~odoo.models.Model.read`, but avoids having to perform two requests +and keep ids around. + +Its arguments are similar to :meth:`~odoo.models.Model.search`'s, but it +can also take a list of ``fields`` (like :meth:`~odoo.models.Model.read`, +if that list is not provided it will fetch all fields of matched records). + +.. example:: + + .. tabs:: + + .. code-tab:: python + + models.execute_kw(db, uid, password, 'res.partner', 'search_read', [[['is_company', '=', True]]], {'fields': ['name', 'country_id', 'comment'], 'limit': 5}) + + .. code-tab:: ruby + + models.execute_kw(db, uid, password, 'res.partner', 'search_read', [[['is_company', '=', true]]], {fields: %w(name country_id comment), limit: 5}) + + .. code-tab:: php + + $models->execute_kw($db, $uid, $password, 'res.partner', 'search_read', array(array(array('is_company', '=', true))), array('fields'=>array('name', 'country_id', 'comment'), 'limit'=>5)); + + .. code-tab:: java + + asList((Object[])models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "search_read", + asList(asList( + asList("is_company", "=", true))), + new HashMap() {{ + put("fields", asList("name", "country_id", "comment")); + put("limit", 5); + }} + ))); + + .. code-tab:: go + + var recordFields []map[string]any + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "search_read", + []any{[]any{ + []any{"is_company", "=", true}, + }}, + map[string]any{ + "fields": []string{"name", "country_id", "comment"}, + "limit": 5, + }, + }, &recordFields); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + [ + { + "comment": false, + "country_id": [ 21, "Belgium" ], + "id": 7, + "name": "Agrolait" + }, + { + "comment": false, + "country_id": [ 76, "France" ], + "id": 18, + "name": "Axelor" + }, + { + "comment": false, + "country_id": [ 233, "United Kingdom" ], + "id": 12, + "name": "Bank Wealthy and sons" + }, + { + "comment": false, + "country_id": [ 105, "India" ], + "id": 14, + "name": "Best Designers" + }, + { + "comment": false, + "country_id": [ 76, "France" ], + "id": 17, + "name": "Camptocamp" + } + ] + +Create records +-------------- + +Records of a model are created using :meth:`~odoo.models.Model.create`. The +method creates a single record and returns its database identifier. + +:meth:`~odoo.models.Model.create` takes a mapping of fields to values, used +to initialize the record. For any field which has a default value and is not +set through the mapping argument, the default value will be used. + +.. example:: + + .. tabs:: + + .. code-tab:: python + + id = models.execute_kw(db, uid, password, 'res.partner', 'create', [{'name': "New Partner"}]) + + .. code-tab:: ruby + + id = models.execute_kw(db, uid, password, 'res.partner', 'create', [{name: "New Partner"}]) + + .. code-tab:: php + + $id = $models->execute_kw($db, $uid, $password, 'res.partner', 'create', array(array('name'=>"New Partner"))); + + .. code-tab:: java + + final Integer id = (Integer)models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "create", + asList(new HashMap() {{ put("name", "New Partner"); }}) + )); + + .. code-tab:: go + + var id int64 + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "create", + []map[string]string{ + {"name": "New Partner"}, + }, + }, &id); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + 78 + +.. warning:: + While most value types are what would expect (integer for + :class:`~odoo.fields.Integer`, string for :class:`~odoo.fields.Char` + or :class:`~odoo.fields.Text`), + + - :class:`~odoo.fields.Date`, :class:`~odoo.fields.Datetime` and + :class:`~odoo.fields.Binary` fields use string values + - :class:`~odoo.fields.One2many` and :class:`~odoo.fields.Many2many` + use a special command protocol detailed in :meth:`the documentation to + the write method `. + +Update records +-------------- + +Records can be updated using :meth:`~odoo.models.Model.write`. It takes +a list of records to update and a mapping of updated fields to values similar +to :meth:`~odoo.models.Model.create`. + +Multiple records can be updated simultaneously, but they will all get the same +values for the fields being set. It is not possible to perform +"computed" updates (where the value being set depends on an existing value of +a record). + +.. example:: + + .. tabs:: + + .. code-tab:: python + + models.execute_kw(db, uid, password, 'res.partner', 'write', [[id], {'name': "Newer partner"}]) + # get record name after having changed it + models.execute_kw(db, uid, password, 'res.partner', 'read', [[id], ['display_name']]) + + .. code-tab:: ruby + + models.execute_kw(db, uid, password, 'res.partner', 'write', [[id], {name: "Newer partner"}]) + # get record name after having changed it + models.execute_kw(db, uid, password, 'res.partner', 'read', [[id], ['display_name']]) + + .. code-tab:: php + + $models->execute_kw($db, $uid, $password, 'res.partner', 'write', array(array($id), array('name'=>"Newer partner"))); + // get record name after having changed it + $models->execute_kw($db, $uid, $password, + 'res.partner', 'read', array(array($id), array('display_name'))); + + .. code-tab:: java + + models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "write", + asList( + asList(id), + new HashMap() {{ put("name", "Newer Partner"); }} + ) + )); + // get record name after having changed it + asList((Object[])models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "read", + asList(asList(id), asList("display_name")) + ))); + + .. code-tab:: go + + var result bool + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "write", + []any{ + []int64{id}, + map[string]string{"name": "Newer partner"}, + }, + }, &result); err != nil { + log.Fatal(err) + } + // get record name after having changed it + var record []any + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "name_get", + []any{ + []int64{id}, + }, + }, &record); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + [[78, "Newer partner"]] + +Delete records +-------------- + +Records can be deleted in bulk by providing their ids to +:meth:`~odoo.models.Model.unlink`. + +.. example:: + + .. tabs:: + + .. code-tab:: python + + models.execute_kw(db, uid, password, 'res.partner', 'unlink', [[id]]) + # check if the deleted record is still in the database + models.execute_kw(db, uid, password, 'res.partner', 'search', [[['id', '=', id]]]) + + .. code-tab:: ruby + + models.execute_kw(db, uid, password, 'res.partner', 'unlink', [[id]]) + # check if the deleted record is still in the database + models.execute_kw(db, uid, password, 'res.partner', 'search', [[['id', '=', id]]]) + + .. code-tab:: php + + $models->execute_kw($db, $uid, $password, 'res.partner', 'unlink', array(array($id))); + // check if the deleted record is still in the database + $models->execute_kw( + $db, $uid, $password, 'res.partner', 'search', array(array(array('id', '=', $id))) + ); + + .. code-tab:: java + + models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "unlink", + asList(asList(id)))); + // check if the deleted record is still in the database + asList((Object[])models.execute("execute_kw", asList( + db, uid, password, + "res.partner", "search", + asList(asList(asList("id", "=", 78))) + ))); + + .. code-tab:: go + + var result bool + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "unlink", + []any{ + []int64{id}, + }, + }, &result); err != nil { + log.Fatal(err) + } + // check if the deleted record is still in the database + var record []any + if err := models.Call("execute_kw", []any{ + db, uid, password, + "res.partner", "search", + []any{[]any{ + []any{"id", "=", id}, + }}, + }, &record); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + [] + +Inspection and introspection +---------------------------- + +While we previously used :meth:`~odoo.models.Model.fields_get` to query a +model and have been using an arbitrary model from the start, Odoo stores +most model metadata inside a few meta-models which allow both querying the +system and altering models and fields (with some limitations) on the fly over +XML-RPC. + +.. _reference/webservice/inspection/models: + +``ir.model`` +~~~~~~~~~~~~ + +Provides information about Odoo models via its various fields. + +``name`` + a human-readable description of the model +``model`` + the name of each model in the system +``state`` + whether the model was generated in Python code (``base``) or by creating + an ``ir.model`` record (``manual``) +``field_id`` + list of the model's fields through a :class:`~odoo.fields.One2many` to + :ref:`reference/webservice/inspection/fields` +``view_ids`` + :class:`~odoo.fields.One2many` to the :doc:`../reference/user_interface/view_architectures` + defined for the model +``access_ids`` + :class:`~odoo.fields.One2many` relation to the + :ref:`reference/security/acl` set on the model + +``ir.model`` can be used to + +- Query the system for installed models (as a precondition to operations + on the model or to explore the system's content). +- Get information about a specific model (generally by listing the fields + associated with it). +- Create new models dynamically over RPC. + +.. important:: + * Custom model names must start with ``x_``. + * The ``state`` must be provided and set to ``manual``, otherwise the model will + not be loaded. + * It is not possible to add new *methods* to a custom model, only fields. + +.. example:: + + A custom model will initially contain only the "built-in" fields available + on all models: + + .. tabs:: + + .. code-tab:: python + + models.execute_kw(db, uid, password, 'ir.model', 'create', [{ + 'name': "Custom Model", + 'model': "x_custom_model", + 'state': 'manual', + }]) + models.execute_kw(db, uid, password, 'x_custom_model', 'fields_get', [], {'attributes': ['string', 'help', 'type']}) + + .. code-tab:: php + + $models->execute_kw($db, $uid, $password, 'ir.model', 'create', array(array( + 'name' => "Custom Model", + 'model' => 'x_custom_model', + 'state' => 'manual' + ))); + $models->execute_kw($db, $uid, $password, 'x_custom_model', 'fields_get', array(), array('attributes' => array('string', 'help', 'type'))); + + .. code-tab:: ruby + + models.execute_kw(db, uid, password, 'ir.model', 'create', [{ + name: "Custom Model", + model: 'x_custom_model', + state: 'manual' + }]) + fields = models.execute_kw(db, uid, password, 'x_custom_model', 'fields_get', [], {attributes: %w(string help type)}) + + .. code-tab:: java + + models.execute( + "execute_kw", asList( + db, uid, password, + "ir.model", "create", + asList(new HashMap() {{ + put("name", "Custom Model"); + put("model", "x_custom_model"); + put("state", "manual"); + }}) + )); + final Object fields = models.execute( + "execute_kw", asList( + db, uid, password, + "x_custom_model", "fields_get", + emptyList(), + new HashMap () {{ + put("attributes", asList( + "string", + "help", + "type")); + }} + )); + + .. code-tab:: go + + var id int64 + if err := models.Call("execute_kw", []any{ + db, uid, password, + "ir.model", "create", + []map[string]string{ + { + "name": "Custom Model", + "model": "x_custom_model", + "state": "manual", + }, + }, + }, &id); err != nil { + log.Fatal(err) + } + recordFields := map[string]string{} + if err := models.Call("execute_kw", []any{ + db, uid, password, + "x_custom_model", "fields_get", + []any{}, + map[string][]string{ + "attributes": {"string", "help", "type"}, + }, + }, &recordFields); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + { + "create_uid": { + "type": "many2one", + "string": "Created by" + }, + "create_date": { + "type": "datetime", + "string": "Created on" + }, + "__last_update": { + "type": "datetime", + "string": "Last Modified on" + }, + "write_uid": { + "type": "many2one", + "string": "Last Updated by" + }, + "write_date": { + "type": "datetime", + "string": "Last Updated on" + }, + "display_name": { + "type": "char", + "string": "Display Name" + }, + "id": { + "type": "integer", + "string": "Id" + } + } + +.. _reference/webservice/inspection/fields: + +``ir.model.fields`` +~~~~~~~~~~~~~~~~~~~ + +Provides information about the fields of Odoo models and allows adding +custom fields without using Python code. + +``model_id`` + :class:`~odoo.fields.Many2one` to + :ref:`reference/webservice/inspection/models` to which the field belongs +``name`` + the field's technical name (used in ``read`` or ``write``) +``field_description`` + the field's user-readable label (e.g. ``string`` in ``fields_get``) +``ttype`` + the :ref:`type ` of field to create +``state`` + whether the field was created via Python code (``base``) or via + ``ir.model.fields`` (``manual``) +``required``, ``readonly``, ``translate`` + enables the corresponding flag on the field +``groups`` + :ref:`field-level access control `, a + :class:`~odoo.fields.Many2many` to ``res.groups`` +``selection``, ``size``, ``on_delete``, ``relation``, ``relation_field``, ``domain`` + type-specific properties and customizations, see :ref:`the fields + documentation ` for details + +.. important:: + - Like custom models, only new fields created with ``state="manual"`` are activated as actual + fields on the model. + - Computed fields can not be added via ``ir.model.fields``, some field meta-information + (defaults, onchange) can not be set either. + +.. example:: + + .. tabs:: + + .. code-tab:: python + + id = models.execute_kw(db, uid, password, 'ir.model', 'create', [{ + 'name': "Custom Model", + 'model': "x_custom", + 'state': 'manual', + }]) + models.execute_kw(db, uid, password, 'ir.model.fields', 'create', [{ + 'model_id': id, + 'name': 'x_name', + 'ttype': 'char', + 'state': 'manual', + 'required': True, + }]) + record_id = models.execute_kw(db, uid, password, 'x_custom', 'create', [{'x_name': "test record"}]) + models.execute_kw(db, uid, password, 'x_custom', 'read', [[record_id]]) + + .. code-tab:: php + + $id = $models->execute_kw($db, $uid, $password, 'ir.model', 'create', array(array( + 'name' => "Custom Model", + 'model' => 'x_custom', + 'state' => 'manual' + ))); + $models->execute_kw($db, $uid, $password, 'ir.model.fields', 'create', array(array( + 'model_id' => $id, + 'name' => 'x_name', + 'ttype' => 'char', + 'state' => 'manual', + 'required' => true + ))); + $record_id = $models->execute_kw($db, $uid, $password, 'x_custom', 'create', array(array('x_name' => "test record"))); + $models->execute_kw($db, $uid, $password, 'x_custom', 'read', array(array($record_id))); + + .. code-tab:: ruby + + id = models.execute_kw(db, uid, password, 'ir.model', 'create', [{ + name: "Custom Model", + model: "x_custom", + state: 'manual' + }]) + models.execute_kw(db, uid, password, 'ir.model.fields', 'create', [{ + model_id: id, + name: "x_name", + ttype: "char", + state: "manual", + required: true + }]) + record_id = models.execute_kw(db, uid, password, 'x_custom', 'create', [{x_name: "test record"}]) + models.execute_kw(db, uid, password, 'x_custom', 'read', [[record_id]]) + + .. code-tab:: java + + final Integer id = (Integer)models.execute( + "execute_kw", asList( + db, uid, password, + "ir.model", "create", + asList(new HashMap() {{ + put("name", "Custom Model"); + put("model", "x_custom"); + put("state", "manual"); + }}) + )); + models.execute( + "execute_kw", asList( + db, uid, password, + "ir.model.fields", "create", + asList(new HashMap() {{ + put("model_id", id); + put("name", "x_name"); + put("ttype", "char"); + put("state", "manual"); + put("required", true); + }}) + )); + final Integer record_id = (Integer)models.execute( + "execute_kw", asList( + db, uid, password, + "x_custom", "create", + asList(new HashMap() {{ + put("x_name", "test record"); + }}) + )); + + client.execute( + "execute_kw", asList( + db, uid, password, + "x_custom", "read", + asList(asList(record_id)) + )); + + .. code-tab:: go + + var id int64 + if err := models.Call("execute_kw", []any{ + db, uid, password, + "ir.model", "create", + []map[string]string{ + { + "name": "Custom Model", + "model": "x_custom", + "state": "manual", + }, + }, + }, &id); err != nil { + log.Fatal(err) + } + var fieldId int64 + if err := models.Call("execute_kw", []any{ + db, uid, password, + "ir.model.fields", "create", + []map[string]any{ + { + "model_id": id, + "name": "x_name", + "ttype": "char", + "state": "manual", + "required": true, + }, + }, + }, &fieldId); err != nil { + log.Fatal(err) + } + var recordId int64 + if err := models.Call("execute_kw", []any{ + db, uid, password, + "x_custom", "create", + []map[string]string{ + {"x_name": "test record"}, + }, + }, &recordId); err != nil { + log.Fatal(err) + } + var recordFields []map[string]any + if err := models.Call("execute_kw", []any{ + db, uid, password, + "x_custom", "read", + [][]int64{{recordId}}, + }, recordFields); err != nil { + log.Fatal(err) + } + + Result: + + .. code-block:: json + + [ + { + "create_uid": [1, "Administrator"], + "x_name": "test record", + "__last_update": "2014-11-12 16:32:13", + "write_uid": [1, "Administrator"], + "write_date": "2014-11-12 16:32:13", + "create_date": "2014-11-12 16:32:13", + "id": 1, + "display_name": "test record" + } + ] + +.. _PostgreSQL: https://www.postgresql.org +.. _XML-RPC: https://en.wikipedia.org/wiki/XML-RPC +.. _base64: https://en.wikipedia.org/wiki/Base64 diff --git a/content/developer/reference/standard_modules/account/account_report.rst b/content/developer/reference/standard_modules/account/account_report.rst index b6f6cd37b1..efb2701932 100644 --- a/content/developer/reference/standard_modules/account/account_report.rst +++ b/content/developer/reference/standard_modules/account/account_report.rst @@ -23,7 +23,6 @@ Report .. autofield:: filter_period_comparison .. autofield:: filter_growth_comparison .. autofield:: filter_journals - .. autofield:: filter_analytic .. autofield:: filter_hierarchy .. autofield:: filter_account_type .. autofield:: filter_partner diff --git a/content/developer/tutorials/define_module_data.rst b/content/developer/tutorials/define_module_data.rst index 656a658143..a9fd4d8451 100644 --- a/content/developer/tutorials/define_module_data.rst +++ b/content/developer/tutorials/define_module_data.rst @@ -25,11 +25,13 @@ On top of technical data, business data can be defined, e.g. countries, currenci as well as complete country localization (legal reports, tax definitions, chart of account), and much more... + +.. _tutorials/define_module_data/demo_data: + Demo Data --------- -In additional to master data, which are requirements for a module to work properly, we also like -having data for demonstration purposes: +In addition to master data, which is required for a module to work properly, we can also provide data for demonstration purposes: * Help the sales representatives make their demos quickly. * Have a set of working data for developers to test new features and see how these new features look diff --git a/content/developer/tutorials/discover_js_framework/02_build_a_dashboard.rst b/content/developer/tutorials/discover_js_framework/02_build_a_dashboard.rst index 861a95dbc7..e3ca788f67 100644 --- a/content/developer/tutorials/discover_js_framework/02_build_a_dashboard.rst +++ b/content/developer/tutorials/discover_js_framework/02_build_a_dashboard.rst @@ -312,8 +312,8 @@ changes. .. seealso:: - `Documentation on reactivity <{OWL_PATH}/doc/reference/reactivity.md>`_ - `Example: Use of reactive in a service - `_ + `_ 8. Lazy loading the dashboard ============================= diff --git a/content/developer/tutorials/web.rst b/content/developer/tutorials/web.rst index ffc5cc4e33..dd24bcd983 100644 --- a/content/developer/tutorials/web.rst +++ b/content/developer/tutorials/web.rst @@ -613,7 +613,7 @@ with the template modified to: .. code-block:: xml -
Hello
+
Hello
will result in: @@ -631,7 +631,7 @@ essentially be that set up by :func:`~odoo.Widget.init`): .. code-block:: xml -
Hello
+
Hello
:: @@ -683,7 +683,7 @@ The ``t-esc`` directive can be used to output text: .. code-block:: xml -
Hello
+
Hello
It takes a Javascript expression which is evaluated, the result of the expression is then HTML-escaped and inserted in the document. Since it's an @@ -692,13 +692,13 @@ complex expression like a computation: .. code-block:: xml -
+
or method calls: .. code-block:: xml -
+
Outputting HTML ~~~~~~~~~~~~~~~ @@ -753,7 +753,7 @@ bind to each item during iteration.
- Hello + Hello
@@ -886,7 +886,7 @@ Exercise - +
@@ -1602,7 +1602,7 @@ Exercises
-

+

@@ -1744,7 +1744,7 @@ attributes are:
-

+

diff --git a/locale/sources/administration.pot b/locale/sources/administration.pot index 2739ff438d..399a1c92f7 100644 --- a/locale/sources/administration.pot +++ b/locale/sources/administration.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../content/administration.rst:8 -#: ../../content/administration/odoo_online.rst:20 +#: ../../content/administration/odoo_online.rst:18 msgid "Database management" msgstr "" @@ -545,11 +545,11 @@ msgstr "" msgid "To quickly try out Odoo, shared `demo `_ instances are available. No registration is required, but each instance only lives for a few hours." msgstr "" -#: ../../content/administration/odoo_online.rst:22 +#: ../../content/administration/odoo_online.rst:20 msgid "To manage a database, go to the `database manager `_ and sign in as the database administrator." msgstr "" -#: ../../content/administration/odoo_online.rst:25 +#: ../../content/administration/odoo_online.rst:23 msgid "All the main database management options are available by clicking the database name, except the upgrade option, which can be accessed by clicking the **arrow in a circle** icon next to the database name. It is only displayed if an upgrade is available." msgstr "" @@ -557,47 +557,47 @@ msgstr "" msgid "Accessing the database management options" msgstr "" -#: ../../content/administration/odoo_online.rst:32 +#: ../../content/administration/odoo_online.rst:30 msgid ":ref:`odoo_online/upgrade`" msgstr "" -#: ../../content/administration/odoo_online.rst:33 +#: ../../content/administration/odoo_online.rst:31 msgid ":ref:`odoo_online/duplicate`" msgstr "" -#: ../../content/administration/odoo_online.rst:34 +#: ../../content/administration/odoo_online.rst:32 msgid ":ref:`odoo_online/rename`" msgstr "" -#: ../../content/administration/odoo_online.rst:35 +#: ../../content/administration/odoo_online.rst:33 msgid ":ref:`odoo_online/download`" msgstr "" -#: ../../content/administration/odoo_online.rst:36 +#: ../../content/administration/odoo_online.rst:34 msgid ":ref:`odoo_online/domains`" msgstr "" -#: ../../content/administration/odoo_online.rst:37 +#: ../../content/administration/odoo_online.rst:35 msgid ":ref:`odoo_online/tags`" msgstr "" -#: ../../content/administration/odoo_online.rst:38 +#: ../../content/administration/odoo_online.rst:36 msgid ":ref:`odoo_online/delete`" msgstr "" -#: ../../content/administration/odoo_online.rst:39 +#: ../../content/administration/odoo_online.rst:37 msgid ":ref:`odoo_online/contact-support`" msgstr "" -#: ../../content/administration/odoo_online.rst:40 +#: ../../content/administration/odoo_online.rst:38 msgid ":ref:`odoo_online/users`" msgstr "" -#: ../../content/administration/odoo_online.rst:41 +#: ../../content/administration/odoo_online.rst:39 msgid ":ref:`odoo_online/web-services`" msgstr "" -#: ../../content/administration/odoo_online.rst:46 +#: ../../content/administration/odoo_online.rst:44 #: ../../content/administration/odoo_sh/getting_started/branches.rst:293 #: ../../content/administration/odoo_sh/getting_started/settings.rst:123 #: ../../content/administration/odoo_sh/getting_started/settings.rst:168 @@ -605,96 +605,96 @@ msgstr "" msgid "Upgrade" msgstr "" -#: ../../content/administration/odoo_online.rst:48 +#: ../../content/administration/odoo_online.rst:46 msgid "Trigger a database upgrade." msgstr "" -#: ../../content/administration/odoo_online.rst:51 +#: ../../content/administration/odoo_online.rst:49 msgid "For more information about the upgrade process, check out the :ref:`Odoo Online upgrade documentation `." msgstr "" -#: ../../content/administration/odoo_online.rst:57 +#: ../../content/administration/odoo_online.rst:55 msgid "Duplicate" msgstr "" -#: ../../content/administration/odoo_online.rst:59 +#: ../../content/administration/odoo_online.rst:57 msgid "Create an exact copy of the database, which can be used to perform testing without compromising daily operations." msgstr "" -#: ../../content/administration/odoo_online.rst:63 +#: ../../content/administration/odoo_online.rst:61 msgid "By checking :guilabel:`For testing purposes`, all external actions (emails, payments, delivery orders, etc.) are disabled by default on the duplicated database." msgstr "" -#: ../../content/administration/odoo_online.rst:65 +#: ../../content/administration/odoo_online.rst:63 msgid "Duplicated databases expire automatically after 15 days." msgstr "" -#: ../../content/administration/odoo_online.rst:66 +#: ../../content/administration/odoo_online.rst:64 msgid "A maximum of five duplicates can be made per database. Under extraordinary circumstances, contact `support `_ to raise the limit." msgstr "" -#: ../../content/administration/odoo_online.rst:72 +#: ../../content/administration/odoo_online.rst:70 msgid "Rename" msgstr "" -#: ../../content/administration/odoo_online.rst:74 +#: ../../content/administration/odoo_online.rst:72 msgid "Rename the database and its URL." msgstr "" -#: ../../content/administration/odoo_online.rst:79 +#: ../../content/administration/odoo_online.rst:77 msgid "Download" msgstr "" -#: ../../content/administration/odoo_online.rst:81 +#: ../../content/administration/odoo_online.rst:79 msgid "Download a ZIP file containing a backup of the database." msgstr "" -#: ../../content/administration/odoo_online.rst:84 +#: ../../content/administration/odoo_online.rst:82 msgid "Databases are backed up daily as per the `Odoo Cloud Hosting SLA `_." msgstr "" -#: ../../content/administration/odoo_online.rst:86 +#: ../../content/administration/odoo_online.rst:84 msgid "If the :guilabel:`Download` option is disabled, it means your database is too large to be downloaded through this method. In this case, please contact `Odoo Support `_ to request an alternative download solution." msgstr "" -#: ../../content/administration/odoo_online.rst:93 +#: ../../content/administration/odoo_online.rst:91 msgid "Domain names" msgstr "" -#: ../../content/administration/odoo_online.rst:95 +#: ../../content/administration/odoo_online.rst:93 msgid "Use a custom :doc:`domain name ` to access the database via another URL." msgstr "" -#: ../../content/administration/odoo_online.rst:99 +#: ../../content/administration/odoo_online.rst:97 msgid "You can :ref:`register a domain name for free `." msgstr "" -#: ../../content/administration/odoo_online.rst:104 +#: ../../content/administration/odoo_online.rst:102 msgid "Tags" msgstr "" -#: ../../content/administration/odoo_online.rst:106 +#: ../../content/administration/odoo_online.rst:104 msgid "Add tags to easily identify and sort your databases." msgstr "" -#: ../../content/administration/odoo_online.rst:109 +#: ../../content/administration/odoo_online.rst:107 msgid "You can search for tags in the search bar." msgstr "" -#: ../../content/administration/odoo_online.rst:114 +#: ../../content/administration/odoo_online.rst:112 #: ../../content/administration/odoo_sh/getting_started/branches.rst:550 msgid "Delete" msgstr "" -#: ../../content/administration/odoo_online.rst:116 +#: ../../content/administration/odoo_online.rst:114 msgid "Delete a database instantly." msgstr "" -#: ../../content/administration/odoo_online.rst:119 +#: ../../content/administration/odoo_online.rst:117 msgid "Deleting a database means that all data is permanently lost. The deletion is instant and applies to all users. It is recommended to create a backup of the database before deleting it." msgstr "" -#: ../../content/administration/odoo_online.rst:122 +#: ../../content/administration/odoo_online.rst:120 msgid "Carefully read the warning message and only proceed if the implications of deleting a database are fully understood." msgstr "" @@ -702,31 +702,31 @@ msgstr "" msgid "The warning message displayed before deleting a database" msgstr "" -#: ../../content/administration/odoo_online.rst:129 +#: ../../content/administration/odoo_online.rst:127 msgid "Only an administrator can delete a database." msgstr "" -#: ../../content/administration/odoo_online.rst:130 +#: ../../content/administration/odoo_online.rst:128 msgid "The database name is immediately made available to anyone." msgstr "" -#: ../../content/administration/odoo_online.rst:131 +#: ../../content/administration/odoo_online.rst:129 msgid "Deleting a database if it has expired or is linked to a subscription is impossible. In that case, contact `Odoo Support `_." msgstr "" -#: ../../content/administration/odoo_online.rst:137 +#: ../../content/administration/odoo_online.rst:135 msgid "Contact us" msgstr "" -#: ../../content/administration/odoo_online.rst:139 +#: ../../content/administration/odoo_online.rst:137 msgid "Access the `Odoo.com support page `_ with the database's details already pre-filled." msgstr "" -#: ../../content/administration/odoo_online.rst:145 +#: ../../content/administration/odoo_online.rst:143 msgid "Invite / remove users" msgstr "" -#: ../../content/administration/odoo_online.rst:147 +#: ../../content/administration/odoo_online.rst:145 msgid "To invite users, fill out the new user's email address and click :guilabel:`Invite`. To add multiple users, click :guilabel:`Add more users`." msgstr "" @@ -734,32 +734,24 @@ msgstr "" msgid "Inviting a user on a database" msgstr "" -#: ../../content/administration/odoo_online.rst:153 +#: ../../content/administration/odoo_online.rst:151 msgid "To remove users, select them and click :guilabel:`Remove`." msgstr "" -#: ../../content/administration/odoo_online.rst:156 +#: ../../content/administration/odoo_online.rst:154 msgid ":doc:`/applications/general/users`" msgstr "" -#: ../../content/administration/odoo_online.rst:157 +#: ../../content/administration/odoo_online.rst:155 msgid ":doc:`odoo_accounts`" msgstr "" -#: ../../content/administration/odoo_online.rst:162 +#: ../../content/administration/odoo_online.rst:160 msgid "Web Services" msgstr "" -#: ../../content/administration/odoo_online.rst:164 -msgid "In order to programmatically retrieve the list of the databases displayed in the `database manager `_, call the method `list` of the model `odoo.database` via a :doc:`Web Service ` call." -msgstr "" - -#: ../../content/administration/odoo_online.rst:168 -msgid "Inspired from the examples provided in the :doc:`Web Services ` section, this is how to retrieve this list with the library ``xmlrpc.client``::" -msgstr "" - -#: ../../content/administration/odoo_online.rst:181 -msgid "And here is the equivalent example with JSON-RPC::" +#: ../../content/administration/odoo_online.rst:162 +msgid "In order to programmatically retrieve the list of the databases displayed in the `database manager `_, call the method ``list`` of the model ``odoo.database`` via an :doc:`external JSON-2 API ` call." msgstr "" #: ../../content/administration/odoo_sh.rst:5 @@ -799,7 +791,7 @@ msgid "The base is an Ubuntu system, where all of Odoo's required dependencies, msgstr "" #: ../../content/administration/odoo_sh/advanced/containers.rst:14 -msgid "If your project requires additional Python dependencies, or more recent releases, you can define a :file:`requirements.txt` file in the root of your branches listing them. The platform will take care to install these dependencies in your containers. `The pip requirements specifiers `_ documentation can help you write a :file:`requirements.txt` file. To have a concrete example, check out the `requirements.txt file of Odoo `_." +msgid "If your project requires additional Python dependencies, or more recent releases, you can define a :file:`requirements.txt` file in the root of your branches listing them. The platform will take care to install these dependencies in your containers. `The pip requirements specifiers `_ documentation can help you write a :file:`requirements.txt` file. To have a concrete example, check out the `requirements.txt file of Odoo `_." msgstr "" #: ../../content/administration/odoo_sh/advanced/containers.rst:22 @@ -891,78 +883,74 @@ msgid "In the above commands, the argument:" msgstr "" #: ../../content/administration/odoo_sh/advanced/containers.rst:166 -msgid "``--without-demo=all`` prevents demo data to be loaded for all modules" -msgstr "" - -#: ../../content/administration/odoo_sh/advanced/containers.rst:167 msgid "``--stop-after-init`` will immediately shutdown the server instance after it completed the operations you asked." msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:169 +#: ../../content/administration/odoo_sh/advanced/containers.rst:168 msgid "More options are available and detailed in the :doc:`CLI documentation `." msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:172 +#: ../../content/administration/odoo_sh/advanced/containers.rst:171 msgid "You can find in the logs (*~/logs/odoo.log*) the addons path used by Odoo.sh to run your server. Look for \"*odoo: addons paths*\":" msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:181 +#: ../../content/administration/odoo_sh/advanced/containers.rst:180 msgid "**Be careful**, especially with your production database. Operations that you perform running this Odoo server instance are not isolated: Changes will be effective in the database. Always, make your tests in your staging databases." msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:186 +#: ../../content/administration/odoo_sh/advanced/containers.rst:185 msgid "Debugging in Odoo.sh" msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:188 +#: ../../content/administration/odoo_sh/advanced/containers.rst:187 msgid "Debugging an Odoo.sh build is not really different than another Python app. This article only explains the specificities and limitations of the Odoo.sh platform, and assumes that you already know how to use a debugger." msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:190 +#: ../../content/administration/odoo_sh/advanced/containers.rst:189 msgid "If you don't know how to debug a Python application yet, there are multiple introductory courses that can be easily found on the Internet." msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:192 +#: ../../content/administration/odoo_sh/advanced/containers.rst:191 msgid "You can use ``pdb``, ``pudb`` or ``ipdb`` to debug your code on Odoo.sh. As the server is run outside a shell, you cannot launch the debugger directly from your Odoo instance backend as the debugger needs a shell to operate." msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:195 +#: ../../content/administration/odoo_sh/advanced/containers.rst:194 msgid "`pdb `_ is installed by default in every container." msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:197 +#: ../../content/administration/odoo_sh/advanced/containers.rst:196 msgid "If you want to use `pudb `_ or `ipdb `_ you have to install it before." msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:199 +#: ../../content/administration/odoo_sh/advanced/containers.rst:198 msgid "To do so, you have two options:" msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:201 +#: ../../content/administration/odoo_sh/advanced/containers.rst:200 msgid "temporary (only in the current build):" msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:207 +#: ../../content/administration/odoo_sh/advanced/containers.rst:206 msgid "or" msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:213 +#: ../../content/administration/odoo_sh/advanced/containers.rst:212 msgid "permanent: add ``pudb`` or ``ipdb`` to your project ``requirements.txt`` file." msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:216 +#: ../../content/administration/odoo_sh/advanced/containers.rst:215 msgid "Then edit the code where you want to trigger the debugger and add this:" msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:224 +#: ../../content/administration/odoo_sh/advanced/containers.rst:223 msgid "The condition :code:`sys.__stdin__.isatty()` is a hack that detects if you run Odoo from a shell." msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:226 +#: ../../content/administration/odoo_sh/advanced/containers.rst:225 msgid "Save the file and then run the Odoo Shell:" msgstr "" -#: ../../content/administration/odoo_sh/advanced/containers.rst:232 +#: ../../content/administration/odoo_sh/advanced/containers.rst:231 msgid "Finally, *via* the Odoo Shell, you can trigger the piece of code/function/method you want to debug." msgstr "" @@ -1114,7 +1102,7 @@ msgstr "" #: ../../content/administration/odoo_sh/advanced/submodules.rst:82 #: ../../content/administration/odoo_sh/advanced/submodules.rst:94 #: ../../content/administration/odoo_sh/getting_started/first_module.rst:360 -#: ../../content/administration/odoo_sh/getting_started/first_module.rst:498 +#: ../../content/administration/odoo_sh/getting_started/first_module.rst:499 msgid "Replace" msgstr "" @@ -2546,7 +2534,7 @@ msgid "Open the module manifest *__manifest__.py*." msgstr "" #: ../../content/administration/odoo_sh/getting_started/first_module.rst:366 -#: ../../content/administration/odoo_sh/getting_started/first_module.rst:504 +#: ../../content/administration/odoo_sh/getting_started/first_module.rst:505 msgid "with" msgstr "" @@ -2634,27 +2622,27 @@ msgstr "" msgid "Before" msgstr "" -#: ../../content/administration/odoo_sh/getting_started/first_module.rst:494 +#: ../../content/administration/odoo_sh/getting_started/first_module.rst:495 msgid "Adding a Python dependency requires a module version increase for the platform to install it." msgstr "" -#: ../../content/administration/odoo_sh/getting_started/first_module.rst:496 +#: ../../content/administration/odoo_sh/getting_started/first_module.rst:497 msgid "Edit the module manifest *__manifest__.py*" msgstr "" -#: ../../content/administration/odoo_sh/getting_started/first_module.rst:510 +#: ../../content/administration/odoo_sh/getting_started/first_module.rst:511 msgid "Stage and commit your changes:" msgstr "" -#: ../../content/administration/odoo_sh/getting_started/first_module.rst:518 +#: ../../content/administration/odoo_sh/getting_started/first_module.rst:519 msgid "Then, push your changes:" msgstr "" -#: ../../content/administration/odoo_sh/getting_started/first_module.rst:520 +#: ../../content/administration/odoo_sh/getting_started/first_module.rst:521 msgid "In an Odoo.sh terminal:" msgstr "" -#: ../../content/administration/odoo_sh/getting_started/first_module.rst:526 +#: ../../content/administration/odoo_sh/getting_started/first_module.rst:527 msgid "In your computer terminal:" msgstr "" @@ -2926,18 +2914,14 @@ msgstr "" #: ../../content/administration/odoo_sh/getting_started/settings.rst:181 #: ../../content/administration/odoo_sh/getting_started/settings.rst:186 #: ../../content/administration/supported_versions.rst:35 -#: ../../content/administration/supported_versions.rst:41 -#: ../../content/administration/supported_versions.rst:47 -#: ../../content/administration/supported_versions.rst:53 +#: ../../content/administration/supported_versions.rst:36 +#: ../../content/administration/supported_versions.rst:37 #: ../../content/administration/supported_versions.rst:59 #: ../../content/administration/supported_versions.rst:60 #: ../../content/administration/supported_versions.rst:61 -#: ../../content/administration/supported_versions.rst:77 -#: ../../content/administration/supported_versions.rst:78 -#: ../../content/administration/supported_versions.rst:79 -#: ../../content/administration/supported_versions.rst:83 -#: ../../content/administration/supported_versions.rst:84 -#: ../../content/administration/supported_versions.rst:85 +#: ../../content/administration/supported_versions.rst:65 +#: ../../content/administration/supported_versions.rst:66 +#: ../../content/administration/supported_versions.rst:67 msgid "|green|" msgstr "" @@ -4408,7 +4392,7 @@ msgid "Instead of using the repository, packages for both the **Community** and msgstr "" #: ../../content/administration/on_premise/packages.rst:103 -msgid "Odoo 18 'deb' package currently supports `Debian Bookworm (12) `_ and `Ubuntu Jammy (22.04LTS) `_ or above." +msgid "Odoo 19 'deb' package currently supports `Debian Bookworm (12) `_ and `Ubuntu Jammy (22.04LTS) `_ or above." msgstr "" #: ../../content/administration/on_premise/packages.rst:107 @@ -4424,7 +4408,7 @@ msgid "The `num2words` Python package - needed to render textual amounts - does msgstr "" #: ../../content/administration/on_premise/packages.rst:135 -msgid "Odoo 18 'rpm' package supports Fedora 38." +msgid "Odoo 19 'rpm' package supports Fedora 38." msgstr "" #: ../../content/administration/on_premise/packages.rst:137 @@ -4666,7 +4650,7 @@ msgid "On Debian/Ubuntu, the following commands should install the required pack msgstr "" #: ../../content/administration/on_premise/source.rst:287 -msgid "The `setup/debinstall.sh` script will parse the `debian/control `_ file and install the found packages." +msgid "The `setup/debinstall.sh` script will parse the `debian/control `_ file and install the found packages." msgstr "" #: ../../content/administration/on_premise/source.rst:290 @@ -5008,50 +4992,64 @@ msgid "End of support" msgstr "" #: ../../content/administration/supported_versions.rst:34 +msgid "**Odoo 19.0**" +msgstr "" + +#: ../../content/administration/supported_versions.rst:38 +#: ../../content/administration/supported_versions.rst:75 +msgid "September 2025" +msgstr "" + +#: ../../content/administration/supported_versions.rst:39 +msgid "September 2028 (planned)" +msgstr "" + +#: ../../content/administration/supported_versions.rst:40 msgid "Odoo SaaS 18.4" msgstr "" -#: ../../content/administration/supported_versions.rst:36 -#: ../../content/administration/supported_versions.rst:37 +#: ../../content/administration/supported_versions.rst:41 +#: ../../content/administration/supported_versions.rst:47 +#: ../../content/administration/supported_versions.rst:53 +#: ../../content/administration/supported_versions.rst:71 +#: ../../content/administration/supported_versions.rst:72 +#: ../../content/administration/supported_versions.rst:73 +#: ../../content/administration/supported_versions.rst:77 +#: ../../content/administration/supported_versions.rst:78 +#: ../../content/administration/supported_versions.rst:79 +#: ../../content/administration/supported_versions.rst:83 +#: ../../content/administration/supported_versions.rst:84 +#: ../../content/administration/supported_versions.rst:85 +msgid "|red|" +msgstr "" + #: ../../content/administration/supported_versions.rst:42 #: ../../content/administration/supported_versions.rst:43 #: ../../content/administration/supported_versions.rst:48 #: ../../content/administration/supported_versions.rst:49 #: ../../content/administration/supported_versions.rst:54 #: ../../content/administration/supported_versions.rst:55 -#: ../../content/administration/supported_versions.rst:66 -#: ../../content/administration/supported_versions.rst:67 -#: ../../content/administration/supported_versions.rst:72 -#: ../../content/administration/supported_versions.rst:73 msgid "N/A" msgstr "" -#: ../../content/administration/supported_versions.rst:38 -msgid "July 2025" -msgstr "" - -#: ../../content/administration/supported_versions.rst:40 -msgid "Odoo SaaS 18.3" -msgstr "" - #: ../../content/administration/supported_versions.rst:44 -msgid "May 2025" +msgid "July 2025" msgstr "" #: ../../content/administration/supported_versions.rst:46 -msgid "Odoo SaaS 18.2" +msgid "Odoo SaaS 18.3" msgstr "" #: ../../content/administration/supported_versions.rst:50 -msgid "March 2025" +msgid "May 2025" msgstr "" #: ../../content/administration/supported_versions.rst:52 -msgid "Odoo SaaS 18.1" +msgid "Odoo SaaS 18.2" msgstr "" #: ../../content/administration/supported_versions.rst:56 -msgid "January 2025" +msgid "March 2025" msgstr "" #: ../../content/administration/supported_versions.rst:58 @@ -5059,104 +5057,71 @@ msgid "**Odoo 18.0**" msgstr "" #: ../../content/administration/supported_versions.rst:62 -#: ../../content/administration/supported_versions.rst:69 -#: ../../content/administration/supported_versions.rst:75 -#: ../../content/administration/supported_versions.rst:93 +#: ../../content/administration/supported_versions.rst:81 msgid "October 2024" msgstr "" #: ../../content/administration/supported_versions.rst:63 -msgid "October 2027 (planned)" +msgid "September 2027 (planned)" msgstr "" #: ../../content/administration/supported_versions.rst:64 -msgid "Odoo SaaS 17.4" -msgstr "" - -#: ../../content/administration/supported_versions.rst:65 -#: ../../content/administration/supported_versions.rst:71 -#: ../../content/administration/supported_versions.rst:89 -#: ../../content/administration/supported_versions.rst:90 -#: ../../content/administration/supported_versions.rst:91 -#: ../../content/administration/supported_versions.rst:95 -#: ../../content/administration/supported_versions.rst:96 -#: ../../content/administration/supported_versions.rst:97 -msgid "|red|" -msgstr "" - -#: ../../content/administration/supported_versions.rst:68 -msgid "July 2024" -msgstr "" - -#: ../../content/administration/supported_versions.rst:70 -msgid "Odoo SaaS 17.2" -msgstr "" - -#: ../../content/administration/supported_versions.rst:74 -msgid "April 2024" -msgstr "" - -#: ../../content/administration/supported_versions.rst:76 msgid "**Odoo 17.0**" msgstr "" -#: ../../content/administration/supported_versions.rst:80 +#: ../../content/administration/supported_versions.rst:68 msgid "November 2023" msgstr "" -#: ../../content/administration/supported_versions.rst:81 -msgid "October 2026 (planned)" +#: ../../content/administration/supported_versions.rst:69 +msgid "September 2026 (planned)" msgstr "" -#: ../../content/administration/supported_versions.rst:82 +#: ../../content/administration/supported_versions.rst:70 msgid "**Odoo 16.0**" msgstr "" -#: ../../content/administration/supported_versions.rst:86 +#: ../../content/administration/supported_versions.rst:74 msgid "October 2022" msgstr "" -#: ../../content/administration/supported_versions.rst:87 -msgid "October 2025 (planned)" -msgstr "" - -#: ../../content/administration/supported_versions.rst:88 +#: ../../content/administration/supported_versions.rst:76 msgid "**Odoo 15.0**" msgstr "" -#: ../../content/administration/supported_versions.rst:92 +#: ../../content/administration/supported_versions.rst:80 msgid "October 2021" msgstr "" -#: ../../content/administration/supported_versions.rst:94 +#: ../../content/administration/supported_versions.rst:82 msgid "Older versions" msgstr "" -#: ../../content/administration/supported_versions.rst:98 +#: ../../content/administration/supported_versions.rst:86 msgid "Before 2021" msgstr "" -#: ../../content/administration/supported_versions.rst:99 +#: ../../content/administration/supported_versions.rst:87 msgid "Before 2024" msgstr "" -#: ../../content/administration/supported_versions.rst:101 +#: ../../content/administration/supported_versions.rst:89 msgid "Legend" msgstr "" -#: ../../content/administration/supported_versions.rst:103 +#: ../../content/administration/supported_versions.rst:91 msgid "|green| Supported version" msgstr "" -#: ../../content/administration/supported_versions.rst:105 +#: ../../content/administration/supported_versions.rst:93 msgid "|red| End-of-support" msgstr "" -#: ../../content/administration/supported_versions.rst:107 +#: ../../content/administration/supported_versions.rst:95 msgid "N/A Never released for this platform" msgstr "" -#: ../../content/administration/supported_versions.rst:110 +#: ../../content/administration/supported_versions.rst:98 msgid "Even though we don't support older versions, you can always `upgrade from any version `_." msgstr "" diff --git a/locale/sources/essentials.pot b/locale/sources/essentials.pot index 83051de962..102cb8839e 100644 --- a/locale/sources/essentials.pot +++ b/locale/sources/essentials.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,7 +49,7 @@ msgid ":icon:`fa-check` :guilabel:`(check)` icon: a \"to-do\" is scheduled." msgstr "" #: ../../content/applications/essentials/activities.rst:18 -msgid ":icon:`fa-users` :guilabel:`(people)` icon: a meeting is scheduled." +msgid ":icon:`fa-users` :guilabel:`(users)` icon: a meeting is scheduled." msgstr "" #: ../../content/applications/essentials/activities.rst:19 @@ -77,26 +77,26 @@ msgid "Activities can be created from the chatter on any record." msgstr "" #: ../../content/applications/essentials/activities.rst:36 -msgid "To schedule a new activity, click the :guilabel:`Activities` button, located at the top of the chatter. In the :guilabel:`Schedule Activity` pop-up window that appears, :ref:`fill out the Schedule Activity form `." +msgid "To schedule a new activity, click the :guilabel:`Activity` button, located at the top of the chatter. In the :guilabel:`Schedule Activity` pop-up window that appears, :ref:`fill out the Schedule Activity form `." msgstr "" #: ../../content/applications/essentials/activities.rst:-1 -msgid "New activity type form." +msgid "Activity button in chatter field." msgstr "" -#: ../../content/applications/essentials/activities.rst:47 +#: ../../content/applications/essentials/activities.rst:46 msgid "Kanban view" msgstr "" -#: ../../content/applications/essentials/activities.rst:49 +#: ../../content/applications/essentials/activities.rst:48 msgid "Activities can also be created from the :icon:`oi-view-kanban` :guilabel:`(Kanban)` view." msgstr "" -#: ../../content/applications/essentials/activities.rst:51 +#: ../../content/applications/essentials/activities.rst:50 msgid "To do so, click on the |clock| located at the bottom of an individual record." msgstr "" -#: ../../content/applications/essentials/activities.rst:53 +#: ../../content/applications/essentials/activities.rst:52 msgid "Click :guilabel:`+ Schedule An Activity`, then proceed to :ref:`fill out the Schedule Activity form `." msgstr "" @@ -104,24 +104,24 @@ msgstr "" msgid "Kanban view of the CRM pipeline and the option to schedule an activity." msgstr "" -#: ../../content/applications/essentials/activities.rst:61 -#: ../../content/applications/essentials/activities.rst:79 +#: ../../content/applications/essentials/activities.rst:59 +#: ../../content/applications/essentials/activities.rst:77 msgid "If a record already has a scheduled activity, the |clock| is replaced by the icon that represents the existing scheduled activity. Click on the activity type's icon to schedule another activity." msgstr "" -#: ../../content/applications/essentials/activities.rst:67 +#: ../../content/applications/essentials/activities.rst:65 msgid "List view" msgstr "" -#: ../../content/applications/essentials/activities.rst:69 +#: ../../content/applications/essentials/activities.rst:67 msgid "Activities can also be created from a :icon:`oi-view-list` :guilabel:`(list)` view." msgstr "" -#: ../../content/applications/essentials/activities.rst:71 +#: ../../content/applications/essentials/activities.rst:69 msgid "If the :guilabel:`Activities` column is hidden, reveal it using the :icon:`oi-settings-adjust` :guilabel:`(settings adjust)` icon in the far-right of the top row." msgstr "" -#: ../../content/applications/essentials/activities.rst:74 +#: ../../content/applications/essentials/activities.rst:72 msgid "Then, click on the |clock| for the record the activity is being added to, and click :guilabel:`+ Schedule an activity`. Proceed to :ref:`fill out the Schedule Activity form ` that appears." msgstr "" @@ -129,15 +129,15 @@ msgstr "" msgid "List view of the CRM pipeline and the option to schedule an activity." msgstr "" -#: ../../content/applications/essentials/activities.rst:89 +#: ../../content/applications/essentials/activities.rst:86 msgid "Activity view" msgstr "" -#: ../../content/applications/essentials/activities.rst:91 +#: ../../content/applications/essentials/activities.rst:88 msgid "Most applications in Odoo have an *Activity* view available. If available, a |clock| is visible in the top-right corner of the main menu bar, amongst the other view option icons." msgstr "" -#: ../../content/applications/essentials/activities.rst:94 +#: ../../content/applications/essentials/activities.rst:91 msgid "To open the activity view, click the |clock|." msgstr "" @@ -145,144 +145,159 @@ msgstr "" msgid "Top-right menu with the Activities icon called out." msgstr "" -#: ../../content/applications/essentials/activities.rst:100 +#: ../../content/applications/essentials/activities.rst:96 msgid "In this view, all the available activities are listed in the columns, while the horizontal entries represent all the individual records." msgstr "" -#: ../../content/applications/essentials/activities.rst:103 +#: ../../content/applications/essentials/activities.rst:99 msgid "Activities that appear green have a due date in the future, activities that appear orange are due today, while activities appearing red are overdue." msgstr "" -#: ../../content/applications/essentials/activities.rst:106 -msgid "Color bars in each column represent records for specific activity types, and display a number indicating how many activities are scheduled for that type." +#: ../../content/applications/essentials/activities.rst:102 +msgid "Colored bars in each column represent records for specific activity types, and display a number indicating how many activities are scheduled for that type." msgstr "" -#: ../../content/applications/essentials/activities.rst:109 +#: ../../content/applications/essentials/activities.rst:105 msgid "If multiple activity types are scheduled for a record, a number appears in the box, indicating the total number of scheduled activities." msgstr "" -#: ../../content/applications/essentials/activities.rst:113 +#: ../../content/applications/essentials/activities.rst:109 msgid "Activity colors, and their relation to an activity's due date, are consistent throughout Odoo, regardless of the activity type, or the view." msgstr "" -#: ../../content/applications/essentials/activities.rst:116 -msgid "To schedule an activity for a record, hover over the corresponding field. Click the :icon:`fa-plus` :guilabel:`(plus)` icon that appears, and then :ref:`fill out the Schedule Activity form `." +#: ../../content/applications/essentials/activities.rst:112 +msgid "To schedule an activity for a record, hover over the corresponding field. Click the :icon:`fa-plus` :guilabel:`(plus)` icon, and then :ref:`fill out the Schedule Activity form `." msgstr "" #: ../../content/applications/essentials/activities.rst:-1 msgid "Activity view of the CRM pipeline and the option to schedule an activity." msgstr "" -#: ../../content/applications/essentials/activities.rst:127 +#: ../../content/applications/essentials/activities.rst:122 msgid "Schedule Activity form" msgstr "" -#: ../../content/applications/essentials/activities.rst:129 +#: ../../content/applications/essentials/activities.rst:124 msgid "Activities can be scheduled from many different places, such as from the :ref:`chatter ` of a record, or from one of multiple views in an application, when available: the :ref:`Kanban view `, :ref:`list view `, or :ref:`activity view `." msgstr "" +#: ../../content/applications/essentials/activities.rst:129 +msgid "First, select an activity type:" +msgstr "" + +#: ../../content/applications/essentials/activities.rst:131 +msgid ":icon:`fa-check` :guilabel:`To-Do`" +msgstr "" + +#: ../../content/applications/essentials/activities.rst:132 +msgid ":icon:`fa-envelope` :guilabel:`Email`" +msgstr "" + +#: ../../content/applications/essentials/activities.rst:133 +msgid ":icon:`fa-phone` :guilabel:`Call`" +msgstr "" + #: ../../content/applications/essentials/activities.rst:134 -msgid "Enter the following information on the form:" +msgid ":icon:`fa-users` :guilabel:`Meeting`" msgstr "" -#: ../../content/applications/essentials/activities.rst:136 -msgid ":guilabel:`Activity Type`: select the type of activity from the drop-down menu. The default options are: :guilabel:`Email`, :guilabel:`Call`, :guilabel:`Meeting`, or :guilabel:`To-Do`. Depending on what other applications are installed, additional options may be available." +#: ../../content/applications/essentials/activities.rst:135 +msgid ":guilabel:`Do Stuff`" msgstr "" -#: ../../content/applications/essentials/activities.rst:139 -msgid ":guilabel:`Summary`: enter a short title for the activity, such as `Discuss Proposal`." +#: ../../content/applications/essentials/activities.rst:136 +msgid ":icon:`fa-upload` :guilabel:`Document`" msgstr "" -#: ../../content/applications/essentials/activities.rst:140 -msgid ":guilabel:`Due Date`: using the calendar popover, select the activity's deadline." +#: ../../content/applications/essentials/activities.rst:137 +msgid ":icon:`fa-pencil-square-o` :guilabel:`Signature`" msgstr "" -#: ../../content/applications/essentials/activities.rst:141 -msgid ":guilabel:`Assigned to`: by default, the current user populates this field. To assign a different user to the activity, select them from the drop-down menu." +#: ../../content/applications/essentials/activities.rst:138 +msgid ":icon:`fa-check` :guilabel:`Grant Approval`" msgstr "" -#: ../../content/applications/essentials/activities.rst:143 -msgid ":guilabel:`Notes`: add any additional information for the activity in this field." +#: ../../content/applications/essentials/activities.rst:140 +msgid "Then, enter the following information:" msgstr "" -#: ../../content/applications/essentials/activities.rst:145 -msgid "When the :guilabel:`Schedule Activity` pop-up window is completed, click one of the following buttons:" +#: ../../content/applications/essentials/activities.rst:142 +msgid "**Summary**: enter a short title for the activity, such as `Discuss Proposal`." msgstr "" -#: ../../content/applications/essentials/activities.rst:148 -msgid ":guilabel:`Open Calendar`: opens the user's calendar to add and schedule the activity." +#: ../../content/applications/essentials/activities.rst:143 +msgid ":guilabel:`Due Date`: using the calendar popover, select the activity's deadline." msgstr "" -#: ../../content/applications/essentials/activities.rst:150 -msgid "Click on the desired date and time for the activity, and a :guilabel:`New Event` pop-up window appears. The summary from the *Schedule Activity* pop-up window populates the :guilabel:`Title` field." +#: ../../content/applications/essentials/activities.rst:144 +msgid ":guilabel:`Assigned to`: by default, the current user populates this field. To assign a different user to the activity, select them from the drop-down menu." msgstr "" -#: ../../content/applications/essentials/activities.rst:154 -msgid "Enter the information in the :guilabel:`New Event` pop-up window, then click :guilabel:`Save & Close` to schedule it. Once scheduled, the activity is added to the chatter under the :guilabel:`Planned Activities` section." +#: ../../content/applications/essentials/activities.rst:146 +msgid ":guilabel:`Log a note`: add any additional information for the activity in this field." msgstr "" -#: ../../content/applications/essentials/activities.rst:159 -msgid "The :guilabel:`Open Calendar` button **only** appears if the :guilabel:`Activity Type` is set to either :guilabel:`Call` or :guilabel:`Meeting`." +#: ../../content/applications/essentials/activities.rst:-1 +msgid "View of CRM leads and the option to schedule an activity." msgstr "" -#: ../../content/applications/essentials/activities.rst:162 -msgid ":guilabel:`Schedule`: schedules the activity, and adds the activity to the chatter under :guilabel:`Planned Activities`." +#: ../../content/applications/essentials/activities.rst:151 +msgid "Click :guilabel:`Save` to schedule the activity, and add the activity to the chatter under :guilabel:`Planned Activities`. Click :guilabel:`Mark Done` to add the details of the activity to the chatter under :guilabel:`Today`." msgstr "" -#: ../../content/applications/essentials/activities.rst:164 -msgid ":guilabel:`Schedule & Mark as Done`: adds the details of the activity to the chatter under :guilabel:`Today`. The activity is not scheduled, and is automatically marked as done." +#: ../../content/applications/essentials/activities.rst:156 +msgid "Schedule a meeting" msgstr "" -#: ../../content/applications/essentials/activities.rst:166 -msgid ":guilabel:`Done & Schedule Next`: adds the details of the activity to the chatter under :guilabel:`Today`. The activity is not scheduled, is automatically marked as done, and a new :guilabel:`Schedule Activity` pop-up window appears." +#: ../../content/applications/essentials/activities.rst:158 +msgid "If :icon:`fa-users` :guilabel:`Meeting` is selected as the activity type, enter the information as instructed above, then click :guilabel:`Schedule`. This opens the user's calendar to add and schedule the activity." msgstr "" -#: ../../content/applications/essentials/activities.rst:169 -msgid ":guilabel:`Cancel`: discards any changes made on the :guilabel:`Schedule Activity` pop-up window." +#: ../../content/applications/essentials/activities.rst:162 +msgid "Click on the desired date and time for the activity, and a :guilabel:`New Event` pop-up window appears. The summary from the *Schedule Activity* pop-up window populates the :guilabel:`Title` field." msgstr "" -#: ../../content/applications/essentials/activities.rst:-1 -msgid "View of CRM leads and the option to schedule an activity." +#: ../../content/applications/essentials/activities.rst:166 +msgid "Enter the information in the :guilabel:`New Event` pop-up window, then click :guilabel:`Save & Close` to schedule it. Once scheduled, the activity is added to the chatter under the :guilabel:`Planned Activities` section." msgstr "" -#: ../../content/applications/essentials/activities.rst:178 +#: ../../content/applications/essentials/activities.rst:173 msgid "All scheduled activities" msgstr "" -#: ../../content/applications/essentials/activities.rst:180 +#: ../../content/applications/essentials/activities.rst:175 msgid "To view a consolidated list of activities, organized by application, click the |clock| in the header menu, located in the top-right corner." msgstr "" -#: ../../content/applications/essentials/activities.rst:183 -msgid "If any activities are scheduled, the number of activities appear in a red bubble on the |clock|." +#: ../../content/applications/essentials/activities.rst:178 +msgid "If any activities are scheduled, the number of activities appears in a red bubble on the |clock|." msgstr "" -#: ../../content/applications/essentials/activities.rst:186 +#: ../../content/applications/essentials/activities.rst:181 msgid "All activities for each application are further divided into subsections, indicating where in the application the activity is to be completed. Each sub-section lists the number of scheduled activities that are :guilabel:`Late`, due :guilabel:`Today`, and scheduled in the :guilabel:`Future`." msgstr "" -#: ../../content/applications/essentials/activities.rst:192 -msgid "In the *Time Off* application, one activity is scheduled to be done in the *All Time Off* requests dashboard, and six activities are scheduled to be done in the *Allocations* dashboard." +#: ../../content/applications/essentials/activities.rst:187 +msgid "In the **Time Off** application, one activity is scheduled to be done in the *All Time Off* requests dashboard, and six activities are scheduled to be done in the *Allocations* dashboard." msgstr "" -#: ../../content/applications/essentials/activities.rst:195 +#: ../../content/applications/essentials/activities.rst:190 msgid "These requests appear in two separate lists in the all activities drop-down menu: one labeled `Time Off` and one labeled `Time Off Allocation`." msgstr "" #: ../../content/applications/essentials/activities.rst:0 -msgid "The list of activities that is accessed from the main menu bar. Two entries for the Time\n" -"Off application are highlighted." +msgid "The list of activities that is accessed from the main menu bar." msgstr "" -#: ../../content/applications/essentials/activities.rst:204 +#: ../../content/applications/essentials/activities.rst:197 msgid "The option to :ref:`Request a Document ` is available at the bottom of the list of all scheduled activities." msgstr "" -#: ../../content/applications/essentials/activities.rst:210 +#: ../../content/applications/essentials/activities.rst:203 msgid "Activity types" msgstr "" -#: ../../content/applications/essentials/activities.rst:212 +#: ../../content/applications/essentials/activities.rst:205 msgid "To view the currently configured types of activities in the database, navigate to :menuselection:`Settings app --> Discuss section --> Activities setting --> Activity Types`." msgstr "" @@ -290,123 +305,119 @@ msgstr "" msgid "Activity Types button in the Settings application under the Discuss section." msgstr "" -#: ../../content/applications/essentials/activities.rst:219 +#: ../../content/applications/essentials/activities.rst:211 msgid "Doing so reveals the :guilabel:`Activity Types` page, where the existing activity types are found." msgstr "" -#: ../../content/applications/essentials/activities.rst:222 -msgid "Individual applications have a list of *Activity Types* dedicated to that application. For example, to view and edit the activities available for the *CRM* application, go to :menuselection:`CRM app --> Configuration --> Activity Types`." +#: ../../content/applications/essentials/activities.rst:214 +msgid "Individual applications have a list of *Activity Types* dedicated to that application. For example, to view and edit the activities available for the **CRM** application, go to :menuselection:`CRM app --> Configuration --> Activity Types`." msgstr "" #: ../../content/applications/essentials/activities.rst:-1 msgid "The list of activity types already configured and available." msgstr "" -#: ../../content/applications/essentials/activities.rst:231 +#: ../../content/applications/essentials/activities.rst:222 msgid "Edit activity types" msgstr "" -#: ../../content/applications/essentials/activities.rst:233 +#: ../../content/applications/essentials/activities.rst:224 msgid "To edit an existing :ref:`activity type `, click on the activity type, and the activity type form loads." msgstr "" -#: ../../content/applications/essentials/activities.rst:236 +#: ../../content/applications/essentials/activities.rst:227 msgid "Make any desired changes to the activity type form. The form automatically saves, but it can be saved manually at any time by clicking the :guilabel:`Save Manually` option, represented by a :icon:`fa-cloud-upload` :guilabel:`(cloud upload)` icon, located in the top-left corner of the page." msgstr "" -#: ../../content/applications/essentials/activities.rst:241 +#: ../../content/applications/essentials/activities.rst:232 msgid "Create new activity types" msgstr "" -#: ../../content/applications/essentials/activities.rst:243 -msgid "To create a new :ref:`activity type `, click :guilabel:`New` from the :guilabel:`Activity Types` page, and a blank activity type form loads." +#: ../../content/applications/essentials/activities.rst:234 +msgid "To create a new :ref:`activity type `, click :guilabel:`New` from the :guilabel:`Activity Types` page, and a blank activity type form loads. Enter a :guilabel:`Name` for the activity type at the top of the form, then enter the following information on the form." msgstr "" -#: ../../content/applications/essentials/activities.rst:246 -msgid "Enter a :guilabel:`Name` for the activity type at the top of the form, then enter the following information on the form." -msgstr "" - -#: ../../content/applications/essentials/activities.rst:250 +#: ../../content/applications/essentials/activities.rst:239 msgid "Activity Settings section" msgstr "" -#: ../../content/applications/essentials/activities.rst:252 +#: ../../content/applications/essentials/activities.rst:241 msgid ":guilabel:`Action`: Using the drop-down menu, select an action associated with this new activity type. Some actions trigger specific behaviors after an activity is scheduled, such as:" msgstr "" -#: ../../content/applications/essentials/activities.rst:255 +#: ../../content/applications/essentials/activities.rst:244 msgid ":guilabel:`Upload Document`: If selected, a link to upload a document is automatically added to the planned activity in the chatter." msgstr "" -#: ../../content/applications/essentials/activities.rst:257 +#: ../../content/applications/essentials/activities.rst:246 msgid ":guilabel:`Call` or :guilabel:`Meeting`: If selected, users have the option to open their calendar to select a date and time for the activity." msgstr "" -#: ../../content/applications/essentials/activities.rst:259 -msgid ":guilabel:`Request Signature`: If selected, a link to open a signature request pop-up window is automatically added to the planned activity in the chatter. This requires the Odoo *Sign* application to be installed." +#: ../../content/applications/essentials/activities.rst:248 +msgid ":guilabel:`Request Signature`: If selected, a link to open a signature request pop-up window is automatically added to the planned activity in the chatter. This requires the Odoo **Sign** application to be installed." msgstr "" -#: ../../content/applications/essentials/activities.rst:264 +#: ../../content/applications/essentials/activities.rst:253 msgid "Available activity types vary based on the installed applications in the database." msgstr "" -#: ../../content/applications/essentials/activities.rst:266 +#: ../../content/applications/essentials/activities.rst:255 msgid ":guilabel:`Folder`: Select a specific :ref:`folder ` to save a document to. This field **only** appears if :guilabel:`Upload Document` is selected for the :guilabel:`Action`." msgstr "" -#: ../../content/applications/essentials/activities.rst:269 +#: ../../content/applications/essentials/activities.rst:258 msgid ":guilabel:`Default User`: Select a user from the drop-down menu to automatically assign this activity to the selected user when this activity type is scheduled. If this field is left blank, the activity is assigned to the user who creates the activity." msgstr "" -#: ../../content/applications/essentials/activities.rst:272 +#: ../../content/applications/essentials/activities.rst:261 msgid ":guilabel:`Default Summary`: enter a note to include whenever this activity type is created." msgstr "" -#: ../../content/applications/essentials/activities.rst:275 +#: ../../content/applications/essentials/activities.rst:264 msgid "The information in the :guilabel:`Default User` and :guilabel:`Default Summary` fields are included when an activity is created. However, they can be altered before the activity is scheduled or saved." msgstr "" -#: ../../content/applications/essentials/activities.rst:279 +#: ../../content/applications/essentials/activities.rst:268 msgid ":guilabel:`Keep Done`: Tick this checkbox to keep activities that have been marked as `Done` visible in the :ref:`activity view `." msgstr "" -#: ../../content/applications/essentials/activities.rst:281 +#: ../../content/applications/essentials/activities.rst:270 msgid ":guilabel:`Default Note`: enter any notes to appear with the activity." msgstr "" -#: ../../content/applications/essentials/activities.rst:284 +#: ../../content/applications/essentials/activities.rst:273 msgid "Next Activity section" msgstr "" -#: ../../content/applications/essentials/activities.rst:286 +#: ../../content/applications/essentials/activities.rst:275 msgid "It is possible to have another activity either suggested or triggered. To do so, configure the :guilabel:`Next Activity` section." msgstr "" -#: ../../content/applications/essentials/activities.rst:289 +#: ../../content/applications/essentials/activities.rst:278 msgid ":guilabel:`Chaining Type`: select either :guilabel:`Suggest Next Activity` or :guilabel:`Trigger Next Activity` from the drop-down menu. Depending on the selected option, either the :guilabel:`Suggest` or :guilabel:`Trigger` field is displayed." msgstr "" -#: ../../content/applications/essentials/activities.rst:294 +#: ../../content/applications/essentials/activities.rst:283 msgid "The :guilabel:`Chaining Type` field does **not** appear if :guilabel:`Upload Document` is selected for the :guilabel:`Action`." msgstr "" -#: ../../content/applications/essentials/activities.rst:297 +#: ../../content/applications/essentials/activities.rst:286 msgid ":guilabel:`Suggest/Trigger`: depending on what is selected for the :guilabel:`Chaining Type`, this field either displays :guilabel:`Suggest` or :guilabel:`Trigger`. Using the drop-down menu, select the activity to recommend or schedule as a follow-up task to the activity type." msgstr "" -#: ../../content/applications/essentials/activities.rst:300 +#: ../../content/applications/essentials/activities.rst:289 msgid ":guilabel:`Schedule`: configure when the next activity is suggested or triggered." msgstr "" -#: ../../content/applications/essentials/activities.rst:302 +#: ../../content/applications/essentials/activities.rst:291 msgid "First, enter a numerical value indicating when the activity is suggested or triggered." msgstr "" -#: ../../content/applications/essentials/activities.rst:304 +#: ../../content/applications/essentials/activities.rst:293 msgid "Next to this field, a :guilabel:`Days` field is visible. Click :guilabel:`Days`, the default option, to reveal a drop-down menu. Select the desired time-frame option from the list. The options are :guilabel:`Days`, :guilabel:`Weeks`, or :guilabel:`Months`." msgstr "" -#: ../../content/applications/essentials/activities.rst:308 +#: ../../content/applications/essentials/activities.rst:297 msgid "Lastly, using the drop-down menu, select whether the activity is scheduled or triggered either :guilabel:`after previous activity deadline` or :guilabel:`after completion date`." msgstr "" @@ -414,15 +425,15 @@ msgstr "" msgid "A new Activity form with all the fields filled out." msgstr "" -#: ../../content/applications/essentials/activities.rst:316 +#: ../../content/applications/essentials/activities.rst:304 msgid ":doc:`../productivity/discuss`" msgstr "" -#: ../../content/applications/essentials/activities.rst:317 +#: ../../content/applications/essentials/activities.rst:305 msgid ":doc:`../productivity/discuss/team_communication`" msgstr "" -#: ../../content/applications/essentials/activities.rst:318 +#: ../../content/applications/essentials/activities.rst:306 msgid ":doc:`../sales/crm/optimize/utilize_activities`" msgstr "" @@ -671,86 +682,62 @@ msgid "Follow the :doc:`Resellers documentation <../sales/crm/track_leads/resell msgstr "" #: ../../content/applications/essentials/contacts.rst:187 -msgid "Membership tab" -msgstr "" - -#: ../../content/applications/essentials/contacts.rst:189 -msgid "Finally, there is the :guilabel:`Membership` tab on contact forms, which can help users manage any memberships that are being offered to this specific contact. It should be noted that this tab **only** appears when the *Members* application is installed." -msgstr "" - -#: ../../content/applications/essentials/contacts.rst:194 -msgid "Activate membership" -msgstr "" - -#: ../../content/applications/essentials/contacts.rst:196 -msgid "To activate a contact's membership, click :guilabel:`Buy Membership` in the :guilabel:`Membership` tab of a contact form. On the pop-up window that appears, select a :guilabel:`Membership` from the drop-down menu. Then, configure a :guilabel:`Member Price`. Click :guilabel:`Invoice Membership` when both fields are filled in." -msgstr "" - -#: ../../content/applications/essentials/contacts.rst:201 -msgid "Alternatively, to offer a free membership, tick the :guilabel:`Free Member` checkbox, in the :guilabel:`Membership` tab of a contact form." -msgstr "" - -#: ../../content/applications/essentials/contacts.rst:205 -msgid "Follow the :doc:`Members documentation <../sales/members>` for more information on publishing members on the website." -msgstr "" - -#: ../../content/applications/essentials/contacts.rst:209 msgid "Smart buttons" msgstr "" -#: ../../content/applications/essentials/contacts.rst:211 +#: ../../content/applications/essentials/contacts.rst:189 msgid "At the top of the contact form, there are some additional options available, known as *smart buttons*." msgstr "" -#: ../../content/applications/essentials/contacts.rst:214 +#: ../../content/applications/essentials/contacts.rst:192 msgid "Here, Odoo displays a variety of records, related to this contact, that were created on other apps. Odoo integrates information from every single app, so there are many smart buttons." msgstr "" -#: ../../content/applications/essentials/contacts.rst:218 +#: ../../content/applications/essentials/contacts.rst:196 msgid "For example, there is an :guilabel:`Opportunities` smart button, where all the opportunities related to this customer from the *CRM* app are accessible." msgstr "" -#: ../../content/applications/essentials/contacts.rst:222 +#: ../../content/applications/essentials/contacts.rst:200 msgid "If the corresponding applications are installed, their related smart buttons appear automatically on a contact form." msgstr "" -#: ../../content/applications/essentials/contacts.rst:225 +#: ../../content/applications/essentials/contacts.rst:203 msgid "A user can see any :guilabel:`Meetings`, :guilabel:`Sales`, :guilabel:`POS Orders`, :guilabel:`Subscriptions`, project :guilabel:`Tasks`, and the :guilabel:`More` smart button reveals additional options, via a drop-down menu. A user can even quickly access :guilabel:`Purchases`, :guilabel:`Helpdesk` tasks, :guilabel:`On-time Rate` for deliveries, :guilabel:`Invoiced` information, :guilabel:`Vendor Bills`, and the :guilabel:`Partner Ledger` connected to this contact." msgstr "" -#: ../../content/applications/essentials/contacts.rst:231 +#: ../../content/applications/essentials/contacts.rst:209 msgid "Deliveries, documents, loyalty cards, and direct debits are *also* linked to smart buttons, like this, should there be any outstanding/on-file for this contact." msgstr "" -#: ../../content/applications/essentials/contacts.rst:234 +#: ../../content/applications/essentials/contacts.rst:212 msgid "If the contact is a partner, the user can visit their partner page on the Odoo-built website by clicking the :guilabel:`Go to Website` smart button." msgstr "" -#: ../../content/applications/essentials/contacts.rst:238 +#: ../../content/applications/essentials/contacts.rst:216 msgid "Archive contacts" msgstr "" -#: ../../content/applications/essentials/contacts.rst:240 +#: ../../content/applications/essentials/contacts.rst:218 msgid "If a user decides they no longer want to have this contact active, the record can be archived. To do that, go to the :icon:`fa-cog` :guilabel:`Action` menu at the top of the contact form, and click :guilabel:`Archive`." msgstr "" -#: ../../content/applications/essentials/contacts.rst:244 +#: ../../content/applications/essentials/contacts.rst:222 msgid "Then, click :guilabel:`OK` from the resulting :guilabel:`Confirmation` pop-up window." msgstr "" -#: ../../content/applications/essentials/contacts.rst:246 +#: ../../content/applications/essentials/contacts.rst:224 msgid "With this contact successfully archived, as indicated by a banner at the top, they do not show up in the main contacts page, but they can still be searched for with the :guilabel:`Archived` filter." msgstr "" -#: ../../content/applications/essentials/contacts.rst:250 +#: ../../content/applications/essentials/contacts.rst:228 msgid "A contact can be *unarchived*, if the user decides to work with them again. To do that, just click the :icon:`fa-cog` :guilabel:`Action` menu again at the top of the archived contact form, and click :guilabel:`Unarchive`. Upon doing so, the :guilabel:`Archived` banner is removed, and the contact is restored." msgstr "" -#: ../../content/applications/essentials/contacts.rst:256 +#: ../../content/applications/essentials/contacts.rst:234 msgid ":doc:`Add different addresses in CRM <../sales/sales/sales_quotations/different_addresses>`" msgstr "" -#: ../../content/applications/essentials/contacts.rst:257 +#: ../../content/applications/essentials/contacts.rst:235 msgid "`Odoo's eLearning Contacts tutorial `_" msgstr "" @@ -1654,7 +1641,7 @@ msgid "Use" msgstr "" #: ../../content/applications/essentials/html_editor.rst:91 -#: ../../content/applications/essentials/property_fields.rst:83 +#: ../../content/applications/essentials/property_fields.rst:89 msgid ":guilabel:`Separator`" msgstr "" @@ -2567,7 +2554,7 @@ msgid "Add property fields" msgstr "" #: ../../content/applications/essentials/property_fields.rst:23 -msgid "To add a first property field to a :ref:`form view `, click the :icon:`fa-cog` (:guilabel:`Actions`) icon, then select :icon:`fa-cogs` :guilabel:`Add Properties`." +msgid "To add a first property field to a :ref:`form view `, click the :icon:`fa-cog` (:guilabel:`Actions`) icon, then select :icon:`fa-cogs` :guilabel:`Edit Properties`." msgstr "" #: ../../content/applications/essentials/property_fields.rst:26 @@ -2591,408 +2578,447 @@ msgid "Short text on a single line" msgstr "" #: ../../content/applications/essentials/property_fields.rst:38 +#: ../../content/applications/essentials/property_fields.rst:41 #: ../../content/applications/essentials/property_fields.rst:44 -#: ../../content/applications/essentials/property_fields.rst:47 +#: ../../content/applications/essentials/property_fields.rst:50 +#: ../../content/applications/essentials/property_fields.rst:53 msgid "Enter a :guilabel:`Default Value` if desired." msgstr "" #: ../../content/applications/essentials/property_fields.rst:39 -msgid ":ref:`Checkbox `" +msgid ":guilabel:`Multiline Text`" msgstr "" #: ../../content/applications/essentials/property_fields.rst:40 +msgid "Full text on multiple lines" +msgstr "" + +#: ../../content/applications/essentials/property_fields.rst:42 +msgid ":ref:`HTML `" +msgstr "" + +#: ../../content/applications/essentials/property_fields.rst:43 +msgid "HTML field" +msgstr "" + +#: ../../content/applications/essentials/property_fields.rst:45 +msgid ":ref:`Checkbox `" +msgstr "" + +#: ../../content/applications/essentials/property_fields.rst:46 msgid "Checked or unchecked status" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:41 +#: ../../content/applications/essentials/property_fields.rst:47 msgid "Choose the :guilabel:`Default State`." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:42 +#: ../../content/applications/essentials/property_fields.rst:48 msgid ":ref:`Integer `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:43 +#: ../../content/applications/essentials/property_fields.rst:49 msgid "Integer numbers (:dfn:`positive, negative, or zero, without a decimal`)" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:45 +#: ../../content/applications/essentials/property_fields.rst:51 msgid ":ref:`Decimal `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:46 +#: ../../content/applications/essentials/property_fields.rst:52 msgid "Decimal numbers (:dfn:`positive, negative, or zero, with a decimal`)" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:48 +#: ../../content/applications/essentials/property_fields.rst:54 msgid ":ref:`Date `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:49 +#: ../../content/applications/essentials/property_fields.rst:55 msgid "Selection of a date on a calendar" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:50 -#: ../../content/applications/essentials/property_fields.rst:53 -#: ../../content/applications/essentials/property_fields.rst:76 +#: ../../content/applications/essentials/property_fields.rst:56 +#: ../../content/applications/essentials/property_fields.rst:59 #: ../../content/applications/essentials/property_fields.rst:82 +#: ../../content/applications/essentials/property_fields.rst:88 msgid "Select a :guilabel:`Default Value` if desired." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:51 +#: ../../content/applications/essentials/property_fields.rst:57 msgid ":ref:`Date & Time `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:52 +#: ../../content/applications/essentials/property_fields.rst:58 msgid "Selection of a date on a calendar and a time on a clock" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:54 +#: ../../content/applications/essentials/property_fields.rst:60 msgid ":ref:`Selection `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:55 +#: ../../content/applications/essentials/property_fields.rst:61 msgid "Selection of a value from a group of predefined values" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:56 +#: ../../content/applications/essentials/property_fields.rst:62 msgid "Add a selectable option by clicking :icon:`fa-plus` :guilabel:`Add a Value` and entering the :guilabel:`Option Name`." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:59 +#: ../../content/applications/essentials/property_fields.rst:65 msgid "If desired, set an option as default by clicking the :icon:`fa-star-o` (:guilabel:`Select Default`) button." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:62 +#: ../../content/applications/essentials/property_fields.rst:68 msgid "Reorder the options by dragging and dropping them using the :icon:`oi-draggable` (:guilabel:`drag handle`) button." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:65 +#: ../../content/applications/essentials/property_fields.rst:71 msgid "Delete an option by clicking the :icon:`fa-trash-o` (:guilabel:`Remove Property`) button." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:66 +#: ../../content/applications/essentials/property_fields.rst:72 msgid ":ref:`Tags `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:67 +#: ../../content/applications/essentials/property_fields.rst:73 msgid "Selection of multiple values in the form of tags" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:68 +#: ../../content/applications/essentials/property_fields.rst:74 msgid "Enter a :guilabel:`Tag` name and press `Enter` to save it." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:70 +#: ../../content/applications/essentials/property_fields.rst:76 msgid "Change a tag's color by clicking it and selecting another one." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:71 +#: ../../content/applications/essentials/property_fields.rst:77 msgid ":ref:`Many2one `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:72 +#: ../../content/applications/essentials/property_fields.rst:78 msgid "Selection of a single record from another model" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:73 #: ../../content/applications/essentials/property_fields.rst:79 +#: ../../content/applications/essentials/property_fields.rst:85 msgid "Enter the :guilabel:`Model` name. Configure its :ref:`Domain ` to filter records if needed." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:77 +#: ../../content/applications/essentials/property_fields.rst:83 msgid ":ref:`Many2many `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:78 +#: ../../content/applications/essentials/property_fields.rst:84 msgid "Selection of multiple records from another model" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:84 +#: ../../content/applications/essentials/property_fields.rst:90 msgid "Group several properties under a foldable label" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:87 +#: ../../content/applications/essentials/property_fields.rst:93 msgid "Click outside the popover to save the added property." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:90 +#: ../../content/applications/essentials/property_fields.rst:96 msgid "Select whether to display the property in the Kanban, List, or Calendar views cards for every field with the :guilabel:`Display in Cards` option." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:92 -msgid "To add another property, click :icon:`fa-plus` :guilabel:`Add a Property` at the bottom of the form while in :icon:`fa-cogs` :guilabel:`Add Properties` mode." +#: ../../content/applications/essentials/property_fields.rst:98 +msgid "To add another property, click :icon:`fa-plus` :guilabel:`Add a Property` at the bottom of the form while." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:96 +#: ../../content/applications/essentials/property_fields.rst:102 msgid "To edit an existing property, hover the cursor over the property:" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:98 +#: ../../content/applications/essentials/property_fields.rst:104 msgid "Click the :icon:`fa-pencil` (:guilabel:`pencil`) button to open a popover and modify the property. In the popover, click the :icon:`fa-chevron-up` (up) or :icon:`fa-chevron-down` (down) chevron to move a property upwards or downwards." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:101 +#: ../../content/applications/essentials/property_fields.rst:107 msgid "Click :icon:`fa-trash` :guilabel:`Delete`, then :guilabel:`Delete` to delete it. Deleting a property is permanent." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:103 +#: ../../content/applications/essentials/property_fields.rst:109 msgid "Use the :icon:`oi-draggable` (:guilabel:`drag handle`) icon to drag and drop the property to reorder or regroup." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:109 +#: ../../content/applications/essentials/property_fields.rst:115 msgid "Properties across apps" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:111 +#: ../../content/applications/essentials/property_fields.rst:117 msgid "Property fields can be defined in the :ref:`form view ` of multiple models. Once set, the property is shared by all records that are linked to the same *parent*." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:119 +#: ../../content/applications/essentials/property_fields.rst:125 msgid "App" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:120 +#: ../../content/applications/essentials/property_fields.rst:126 msgid "Model" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:121 +#: ../../content/applications/essentials/property_fields.rst:127 msgid "Parent" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:122 +#: ../../content/applications/essentials/property_fields.rst:128 msgid ":guilabel:`Accounting`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:123 +#: ../../content/applications/essentials/property_fields.rst:129 msgid ":ref:`Asset/Revenue Recognition `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:125 +#: ../../content/applications/essentials/property_fields.rst:131 msgid ":doc:`Loan `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:126 +#: ../../content/applications/essentials/property_fields.rst:132 msgid ":ref:`Asset model `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:128 +#: ../../content/applications/essentials/property_fields.rst:134 msgid ":ref:`Journal `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:129 +#: ../../content/applications/essentials/property_fields.rst:135 msgid ":guilabel:`Appraisals`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:130 +#: ../../content/applications/essentials/property_fields.rst:136 msgid ":ref:`Employee Appraisal `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:131 +#: ../../content/applications/essentials/property_fields.rst:137 msgid ":ref:`Department `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:132 +#: ../../content/applications/essentials/property_fields.rst:138 +msgid ":guilabel:`Approvals`" +msgstr "" + +#: ../../content/applications/essentials/property_fields.rst:139 +msgid "Approval Request" +msgstr "" + +#: ../../content/applications/essentials/property_fields.rst:140 +#: ../../content/applications/essentials/property_fields.rst:202 +msgid "Category" +msgstr "" + +#: ../../content/applications/essentials/property_fields.rst:141 msgid ":guilabel:`CRM`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:133 +#: ../../content/applications/essentials/property_fields.rst:142 msgid ":doc:`Lead/Opportunity `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:134 +#: ../../content/applications/essentials/property_fields.rst:143 msgid ":ref:`Sales team `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:135 +#: ../../content/applications/essentials/property_fields.rst:144 msgid ":guilabel:`Employees`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:136 +#: ../../content/applications/essentials/property_fields.rst:145 msgid ":ref:`Employee `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:137 +#: ../../content/applications/essentials/property_fields.rst:146 msgid ":ref:`Company `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:138 +#: ../../content/applications/essentials/property_fields.rst:147 msgid ":guilabel:`Events`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:139 +#: ../../content/applications/essentials/property_fields.rst:148 msgid ":doc:`Event Registration `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:140 +#: ../../content/applications/essentials/property_fields.rst:149 msgid ":ref:`Event `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:141 +#: ../../content/applications/essentials/property_fields.rst:150 msgid ":guilabel:`Fleet`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:142 +#: ../../content/applications/essentials/property_fields.rst:151 msgid ":doc:`Vehicle `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:143 +#: ../../content/applications/essentials/property_fields.rst:152 msgid ":ref:`Vehicle model `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:144 +#: ../../content/applications/essentials/property_fields.rst:153 msgid ":guilabel:`Frontdesk`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:145 +#: ../../content/applications/essentials/property_fields.rst:154 msgid ":ref:`Frontdesk Visitors `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:146 +#: ../../content/applications/essentials/property_fields.rst:155 msgid ":ref:`Station `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:147 +#: ../../content/applications/essentials/property_fields.rst:156 msgid ":guilabel:`Helpdesk`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:148 +#: ../../content/applications/essentials/property_fields.rst:157 msgid ":ref:`Ticket `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:149 +#: ../../content/applications/essentials/property_fields.rst:158 msgid ":ref:`Helpdesk team `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:150 +#: ../../content/applications/essentials/property_fields.rst:159 msgid ":guilabel:`Inventory`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:151 +#: ../../content/applications/essentials/property_fields.rst:160 msgid ":ref:`Lot/Serial `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:153 +#: ../../content/applications/essentials/property_fields.rst:162 msgid ":doc:`Transfer `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:156 +#: ../../content/applications/essentials/property_fields.rst:165 msgid ":ref:`Batch Transfer `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:157 +#: ../../content/applications/essentials/property_fields.rst:166 msgid ":ref:`Product variant `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:159 -#: ../../content/applications/essentials/property_fields.rst:161 +#: ../../content/applications/essentials/property_fields.rst:168 +#: ../../content/applications/essentials/property_fields.rst:170 msgid ":ref:`Operation type `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:162 +#: ../../content/applications/essentials/property_fields.rst:171 msgid ":guilabel:`Knowledge`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:163 +#: ../../content/applications/essentials/property_fields.rst:172 msgid ":ref:`Knowledge Article `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:164 +#: ../../content/applications/essentials/property_fields.rst:173 msgid ":ref:`Parent article `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:165 +#: ../../content/applications/essentials/property_fields.rst:174 msgid ":guilabel:`Maintenance`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:166 +#: ../../content/applications/essentials/property_fields.rst:175 msgid ":ref:`Maintenance Equipment `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:167 +#: ../../content/applications/essentials/property_fields.rst:176 msgid ":ref:`Equipment category `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:168 +#: ../../content/applications/essentials/property_fields.rst:177 msgid ":guilabel:`Meeting Rooms`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:169 +#: ../../content/applications/essentials/property_fields.rst:178 msgid "Room" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:170 +#: ../../content/applications/essentials/property_fields.rst:179 msgid "Office" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:171 +#: ../../content/applications/essentials/property_fields.rst:180 msgid ":guilabel:`Planning`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:172 +#: ../../content/applications/essentials/property_fields.rst:181 msgid ":ref:`Shift `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:173 +#: ../../content/applications/essentials/property_fields.rst:182 msgid ":ref:`Role `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:174 +#: ../../content/applications/essentials/property_fields.rst:183 msgid ":guilabel:`Project` / :guilabel:`Field Service`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:175 +#: ../../content/applications/essentials/property_fields.rst:184 msgid ":ref:`Task `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:176 +#: ../../content/applications/essentials/property_fields.rst:185 msgid ":ref:`Project `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:177 +#: ../../content/applications/essentials/property_fields.rst:186 msgid ":guilabel:`Recruitment`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:178 +#: ../../content/applications/essentials/property_fields.rst:187 msgid ":ref:`Applicant `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:180 +#: ../../content/applications/essentials/property_fields.rst:189 msgid ":ref:`Job Position `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:182 +#: ../../content/applications/essentials/property_fields.rst:191 msgid "Candidate" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:183 +#: ../../content/applications/essentials/property_fields.rst:192 msgid ":ref:`Job position `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:185 -#: ../../content/applications/essentials/property_fields.rst:187 -#: ../../content/applications/essentials/property_fields.rst:190 +#: ../../content/applications/essentials/property_fields.rst:194 +#: ../../content/applications/essentials/property_fields.rst:196 +#: ../../content/applications/essentials/property_fields.rst:199 msgid ":ref:`Company `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:188 +#: ../../content/applications/essentials/property_fields.rst:197 msgid ":guilabel:`Repairs`" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:189 +#: ../../content/applications/essentials/property_fields.rst:198 msgid ":ref:`Repair order `" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:191 +#: ../../content/applications/essentials/property_fields.rst:200 msgid ":guilabel:`Sales` / etc." msgstr "" -#: ../../content/applications/essentials/property_fields.rst:192 +#: ../../content/applications/essentials/property_fields.rst:201 msgid "Product" msgstr "" -#: ../../content/applications/essentials/property_fields.rst:193 -msgid "Category" +#: ../../content/applications/essentials/property_fields.rst:205 +msgid "The following models do not depend on any *parent* and apply to all records:" +msgstr "" + +#: ../../content/applications/essentials/property_fields.rst:207 +msgid ":doc:`Contact Form <../../../applications/essentials/contacts>` in the :guilabel:`Contacts` app" +msgstr "" + +#: ../../content/applications/essentials/property_fields.rst:208 +msgid ":ref:`Mailing List Contacts ` in the :guilabel:`Email Marketing` app" msgstr "" #: ../../content/applications/essentials/reporting.rst:3 @@ -3420,12 +3446,8 @@ msgstr "" msgid "The options in the :icon:`fa-adjust` :guilabel:`Comparison` section are used to compare data from two different time periods. Pick between the two comparison options: :guilabel:`(Time Filter): Previous Period` and :guilabel:`(Time Filter): Previous Year`." msgstr "" -#: ../../content/applications/essentials/search.rst:201 -msgid "For some reports, the :guilabel:`Comparison` section **only** appears in the search bar drop-down" -msgstr "" - -#: ../../content/applications/essentials/search.rst:200 -msgid "menu if one (or more) time periods have been selected in the :guilabel:`Filters` column. This is because there is nothing to compare if no time period is specified." +#: ../../content/applications/essentials/search.rst:199 +msgid "For some reports, the :guilabel:`Comparison` section **only** appears in the search bar drop-down menu if one (or more) time periods have been selected in the :guilabel:`Filters` column. This is because there is nothing to compare if no time period is specified." msgstr "" #: ../../content/applications/essentials/search.rst:203 @@ -3496,11 +3518,7 @@ msgstr "" msgid ":guilabel:`Default filter`: Sets the favorited search as the default filter for the view." msgstr "" -#: ../../content/applications/essentials/search.rst:263 -msgid ":guilabel:`Shared`: Makes the favorited search available to all users. Otherwise, by default, the favorited search is only available to the user who created it." -msgstr "" - -#: ../../content/applications/essentials/search.rst:266 +#: ../../content/applications/essentials/search.rst:264 msgid "Once the options are set, click :guilabel:`Save` to save the favorited search." msgstr "" @@ -3508,22 +3526,34 @@ msgstr "" msgid "Saving a favorite search on the Sales Analysis report." msgstr "" -#: ../../content/applications/essentials/search.rst:272 -msgid "Favorited searches can be accessed by clicking the :icon:`fa-caret-down` :guilabel:`(dropdown)` icon in the search bar, then selecting the saved search under :icon:`fa-star` :guilabel:`Favorites`." +#: ../../content/applications/essentials/search.rst:270 +msgid "Favorited searches are accessed by clicking the :icon:`fa-caret-down` :guilabel:`(dropdown)` icon in the search bar, and are shown under :icon:`fa-star` :guilabel:`Favorites`. Searches that are only visible to the current user, i.e., that are not shared, are shown first, while any :ref:`shared favorites `, whether created by the current user or another user, are shown in a second section." msgstr "" #: ../../content/applications/essentials/search.rst:276 -msgid "Favorited searches that are only visible to the current user, i.e., that are not shared, are shown first; any shared searches, whether created by the current user or another user, are shown in a second section." +msgid "To edit, archive, or remove a favorited search, hover over the search name in the list of favorites and click :icon:`fa-pencil` :guilabel:`(Edit favorite)`. The following fields can be modified: :guilabel:`Filter Name`, :ref:`Shared with `, :guilabel:`Default Filter`, :guilabel:`Domain`. To archive or remove the favorite, click :icon:`fa-cog` :guilabel:`(Actions)` then :icon:`oi-archive` :guilabel:`Archive` or :icon:`fa-trash` :guilabel:`Delete`, as appropriate." +msgstr "" + +#: ../../content/applications/essentials/search.rst:283 +msgid "When a favorited search is in use, additional filters or groups can be used to further refine the search. The conditions applied by the favorited search can also be modified by hovering over the :icon:`fa-star` :guilabel:`(star)` beside the search name then clicking the :icon:`fa-cog` :guilabel:`(cog)` icon. These changes only affect the current search." +msgstr "" + +#: ../../content/applications/essentials/search.rst:287 +msgid "To edit the grouping or sorting of a favorited search, :ref:`activate developer mode ` when editing the search, then modify the :guilabel:`Context` or :guilabel:`Sort` fields as needed." +msgstr "" + +#: ../../content/applications/essentials/search.rst:290 +msgid "To view *all* favorited searches, with developer mode activated, navigate to :menuselection:`Settings app --> Technical --> User-defined Filters`. From here, all favorited searches can be viewed, edited, archived, or deleted." msgstr "" -#: ../../content/applications/essentials/search.rst:280 -msgid "To edit a favorited search, select the relevant saved search, hover over the :icon:`fa-star` :guilabel:`(star)` icon beside the search name in the search bar, then click the :icon:`fa-cog` :guilabel:`(cog)` icon. Modify the conditions as needed, then click :guilabel:`Confirm`." +#: ../../content/applications/essentials/search.rst:297 +msgid "Share a favorited search" msgstr "" -#: ../../content/applications/essentials/search.rst:284 -msgid "To delete a favorited search, click the :icon:`fa-caret-down` :guilabel:`(dropdown)` icon in the search bar, then click the :icon:`fa-trash` :guilabel:`(delete)` icon next to the saved search." +#: ../../content/applications/essentials/search.rst:299 +msgid "By default, a favorited search is only available to the user who created it. To share a favorited search with other users, click :guilabel:`Edit` when creating the favorite, or, for an existing favorite, click :icon:`fa-pencil` :guilabel:`(Edit favorite)` after hovering over the search name in the list of favorites." msgstr "" -#: ../../content/applications/essentials/search.rst:288 -msgid "To view *all* favorited searches, first activate :ref:`developer-mode`, and navigate to :menuselection:`Settings app --> Technical --> User Interface: User-defined Filters`. From here, all favorited searches can be viewed, edited, archived, or deleted." +#: ../../content/applications/essentials/search.rst:304 +msgid "In the :guilabel:`Shared with` field, select the relevant users from the drop-down menu, then click :icon:`fa-cloud-upload` :guilabel:`(Save manually)`. The favorite is now visible for all selected users under :icon:`fa-star` :guilabel:`Favorites`." msgstr "" diff --git a/locale/sources/finance.pot b/locale/sources/finance.pot index c318027108..b99582585b 100644 --- a/locale/sources/finance.pot +++ b/locale/sources/finance.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -92,6 +92,7 @@ msgstr "" #: ../../content/applications/finance/accounting.rst:114 #: ../../content/applications/finance/fiscal_localizations/egypt.rst:130 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:174 msgid "Branches" msgstr "" @@ -181,7 +182,7 @@ msgid "The following financial :doc:`reports ` are availab msgstr "" #: ../../content/applications/finance/accounting.rst:193 -#: ../../content/applications/finance/fiscal_localizations/austria.rst:32 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:39 #: ../../content/applications/finance/fiscal_localizations/chile.rst:1209 #: ../../content/applications/finance/fiscal_localizations/colombia.rst:479 msgid "Financial reports" @@ -224,12 +225,12 @@ msgid "Audit" msgstr "" #: ../../content/applications/finance/accounting.rst:207 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1052 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1157 msgid "General ledger" msgstr "" #: ../../content/applications/finance/accounting.rst:209 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1016 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1121 msgid "Trial balance" msgstr "" @@ -246,6 +247,11 @@ msgid "Check register" msgstr "" #: ../../content/applications/finance/accounting.rst:217 +#: ../../content/applications/finance/esg.rst:209 +#: ../../content/applications/finance/esg.rst:225 +#: ../../content/applications/finance/esg.rst:237 +#: ../../content/applications/finance/esg.rst:256 +#: ../../content/applications/finance/esg.rst:268 #: ../../content/applications/finance/fiscal_localizations/argentina.rst:146 #: ../../content/applications/finance/fiscal_localizations/peru.rst:374 msgid "Partner" @@ -442,7 +448,7 @@ msgid "Connect a bank for automatic synchronization" msgstr "" #: ../../content/applications/finance/accounting/bank.rst:32 -msgid "To connect your bank account to your database, go to :menuselection:`Accounting --> Configuration --> Add a Bank Account`, select your bank in the list, click on :guilabel:`Connect`, and follow the instructions." +msgid "To connect your bank account to your database, go to :menuselection:`Accounting --> Configuration --> Add a Bank Account`, select your bank in the list, click :guilabel:`Connect`, and follow the instructions." msgstr "" #: ../../content/applications/finance/accounting/bank.rst:37 @@ -460,7 +466,7 @@ msgid "If your banking institution is not available in Odoo, or if you don't wan msgstr "" #: ../../content/applications/finance/accounting/bank.rst:47 -msgid "To manually add a bank account, go to :menuselection:`Accounting --> Configuration --> Add a Bank Account`, click on :guilabel:`Record transactions manually` (at the bottom right), fill out the bank information, and click :guilabel:`Create`." +msgid "To manually add a bank account, go to :menuselection:`Accounting --> Configuration --> Add a Bank Account`, click :guilabel:`Record transactions manually` (at the bottom right), fill out the bank information, and click :guilabel:`Create`." msgstr "" #: ../../content/applications/finance/accounting/bank.rst:52 @@ -476,7 +482,7 @@ msgid "Create a cash journal" msgstr "" #: ../../content/applications/finance/accounting/bank.rst:61 -msgid "To create a new cash journal, go to :menuselection:`Accounting --> Configuration --> Accounting: Journals`, click on :guilabel:`Create` and select :guilabel:`Cash` in the :guilabel:`Type` field." +msgid "To create a new cash journal, go to :menuselection:`Accounting --> Configuration --> Accounting: Journals`, click :guilabel:`Create` and select :guilabel:`Cash` in the :guilabel:`Type` field." msgstr "" #: ../../content/applications/finance/accounting/bank.rst:64 @@ -502,11 +508,12 @@ msgstr "" #: ../../content/applications/finance/accounting/bank/bank_synchronization/saltedge.rst:17 #: ../../content/applications/finance/accounting/bank/foreign_currency.rst:16 #: ../../content/applications/finance/accounting/bank/internal_transfers.rst:12 +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:17 #: ../../content/applications/finance/accounting/customer_invoices/cash_discounts.rst:27 #: ../../content/applications/finance/accounting/customer_invoices/cash_rounding.rst:14 #: ../../content/applications/finance/accounting/customer_invoices/customer_addresses.rst:13 #: ../../content/applications/finance/accounting/customer_invoices/deferred_revenues.rst:29 -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:52 +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:23 #: ../../content/applications/finance/accounting/customer_invoices/epc_qr_code.rst:20 #: ../../content/applications/finance/accounting/customer_invoices/payment_terms.rst:48 #: ../../content/applications/finance/accounting/customer_invoices/snailmail.rst:12 @@ -528,7 +535,7 @@ msgstr "" #: ../../content/applications/finance/accounting/taxes/fiscal_positions.rst:20 #: ../../content/applications/finance/accounting/taxes/retention.rst:11 #: ../../content/applications/finance/accounting/vendor_bills/deferred_expenses.rst:29 -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:18 +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:24 #: ../../content/applications/finance/fiscal_localizations.rst:18 #: ../../content/applications/finance/fiscal_localizations/argentina.rst:20 #: ../../content/applications/finance/fiscal_localizations/argentina.rst:715 @@ -537,11 +544,13 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/australia.rst:180 #: ../../content/applications/finance/fiscal_localizations/australia.rst:330 #: ../../content/applications/finance/fiscal_localizations/australia.rst:403 -#: ../../content/applications/finance/fiscal_localizations/austria.rst:6 -#: ../../content/applications/finance/fiscal_localizations/austria.rst:49 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:8 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:60 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:179 #: ../../content/applications/finance/fiscal_localizations/belgium.rst:8 -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:255 -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:534 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:252 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:443 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:601 #: ../../content/applications/finance/fiscal_localizations/brazil.rst:212 #: ../../content/applications/finance/fiscal_localizations/brazil.rst:473 #: ../../content/applications/finance/fiscal_localizations/brazil.rst:666 @@ -553,17 +562,17 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/germany.rst:256 #: ../../content/applications/finance/fiscal_localizations/guatemala.rst:61 #: ../../content/applications/finance/fiscal_localizations/hong_kong.rst:6 -#: ../../content/applications/finance/fiscal_localizations/india.rst:659 +#: ../../content/applications/finance/fiscal_localizations/india.rst:633 #: ../../content/applications/finance/fiscal_localizations/italy.rst:8 -#: ../../content/applications/finance/fiscal_localizations/italy.rst:724 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:713 #: ../../content/applications/finance/fiscal_localizations/jordan.rst:104 #: ../../content/applications/finance/fiscal_localizations/kenya.rst:8 #: ../../content/applications/finance/fiscal_localizations/luxembourg.rst:6 #: ../../content/applications/finance/fiscal_localizations/malaysia.rst:10 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:45 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:647 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:759 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:893 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:846 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1257 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1538 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1641 #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:215 #: ../../content/applications/finance/fiscal_localizations/peru.rst:88 #: ../../content/applications/finance/fiscal_localizations/peru.rst:720 @@ -647,7 +656,7 @@ msgid "Account number" msgstr "" #: ../../content/applications/finance/accounting/bank.rst:128 -msgid "If you need to **edit your bank account details**, click on the external link arrow next to your :guilabel:`Account Number`. On the account page, click on the external link arrow next to your :guilabel:`Bank` and update your bank information accordingly. These details are used when registering payments." +msgid "If you need to **edit your bank account details**, click the external link arrow next to your :guilabel:`Account Number`. On the account page, click the external link arrow next to your :guilabel:`Bank` and update your bank information accordingly. These details are used when registering payments." msgstr "" #: ../../content/applications/finance/accounting/bank.rst:-1 @@ -755,7 +764,7 @@ msgid ":doc:`Enable Banking `: Scandinavian msgstr "" #: ../../content/applications/finance/accounting/bank/bank_synchronization.rst:25 -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:18 +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:22 msgid ":doc:`transactions`" msgstr "" @@ -1564,282 +1573,542 @@ msgid "Bank reconciliation" msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation.rst:5 -msgid "**Bank reconciliation** is the process of matching your :doc:`bank transactions ` with your business records, such as :doc:`customer invoices <../customer_invoices>`, :doc:`vendor bills <../vendor_bills>`, and :doc:`payments <../payments>`. Not only is this compulsory for most businesses, but it also offers several benefits, such as reduced risk of errors in financial reports, detection of fraudulent activities, and improved cash flow management." +msgid "**Bank reconciliation** is the process of validating :doc:`bank transactions `. Many of these transactions are matched with counterpart items related to business records such as :doc:`customer invoices <../customer_invoices>`, :doc:`vendor bills <../vendor_bills>`, and :doc:`payments <../payments>`, while others that may not have a matching counterpart item (such as bank fees) can be written off :ref:`manually ` or with :ref:`reconciliation models `. Not only is bank reconciliation compulsory for most businesses, but it also offers several benefits, such as reduced risk of errors in financial reports, detection of fraudulent activities, and improved cash flow management." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:11 -msgid "Thanks to the bank :doc:`reconciliation models `, Odoo pre-selects the matching entries automatically." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:14 +msgid "Thanks to the :ref:`default matching rules ` and customizable bank :doc:`reconciliation models `, Odoo selects the matching items automatically when possible." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:15 -msgid "`Odoo Tutorials: Bank reconciliation `_" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:19 +msgid "`Odoo Tutorials: Bank reconciliation `_" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:17 -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:13 +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:21 msgid ":doc:`bank_synchronization`" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:23 +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:27 msgid "Bank reconciliation view" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:25 -msgid "To access a bank journal's **reconciliation view**, go to your :guilabel:`Accounting Dashboard` and either:" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:29 +msgid "To access a journal's :guilabel:`Bank Matching` view, go to the :guilabel:`Accounting Dashboard` and either:" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:28 -msgid "click the journal name (e.g., :guilabel:`Bank`) to display all transactions, including those previously reconciled or" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:32 +#: ../../content/applications/finance/accounting/bank/transactions.rst:25 +msgid "click the journal name (e.g., :guilabel:`Bank`) or its :guilabel:`Transactions` button to display all transactions, including those previously reconciled, or" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:30 -msgid "click the :guilabel:`Reconcile items` button to display all transactions Odoo pre-selected for reconciliation. You can remove the :guilabel:`Not Matched` filter from the search bar to include previously reconciled transactions." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:34 +#: ../../content/applications/finance/accounting/bank/transactions.rst:27 +msgid "click the :guilabel:`x to reconcile` button to display only unreconciled transactions. To include previously reconciled transactions, remove the :guilabel:`Not Matched` filter from the search bar." msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation.rst:-1 -msgid "Reaching the bank reconciliation tool from your accounting dashboard" +msgid "Reaching the bank reconciliation tool from the accounting dashboard" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:37 -msgid "The bank reconciliation view is structured into three distinct sections: transactions, counterpart entries, and resulting entry." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:40 +msgid "The :guilabel:`Bank Matching` view is composed of lines for each transaction of the journal with the newest displayed first. Each transaction has a date, a label, a partner (if set), :ref:`action buttons `, and the transaction amount. Each line can be expanded to show additional information and buttons." msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation.rst:-1 -msgid "The user interface of the reconciliation view of a bank journal." +msgid "The user interface of the bank matching view of a bank journal." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:45 +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:49 +msgid "Once a :doc:`transaction ` is reconciled, the suggested action button(s) is replaced with the counterpart entry/entries it was matched with or the account(s) it was written off to." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:56 #: ../../content/applications/finance/accounting/bank/transactions.rst:3 #: ../../content/applications/finance/accounting/taxes/avatax/avalara_portal.rst:32 msgid "Transactions" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:44 -msgid "The transactions section on the left shows all bank transactions, with the newest displayed first. Click a transaction to select it." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:58 +msgid "Every :doc:`transaction ` is linked to a journal entry that debits/credits the journal's main account and its :ref:`suspense account ` until it is fully reconciled. At that point, the suspense account is replaced with the account of the counterpart item or, in the case of :ref:`manual matching `, the selected account." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:52 -msgid "Counterpart entries" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:67 +msgid "Possible action buttons" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:48 -msgid "The counterpart entries section on the bottom right displays the options to match the selected bank transaction. Multiple tabs are available, including :ref:`reconciliation/existing-entries`, :ref:`reconciliation/batch-payments`, :ref:`reconciliation/manual-operations`, and :guilabel:`Discuss`, which contains the chatter for the selected bank transaction." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:69 +msgid "Up to two suggested action buttons are available as primary buttons, but all available action buttons are displayed when the transaction is expanded. The following action buttons are available depending on the details of the transaction:" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:58 -msgid "Resulting entry" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:73 +msgid ":guilabel:`Set Partner`: Open a search view to add a partner to the transaction." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:55 -msgid "The resulting entry section on the top right displays the selected bank transaction matched with the counterpart entries and includes any remaining debits or credits. In this section, you can validate the reconciliation or mark it as :guilabel:`To Check`. Any :ref:`reconciliation model buttons ` are also available in the resulting entry section." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:74 +msgid ":guilabel:`Set Account`: Open a search view to manually select an account to write off the full amount of the transaction with this account. If necessary, :ref:`edit the line ` to change the amount." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:63 -msgid "Reconcile transactions" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:77 +msgid ":guilabel:`Receivable`: Write off the transaction to the receivable account of the partner." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:65 -msgid "Transactions can be matched automatically with the use of :doc:`reconciliation models `, or they can be matched with :ref:`existing entries `, :ref:`batch payments `, :ref:`manual operations `, and :ref:`reconciliation model buttons `." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:78 +msgid ":guilabel:`Sales`: Open a list view of sales orders belonging to the transaction's :guilabel:`Partner` (or proceed directly to the form view if only one relevant sales order exists). Select the relevant sales order(s) and click :guilabel:`Create Invoices`, then return to the :guilabel:`Bank Matching` view and match the invoice(s) using the :guilabel:`Reconcile` action button." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:71 -msgid "Select a transaction among unmatched bank transactions." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:83 +msgid ":guilabel:`Payable`: Write off the transaction to the payable account of the partner." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:72 -msgid "Define the counterpart. There are several options for defining a counterpart, including :ref:`matching existing entries `, :ref:`manual operations `, :ref:`batch payments `, and :ref:`reconciliation model buttons `." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:84 +msgid ":guilabel:`Reconcile`: Open a search view of existing items from records such as customer invoices, vendor bills, and payments. Select one or multiple items to add counterpart items with the corresponding accounts of those items." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:76 -msgid "If the resulting entry is not fully balanced, balance it by adding another existing counterpart entry or writing it off with a :ref:`manual operation `." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:87 +msgid ":guilabel:`Batches`: Open a short list of :doc:`batch payments <../payments/batch>`. To view all batch payments, click :guilabel:`Search More ...`. Select a batch payment to add a counterpart item for each payment of the batch with the corresponding account of each payment." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:78 -msgid "Click the :guilabel:`Validate` button to confirm the reconciliation and move to the next transaction." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:90 +msgid ":doc:`reconciliation_models`: Each manual reconciliation model that could apply to the transaction is displayed. Click the reconciliation model's action button to generate the counterpart items defined on the reconciliation model." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:82 -msgid "If you are not sure how to reconcile a particular transaction and would like to deal with it later, use the :guilabel:`To Check` button instead. All transactions marked as :guilabel:`To Check` can be displayed using the :guilabel:`To Check` filter." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:95 +msgid "To remove the partner from a transaction, click the :icon:`fa-times` :guilabel:`(close)` icon next to the partner's name." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:87 -msgid "Bank transactions are posted on the **journal's suspense account** until reconciliation. At this point, reconciliation modifies the transaction journal entry by replacing the bank suspense account with the corresponding receivable, payable, or outstanding account." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:98 +msgid "Click the :icon:`fa-chevron-down` :guilabel:`(chevron down)` button next to the possible action buttons of an expanded line to display any of the above action buttons that are hidden due to space limitations, as well as the following:" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:94 -msgid "Match existing entries" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:102 +msgid ":guilabel:`Upload bills`: Upload one or more bills to be :doc:`digitized <../vendor_bills/invoice_digitization>`. After digitization, the bills are available for matching via the :guilabel:`Reconcile` action button." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:96 -msgid "This tab contains matching entries Odoo automatically pre-selects according to the reconciliation models. The entry order is based on :doc:`reconciliation models `, with suggested entries appearing first." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:105 +msgid ":guilabel:`Manage Models`: Open the list view of :doc:`reconciliation_models`." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:101 -msgid "The search bar within the :guilabel:`Match Existing Entries` tab allows you to search for specific journal items." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:106 +msgid ":guilabel:`Open Journal Entry`: Open the journal entry of this transaction." msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation.rst:107 -#: ../../content/applications/finance/accounting/payments/batch.rst:3 -#: ../../content/applications/finance/fiscal_localizations/australia.rst:406 -msgid "Batch payments" +msgid ":guilabel:`Delete Transaction`: Delete this transaction." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:109 -msgid ":doc:`Batch payments <../payments/batch>` allow you to group different payments to ease reconciliation. Use the :guilabel:`Batch Payments` tab to find batch payments for customers and vendors. Similarly to the :guilabel:`Match Existing Entries` tab, the :guilabel:`Batch Payments` tab has a search bar that allows you to search for specific batch payments." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:110 +msgid "Uploading bills from the :guilabel:`Bank Matching` view does not automatically reconcile them with the active transaction." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:117 -msgid "Manual operations" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:114 +msgid ":doc:`../../../essentials/in_app_purchase`" msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation.rst:119 -msgid "If there is not an existing entry to match the selected transaction, you may instead wish to reconcile the transaction manually by choosing the correct account and amount. Then, complete any of the relevant optional fields." +msgid "Reconcile transactions" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:124 -msgid "You can use the :guilabel:`fully paid` option to reconcile a payment, even in cases where only a partial payment is received. A new line appears in the resulting entry section to reflect the open balance registered on the Account Receivable by default. You can choose another account by clicking on the new line in the resulting entry section and selecting the :guilabel:`Account` to record the open balance." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:121 +msgid "When possible, Odoo automatically reconciles transactions based on their fields." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:123 +msgid "If no partner is set on the transaction, the transaction's :guilabel:`Label` is compared with the :guilabel:`Number`, :guilabel:`Customer Reference`, :guilabel:`Bill Reference`, and :guilabel:`Payment Reference` of existing invoices, bills, and payments." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:127 +msgid "If a partner is set on the transaction, the transaction is instead matched with invoices, bills, and payments of the partner based on the :guilabel:`Amount`. The following rules are used in a sequential order to identify and apply a match:" msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation.rst:131 -msgid "Lines are silently reconciled unless a write-off entry is required, which launches a reconciliation wizard." +msgid "Exact match" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:132 +msgid "Discounted match: for payment terms with discounts for early payments" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:133 +msgid "Tolerance match: within 3% to account for merchant fees, rounding differences, and user errors" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:134 +msgid "Currency match: when the transaction is in a different currency than the invoice, bill, or payment (with a 3% tolerance for exchange rate differences)" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:136 +msgid "Amount in label: if the invoice :guilabel:`Amount` is found in the transaction's :guilabel:`Label`" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:139 +msgid "In addition to using these fixed matching rules, transactions can be matched automatically with the use of :doc:`reconciliation models `. Otherwise, reconcile transactions manually by following these steps:" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:143 +msgid "Expand the desired line among unmatched bank transactions to display all available action buttons." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:145 +msgid "Define the counterpart. There are several options for defining a counterpart, including :ref:`matching existing items `, :ref:`manually setting the account `, matching with :doc:`batch payments <../payments/batch>`, and using :ref:`reconciliation model buttons `." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:150 +msgid "If the resulting entry is not fully balanced, add another existing counterpart item or write it off by :ref:`setting the account ` of the remaining amount." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:157 +msgid "Existing items" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:159 +msgid "To reconcile transactions with existing items related to records such as customer invoices, vendor bills, and payments, click the :guilabel:`Reconcile` action button, select the matching journal item(s) in the list, and click :guilabel:`Select`." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:164 +msgid "If the :guilabel:`Partner` is set, this list is automatically filtered to only include items related to that partner." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:168 +msgid "Use the search bar within the :guilabel:`Search: Journal Items to Match` window to search for specific journal items." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:171 +msgid "If a transaction amount is lower than the invoice or bill it is reconciled with, the transaction is fully reconciled, but the difference remains open on the counterpart item. The remaining amount can be left open to be reconciled later or the invoice or bill can be marked as fully paid. To mark the invoice or bill as fully paid, :ref:`edit ` the line, click :guilabel:`fully paid`, and :guilabel:`Save`. To reverse this, :ref:`edit ` the line again, click :guilabel:`partial payment`, and :guilabel:`Save`." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:179 +msgid "If a transaction amount is greater than the invoice or bill it is reconciled with, the transaction is only partially reconciled. The remaining balance can be reconciled as any other transaction amount." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:184 +msgid "Existing items of draft entries can be matched. Eventual automatic moves (like currency exchange or cash basis moves) are created in draft simultaneously with the reconciliation. Posting the original entry also posts the automatic move." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:0 -msgid "Click on fully paid to manually set an invoice as entirely paid." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:191 +msgid "Set account" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:140 -msgid "Reconciliation model buttons" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:193 +msgid "If no existing item matches the selected transaction, you can still write off the transaction manually: Click :guilabel:`Set Account`, then choose the appropriate account. To write off only part of the transaction, :ref:`edit the line ` to reflect the correct value and reconcile the remaining amount as desired." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation.rst:142 -msgid "Use a :doc:`reconciliation model ` button for manual operations that are frequently used. These custom buttons allow you to quickly reconcile bank transactions manually and can also be used in combination with existing entries." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:199 +msgid "If the partner is set, write the amount off to their receivable or payable account directly by clicking the :guilabel:`Receivable` or :guilabel:`Payable` :ref:`action button `." msgstr "" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:206 #: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:3 msgid "Reconciliation models" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:5 -msgid "Reconciliation models are used to automate the :doc:`bank reconciliation ` process, which is especially handy when dealing with recurring entries like bank fees. Reconciliation models can also be helpful in handling :doc:`cash discounts <../customer_invoices/cash_discounts>`." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:208 +msgid "Use :doc:`reconciliation models ` to create custom rules that can be applied automatically or manually via custom buttons for operations that are frequently repeated. These custom buttons allow you to quickly reconcile bank transactions manually and can also be combined with other reconciliation models and with counterpart items when reconciling transactions." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:9 -msgid "Each model is created based on a :ref:`model type ` and :guilabel:`bank transaction conditions`." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:214 +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:140 +msgid "An outgoing bank transaction for $103 is partially matched with a vendor bill for $100, leaving $3 of the transaction still unreconciled. Use the :guilabel:`Bank Fees` reconciliation model to create a new counterpart item for $3 and reconcile it with the remaining $3 of the bank transaction." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:14 -msgid "`Odoo Tutorials: Reconciliation models `_" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:222 +msgid "Edit lines and unreconcile transactions" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:19 -msgid "Reconciliation model types" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:224 +msgid "To edit a counterpart item, expand the line, click the :icon:`fa-pencil` :guilabel:`(pencil)` icon, and edit the necessary fields in :guilabel:`Edit Line` window." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:21 -msgid "The reconciliation models are available by going to :menuselection:`Accounting --> Configuration --> Banks: Reconciliation Models`. For each reconciliation model, a :guilabel:`Type` must be set. Three types of models exist:" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:228 +msgid "When the counterpart item is an existing journal item, some fields are read-only." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:25 -msgid ":guilabel:`Button to generate counterpart entry`: a button is created in the resulting entry section of the bank reconciliation view. If clicked, this button generates a counterpart entry to reconcile with the active transaction based on the rules set in the model. The rules specified in the model determine the counterpart entry's account(s), amount(s), label(s), and analytic distribution;" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:230 +msgid "If a transaction is partially matched with a counterpart item, use the link to mark the invoice as :guilabel:`fully paid` or to switch back to a :guilabel:`partial payment`." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:30 -msgid ":guilabel:`Rule to suggest counterpart entry`: used for recurring transactions to match the transaction to a new entry based on conditions that must match the information on the transaction;" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:233 +msgid "To unreconcile a transaction, delete all counterpart items associated with the transaction by clicking on the :icon:`fa-trash` :guilabel:`(trash)` icon." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:32 -msgid ":guilabel:`Rule to match invoices/bills`: used for recurring transactions to match the transaction to existing invoices, bills, or payments based on conditions that must match the information on the transaction." +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:239 +msgid "Netting" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:37 -msgid "Default reconciliation models" +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:241 +msgid "Netting (also known as AP/AR offsetting) is the process of balancing incoming debts from and outgoing debts to the same partner. Reconciling the incoming and outgoing debts creates a new journal entry that balances the debts. Two main scenarios exist:" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:245 +msgid ":ref:`A bank transaction balances ` (either fully or partially) the incoming and outgoing debts." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:247 +msgid ":ref:`No bank transaction balances ` the incoming and outgoing debts. This situation can occur either when the debts balance each other completely or when the debts remain unbalanced." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:254 +msgid "Netting with bank transactions" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:256 +msgid "When a bank transaction balances (either fully or partially) the incoming and outgoing debts, reconcile the bank transaction from the :guilabel:`Bank Matching` view like any other :ref:`existing items `:" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:260 +msgid "Click :guilabel:`Reconcile` on the transaction." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:261 +msgid "Select all the relevant counterpart items on both the payable and receivable side." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:262 +msgid "Click :guilabel:`Select`." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:263 +msgid "If a balance remains, depending on the details, the following situations are possible:" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:265 +msgid "An invoice, bill, or other item is not fully reconciled, and the remaining balance can be :ref:`reconciled ` with other bank transactions." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:267 +msgid "The bank transaction itself is not fully reconciled, and the remaining balance can be :ref:`reconciled ` as in any other situation." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:273 +msgid "Netting without bank transactions" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:275 +msgid "When no bank transaction balances the incoming and outgoing debts, there is nothing to reconcile from the :guilabel:`Bank Matching` view. However, the debt amount is visible in both the account receivable and the account payable. To balance these debts so that they no longer appear on the partner ledger, follow these steps:" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:280 +msgid "Go to :menuselection:`Accounting --> Accounting --> Reconcile`." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:281 +msgid "Select the journal items that debit or credit the account receivable and account payable and represent the debts to be netted." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:283 +#: ../../content/applications/finance/accounting/payments.rst:277 +msgid "Click :guilabel:`Reconcile`." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:284 +msgid "If the debts don't balance each other perfectly, a :guilabel:`Write-Off Entry` popup window appears, allowing you to decide how to resolve the remaining balance:" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:287 +msgid "Select :guilabel:`Allow partials` to only partially reconcile the account receivable and account payable and leave the remaining balance open." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:289 +msgid "Use a :doc:`reconciliation model button ` to write off the balance." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:290 +msgid "Manually choose an :guilabel:`Account`, and optionally adjust the :guilabel:`Tax`, :guilabel:`Journal`, :guilabel:`Label`, :guilabel:`Date`, and :guilabel:`To Check` fields." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:293 +msgid "The items are then matched, and their balance is removed from the partner ledger, representing that no payment is due for these debts." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation.rst:297 +msgid "The workflow is the same whether there are only two equal debts in the receivable and payable accounts or multiple debts in each account." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:5 +msgid "Reconciliation models are custom rules that complement the :ref:`default set of matching rules ` and enable more advanced automation of the :doc:`bank reconciliation ` process. These models are especially useful when dealing with recurring flows like writing off bank fees or :doc:`cash discounts <../customer_invoices/cash_discounts>`." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:12 +msgid "`Odoo Tutorials: Reconciliation models `_" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:19 +msgid "To access reconciliation models, go to the :guilabel:`Accounting Dashboard`, click the :icon:`fa-ellipsis-v` :guilabel:`(dropdown menu)` menu on the bank journal, and select :guilabel:`Models` under the :guilabel:`Reconciliation` section." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:23 +msgid "To create a new reconciliation model, click :guilabel:`New`." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:25 +msgid "Reconciliation models can be either :guilabel:`Manual` or :guilabel:`Automated`. Manual reconciliation models appear as :ref:`possible action buttons ` when :doc:`reconciling `. Automatic reconciliation models apply automatically to transactions that meet the reconciliation model's :ref:`matching conditions `." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:31 +msgid "Each reconciliation model is configured with :ref:`matching conditions ` to identify the relevant bank transactions and :ref:`Counterpart Items ` to be generated during reconciliation." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:39 -msgid "In Odoo, different models are available by default depending on the company's fiscal localization. These can be updated if needed. Users can also create their own reconciliation models by clicking :guilabel:`New`." +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:36 +msgid "To create an activity on the transaction, select which type of activity to create in the :guilabel:`Next Activity` field." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:44 -msgid "If a record matches with several reconciliation models, the first one in the *sequence* of models is applied. You can rearrange the order by dragging and dropping the handle next to the name." +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:40 +msgid "If a record matches with several reconciliation models, the first one in the *sequence* of models is applied. Rearrange the order by dragging and dropping the handle next to the name." msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:0 msgid "Rearrange the sequence of models in the list view." msgstr "" +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:49 +msgid "Matching conditions" +msgstr "" + #: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:51 -msgid "Invoices/Bills perfect match" +msgid "A reconciliation model's matching conditions determine to which transactions it applies." msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:53 -msgid "This model should be at the top of the *sequence* of models, as it enables Odoo to suggest matching existing invoices or bills with a bank transaction based on set conditions." +msgid "The following fields can be used to restrict the reconciliation model's availability to transactions that meet the conditions:" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:-1 -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:-1 -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:-1 -msgid "Set rules to trigger the reconciliation." +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:56 +msgid ":guilabel:`Journals`" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:59 -msgid "Odoo automatically reconciles the payment when the :guilabel:`Auto-validate` option is selected, and the model conditions are perfectly met. In this case, it expects to find on the bank statement's line the invoice/payment's reference (as :guilabel:`Label` is selected) and the partner's name (as :guilabel:`Partner is set` is selected) to suggest the correct counterpart entry and reconcile the payment automatically." +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:57 +msgid ":guilabel:`Partners`" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:66 -msgid "Invoices/Bills partial match if underpaid" +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:58 +msgid ":guilabel:`Amount`: Select :guilabel:`Is lower than or equal to`, :guilabel:`Is greater than or equal to`, or :guilabel:`Is between` and enter the amount(s)." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:60 +msgid ":guilabel:`Label`: Select :guilabel:`Contains`, :guilabel:`Not Contains`, or :guilabel:`Match Regex` and enter the transaction label's matching condition." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:64 +msgid "`Regular expressions `_, often abbreviated as **regex**, can be used in Odoo in various ways to search, validate, and manipulate data. Regex can be powerful but also complex, so it's essential to use it judiciously." msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:68 -msgid "This model suggests a customer invoice or vendor bill that partially matches the payment when the amount received is slightly lower than the invoice amount, for example in the case of **cash discounts**. The difference is reconciled with the account indicated in the :guilabel:`counterpart entries` tab." +msgid "To use regular expressions in a reconciliation model, set the :guilabel:`Label` to :guilabel:`Match Regex` and add an expression. Odoo automatically retrieves the transactions that match the regex expression and the conditions specified in the reconciliation model." msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:73 -msgid "The reconciliation model :guilabel:`Type` is :guilabel:`Rule to match invoices/bills`, and the :guilabel:`Payment tolerance` should be set." +msgid "A transaction must meet all conditions for the reconciliation model to be available for it. If no condition is defined (i.e., if all fields are left blank), the reconciliation model will be available for all transactions." msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:80 -msgid "The :guilabel:`Payment tolerance` is only applicable to lower payments. It is disregarded when an overpayment is received." +msgid "Counterpart items" msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:84 -msgid ":doc:`../customer_invoices/cash_discounts`" +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:82 +msgid "Each line in the :guilabel:`Counterpart items` tab creates a journal item with the specified details:" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:85 +msgid ":guilabel:`Partner`: Select the partner, if any, to set on the journal item." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:86 +msgid ":guilabel:`Account`: Select the account, if any, to set on the journal item." msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:87 -msgid "Line with bank fees" +msgid ":guilabel:`Amount Type`: Select how the amount of the journal item should be calculated:" msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:89 -msgid "This model suggests a counterpart entry according to the rules set in the model. In this case, the reconciliation model :guilabel:`Type` is :guilabel:`Rule to suggest counterpart entry`, and the :guilabel:`Label` can be used for example, to identify the information referring to the :guilabel:`Bank fees` in the label of the transaction." +msgid ":guilabel:`Fixed`: Use a fixed amount." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:90 +msgid ":guilabel:`Percentage of balance`: Use a percentage of the remaining balance of the transaction, regardless of the transaction total." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:92 +msgid ":guilabel:`Percentage of statement line`: Use a percentage of the transaction total, regardless of the remaining balance of the transaction." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:94 +msgid ":guilabel:`From label`: Use a percentage from the transaction's label using regex." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:96 +msgid ":guilabel:`Amount`: Enter the amount to be used on the journal item. This field will be either a fixed amount, percentage amount, or regex depending on the :guilabel:`Account Type`." msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:98 -msgid "`Regular expressions `_, often abbreviated as **Regex**, can be used in Odoo in various ways to search, validate, and manipulate data within the system. Regex can be powerful but also complex, so it's essential to use it judiciously and with a good understanding of the patterns you're working with." +msgid ":guilabel:`Taxes`: Select a tax, if any, to set on the journal item. This field is hidden behind the :icon:`oi-settings-adjust` :guilabel:`(settings adjust)` icon by default." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:103 -msgid "To use regular expressions in your reconciliation models, set the :guilabel:`Transaction Type` to :guilabel:`Match Regex` and add your expression. Odoo automatically retrieves the transactions that match your Regex expression and the conditions specified in your model." +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:100 +msgid ":guilabel:`Analytic`: Select an analytic distribution, if any, to set on the journal item." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:0 -msgid "Using Regex in Odoo" +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:101 +msgid ":guilabel:`Label`: Enter a label, if any, to set on the journal item." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:111 -msgid "Partner mapping" +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:104 +msgid "While neither the :guilabel:`Partner` nor :guilabel:`Account` fields are mandatory, at least one of the two must be set for the reconciliation model to work correctly." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:113 -msgid "Partner mapping allows you to establish rules for automatically matching transactions to the correct partner account, saving time and reducing the risk of errors that can occur during manual reconciliation. For example, you can create a partner mapping rule for incoming payments with specific reference numbers or keywords in the transaction description. When an incoming payment meets these criteria, Odoo automatically maps it to the corresponding customer's account." +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:106 +msgid "The reconciliation model can be used for :ref:`partner mapping ` if the :guilabel:`Counterpart Items` include a :guilabel:`Partner` but no :guilabel:`Account`." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:112 +msgid "Default reconciliation models" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:114 +msgid "In Odoo, different models are available by default depending on the company's :doc:`fiscal localization <../../fiscal_localizations>`. These can be updated if needed. The following reconciliation models exist across most fiscal localizations." msgstr "" #: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:119 -msgid "To create a partner mapping rule, go to the :guilabel:`Partner Mapping` tab and enter the :guilabel:`Find Text in Label`, :guilabel:`Find Text in Notes`, and :guilabel:`Partner`." +msgid "Internal Transfers" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:121 +msgid "The :guilabel:`Internal Transfers` reconciliation model is used for making :doc:`internal transfers ` from one bank or cash account to another by moving the entire transaction's balance to a liquidity or internal transfer account. To fully transfer the amount from one account to another, this reconciliation model must be used on both the incoming journal's transaction and the outgoing journal's transaction." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:128 +msgid ":doc:`internal_transfers`" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:131 +msgid "Bank Fees" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:133 +msgid "The :guilabel:`Bank Fees` reconciliation model generates a counterpart item that moves the remaining balance of a transaction to a bank fees account (that varies by :doc:`fiscal localization <../../fiscal_localizations>`) and includes \"Bank Fees\" in the :guilabel:`Label` of the new item that it creates. This reconciliation model is only applicable to transactions whose label contains \"Bank Fees\" due to its :ref:`matching conditions `." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:146 +msgid "Cash Discount" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:148 +msgid "The :guilabel:`Cash Discount` reconciliation model generates a counterpart item that moves the remaining balance of a transaction to a cash discount account (that varies by :doc:`fiscal localization <../../fiscal_localizations>`) and includes \"Cash Discount\" in the :guilabel:`Label` of the new item that it creates." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:154 +msgid ":doc:`../customer_invoices/cash_discounts`" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:159 +msgid "Partner mapping" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:161 +msgid "Partner mapping allows you to establish rules for automatically matching transactions to the correct partner account, saving time and reducing the risk of errors that can occur during manual reconciliation. For example, you can create a partner mapping rule for incoming payments with specific reference numbers or keywords in the transaction description. When an incoming payment meets these criteria, Odoo automatically maps it to the corresponding customer's account." msgstr "" -#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:-1 -msgid "defining partner mapping" +#: ../../content/applications/finance/accounting/bank/reconciliation_models.rst:167 +msgid "To create a partner mapping rule, configure any :ref:`matching conditions `, such as a specific transaction label, and then configure the :guilabel:`Partner` and any other relevant fields in the :ref:`Counterpart Items ` tab. Setting an :guilabel:`Account` is not mandatory for partner mapping." msgstr "" #: ../../content/applications/finance/accounting/bank/transactions.rst:5 @@ -1851,156 +2120,236 @@ msgid ":doc:`Bank synchronization ` automates the process. msgstr "" #: ../../content/applications/finance/accounting/bank/transactions.rst:11 -msgid ":ref:`Import bank transactions ` delivered by your bank;" +msgid ":ref:`Import bank transactions ` delivered by your bank;" msgstr "" #: ../../content/applications/finance/accounting/bank/transactions.rst:12 -msgid ":ref:`Register bank transactions ` manually." +msgid ":ref:`Register bank transactions ` manually." msgstr "" #: ../../content/applications/finance/accounting/bank/transactions.rst:15 -msgid ":ref:`Grouping transactions by statement ` is optional." +msgid ":ref:`Grouping transactions by statement ` is optional." msgstr "" #: ../../content/applications/finance/accounting/bank/transactions.rst:20 -msgid "Import transactions" +msgid "Transaction view" msgstr "" #: ../../content/applications/finance/accounting/bank/transactions.rst:22 +msgid "The list of transactions for the bank journal is displayed in the :guilabel:`Bank Matching` view. To access it, go to the :guilabel:`Accounting Dashboard`, then either:" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:30 +msgid "Unreconciled transactions display the following information while collapsed:" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:32 +msgid "The date of the transaction" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:33 +msgid "A button linked to the chatter. The icon of this button can vary:" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:35 +msgid "The :icon:`fa-comments-o` :guilabel:`(comments)` icon displays only on hover and indicates that there are no attachments or activities for the transaction." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:37 +msgid "The :icon:`fa-paperclip` :guilabel:`(attachments)` icon indicates that there is an attachment on the journal entry." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:39 +msgid "The :icon:`fa-clock-o` :guilabel:`(activities)` icon indicates that there is an activity scheduled on the journal entry." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:42 +msgid "The label of the transaction" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:43 +msgid "The partner of the transaction (if one is set)" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:44 +msgid "Up to two :ref:`action buttons `, depending on the details of the transaction" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:46 +msgid "The balance of the transaction" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:49 +msgid "When the chatter of a transaction is open, a blue tag highlights the related transaction." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:50 +msgid "The chatter can be opened and closed by clicking the :icon:`fa-comments-o` :guilabel:`(comments)` icon and the :icon:`fa-times` :guilabel:`(close)` icon in the top right of the view." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:53 +msgid "Once a transaction is :doc:`reconciled `, its action buttons are replaced with the labels of the item(s) it was reconciled with or the account if it was reconciled with the :guilabel:`Set Account` action button." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:60 +msgid "Duplicate transactions" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:62 +msgid "Duplicate transactions occur when either by human error or :doc:`bank sync ` error, the same transaction is created multiple times. The duplicate transaction view identifies potential duplicate transactions so they can be selected and deleted. To access the duplicate transaction view, first access the :guilabel:`Bank Matching` view by going to the :guilabel:`Accounting Dashboard` and clicking the bank journal's name, then open the :icon:`fa-cog` :guilabel:`Actions` menu and click :guilabel:`Find Duplicate Transactions`." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:69 +msgid "Potential duplicate transactions are identified based on their amount, date, and account number, or (if the transaction is created via :doc:`bank sync `) the transaction ID." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:72 +msgid "Select a :guilabel:`Starting Date` to view the corresponding potential duplicate transactions, then select the transactions to delete and click :icon:`fa-trash` :guilabel:`Delete Selected`." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:76 +msgid "Any transactions created by :doc:`bank sync ` that the bank sync provider determines to be potential duplicates are displayed in the :guilabel:`Provider Duplicates` tab. This tab is only visible if there are any potential duplicates according to the provider." +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:83 +msgid "Import transactions" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:85 msgid "Odoo supports multiple file formats to import transactions:" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:24 +#: ../../content/applications/finance/accounting/bank/transactions.rst:87 msgid "SEPA recommended Cash Management format (CAMT.053)" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:25 +#: ../../content/applications/finance/accounting/bank/transactions.rst:88 msgid "Comma-separated values (CSV)" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:26 +#: ../../content/applications/finance/accounting/bank/transactions.rst:89 +msgid "Excel (XLSX)" +msgstr "" + +#: ../../content/applications/finance/accounting/bank/transactions.rst:90 msgid "Open Financial Exchange (OFX)" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:27 +#: ../../content/applications/finance/accounting/bank/transactions.rst:91 msgid "Quicken Interchange Format (QIF)" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:28 +#: ../../content/applications/finance/accounting/bank/transactions.rst:92 msgid "Belgium: Coded Statement of Account (CODA)" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:30 -msgid "To import a file, go to the :guilabel:`Accounting Dashboard`, and in the :guilabel:`Bank` journal, click on :guilabel:`Import File`." +#: ../../content/applications/finance/accounting/bank/transactions.rst:94 +msgid "To import a file, go to the :guilabel:`Accounting Dashboard`, click the :icon:`fa-ellipsis-v` :guilabel:`(ellipsis)` icon on the :guilabel:`Bank` journal, and select :guilabel:`Import file`. Next, select the file and upload it." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:34 -msgid "Alternatively, you can also:" +#: ../../content/applications/finance/accounting/bank/transactions.rst:101 +msgid "Alternatively, access the transaction list by:" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:36 -msgid "click the :icon:`fa-ellipsis-v` :guilabel:`(ellipsis)` icon on the :guilabel:`Bank` journal and select :guilabel:`Import file`;" +#: ../../content/applications/finance/accounting/bank/transactions.rst:100 +msgid "clicking on the :guilabel:`Bank` journal's name, then clicking :guilabel:`Upload`" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:38 -msgid "or access the transaction list by clicking the :icon:`fa-ellipsis-v` :guilabel:`(ellipsis)` icon on the :guilabel:`Bank` journal and selecting :guilabel:`Transactions`, then click the :icon:`fa-cog` :guilabel:`(gear)` icon and select :guilabel:`Import records`." +#: ../../content/applications/finance/accounting/bank/transactions.rst:101 +msgid "dragging and dropping a file on the bank journal on the :guilabel:`Accounting Dashboard`" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:42 -msgid "Next, select the file and upload it." +#: ../../content/applications/finance/accounting/bank/transactions.rst:102 +msgid "dragging and dropping a file on the :guilabel:`Bank Matching` view" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:44 -msgid "After setting the necessary formatting options and mapping the file columns with their related Odoo fields, you can run a :guilabel:`Test` and :guilabel:`Import` your bank transactions." +#: ../../content/applications/finance/accounting/bank/transactions.rst:104 +msgid "Certain file types such as CSV and XLSX, then require setting the necessary formatting options and mapping the file columns with their related Odoo fields, after which you can run a :guilabel:`Test` and :guilabel:`Import` your bank transactions. Other file types are mapped automatically." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:48 +#: ../../content/applications/finance/accounting/bank/transactions.rst:109 msgid ":doc:`/applications/essentials/export_import_data`" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:53 +#: ../../content/applications/finance/accounting/bank/transactions.rst:114 msgid "Register bank transactions manually" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:55 -msgid "You can also record your bank transactions manually. To do so, go to :guilabel:`Accounting Dashboard`, click on the :guilabel:`Bank` journal, and then on :guilabel:`New`. Make sure to fill out the :guilabel:`Partner` and :guilabel:`Label` fields to ease the reconciliation process." +#: ../../content/applications/finance/accounting/bank/transactions.rst:116 +msgid "You can also record your bank transactions manually. To do so, go to the :guilabel:`Accounting Dashboard`, click the :guilabel:`Bank` journal's name, and then on :guilabel:`New`. The :guilabel:`Partner` field is optional to ease the reconciliation process, but the :guilabel:`Label` and :guilabel:`Date` fields are mandatory." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:62 +#: ../../content/applications/finance/accounting/bank/transactions.rst:124 msgid "Statements" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:64 +#: ../../content/applications/finance/accounting/bank/transactions.rst:126 msgid "A **bank statement** is a document provided by a bank or financial institution that lists the transactions that have occurred in a particular bank account over a specified period of time." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:67 -msgid "In Odoo Accounting, it is optional to group transactions by their related statement, but depending on your business flow, you may want to record them for control purposes." +#: ../../content/applications/finance/accounting/bank/transactions.rst:129 +msgid "In Odoo Accounting, it is optional to group transactions by their related statement, but depending on your business flow, you may want to record them for record-keeping and organizational purposes." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:71 -msgid "If you want to compare the ending balances of your bank statements with the ending balances of your financial records, *don't forget to create an opening transaction* to record the bank account balance as of the date you begin synchronizing or importing transactions. This is necessary to ensure the accuracy of your accounting." +#: ../../content/applications/finance/accounting/bank/transactions.rst:132 +msgid "To access a list of existing statements, go to the :guilabel:`Accounting Dashboard`, click the :icon:`fa-ellipsis-v` :guilabel:`(dropdown menu)` icon next to the bank or cash journal you want to check, then click :guilabel:`Statements`." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:76 -msgid "To access a list of existing statements, go to the :guilabel:`Accounting Dashboard`, click the :icon:`fa-ellipsis-v` :guilabel:`(ellipsis)` icon next to the bank or cash journal you want to check, then click :guilabel:`Statements`." +#: ../../content/applications/finance/accounting/bank/transactions.rst:137 +msgid "To ensure the ending balances of your bank statements in Odoo align with the ending balances of the statements that are provided by your bank, create an opening transaction to record the bank account balance as of the date you begin synchronizing or importing transactions. This is necessary to ensure the accuracy of your accounting." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:83 -msgid "Statement creation from the kanban view" +#: ../../content/applications/finance/accounting/bank/transactions.rst:143 +msgid "To access a statement's transactions, click :guilabel:`Transactions` directly from the :guilabel:`Bank Statements` list view or open a statement and click the :guilabel:`Statement lines` smart button." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:85 -msgid "Open the bank reconciliation (kanban) view from the :guilabel:`Accounting Dashboard` by clicking on the name of the bank journal and identify the transaction corresponding to the last (most recent) transaction of your bank statement. Click on the :guilabel:`Statement` button when hovering on the upper separator line to create a statement from that transaction down to the oldest transaction that is not yet part of a statement." +#: ../../content/applications/finance/accounting/bank/transactions.rst:150 +msgid "Statement creation" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:-1 -msgid "A \"Statement\" button is visible when hovering on the line separating two transactions." +#: ../../content/applications/finance/accounting/bank/transactions.rst:152 +msgid "The :guilabel:`Bank Matching` view displays transactions from most recent to oldest and groups them by statement, with any recent transactions that do not belong to a statement at the top. To add transactions to a statement, hover on the most recent transaction that should be included in the statement, and click the :guilabel:`Statement` button that appears on the upper separator line. Doing so creates a statement from that transaction down to the oldest transaction that is not yet part of a statement." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:94 -msgid "In the :guilabel:`Create Statement` window, fill out the statement's :guilabel:`Reference`, verify its :guilabel:`Starting Balance` and :guilabel:`Ending Balance`, and click :guilabel:`Save`." +#: ../../content/applications/finance/accounting/bank/transactions.rst:-1 +msgid "A \"Statement\" button is visible when hovering on a transaction." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:100 -msgid "Statement creation from the list view" +#: ../../content/applications/finance/accounting/bank/transactions.rst:162 +msgid "In the :guilabel:`Create Statement` window, fill out the statement's :guilabel:`Reference`, verify its :guilabel:`Starting Balance` and :guilabel:`Ending Balance`, add an attachment such as a PDF of the statement if desired, and click :guilabel:`Save`." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:102 -msgid "Open the list of transactions by clicking on the name of the bank journal and switching to the list view. Select all the transactions corresponding to the bank statement, and, in the :guilabel:`Statement` column, select an existing statement or create a new one by typing its reference, clicking on :guilabel:`Create and edit...`, filling out the statement's details, and saving." +#: ../../content/applications/finance/accounting/bank/transactions.rst:167 +msgid "Transactions can also be added to statements from the list view. Select all the transactions corresponding to the bank statement, and, in the :guilabel:`Statement` column, select an existing statement or create a new one by typing its reference, clicking on :guilabel:`Create and edit...`, filling out the statement's details, and saving." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:111 +#: ../../content/applications/finance/accounting/bank/transactions.rst:175 msgid "Statement viewing, editing, and printing" msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:113 -msgid "To view an existing statement, click on the statement amount in the reconciliation (kanban) view or click on the statement name in the bank transaction list view. From here, you can edit the :guilabel:`Reference`, :guilabel:`Starting Balance`, or :guilabel:`Ending Balance`." +#: ../../content/applications/finance/accounting/bank/transactions.rst:177 +msgid "To view an existing statement, click the statement amount in the :guilabel:`Bank Matching` view or click the statement name and then the :icon:`fa-arrow-right` :guilabel:`(Internal link)` icon in the :guilabel:`Bank Matching` list view. From here, you can edit the :guilabel:`Reference`, :guilabel:`Starting Balance`, :guilabel:`Ending Balance`, and :guilabel:`Attachments`." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:118 +#: ../../content/applications/finance/accounting/bank/transactions.rst:183 msgid "Manually updating the :guilabel:`Starting Balance` automatically updates the :guilabel:`Ending Balance` based on the new value of the :guilabel:`Starting Balance` and the value of the statement's transactions." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:123 +#: ../../content/applications/finance/accounting/bank/transactions.rst:186 msgid "If the :guilabel:`Starting Balance` doesn't equal the previous statement's :guilabel:`Ending Balance`, or if the :guilabel:`Ending Balance` doesn't equal the running balance (:guilabel:`Starting Balance` plus the statement's transactions), a warning appears explaining the issue. To maintain flexibility, it is still possible to save without first resolving the issue." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:129 -msgid "To attach a digital copy (i.e., JPEG, PNG, or PDF) of the bank statement for enhanced recordkeeping, click the :icon:`fa-paperclip` :guilabel:`Attachments` button and select the file to attach." +#: ../../content/applications/finance/accounting/bank/transactions.rst:192 +msgid "To generate and print a PDF of the bank statement, click the :icon:`fa-cog` :guilabel:`(gear)` icon and click :icon:`fa-print` :guilabel:`Statement`." msgstr "" -#: ../../content/applications/finance/accounting/bank/transactions.rst:132 -msgid "To generate and print a PDF of the bank statement, click the :guilabel:`Print` button (if accessed via the reconciliation view) or click on the :icon:`fa-cog`:guilabel:`(gear)` icon and click :icon:`fa-print`:guilabel:`Statement` (if accessed via the list view)." -msgstr "" - -#: ../../content/applications/finance/accounting/bank/transactions.rst:137 -msgid "When a bank statement is generated to be printed, it is automatically added to the :guilabel:`Attachments`." +#: ../../content/applications/finance/accounting/bank/transactions.rst:196 +msgid "When a bank statement is generated to be printed, it is automatically added to the :guilabel:`Attachments` if no file was attached when creating the statement." msgstr "" #: ../../content/applications/finance/accounting/customer_invoices.rst:5 #: ../../content/applications/finance/fiscal_localizations/brazil.rst:494 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:319 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:434 #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:296 msgid "Customer invoices" msgstr "" @@ -2075,27 +2424,23 @@ msgid ":doc:`Currency `. If the invoice's currency d msgstr "" #: ../../content/applications/finance/accounting/customer_invoices.rst:50 -#: ../../content/applications/finance/accounting/vendor_bills.rst:90 +#: ../../content/applications/finance/accounting/vendor_bills.rst:93 msgid "In the :guilabel:`Invoice Lines` tab:" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices.rst:52 -#: ../../content/applications/finance/accounting/vendor_bills.rst:92 msgid ":guilabel:`Product`: Click :guilabel:`Add a line`, then search for and select the product." msgstr "" #: ../../content/applications/finance/accounting/customer_invoices.rst:53 -#: ../../content/applications/finance/accounting/vendor_bills.rst:93 msgid ":guilabel:`Quantity`" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices.rst:54 -#: ../../content/applications/finance/accounting/vendor_bills.rst:94 msgid ":guilabel:`Price`" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices.rst:55 -#: ../../content/applications/finance/accounting/vendor_bills.rst:95 msgid ":doc:`Taxes ` (if applicable)" msgstr "" @@ -2116,7 +2461,7 @@ msgid "Odoo initially creates invoices in :guilabel:`Draft` status. Draft invoic msgstr "" #: ../../content/applications/finance/accounting/customer_invoices.rst:77 -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:45 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:47 msgid ":doc:`/applications/sales/sales/invoicing/proforma`" msgstr "" @@ -2201,7 +2546,7 @@ msgid "To check all invoices that have not yet been sent, go to :menuselection:` msgstr "" #: ../../content/applications/finance/accounting/customer_invoices.rst:154 -#: ../../content/applications/finance/accounting/vendor_bills.rst:128 +#: ../../content/applications/finance/accounting/vendor_bills.rst:126 msgid "Payment and reconciliation" msgstr "" @@ -2210,13 +2555,13 @@ msgid "In Odoo, an invoice is considered :guilabel:`Paid` when the associated ac msgstr "" #: ../../content/applications/finance/accounting/customer_invoices.rst:160 -#: ../../content/applications/finance/accounting/vendor_bills.rst:147 +#: ../../content/applications/finance/accounting/vendor_bills.rst:145 msgid ":doc:`payments`" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices.rst:161 #: ../../content/applications/finance/accounting/payments.rst:19 -#: ../../content/applications/finance/accounting/vendor_bills.rst:148 +#: ../../content/applications/finance/accounting/vendor_bills.rst:146 msgid ":doc:`bank/reconciliation`" msgstr "" @@ -2542,7 +2887,7 @@ msgid "Several use cases can lead to a credit note, such as:" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:10 -msgid "a mistake in the invoice" +msgid "a mistake in the invoice or vendor bill" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:11 @@ -2566,7 +2911,7 @@ msgid "Issue a customer credit note" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:29 -msgid "In most cases, credit notes are created directly from the corresponding invoices. To do so, go to :menuselection:`Accounting --> Customers --> Invoices`, open the relevant :guilabel:`Invoice`, and click :guilabel:`Credit Note`." +msgid "In most cases, credit notes are created directly from the corresponding invoices. To do so, go to :menuselection:`Accounting --> Customers --> Invoices`, open the relevant invoice, and click :guilabel:`Credit Note`." msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:33 @@ -2594,72 +2939,68 @@ msgid "Issue a customer debit note" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:57 -msgid "To create a debit note, go to :menuselection:`Accounting --> Customers --> Invoices` and follow these steps:" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:60 -msgid "Select the desired invoice(s), click :icon:`fa-cog` :guilabel:`Actions` and select :guilabel:`Create Debit Note`." +msgid "In most cases, debit notes are created directly from the corresponding invoices. To do so, go to :menuselection:`Accounting --> Customers --> Invoices`, open the relevant invoice, and click :guilabel:`Debit Note`. Then, follow these steps:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:62 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:61 msgid "In the :guilabel:`Create Debit Note` window, fill in the :guilabel:`Reason` and update the :guilabel:`Use Specific Journal` and :guilabel:`Debit Note Date` fields if needed." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:64 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:63 msgid "Enable the :guilabel:`Copy Lines` option to copy the invoice lines and click :guilabel:`Create Debit Note`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:66 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:65 msgid "In the debit note, update the :guilabel:`Product` and :guilabel:`Quantity` and click :guilabel:`Confirm`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:70 -msgid "To create a debit note from the invoice form view, click the :icon:`fa-cog` :guilabel:`(gear)` icon and select :guilabel:`Debit Note`." +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:69 +msgid "To create a debit note from the invoice list view, select the desired invoice(s), click :icon:`fa-cog` :guilabel:`Actions`, and select :guilabel:`Create Debit Note`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:76 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:75 msgid "Record a vendor refund" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:78 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:77 msgid "Vendor refunds or vendor credit notes are recorded the same way as :ref:`credit notes `:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:81 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:80 msgid "To record a vendor refund or a vendor credit note directly from the corresponding vendor bill, go to :menuselection:`Accounting --> Vendors --> Bills`, open the relevant vendor bill, and click :guilabel:`Credit Note`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:85 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:84 msgid "To record it from scratch, go to :menuselection:`Accounting --> Vendors --> Refund`, and click on :guilabel:`New`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:91 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:90 msgid "Record a vendor debit note" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:93 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:92 msgid "Debit notes from vendors are recorded the same way :ref:`debit notes are issued to customers `." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:96 -msgid "To record a debit note, go to :menuselection:`Accounting --> Vendors --> Bills` and select the desired bill(s). Click :icon:`fa-cog` :guilabel:`Actions` and select :guilabel:`Create Debit Note`." +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:95 +msgid "To record a debit note, go to :menuselection:`Accounting --> Vendors --> Bills` open the relevant vendor bill, and click :guilabel:`Debit Note`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:100 -msgid "To create a debit note from the vendor bill form view, click the :icon:`fa-cog` :guilabel:`(gear)` icon and select :guilabel:`Debit Note`." +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:99 +msgid "To create a debit note from the vendor bill list view, select the desired vendor bill(s), click :icon:`fa-cog` :guilabel:`Actions` and select :guilabel:`Create Debit Note`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:106 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:105 #: ../../content/applications/finance/accounting/customer_invoices/payment_terms.rst:156 #: ../../content/applications/finance/accounting/get_started/cheat_sheet.rst:135 msgid "Journal entries" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:108 -msgid "Creating a credit/debit note from an invoice/bill generates a **reverse entry** that cancels out the journal items from the original invoice." +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:107 +msgid "Creating a credit/debit note from an invoice/bill generates a **reverse entry** that cancels out the journal items from the original invoice/bill." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:112 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:111 msgid "The journal entry of an invoice:" msgstr "" @@ -2667,7 +3008,7 @@ msgstr "" msgid "Invoice journal entry" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:117 +#: ../../content/applications/finance/accounting/customer_invoices/credit_notes.rst:116 msgid "The credit note's journal entry generated to reverse the original invoice above:" msgstr "" @@ -3036,416 +3377,379 @@ msgid "Electronic invoicing (:abbr:`EDI (electronic data interchange)`)" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:5 -msgid "EDI, or electronic data interchange, is the inter-company communication of business documents, such as purchase orders and invoices, in a standard format. Sending documents according to an EDI standard ensures that the machine receiving the message can interpret the information correctly. Various EDI file formats exist and are available depending on your company's country." +msgid "EDI, or electronic data interchange, is the inter-company communication of business documents, such as purchase orders and invoices, in a standard format. Sending documents according to an EDI standard ensures that the system receiving the message can interpret the information correctly. Various EDI file formats are available depending on your company's country." msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:10 -msgid "EDI feature enables automating the administration between companies and might also be required by some governments for fiscal control or to facilitate the administration." +msgid "The EDI feature allows companies to automate administrative processes. It may also be required by some governments for fiscal control or to support administrative procedures. Electronic sending of documents such as customer invoices, credit notes, or vendor bills is one application of EDI." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:13 -msgid "Electronic invoicing of your documents such as customer invoices, credit notes or vendor bills is one of the application of EDI." -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:16 -msgid "Odoo supports e-invoicing in many countries. Refer to the country's page for more details:" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:14 +msgid "Odoo supports e-invoicing in many countries. Refer to the :ref:`country's page ` for more details." msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:18 -msgid ":doc:`Argentina `" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:19 -msgid ":doc:`Austria `" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:20 -msgid ":doc:`Belgium `" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:21 -msgid ":doc:`Brazil `" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:22 -msgid ":doc:`Chile `" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:23 -msgid ":doc:`Colombia `" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:24 -msgid ":doc:`Croatia `" +msgid ":doc:`Fiscal localizations documentation <../../fiscal_localizations>`" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:25 -msgid ":doc:`Ecuador `" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:26 -msgid ":doc:`Estonia `" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:27 -msgid ":doc:`Finland `" +msgid "By default, the format available in the :ref:`send window ` depends on the customer's country." msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:28 -msgid ":doc:`Guatemala `" +msgid "To define a specific e-invoicing format for a customer, go to :menuselection:`Accounting --> Customers --> Customers`, access the customer form, go to the :guilabel:`Accounting` tab, and select the appropriate :guilabel:`Format` in the :guilabel:`Customer invoices` section." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:29 -msgid ":doc:`Hungary `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:35 +msgid "E-invoice generation" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:30 -msgid ":doc:`Ireland `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:37 +msgid "From a confirmed invoice, click :guilabel:`Send`. In the :guilabel:`Print & Send` window, enable the relevant e-invoicing format option (e.g., :guilabel:`by Peppol`), then click :guilabel:`Send` to generate and attach the corresponding e-invoicing XML file." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:31 -msgid ":doc:`Italy `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:44 +#: ../../content/applications/finance/fiscal_localizations/australia.rst:373 +msgid "Peppol" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:32 -msgid ":doc:`Latvia `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:46 +msgid "The `Peppol `_ network ensures the exchange of documents and information between companies and governmental authorities. It is primarily used for electronic invoicing, and its access points (connectors to the Peppol network) allow companies to send electronic documents such as customer invoices and credit notes and receive documents like vendor bills and refunds." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:33 -msgid ":doc:`Lithuania `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:51 +msgid "In this case, Odoo acts as both an **access point** and an :abbr:`SMP (Service Metadata Publisher)` and enables electronic invoicing transactions without the need to send invoices or bills by email or post." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:34 -msgid ":doc:`Luxembourg `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:56 +msgid "Peppol registration is **free** and available in Odoo Community." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:35 -msgid ":doc:`Mexico `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:57 +msgid "Supported formats for sending documents include **BIS Billing 3.0, XRechnung CIUS, and NLCIUS**." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:36 -msgid ":doc:`Netherlands `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:0 +msgid "The following **countries** are eligible for **Peppol registration in Odoo**:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:37 -msgid ":doc:`Norway `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:0 +msgid "Andorra, Albania, Austria, Bosnia and Herzegovina, Belgium, Bulgaria, Switzerland, Cyprus, Czech Republic, Germany, Denmark, Estonia, Spain, Finland, France, United Kingdom, Greece, Croatia, Hungary, Ireland, Iceland, Italy, Liechtenstein, Lithuania, Luxembourg, Latvia, Monaco, Montenegro, North Macedonia, Malta, Netherlands, Norway, Poland, Portugal, Romania, Serbia, Sweden, Slovenia, Slovakia, San Marino, Turkey, Holy See (Vatican City State)." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:38 -msgid ":doc:`Peru `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:69 +msgid "Registration" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:39 -msgid ":doc:`Romania `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:71 +msgid "To register on Peppol, go to :menuselection:`Accounting --> Configuration --> Settings` and scroll to the :guilabel:`PEPPOL Electronic Invoicing` section. Then, follow these steps:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:40 -msgid ":doc:`Spain `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:74 +msgid "Click :guilabel:`Activate Electronic Invoicing` and fill in the following fields:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:41 -msgid ":doc:`Spain - Basque Country `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:76 +msgid "Using the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon, make sure the relevant country-specific Peppol endpoint identifier is selected in the dropdown list, then enter your Peppol endpoint (usually a Company Registry or VAT number)." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:42 -msgid ":doc:`Uruguay `" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:79 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:89 +#: ../../content/applications/finance/fiscal_localizations/brazil.rst:151 +#: ../../content/applications/finance/fiscal_localizations/chile.rst:237 +#: ../../content/applications/finance/fiscal_localizations/chile.rst:1100 +msgid ":guilabel:`Email`" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:45 -msgid ":doc:`Fiscal localizations documentation <../../fiscal_localizations>`" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:80 +msgid ":guilabel:`Phone`, including the country code (e.g., `+32` in Belgium)" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:46 -msgid "`Magic Sheet - E-invoicing in Odoo [PDF] `_" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:82 +msgid "Click :guilabel:`Activate Peppol`. The registration is then pending activation and should be automatically activated within a day." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:54 -msgid "By default, the format available in the :ref:`send window ` depends on your customer's country." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:86 +msgid "`Peppol endpoint - OpenPeppol eDEC Code Lists `_ (open the \"Participant Identifier Schemes\" as HTML page)" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:57 -msgid "You can define a specific e-invoicing format for each customer. To do so, go to :menuselection:`Accounting --> Customers --> Customers`, open the customer form, go to the :guilabel:`Accounting` tab and select the appropriate format." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:89 +msgid "Define where documents should be received:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "Select an EDI format for a specific customer" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:91 +msgid ":guilabel:`Receive in Journal`: If necessary, select another purchase journal in the :guilabel:`Incoming Invoices Journal` field." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:65 -msgid "National electronic invoicing" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:93 +msgid ":doc:`Receive in Documents <../../../productivity/documents>`: Select a folder in the :guilabel:`Document Workspace` field if multiple purchase journals are used." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:67 -msgid "Depending on your company's country (e.g., :doc:`Italy <../../fiscal_localizations/italy>`, :doc:`Spain <../../fiscal_localizations/spain>`, :doc:`Mexico <../../fiscal_localizations/mexico>`, etc.), you may be required to issue e-invoicing documents in a specific format for all your invoices. In this case, you can define a default e-invoicing format for your sales journal." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:96 +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:210 +#: ../../content/applications/finance/fiscal_localizations/jordan.rst:135 +#: ../../content/applications/finance/fiscal_localizations/vietnam.rst:130 +msgid "Click :guilabel:`Save`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:73 -msgid "To do so, go to :menuselection:`Accounting --> Configuration --> Journals`, open your sales journal, go to the :guilabel:`Advanced Settings` tab, and enable the formats you need for this journal." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:98 +msgid "All invoices and vendor bills can then be sent/received directly using Peppol." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:79 -msgid "E-invoices generation" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:101 +msgid "To update the :guilabel:`Primary contact email`, click :icon:`oi-arrow-right` :guilabel:`Advanced Configuration`, modify it, and click :guilabel:`Save`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:81 -msgid "From a confirmed invoice, click :guilabel:`Send & Print` to open the send window. Check the e-invoicing option to generate and attach the e-invoice file." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:103 +msgid "If you are using an access point from a previous provider, make sure to deregister from it first, then register with your new access point, unless it's Hermes (BOSA). If using Hermes (BOSA), no action is needed; the migration is handled automatically." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "The Peppol option is checked and an e-invoicing XML file is attached to the email." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:108 +msgid "To manually trigger the scheduled action used to check the Peppol registration status, enable :ref:`developer mode `, open the Settings app, go to :menuselection:`Settings --> Technical --> Scheduled actions`, and search for :guilabel:`Peppol: update participant status`. Open the scheduled action, then click :guilabel:`Run Manually`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:90 -#: ../../content/applications/finance/fiscal_localizations/australia.rst:373 -msgid "Peppol" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:112 +msgid "To try Peppol without sending real data, enable demo mode by selecting :guilabel:`Odoo Demo ID` as the Peppol endpoint identifier. To switch back to production mode, :ref:`deregister from the demo mode ` and :ref:`register ` in production." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:92 -msgid "The `Peppol `_ network ensures the exchange of documents and information between enterprises and governmental authorities. It is primarily used for electronic invoicing, and its access points (connectors to the Peppol network) allow enterprises to exchange electronic documents." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:120 +msgid "Contact verification" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:97 -msgid "Odoo is an **access point** and an :abbr:`SMP (Service Metadata Publisher)`, enabling electronic invoicing transactions without the need to send invoices and bills by email or post." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:122 +msgid "Before sending an invoice to a contact using Peppol, make sure the contact is registered as a Peppol participant. To do so, follow these steps:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:100 -msgid "If not done yet, :ref:`install ` the :guilabel:`Peppol` module (`account_peppol`)." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:125 +msgid "Go to :menuselection:`Accounting --> Customers --> Customers` and access the customer's form." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:103 -msgid "Peppol registration is **free** and available in Odoo Community" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:126 +msgid "In the :guilabel:`Accounting tab`, check the following information in the :guilabel:`Customer invoices` section:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:104 -msgid "You can send **Customer Invoices** and **Credit Notes** and receive **Vendor Bills** and **Refunds** via Peppol." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:129 +msgid ":guilabel:`eInvoice format`: Select the relevant format." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:106 -msgid "You can send and receive in one of the following supported document formats: **BIS Billing 3.0, XRechnung CIUS, NLCIUS**." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:130 +msgid "Using the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon, make sure the relevant country-specific Peppol endpoint identifier is selected in the dropdown list, then enter the customer's endpoint identifier, usually a Company Registry or VAT number." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:0 -msgid "The following **countries** are eligible for **Peppol registration in Odoo**:" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:134 +msgid "To verify the contact, enable :ref:`developer mode ` and click :guilabel:`Verify`. Its :guilabel:`Peppol endpoint verification` is marked as :guilabel:`Valid` if the contact is found on the Peppol network." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:0 -msgid "Andorra, Albania, Austria, Bosnia and Herzegovina, Belgium, Bulgaria, Switzerland, Cyprus, Czech Republic, Germany, Denmark, Estonia, Spain, Finland, France, United Kingdom, Greece, Croatia, Hungary, Ireland, Iceland, Italy, Liechtenstein, Lithuania, Luxembourg, Latvia, Monaco, Montenegro, North Macedonia, Malta, Netherlands, Norway, Poland, Portugal, Romania, Serbia, Sweden, Slovenia, Slovakia, San Marino, Turkey, Holy See (Vatican City State)" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 +msgid "verify contact registration" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:118 -msgid "Registration" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:142 +msgid "While Odoo prefills the endpoint number based on the information available for a contact, verifying these details with the contact is recommended." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:120 -msgid "Go to :menuselection:`Accounting --> Configuration --> Settings`. If you do not have the Peppol module installed, first tick the :guilabel:`Enable PEPPOL` checkbox and then **manually save**. Click :guilabel:`Start sending via Peppol` to open the registration form." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:148 +msgid "Send invoices" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:125 -msgid "This registration form also pops up if you choose to :guilabel:`Send & Print` an invoice via Peppol without completing the registration process." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:150 +msgid "All posted invoices that are ready to be sent via Peppol can be viewed in the :guilabel:`Invoices` list view in the following ways:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "Peppol registration button" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:153 +msgid "Use the :icon:`oi-settings-adjust` (:guilabel:`adjust settings`) button to add the :guilabel:`Peppol status` column." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:131 -msgid "You can register either as a sender or a receiver. A sender can only send invoices and credit notes on Odoo via Peppol, without ever registering as a Peppol participant on Odoo SMP. If you have an existing Peppol registration elsewhere that you want to keep, but want to send invoices from your Odoo database and receive other documents in another software, register as a **sender**." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:155 +msgid "Apply the :guilabel:`Peppol Ready` filter in the search bar." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:137 -msgid "You can always register as a sender first and register to receive documents later." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:157 +msgid "To send the invoice to the customer via Peppol, click :guilabel:`Send` on the confirmed invoice form. In the :guilabel:`Send` window, enable the :guilabel:`by Peppol` option and click :guilabel:`Send`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:138 -msgid "When registering, you can specify if you would also like to receive documents." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:162 +msgid ":ref:`Multiple invoices ` can also be sent in batches via Peppol." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "Peppol registration form" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:164 +msgid "Set the preferred :ref:`Invoice sending ` method for a customer to :guilabel:`by Peppol` in the :guilabel:`Customer Invoices` section of the customer form's :guilabel:`Accounting` tab." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:143 -msgid "Fill in the following information:" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:168 +msgid "The status is updated to :guilabel:`Done` once the invoices have been successfully delivered to the contact's access point." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:145 -msgid "Check the receiver box if you want to register on Odoo SMP. If you are migrating from another service provider, insert the :guilabel:`Migration key` from the previous provider (the field becomes visible after you tick the checkbox)." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:174 +msgid "Receive vendor bills" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:148 -msgid ":guilabel:`E-Address Scheme`: the Peppol Electronic Address Scheme usually depends on your company's country. Odoo often prefills this with the most commonly used EAS code in your country. For example, the preferred EAS code for most companies in Belgium is `0208`." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:176 +msgid "New documents received via Peppol are checked multiple times a day. Depending on the :ref:`registration settings `, received documents are automatically:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:151 -msgid ":guilabel:`Endpoint`: this is usually a Company Registry number or a VAT number." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:180 +msgid "either imported into the purchase journal set in the :guilabel:`PEPPOL Electronic Invoicing` section, and corresponding vendor bills are created as drafts;" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:152 -msgid ":guilabel:`Phone`: phone number including the country code (e.g., `+32` in Belgium)." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:182 +msgid "or received via the :ref:`Documents app `." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:153 -msgid ":guilabel:`Email`: this is the email Odoo can use to contact you regarding your Peppol registration." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:186 +msgid "To manually trigger the scheduled action used to retrieve incoming Peppol documents, enable :ref:`developer mode `, open the Settings app, go to :menuselection:`Settings --> Technical --> Scheduled actions`, and search for :guilabel:`Peppol: retrieve new documents`. Open the scheduled action, then click :guilabel:`Run Manually`." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:156 -msgid "If you want to explore or demo Peppol, you can choose to register in :guilabel:`Demo` mode. Otherwise, select :guilabel:`Live`." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:194 +msgid "Vendor bills reception in Documents" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:160 -msgid "Selecting :guilabel:`Demo` simulates everything in Odoo. There is no sending, receiving, or partner verification." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:197 +msgid "Make sure the :guilabel:`Documents - Import from Peppol` (`documents_account_peppol`) module is :ref:`installed `." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:162 -msgid "For **advanced users only**, it is possible to run tests on Peppol's test network. The server allows to register on Peppol and send/receive test invoices to/from other participants. To do so, enable the :ref:`developer-mode`, open the **Settings** app, go to :menuselection:`Technical --> System Parameters`, and search for `account_peppol.edi.mode`. Click the parameter and change the :guilabel:`Value` to `test`. Go back to the Peppol setup menu in the **Settings** app. The option :guilabel:`Test` is now available." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:200 +msgid "To receive vendor bills via the :doc:`Documents app <../../../productivity/documents>`, follow these steps:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:0 -msgid "Peppol test mode parameter" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:203 +msgid "In the Documents app, create a specific :ref:`folder ` or enable :ref:`file centralization ` for :guilabel:`Accounting` documents." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:173 -msgid "`Peppol EAS - European Commision `_" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:205 +msgid "Open the Accounting app, go to :menuselection:`Accounting --> Configuration --> Settings`, and scroll to the :guilabel:`PEPPOL Electronic Invoicing` section." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:174 -msgid "`Peppol Endpoint - OpenPeppol eDEC Code Lists `_ (open the \"Participant Identifier Schemes\" as HTML page)" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:207 +msgid "In the :guilabel:`Document Workspace` field, choose the relevant folder." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:177 -msgid "When set up, request a verification code to be sent to you by clicking :guilabel:`Send a registration code by SMS`. A text message containing a code is sent to the phone number provided to finalize the verification process." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:208 +msgid "Use the :guilabel:`Document Tags` field to add tags to incoming Peppol documents for easy identification." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "phone validation" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:212 +msgid "Then, open the Document app, navigate to the appropriate folder, select the relevant vendor bills, and click :guilabel:`Create Vendor Bill`. The corresponding vendor bill is then created." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:184 -msgid "Once you enter the code and click :guilabel:`Register`, your Peppol participant status is updated. If you chose to only send documents, then the status changes to :guilabel:`Can send but not receive`. If you opted to receive documents as well, the status changes to :guilabel:`Can send, pending registration to receive`. In that case, it should be automatically activated within a day." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:218 +msgid "Peppol deregistration from Odoo" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:190 -msgid "Then, set the default journal for receiving vendor bills in the :guilabel:`Incoming Invoices Journal`." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:220 +msgid "Only one Peppol receiver registration can be active for each Peppol endpoint identifier at a time. To stop using Odoo as the Peppol access point, e.g., to switch to another provider or reconfigure the registration for a new database, you must first deregister from Peppol. To do so, go to :menuselection:`Accounting --> Configuration --> Settings`, scroll down to the :guilabel:`PEPPOL Electronic Invoicing` section, and click :icon:`oi-arrow-right` :guilabel:`Advanced Configuration`. Then click :guilabel:`Remove from Peppol` and confirm." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:194 -msgid "To manually trigger the cron that checks the registration status, enable the :ref:`developer-mode`, then go to :menuselection:`Settings --> Technical --> Scheduled Actions`, and search for the :guilabel:`PEPPOL: update participant status` action." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:227 +msgid "Once removed, the Peppol registration is deleted from the database, and documents can no longer be sent or received via Peppol in Odoo." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:198 -msgid "Your receiver application status should be updated soon after you are registered on the Peppol network." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:233 +msgid "Country-specific e-invoicing details" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "receiver application" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:235 +msgid "Refer to the following pages for detailed, country-specific information:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:204 -msgid "All invoices and vendor bills can now be sent directly using the Peppol network." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:237 +msgid ":doc:`Argentina `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:207 -msgid "To update the email that Odoo can use to contact you, modify the email and click :guilabel:`Update contact details`." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:238 +msgid ":doc:`Austria `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:211 -msgid "Configure Peppol services" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:239 +msgid ":doc:`Belgium `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:213 -msgid "Once you are registered on Odoo SMP, the :guilabel:`Configure Peppol Services` button becomes visible to allow you to enable or disable document formats that other participants can send you via Peppol. By default, all document formats supported by Odoo are enabled (depending on the installed modules)." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:240 +msgid ":doc:`Brazil `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:219 -msgid "Contact verification" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:241 +msgid ":doc:`Chile `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:221 -msgid "Before sending an invoice to a contact using the Peppol network, it is necessary to verify that they are also registered as a Peppol participant." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:242 +msgid ":doc:`Colombia `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:224 -msgid "To do so, go to :menuselection:`Accounting --> Customers --> Customers` and open the customer's form. Then go to :menuselection:`Accounting tab --> Electronic Invoicing`, select the correct format, and make sure their :guilabel:`Peppol EAS code` and the :guilabel:`Endpoint` are filled in. Then, click :guilabel:`Verify`. If the contact exists on the network, their Peppol endpoint validity is set to Valid." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:243 +msgid ":doc:`Croatia `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "verify contact registration" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:244 +msgid ":doc:`Ecuador `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:234 -msgid "While Odoo prefills both the EAS code and the Endpoint number based on the information available for a contact, it is better to confirm these details directly with the contact." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:245 +msgid ":doc:`Estonia `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:237 -msgid "It is possible to verify the Peppol participant status of several customers at once. To do so, go to :menuselection:`Accounting --> Customers --> Customers` and switch to the list view. Select the customers you want to verify and then click :menuselection:`Actions --> Verify Peppol`." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:246 +msgid ":doc:`Finland `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:241 -msgid "If the participant is registered on the Peppol network but cannot receive the format you selected for them, the :guilabel:`Peppol endpoint validity` label changes to :guilabel:`Cannot receive this format`." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:247 +msgid ":doc:`Guatemala `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "verify contact ubl format" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:248 +msgid ":doc:`Hungary `" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:249 -msgid "Send invoices" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:251 -msgid "Once ready to send an invoice via the Peppol network, simply click :guilabel:`Send & Print` on the invoice form. To queue multiple invoices, select them in the list view and click :menuselection:`Actions --> Send & Print`; they will be sent in a batch later on. Both :guilabel:`BIS Billing 3.0` and :guilabel:`Send via PEPPOL` checkboxes need to be ticked." -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "Send peppol invoice" +msgid ":doc:`Ireland `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:259 -msgid "Posted invoices that can be sent via Peppol are marked as :guilabel:`Peppol Ready`. To display them, use the :guilabel:`Peppol Ready` filter or access the Accounting dashboard and click :guilabel:`Peppol ready invoices` on the corresponding sales journal." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:250 +msgid ":doc:`Italy `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "Filter Peppol ready invoices" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:251 +msgid ":doc:`Latvia `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:266 -msgid "Once the invoices are sent via Peppol, the status is changed to :guilabel:`Processing`. The status is changed to `Done` after they have been successfully delivered to the contact's Access Point." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:252 +msgid ":doc:`Lithuania `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "Peppol message status" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:253 +msgid ":doc:`Luxembourg `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:274 -msgid "By default, the Peppol status column is hidden on the Invoices list view. You can choose to have it displayed by selecting it from the optional columns, accessible from the top right corner of the Invoices list view." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:254 +msgid ":doc:`Mexico `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:278 -msgid "A cron runs regularly to check the status of these invoices. It is possible to check the status before the cron runs by clicking :guilabel:`Fetch Peppol invoice status` in the corresponding sales journal on the Accounting dashboard." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:255 +msgid ":doc:`Netherlands `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "Fetch invoice Peppol status" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:256 +msgid ":doc:`Norway `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:286 -msgid "Receive vendor bills" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:257 +msgid ":doc:`Peru `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:288 -msgid "Once a day, a cron checks whether any new documents have been sent to you via the Peppol network. These documents are imported, and the corresponding vendor bills are created automatically as drafts." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:258 +msgid ":doc:`Romania `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "peppol receive bills" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:259 +msgid ":doc:`Spain `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:295 -msgid "If you want to retrieve incoming Peppol documents before the cron runs, you can do so from the Accounting dashboard on the main Peppol purchase journal that you set up in the settings. Just click :guilabel:`Fetch from Peppol`." +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:260 +msgid ":doc:`Spain - Basque Country `" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:-1 -msgid "Fetch bills from Peppol" +#: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst:261 +msgid ":doc:`Uruguay `" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing/argentina.rst:5 @@ -3992,7 +4296,7 @@ msgid "Odoo invoicing module makes it easy for businesses to adhere to Finland's msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing/finland.rst:30 -msgid "**Supported formats**: Odoo supports the e-invoicing formats widely used in Finland, including TEAPPSXML, Finvoice, and the standardized XML in :abbr:`UBL (Universal Business Language)` format required for Peppol compliance. This ensures compatibility with Finnish platforms such as Handi for public sector invoicing and eKuitti for enhanced receipt management and e-invoicing." +msgid "**Supported formats**: Odoo supports the standardized XML in :abbr:`UBL (Universal Business Language)` format required for Peppol compliance. This ensures compatibility with regulations for sending invoices to the Finnish government, as well as sending invoices to customers and receiving invoices from vendors." msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/electronic_invoicing/finland.rst:34 @@ -4852,6 +5156,7 @@ msgid "Depending on your business, you may opt for one of the following way to c msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/overview.rst:16 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1475 #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:86 #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:94 #: ../../content/applications/finance/fiscal_localizations/switzerland.rst:130 @@ -4861,211 +5166,199 @@ msgstr "" msgid "Sales" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:19 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:21 msgid "Sales Order ‣ Invoice" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:21 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:23 msgid "In most companies, salespeople create quotations that become sales order once they are validated. Then, draft invoices are created based on the sales order. You have different options like:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:25 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:27 msgid "Invoice manually: use a button on the sale order to trigger the draft invoice" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:28 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:30 msgid "Invoice before delivery: invoice the full order before triggering the delivery order" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:31 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:33 msgid "Invoice based on delivery order: see next section" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:33 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:35 msgid "Invoice before delivery is usually used by the eCommerce application when the customer pays at the order and we deliver afterwards. (pre-paid)" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:37 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:39 msgid "For most other use cases, it's recommended to invoice manually. It allows the salesperson to trigger the invoice on demand with options: invoice the whole order, invoice a percentage (advance), invoice some lines, invoice a fixed advance." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:42 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:44 msgid "This process is good for both services and physical products." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:48 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:50 +msgid "Invoices can also be generated from sales orders created in the :doc:`Repairs app ` for invoicing after-sales services." +msgstr "" + +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:55 msgid "Sales Order ‣ Delivery Order ‣ Invoice" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:50 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:57 msgid "Retailers and eCommerce usually invoice based on delivery orders, instead of sales order. This approach is suitable for businesses where the quantities you deliver may differs from the ordered quantities: foods (invoice based on actual Kg)." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:55 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:62 msgid "This way, if you deliver a partial order, you only invoice for what you really delivered. If you do back orders (deliver partially and the rest later), the customer will receive two invoices, one for each delivery order." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:61 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:68 msgid ":doc:`/applications/sales/sales/invoicing/invoicing_policy`" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:64 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:71 msgid "eCommerce Order ‣ Invoice" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:66 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:73 msgid "An eCommerce order will also trigger the creation of the order when it is fully paid. If you allow paying orders by check or wire transfer, Odoo only creates an order and the invoice will be triggered once the payment is received." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:72 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:79 msgid "Contracts" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:75 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:82 msgid "Regular Contracts ‣ Invoices" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:77 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:84 msgid "If you use contracts, you can trigger invoice based on time and material spent, expenses or fixed lines of services/products. Every month, the salesperson will trigger invoice based on activities on the contract." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:81 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:88 msgid "Activities can be:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:83 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:90 msgid "fixed products/services, coming from a sale order linked to this contract" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:84 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:91 msgid "materials purchased (that you will re-invoice)" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:85 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:92 msgid "time and material based on timesheets or purchases (subcontracting)" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:86 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:93 msgid "expenses like travel and accommodation that you re-invoice to the customer" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:88 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:95 msgid "You can invoice at the end of the contract or trigger intermediate invoices. This approach is used by services companies that invoice mostly based on time and material. For services companies that invoice on fix price, they use a regular sales order." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:94 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:101 msgid ":doc:`/applications/sales/sales/invoicing/time_materials`" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:95 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:102 msgid ":doc:`/applications/sales/sales/invoicing/expense`" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:96 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:103 msgid ":doc:`/applications/sales/sales/invoicing/milestone`" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:99 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:106 msgid "Recurring Contracts ‣ Invoices" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:101 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:108 msgid "For subscriptions, an invoice is triggered periodically, automatically. The frequency of the invoicing and the services/products invoiced are defined on the contract." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:106 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:113 msgid ":doc:`/applications/sales/subscriptions`" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:109 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:116 msgid "Others" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:112 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:119 msgid "Creating an invoice manually" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:114 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:121 msgid "Users can also create invoices manually without using contracts or a sales order. It's a recommended approach if you do not need to manage the sales process (quotations), or the delivery of the products or services." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:119 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:126 msgid "Even if you generate the invoice from a sales order, you may need to create invoices manually in exceptional use cases:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:122 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:129 msgid "if you need to create a refund" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:124 -msgid "If you need to give a discount" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:126 -msgid "if you need to change an invoice created from a sales order" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:128 -msgid "if you need to invoice something not related to your core business" -msgstr "" - #: ../../content/applications/finance/accounting/customer_invoices/overview.rst:131 -msgid "Specific modules" +msgid "If you need to give a discount" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/overview.rst:133 -msgid "Some specific modules are also able to generate draft invoices:" +msgid "if you need to change an invoice created from a sales order" msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/overview.rst:135 -msgid "**membership**: invoice your members every year" -msgstr "" - -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:137 -msgid "**repairs**: invoice your after-sale services" +msgid "if you need to invoice something not related to your core business" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:140 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:138 msgid "Resequencing of the invoices" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:142 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:140 msgid "It remains possible to resequence the invoices but with some restrictions:" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:144 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:142 msgid "The feature does not work when entries are previous to a lock date." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:145 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:143 msgid "The feature does not work if the sequence is inconsistent with the month of the entry." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:146 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:144 msgid "It does not work if the sequence leads to a duplicate." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:147 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:145 msgid "The order of the invoice remains unchanged." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:148 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:146 msgid "It is useful for people who use a numbering from another software and who want to continue the current year without starting over from the beginning." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:152 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:150 msgid "Invoice digitization with optical character recognition (OCR)" msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:154 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:152 msgid "**Invoice digitization** is the process of automatically encoding traditional paper invoices into invoices forms in your accounting." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:157 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:155 msgid "Odoo uses OCR and artificial intelligence technologies to recognize the content of the documents. Vendor bills and customer invoices forms are automatically created and populated based on scanned invoices." msgstr "" -#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:162 +#: ../../content/applications/finance/accounting/customer_invoices/overview.rst:160 msgid ":doc:`/applications/finance/accounting/vendor_bills/invoice_digitization`" msgstr "" @@ -5311,6 +5604,11 @@ msgstr "" #: ../../content/applications/finance/accounting/get_started/cheat_sheet.rst:224 #: ../../content/applications/finance/accounting/get_started/cheat_sheet.rst:234 #: ../../content/applications/finance/accounting/get_started/cheat_sheet.rst:250 +#: ../../content/applications/finance/esg.rst:210 +#: ../../content/applications/finance/esg.rst:224 +#: ../../content/applications/finance/esg.rst:236 +#: ../../content/applications/finance/esg.rst:255 +#: ../../content/applications/finance/esg.rst:267 msgid "Account" msgstr "" @@ -5554,7 +5852,7 @@ msgid "Pingen (Odoo Snailmail service provider) scans the area to process the ad msgstr "" #: ../../content/applications/finance/accounting/customer_invoices/snailmail.rst:45 -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:85 +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:199 msgid "Pricing" msgstr "" @@ -5726,7 +6024,7 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/ecuador.rst:131 #: ../../content/applications/finance/fiscal_localizations/guatemala.rst:200 #: ../../content/applications/finance/fiscal_localizations/jordan.rst:60 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:189 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:208 #: ../../content/applications/finance/fiscal_localizations/peru.rst:128 #: ../../content/applications/finance/fiscal_localizations/peru.rst:300 #: ../../content/applications/finance/fiscal_localizations/saudi_arabia.rst:121 @@ -6023,7 +6321,7 @@ msgstr "" #: ../../content/applications/finance/accounting/get_started/avg_price_valuation.rst:279 #: ../../content/applications/finance/fiscal_localizations/france.rst:391 #: ../../content/applications/finance/fiscal_localizations/france.rst:391 -#: ../../content/applications/finance/fiscal_localizations/india.rst:206 +#: ../../content/applications/finance/fiscal_localizations/india.rst:209 msgid "0" msgstr "" @@ -6112,8 +6410,8 @@ msgstr "" #: ../../content/applications/finance/accounting/get_started/avg_price_valuation.rst:201 #: ../../content/applications/finance/accounting/get_started/avg_price_valuation.rst:242 #: ../../content/applications/finance/accounting/get_started/avg_price_valuation.rst:289 -#: ../../content/applications/finance/fiscal_localizations/india.rst:192 -#: ../../content/applications/finance/fiscal_localizations/india.rst:206 +#: ../../content/applications/finance/fiscal_localizations/india.rst:195 +#: ../../content/applications/finance/fiscal_localizations/india.rst:209 msgid "2" msgstr "" @@ -6262,9 +6560,9 @@ msgstr "" #: ../../content/applications/finance/accounting/get_started/avg_price_valuation.rst:291 #: ../../content/applications/finance/accounting/get_started/avg_price_valuation.rst:293 #: ../../content/applications/finance/fiscal_localizations/france.rst:393 -#: ../../content/applications/finance/fiscal_localizations/india.rst:190 -#: ../../content/applications/finance/fiscal_localizations/india.rst:194 -#: ../../content/applications/finance/fiscal_localizations/india.rst:204 +#: ../../content/applications/finance/fiscal_localizations/india.rst:193 +#: ../../content/applications/finance/fiscal_localizations/india.rst:197 +#: ../../content/applications/finance/fiscal_localizations/india.rst:207 msgid "1" msgstr "" @@ -6604,7 +6902,7 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/colombia.rst:283 #: ../../content/applications/finance/fiscal_localizations/germany.rst:9 #: ../../content/applications/finance/fiscal_localizations/guatemala.rst:173 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:988 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1089 #: ../../content/applications/finance/fiscal_localizations/romania.rst:69 #: ../../content/applications/finance/fiscal_localizations/spain.rst:30 #: ../../content/applications/finance/fiscal_localizations/united_arab_emirates.rst:42 @@ -7128,7 +7426,7 @@ msgid "Accounts Receivable" msgstr "" #: ../../content/applications/finance/accounting/get_started/cheat_sheet.rst:172 -#: ../../content/applications/finance/fiscal_localizations/india.rst:709 +#: ../../content/applications/finance/fiscal_localizations/india.rst:683 msgid "Invoice 1" msgstr "" @@ -7140,7 +7438,7 @@ msgstr "" #: ../../content/applications/finance/accounting/get_started/cheat_sheet.rst:252 #: ../../content/applications/finance/accounting/get_started/cheat_sheet.rst:254 #: ../../content/applications/finance/accounting/taxes.rst:112 -#: ../../content/applications/finance/fiscal_localizations/india.rst:204 +#: ../../content/applications/finance/fiscal_localizations/india.rst:207 msgid "100" msgstr "" @@ -7153,7 +7451,7 @@ msgid "70" msgstr "" #: ../../content/applications/finance/accounting/get_started/cheat_sheet.rst:176 -#: ../../content/applications/finance/fiscal_localizations/india.rst:714 +#: ../../content/applications/finance/fiscal_localizations/india.rst:688 msgid "Invoice 2" msgstr "" @@ -7175,7 +7473,7 @@ msgid "Payment 2" msgstr "" #: ../../content/applications/finance/accounting/get_started/cheat_sheet.rst:182 -#: ../../content/applications/finance/fiscal_localizations/india.rst:719 +#: ../../content/applications/finance/fiscal_localizations/india.rst:693 msgid "Invoice 3" msgstr "" @@ -7278,7 +7576,7 @@ msgid "It helps create a clear, comprehensive view of the group's financial perf msgstr "" #: ../../content/applications/finance/accounting/get_started/consolidation.rst:12 -msgid "Consolidating companies involves **legally separate entities**, whereas :ref:`branches ` are **subdivisions** of a single legal entity which often share the head office's resources (journals, taxes, accounts, fiscal positions) and are not consolidated in the same way." +msgid "Consolidating companies involves **legally separate entities**, whereas :ref:`branches ` are **subdivisions** of a single legal entity which often share the head office's resources (journals, taxes, accounts, fiscal positions) and are not consolidated in the same way." msgstr "" #: ../../content/applications/finance/accounting/get_started/consolidation.rst:20 @@ -7593,7 +7891,6 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/argentina.rst:260 #: ../../content/applications/finance/fiscal_localizations/chile.rst:282 #: ../../content/applications/finance/fiscal_localizations/france.rst:344 -#: ../../content/applications/finance/fiscal_localizations/india.rst:105 #: ../../content/applications/finance/fiscal_localizations/peru.rst:349 msgid "Journals" msgstr "" @@ -7733,6 +8030,7 @@ msgid "tax unit tax report" msgstr "" #: ../../content/applications/finance/accounting/payments.rst:5 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:531 msgid "Payments" msgstr "" @@ -8023,10 +8321,6 @@ msgstr "" msgid ":guilabel:`Clear Accounts`: All reconciled journal items will have the same matching number, as they are selected from the same account." msgstr "" -#: ../../content/applications/finance/accounting/payments.rst:277 -msgid "Click :guilabel:`Reconcile`." -msgstr "" - #: ../../content/applications/finance/accounting/payments.rst:279 msgid "Invoices and bills are automatically matched to their corresponding payments and marked as :guilabel:`In payment` until they are :doc:`reconciled ` with their corresponding :doc:`bank transactions `." msgstr "" @@ -8131,6 +8425,11 @@ msgstr "" msgid "Once a payment has been registered, the status of the invoice or bill is :guilabel:`In payment`. The next step is :doc:`reconciling ` the payment with the related :doc:`bank transaction ` line to finalize the payment workflow and mark the invoice or bill as :guilabel:`Paid`." msgstr "" +#: ../../content/applications/finance/accounting/payments/batch.rst:3 +#: ../../content/applications/finance/fiscal_localizations/australia.rst:406 +msgid "Batch payments" +msgstr "" + #: ../../content/applications/finance/accounting/payments/batch.rst:5 msgid "Batch payments allow grouping payments from multiple customers or vendors into a single batch and generating a detailed deposit slip or payment file with a batch reference. This reference can be used during :doc:`reconciliation <../bank/reconciliation>` to match bank transactions with the corresponding payments. This feature is particularly useful for submitting :doc:`SEPA Direct Debit payments `, depositing cash payments or :ref:`checks `, or generating outgoing payment files, such as :doc:`SEPA ` or :ref:`NACHA `." msgstr "" @@ -8188,7 +8487,7 @@ msgid "To view existing batch payments, go to :menuselection:`Accounting --> Cus msgstr "" #: ../../content/applications/finance/accounting/payments/batch.rst:51 -msgid "Once the bank transactions :doc:`have been created <../bank/transactions>` in your database, you can :ref:`reconcile them with the batch payment `." +msgid "Once the bank transactions :doc:`have been created <../bank/transactions>` in your database, you can :ref:`reconcile ` them with the batch payment." msgstr "" #: ../../content/applications/finance/accounting/payments/batch.rst:56 @@ -8425,7 +8724,7 @@ msgid "Follow-up on invoices" msgstr "" #: ../../content/applications/finance/accounting/payments/follow_up.rst:5 -msgid "Follow-up messages can be sent to customers when payments are overdue. Odoo helps identify late payments and allows scheduling and sending the appropriate reminders using **follow-up actions** according to the number of overdue days. Follow-ups can be sent through different methods, including email, post, or SMS." +msgid "Follow-up messages can be sent to customers when payments are overdue. Odoo helps identify late payments and allows scheduling and sending the appropriate reminders using **follow-up actions** according to the number of overdue days. Follow-ups can be sent through different methods, including email, WhatsApp message, SMS, or post." msgstr "" #: ../../content/applications/finance/accounting/payments/follow_up.rst:11 @@ -8441,134 +8740,132 @@ msgid "To configure :guilabel:`Follow-up actions`, go to :menuselection:`Account msgstr "" #: ../../content/applications/finance/accounting/payments/follow_up.rst:23 -msgid "To modify a follow-up level, click on the record. From the form view, edit the :guilabel:`Description` or adjust the number of days before a reminder is sent. In the :guilabel:`Notification` tab, select :guilabel:`Actions` such as :guilabel:`Send Email`, :ref:`Send a Letter `, and :ref:`Send SMS Message `." +msgid "To modify a follow-up level, click on the record. From the form view, edit the :guilabel:`Description` or adjust the number of days before a reminder is sent. In the :guilabel:`Notification` tab, select :guilabel:`Actions` such as :guilabel:`Send Email`, :doc:`Send WhatsApp message `, :ref:`Send SMS Message `, and :ref:`Send a Letter `." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:29 -msgid "Sending letters or SMS messages in Odoo requires :doc:`In-App Purchase (IAP) ` credit or tokens." +#: ../../content/applications/finance/accounting/payments/follow_up.rst:30 +msgid "Sending letters and WhatsApp or SMS messages in Odoo requires :doc:`In-App Purchase (IAP) ` credit or tokens." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:32 -msgid "To use a pre-filled template when sending an email or letter, select a :guilabel:`Content Template`. To modify it, click the :icon:`oi-arrow-right` :guilabel:`(internal link arrow)` icon next to the :guilabel:`Content Template` field. If enabled, SMS messages use a specific :guilabel:`Sms Template` field that can be modified by clicking the :icon:`oi-arrow-right` :guilabel:`(internal link arrow)` icon." +#: ../../content/applications/finance/accounting/payments/follow_up.rst:33 +msgid "To use a pre-filled template when sending an email or letter, select a :guilabel:`Content Template`. To modify it, click the :icon:`oi-arrow-right` :guilabel:`(internal link arrow)` icon next to the :guilabel:`Content Template` field. If enabled, WhatsApp and SMS messages use a specific :guilabel:`WhatsApp Template` or :guilabel:`Sms Template` field that can be modified by clicking the :icon:`oi-arrow-right` :guilabel:`(internal link arrow)` icon." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:38 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:39 msgid "Other options can be enabled in the :guilabel:`Options` section within the specific follow-up level:" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:40 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:41 msgid "Automate the reminder with the :guilabel:`Automatic` option." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:41 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:42 msgid ":guilabel:`Attach Invoices` that are overdue in the reminder." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:42 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:43 msgid ":guilabel:`Add followers` on the related customer to receive notifications about any email reply made on the reminder's email." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:45 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:46 msgid "In the :guilabel:`Activity` tab, enable the option to automatically schedule :doc:`activities ` when the follow-up level is triggered. Select the :guilabel:`Responsible` user and the :guilabel:`Activity Type`, and enter a :guilabel:`Summary`." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:49 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:50 msgid "To add a new :guilabel:`Follow-up Level`, click :guilabel:`New` and fill in the fields." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:52 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:53 msgid "Set a negative number of days to send a reminder before the invoice due date." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:57 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:58 msgid "Invoice follow-ups" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:60 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:61 msgid "Reconcile all bank transactions before starting the follow-up process to avoid sending reminders for invoices that have already been paid." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:63 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:64 msgid "To view all overdue invoices, go to :menuselection:`Accounting --> Customers --> Invoices`. In the :guilabel:`Invoices` list view, click into the search bar and filter on :guilabel:`Overdue`." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:69 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:70 msgid "Follow-ups for one customer" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:71 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:72 msgid "For a detailed overview of a customer's invoice follow-up status, go to :menuselection:`Accounting --> Customers --> Customers`. Open the customer's form and click the :guilabel:`Accounting` tab. In the :guilabel:`Invoice follow-ups` section, click on the different levels to view the :guilabel:`Follow-up Status` of each level. If actions are needed, click :guilabel:`Overdue Invoices` to have a detailed list of the overdue invoices." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:77 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:78 msgid "Additional options can be set:" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:79 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:80 msgid ":guilabel:`Reminders`: These are either :guilabel:`Automatic` or :guilabel:`Manual`." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:80 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:81 msgid ":guilabel:`Next reminder`: The date by which the next follow-up actions should be taken is automatically set when follow-ups are processed, but can be manually adjusted if needed." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:82 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:83 msgid ":guilabel:`Responsible`: The user who handles the follow-up actions." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:84 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:85 msgid "To manually send a payment reminder to a customer, click :guilabel:`Send` and select the actions in the :guilabel:`Send and Print` window:" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:87 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:88 msgid ":guilabel:`Print`" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:88 -#: ../../content/applications/finance/fiscal_localizations/brazil.rst:151 -#: ../../content/applications/finance/fiscal_localizations/chile.rst:237 -#: ../../content/applications/finance/fiscal_localizations/chile.rst:1100 -msgid ":guilabel:`Email`" +#: ../../content/applications/finance/accounting/payments/follow_up.rst:90 +msgid ":guilabel:`WhatsApp`" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:89 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:91 msgid ":guilabel:`Sms`" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:90 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:92 msgid ":guilabel:`By post`" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:92 -msgid "Enable the :guilabel:`Attach Invoices` option and change the :guilabel:`Content Template` if needed. Then, click :guilabel:`Send` or :guilabel:`Send & Print` to send the :ref:`follow-up report `." +#: ../../content/applications/finance/accounting/payments/follow_up.rst:94 +msgid "Enable the :guilabel:`Attach Invoices` option, and change the :guilabel:`Content Template`, :guilabel:`WhatsApp Template`, or :guilabel:`Phone` if needed. Then, click :guilabel:`Send` or :guilabel:`Send & Print` to send the :ref:`follow-up report `." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:98 -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:101 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:100 +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:19 +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:217 msgid ":doc:`/applications/essentials/in_app_purchase`" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:101 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:103 msgid "The contact information on the invoice or the contact form is used to send the reminder." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:102 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:104 msgid "The chatter keeps a full record of all follow-up actions." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:107 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:109 msgid "Follow-ups for all customers due for action" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:109 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:111 msgid "After setting up the additional :ref:`follow-up ` options, review which customers have overdue invoices or require follow-up. To do so, go to :menuselection:`Accounting --> Customers --> Customers`. In the :guilabel:`Customers` kanban view, click the search bar and filter by :guilabel:`Overdue Invoices` or :guilabel:`Requires Follow-up`." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:115 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:117 msgid "To take follow-up actions for all relevant customers, switch to the list view and select the customers requiring follow-up. Then, click :icon:`fa-cog` :guilabel:`(Actions)` and select :guilabel:`Process Follow-ups` to send them the :ref:`follow-up report `." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:123 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:125 #: ../../content/applications/finance/accounting/taxes/avatax/avalara_portal.rst:144 #: ../../content/applications/finance/accounting/taxes/eu_distance_selling.rst:52 #: ../../content/applications/finance/fiscal_localizations/argentina.rst:1166 @@ -8583,37 +8880,37 @@ msgstr "" msgid "Reports" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:128 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:130 msgid "Customer statement" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:130 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:132 msgid "To get a comprehensive overview of a customer's account status, click the :guilabel:`Customer Statement` smart button on the customer's form. This statement corresponds to the :ref:`Partner Ledger ` report's portion specific to that customer." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:134 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:136 msgid "To send it to the customer, click :guilabel:`Send`, change the :guilabel:`Email Template` if needed, and click :guilabel:`Print & Send`." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:137 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:139 msgid "To view the customer statements for multiple customers at once, select the customers from the :guilabel:`Customers` list view, click :icon:`fa-cog` :guilabel:`(Actions)`, and select :guilabel:`Open Customer Statements`." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:141 -#: ../../content/applications/finance/accounting/payments/follow_up.rst:157 -#: ../../content/applications/finance/accounting/vendor_bills.rst:162 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:143 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:159 +#: ../../content/applications/finance/accounting/vendor_bills.rst:160 msgid "Click :guilabel:`PDF` or :guilabel:`XLSX` to generate a PDF or XLSX file, respectively." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:146 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:148 msgid "Follow-up report" msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:148 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:150 msgid "To get a complete overview of a customer's due invoices, separating those that are due from those that are overdue, click the :ref:`Customer Statement ` smart button on the customer's form. Then, click :icon:`fa-book` :guilabel:`Report: Customer Statement` and select :guilabel:`Follow-Up Report`." msgstr "" -#: ../../content/applications/finance/accounting/payments/follow_up.rst:153 +#: ../../content/applications/finance/accounting/payments/follow_up.rst:155 msgid "To view the follow-up report for all customers at once, go to :menuselection:`Accounting --> Reporting --> Partner Ledger`. Then, click :icon:`fa-book` :guilabel:`Report:` and select :guilabel:`Follow-Up Report`." msgstr "" @@ -9373,7 +9670,7 @@ msgid "Analytic distribution en masse" msgstr "" #: ../../content/applications/finance/accounting/reporting/analytic_accounting.rst:125 -msgid "To mass-edit analytic accounts in several entries simultaneously, go to :menuselection:`Accounting --> Accounting --> Journal items`, and select the ones that need to be updated. Click the :guilabel:`Analytic Distribution` column and add the required distribution in the :guilabel:`Analytic` column, then click the :icon:`oi-close` :guilabel:`(cross)` and :guilabel:`Confirm`. The analytic distribution is then added to the selected journal items." +msgid "To mass-edit analytic accounts in several entries simultaneously, go to :menuselection:`Accounting --> Accounting --> Journal items`, and select the ones that need to be updated. Click the :guilabel:`Analytic Distribution` column and add the required distribution in the :guilabel:`Analytic` column, then click the :icon:`oi-close` :guilabel:`(cross)` and :guilabel:`Update`. The analytic distribution is then added to the selected journal items." msgstr "" #: ../../content/applications/finance/accounting/reporting/analytic_accounting.rst:134 @@ -9762,7 +10059,7 @@ msgid "The subformula allows you to define how the move lines matching the domai msgstr "" #: ../../content/applications/finance/accounting/reporting/customize.rst:100 -#: ../../content/applications/finance/accounting/reporting/customize.rst:265 +#: ../../content/applications/finance/accounting/reporting/customize.rst:266 msgid "`sum`" msgstr "" @@ -9874,15 +10171,19 @@ msgstr "" msgid "`CUR` is the currency code in capital letters, and `amount` is the amount of the bound expressed in that currency." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:172 -msgid "You can also use the `cross_report` subformula to match an expression found in another report." +#: ../../content/applications/finance/accounting/reporting/customize.rst:173 +msgid "`cross_report(xml_id | report_id)`" +msgstr "" + +#: ../../content/applications/finance/accounting/reporting/customize.rst:173 +msgid "Used to match an expression from another report targeted by the xml_id or the report ID itself." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:175 +#: ../../content/applications/finance/accounting/reporting/customize.rst:176 msgid "Prefix of Account Codes computation engine" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:177 +#: ../../content/applications/finance/accounting/reporting/customize.rst:178 msgid "The :guilabel:`Prefix of Account Codes` computation engine is used to match amounts made on accounts using the prefixes of these accounts' codes as variables in an arithmetic expression." msgstr "" @@ -9902,7 +10203,7 @@ msgstr "" msgid "This formula adds the balances of the move lines made on accounts whose codes start with `21` and `10`, and subtracts the balance of the ones on accounts with the prefix `5`." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:189 +#: ../../content/applications/finance/accounting/reporting/customize.rst:190 msgid "It is also possible to ignore a selection of sub-prefixes." msgstr "" @@ -9914,15 +10215,15 @@ msgstr "" msgid "This formula works the same way as the previous example but ignores the prefixes `101`, `102`, and `57`." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:196 +#: ../../content/applications/finance/accounting/reporting/customize.rst:197 msgid "You can apply 'sub-filtering' on **credits and debits** using the `C` and `D` suffixes. In this case, an account will only be considered if its prefix matches, *and* if the total balance of the move lines made on this account is **credit/debit**." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:201 +#: ../../content/applications/finance/accounting/reporting/customize.rst:202 msgid "Account `210001` has a balance of -42 and account `210002` has a balance of 25. The formula `21D` only matches the account `210002`, and hence returns 25. `210001` is not matched, as its balance is *credit*." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:205 +#: ../../content/applications/finance/accounting/reporting/customize.rst:206 msgid "Prefix exclusions can be mixed with the `C` and `D` suffixes." msgstr "" @@ -9934,7 +10235,7 @@ msgstr "" msgid "This formula adds the balances of the move lines made on accounts whose code starts with `21` *if* it is debit (`D`) and `10` *if* it is credit (`C`), but ignores prefixes `101`, `102`, and subtracts the balance of the ones on accounts with the prefix `5`, ignoring the prefix `57`." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:213 +#: ../../content/applications/finance/accounting/reporting/customize.rst:214 msgid "To match the letter `C` or `D` in a prefix and not use it as a suffix, use an empty exclusion `()`." msgstr "" @@ -9946,7 +10247,7 @@ msgstr "" msgid "This formula matches accounts whose code starts with `21D`, regardless of their balance sign." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:219 +#: ../../content/applications/finance/accounting/reporting/customize.rst:220 msgid "In addition to using code prefixes to include accounts, you can also match them with **account tags**. This is especially useful, for example, if your country lacks a standardized chart of accounts, where the same prefix might be used for different purposes across companies." msgstr "" @@ -9958,7 +10259,7 @@ msgstr "" msgid "This formula matches accounts whose associated tags contain the one with ID *25*." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:227 +#: ../../content/applications/finance/accounting/reporting/customize.rst:228 msgid "If the tag you reference is defined in a data file, an XMLID can be used instead of the ID." msgstr "" @@ -9970,7 +10271,7 @@ msgstr "" msgid "This formula matches accounts whose associated tags include the tag denoted by *my_module.my_tag*." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:234 +#: ../../content/applications/finance/accounting/reporting/customize.rst:235 msgid "You can also use arithmetic expressions with tags, possibly combining them with prefix selections." msgstr "" @@ -9982,7 +10283,7 @@ msgstr "" msgid "The balances of accounts tagged as *my_module.my_tag* will be summed with those of accounts linked to the tag with ID *42* and accounts with the code prefix `10`" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:241 +#: ../../content/applications/finance/accounting/reporting/customize.rst:242 msgid "`C` and `D` suffixes can be used in the same way with tags." msgstr "" @@ -9994,7 +10295,7 @@ msgstr "" msgid "This formula matches accounts with the tag *my_module.my_tag* and a credit balance." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:247 +#: ../../content/applications/finance/accounting/reporting/customize.rst:248 msgid "Prefix exclusion also works with tags." msgstr "" @@ -10006,55 +10307,55 @@ msgstr "" msgid "This formula matches accounts with the tag *my_module.my_tag* and a code not starting with `10`." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:255 +#: ../../content/applications/finance/accounting/reporting/customize.rst:256 msgid "External Value computation engine" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:257 +#: ../../content/applications/finance/accounting/reporting/customize.rst:258 msgid "The :guilabel:`External Value` computation engine is used to refer to **manual** and **carryover values**. Those values are not stored using `account.move.line`, but with `account.report.external.value`. Each of these objects directly points to the expression it impacts, so very little needs to be done about their selection here." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:262 +#: ../../content/applications/finance/accounting/reporting/customize.rst:263 msgid "**Formulas** can be one of the following:" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:265 +#: ../../content/applications/finance/accounting/reporting/customize.rst:266 msgid "If the result must be the sum of all the external values in the period." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:268 +#: ../../content/applications/finance/accounting/reporting/customize.rst:269 msgid "`most_recent`" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:268 +#: ../../content/applications/finance/accounting/reporting/customize.rst:269 msgid "If the result must be the value of the latest external value in the period." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:270 +#: ../../content/applications/finance/accounting/reporting/customize.rst:271 msgid "In addition, **subformulas** can be used in two ways:" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:273 +#: ../../content/applications/finance/accounting/reporting/customize.rst:274 msgid "`rounding=X`" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:273 +#: ../../content/applications/finance/accounting/reporting/customize.rst:274 msgid "Replacing `X` with a number instructs to round the amount to X decimals." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:277 +#: ../../content/applications/finance/accounting/reporting/customize.rst:278 msgid "`editable`" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:276 +#: ../../content/applications/finance/accounting/reporting/customize.rst:277 msgid "Indicates this expression can be edited manually, triggering the display of an icon in the report, allowing the user to perform this action." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:280 +#: ../../content/applications/finance/accounting/reporting/customize.rst:281 msgid "Manual values are created at the `date_to` currently selected in the report." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:282 +#: ../../content/applications/finance/accounting/reporting/customize.rst:283 msgid "Both subformulas can be mixed by separating them with a `;`." msgstr "" @@ -10066,19 +10367,19 @@ msgstr "" msgid "This subformula shows the correct way to mix both behaviors." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:289 +#: ../../content/applications/finance/accounting/reporting/customize.rst:290 msgid "Custom Python Function computation engine" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:291 +#: ../../content/applications/finance/accounting/reporting/customize.rst:292 msgid "The :guilabel:`Custom Python Function` computation engine is a means for developers to introduce custom computation of expressions on a case-by-case basis. The :guilabel:`Formula` is the name of a **python function** to call, and the :guilabel:`Subformula` is a **key** to fetch in the **dictionary** returned by this function. Use this computation engine only if making a custom module." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:298 +#: ../../content/applications/finance/accounting/reporting/customize.rst:299 msgid "Columns" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:300 +#: ../../content/applications/finance/accounting/reporting/customize.rst:301 msgid "Reports can have an **indefinite number** of columns to display. Each column gets its values from the **expressions** declared on the **lines**. The field :guilabel:`expression_label` of the column gives the label of the expressions whose value is displayed. If a line has no **expression** in that field, then nothing is displayed for it in this column. If multiple columns are required, you must use different **expression** labels." msgstr "" @@ -10086,71 +10387,71 @@ msgstr "" msgid "Columns of report." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:309 +#: ../../content/applications/finance/accounting/reporting/customize.rst:310 msgid "When using the **period comparison** feature found under the :guilabel:`Options` tab of an accounting report, all columns are repeated in and for each period." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:315 +#: ../../content/applications/finance/accounting/reporting/customize.rst:316 msgid "Line grouping" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:317 +#: ../../content/applications/finance/accounting/reporting/customize.rst:318 msgid "Non-standard grouping is possible by adding or using existing fields on the *Journal Item* model, provided that the fields are related and non-stored." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:321 +#: ../../content/applications/finance/accounting/reporting/customize.rst:322 msgid "Grouping lines requires the report to have explicit report lines that can be edited. The deferred reports, for example, do not support grouping lines as they use dynamic lines that are generated." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:325 +#: ../../content/applications/finance/accounting/reporting/customize.rst:326 msgid "Create a new field on journal item" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:327 +#: ../../content/applications/finance/accounting/reporting/customize.rst:328 msgid "To create a non-stored, related field in the *Journal Item* model, first go to :menuselection:`Accounting --> Journal Items`, and click the :icon:`fa-bug` :guilabel:`(bug)` icon, then click :guilabel:`Fields`. Click :guilabel:`New` to create a new field, and complete the following fields:" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:332 +#: ../../content/applications/finance/accounting/reporting/customize.rst:333 msgid ":guilabel:`Field Name`: a technical name for the field" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:333 +#: ../../content/applications/finance/accounting/reporting/customize.rst:334 msgid ":guilabel:`Field Label`: the label to be displayed for the field" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:334 +#: ../../content/applications/finance/accounting/reporting/customize.rst:335 msgid ":guilabel:`Field Type`: the type of field that this related field should point to" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:335 +#: ../../content/applications/finance/accounting/reporting/customize.rst:336 msgid ":guilabel:`Stored`: Leave this field unchecked as only non-stored fields can be used to group lines." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:337 +#: ../../content/applications/finance/accounting/reporting/customize.rst:338 msgid ":guilabel:`Related Model`: If the field type is :guilabel:`one2many`, :guilabel:`many2many`, or :guilabel:`many2one`, select the model of the original field to group by." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:339 +#: ../../content/applications/finance/accounting/reporting/customize.rst:340 msgid ":guilabel:`Related Field Definition`: the technical path to the field you want to group by" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:342 +#: ../../content/applications/finance/accounting/reporting/customize.rst:343 msgid "To group by the sales team of the commercial partner, set the related field definition to `move_id.team_id`." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:346 +#: ../../content/applications/finance/accounting/reporting/customize.rst:347 msgid "Group lines" msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:348 +#: ../../content/applications/finance/accounting/reporting/customize.rst:349 msgid "To group lines, go to the :ref:`Lines ` tab of the desired report, click on the line you want to group, and edit the :guilabel:`Group by` field. Enter the technical name (:guilabel:`Field Name`) of the field to use as the grouping key." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:353 +#: ../../content/applications/finance/accounting/reporting/customize.rst:354 msgid "To find a list of all the model's fields and their technical names, go to :menuselection:`Accounting --> Journal Items`, and click the :icon:`fa-bug` :guilabel:`(bug)` icon, then click :guilabel:`Fields`. The technical name of each field is listed in the :guilabel:`Field Name` column." msgstr "" -#: ../../content/applications/finance/accounting/reporting/customize.rst:359 +#: ../../content/applications/finance/accounting/reporting/customize.rst:360 msgid ":ref:`Consolidation via grouping by account code `" msgstr "" @@ -10991,7 +11292,7 @@ msgid "**Default taxes** are automatically set up according to the country selec msgstr "" #: ../../content/applications/finance/accounting/taxes.rst:38 -msgid "Activate sales taxes from the list view" +msgid "Activate taxes from the list view" msgstr "" #: ../../content/applications/finance/accounting/taxes.rst:40 @@ -11088,8 +11389,8 @@ msgstr "" #: ../../content/applications/finance/accounting/taxes.rst:127 #: ../../content/applications/finance/accounting/taxes.rst:127 #: ../../content/applications/finance/accounting/taxes.rst:271 -#: ../../content/applications/finance/fiscal_localizations/india.rst:190 -#: ../../content/applications/finance/fiscal_localizations/india.rst:204 +#: ../../content/applications/finance/fiscal_localizations/india.rst:193 +#: ../../content/applications/finance/fiscal_localizations/india.rst:207 msgid "1,000" msgstr "" @@ -11468,7 +11769,6 @@ msgstr "" #: ../../content/applications/finance/accounting/taxes/B2B_B2C.rst:55 #: ../../content/applications/finance/fiscal_localizations/guatemala.rst:12 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:28 #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:12 msgid "Introduction" msgstr "" @@ -11511,6 +11811,7 @@ msgstr "" #: ../../content/applications/finance/accounting/taxes/B2B_B2C.rst:85 #: ../../content/applications/finance/fiscal_localizations/ecuador.rst:782 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1443 msgid "eCommerce" msgstr "" @@ -11770,7 +12071,7 @@ msgstr "" #: ../../content/applications/finance/accounting/taxes/avatax.rst:164 #: ../../content/applications/finance/fiscal_localizations/argentina.rst:32 #: ../../content/applications/finance/fiscal_localizations/australia.rst:12 -#: ../../content/applications/finance/fiscal_localizations/austria.rst:14 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:16 #: ../../content/applications/finance/fiscal_localizations/brazil.rst:32 #: ../../content/applications/finance/fiscal_localizations/canada.rst:36 #: ../../content/applications/finance/fiscal_localizations/chile.rst:32 @@ -11786,8 +12087,8 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/jordan.rst:16 #: ../../content/applications/finance/fiscal_localizations/luxembourg.rst:14 #: ../../content/applications/finance/fiscal_localizations/malaysia.rst:23 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:76 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:120 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:27 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:60 #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:16 #: ../../content/applications/finance/fiscal_localizations/peru.rst:21 #: ../../content/applications/finance/fiscal_localizations/romania.rst:14 @@ -11804,7 +12105,7 @@ msgstr "" #: ../../content/applications/finance/accounting/taxes/avatax.rst:165 #: ../../content/applications/finance/fiscal_localizations/argentina.rst:33 #: ../../content/applications/finance/fiscal_localizations/australia.rst:13 -#: ../../content/applications/finance/fiscal_localizations/austria.rst:15 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:17 #: ../../content/applications/finance/fiscal_localizations/brazil.rst:33 #: ../../content/applications/finance/fiscal_localizations/canada.rst:37 #: ../../content/applications/finance/fiscal_localizations/chile.rst:33 @@ -11819,8 +12120,8 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/jordan.rst:17 #: ../../content/applications/finance/fiscal_localizations/luxembourg.rst:15 #: ../../content/applications/finance/fiscal_localizations/malaysia.rst:24 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:77 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:121 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:28 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:61 #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:17 #: ../../content/applications/finance/fiscal_localizations/peru.rst:22 #: ../../content/applications/finance/fiscal_localizations/romania.rst:15 @@ -11840,7 +12141,7 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/australia.rst:73 #: ../../content/applications/finance/fiscal_localizations/australia.rst:101 #: ../../content/applications/finance/fiscal_localizations/australia.rst:155 -#: ../../content/applications/finance/fiscal_localizations/austria.rst:16 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:18 #: ../../content/applications/finance/fiscal_localizations/brazil.rst:34 #: ../../content/applications/finance/fiscal_localizations/canada.rst:38 #: ../../content/applications/finance/fiscal_localizations/chile.rst:34 @@ -11856,8 +12157,8 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/jordan.rst:18 #: ../../content/applications/finance/fiscal_localizations/luxembourg.rst:16 #: ../../content/applications/finance/fiscal_localizations/malaysia.rst:25 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:78 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:122 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:29 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:62 #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:18 #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:80 #: ../../content/applications/finance/fiscal_localizations/peru.rst:23 @@ -13185,6 +13486,7 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/chile.rst:703 #: ../../content/applications/finance/fiscal_localizations/ecuador.rst:391 #: ../../content/applications/finance/fiscal_localizations/italy.rst:123 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:515 #: ../../content/applications/finance/fiscal_localizations/united_kingdom.rst:349 msgid "Vendor bills" msgstr "" @@ -13222,11 +13524,11 @@ msgid "Alternatively, it is possible to create a vendor bill from the Accounting msgstr "" #: ../../content/applications/finance/accounting/vendor_bills.rst:32 -msgid "either click :guilabel:`New` on the :guilabel:`Vendor Bills` journal;" +msgid "either click :guilabel:`New` on the :guilabel:`Purchases` journal;" msgstr "" #: ../../content/applications/finance/accounting/vendor_bills.rst:33 -msgid "or click the :icon:`fa-ellipsis-v` :guilabel:`(vertical ellipsis)` icon of the :guilabel:`Vendor Bills` journal, then :guilabel:`Bill` under the :guilabel:`New` section." +msgid "or click the :icon:`fa-ellipsis-v` :guilabel:`(vertical ellipsis)` icon of the :guilabel:`Purchases` journal, then :guilabel:`Bill` under the :guilabel:`New` section." msgstr "" #: ../../content/applications/finance/accounting/vendor_bills.rst:39 @@ -13234,138 +13536,144 @@ msgid "Automatically" msgstr "" #: ../../content/applications/finance/accounting/vendor_bills.rst:41 -msgid "Vendor bills can be automatically created through various methods:" -msgstr "" - -#: ../../content/applications/finance/accounting/vendor_bills.rst:43 -msgid "Emailing to an :ref:`email alias ` associated with the purchase journal. If the email does not contain a valid file, an automatic response notifies the sender that no document was received." +msgid "Vendor bills can be automatically created by sending an email to an :ref:`email alias ` associated with the purchase journal, or by :ref:`uploading a PDF `." msgstr "" #: ../../content/applications/finance/accounting/vendor_bills.rst:46 -msgid "Uploading a PDF: To upload a bill, go to :menuselection:`Accounting --> Vendors --> Bills`, then click :guilabel:`Upload`." -msgstr "" - -#: ../../content/applications/finance/accounting/vendor_bills.rst:50 msgid "Once the bill is uploaded, the PDF document appears on the right side of the screen, making it easy to fill in the bill information." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:52 -msgid "Bills can be :doc:`digitized ` for automatic completion." +#: ../../content/applications/finance/accounting/vendor_bills.rst:48 +msgid "Bills can be :doc:`digitized ` for automatic completion and :ref:`matched with purchase orders ` to replace OCR-detected data with the existing purchase order's details." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:53 +#: ../../content/applications/finance/accounting/vendor_bills.rst:52 msgid "Services such as digitizing scanned or PDF vendor bills in Odoo require :doc:`In-App Purchase (IAP) ` credits." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:56 -msgid "To automatically post bills from selected vendors, go to :menuselection:`Accounting --> Vendors --> Vendors` and select the relevant vendor. In the :guilabel:`Accounting` tab, under the :guilabel:`Automation` section, update the :guilabel:`Auto-post bills` field with one of the following options:" +#: ../../content/applications/finance/accounting/vendor_bills.rst:55 +msgid "To automatically post bills from selected vendors, go to :menuselection:`Accounting --> Vendors --> Vendors` and select the relevant vendor. In the :guilabel:`Accounting` tab, under the :guilabel:`General` section, update the :guilabel:`Auto-post bills` field with one of the following options:" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:61 +#: ../../content/applications/finance/accounting/vendor_bills.rst:60 +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:105 msgid ":guilabel:`Always`" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:62 +#: ../../content/applications/finance/accounting/vendor_bills.rst:61 msgid ":guilabel:`Ask after 3 validations without edits`" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:63 +#: ../../content/applications/finance/accounting/vendor_bills.rst:62 +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:110 msgid ":guilabel:`Never`" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:68 +#: ../../content/applications/finance/accounting/vendor_bills.rst:65 +msgid ":ref:`Vendor bills matching with purchase orders `" +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills.rst:71 msgid "Bill completion" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:70 +#: ../../content/applications/finance/accounting/vendor_bills.rst:73 msgid "Whether the bill is created manually or automatically, make sure the following fields are appropriately completed:" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:73 +#: ../../content/applications/finance/accounting/vendor_bills.rst:76 msgid ":guilabel:`Vendor`: Odoo automatically fills in some information based on the information on the vendor's contact record as well as previous purchase orders and bills." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:75 +#: ../../content/applications/finance/accounting/vendor_bills.rst:78 msgid ":guilabel:`Bill Reference`: Add the sales order reference provided by the vendor. This field is used to :ref:`match ` the products when they are received." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:77 +#: ../../content/applications/finance/accounting/vendor_bills.rst:80 msgid ":guilabel:`Auto-Complete`: Select a past bill/purchase order to complete the document automatically. The :guilabel:`Vendor` field should be completed before completing this field." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:79 +#: ../../content/applications/finance/accounting/vendor_bills.rst:82 msgid ":guilabel:`Bill Date`: Select the document's issuance date." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:80 +#: ../../content/applications/finance/accounting/vendor_bills.rst:83 msgid ":guilabel:`Accounting Date`: Update the document's accounting registration date if needed." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:81 +#: ../../content/applications/finance/accounting/vendor_bills.rst:84 msgid ":guilabel:`Payment Reference`: The :guilabel:`Memo` field automatically includes the payment reference once the payment is registered." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:83 +#: ../../content/applications/finance/accounting/vendor_bills.rst:86 msgid ":guilabel:`Recipient Bank`: Indicates the account number to which the payment will be made. This field is required when paying via batch payment files (such as :ref:`NACHA ` and :doc:`SEPA `)." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:86 +#: ../../content/applications/finance/accounting/vendor_bills.rst:89 msgid ":guilabel:`Due Date` or :guilabel:`Payment Terms` must be specified for the bill payment." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:87 +#: ../../content/applications/finance/accounting/vendor_bills.rst:90 msgid ":guilabel:`Journal`: Select which journal should record the bill and in which :doc:`currency `." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:98 -msgid "If the bill line does not correspond to an existing product in the database, click the :icon:`oi-view-list` :guilabel:`(bars)` icon to enter a description for the bill line without linking it to a product." +#: ../../content/applications/finance/accounting/vendor_bills.rst:95 +msgid "To access the product catalog, click :doc:`Catalog `." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills.rst:97 +msgid "Select the products and quantities, then click :guilabel:`Back to Bill` to return to the vendor bill; the selected catalog items will appear in the vendor bill lines." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills.rst:99 +msgid "Update the :guilabel:`Quantity`, :guilabel:`Price`, and :doc:`Taxes ` fields if needed." msgstr "" #: ../../content/applications/finance/accounting/vendor_bills.rst:102 -msgid "To access the product catalog and view all items in an organized display, click :doc:`Catalog `. When the products and quantities are selected, click :guilabel:`Back to Bill` to return to the vendor bill; the selected catalog items will appear in the vendor bill lines." +msgid "If the bill line does not correspond to an existing product in the database, click :guilabel:`Add a line` and enter a description for the bill line without linking it to a product." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:108 +#: ../../content/applications/finance/accounting/vendor_bills.rst:106 msgid "Multiple bills for the same purchase order may be issued if the vendor is on back-order and sends invoices as products are shipped or if the vendor sends partial bills or requests a deposit. In this case, multiple bills may have the same :guilabel:`Bill Reference`." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:115 +#: ../../content/applications/finance/accounting/vendor_bills.rst:113 msgid "Bill confirmation" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:117 +#: ../../content/applications/finance/accounting/vendor_bills.rst:115 msgid "Click :guilabel:`Confirm` when the document is completed. The status changes to :guilabel:`Posted`, and a journal entry is generated based on the vendor bill information. On confirmation, Odoo assigns each vendor bill a unique number from a defined :doc:`sequence `." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:122 +#: ../../content/applications/finance/accounting/vendor_bills.rst:120 msgid "Once confirmed, a vendor bill can no longer be updated. Click :guilabel:`Reset to draft` if changes are required." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:130 +#: ../../content/applications/finance/accounting/vendor_bills.rst:128 msgid "To register a payment, click on :guilabel:`Pay`. In the :guilabel:`Pay` window, select the :guilabel:`Journal`, the :guilabel:`Payment Method`, the :guilabel:`Amount`, and the :guilabel:`Currency`." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:134 +#: ../../content/applications/finance/accounting/vendor_bills.rst:132 msgid "When the :guilabel:`Amount` paid is less than the total remaining amount on the vendor bill, the payment is :ref:`partial `, and the :guilabel:`Payment Difference` field displays the outstanding balance." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:138 +#: ../../content/applications/finance/accounting/vendor_bills.rst:136 msgid "The :guilabel:`Memo` field is filled automatically if the :guilabel:`Payment Reference` has been set correctly on the vendor bill. If the field is empty, select the vendor invoice number as a reference." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:142 +#: ../../content/applications/finance/accounting/vendor_bills.rst:140 msgid "Then click :guilabel:`Create payment`. An :guilabel:`In Payment`/:guilabel:`Partial` banner appears on the bill until it is :doc:`reconciled ` and its status updates to :guilabel:`Paid`." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:153 +#: ../../content/applications/finance/accounting/vendor_bills.rst:151 msgid "Aged payable report" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:155 -msgid "To get an overview of the open vendor bills and their due dates, go to :menuselection:`Accounting --> Reporting --> Aged payable`." +#: ../../content/applications/finance/accounting/vendor_bills.rst:153 +msgid "For an overview of the open vendor bills and their due dates, go to :menuselection:`Accounting --> Reporting --> Aged payable`." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills.rst:158 +#: ../../content/applications/finance/accounting/vendor_bills.rst:156 msgid "Click the :icon:`fa-caret-right` :guilabel:`(right arrow)` icon next to a vendor to view the details of all their outstanding bills, including the due dates and amounts." msgstr "" @@ -13796,107 +14104,235 @@ msgid "Therefore, at the end of December, bills A and B are fully recognized as msgstr "" #: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:3 -msgid "AI-powered document digitization" +msgid "Document digitization" msgstr "" #: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:5 -msgid "**Invoice digitization** is the process of converting paper documents into vendor bill and customer invoice forms in your accounting." +msgid "Document digitization refers to the process of converting paper or digital documents into records in a database. Using :abbr:`OCR (optical character recognition)` and artificial intelligence technologies, Odoo reads the content and automatically creates and fills in the record's details. This process is mainly used for vendor bills (or refunds)." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:8 -msgid "Odoo uses :abbr:`OCR (optical character recognition)` and artificial intelligence technologies to recognize the content of the documents. Vendor bill and customer invoice forms are automatically created and populated based on the scanned invoices." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:11 +msgid "Although less common, this digitization process can also be applied to customer invoices and credit notes. The :ref:`settings ` need to be adjusted accordingly." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:13 +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:16 msgid "`Test Odoo's invoice digitization `_" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:14 +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:17 msgid "`Odoo Tutorials: Vendor Bill Digitization `_" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:20 -msgid "In :menuselection:`Accounting --> Configuration --> Settings --> Digitization`, check the box :guilabel:`Document Digitization` and choose whether :guilabel:`Vendor Bills` and :guilabel:`Customer Invoices` (this includes customer credit notes) should be processed automatically or on demand." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:26 +msgid "Go to :menuselection:`Accounting --> Configuration --> Settings` and navigate to the :guilabel:`Digitization` section. Enable the :guilabel:`Document Digitization` option and choose whether :guilabel:`Vendor Bills` should be processed automatically or on demand." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:25 -msgid "If you enable the :guilabel:`Single Invoice Line Per Tax` option, only one line is created per tax in the new bill, regardless of the number of lines on the invoice." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:31 +msgid "If the :guilabel:`Single Invoice Line Per Tax` option is enabled, only one line is created per tax in the new vendor bill, regardless of the number of lines on it." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:29 -msgid "Invoice upload" +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:37 +msgid "Vendor bills upload" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:32 -msgid "Upload invoices manually" +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:39 +msgid "Vendor bills are :ref:`uploaded manually ` or sent to a :ref:`designated email alias ` to be digitized. They can also be :ref:`automatically posted ` for selected vendors." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:34 -msgid "From the :guilabel:`Accounting Dashboard`, click on the :guilabel:`Upload` button of your vendor bills journal. Alternatively, go to :menuselection:`Accounting --> Customers --> Invoices` or :menuselection:`Accounting --> Vendors --> Bills` and select :guilabel:`Upload`." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:45 +msgid "Once the bill is uploaded, the document preview appears on the right side of the screen." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:42 -msgid "Upload invoices using an email alias" +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:48 +msgid ":doc:`Vendor bills <../vendor_bills>`" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:44 -msgid "You can configure your connected scanner to send scanned documents to an email alias. Emails sent to these aliases are converted into new draft customer invoices or vendor bills." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:53 +msgid "Manual upload" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:47 -msgid "You can modify the email alias of a journal. To do so, go to the :guilabel:`Settings` app. Under :guilabel:`General Settings: Discuss`, enable :guilabel:`Custom Email Servers`, add an :guilabel:`Alias Domain`, and :guilabel:`Save`." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:55 +msgid "In the Accounting dashboard, drag and drop vendor bills into the desired purchase journal or click :guilabel:`Upload` on the purchase journal." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:51 -msgid "The email alias is now available in the :guilabel:`Advanced Settings` tab of the journal. Emails sent to this address will be converted automatically into new invoices or bills." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:61 +msgid "Upload via email alias" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:55 -msgid "If you use the :doc:`Documents ` app, you can automatically send your scanned invoices to the :guilabel:`Finance` workspace (e.g., `inbox-financial@example.odoo.com`)." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:63 +msgid "Vendor bills can be uploaded via an email alias associated with the relevant journal in two ways:" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:59 -msgid "The default email aliases `vendor-bills@` and `customer-invoices@` followed by the :guilabel:`Alias Domain` you set are automatically created for the :guilabel:`Vendor Bills` and :guilabel:`Customer Invoices` journals, respectively. Emails sent to these addresses are converted automatically into new invoices or bills." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:65 +msgid "scanned from a connected scanner configured to send email to an email alias;" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:64 -msgid "To change a default email alias, go to :menuselection:`Accounting --> Configuration --> Accounting: Journals`. Select the journal you want to edit, click on the :guilabel:`Advanced Settings` tab, and edit the `Email Alias`." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:66 +msgid "sent directly to an email alias." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:69 -msgid "Invoice digitization" +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:68 +msgid "Each PDF attached to the email is automatically converted into a new draft vendor bill." msgstr "" #: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:71 -msgid "According to your settings, the document is either processed automatically, or you need to click on :guilabel:`Send for digitization` to do it manually." +msgid "Only PDF and XML formats are processed via an email alias associated with a journal." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:72 +msgid "JPEG files must be processed via :ref:`email alias in the Documents app `." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:75 +msgid "To add an email alias to a journal, follow these steps:" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:74 -msgid "Once the data is extracted from the PDF, you can correct it if necessary by clicking on the respective tags (available in :guilabel:`Edit` mode) and selecting the proper information instead." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:77 +msgid "Make sure an :doc:`alias domain <../../../websites/website/configuration/domain_names>` has been configured." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:78 -msgid "Data recognition with AI" +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:79 +msgid "The default email alias `vendor-bills@` followed by the alias domain is automatically created and available in the :guilabel:`Advanced Settings` tab of the :guilabel:`Vendor Bills` journal." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:80 -msgid "It is essential to review and correct (if needed) the information uploaded during digitization. Then, you have to post the document by clicking on :guilabel:`Confirm`. In this manner, the AI learns, and the system identifies the correct data for future digitizations." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:81 +msgid "To change a default email alias, go to :menuselection:`Accounting --> Configuration --> Journals`, select the corresponding journal, and edit the :guilabel:`Email Alias` in the :guilabel:`Advanced Settings` tab." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:84 +msgid "Configure the connected scanner to send scanned documents to the email alias, if needed." msgstr "" #: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:87 -msgid "The **invoice digitization** is an In-App Purchase (IAP) service that requires prepaid credits to work. Digitizing one document consumes one credit." +msgid "Alternatively, an :ref:`email alias in the Documents app ` can be used to automatically send vendor bills to the :guilabel:`Finance` :ref:`folder ` (e.g., `inbox-financial@example.odoo.com`)." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:94 +msgid "Automatic vendor bill posting" +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:97 +msgid "To use the :guilabel:`Auto-post bills` option, the :guilabel:`Digitize automatically` setting in the :ref:`Document Digitization ` section must be enabled for vendor bills." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:101 +msgid "To automatically post digitized vendor bills for specific vendors, go to :menuselection:`Accounting --> Vendors --> Vendors` and click the desired vendor. In the :guilabel:`Accounting` tab of the contact form, select an :guilabel:`Auto-post bills` option in the :guilabel:`Automation` section:" +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:106 +msgid ":guilabel:`Ask after 3 validations without edits`: When the third uploaded bill is confirmed without any edits, an :guilabel:`Autopost Bills` window appears. The following options can be chosen: :guilabel:`Activate auto-validation`, :guilabel:`Ask me later`, or :guilabel:`Never for this vendor`." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:113 +msgid "Since automation is triggered after three validated bills without edits, the contact name must already exist in the database, and each uploaded vendor bill must include a bill date." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:90 -msgid "To buy credits, go to :menuselection:`Accounting --> Configuration --> Settings --> Digitization` and click on :guilabel:`Buy credits`, or go to :menuselection:`Settings --> Odoo IAP` and click on :guilabel:`View My Services`." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:119 +msgid "Digitization and data recognition with AI" msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:95 -msgid "Enterprise Odoo users with a valid subscription get free credits to test IAP features before deciding to purchase more credits for the database. This includes demo/training databases, educational databases, and one-app-free databases." +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:121 +msgid "Depending on the :ref:`settings `, documents are either automatically digitized or require manual processing if digitization is set to on-demand only." msgstr "" -#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:100 -msgid "`Our Privacy Policy `_" +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:124 +msgid "To manually digitize an :ref:`uploaded document `, click :guilabel:`Digitize document`." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:127 +msgid "Once the document has been digitized, a blue banner appears; click :icon:`oi-arrow-right` :guilabel:`Refresh`. Review and correct any information uploaded during digitization: click on the related field(s) to edit them, or click :guilabel:`Reload AI data` to refresh the data." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:131 +msgid "Then, click :guilabel:`Confirm` to post the document." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:134 +msgid "Once a document has been digitized, the :guilabel:`Vendor` field remains empty if the vendor doesn't exist in the database. To add it, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` in the :guilabel:`Vendor` field; the vendor name appears highlighted in the document preview on the right. Click it to open a new vendor form with the name pre-filled." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:140 +msgid "The following vendor bill fields are recognized by OCR:" +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:142 +msgid ":guilabel:`Vendor`, :guilabel:`Bill Reference`, :guilabel:`Bill Date`, :guilabel:`Payment Reference` (only in the Belgian +++xxx/xxxx/xxxxx+++ format), :guilabel:`Recipient Bank`, :guilabel:`Due Date`, and the currency (in a :doc:`multi-currency <../get_started/multi_currency>` environment and if the currency is activated)." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:146 +msgid "From the :guilabel:`Invoices Lines` tab: :guilabel:`Product` description/label, :guilabel:`Quantity`, unit :guilabel:`Price`, :guilabel:`Taxes` (if the :ref:`tax is activated `; this field is not recognized by OCR for the :doc:`Indian localization <../../fiscal_localizations/india>`), :guilabel:`Untaxed Amount`, and :guilabel:`Total`." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:155 +msgid "Purchase order matching" +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:157 +msgid "When a digitized vendor bill is recognized by :abbr:`OCR (optical character recognition)`, Odoo searches the database for a matching purchase order. If found, the vendor bill can be manually matched with the existing open purchase order lines." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:161 +msgid "Once a vendor bill has been :ref:`uploaded ` and :ref:`digitized `, click the :guilabel:`Purchase matching` smart button to access the :guilabel:`Purchase matching` list view, displaying all purchase order lines linked to the vendor assigned to the vendor bill. Then, select the relevant purchase order lines and the draft vendor bill (shown in grey), and click :guilabel:`Match`." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:168 +msgid "In the :guilabel:`Purchase Matching` list view, update the :guilabel:`Quantity` and :guilabel:`Price` in the purchase order lines, if necessary." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:171 +msgid "If there is no existing purchase order related to the vendor of the uploaded vendor bill, a new purchase order can be directly created from the vendor bill lines. To do so, follow these steps:" +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:174 +msgid "Once the vendor bill is uploaded, make sure the :guilabel:`Vendor` field is filled in with the correct vendor." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:176 +msgid "Click the :guilabel:`Purchase matching` smart button, select the draft vendor bill in the list (shown in grey), and click :guilabel:`Add to PO`." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:178 +msgid "In the :guilabel:`Add to Purchase Order` window, start typing in the :guilabel:`Purchase Order` field and select :guilabel:`Create and edit`." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:180 +msgid "In the :guilabel:`Create Purchase Order` window, select the vendor assigned to the vendor bill, then complete all :ref:`required fields ` and click :guilabel:`Confirm`." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:183 +msgid "In the :guilabel:`Purchase Matching` list view, select the relevant purchase order lines and the draft vendor bill (shown in grey), and click :guilabel:`Match`." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:187 +msgid "If any information required for the purchase order fields is missing, click :guilabel:`Save and Close` in the :guilabel:`Create Purchase Order` window. Then, open the Purchase app to fill in the fields and :ref:`confirm the purchase order `." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:192 +msgid "Electronic vendor bills with embedded XML ensure more accurate and efficient processing." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:193 +msgid "Alternatively, the :ref:`Auto-complete ` feature can transfer information from the purchase order to the vendor bill, without requiring OCR." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:201 +msgid "The document digitization feature is an In-App Purchase (IAP) service requiring prepaid credits. Digitizing one document uses one credit." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:204 +msgid "To buy credits, :ref:`go to the Settings app ` or :menuselection:`Accounting --> Configuration --> Settings`, navigate to the :guilabel:`Digitization` section, and click :guilabel:`Buy credits`." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:209 +msgid "Odoo Enterprise users with a valid subscription get free credits to test IAP features before purchasing more credits for the database. This includes demo/training databases, educational databases, and one-app-free databases." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:212 +msgid "XML files don't require OCR credits because they contain structured data that can be processed directly, without OCR." +msgstr "" + +#: ../../content/applications/finance/accounting/vendor_bills/invoice_digitization.rst:216 +msgid "`Odoo In-App Purchase Privacy Policy `_" msgstr "" #: ../../content/applications/finance/accounting/vendor_bills/sequence.rst:3 @@ -13956,6 +14392,86 @@ msgstr "" msgid "When the range is invalid. For example, if the :guilabel:`Bill Date` doesn't align with the date in the new sequence, such as using a 2024 sequence (BILL/2024/MM/XXXX) for an vendor bill dated in 2025." msgstr "" +#: ../../content/applications/finance/esg.rst:3 +msgid "ESG" +msgstr "" + +#: ../../content/applications/finance/esg.rst:5 +msgid "The ESG (Environment, Social, and Governance) app helps you automate ESG data collection by integrating with apps like Accounting, Fleet, Payroll, and Employees. It pulls data from your operations to build your ESG reports, based on legal and sustainability reporting requirements, while giving you a real-time view of your emissions and other key ESG metrics." +msgstr "" + +#: ../../content/applications/finance/esg.rst:11 +msgid "Carbon footprint" +msgstr "" + +#: ../../content/applications/finance/esg.rst:13 +msgid "The carbon footprint tool automates emissions tracking by collecting data from accounting records (purchases, expenses, etc.) and employee commuting activity, and supports manual inputs. Emissions are updated in real time, allowing for continuous monitoring and reporting. You can:" +msgstr "" + +#: ../../content/applications/finance/esg.rst:17 +msgid "Track your daily environmental impact." +msgstr "" + +#: ../../content/applications/finance/esg.rst:18 +msgid "Evaluate the immediate effect of your reduction actions." +msgstr "" + +#: ../../content/applications/finance/esg.rst:19 +msgid "Prioritize targeted changes." +msgstr "" + +#: ../../content/applications/finance/esg.rst:20 +msgid "Continuously monitor and refine your sustainability strategy." +msgstr "" + +#: ../../content/applications/finance/esg.rst:22 +msgid "Emissions (kgCO₂e) formula" +msgstr "" + +#: ../../content/applications/finance/esg.rst:24 +msgid "`Activity data` × `Emission factor`" +msgstr "" + +#: ../../content/applications/finance/esg.rst:27 +msgid "Activity data sources" +msgstr "" + +#: ../../content/applications/finance/esg.rst:29 +msgid "The following data sources are used:" +msgstr "" + +#: ../../content/applications/finance/esg.rst:31 +msgid ":ref:`Accounting `" +msgstr "" + +#: ../../content/applications/finance/esg.rst:32 +msgid ":ref:`Fleet `" +msgstr "" + +#: ../../content/applications/finance/esg.rst:33 +msgid ":ref:`Manual inputs `" +msgstr "" + +#: ../../content/applications/finance/esg.rst:38 +#: ../../content/applications/finance/fiscal_localizations/australia.rst:42 +#: ../../content/applications/finance/fiscal_localizations/brazil.rst:463 +#: ../../content/applications/finance/fiscal_localizations/ecuador.rst:430 +#: ../../content/applications/finance/fiscal_localizations/france.rst:81 +#: ../../content/applications/finance/fiscal_localizations/germany.rst:6 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:420 +#: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:181 +msgid "Accounting" +msgstr "" + +#: ../../content/applications/finance/esg.rst:40 +msgid "Odoo collects activity data from journal entries posted to expense and asset accounts. These include:" +msgstr "" + +#: ../../content/applications/finance/esg.rst:43 +msgid "Fixed assets" +msgstr "" + +#: ../../content/applications/finance/esg.rst:44 #: ../../content/applications/finance/expenses.rst:5 #: ../../content/applications/finance/fiscal_localizations/united_arab_emirates.rst:108 #: ../../content/applications/finance/fiscal_localizations/united_arab_emirates.rst:111 @@ -13964,6 +14480,361 @@ msgstr "" msgid "Expenses" msgstr "" +#: ../../content/applications/finance/esg.rst:45 +msgid "Other expenses" +msgstr "" + +#: ../../content/applications/finance/esg.rst:46 +msgid "Cost of revenue" +msgstr "" + +#: ../../content/applications/finance/esg.rst:48 +msgid "Only these account types are considered for carbon footprint calculations, in line with the *Bilan Carbone* methodology." +msgstr "" + +#: ../../content/applications/finance/esg.rst:54 +msgid "Fleet" +msgstr "" + +#: ../../content/applications/finance/esg.rst:56 +msgid "Odoo calculates commuting emissions using data from the Fleet and Employees apps." +msgstr "" + +#: ../../content/applications/finance/esg.rst:58 +msgid "Employee commuting emissions formula" +msgstr "" + +#: ../../content/applications/finance/esg.rst:60 +msgid "`Days` × `Home-work distance` × `2` × (`Number of office days` / `7`) × `Vehicle model CO₂ emissions`" +msgstr "" + +#: ../../content/applications/finance/esg.rst:63 +msgid "To ensure accurate calculations:" +msgstr "" + +#: ../../content/applications/finance/esg.rst:65 +msgid "Define the average number of days per week the employees commute to the office by going to :menuselection:`ESG --> Configuration --> Settings` and filling in the :guilabel:`Weekly Office Attendance`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:68 +msgid "Set the emissions of each vehicle model by going to :menuselection:`Fleet --> Configuration --> Models`, selecting a model, and entering its :guilabel:`CO₂ Emissions`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:70 +msgid "Set each employee's home-to-work distance by opening the :guilabel:`Employees` app, selecting an employee, and filling in the employee's :guilabel:`Home-Work Distance`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:74 +msgid "The employee vehicle's :guilabel:`Start Date` and, if applicable, :guilabel:`End Date`, are used to calculate the emissions. Ensure they are set by opening the :guilabel:`Employees` app, selecting an employee, and clicking the :guilabel:`Cars` smart button." +msgstr "" + +#: ../../content/applications/finance/esg.rst:78 +msgid "To access the employee commuting emissions pivot table, go to :menuselection:`ESG --> Collect --> Employee Commuting`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:-1 +msgid "The employee commuting emissions pivot table" +msgstr "" + +#: ../../content/applications/finance/esg.rst:84 +msgid "To add the data to the emitted emissions, click :guilabel:`Add Emissions`, define the :guilabel:`Emissions Period` that should be covered, and click :guilabel:`Save`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:90 +msgid "Manual input" +msgstr "" + +#: ../../content/applications/finance/esg.rst:92 +msgid "You can manually enter emissions for activities that not tracked automatically (e.g., employee lunches, waste, etc.). To do so, go to :menuselection:`ESG --> Collect --> Emitted Emissions` and click :guilabel:`New`, then:" +msgstr "" + +#: ../../content/applications/finance/esg.rst:96 +msgid "Name the activity." +msgstr "" + +#: ../../content/applications/finance/esg.rst:97 +msgid "Select a :guilabel:`Date`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:98 +msgid "Select an :guilabel:`Emission factor`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:99 +msgid "Enter a :guilabel:`Quantity`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:101 +msgid "Once saved, the entry appears under :menuselection:`ESG --> Collect --> Emitted Emissions` and is included in the carbon footprint report." +msgstr "" + +#: ../../content/applications/finance/esg.rst:105 +msgid "Emission factors" +msgstr "" + +#: ../../content/applications/finance/esg.rst:107 +msgid "An emission factor is a coefficient that indicates the rate at which a specific activity emits greenhouse gases into the atmosphere." +msgstr "" + +#: ../../content/applications/finance/esg.rst:111 +msgid "Source database" +msgstr "" + +#: ../../content/applications/finance/esg.rst:113 +msgid "Import the data from a certified emission factors database by going to :menuselection:`ESG --> Configuration --> Source Databases`. Click :guilabel:`Download` on the `ADEME `_ database to import its emission factors and sources." +msgstr "" + +#: ../../content/applications/finance/esg.rst:118 +msgid "Main components of an emission factor" +msgstr "" + +#: ../../content/applications/finance/esg.rst:121 +msgid "Source" +msgstr "" + +#: ../../content/applications/finance/esg.rst:123 +msgid "Each emission factor is assigned to a scope, following the GHG Protocol:" +msgstr "" + +#: ../../content/applications/finance/esg.rst:125 +msgid "Scope 1 – Direct emissions (e.g., fuel burned on-site or in company vehicles)" +msgstr "" + +#: ../../content/applications/finance/esg.rst:126 +msgid "Scope 2 – Indirect emissions from purchased energy (e.g., electricity or heat)" +msgstr "" + +#: ../../content/applications/finance/esg.rst:127 +msgid "Scope 3 – All other indirect emissions across the value chain (e.g., purchased goods, travel, waste)" +msgstr "" + +#: ../../content/applications/finance/esg.rst:130 +msgid "Scopes can be structured hierarchically (parent-child) for more detailed categorization, such as \"Scope 3: Others Indirect > Purchased Goods > Electronics\"." +msgstr "" + +#: ../../content/applications/finance/esg.rst:134 +msgid "Uncertainty" +msgstr "" + +#: ../../content/applications/finance/esg.rst:136 +msgid "Uncertainty represents the potential margin of error in an emission factor. It reflects how precise or reliable the factor is when estimating emissions for a given activity, based on the quality of data, assumptions used, and calculation methodology." +msgstr "" + +#: ../../content/applications/finance/esg.rst:140 +msgid "It helps you assess the confidence level of the emissions data used in the reporting." +msgstr "" + +#: ../../content/applications/finance/esg.rst:143 +msgid "Compute method" +msgstr "" + +#: ../../content/applications/finance/esg.rst:145 +msgid "The compute method determines whether emissions are calculated using physical quantities (e.g., kg, liters, units) or monetary values (e.g., € spent). In physical mode, the system uses the quantity from the transaction (e.g., 10 units × :abbr:`EF (emission factor)` per unit). In monetary mode, it uses the transaction amount (e.g., €500 × :abbr:`EF (emission factor)` per €)." +msgstr "" + +#: ../../content/applications/finance/esg.rst:151 +msgid "Gas emissions lines" +msgstr "" + +#: ../../content/applications/finance/esg.rst:153 +msgid "Each emission factor can include multiple gas emission lines, representing the different greenhouse gases involved in the activity. The ESG app includes the six main gases from the Kyoto Protocol — CO₂, CH₄, N₂O, HFCs, PFCs, SF₆ — each with a predefined Global Warming Potential (GWP) used to convert them into a common unit: CO₂-equivalent (kgCO₂e)." +msgstr "" + +#: ../../content/applications/finance/esg.rst:159 +msgid "Add more specific gases by going to :menuselection:`ESG --> Configuration --> Gases`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:161 +msgid "Each gas line can be linked to an activity type such as production, transport, or use, allowing for detailed breakdowns in your emissions reporting." +msgstr "" + +#: ../../content/applications/finance/esg.rst:164 +msgid "The final emission factor value is the sum of all these gases’ emissions converted into CO₂-equivalents." +msgstr "" + +#: ../../content/applications/finance/esg.rst:168 +msgid "Assignation rules" +msgstr "" + +#: ../../content/applications/finance/esg.rst:170 +msgid "Assignation rules allow emission factors to be automatically applied to relevant activity data based on specific criteria: the product, partner, and/or account involved in the transaction." +msgstr "" + +#: ../../content/applications/finance/esg.rst:174 +msgid "You have assigned an emission factor to the *Zenith Pro Computer* product and later receive a vendor bill for 150 units; the system automatically applies the assigned emission factor, multiplying the emission factor's emissions (kgCO₂e) by 150." +msgstr "" + +#: ../../content/applications/finance/esg.rst:178 +msgid "To define assignation rules on emissions factors, go to :menuselection:`ESG --> Configuration --> Emission Factors` and select an emission factor. Under the :guilabel:`Assignations` tab, click :guilabel:`Add a line`, and select a record for one or more of the following attributes: :guilabel:`Product`, :guilabel:`Partner`, and :guilabel:`Account`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:183 +msgid "All attributes have to match for the rule to be applied." +msgstr "" + +#: ../../content/applications/finance/esg.rst:186 +msgid "Ensure the unit of measure set next to the product's :guilabel:`Cost` matches the emission factor's :guilabel:`Unit of Measure`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:-1 +msgid "A product's unit of measure" +msgstr "" + +#: ../../content/applications/finance/esg.rst:192 +msgid "If the field is not displayed, go to :menuselection:`Accounting --> Configuration --> Settings` and enable the :guilabel:`Units of Measure & Packagings` option." +msgstr "" + +#: ../../content/applications/finance/esg.rst:196 +msgid "Accounting journal entries with a missing emission factor can be found by clicking :guilabel:`Emissions to define` under the :guilabel:`Collect Emissions` card on the dashboard." +msgstr "" + +#: ../../content/applications/finance/esg.rst:200 +msgid "Rules priority" +msgstr "" + +#: ../../content/applications/finance/esg.rst:202 +msgid "When multiple assignation rules match, Odoo prioritizes the most specific rule based on the following criteria:" +msgstr "" + +#: ../../content/applications/finance/esg.rst:205 +msgid "Attribute specificity: Odoo first evaluates rules by the most precise attribute, following this priority hierarchy (from most to least specific):" +msgstr "" + +#: ../../content/applications/finance/esg.rst:208 +#: ../../content/applications/finance/esg.rst:226 +#: ../../content/applications/finance/esg.rst:238 +#: ../../content/applications/finance/esg.rst:257 +#: ../../content/applications/finance/esg.rst:269 +#: ../../content/applications/finance/fiscal_localizations/peru.rst:387 +#: ../../content/applications/finance/fiscal_localizations/romania.rst:113 +msgid "Product" +msgstr "" + +#: ../../content/applications/finance/esg.rst:212 +msgid "Attribute count: if multiple rules share the same level of attribute specificity, Odoo then considers the number of attributes in the rule. The rule with more attributes defined will take priority." +msgstr "" + +#: ../../content/applications/finance/esg.rst:217 +msgid "**Example 1**" +msgstr "" + +#: ../../content/applications/finance/esg.rst:219 +#: ../../content/applications/finance/esg.rst:250 +msgid "*Emission factor #1 assignation rule*" +msgstr "" + +#: ../../content/applications/finance/esg.rst:227 +#: ../../content/applications/finance/esg.rst:239 +#: ../../content/applications/finance/esg.rst:258 +#: ../../content/applications/finance/esg.rst:270 +msgid "*Any Account*" +msgstr "" + +#: ../../content/applications/finance/esg.rst:228 +#: ../../content/applications/finance/esg.rst:259 +msgid "*Any Partner*" +msgstr "" + +#: ../../content/applications/finance/esg.rst:229 +#: ../../content/applications/finance/esg.rst:260 +#: ../../content/applications/finance/esg.rst:272 +msgid "**Zenith Pro Computer**" +msgstr "" + +#: ../../content/applications/finance/esg.rst:231 +#: ../../content/applications/finance/esg.rst:262 +msgid "*Emission factor #2 assignation rule*" +msgstr "" + +#: ../../content/applications/finance/esg.rst:240 +#: ../../content/applications/finance/esg.rst:271 +msgid "**Digital Den**" +msgstr "" + +#: ../../content/applications/finance/esg.rst:241 +msgid "*Any Product*" +msgstr "" + +#: ../../content/applications/finance/esg.rst:243 +msgid "Given the assignation rules above, all products purchased from **Digital Den** will be assigned emission factor **#2**, except the **Zenith Pro Computer** product, which will be assigned emission factor **#1**." +msgstr "" + +#: ../../content/applications/finance/esg.rst:248 +msgid "**Example 2**" +msgstr "" + +#: ../../content/applications/finance/esg.rst:274 +msgid "Given the assignation rules above, any purchased **Zenith Pro Computer** will be assigned emission factor **#1**, except if purchased from the **Digital Den**, which will be assigned emission factor **#2**." +msgstr "" + +#: ../../content/applications/finance/esg.rst:279 +msgid "Apply retroactively" +msgstr "" + +#: ../../content/applications/finance/esg.rst:281 +msgid "Once your emission factors are configured with assignation rules, you can also apply them retroactively to past activity data." +msgstr "" + +#: ../../content/applications/finance/esg.rst:284 +msgid "To do so, go to :menuselection:`ESG --> Configuration --> Emission Factors`, select an emission factor, and click :guilabel:`Assign`. Select an :guilabel:`Application Period`, and, if desired, enable the :guilabel:`Replace existing assignations` option." +msgstr "" + +#: ../../content/applications/finance/esg.rst:289 +msgid "Apply emission factors in bulk by selecting multiple emission factors in :icon:`oi-view-list` list view and clicking :icon:`fa-cog` (:guilabel:`Actions`) :menuselection:`--> Assign Emission Factors`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:294 +msgid "Sex parity and pay gap" +msgstr "" + +#: ../../content/applications/finance/esg.rst:296 +msgid "Sex parity tracks the distribution of sexes across the workforce, such as comparing women and men in technical vs. administrative roles, permanent vs. temporary contracts, different office locations, or management vs. non-management positions." +msgstr "" + +#: ../../content/applications/finance/esg.rst:300 +msgid "These insights, based on employee data, are essential for CSRD reporting under ESRS S1 and will also support future VSME standards." +msgstr "" + +#: ../../content/applications/finance/esg.rst:303 +msgid "To view a company's sex parity and pay gap measures, set the sex of each employee by opening the :guilabel:`Employees` app and selecting an employee. Under the :guilabel:`Private Information` tab, select the employee's :guilabel:`Gender`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:307 +msgid "The pay gap is calculated using the wages set on the employees' Payroll contracts for the same jobs." +msgstr "" + +#: ../../content/applications/finance/esg.rst:309 +msgid "Pay gap formula" +msgstr "" + +#: ../../content/applications/finance/esg.rst:311 +msgid "((`Average male salary` – `Average female salary`) / `Average male salary`) × `100`" +msgstr "" + +#: ../../content/applications/finance/esg.rst:313 +msgid "Access the measures by clicking :menuselection:`ESG --> Measure --> Sex Parity / Pay Gap`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:316 +msgid "Use the different :ref:`Group By ` options to break down the data by :guilabel:`Leadership Level`, :guilabel:`Department`, :guilabel:`Job Position`, :guilabel:`Contract Type`, or :guilabel:`Country`." +msgstr "" + +#: ../../content/applications/finance/esg.rst:0 +msgid "The sex parity graph filtering options" +msgstr "" + +#: ../../content/applications/finance/esg.rst:324 +msgid "Initiatives" +msgstr "" + +#: ../../content/applications/finance/esg.rst:326 +msgid "Go to :menuselection:`ESG --> Act --> Initiatives` to access all the :doc:`Project <../services/project>` features, and start taking action on your impact. You can estimate CO₂ savings for each task, track progress, and assign team members with deadlines." +msgstr "" + +#: ../../content/applications/finance/esg.rst:331 +msgid "Estimated CO₂ reductions do not immediately lower your carbon footprint. The real impact shows only when these reductions are reflected in your operations." +msgstr "" + #: ../../content/applications/finance/expenses.rst:7 msgid "Odoo **Expenses** streamlines the management of expenses. After an employee submits their expenses in Odoo, they are reviewed by management and accounting teams. Once approved, payments can then be processed, and disbursed back to the employee for reimbursement." msgstr "" @@ -14859,8 +15730,8 @@ msgid ":doc:`Posting expenses in accounting <../expenses/post_expenses>`" msgstr "" #: ../../content/applications/finance/expenses/reinvoice_expenses.rst:33 -#: ../../content/applications/finance/fiscal_localizations/india.rst:59 -#: ../../content/applications/finance/fiscal_localizations/india.rst:243 +#: ../../content/applications/finance/fiscal_localizations/india.rst:90 +#: ../../content/applications/finance/fiscal_localizations/india.rst:246 msgid "Setup" msgstr "" @@ -15437,7 +16308,6 @@ msgid "Argentina" msgstr "" #: ../../content/applications/finance/fiscal_localizations/argentina.rst:6 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:19 msgid "Webinars" msgstr "" @@ -15536,7 +16406,6 @@ msgid "Allows registering withholdings during the payment of an invoice." msgstr "" #: ../../content/applications/finance/fiscal_localizations/argentina.rst:58 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:142 #: ../../content/applications/finance/fiscal_localizations/peru.rst:105 msgid "Configure your company" msgstr "" @@ -16826,10 +17695,10 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/colombia.rst:204 #: ../../content/applications/finance/fiscal_localizations/ecuador.rst:121 #: ../../content/applications/finance/fiscal_localizations/egypt.rst:172 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:195 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:251 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:695 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:808 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:190 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:348 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1294 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1691 #: ../../content/applications/finance/fiscal_localizations/peru.rst:823 #: ../../content/applications/finance/fiscal_localizations/peru.rst:996 msgid "Products" @@ -16941,7 +17810,7 @@ msgid "l10n_ar Sales Journal Configuration." msgstr "" #: ../../content/applications/finance/fiscal_localizations/argentina.rst:1159 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:716 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1316 msgid "Invoicing flow" msgstr "" @@ -17003,6 +17872,7 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/ecuador.rst:34 #: ../../content/applications/finance/fiscal_localizations/france.rst:8 #: ../../content/applications/finance/fiscal_localizations/jordan.rst:8 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:19 #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:8 #: ../../content/applications/finance/fiscal_localizations/peru.rst:13 #: ../../content/applications/finance/fiscal_localizations/vietnam.rst:10 @@ -17070,15 +17940,6 @@ msgstr "" msgid "Synchronizes all pay runs from :ref:`Employment Hero ` with Odoo's journal entries." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/australia.rst:42 -#: ../../content/applications/finance/fiscal_localizations/brazil.rst:463 -#: ../../content/applications/finance/fiscal_localizations/ecuador.rst:430 -#: ../../content/applications/finance/fiscal_localizations/france.rst:81 -#: ../../content/applications/finance/fiscal_localizations/germany.rst:6 -#: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:181 -msgid "Accounting" -msgstr "" - #: ../../content/applications/finance/fiscal_localizations/australia.rst:45 #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:50 msgid "Taxes and GST" @@ -17773,216 +18634,229 @@ msgstr "" msgid "Austria" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:8 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:10 msgid ":ref:`Install ` the following modules to get all the features of the Austrian localization." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:17 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:19 msgid ":guilabel:`Austria - Accounting`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:18 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:20 msgid "`l10n_at`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:19 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:21 #: ../../content/applications/finance/fiscal_localizations/romania.rst:19 msgid "Default :ref:`fiscal localization package `." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:20 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:22 msgid ":guilabel:`Austria - Accounting Reports`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:21 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:23 msgid "`l10n_at_reports`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:22 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:24 msgid "Adds localized versions of financial reports" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:23 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:25 msgid ":guilabel:`Austrian SAF-T Export`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:24 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:26 msgid "`l10n_at_saft`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:25 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:27 msgid "Adds the SAF-T export." msgstr "" #: ../../content/applications/finance/fiscal_localizations/austria.rst:28 +msgid ":guilabel:`Austria - Security Regulation for Point of Sale`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:29 +msgid "`l10n_at_pos`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:30 +msgid "Adds RKSV compliance for POS." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:33 msgid ":doc:`Documentation on e-invoicing’s legality and compliance in Austria <../accounting/customer_invoices/electronic_invoicing/austria>`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:34 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:41 msgid "The following localized reports are available:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:36 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:43 msgid "Balance sheet according to `§ 224 UGB `_" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:37 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:44 msgid "Profit and loss according to `§ 231 UGB `_ (Gesamtkostenverfahren)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:40 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:47 msgid ":doc:`Accounting reporting documentation <../accounting/reporting>`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:43 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:52 msgid "SAF-T (Standard Audit File for Tax)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:45 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:54 msgid "The Austrian tax office may request a SAF-T. The Austrian SAF-T Export module allows exporting the report in XML format." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:51 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:62 msgid "This section explains how to configure the database to ensure all the information required by the SAF-T is available. If anything is missing, a warning message listing which information is needed will be displayed during the export." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:56 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:69 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:190 #: ../../content/applications/finance/fiscal_localizations/chile.rst:67 #: ../../content/applications/finance/fiscal_localizations/colombia.rst:78 #: ../../content/applications/finance/fiscal_localizations/italy.rst:41 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:48 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:43 #: ../../content/applications/finance/fiscal_localizations/saudi_arabia.rst:38 msgid "Company information" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:58 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:71 msgid "Open the database :guilabel:`Settings`. Under the :guilabel:`Companies` section, click :guilabel:`Update Info` and ensure the following fields are correctly filled in:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:61 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:74 msgid ":guilabel:`Address`, by providing at least the following information:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:63 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:76 #: ../../content/applications/finance/fiscal_localizations/chile.rst:75 msgid ":guilabel:`Street`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:64 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:77 #: ../../content/applications/finance/fiscal_localizations/chile.rst:76 #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:234 msgid ":guilabel:`City`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:65 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:78 #: ../../content/applications/finance/fiscal_localizations/chile.rst:78 #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:236 msgid ":guilabel:`ZIP`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:66 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:79 #: ../../content/applications/finance/fiscal_localizations/chile.rst:79 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:185 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:180 msgid ":guilabel:`Country`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:68 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:81 #: ../../content/applications/finance/fiscal_localizations/brazil.rst:150 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:64 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:187 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:59 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:182 msgid ":guilabel:`Phone`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:69 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:82 msgid ":guilabel:`Company ID` by providing your company's tax ID" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:70 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:83 msgid ":guilabel:`Tax ID` by providing, if you have one, your :abbr:`UID-Nummer (Umsatzsteueridentifikationsnummer)` (including the country prefix)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:74 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:89 msgid "Contact person" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:76 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:91 msgid "At least one **contact person** must be linked to your company in the :guilabel:`Contacts` app, and:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:78 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:93 msgid "Ensure the contact type is set to :guilabel:`Individual`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:79 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:94 msgid "Select your company in the :guilabel:`Company name` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:80 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:95 msgid "Provide at least one phone number using the :guilabel:`Phone` or :guilabel:`Mobile` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:83 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:100 msgid "Customer and supplier information" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:85 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:102 msgid "Using the :guilabel:`Contacts` app, fill in the :guilabel:`Address` of any partner that appears in your invoices, vendor bills, or payments." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:88 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:105 msgid "For partners that are companies, fill in the VAT number (including the country prefix) in the :guilabel:`Tax ID` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:92 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:111 #: ../../content/applications/finance/fiscal_localizations/chile.rst:87 msgid "Accounting settings" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:94 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:113 msgid "Go to :menuselection:`Accounting --> Configuration --> Settings`. Under the :guilabel:`Austrian localization` section, fill in the following fields:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:97 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:116 msgid ":guilabel:`ÖNACE-Code`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:98 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:117 msgid ":guilabel:`Profit Assessment Method`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:101 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:120 msgid "`ÖNACE information on the Austrian Economic Chambers website `_" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:105 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:126 msgid "Chart of accounts mapping" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:107 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:128 msgid "The Austrian SAF-T specifications define a chart of accounts (COA). All relevant accounts for the SAF-T export must be annotated with a fitting account from this COA." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:110 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:131 msgid "The needed mapping information is supplied by adding tags to the accounts. For example, adding the `1000` tag to an account maps it (virtually) to the SAF-T COA account with the code `1000`. Any number can be used as long as there is an account in the SAF-T COA with that code." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:114 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:135 msgid "The :guilabel:`Austria - Accounting` module adds a tag for each SAF-T COA account. Furthermore, it automatically maps many accounts from the default Austrian COA." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:117 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:138 msgid "You can try exporting the SAF-T report to check if there are unmapped accounts (or mapped to multiple SAF-T accounts). A warning will be displayed if there is any issue with your configuration or the mapping. Clicking :guilabel:`View Problematic Accounts` lets you view them." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:122 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:143 msgid ":doc:`Chart of accounts documentation <../accounting/get_started/chart_of_accounts>`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:125 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:148 msgid "Exporting the SAF-T report" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/austria.rst:127 +#: ../../content/applications/finance/fiscal_localizations/austria.rst:150 msgid "To export the SAF-T report, go to :menuselection:`Accounting --> Reports --> General Ledger`. Click the right side of the :guilabel:`PDF` button and select :guilabel:`SAF-T`." msgstr "" @@ -17990,6 +18864,171 @@ msgstr "" msgid "The SAF-T button to export the file in XML format" msgstr "" +#: ../../content/applications/finance/fiscal_localizations/austria.rst:159 +#: ../../content/applications/finance/fiscal_localizations/germany.rst:234 +msgid "Point of Sale" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:164 +msgid "RKSV (Registrierkassensicherheitsverordnung)" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:166 +msgid "The :abbr:`RKSV (Registrierkassensicherheitsverordnung)` is an Austrian regulation designed to secure cash registers and prevent tax fraud. It requires businesses to use tamper-proof electronic cash register systems, including :doc:`point of sale ` systems." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:171 +msgid "These systems must be equipped with a **Signature Creation Unit (SCU)**, which is responsible for signing each transaction. This ensures that the transaction data cannot be altered. Additionally, the regulation mandates periodic transaction data exports for audit purposes. Odoo provides a compliant solution through `fiskaly `_, a *cloud-based solution*." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:181 +msgid ":ref:`Install ` the **Austria - Security Regulation for Point of Sale** (`l10n_at_pos`) module." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:185 +msgid "If this module is not listed, :ref:`update the app list `." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:192 +msgid "Open the Settings app, navigate to the :guilabel:`Companies` section, and click :icon:`oi-arrow-right` :guilabel:`Update Info` to make sure the :ref:`information ` is up-to-date and correctly filled in." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:196 +msgid "To link your company to Fiskaly and use it in Odoo, open the :guilabel:`Fiskaly` tab and enable :guilabel:`Managed by Odoo` :icon:`fa-toggle-on`, which activates automatic integration management." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:199 +msgid "If a Fiskaly account already exists with its own credentials, disable the toggle and configure the existing :guilabel:`Fiskaly credentials` manually." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:203 +msgid "For testing, ensure that :guilabel:`Test Fiskaly` :icon:`fa-toggle-on` is enabled to run the integration without impacting the production server. Since test mode is enabled by default, disable :guilabel:`Test Fiskaly` :icon:`fa-toggle-off` to switch to production mode." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:0 +msgid "Management toggle" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:211 +msgid "Once the credentials have been authenticated, the Fiskaly management option (by Odoo or custom) and the mode (test or production) can no longer be modified." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:214 +msgid "Click :guilabel:`Generate Credentials` to create a new organization in the Fiskaly system and generate the necessary credentials to run the service. Next, click :guilabel:`Authenticate Keys` to validate those credentials." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:221 +msgid "Link a Fiskaly organization to FinanzOnline" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:223 +msgid "To link the Fiskaly organization with the Austrian Ministry of Finance, FinanzOnline credentials must be provided. To do so, fill in the following information in your company's :guilabel:`Fiskaly` tab:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:227 +msgid ":guilabel:`Participant Identifier`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:228 +msgid ":guilabel:`User Identifier`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:229 +msgid ":guilabel:`User Pin`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:232 +msgid "FinanzOnline credentials can be accessed through an existing account or by `creating a new one `_ if it has not yet been set up." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:236 +msgid "Random credentials can be used in **test mode**, but valid credentials are required in **production mode**." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:239 +msgid "Click :guilabel:`Authenticate FON` to link your Fiskaly organization to the Austrian Ministry of Finance and start regular :doc:`point of sale ` operations." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:245 +msgid "Digitally signatured receipts" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:247 +msgid "To ensure the integrity and authenticity of the receipts, the system automatically signs them using the :abbr:`SCU (Signature Creation Unit)` in a background process. The receipt then displays an encrypted signature as a QR code containing the receipt number and information about the SCU used to sign it." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:253 +msgid "If the :abbr:`SCU (Signature Creation Unit)` is unavailable, receipts may not include a QR code; in such cases:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:256 +msgid "Make sure the receipt includes a :guilabel:`Sicherheitseinrichtung ausgefallen` message, indicating that the system is linked to Fiskaly services, but the SCU is temporarily unavailable." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:259 +msgid "If this message is missing from the receipt, it indicates no connection to Fiskaly services." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:261 +msgid "Orders that remain unsigned due to SCU unavailability can be signed manually. To do so, follow these steps:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:264 +msgid "Go to :menuselection:`Point of Sale --> Orders --> Orders`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:265 +msgid "To identify unsigned orders, click the :icon:`oi-settings-adjust` :guilabel:`(adjust settings)` icon in the :guilabel:`Orders` list view to reveal the :guilabel:`Receipt Signed?` column." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:268 +msgid "Select the unsigned orders, click :icon:`fa-cog` :guilabel:`Actions`, and select :guilabel:`Sign Order`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:274 +msgid "DEP7 export" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:276 +msgid "The exported :abbr:`DEP7 (Digitale Schnittstelle der Finanzverwaltung für Kassensysteme)` file allows authorities to verify transactions and ensure compliance with anti-fraud measures. Businesses must periodically generate it for audit purposes and submit it to the Austrian tax authorities upon request." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:281 +msgid "To generate it, go to :menuselection:`Point of Sale --> Reporting --> DEP7 Reports`, and, in the :guilabel:`DEP7 Reports`, fill in the following mandatory fields:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:284 +msgid ":guilabel:`Start Datetime`: Exports data with dates on or after the start date." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:285 +msgid ":guilabel:`End Datetime`: Exports data with dates on or before the end date." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:286 +msgid ":guilabel:`Point of Sale`: Specify from which point of sale(s) data must be exported." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:288 +msgid "Then, click :guilabel:`Print` to download the PDF file with DEP7 data." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:-1 +msgid "DEP7 Reports" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:296 +msgid "Monthly / Yearly closing receipts" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:298 +msgid "To print monthly/yearly closing receipts, :ref:`start a session ` from the **POS dashboard** and click :guilabel:`Open Register` on the related point of sale. Click the :icon:`oi-view-list` :guilabel:`(list view)` icon in the top-right corner and select :guilabel:`Montly/Yearly Receipts`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/austria.rst:303 +msgid "The last month is selected by default in the :guilabel:`Print closing receipts` window. To change it, select :guilabel:`Monthly` or :guilabel:`Yearly`, then click the :icon:`fa-calendar-o` :guilabel:`(calendar)` icon to select the desired month/year." +msgstr "" + #: ../../content/applications/finance/fiscal_localizations/belgium.rst:3 msgid "Belgium" msgstr "" @@ -18162,40 +19201,39 @@ msgid "Restaurant expenses" msgstr "" #: ../../content/applications/finance/fiscal_localizations/belgium.rst:143 -msgid "In Belgium, 31% of **restaurant** expenses are non-deductible. Create a new **disallowed expenses category** and set both :guilabel:`Related Account(s)` and :guilabel:`Current Rate`." +msgid "In Belgium, 69% of **restaurant** expenses are deductible. Create a new **disallowed expenses category** and set both :guilabel:`Related Account(s)` and :guilabel:`Current Rate`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:-1 -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:-1 -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:-1 -msgid "Disallowed expenses categories" -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:152 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:149 msgid "Car expenses: vehicle split" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:154 -msgid "In Belgium, the deductible percentage varies from car to car and, therefore, should be indicated for each vehicle. To do so, open :menuselection:`Fleet` and select a vehicle. In the :guilabel:`Tax info` tab, go to the :guilabel:`Disallowed Expenses Rate` section and click on :guilabel:`Add a line`. Add a :guilabel:`Start Date` and a :guilabel:`%`. The amounts go in the same account for all car expenses." +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:151 +msgid "In Belgium, the deductible percentage varies from car to car and, therefore, should be indicated for each vehicle. To do so, open :menuselection:`Fleet` and select a vehicle. In the :guilabel:`Tax info` tab, go to the :guilabel:`Deductibility Rates` section and click on :guilabel:`Add a line`. Add a :guilabel:`Start Date` and a :guilabel:`%`. The amounts go in the same account for all car expenses." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:160 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:157 msgid "When you create a bill for car expenses, you can link each expense to a specific car by filling the :guilabel:`Vehicle` column, so the right percentage is applied." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:166 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:-1 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:-1 +msgid "Disallowed expenses categories" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:163 msgid "The :guilabel:`vehicle split` option available in the disallowed expenses report allows you to see the rate and disallowed amount for each car." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:175 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:172 msgid "Fee form 281.50 and form 325" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:180 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:177 msgid "Fee form 281.50" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:182 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:179 msgid "Annually, a **281.50 fee form** must be reported to the fiscal authorities. To do so, the tag `281.50` must be added on the **contact form** of the entities concerned by the **281.50** fee. To add the tag, open :menuselection:`Contacts`, select the person or company you want to create a **281.50 fee form** for, and add the `281.50` tag in the :guilabel:`Tags` field." msgstr "" @@ -18203,19 +19241,19 @@ msgstr "" msgid "add the tag 281.50 on a contact form" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:191 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:188 msgid "Make sure the **street, zip code, country**, and **VAT number** are also informed on the **Contact form**." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:194 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:191 msgid "Then, depending on the nature of the expense, add the corresponding `281.50` tag on the impact accounts. To do so, go to :menuselection:`Accounting --> Configuration --> Accounting: Chart of Accounts`, and click on :guilabel:`Setup` to add the corresponding `281.50` tag on the impacted accounts, i.e., :guilabel:`281.50 - Commissions`, depending on the nature of the expense." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:202 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:199 msgid "Form 325" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:204 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:201 msgid "You can create a **325 form** by going to :menuselection:`Accounting --> Reporting --> Belgium: Create 325 form`. A new page pops up: select the right options and click :guilabel:`Generate 325 form`. To open an already generated **325 form**, go to :menuselection:`Accounting --> Reporting --> Belgium: Open 325 forms`." msgstr "" @@ -18223,15 +19261,15 @@ msgstr "" msgid "Add the tag 281-50 on a contact form" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:215 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:212 msgid "CODA and SODA statements" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:220 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:217 msgid "CODA" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:222 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:219 msgid "**CODA** is an electronic XML format used to import Belgian bank statements. You can download CODA files from your bank and import them directly into Odoo by clicking :guilabel:`Import file` from your :guilabel:`Bank` journal on your dashboard." msgstr "" @@ -18239,19 +19277,19 @@ msgstr "" msgid "Import CODA files" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:230 -msgid ":ref:`Import bank files `" +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:227 +msgid ":ref:`Import bank files `" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:235 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:232 msgid "SODA" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:237 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:234 msgid "**SODA** is an electronic XML format used to import accounting entries related to salaries. SODA files can be imported into the journal you use to record salaries by going to your Accounting **dashboard** and clicking :guilabel:`Upload` in the related journal card form." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:241 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:238 msgid "Once your **SODA** files are imported, the entries are created automatically in your salary journal." msgstr "" @@ -18259,101 +19297,101 @@ msgstr "" msgid "Import SODA files" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:249 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:246 msgid "CodaBox" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:251 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:248 msgid "**CodaBox** is a service that allows Belgian companies and accounting firms to access bank information and statements. Odoo provides a way to import such statements automatically." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:257 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:254 msgid "To configure and use Codabox, first :ref:`install ` the :guilabel:`CodaBox` module." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:262 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:259 msgid "Configure the Connection" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:266 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:263 msgid "For companies" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:269 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:266 msgid "Make sure the :doc:`company settings ` are correctly configured, i.e., the country is set to :guilabel:`Belgium` and the :guilabel:`Tax ID` or :guilabel:`Company ID` field is filled." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:273 -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:302 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:270 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:299 msgid "Go to :menuselection:`Accounting --> Configuration --> Settings`, then go to the :guilabel:`CodaBox & SODA` section." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:275 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:272 msgid "Click on :guilabel:`Manage Connection` to open the connection wizard, which shows the :guilabel:`Company VAT/ID` number that will be used for the connection." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:277 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:274 msgid "If this is your **first connection**, click on :guilabel:`Create connection`. The wizard confirms that the connection has been created on **Odoo's side**. Follow the steps to validate the connection on **CodaBox's side** too." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:281 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:278 msgid "If this is **not your first connection**, the :guilabel:`Password` provided by Odoo during the first connection will be requested to create a new connection." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:285 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:282 msgid "This :guilabel:`Password` is unique to Odoo and must be stored securely on your side." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:288 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:285 msgid "For accounting firms" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:290 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:287 msgid "Accounting firms must manage their clients on separate databases and configure them individually to avoid mixing up their data. The connection must be made by an accounting firm with valid CodaBox Connect credentials. In the following instructions, we will refer to your client's company as *Company* and to your accounting firm as *Accounting Firm*." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:297 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:294 msgid "Make sure the :doc:`company settings ` are correctly configured, i.e., the country is set to :guilabel:`Belgium`, the :guilabel:`Tax ID` or :guilabel:`Company ID` and :guilabel:`Accounting Firm` fields are filled, as well as the :guilabel:`Tax ID` of the :guilabel:`Accounting Firm`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:304 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:301 msgid "Click on :guilabel:`Manage Connection` to open the connection wizard, which shows the :guilabel:`Accounting Firm VAT` number and the :guilabel:`Company VAT/ID` number that will be used for the connection." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:307 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:304 msgid "If this is your **first connection**, click on :guilabel:`Create connection`. The wizard confirms that the connection has been created on **Odoo's side**. Follow the steps to validate the connection on **CodaBox's side**, too." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:311 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:308 msgid "If this is **not your first connection**, the :guilabel:`Accounting Firm Password` provided by Odoo during the first connection will be requested to create a new connection." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:315 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:312 msgid "This :guilabel:`Accounting Firm Password` is unique to Odoo and must be stored securely on your side." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:318 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:315 msgid "The :guilabel:`Status` should have now switched to :guilabel:`Connected`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:321 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:318 msgid "Configure the journals" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:325 -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:357 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:322 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:354 msgid "For CODA files" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:327 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:324 msgid ":doc:`Create a new bank journal <../accounting/bank>`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:328 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:325 msgid "Set the right IBAN in the :guilabel:`Account Number` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:329 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:326 msgid "Select :guilabel:`CodaBox synchronization` as the :guilabel:`Bank Feed`." msgstr "" @@ -18361,24 +19399,24 @@ msgstr "" msgid "Configuration of a CODA journal." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:336 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:333 msgid "When working with bank transactions that use different currencies, it is recommended to create multiple journals with the same bank account but different currencies." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:339 -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:363 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:336 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:360 msgid "For SODA files" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:341 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:338 msgid "Create a new miscellaneous journal." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:342 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:339 msgid "Go to :menuselection:`Accounting --> Configuration --> Settings`, then go to the :guilabel:`CodaBox` section." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:344 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:341 msgid "Select the journal you just created in the SODA journal field." msgstr "" @@ -18386,251 +19424,320 @@ msgstr "" msgid "Configuration of a SODA journal." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:351 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:348 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:492 msgid "Synchronization" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:353 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:350 msgid "Once the connection is established, Odoo can be synchronized with CodaBox." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:359 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:356 msgid "CODA files are automatically imported from CodaBox every 12 hours. You do not have to do anything. However, if you wish, it can also be done manually, by clicking on :guilabel:`Fetch from CodaBox` in the Accounting Dashboard." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:365 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:362 msgid "SODA files are automatically imported from CodaBox once a day as a draft. You do not have to do anything. However, if you wish, it can also be done manually by clicking on :guilabel:`Fetch from CodaBox` in the Accounting Dashboard." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:369 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:366 msgid "By default, if an account in the SODA file is not mapped to an account in Odoo, the Suspense Account (499000) is used, and a note is added to the created journal entry." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:373 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:370 msgid "You can access the mapping between the SODA and Odoo accounts by going to :menuselection:`Accounting --> Configuration --> Settings` and clicking on the :guilabel:`Open SODA Mapping` button in the :guilabel:`CodaBox` section." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:379 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:376 msgid "Potential issues" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:381 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:378 msgid "**CodaBox is not configured. Please check your configuration.**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:383 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:380 msgid "Either the :guilabel:`Company VAT` or the :guilabel:`Accounting Firm VAT` is not set." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:385 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:382 msgid "**No connection exists with these accounting firms and company VAT numbers.** **Please check your configuration.**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:388 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:385 msgid "This can happen when checking the connection status, and the :guilabel:`Accounting Firm VAT` and :guilabel:`Company VAT` combination still needs to be registered. This may happen if you have changed the :guilabel:`Company VAT` after the connection was established. For security reasons, you have to :ref:`recreate a connection ` for this :guilabel:`Company VAT`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:394 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:391 msgid "**It seems that your CodaBox connection is not valid anymore. Please connect again.**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:396 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:393 msgid "This can happen if you revoke Odoo's access to your CodaBox account or still need to complete the configuration process. In this case, you must revoke the connection and create a new one." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:399 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:396 msgid "**The provided password is not valid for this accounting firm.** **You must reuse the password you received from Odoo during your first connection.**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:402 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:399 msgid "The password you provided is different from the one you received from Odoo during your first connection. You must use the password you received from Odoo during your first connection to create a new connection for this accounting firm. If you have lost your password, you must first revoke the Odoo connection on CodaBox's side (i.e., on your myCodaBox portal). Then, you can revoke the connection on Odoo's side and :ref:`create a new one `." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:409 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:406 msgid "**It seems that the company or accounting firm VAT number you provided is not valid.** **Please check your configuration.**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:412 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:409 msgid "Either the :guilabel:`Company VAT` or the :guilabel:`Accounting Firm VAT` is not in a valid Belgian format." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:415 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:412 msgid "**It seems that the accounting firm VAT number you provided does not exist in CodaBox.** **Please check your configuration.**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:418 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:415 msgid "The :guilabel:`Accounting Firm VAT` number you provided is not registered in CodaBox. You may not have a valid CodaBox license linked to this VAT number." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:421 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:418 msgid "**It seems you have already created a connection to CodaBox with this accounting firm.** **To create a new connection, you must first revoke the old one on myCodaBox portal.**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:424 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:421 msgid "You must go to your myCodaBox portal and revoke Odoo's access to your CodaBox account. Then, you can :ref:`create a new connection ` on Odoo's side." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:429 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:426 msgid "To revoke the connection between Odoo and CodaBox, go to :menuselection:`Accounting --> Configuration --> Settings`, scroll down to the :guilabel:`CodaBox` section, click on :guilabel:`Manage Connection`, then click on :guilabel:`Revoke`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:435 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:153 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:263 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:312 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:434 +msgid "Codaclean" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:436 +msgid "**Codaclean** is a service that allows Belgian companies and accounting firms to access bank information and statements. Odoo provides a way to import such statements and their transactions automatically." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:446 +msgid "Make sure to :ref:`install ` the :guilabel:`Codaclean` (`l10n_be_codaclean`) module." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:453 +msgid "Connection with Odoo" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:455 +msgid "To connect Odoo with Codaclean, follow these steps:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:457 +msgid "Open the Settings app, navigate to the :ref:`Companies ` section, and click :icon:`oi-arrow-right` :guilabel:`Manage Companies` to make sure the company's :guilabel:`Country` is set to :guilabel:`Belgium`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:460 +msgid "Go to :menuselection:`Accounting --> Configuration --> Settings` and scroll to the :guilabel:`Codaclean` section." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:462 +msgid "Click :guilabel:`Manage Connection` to open the connection wizard, enter the Codaclean :guilabel:`Username` and :guilabel:`Password` and click :guilabel:`Connect`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:465 +msgid "The :guilabel:`Status` is updated to :guilabel:`Connected`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:468 +msgid "Once the connection is established, the :guilabel:`Manage Connection` wizard provides two options:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:470 +msgid "Update Codaclean credentials: Enter the new :guilabel:`Username` and :guilabel:`Password`, then click :guilabel:`Change Credentials`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:472 +msgid "Remove Codaclean connection: Click :guilabel:`Disconnect`; no :guilabel:`Username` or :guilabel:`Password` is required." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:478 +msgid "Journal creation" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:480 +msgid "A specific bank journal must be created for Codaclean synchronization. To do so, :doc:`create a new bank journal <../accounting/bank>`, make sure to enter the correct IBAN in the :guilabel:`Bank Account Number` field, and select :guilabel:`Codaclean Syncronization` in the :guilabel:`Bank Feeds` field." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:486 +msgid "For bank transactions in different currencies, it is recommended to create a separate journal for each currency, using the same bank account." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:494 +msgid "Once the connection is established, Odoo is synchronized with Codaclean, and new CODA files received via Codaclean are checked every twelve hours." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:498 +msgid "To manually check for new CODA files, go to the Accounting Dashboard and click :guilabel:`Fetch from Codaclean` on the relevant :ref:`journal ` ." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:502 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:148 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:362 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:425 msgid "Electronic invoicing" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:437 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:504 msgid "Odoo supports the **Peppol BIS Billing 3.0 (UBL)** electronic invoicing format. To enable it for a customer, go to :menuselection:`Accounting --> Customers --> Customers`, open their contact form, and under the :guilabel:`Accounting` tab, select the :guilabel:`Peppol BIS Billing 3.0` format." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:442 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:509 #: ../../content/applications/finance/fiscal_localizations/ecuador.rst:302 msgid ":doc:`../accounting/customer_invoices/electronic_invoicing`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:447 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:514 #: ../../content/applications/finance/fiscal_localizations/canada.rst:257 #: ../../content/applications/finance/fiscal_localizations/united_states.rst:400 msgid "Cash discount" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:449 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:516 msgid "In Belgium, if an early payment discount is offered on an invoice, the tax is calculated based on the discounted total amount, whether the customer benefits from the discount or not." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:452 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:519 msgid "To apply the right tax amount and report it correctly in your VAT return, set the tax reduction as :guilabel:`Always (upon invoice)`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:456 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:523 #: ../../content/applications/finance/fiscal_localizations/canada.rst:263 #: ../../content/applications/finance/fiscal_localizations/united_states.rst:406 msgid ":doc:`../accounting/customer_invoices/cash_discounts`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:461 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:528 msgid "Fiscal certification: POS restaurant" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:463 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:530 msgid "In Belgium, the owner of a cooking business such as a restaurant or food truck is required by law to use a government-certified **Cash Register System** for their receipts. This applies if their yearly earnings (excluding VAT, drinks, and take-away food) exceed 25,000 euros." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:467 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:534 msgid "This government-certified system entails the use of a :ref:`certified POS system `, along with a device called a :ref:`Fiscal Data Module ` (or **black box**) and a :ref:`VAT Signing Card `." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:472 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:539 msgid "Do not forget to register as *foodservice industry manager* on the `Federal Public Service Finance registration form `_." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:478 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:545 msgid "Certified POS system" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:480 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:547 msgid "The Odoo POS system is certified for databases hosted on **Odoo Online**, **Odoo.sh**, and **On-Premise**." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:484 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:551 msgid ":doc:`/administration/supported_versions`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:486 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:553 msgid "A `certified POS system `_ must adhere to rigorous government regulations, which means it operates differently from a non-certified POS." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:490 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:557 msgid "On a certified POS, you cannot:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:492 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:559 msgid "Set up and use the **global discounts** feature (the `pos_discount` module is blacklisted and cannot be activated)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:494 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:561 msgid "Set up and use the **loyalty programs** feature (the `pos_loyalty` module is blacklisted and cannot be activated)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:496 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:563 msgid "Reprint receipts (the `pos_reprint` module is blacklisted and cannot be activated)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:497 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:564 msgid "Modify prices in order lines." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:498 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:565 msgid "Modify or delete order lines in POS orders." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:499 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:566 msgid "Sell products without a valid VAT number." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:500 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:567 msgid "Use a POS that is not connected to an IoT box." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:502 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:569 msgid "The :doc:`cash rounding <../../sales/point_of_sale/pricing/cash_rounding>` feature must be activated and set to a :guilabel:`Rounding Precision` of `0,05` and a :guilabel:`Rounding Method` set as :guilabel:`Half-Up`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:505 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:572 msgid "Taxes must be set as included in the price. To set it up, go to :menuselection:`Point of Sale --> Configuration --> Settings`, and from the :guilabel:`Accounting` section, open the :guilabel:`Default Sales Tax` form by clicking the arrow next to the default sales tax field. There, click :guilabel:`Advanced Options` and enable :guilabel:`Included in Price`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:509 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:576 msgid "At the start of a POS session, users must click :guilabel:`Work in` to clock in. Doing so allows the registration of POS orders. If users are not clocked in, they cannot make POS orders. Likewise, they must click :guilabel:`Work Out` to clock out at the end of the session." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:514 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:581 msgid "If you configure a POS to work with a :abbr:`FDM (Fiscal Data Module)`, you cannot use it again without it." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:520 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:587 msgid "Fiscal Data Module (FDM)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:522 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:589 msgid "An FDM, or **black box**, is a government-certified device that works together with the Point of Sale application and saves your POS orders information. Concretely, a **hash** (:dfn:`unique code`) is generated for each POS order and added to its receipt. This allows the government to verify that all revenue is declared." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:528 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:595 msgid "Only the FDM from **Boîtenoire.be** with the `FDM certificate number BMC04 `_ is supported by Odoo. `Contact the manufacturer (GCV BMC) `_ to order one." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:536 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:603 msgid "Before setting up your database to work with an FDM, ensure you have the following hardware:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:538 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:605 msgid "a **Boîtenoire.be** (certificate number BMC04) FDM;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:539 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:606 msgid "an RS-232 serial null modem cable per FDM;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:540 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:607 msgid "an RS-232 serial-to-USB adapter per FDM;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:541 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:608 msgid "an :ref:`IoT Box ` (one IoT box per FDM); and" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:542 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:609 msgid "a receipt printer." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:547 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:614 msgid "Black box module" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:549 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:616 msgid "As a pre-requisite, :ref:`activate ` the `Belgian Registered Cash Register` module (technical name: `pos_blackbox_be`)." msgstr "" @@ -18638,7 +19745,7 @@ msgstr "" msgid "black box modules for belgian fiscal certification" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:555 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:622 msgid "Once the module is activated, add your VAT number to your company information. To set it up, go to :menuselection:`Settings --> Companies --> Update Info`, and fill in the :guilabel:`VAT` field. Then, enter a national registration number for every staff member who operates the POS system. To do so, go to the :guilabel:`Employees` app and open an employee form. There, go to :menuselection:`HR settings tab --> Attendance/Point of Sale`, and fill in the :guilabel:`INSZ or BIS number` field." msgstr "" @@ -18646,35 +19753,35 @@ msgstr "" msgid "ISNZ or BIS number field on employee form" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:565 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:632 msgid "To input your information, click on your avatar, go to :menuselection:`My Profile --> Preference tab`, and enter your INSZ or BIS number in the designated field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:569 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:636 msgid "You must configure the :abbr:`FDM (Fiscal Data Module)` directly in the production database. Utilizing it in a testing environment may result in incorrect data being stored within the FDM." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:575 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:642 msgid "IoT Box" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:577 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:644 msgid "In order to use an :abbr:`FDM (Fiscal Data Module)`, you need a registered IoT Box. To register your IoT box, you must contact us through our `support contact form `_ and provide the following information:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:581 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:648 msgid "your VAT number;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:582 -msgid "your company's name, address, and legal structure; and" +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:649 +msgid "your company's name, address, and legal structure;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:583 -msgid "the Mac address of your IoT Box." +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:650 +msgid "the identifier of your IoT Box." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:585 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:652 msgid "Once your IoT box is certified, :doc:`connect <../../general/iot/connect>` it to your database. To verify that the IoT Box recognizes the FDM, go to the IoT homepage and scroll down the :guilabel:`IOT Device` section, which should display the FDM." msgstr "" @@ -18682,19 +19789,19 @@ msgstr "" msgid "Hardware status page on a registered IoT Box" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:592 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:659 msgid "Then, add the IoT to your POS. To do so, go to :menuselection:`Point of Sale --> Configuration --> Point of Sale`, select your POS, scroll down to the :guilabel:`Connected Device` section, and enable :guilabel:`IoT Box`. Lastly, add the FMD in the :guilabel:`Fiscal Data Module` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:597 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:664 msgid "To be able to use an FDM, you must at least connect one :guilabel:`Receipt Printer`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:602 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:669 msgid "VAT signing card" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/belgium.rst:604 +#: ../../content/applications/finance/fiscal_localizations/belgium.rst:671 msgid "When you open a POS session and make your initial transaction, you are prompted to enter the PIN provided with your :abbr:`VSC (VAT signing card)`. The card is delivered by the :abbr:`FPS (Service Public Federal Finances)` upon `registration `_." msgstr "" @@ -18864,6 +19971,7 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/ecuador.rst:91 #: ../../content/applications/finance/fiscal_localizations/france.rst:48 #: ../../content/applications/finance/fiscal_localizations/jordan.rst:38 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:111 #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:38 msgid "Localization overview" msgstr "" @@ -18930,7 +20038,7 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/brazil.rst:739 #: ../../content/applications/finance/fiscal_localizations/chile.rst:236 #: ../../content/applications/finance/fiscal_localizations/chile.rst:1099 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:53 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:48 #: ../../content/applications/finance/fiscal_localizations/vietnam.rst:42 msgid ":guilabel:`Name`" msgstr "" @@ -18940,13 +20048,13 @@ msgid ":guilabel:`Address`: add :guilabel:`City`, :guilabel:`State`, :guilabel:` msgstr "" #: ../../content/applications/finance/fiscal_localizations/brazil.rst:141 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:57 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:52 #: ../../content/applications/finance/fiscal_localizations/vietnam.rst:46 msgid "In the :guilabel:`Street` field, enter the street name, number, and any additional address information." msgstr "" #: ../../content/applications/finance/fiscal_localizations/brazil.rst:143 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:59 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:54 #: ../../content/applications/finance/fiscal_localizations/vietnam.rst:48 msgid "In the :guilabel:`Street 2` field, enter the neighborhood." msgstr "" @@ -19472,7 +20580,7 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/chile.rst:598 #: ../../content/applications/finance/fiscal_localizations/colombia.rst:395 #: ../../content/applications/finance/fiscal_localizations/kenya.rst:367 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:346 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:497 msgid "Credit notes" msgstr "" @@ -19503,7 +20611,7 @@ msgid "Only the products included in the original invoice can be included in the msgstr "" #: ../../content/applications/finance/fiscal_localizations/brazil.rst:554 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:263 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:258 #: ../../content/applications/finance/fiscal_localizations/vietnam.rst:221 msgid "Invoice cancellation" msgstr "" @@ -19646,6 +20754,7 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/brazil.rst:703 #: ../../content/applications/finance/fiscal_localizations/france.rst:597 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1339 msgid "Point of sale" msgstr "" @@ -19662,9 +20771,9 @@ msgid ":guilabel:`Next number`: the next NFC-e number in the sequence to be issu msgstr "" #: ../../content/applications/finance/fiscal_localizations/brazil.rst:717 -#: ../../content/applications/finance/fiscal_localizations/india.rst:115 -#: ../../content/applications/finance/fiscal_localizations/india.rst:288 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:218 +#: ../../content/applications/finance/fiscal_localizations/india.rst:133 +#: ../../content/applications/finance/fiscal_localizations/india.rst:287 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:213 msgid "Workflow" msgstr "" @@ -20434,6 +21543,7 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/germany.rst:271 #: ../../content/applications/finance/fiscal_localizations/guatemala.rst:101 #: ../../content/applications/finance/fiscal_localizations/guatemala.rst:186 +#: ../../content/applications/finance/fiscal_localizations/india.rst:44 #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:86 #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:230 msgid ":guilabel:`Company Name`" @@ -20445,7 +21555,7 @@ msgid ":guilabel:`Address`:" msgstr "" #: ../../content/applications/finance/fiscal_localizations/chile.rst:77 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:186 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:181 #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:235 msgid ":guilabel:`State`" msgstr "" @@ -20663,7 +21773,7 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/chile.rst:220 #: ../../content/applications/finance/fiscal_localizations/colombia.rst:293 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:560 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:782 #: ../../content/applications/finance/fiscal_localizations/peru.rst:283 msgid "Multicurrency" msgstr "" @@ -21005,8 +22115,8 @@ msgid "Crossed referenced document(s)." msgstr "" #: ../../content/applications/finance/fiscal_localizations/chile.rst:512 -#: ../../content/applications/finance/fiscal_localizations/india.rst:137 -#: ../../content/applications/finance/fiscal_localizations/india.rst:318 +#: ../../content/applications/finance/fiscal_localizations/india.rst:153 +#: ../../content/applications/finance/fiscal_localizations/india.rst:301 msgid "Invoice PDF report" msgstr "" @@ -21377,7 +22487,7 @@ msgid "Odoo automatically updates the *DTE Status* every night using a scheduled msgstr "" #: ../../content/applications/finance/fiscal_localizations/chile.rst:801 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:735 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1606 msgid "Delivery guide" msgstr "" @@ -22147,9 +23257,9 @@ msgstr "" #: ../../content/applications/finance/fiscal_localizations/colombia.rst:191 #: ../../content/applications/finance/fiscal_localizations/france.rst:406 #: ../../content/applications/finance/fiscal_localizations/guatemala.rst:182 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:181 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:177 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:650 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:176 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:188 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1260 #: ../../content/applications/finance/fiscal_localizations/philippines.rst:42 #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:225 msgid "Contacts" @@ -24389,7 +25499,7 @@ msgid ":doc:`Install ` the :guilabel:`France msgstr "" #: ../../content/applications/finance/fiscal_localizations/france.rst:104 -msgid ":ref:`Register ` with Peppol, as invoices are sent from Odoo to Chorus Pro via the :ref:`Peppol ` network." +msgid ":ref:`Register ` with Peppol, as invoices are sent from Odoo to Chorus Pro via the :ref:`Peppol ` network." msgstr "" #: ../../content/applications/finance/fiscal_localizations/france.rst:106 @@ -24409,39 +25519,39 @@ msgid "To submit invoices to Chorus Pro, configure the relevant customers' conta msgstr "" #: ../../content/applications/finance/fiscal_localizations/france.rst:122 -msgid "Ensure the :guilabel:`Country` field is completed, then select :guilabel:`VAT` as the :guilabel:`Identification Number` and enter the corresponding number." +msgid "Verify the :guilabel:`Country` and :guilabel:`VAT` fields are filled out." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/france.rst:124 +#: ../../content/applications/finance/fiscal_localizations/france.rst:123 msgid "In the :guilabel:`Sales & Purchase` tab, ensure the :guilabel:`SIRET` field is completed." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/france.rst:125 +#: ../../content/applications/finance/fiscal_localizations/france.rst:124 msgid "In the :guilabel:`Accounting` tab, fill in the following fields in the :guilabel:`Customer Invoices` section:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/france.rst:128 +#: ../../content/applications/finance/fiscal_localizations/france.rst:127 msgid ":guilabel:`eInvoice format`: Select :guilabel:`BIS Billing 3.0`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/france.rst:129 +#: ../../content/applications/finance/fiscal_localizations/france.rst:128 msgid "Make sure :guilabel:`France SIRET` is selected in the next field, then type `11000201100044`, the reference used by Chorus Pro." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/france.rst:135 +#: ../../content/applications/finance/fiscal_localizations/france.rst:134 msgid "Sending invoices to Chorus Pro" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/france.rst:137 +#: ../../content/applications/finance/fiscal_localizations/france.rst:136 msgid "To send invoices to Chorus Pro, follow these steps:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/france.rst:139 +#: ../../content/applications/finance/fiscal_localizations/france.rst:138 msgid "Go to :menuselection:`Accounting --> Customers --> Invoices` and open or create the invoice." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/france.rst:140 -msgid "Make sure the following fields are filled in the :guilabel:`Other Info` tab:" +#: ../../content/applications/finance/fiscal_localizations/france.rst:139 +msgid "In the :guilabel:`Other Info` tab, make sure the following fields are filled in the :guilabel:`Chorus Pro` section:" msgstr "" #: ../../content/applications/finance/fiscal_localizations/france.rst:142 @@ -24461,7 +25571,7 @@ msgid "Confirm the invoice." msgstr "" #: ../../content/applications/finance/fiscal_localizations/france.rst:147 -msgid "Click :guilabel:`Send` and, in the :guilabel:`Print & Send` window, enable :guilabel:`By Peppol`." +msgid "Click :guilabel:`Send` and, in the :guilabel:`Send` window, enable :guilabel:`By Peppol`." msgstr "" #: ../../content/applications/finance/fiscal_localizations/france.rst:148 @@ -24474,7 +25584,7 @@ msgid "Once the invoice is sent, the Peppol status of the invoice is updated to msgstr "" #: ../../content/applications/finance/fiscal_localizations/france.rst:153 -msgid ":ref:`Peppol `" +msgid ":ref:`Peppol `" msgstr "" #: ../../content/applications/finance/fiscal_localizations/france.rst:158 @@ -25096,8 +26206,8 @@ msgid "**75%**" msgstr "" #: ../../content/applications/finance/fiscal_localizations/france.rst:397 -#: ../../content/applications/finance/fiscal_localizations/india.rst:188 -#: ../../content/applications/finance/fiscal_localizations/india.rst:202 +#: ../../content/applications/finance/fiscal_localizations/india.rst:191 +#: ../../content/applications/finance/fiscal_localizations/india.rst:205 msgid "**Total**" msgstr "" @@ -25574,7 +26684,7 @@ msgid "If you do not have the DATEV Belegtransfer software installed on your com msgstr "" #: ../../content/applications/finance/fiscal_localizations/germany.rst:62 -msgid "The DATEV ATCH ZIP file includes the files (reports) linked to an Odoo invoice or bill. For customer invoices, the file must have been generated by using the :guilabel:`Print & Send` button. For vendor bills, the file must have been received via an email alias or uploaded by using the :guilabel:`Upload` button." +msgid "The DATEV ATCH ZIP file includes the files (reports) linked to an Odoo invoice or bill. For customer invoices, the file must have been generated by using the :guilabel:`Send` button. For vendor bills, the file must have been received via an email alias or uploaded by using the :guilabel:`Upload` button." msgstr "" #: ../../content/applications/finance/fiscal_localizations/germany.rst:67 @@ -25798,10 +26908,6 @@ msgstr "" msgid "In the event of an infringement, you can expect a fine and a court order demanding the implementation of specific measures." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/germany.rst:234 -msgid "Point of Sale" -msgstr "" - #: ../../content/applications/finance/fiscal_localizations/germany.rst:237 msgid "Technical security system" msgstr "" @@ -26074,7 +27180,9 @@ msgid "Odoo automatically installs the base module **Guatemala - Accounting** wh msgstr "" #: ../../content/applications/finance/fiscal_localizations/guatemala.rst:96 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:141 +#: ../../content/applications/finance/fiscal_localizations/india.rst:39 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:136 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:145 #: ../../content/applications/finance/fiscal_localizations/romania.rst:49 #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:81 #: ../../content/applications/finance/fiscal_localizations/vietnam.rst:37 @@ -26082,12 +27190,14 @@ msgid "Company" msgstr "" #: ../../content/applications/finance/fiscal_localizations/guatemala.rst:98 +#: ../../content/applications/finance/fiscal_localizations/india.rst:41 #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:83 msgid "To configure your company information, open the **Settings** app, scroll down to the :guilabel:`Companies` section, click :guilabel:`Update Info`, and configure the following:" msgstr "" #: ../../content/applications/finance/fiscal_localizations/guatemala.rst:102 #: ../../content/applications/finance/fiscal_localizations/guatemala.rst:187 +#: ../../content/applications/finance/fiscal_localizations/india.rst:45 #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:87 msgid ":guilabel:`Address`, including the :guilabel:`Street`, :guilabel:`City`, :guilabel:`State`, :guilabel:`ZIP`, and :guilabel:`Country`" msgstr "" @@ -26538,7 +27648,7 @@ msgid ":guilabel:`Indian E-waybill`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/india.rst:26 -msgid "`l10n_in_edi_ewaybill`" +msgid "`l10n_in_ewaybill`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/india.rst:27 @@ -26558,74 +27668,90 @@ msgid ":ref:`E-waybill creation from the Inventory app `" msgstr "" #: ../../content/applications/finance/fiscal_localizations/india.rst:31 -msgid ":guilabel:`Indian - Check GST Number Status`" +msgid ":guilabel:`Indian - Accounting Reports`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/india.rst:32 -msgid "`l10n_in_gstin_status`" +msgid "`l10n_in_reports`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/india.rst:33 -msgid ":ref:`Indian Check GST Number Status `" +msgid "Adds the :ref:`Indian GST Return filing ` and the :ref:`Indian Tax reports `." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:34 -msgid ":guilabel:`Indian - GSTR India eFiling`" +#: ../../content/applications/finance/fiscal_localizations/india.rst:47 +msgid ":guilabel:`PAN`: essential for determining the type of taxpayer." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:35 -msgid "`l10n_in_reports_gstr`" +#: ../../content/applications/finance/fiscal_localizations/india.rst:48 +msgid ":guilabel:`GSTIN`: necessary for generating e-Invoices, E-waybills and filing GST returns." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:36 -msgid ":ref:`Indian GST Return filing `" +#: ../../content/applications/finance/fiscal_localizations/india.rst:53 +msgid "Indian Configuration" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:37 -msgid ":guilabel:`Indian - Accounting Reports`" +#: ../../content/applications/finance/fiscal_localizations/india.rst:55 +msgid "The **Indian Integration** section provides essential taxation and compliance features to simplify financial operations. To enable these features, navigate to :menuselection:`Accounting --> Configuration --> Settings` and scroll down to the :guilabel:`Indian Integration` section." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:38 -msgid "`l10n_in_reports`" +#: ../../content/applications/finance/fiscal_localizations/india.rst:-1 +msgid "Indian Integration Section" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:39 -msgid ":ref:`Indian tax reports `" +#: ../../content/applications/finance/fiscal_localizations/india.rst:62 +msgid ":guilabel:`TDS/TCS`: Activate this to enable :ref:`TDS/TCS ` functionality along with account-based TDS/TCS section suggestions." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:-1 -msgid "Indian localization modules" +#: ../../content/applications/finance/fiscal_localizations/india.rst:64 +msgid ":guilabel:`Registered Under GST`: Select this if your business is registered under GST to access GST-related features, including e-invoice, e-waybill, GST e-filing, fetch vendor e-invoiced document and check GST number status." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:47 -msgid "Indian Configuration" +#: ../../content/applications/finance/fiscal_localizations/india.rst:67 +msgid ":guilabel:`E-Invoicing`: Connects to the :ref:`e-invoice ` :abbr:`NIC (National Informatics Center)` portal to submit invoices." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/india.rst:69 +msgid ":guilabel:`E-Way bill`: Connects to the :ref:`e-waybill ` :abbr:`NIC (National Informatics Center)` portal to generate e-waybills." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/india.rst:71 +msgid ":guilabel:`GST E-Filing & Matching`: Enable the feature to facilitate :ref:`GST return filing ` and connect with the GST portal to submit GSTR-1 and retrieve GSTR-2B." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/india.rst:73 +msgid ":guilabel:`Check GST Number Status`: Enable to verify :ref:`GSTIN Status `." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:49 -msgid "In :menuselection:`Settings --> Users & Companies --> Companies`, add your :guilabel:`PAN` and :guilabel:`GSTIN`. The PAN is essential for determining the type of taxpayer, while GSTIN is required for generating e-Invoices and E-waybills." +#: ../../content/applications/finance/fiscal_localizations/india.rst:74 +msgid ":guilabel:`Fetch Vendor E-Invoiced Document`: Helps in creating draft vendor bills using e-invoice data submitted by vendors on GST portal." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:54 +#: ../../content/applications/finance/fiscal_localizations/india.rst:78 +msgid "Check the :guilabel:`Production Environment` checkbox to start using Indian services in the production environment. If you want to use the testing environment then keep the checkbox unchecked." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/india.rst:85 msgid "e-Invoice system" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:56 +#: ../../content/applications/finance/fiscal_localizations/india.rst:87 msgid "Odoo is compliant with the **Indian Goods and Services Tax (GST) e-Invoice system** requirements." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:64 +#: ../../content/applications/finance/fiscal_localizations/india.rst:95 msgid "NIC e-Invoice registration" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:66 +#: ../../content/applications/finance/fiscal_localizations/india.rst:97 msgid "You must register on the :abbr:`NIC (National Informatics Centre)` e-Invoice portal to get your **API credentials**. You need these credentials to :ref:`configure your Odoo Accounting app `." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:70 +#: ../../content/applications/finance/fiscal_localizations/india.rst:101 msgid "Log in to the `NIC e-Invoice portal `_ by clicking :guilabel:`Login` and entering your :guilabel:`Username` and :guilabel:`Password`;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:74 +#: ../../content/applications/finance/fiscal_localizations/india.rst:105 msgid "If you are already registered on the NIC portal, you can use the same login credentials." msgstr "" @@ -26633,15 +27759,15 @@ msgstr "" msgid "Register Odoo ERP system on e-invoice web portal" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:79 +#: ../../content/applications/finance/fiscal_localizations/india.rst:110 msgid "From the dashboard, go to :menuselection:`API Registration --> User Credentials --> Create API User`;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:81 +#: ../../content/applications/finance/fiscal_localizations/india.rst:112 msgid "After that, you should receive an :abbr:`OTP (one-time password)` code on your registered mobile number. Enter the OTP code and click :guilabel:`Verify OTP`;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:83 +#: ../../content/applications/finance/fiscal_localizations/india.rst:114 msgid "Select :guilabel:`Through GSP` for the API interface, set :guilabel:`Tera Software Limited` as GSP, and type in a :guilabel:`Username` and :guilabel:`Password` for your API. Once it is done, click :guilabel:`Submit`." msgstr "" @@ -26649,213 +27775,183 @@ msgstr "" msgid "Submit API specific Username and Password" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:93 -#: ../../content/applications/finance/fiscal_localizations/india.rst:276 -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:136 +#: ../../content/applications/finance/fiscal_localizations/india.rst:124 +#: ../../content/applications/finance/fiscal_localizations/india.rst:279 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:131 #: ../../content/applications/finance/payment_providers/paypal.rst:42 msgid "Configuration in Odoo" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:95 -msgid "To enable the e-Invoice service in Odoo, go to :menuselection:`Accounting --> Configuration --> Settings --> Indian Electronic Invoicing`, and enter the :guilabel:`Username` and :guilabel:`Password` previously set for the API." +#: ../../content/applications/finance/fiscal_localizations/india.rst:126 +msgid "To enable the e-Invoice service in Odoo, :ref:`activate ` the :guilabel:`E-Invoicing` feature and enter the :guilabel:`Username` and :guilabel:`Password` previously set for the API." msgstr "" +#: ../../content/applications/finance/fiscal_localizations/india.rst:138 #: ../../content/applications/finance/fiscal_localizations/india.rst:-1 -msgid "Setup e-invoice service" +msgid "Generate e-Invoice" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:107 -msgid "To automatically send e-Invoices to the NIC e-Invoice portal, you must first configure your *sales* journal by going to :menuselection:`Accounting --> Configuration --> Journals`, opening your *sales* journal, and in the :guilabel:`Advanced Settings` tab, under :guilabel:`Electronic Data Interchange`, enable :guilabel:`E-Invoice (IN)` and save." +#: ../../content/applications/finance/fiscal_localizations/india.rst:140 +msgid "Once an invoice is confirmed, click the :guilabel:`Send` button to open the wizard. Select :guilabel:`E-Invoicing`, then click the :guilabel:`Generate` button. Odoo will upload the JSON-signed file of the invoice to the NIC e-Invoice portal." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:120 -#: ../../content/applications/finance/fiscal_localizations/india.rst:304 -#: ../../content/applications/finance/fiscal_localizations/peru.rst:431 -msgid "Invoice validation" +#: ../../content/applications/finance/fiscal_localizations/india.rst:148 +msgid "You can find the JSON-signed file and check the e-Invoicing status in the chatter." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:122 -msgid "Once an invoice is validated, a confirmation message is displayed at the top. Odoo automatically uploads the JSON-signed file of validated invoices to the NIC e-Invoice portal after some time. If you want to process the invoice immediately, click :guilabel:`Process now`." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:-1 -msgid "Indian e-invoicing confirmation message" -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:130 -#: ../../content/applications/finance/fiscal_localizations/india.rst:313 -msgid "You can find the JSON-signed file in the attached files in the chatter." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:131 -msgid "You can check the document's :abbr:`EDI (electronic data interchange)` status under the :guilabel:`EDI Document` tab or the :guilabel:`Electronic invoicing` field of the invoice." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:139 -msgid "Once an invoice is validated and submitted, the invoice PDF report can be printed. The report includes the :abbr:`IRN (Invoice Reference Number)`, :guilabel:`Ack. No` (acknowledgment number) and :guilabel:`Ack. Date` (acknowledgment date), and QR code. These certify that the invoice is a valid fiscal document." +#: ../../content/applications/finance/fiscal_localizations/india.rst:155 +msgid "Once an invoice is validated and submitted, the invoice PDF report can be printed. The report includes the :abbr:`IRN (Invoice Reference Number)`, :guilabel:`Acknowledgement` (number and date) and QR code. These certify that the invoice is a valid fiscal document." msgstr "" #: ../../content/applications/finance/fiscal_localizations/india.rst:-1 msgid "IRN and QR code" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:150 +#: ../../content/applications/finance/fiscal_localizations/india.rst:165 msgid "e-Invoice cancellation" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:152 -msgid "If you want to cancel an e-Invoice, go to the :guilabel:`Other info` tab of the invoice and fill out the :guilabel:`Cancel reason` and :guilabel:`Cancel remarks` fields. Then, click :guilabel:`Request EDI cancellation`. The status of the :guilabel:`Electronic invoicing` field changes to :guilabel:`To Cancel`." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:158 -msgid "Doing so cancels both the :ref:`e-Invoice ` and the :ref:`E-Way bill `." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:-1 -msgid "cancel reason and remarks" +#: ../../content/applications/finance/fiscal_localizations/india.rst:167 +msgid "To cancel an e-Invoice, click the :guilabel:`Request Cancel` button on the related invoice. In the :guilabel:`Cancel E-Invoice` window, fill out the :guilabel:`Cancel Reason` and :guilabel:`Cancel Remarks`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:165 -msgid "If you want to abort the cancellation before processing the invoice, then click :guilabel:`Call Off EDI Cancellation`." +#: ../../content/applications/finance/fiscal_localizations/india.rst:172 +msgid "You can find the e-Invoicing status in the chatter." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:167 -msgid "Once you request to cancel the e-Invoice, Odoo automatically submits the JSON-signed file to the NIC e-Invoice portal. You can click :guilabel:`Process now` if you want to process the invoice immediately." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:174 +#: ../../content/applications/finance/fiscal_localizations/india.rst:177 msgid "Management of negative lines in e-Invoices" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:176 +#: ../../content/applications/finance/fiscal_localizations/india.rst:179 msgid "Negative lines are typically used to represent discounts or adjustments associated with specific products or global discounts. The government portal prohibits the submission of data with negative lines, which means they need to be converted based on the HSN code and GST rate. This is done automatically by Odoo." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:183 +#: ../../content/applications/finance/fiscal_localizations/india.rst:186 msgid "Consider the following example:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:186 -#: ../../content/applications/finance/fiscal_localizations/india.rst:200 +#: ../../content/applications/finance/fiscal_localizations/india.rst:189 +#: ../../content/applications/finance/fiscal_localizations/india.rst:203 msgid "**Product Details**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:188 -#: ../../content/applications/finance/fiscal_localizations/india.rst:202 +#: ../../content/applications/finance/fiscal_localizations/india.rst:191 +#: ../../content/applications/finance/fiscal_localizations/india.rst:205 msgid "**Product Name**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:188 -#: ../../content/applications/finance/fiscal_localizations/india.rst:202 +#: ../../content/applications/finance/fiscal_localizations/india.rst:191 +#: ../../content/applications/finance/fiscal_localizations/india.rst:205 msgid "**HSN Code**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:188 -#: ../../content/applications/finance/fiscal_localizations/india.rst:202 +#: ../../content/applications/finance/fiscal_localizations/india.rst:191 +#: ../../content/applications/finance/fiscal_localizations/india.rst:205 msgid "**Tax Excluded**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:188 -#: ../../content/applications/finance/fiscal_localizations/india.rst:202 +#: ../../content/applications/finance/fiscal_localizations/india.rst:191 +#: ../../content/applications/finance/fiscal_localizations/india.rst:205 msgid "**Quantity**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:188 -#: ../../content/applications/finance/fiscal_localizations/india.rst:202 +#: ../../content/applications/finance/fiscal_localizations/india.rst:191 +#: ../../content/applications/finance/fiscal_localizations/india.rst:205 msgid "**GST Rate**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:190 -#: ../../content/applications/finance/fiscal_localizations/india.rst:204 +#: ../../content/applications/finance/fiscal_localizations/india.rst:193 +#: ../../content/applications/finance/fiscal_localizations/india.rst:207 msgid "Product A" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:190 -#: ../../content/applications/finance/fiscal_localizations/india.rst:194 -#: ../../content/applications/finance/fiscal_localizations/india.rst:204 +#: ../../content/applications/finance/fiscal_localizations/india.rst:193 +#: ../../content/applications/finance/fiscal_localizations/india.rst:197 +#: ../../content/applications/finance/fiscal_localizations/india.rst:207 msgid "123456" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:190 -#: ../../content/applications/finance/fiscal_localizations/india.rst:194 -#: ../../content/applications/finance/fiscal_localizations/india.rst:204 +#: ../../content/applications/finance/fiscal_localizations/india.rst:193 +#: ../../content/applications/finance/fiscal_localizations/india.rst:197 +#: ../../content/applications/finance/fiscal_localizations/india.rst:207 msgid "18%" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:190 +#: ../../content/applications/finance/fiscal_localizations/india.rst:193 msgid "1,180" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:192 -#: ../../content/applications/finance/fiscal_localizations/india.rst:206 +#: ../../content/applications/finance/fiscal_localizations/india.rst:195 +#: ../../content/applications/finance/fiscal_localizations/india.rst:209 msgid "Product B" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:192 -#: ../../content/applications/finance/fiscal_localizations/india.rst:206 +#: ../../content/applications/finance/fiscal_localizations/india.rst:195 +#: ../../content/applications/finance/fiscal_localizations/india.rst:209 msgid "239345" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:192 -#: ../../content/applications/finance/fiscal_localizations/india.rst:206 +#: ../../content/applications/finance/fiscal_localizations/india.rst:195 +#: ../../content/applications/finance/fiscal_localizations/india.rst:209 msgid "1,500" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:192 -#: ../../content/applications/finance/fiscal_localizations/india.rst:206 +#: ../../content/applications/finance/fiscal_localizations/india.rst:195 +#: ../../content/applications/finance/fiscal_localizations/india.rst:209 msgid "5%" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:192 -#: ../../content/applications/finance/fiscal_localizations/india.rst:206 +#: ../../content/applications/finance/fiscal_localizations/india.rst:195 +#: ../../content/applications/finance/fiscal_localizations/india.rst:209 msgid "3,150" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:194 +#: ../../content/applications/finance/fiscal_localizations/india.rst:197 msgid "Discount on Product A" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:194 +#: ../../content/applications/finance/fiscal_localizations/india.rst:197 msgid "-100" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:194 +#: ../../content/applications/finance/fiscal_localizations/india.rst:197 msgid "-118" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:197 +#: ../../content/applications/finance/fiscal_localizations/india.rst:200 msgid "Here's the transformed representation:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:202 +#: ../../content/applications/finance/fiscal_localizations/india.rst:205 msgid "**Discount**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:204 +#: ../../content/applications/finance/fiscal_localizations/india.rst:207 msgid "1,062" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:209 +#: ../../content/applications/finance/fiscal_localizations/india.rst:212 msgid "In this conversion, negative lines have been transformed into positive discounts, maintaining accurate calculations based on the HSN Code and GST rate. This ensures a more straightforward and standardized representation in the E-invoice records." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:216 +#: ../../content/applications/finance/fiscal_localizations/india.rst:219 msgid "GST e-Invoice verification" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:218 +#: ../../content/applications/finance/fiscal_localizations/india.rst:221 msgid "After submitting an e-Invoice, you can verify if the invoice is signed from the GST e-Invoice system website itself." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:221 +#: ../../content/applications/finance/fiscal_localizations/india.rst:224 msgid "Download the JSON file from the attached files. It can be found in the chatter of the related invoice;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:223 +#: ../../content/applications/finance/fiscal_localizations/india.rst:226 msgid "Open the `NIC e-Invoice portal `_ and go to :menuselection:`Search --> Verify Signed Invoice`;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:225 +#: ../../content/applications/finance/fiscal_localizations/india.rst:228 msgid "Select the JSON file and submit it;" msgstr "" @@ -26863,7 +27959,7 @@ msgstr "" msgid "select the JSON file for verify invoice" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:230 +#: ../../content/applications/finance/fiscal_localizations/india.rst:233 msgid "If the file is signed, a confirmation message is displayed." msgstr "" @@ -26871,35 +27967,35 @@ msgstr "" msgid "verified e-invoice" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:238 +#: ../../content/applications/finance/fiscal_localizations/india.rst:241 msgid "E-Way bill" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:245 +#: ../../content/applications/finance/fiscal_localizations/india.rst:248 msgid "Odoo is compliant with the **Indian Goods and Services Tax (GST) E-waybill system** requirements." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:250 +#: ../../content/applications/finance/fiscal_localizations/india.rst:253 msgid "API registration on NIC E-Way bill" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:252 +#: ../../content/applications/finance/fiscal_localizations/india.rst:255 msgid "You must register on the :abbr:`NIC (National Informatics Centre)` E-Way bill portal to create your **API credentials**. You need these credentials to :ref:`configure your Odoo Accounting app `." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:256 +#: ../../content/applications/finance/fiscal_localizations/india.rst:259 msgid "Log in to the `NIC E-Way bill portal `_ by clicking :guilabel:`Login` and entering your :guilabel:`Username` and :guilabel:`Password`;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:258 +#: ../../content/applications/finance/fiscal_localizations/india.rst:261 msgid "From your dashboard, go to :menuselection:`Registration --> For GSP`;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:259 +#: ../../content/applications/finance/fiscal_localizations/india.rst:262 msgid "Click :guilabel:`Send OTP`. Once you have received the code on your registered mobile number, enter it and click :guilabel:`Verify OTP`;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:261 +#: ../../content/applications/finance/fiscal_localizations/india.rst:264 msgid "Check if :guilabel:`Tera Software Limited` is already on the registered GSP/ERP list. If so, use the username and password used to log in to the NIC portal. Otherwise, follow the next steps;" msgstr "" @@ -26907,7 +28003,7 @@ msgstr "" msgid "E-Way bill list of registered GSP/ERP" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:267 +#: ../../content/applications/finance/fiscal_localizations/india.rst:270 msgid "Select :guilabel:`Add/New`, select :guilabel:`Tera Software Limited` as your GSP Name, create a :guilabel:`Username` and a :guilabel:`Password` for your API, and click :guilabel:`Add`." msgstr "" @@ -26915,39 +28011,23 @@ msgstr "" msgid "Submit GSP API registration details" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:278 -msgid "To set up the E-Way bill service, go to :menuselection:`Accounting --> Configuration --> Settings --> Indian Electronic WayBill --> Setup E-Way bill`, and enter your :guilabel:`Username` and :guilabel:`Password`." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:-1 -msgid "E-way bill setup odoo" -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:293 -msgid "Send an E-Way bill" +#: ../../content/applications/finance/fiscal_localizations/india.rst:281 +msgid "To enable the E-Way bill service in Odoo, :ref:`activate ` the :guilabel:`E-Way bill` feature and enter the :guilabel:`Username` and :guilabel:`Password`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:295 -msgid "To send an E-Way bill, confirm the customer invoice/vendor bill and click :guilabel:`Send E-Way bill`." +#: ../../content/applications/finance/fiscal_localizations/india.rst:292 +msgid "Generate E-Way bill" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:-1 -msgid "Send E-waybill button on invoices" +#: ../../content/applications/finance/fiscal_localizations/india.rst:294 +msgid "To generate an E-Way bill, confirm the customer invoice/vendor bill and click :guilabel:`Create e-Waybill`. Enter the necessary details and click :guilabel:`Generate e-Waybill` to proceed." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:306 -msgid "Once an invoice/bill has been issued and sent via :guilabel:`Send E-Way bill`, a confirmation message is displayed." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:-1 -msgid "Indian e-Way bill confirmation message" -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:314 -msgid "Odoo automatically uploads the JSON-signed file to the government portal after some time. Click :guilabel:`Process now` if you want to process the invoice/bill immediately." +#: ../../content/applications/finance/fiscal_localizations/india.rst:298 +msgid "You can find the JSON-signed file in the attached files in the chatter." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:320 +#: ../../content/applications/finance/fiscal_localizations/india.rst:303 msgid "You can print the invoice PDF report once you have submitted the E-Way bill. The report includes the **E-Way bill number** and the **E-Way bill validity date**." msgstr "" @@ -26955,87 +28035,79 @@ msgstr "" msgid "E-way bill acknowledgment number and date" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:329 +#: ../../content/applications/finance/fiscal_localizations/india.rst:312 msgid "E-Way bill cancellation" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:331 -msgid "If you want to cancel an E-Way bill, go to the :guilabel:`E-Way bill` tab of the related invoice/bill and fill out the :guilabel:`Cancel reason` and :guilabel:`Cancel remarks` fields. Then, click :guilabel:`Request EDI Cancellation`." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:336 -msgid "Doing so cancels both the :ref:`e-Invoice ` (if applicable) and the :ref:`E-Way bill `." +#: ../../content/applications/finance/fiscal_localizations/india.rst:314 +msgid "To cancel an E-Way bill, click :guilabel:`e-Waybill` on the related invoice/bill, then :guilabel:`Cancel e-Waybill`. In the :guilabel:`Cancel Ewaybill` window, fill out the :guilabel:`Cancel Reason` and :guilabel:`Cancel Remarks`." msgstr "" #: ../../content/applications/finance/fiscal_localizations/india.rst:-1 msgid "Cancel reason and remarks" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:343 -msgid "If you want to abort the cancellation before processing the invoice, click :guilabel:`Call Off EDI Cancellation`." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:345 -msgid "Once you request to cancel the E-Way bill, Odoo automatically submits the JSON-signed file to the government portal. You can click :guilabel:`Process Now` if you want to process the invoice immediately." +#: ../../content/applications/finance/fiscal_localizations/india.rst:322 +msgid "Once you request to cancel the E-Way bill, Odoo automatically submits the JSON-signed file to the government portal. You can check the JSON file in the chatter." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:352 +#: ../../content/applications/finance/fiscal_localizations/india.rst:328 msgid "E-waybill creation from receipts and delivery orders" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:355 +#: ../../content/applications/finance/fiscal_localizations/india.rst:331 msgid "Make sure the **E-Way bill Stock** module is :ref:`installed ` and the :ref:`E-Way bill setup ` is complete." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:358 +#: ../../content/applications/finance/fiscal_localizations/india.rst:334 msgid "To create E-Way bills from :doc:`receipts and deliveries ` in the Inventory app, follow these steps:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:362 +#: ../../content/applications/finance/fiscal_localizations/india.rst:338 msgid "Go to :menuselection:`Inventory --> Operations --> Deliveries` or :menuselection:`Inventory --> Operations --> Receipts` and select an existing delivery order/receipt or create a new one." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:365 +#: ../../content/applications/finance/fiscal_localizations/india.rst:341 msgid "Click :guilabel:`Create E-waybill/Challan`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:368 +#: ../../content/applications/finance/fiscal_localizations/india.rst:344 msgid "To create an E-way bill:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:370 +#: ../../content/applications/finance/fiscal_localizations/india.rst:346 msgid "A delivery order must be in the :guilabel:`Done` state (i.e., validated)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:371 +#: ../../content/applications/finance/fiscal_localizations/india.rst:347 msgid "A receipt must have the :guilabel:`Ready` or :guilabel:`Done` state." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:373 +#: ../../content/applications/finance/fiscal_localizations/india.rst:349 msgid "Click :guilabel:`Generate e-Waybill` to validate the E-Way bill and send it to the NIC E-Way bill portal." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:377 +#: ../../content/applications/finance/fiscal_localizations/india.rst:353 msgid "To use the E-Way bill as a challan for goods deliveries without sending it to the NIC E-Waybill portal, click :guilabel:`Use as Challan`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:380 +#: ../../content/applications/finance/fiscal_localizations/india.rst:356 msgid "To print the E-waybill or the challan, click the :icon:`fa-cog` :guilabel:`(gear)` icon and select :icon:`fa-print` :guilabel:`Ewaybill / Delivery Challan`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:386 +#: ../../content/applications/finance/fiscal_localizations/india.rst:362 msgid "Indian Check GSTIN Status" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:388 -msgid "The :guilabel:`Indian - Check GST Number Status` module allows you to verify the status of a :abbr:`GSTIN (Goods and Services Tax Identification Number)` directly from Odoo." +#: ../../content/applications/finance/fiscal_localizations/india.rst:364 +msgid "The :guilabel:`Indian - Check GST Number Status` allows you to verify the status of a :abbr:`GSTIN (Goods and Services Tax Identification Number)` directly from Odoo." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:391 +#: ../../content/applications/finance/fiscal_localizations/india.rst:367 msgid "To verify the status of a contact's GST number, access the customer's/vendor's form and click :guilabel:`Check GSTIN Status` next to the :guilabel:`GSTIN` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:394 +#: ../../content/applications/finance/fiscal_localizations/india.rst:370 msgid "To verify the status of a GST number entered on an invoice/bill, access the invoice/bill and click the :icon:`fa-refresh` (:guilabel:`refresh`) button next to the :guilabel:`GST Status` field." msgstr "" @@ -27043,23 +28115,23 @@ msgstr "" msgid "Check GSTIN status of an invoice" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:400 +#: ../../content/applications/finance/fiscal_localizations/india.rst:376 msgid "A notification is displayed to confirm the status update and the GSTIN status and verification date are logged in the contact's chatter." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:406 +#: ../../content/applications/finance/fiscal_localizations/india.rst:382 msgid "Indian GST Return filing" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:411 +#: ../../content/applications/finance/fiscal_localizations/india.rst:387 msgid "Enable API access" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:413 +#: ../../content/applications/finance/fiscal_localizations/india.rst:389 msgid "To file GST Returns in Odoo, you must first enable API access on the GST portal." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:415 +#: ../../content/applications/finance/fiscal_localizations/india.rst:391 msgid "Log into the `GST portal `_ by entering your :guilabel:`Username` and :guilabel:`Password`, and go to :guilabel:`My Profile` on your **profile menu**;" msgstr "" @@ -27067,7 +28139,7 @@ msgstr "" msgid "Click On the My Profile from profile" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:422 +#: ../../content/applications/finance/fiscal_localizations/india.rst:398 msgid "Select :guilabel:`Manage API Access`, and click :guilabel:`Yes` to enable API access;" msgstr "" @@ -27075,47 +28147,43 @@ msgstr "" msgid "Click Yes" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:428 +#: ../../content/applications/finance/fiscal_localizations/india.rst:404 msgid "It is recommended to set the :guilabel:`Duration` to :guilabel:`30 days` to avoid the need for frequent token reauthentication." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:431 +#: ../../content/applications/finance/fiscal_localizations/india.rst:407 msgid "Doing so enables a :guilabel:`Duration` drop-down menu. Select the :guilabel:`Duration` of your preference, and click :guilabel:`Confirm`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:437 +#: ../../content/applications/finance/fiscal_localizations/india.rst:413 msgid "Indian GST Service In Odoo" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:439 -msgid "Once you have enabled the :ref:`API access ` on the GST portal, you can set up the :guilabel:`Indian GST Service` in Odoo." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/india.rst:442 -msgid "Go to :menuselection:`Accounting --> Configuration --> Settings --> Indian GST Service` and enter the :guilabel:`GST Username`. Click :guilabel:`Send OTP`, enter the code, and finally, :guilabel:`Validate`." +#: ../../content/applications/finance/fiscal_localizations/india.rst:415 +msgid "Once you have enabled the :ref:`API access ` on the GST portal, :ref:`activate ` the :guilabel:`GST E-Filing & Matching Feature` to start using GST Service. Then, in the :guilabel:`Registered Under GST` section, fill in the required :guilabel:`GST Username`." msgstr "" #: ../../content/applications/finance/fiscal_localizations/india.rst:0 msgid "Please enter your GST portal Username as Username" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:452 +#: ../../content/applications/finance/fiscal_localizations/india.rst:426 msgid "File-in GST Return" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:454 -msgid "When the :guilabel:`Indian GST Service` is configured, you can file your GST return. Go to :menuselection:`Accounting --> Reporting --> India --> GST Return periods` and create a new **GST Return Period** if it does not exist. GST Return file-in is done in **three steps** in Odoo:" +#: ../../content/applications/finance/fiscal_localizations/india.rst:428 +msgid "When the :guilabel:`GST E-Filing & Matching Feature` is enabled, you can file your GST return. Go to :menuselection:`Accounting --> Reporting --> India --> GST Return periods` and create a new **GST Return Period** if it does not exist. GST Return file-in is done in **three steps** in Odoo:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:459 +#: ../../content/applications/finance/fiscal_localizations/india.rst:433 msgid "**Tax Return Periodicity** can be :doc:`configured <../accounting/reporting/tax_returns>` according to the user's needs." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:466 +#: ../../content/applications/finance/fiscal_localizations/india.rst:440 msgid "Send GSTR-1" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:468 +#: ../../content/applications/finance/fiscal_localizations/india.rst:442 msgid "Click :guilabel:`GSTR-1 Report` to verify the :ref:`GSTR-1 ` report before uploading it to the **GST portal**." msgstr "" @@ -27123,27 +28191,27 @@ msgstr "" msgid "GSTR-1 verify" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:475 +#: ../../content/applications/finance/fiscal_localizations/india.rst:449 msgid "The system performs basic validations to ensure compliance with the GST portal's requirements. Possible issues include:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:478 +#: ../../content/applications/finance/fiscal_localizations/india.rst:452 msgid "**Incorrect Tax Application:** The tax type does not match the :guilabel:`Fiscal Position` (:guilabel:`CGST/SGST` applied instead of :guilabel:`IGST` for interstate transactions, or :guilabel:`IGST` applied instead of :guilabel:`CGST/SGST` for intrastate transactions)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:481 +#: ../../content/applications/finance/fiscal_localizations/india.rst:455 msgid "**Missing HSN Code:** No HSN Code is defined for the product." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:482 +#: ../../content/applications/finance/fiscal_localizations/india.rst:456 msgid "**Invalid HSN Code for Services:** The HSN Code for a service does not start with \"99\" or is incorrect." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:484 +#: ../../content/applications/finance/fiscal_localizations/india.rst:458 msgid "**Non-compliant UQC:** The Unit Quantity Code (UQC) does not meet Indian GST standards." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:486 +#: ../../content/applications/finance/fiscal_localizations/india.rst:460 msgid "If any validation fails, the system alerts users with a warning, highlighting the discrepancies and providing a direct link to the affected lines." msgstr "" @@ -27151,7 +28219,7 @@ msgstr "" msgid "GSTR-1 validation warning" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:492 +#: ../../content/applications/finance/fiscal_localizations/india.rst:466 msgid "Click :guilabel:`Generate` to view the report in **Spreadsheet view**." msgstr "" @@ -27163,7 +28231,7 @@ msgstr "" msgid "GSTR-1 Spreadsheet View" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:500 +#: ../../content/applications/finance/fiscal_localizations/india.rst:474 msgid "If the **GSTR-1** report is correct, then click :guilabel:`Push to GSTN` to send it to the **GST portal**. The status of the :guilabel:`GSTR-1` report changes to :guilabel:`Sending`." msgstr "" @@ -27171,7 +28239,7 @@ msgstr "" msgid "GSTR-1 in the Sending Status" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:506 +#: ../../content/applications/finance/fiscal_localizations/india.rst:480 msgid "After a few seconds, the status of the **GSTR-1** report changes to :guilabel:`Waiting for Status`. It means that the **GSTR-1** report has been sent to the :guilabel:`GST Portal` and is being verified on the :guilabel:`GST Portal`;" msgstr "" @@ -27179,11 +28247,11 @@ msgstr "" msgid "GSTR-1 in the Waiting for Status" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:513 +#: ../../content/applications/finance/fiscal_localizations/india.rst:487 msgid "Once more, after a few seconds, the status either changes to :guilabel:`Sent` or :guilabel:`Error in Invoice`. The status :guilabel:`Error in Invoice` indicates that some of the invoices are not correctly filled out to be validated by the **GST portal**;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:517 +#: ../../content/applications/finance/fiscal_localizations/india.rst:491 msgid "If the state of the **GSTR-1** is :guilabel:`Sent`, it means your **GSTR-1** report is ready to be filed on the **GST portal**." msgstr "" @@ -27191,7 +28259,7 @@ msgstr "" msgid "GSTR-1 Sent" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:523 +#: ../../content/applications/finance/fiscal_localizations/india.rst:497 msgid "If the state of the **GSTR-1** is :guilabel:`Error in Invoice`, invoices can be checked for errors in the chatter. Once issues have been resolved, the user can click :guilabel:`Push to GSTN` to submit the file again on the **GST portal**." msgstr "" @@ -27199,7 +28267,7 @@ msgstr "" msgid "GSTR-1 Error in Invoice" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:530 +#: ../../content/applications/finance/fiscal_localizations/india.rst:504 msgid "Click :guilabel:`Mark as Filed` after filing the **GSTR-1** report on the **GST portal**. The status of the report changes to :guilabel:`Filed` in **Odoo**." msgstr "" @@ -27207,15 +28275,15 @@ msgstr "" msgid "GSTR-1 in the Filed Status" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:539 +#: ../../content/applications/finance/fiscal_localizations/india.rst:513 msgid "Receive GSTR-2B" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:541 +#: ../../content/applications/finance/fiscal_localizations/india.rst:515 msgid "Users can retrieve the **GSTR-2B Report** from the **GST portal**. This automatically reconciles the **GSTR-2B** report with your Odoo bills;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:544 +#: ../../content/applications/finance/fiscal_localizations/india.rst:518 msgid "Click :guilabel:`Fetch GSTR-2B Summary` to retrieve the **GSTR-2B** summary. After a few seconds, the status of the report changes to :guilabel:`Waiting for Reception`. This means Odoo is trying to receive the **GSTR-2B** report from the **GST portal**;" msgstr "" @@ -27224,15 +28292,15 @@ msgstr "" msgid "GSTR-2B in Waiting for Reception" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:551 +#: ../../content/applications/finance/fiscal_localizations/india.rst:525 msgid "Once more, after a few seconds, the status of the **GSTR-2B** changes to the :guilabel:`Being Processed`. It means Odoo is reconciling the **GSTR-2B** report with your Odoo bills;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:557 +#: ../../content/applications/finance/fiscal_localizations/india.rst:531 msgid "Once it is done, the status of the **GSTR-2B** report changes to either :guilabel:`Matched` or :guilabel:`Partially Matched`;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:560 +#: ../../content/applications/finance/fiscal_localizations/india.rst:534 msgid "If the status is :guilabel:`Matched`:" msgstr "" @@ -27240,7 +28308,7 @@ msgstr "" msgid "GSTR-2B Matched" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:565 +#: ../../content/applications/finance/fiscal_localizations/india.rst:539 msgid "If the status is :guilabel:`Partially Matched`, you can review and modify the bills by clicking :guilabel:`View Reconciled Bills`. This will display categorized discrepancies, such as bills missing in Odoo or GSTR-2. After making the necessary corrections, click :guilabel:`re-match` to update the reconciliation and ensure accuracy before finalizing the report." msgstr "" @@ -27248,20 +28316,20 @@ msgstr "" msgid "GSTR-2B Partially Matched" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:577 -#: ../../content/applications/finance/fiscal_localizations/india.rst:622 +#: ../../content/applications/finance/fiscal_localizations/india.rst:551 +#: ../../content/applications/finance/fiscal_localizations/india.rst:596 msgid "GSTR-3 report" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:579 +#: ../../content/applications/finance/fiscal_localizations/india.rst:553 msgid "The :ref:`GSTR-3 ` report is a monthly summary of **sales** and **purchases**. This return is auto-generated by extracting information from **GSTR-1** and **GSTR-2**." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:582 +#: ../../content/applications/finance/fiscal_localizations/india.rst:556 msgid "Users can compare the **GSTR-3** report with the **GSTR-3** report available on the **GST portal** to verify if they match by clicking :guilabel:`GSTR-3 Report`;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:585 +#: ../../content/applications/finance/fiscal_localizations/india.rst:559 msgid "Once the **GSTR-3** report has been verified by the user and the tax amount on the **GST portal** has been paid. Once paid, the report can be **closed** by clicking :guilabel:`Closing Entry`;" msgstr "" @@ -27269,7 +28337,7 @@ msgstr "" msgid "GSTR-3" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:591 +#: ../../content/applications/finance/fiscal_localizations/india.rst:565 msgid "In :guilabel:`Closing Entry`, add the tax amount paid on the **GST portal** using challan, and click :guilabel:`POST` to post the :guilabel:`Closing Entry`;" msgstr "" @@ -27277,7 +28345,7 @@ msgstr "" msgid "GSTR-3 Post Entry" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:597 +#: ../../content/applications/finance/fiscal_localizations/india.rst:571 msgid "Once posted, the **GSTR-3** report status changes to :guilabel:`Filed`." msgstr "" @@ -27285,15 +28353,15 @@ msgstr "" msgid "GSTR-3 Filed" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:605 +#: ../../content/applications/finance/fiscal_localizations/india.rst:579 msgid "Tax reports" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:610 +#: ../../content/applications/finance/fiscal_localizations/india.rst:584 msgid "GSTR-1 report" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:612 +#: ../../content/applications/finance/fiscal_localizations/india.rst:586 msgid "The :guilabel:`GSTR-1` report is divided into sections. It displays the :guilabel:`Base` amount, :abbr:`CGST (Central Goods and Services Tax)`, :abbr:`SGST (State Goods and Service Tax)`, :abbr:`IGST (Integrated Goods and Services Tax)`, and :guilabel:`CESS` for each section." msgstr "" @@ -27301,23 +28369,23 @@ msgstr "" msgid "GSTR-1 Report" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:624 +#: ../../content/applications/finance/fiscal_localizations/india.rst:598 msgid "The :guilabel:`GSTR-3` report contains different sections:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:626 +#: ../../content/applications/finance/fiscal_localizations/india.rst:600 msgid "Details of inward and outward supply subject to a **reverse charge**;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:627 +#: ../../content/applications/finance/fiscal_localizations/india.rst:601 msgid "Eligible :abbr:`ITC (Income Tax Credit)`;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:628 +#: ../../content/applications/finance/fiscal_localizations/india.rst:602 msgid "Values of **exempt**, **Nil-rated**, and **non-GST** inward supply;" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:629 +#: ../../content/applications/finance/fiscal_localizations/india.rst:603 msgid "Details of inter-state supplies made to **unregistered** persons." msgstr "" @@ -27325,11 +28393,11 @@ msgstr "" msgid "GSTR-3 Report" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:635 +#: ../../content/applications/finance/fiscal_localizations/india.rst:609 msgid "Profit and Loss (IN) report" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:637 +#: ../../content/applications/finance/fiscal_localizations/india.rst:611 msgid "This is a :guilabel:`Profit and Loss` report that displays the balances for **Opening Stock** and **Closing Stock**. It helps users using Continental accounting to accurately determine the cost of goods (i.e :guilabel:`Opening Stock` + purchases during the period - :guilabel:`Closing Stock`)." msgstr "" @@ -27337,35 +28405,35 @@ msgstr "" msgid "Profit and Loss report" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:647 +#: ../../content/applications/finance/fiscal_localizations/india.rst:621 msgid "TDS/TCS threshold alert" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:649 +#: ../../content/applications/finance/fiscal_localizations/india.rst:623 msgid ":abbr:`TDS (tax deducted at source)` and :abbr:`TCS (tax collected at source)` are tax provisions under Indian law, triggered when transaction amounts exceed specified thresholds. This alert notifies users when the value of invoices or bills surpasses these limits, prompting the application of the appropriate TDS/TCS." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:654 +#: ../../content/applications/finance/fiscal_localizations/india.rst:628 msgid "To configure Odoo to advise you on when to apply TDS/TCS, set the :guilabel:`TDS/TCS section` field on the corresponding account in the chart of accounts. Odoo will display a banner suggesting the TDS/TCS section under which tax might be applicable when recording an invoice or bill." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:661 -msgid "Navigate to :menuselection:`Accounting --> Configuration --> Settings`." +#: ../../content/applications/finance/fiscal_localizations/india.rst:635 +msgid "Navigate to :menuselection:`Accounting --> Configuration --> Settings`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:662 -msgid "In the :guilabel:`Indian Integration` section, enable the :guilabel:`TDS and TCS` feature." +#: ../../content/applications/finance/fiscal_localizations/india.rst:636 +msgid "In the :guilabel:`Indian Integration` section, enable the :guilabel:`TDS` or :guilabel:`TCS` feature as required." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:663 +#: ../../content/applications/finance/fiscal_localizations/india.rst:638 msgid "Navigate to :menuselection:`Accounting --> Configuration --> Chart of Accounts`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:664 +#: ../../content/applications/finance/fiscal_localizations/india.rst:639 msgid "Click :guilabel:`View` on the desired account, and set the :guilabel:`TDS/TCS Section` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:667 +#: ../../content/applications/finance/fiscal_localizations/india.rst:642 msgid "The TDS/TCS sections are pre-configured with threshold limits. If you need to modify these limits, go to :menuselection:`Accounting --> Configuration --> Taxes`. In the :guilabel:`Advanced Options` tab, click on the :icon:`fa-arrow-right` :guilabel:`(internal link)` icon of the :guilabel:`Section` field." msgstr "" @@ -27373,11 +28441,11 @@ msgstr "" msgid "TDS/TCS section modify" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:676 +#: ../../content/applications/finance/fiscal_localizations/india.rst:651 msgid "Applying TCS/TDS on invoices and bills" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:678 +#: ../../content/applications/finance/fiscal_localizations/india.rst:653 msgid "Based on the account used on the customer invoice or vendor bill, Odoo checks the TCS/TDS threshold limit. If the limit specified in the :guilabel:`TCS/TDS Section` of the account is exceeded, Odoo displays an alert that suggests applying the appropriate TCS/TDS. The alert will disappear once the TCS/TDS is applied." msgstr "" @@ -27385,7 +28453,7 @@ msgstr "" msgid "TCS advice" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:686 +#: ../../content/applications/finance/fiscal_localizations/india.rst:661 msgid "**TCS** is directly applicable in the tax on the invoice lines. To apply **TDS**, click the :guilabel:`TDS Entry` smart button on the vendor bill/payment. The popup window allows specifying the TDS details. Confirm the entry to apply the TDS." msgstr "" @@ -27393,96 +28461,96 @@ msgstr "" msgid "TDS application" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:693 +#: ../../content/applications/finance/fiscal_localizations/india.rst:668 msgid "In Odoo, the aggregate total is calculated for partners sharing the same PAN number, across all company branches." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:702 +#: ../../content/applications/finance/fiscal_localizations/india.rst:676 msgid "**Branch**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:703 +#: ../../content/applications/finance/fiscal_localizations/india.rst:677 msgid "**Customer**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:704 +#: ../../content/applications/finance/fiscal_localizations/india.rst:678 msgid "**Invoice**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:705 +#: ../../content/applications/finance/fiscal_localizations/india.rst:679 msgid "**Transaction Amount (₹)**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:706 +#: ../../content/applications/finance/fiscal_localizations/india.rst:680 msgid "**PAN Number**" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:707 -#: ../../content/applications/finance/fiscal_localizations/india.rst:712 -#: ../../content/applications/finance/fiscal_localizations/india.rst:717 +#: ../../content/applications/finance/fiscal_localizations/india.rst:681 +#: ../../content/applications/finance/fiscal_localizations/india.rst:686 +#: ../../content/applications/finance/fiscal_localizations/india.rst:691 msgid "IN - MH" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:708 -#: ../../content/applications/finance/fiscal_localizations/india.rst:713 -#: ../../content/applications/finance/fiscal_localizations/india.rst:723 +#: ../../content/applications/finance/fiscal_localizations/india.rst:682 +#: ../../content/applications/finance/fiscal_localizations/india.rst:687 +#: ../../content/applications/finance/fiscal_localizations/india.rst:697 msgid "XYZ Enterprise - GJ" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:710 +#: ../../content/applications/finance/fiscal_localizations/india.rst:684 msgid "₹50,000" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:711 -#: ../../content/applications/finance/fiscal_localizations/india.rst:716 -#: ../../content/applications/finance/fiscal_localizations/india.rst:721 -#: ../../content/applications/finance/fiscal_localizations/india.rst:726 -#: ../../content/applications/finance/fiscal_localizations/india.rst:731 +#: ../../content/applications/finance/fiscal_localizations/india.rst:685 +#: ../../content/applications/finance/fiscal_localizations/india.rst:690 +#: ../../content/applications/finance/fiscal_localizations/india.rst:695 +#: ../../content/applications/finance/fiscal_localizations/india.rst:700 +#: ../../content/applications/finance/fiscal_localizations/india.rst:705 msgid "ABCPX1234E" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:715 +#: ../../content/applications/finance/fiscal_localizations/india.rst:689 msgid "₹30,000" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:718 -#: ../../content/applications/finance/fiscal_localizations/india.rst:728 +#: ../../content/applications/finance/fiscal_localizations/india.rst:692 +#: ../../content/applications/finance/fiscal_localizations/india.rst:702 msgid "XYZ Enterprise - MH" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:720 +#: ../../content/applications/finance/fiscal_localizations/india.rst:694 msgid "₹40,000" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:722 +#: ../../content/applications/finance/fiscal_localizations/india.rst:696 msgid "IN - DL" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:724 +#: ../../content/applications/finance/fiscal_localizations/india.rst:698 msgid "Invoice 4" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:725 +#: ../../content/applications/finance/fiscal_localizations/india.rst:699 msgid "₹20,000" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:727 +#: ../../content/applications/finance/fiscal_localizations/india.rst:701 msgid "IN - GJ" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:729 +#: ../../content/applications/finance/fiscal_localizations/india.rst:703 msgid "Invoice 5" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:730 +#: ../../content/applications/finance/fiscal_localizations/india.rst:704 msgid "₹60,000" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:733 +#: ../../content/applications/finance/fiscal_localizations/india.rst:707 msgid "**Aggregate total** = 50,000 + 30,000 + 40,000 + 20,000 + 60,000 = ₹200,000" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/india.rst:734 +#: ../../content/applications/finance/fiscal_localizations/india.rst:708 msgid "The aggregate total for all customers (XYZ Enterprise - GJ, MH, DL) sharing the PAN number ABCPX1234E across all branches is ₹200,000." msgstr "" @@ -27519,6 +28587,8 @@ msgid "You need to set the checkbox *ID PKP* to generate e-fakturs for a custome msgstr "" #: ../../content/applications/finance/fiscal_localizations/indonesia.rst:34 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:445 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1485 msgid "Usage" msgstr "" @@ -28427,195 +29497,179 @@ msgid "The specific :guilabel:`Scissione dei Pagamenti` fiscal position is avail msgstr "" #: ../../content/applications/finance/fiscal_localizations/italy.rst:596 -msgid "Digital qualified signature" +msgid "Qualified electronic signature" msgstr "" #: ../../content/applications/finance/fiscal_localizations/italy.rst:598 -msgid "For invoices and bills intended for the :abbr:`PA (Public Administration)`, a **Digital Qualified Signature** is required for all files sent through the :abbr:`SdI (Sistema di Interscambio)`. The XML file must be certified using a certificate that is either:" -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/italy.rst:602 -msgid "a **smart card**;" -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/italy.rst:603 -msgid "a **USB token**;" -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/italy.rst:604 -msgid "an :abbr:`HSM (Hardware Security Module)`." +msgid "Invoices and bills intended for the :abbr:`PA (Public Administration)` must include a **qualified electronic signature** when submitted through the :abbr:`SdI (Sistema di Interscambio)`. This signature is automatically applied in the :abbr:`XAdES (XML Advanced Electronic Signature)` format when the invoice's partner has a 6-digit long :guilabel:`Destination Code` (which indicates a :abbr:`PA (Public Administration)` business)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:607 -msgid "Odoo **cannot** digitally sign documents for you. When a 6-digit long :guilabel:`Codice Destinatario` is detected, then the :abbr:`EDI (Electronic Data Interchange)` process stops, and the invoice is set on the :guilabel:`Requires user signature` state. You can download the document in XML, sign it with any :guilabel:`Digital Qualified Signature` provider's external program and send it through the :abbr:`AdE (Agenzia Delle Entrate)` portal." +#: ../../content/applications/finance/fiscal_localizations/italy.rst:605 +msgid "When such an invoice is transmitted to the Tax Agency, the generated `.xml` file is signed on the Odoo servers, returned to the database, and attached to the invoice automatically." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:614 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:609 msgid "Acceptance or Refusal" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:617 -msgid "As Odoo does not handle sending signed invoices to :abbr:`PA (Public Administration)` businesses, these states cannot be directly triggered by Odoo. When you upload the invoice on the :abbr:`AdE (Agenzia Delle Entrate)` portal, Odoo receives notifications about it, putting the correct :guilabel:`SdI State` on the invoice." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/italy.rst:622 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:611 msgid "After receiving the invoice through the :abbr:`SdI (Sistema di Interscambio)`, the :abbr:`PA (Public Administration)` business has 15 days to accept the invoice. If it does, then the process ends here. If the :abbr:`PA (Public Administration)` business refuses the invoice, it is still considered valid once it is accepted by the :abbr:`SdI (Sistema di Interscambio)`. You then have to issue a credit note to compensate and send it to the :abbr:`SdI (Sistema di Interscambio)`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:629 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:618 msgid "Expired Terms" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:631 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:620 msgid "If the :abbr:`PA (Public Administration)` business doesn't reply within 15 days, you need to contact the :abbr:`PA (Public Administration)` business directly, sending them both the invoice and the received deadline notification by email. You can make an arrangement with them and manually set the correct :guilabel:`SdI State` on your invoice." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:637 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:626 msgid "Point of Sale fiscal printers" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:639 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:628 msgid "Fiscal regulations mandate using certified RT devices, such as RT printers or RT servers, to ensure compliant sales receipts and secure communication with the Tax Authority. These devices automatically transmit fiscal data daily. RT printers, designed for individual POS terminals, handle transactions, print receipts, and report to the authorities, ensuring data integrity and compliance." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:645 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:634 #: ../../content/applications/finance/fiscal_localizations/saudi_arabia.rst:56 msgid "Simulation mode" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:648 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:637 msgid "Since the simulation mode sends data to the authorities, it should only be enabled at the very start of the printer's configuration process. Once the printer is switched to the production mode, it cannot be reverted to the simulation mode." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:652 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:641 msgid "To test the fiscal printer setup with Odoo, configure the fiscal printer in the simulation mode as follows:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:655 -#: ../../content/applications/finance/fiscal_localizations/italy.rst:684 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:644 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:673 msgid "Make sure the fiscal printer is set to its default state: printer on, start-up cycle complete, and no transaction in progress." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:657 -#: ../../content/applications/finance/fiscal_localizations/italy.rst:686 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:646 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:675 msgid "Type `3333`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:658 -#: ../../content/applications/finance/fiscal_localizations/italy.rst:687 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:647 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:676 msgid "Press :guilabel:`Chiave`. The screen displays :guilabel:`Scelta Funzione`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:659 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:648 msgid "Type `14`. The screen displays :guilabel:`Apprendimento`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:660 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:649 msgid "Type `62`. The screen displays :guilabel:`Simulazione`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:661 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:650 msgid "To turn the :guilabel:`no` into a :guilabel:`si`, press :guilabel:`X`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:662 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:651 msgid "To confirm, press :guilabel:`Contante`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:663 -#: ../../content/applications/finance/fiscal_localizations/italy.rst:692 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:652 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:681 msgid "Press :guilabel:`Chiave`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:665 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:654 msgid "To configure the printer for production, repeat the steps above." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:668 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:657 msgid "To test the printer configuration, the physical device must first be obtained and registered with the relevant authorities." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:672 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:661 msgid "Setting up the printer to work with Odoo" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:674 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:663 msgid "Fiscal printers are meant to work only in the local network. This means the printer and the device running :doc:`Odoo Point of Sale ` must be connected to the same network." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:678 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:667 msgid "Fiscal printers are typically configured to use HTTP by default. To ensure compatibility with Odoo, the settings must be updated to enable HTTPS support on the printer. This can be done using either the EpsonFPWizard configuration software or the keyboard connected to the printer." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:682 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:671 msgid "To set up the fiscal printer using the keyboard, follow these steps:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:688 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:677 msgid "Type `34`. The screen displays :guilabel:`Web Server`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:689 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:678 msgid "Press :guilabel:`Contante` 3 times until the screen displays :guilabel:`Web Server: SSL`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:690 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:679 msgid "To turn the value `0` into a `1`, press :guilabel:`X`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:691 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:680 msgid "To confirm, press :guilabel:`Contante` 3 times." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:694 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:683 msgid "Then, log in to the printer with the device that runs :doc:`Odoo Point of Sale ` so it recognizes the printer's certificate." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:697 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:686 msgid "To approve and install the printer's certificate, follow these steps:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:699 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:688 msgid "Access the printer by opening a web browser and entering `https://` in the address bar. A :guilabel:`Warning: Potential Security Risk Ahead` security message appears." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:701 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:690 msgid "Click :guilabel:`Advanced` to show the certificate approval options." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:702 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:691 msgid "Click :guilabel:`Proceed` to validate the certificate." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:704 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:693 msgid "Then, to ensure :doc:`Odoo Point of Sale ` is configured with the fiscal printer, go to :menuselection:`Point of Sale --> Configuration --> Settings`. In the :guilabel:`Connected Devices` section, add the IP address in the :guilabel:`Italian Fiscal Printer IP address` and enable :guilabel:`Use HTTPS`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:710 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:699 msgid "Ri.Ba. (Ricevuta Bancaria)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:712 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:701 msgid ":abbr:`Ri.Ba. (Ricevuta Bancaria)` is a payment method widely used in Italy where vendors request payments through their bank, which forwards the request to the customer's own bank and takes responsibility for the collection. This enables payment automation and reduces risks for the vendor." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:716 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:705 msgid "The vendor generally uploads a fixed-format text file with the list of payments to the bank's web portal." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:720 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:709 msgid "Ri.Ba. are exclusively for **domestic payments** in Italy. For recurring international payments, please use `SEPA Direct Debt (SDD) <../accounting/payments/batch_sdd>`_" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:726 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:715 msgid "Check that the `l10n_it_riba` module is :ref:`installed `." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:727 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:716 msgid "Go to :menuselection:`Settings --> Users & Companies --> Companies` and select the company that will use Ri.Ba." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:729 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:718 msgid "Fill out the required :guilabel:`SIA Code`." msgstr "" @@ -28623,43 +29677,43 @@ msgstr "" msgid "The company's SIA code" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:735 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:724 msgid "The :guilabel:`SIA Code` identifies businesses within the Italian banking network and is used to receive money through specific payment methods. It consists of one letter and four digits (e.g., T1234) and can usually be found on the bank's portal or obtained by contacting the bank." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:739 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:728 msgid "Ensure the Company's bank account has an Italian IBAN." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:742 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:731 msgid "How to configure :doc:`Bank Accounts <../accounting/bank>`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:745 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:734 msgid "Accept Ri.Ba. for your invoices" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:747 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:736 msgid "Payments of type :abbr:`Ri.Ba. (Ricevuta Bancaria)` can be registered from the :guilabel:`Invoices` (:menuselection:`Accounting --> Customers --> Invoices`)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:751 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:740 msgid "Make sure that your invoice involves a Partner that has a bank account with an Italian IBAN." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:753 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:742 msgid "Then, all Payments must be grouped in a **Batch Payment**." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:756 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:745 msgid ":doc:`Batch Payments <../accounting/payments>`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:757 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:746 msgid ":doc:`Create a Batch Payment <../accounting/payments/batch>`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/italy.rst:759 +#: ../../content/applications/finance/fiscal_localizations/italy.rst:748 msgid "Once you press the :guilabel:`Validate` button for the Batch Payment, the :abbr:`Ri.Ba. (Ricevuta Bancaria)` file is generated and attached to the Batch Payment, so you can download it and upload it through your bank's web portal." msgstr "" @@ -28828,11 +29882,6 @@ msgstr "" msgid ":guilabel:`Registered in the special sales tax`: for businesses subject to special sales tax regulations. One tax computed as a percentage and one fixed tax per invoice line are required per invoice." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/jordan.rst:135 -#: ../../content/applications/finance/fiscal_localizations/vietnam.rst:130 -msgid "Click :guilabel:`Save`." -msgstr "" - #: ../../content/applications/finance/fiscal_localizations/jordan.rst:138 msgid "If the :guilabel:`Electronic Invoicing (Jordan)` section is missing from the :guilabel:`Settings`, make sure the :guilabel:`Jordan E-Invoicing` module is :ref:`installed `." msgstr "" @@ -28962,6 +30011,7 @@ msgid "Ensure that the :guilabel:`Reason` for generating a debit/credit note ali msgstr "" #: ../../content/applications/finance/fiscal_localizations/jordan.rst:246 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:804 msgid "Discounts" msgstr "" @@ -29708,76 +30758,64 @@ msgstr "" msgid "This module includes the features required for integration with MyInvois under IRBM." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:39 -msgid ":guilabel:`Malaysia - E-invoicing Extended Features`" -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:40 -msgid "`l10n_my_edi_extended`" -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:41 -msgid "This module improves the MyInvois E-invoicing feature by adding proper support for self billing, rendering the MyInvois QR code in the invoice PDF file and allows better management of foreign customer TIN." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:50 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:45 msgid "To configure your company information, go to the :guilabel:`Contacts` app, search for your company, and select it. Then configure the following fields:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:54 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:49 #: ../../content/applications/finance/fiscal_localizations/vietnam.rst:43 msgid ":guilabel:`Address`, including the :guilabel:`City`, :guilabel:`State`, :guilabel:`Zip Code`, and :guilabel:`Country`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:61 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:56 msgid ":guilabel:`Tax ID`: Tax identification number" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:62 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:57 msgid ":guilabel:`SST`: Malaysian Sales and Service Tax Number, if applicable" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:63 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:58 msgid ":guilabel:`TTx`: Malaysian Tourism Tax Number, if applicable" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:67 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:62 msgid "E-invoicing integration with MyInvois" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:69 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:64 msgid "The MyInvois Portal is a platform provided by the :abbr:`IRBM (Inland Revenue Board of Malaysia)` that facilitates the implementation of e-invoices for Malaysian taxpayers. Odoo supports integration with MyInvois to submit the invoices generated in Odoo." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:74 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:69 msgid "The :guilabel:`Malaysia - E-invoicing module` must be installed to submit invoices to MyInvois." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:79 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:74 msgid "Set-up" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:84 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:79 msgid "MyInvois registration" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:86 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:81 msgid "To send electronic invoices to MyInvois, you first need to register and log in to the MyInvois portal to grant Odoo the **right to invoice** as an intermediary for your company." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:90 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:85 msgid "If this is the first time you log into the MyInvois portal, click :guilabel:`User Manual` on MyTax_ to learn more about the registration process. Both the **pre-production** (:dfn:`testing environment to try the functions before using the actual (production) environment`) and **production** (:dfn:`actual environment to submit e-invoices with accurate information`) environments are supported." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:96 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:91 msgid "Log into MyTax_. Choose the :guilabel:`ID Type` and the corresponding :guilabel:`identification number` used to register for the digital certificate." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:98 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:93 msgid "From the dashboard, click the :icon:`fa-angle-down` :guilabel:`(angle-down)` icon in the top-right corner and select :guilabel:`View Taxpayer Profile`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:100 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:95 msgid "In the :guilabel:`Representatives` section, click :guilabel:`Add Intermediary` in the top-right corner." msgstr "" @@ -29785,59 +30823,59 @@ msgstr "" msgid "MyInvois add intermediary" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:106 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:101 msgid "Add `ODOO S.A.` as an intermediary using the following information:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:108 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:103 msgid ":guilabel:`TIN`: `C57800417080`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:109 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:104 msgid ":guilabel:`BRN`: `BE0477472701`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:110 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:105 msgid ":guilabel:`Name`:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:112 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:107 msgid ":guilabel:`Production`: `ODOO S.A.`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:113 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:108 msgid ":guilabel:`Pre-production`: `OXXX_XXXXA.`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:115 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:110 msgid "Grant the following permissions by clicking the :icon:`fa-toggle-on` :guilabel:`(toggle-on)` icon:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:118 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:113 msgid ":guilabel:`Representation From`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:119 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:114 msgid ":guilabel:`Document - Submit`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:120 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:115 msgid ":guilabel:`Document - Cancel`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:121 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:116 msgid ":guilabel:`Document - Request Rejection`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:124 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:119 msgid "Access can be revoked in the future if needed." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:125 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:120 msgid "Odoo, as an intermediary, does not store invoices sent on behalf of the client on the proxy server." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:128 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:123 msgid "Click :guilabel:`Save`. The status for `ODOO S.A.` is then :guilabel:`Active`." msgstr "" @@ -29845,67 +30883,67 @@ msgstr "" msgid "MyInvois status active" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:143 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:138 msgid "Open the Settings app, navigate to the :guilabel:`Companies` section, and click :guilabel:`Update Info`. Make sure the :guilabel:`Tax ID` is entered and complete the following fields in the :guilabel:`E-invoicing` section:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:147 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:142 msgid ":guilabel:`Identification`: Select the :guilabel:`ID Type` and enter the associated :guilabel:`Identification number` used to register for the digital certificate." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:149 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:144 msgid ":guilabel:`Ind. Classification`: Input the 5-digit numeric code that represents the nature and activity of the business." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:155 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:150 msgid "Go to :menuselection:`Accounting --> Configuration --> Settings`. In the :guilabel:`Malaysian Electronic Invoicing` section, select the relevant :guilabel:`MyInvois mode` based on the environment used for the company's MyInvois registration." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:159 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:154 msgid "Make sure to allow Odoo to process e-invoices by checking the box, then click :guilabel:`Register`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:162 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:157 msgid "To change the :abbr:`TIN (tax identification number)` reference, click :guilabel:`Unregister`, change the company's information and make sure the number registered on MyInvois matches, then :guilabel:`Register` again." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:167 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:162 msgid "For taxpayers with a :abbr:`TIN (tax identification number)` starting with \"IG\" and a :abbr:`ROB (registration of business)` number, combine the TIN and ROB in the **TIN:ROB** format for the :guilabel:`Tax ID` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:171 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:166 msgid "To register, go to :menuselection:`Accounting --> Configuration --> Settings`, and in the :guilabel:`Malaysian Electronic Invoicing` section, click :guilabel:`Register`. Once the registration is complete, the **:ROB** can be removed from the :guilabel:`Tax ID`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:175 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:170 msgid "Additionally, remember to log into `MyTax account `_ and set the :guilabel:`Type of Role` as :guilabel:`Business Owner`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:183 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:178 msgid "Access the contact's form and fill in the following fields:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:188 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:183 msgid ":guilabel:`Tax ID`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:189 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:184 msgid ":guilabel:`Identification`: the :guilabel:`ID Type` and the corresponding :guilabel:`Identification number` of the contact registered on MyTax." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:197 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:192 msgid "All products to be included in e-invoices require a Malaysian classification code. To add it, access the :guilabel:`Product` form and in the :guilabel:`General Information` tab, fill in the :guilabel:`Malaysian classification code` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:202 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:197 msgid "Malaysian tax type" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:204 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:199 msgid "To configure a tax's :guilabel:`Malaysian Tax Type` field, go to :menuselection:`Accounting --> Configuration --> Accounting --> Taxes` and open the relevant tax in the :guilabel:`Taxes` list view." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:208 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:203 msgid "When an invoice or bill includes a tax with the :guilabel:`Malaysian Tax Type` set to **Tax Exempt**, a :guilabel:`Tax Exemption Reason` must be specified in the :guilabel:`MyInvois` tab before the document is sent." msgstr "" @@ -29913,127 +30951,127 @@ msgstr "" msgid "MyInvois tax exemption reason" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:223 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:218 msgid "Send invoices to MyInvois" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:225 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:220 msgid "Invoices can be sent to MyInvois once they have been confirmed. To do so, click :guilabel:`Send to MyInvois`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:229 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:224 msgid "Send bills to MyInvois" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:231 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:226 msgid "Sending a bill to MyInvois is necessary when issuing an e-Invoice on behalf of a supplier. Once a bill is confirmed, click :guilabel:`Send To MyInvois`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:235 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:230 msgid "In `MyInvois `_, these vendor bills are categorized as :guilabel:`Self-billed Invoice`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:238 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:233 msgid "If a :guilabel:`Bill Reference` field is empty, Odoo's vendor bill number is used as the MyInvois number. If a reference is entered in the :guilabel:`Bill Reference` field, that reference is used instead." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:245 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:240 msgid "MyInvois status" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:247 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:242 msgid "The current MyInvois status of an invoice or bill is shown in the :guilabel:`MyInvois State` field within the :guilabel:`MyInvois` tab." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:250 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:245 msgid ":guilabel:`Validation in Progress`: the validation is being processed by MyInvois. A blue :guilabel:`Processing` banner is also displayed." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:252 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:247 msgid ":guilabel:`Valid`: it is validated by MyInvois. The :guilabel:`Submission UID`, :guilabel:`MyInvois` and :guilabel:`Validation Time` are automatically updated with information from MyInvois." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:257 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:252 msgid "Odoo :doc:`automatically checks and updates <../../sales/subscriptions/scheduled_actions>` the status every hour. To update it manually at any time, click :guilabel:`Update MyInvois Status`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:265 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:260 msgid "Sent invoices can be canceled within 72 hours from :guilabel:`Validation time`. In this case, open the invoice and click :guilabel:`Request Cancel`. In the :guilabel:`Cancel document` window, include the cancellation :guilabel:`Reason`, then click :guilabel:`Update Invoice`. The :guilabel:`MyInvois State` is updated to :guilabel:`cancelled`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:271 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:266 msgid "Send credit notes to MyInvois" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:273 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:268 msgid "Before sending a credit note, the original invoice must be successfully submitted to MyInvois. Otherwise, the credit note's :guilabel:`MyInvois State` is updated to :guilabel:`Invalid`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:276 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:271 msgid "While Odoo uses a single :guilabel:`credit note` document, MyInvois categorizes these into two types: :guilabel:`credit note` and :guilabel:`refund note`, depending on how they are reconciled." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:279 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:274 msgid ":guilabel:`MyInvois Credit Note`: This is created when an Odoo credit note is reconciled with the original invoice." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:281 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:276 msgid ":guilabel:`MyInvois Refund Note`: This is created when an Odoo credit note is reconciled with a full payment instead of the original invoice." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:285 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:280 msgid "If a credit note is reconciled with only a partial payment before being sent, it is still categorized as a :guilabel:`credit note` in MyInvois." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:291 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:286 msgid "To issue both a credit note and a refund note for the same original invoice:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:290 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:285 msgid "Create two separate credit notes in Odoo from the original invoice." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:291 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:286 msgid "For a MyInvois :guilabel:`Refund Note`: Register a payment before sending it." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:292 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:287 msgid "For a MyInvois :guilabel:`Credit Note`: Do not register a payment before sending it." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:295 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:290 msgid "The same logic applies to credit notes created from bills: if reconciled with a full payment, the credit note becomes a :guilabel:`Self-billed Refund Note`; otherwise, it becomes a :guilabel:`Self-billed Credit Note`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:300 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:295 msgid "Send debit notes to MyInvois" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:302 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:297 msgid ":ref:`Issue a debit note from an existing bill or invoice ` and click :guilabel:`Send To MyInvois`. In MyInvois, it appears then as a :guilabel:`Debit Note` if issued from an invoice or a :guilabel:`Self-billed Debit Note` from a vendor bill." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:307 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:302 msgid "Access invoices via QR code" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:309 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:304 msgid "When a document is successfully submitted to MyInvois, a QR code is added to its PDF version. Scanning this code links directly to the validated document in MyInvois." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:312 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:307 msgid "To download the PDF from an invoice or bill:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:314 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:309 msgid "Click the :icon:`fa-cog` :guilabel:`(gear)` icon" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:315 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:310 msgid "Select :guilabel:`Download`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:316 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:311 msgid "Choose either :guilabel:`PDF` or :guilabel:`PDF without Payment`" msgstr "" @@ -30041,19 +31079,19 @@ msgstr "" msgid "MyInvois QR code" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:324 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:319 #: ../../content/applications/finance/fiscal_localizations/singapore.rst:60 #: ../../content/applications/finance/fiscal_localizations/united_kingdom.rst:248 msgid "Employment Hero payroll" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:326 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:321 #: ../../content/applications/finance/fiscal_localizations/singapore.rst:62 #: ../../content/applications/finance/fiscal_localizations/united_kingdom.rst:250 msgid "If your business is already up and running with :doc:`Employment Hero <../../hr/payroll/payroll_localizations/employment_hero>`, you can use our connector as an alternative payroll solution." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:331 +#: ../../content/applications/finance/fiscal_localizations/malaysia.rst:326 msgid "To :ref:`configure the Employment Hero API ` for **Malaysia**, use the following value as :guilabel:`Payroll URL`: `https://apimy.yourpayroll.io/`." msgstr "" @@ -30062,604 +31100,778 @@ msgid "Mexico" msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:21 -msgid "A video on the Mexican localization is also available. This video covers how to implement this localization from scratch, including how to set up the configurations, how to complete common workflows, and provides an in-depth look at several specific use cases, as well." +msgid "The following modules are automatically installed with the Mexican localization:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:25 -msgid "`Video webinar of a complete demo `_." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:30 +msgid ":guilabel:`Mexico - Accounting`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:30 -msgid "The Odoo Mexican localization modules allow for the signing of electronic invoices, according to the specifications of the |SAT| for `version 4.0 of the CFDI `_, a legal requirement, as of January 1, 2022. These modules also add relevant accounting reports (such as: the |DIOT|, enables foreign trade, and the creation of delivery guides)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:31 +msgid "`l10n_mx`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:32 +msgid "The default :doc:`fiscal localization package <../fiscal_localizations>` adds accounting characteristics for the Mexican localization, such as: the most common taxes and the chart of accounts — based on `the SAT account grouping code `_." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:36 +msgid ":guilabel:`EDI for Mexico`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:37 -msgid "In order to electronically sign any documents in Odoo, ensure the *Sign* application is installed." +msgid "`l10n_mx_edi`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:41 -msgid ":doc:`Documentation on e-invoicing's legality and compliance in Mexico <../accounting/customer_invoices/electronic_invoicing/mexico>`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:38 +msgid "Includes all the technical and functional requirements to generate and validate :doc:`electronics documents <../accounting/customer_invoices/electronic_invoicing>` — based on the technical documentation published by the |SAT|. This allows you to send invoices (with or without addedums) and payment complements to the government." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:42 +msgid ":guilabel:`Odoo Mexican Localization Reports`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:43 +msgid "`l10n_mx_reports`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:44 +msgid "Adapts reports for Mexico's electronic accounting: chart of accounts, trial balance, and |DIOT|." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:46 +msgid ":guilabel:`Mexico - Month 13 Trial Balance`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:47 +msgid "`l10n_mx_reports_closing`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:48 -#: ../../content/applications/finance/fiscal_localizations/united_states.rst:564 -msgid "Requirements" +msgid "Necessary to create the closing entry (also known as the *month 13 move*)." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:49 +msgid ":guilabel:`Odoo Mexican XML Polizas Export`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:50 -msgid "It is necessary to meet the following requirements before configuring the Mexican localization modules in Odoo:" +msgid "`l10n_mx_xml_polizas`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:55 -msgid "Be registered in the |SAT|, with a valid |RFC|." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:51 +msgid "Allows the export of XML files of journal entries for a compulsory audit." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:56 -msgid "Have a `Certificate of Digital Seal `_ (CSD)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:53 +msgid "The following modules are optional. It's recommended to :ref:`install ` them *only* if meeting a specific requirement for the business." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:58 -msgid "Choose a PAC (Proveedor Autorizado de Certificación / Authorized Certification Provider). Currently, Odoo works with the following |PAC|\\s: `Solución Factible `_, `Quadrum (formerly Finkok) `_ and `SW Sapien - Smarter Web `_." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:63 +msgid ":guilabel:`EDI for Mexico (Advanced Features)`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:62 -msgid "Have knowledge and experience with billing, sales, and accounting in Odoo. This documentation **only** contains the necessary information needed to use Odoo." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:64 +msgid "`l10n_mx_edi_extended`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:65 +msgid "Adds the external trade complement to invoices (a legal requirement for selling products to foreign countries)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:66 -msgid "Installing modules" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:67 +msgid ":guilabel:`Mexico - Electronic Delivery Guide`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:68 -msgid ":ref:`Install ` the following modules to get all the features of the Mexican localization. The :doc:`Accounting <../accounting>` and *Contacts* modules are required to be installed for this configuration:" +msgid "`l10n_mx_edi_stock`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:69 +msgid "Lets you create a *Carta Porte*: A bill of lading that proves to the government you are sending goods between A & B with a signed electronic document." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:71 +msgid ":guilabel:`Odoo Mexico Localization for Stock/Landing`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:72 +msgid "`l10n_mx_edi_landing`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:73 +msgid "Allows managing customs numbers related to landed costs in electronic documents." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:74 +msgid ":guilabel:`CFDI 4.0 fields for sale orders`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:75 +msgid "`l10n_mx_edi_sale`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:76 +msgid "Adds extra fields to the :doc:`Sales <../../sales/sales>` module to comply with the Mexican Electronic Invoicing" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:78 +msgid ":guilabel:`Mexican Localization for the Point of Sale`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:79 -msgid ":guilabel:`Mexico - Accounting`" +msgid "`l10n_mx_edi_pos`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:80 -msgid "`l10n_mx`" +msgid "Adds extra fields to the :doc:`Point of Sale <../../sales/point_of_sale>` module to comply with the Mexican Electronic Invoicing" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:81 -msgid "The default :doc:`fiscal localization package <../fiscal_localizations>`, adds accounting characteristics for the Mexican localization, such as: the most common taxes and the chart of accounts – based on `the SAT account grouping code `_." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:82 +msgid ":guilabel:`Mexican Localization for eCommerce`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:85 -msgid ":guilabel:`EDI for Mexico`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:83 +msgid "`l10n_mx_edi_website_sale`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:84 +msgid "Adds extra fields to the :doc:`eCommerce <../../websites/ecommerce>` module to comply with the Mexican electronic invoicing requirements" msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:86 -msgid "`l10n_mx_edi`" +msgid ":guilabel:`Employees - Mexico`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:87 -msgid "Includes all the technical and functional requirements to generate and validate :doc:`Electronics Documents <../accounting/customer_invoices/electronic_invoicing>` — based on the technical documentation published by the |SAT|. This allows you to send invoices (with or without addedums) and payment complements to the government." +msgid "`l10n_mx_hr`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:88 +msgid "Adds extra fields to the :doc:`Employees <../../hr/employees>` module to comply with local information for employees." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:90 +msgid ":guilabel:`Mexico - Payroll with Accounting`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:91 -msgid ":guilabel:`EDI v4.0 for Mexico`" +msgid "`l10n_mx_hr_payroll_account`" msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:92 -msgid "`l10n_mx_edi_40`" +msgid "Adds the required rules and parameters to manage local payroll calculation with the :doc:`Payroll <../../hr/payroll>` app." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:93 -msgid "Necessary to create XML documents with the correct specifications of the CFDI 4.0." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:98 +msgid "Video tutorials" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:94 -msgid ":guilabel:`Odoo Mexican Localization Reports`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:100 +msgid "Videos on the Mexican localization are also available. Basic workflows and most topics covered on this page are also available in video format, please check out the following:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:95 -msgid "`l10n_mx_reports`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:103 +msgid "`Odoo Smart Tutorial - Mexican localization `_" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:96 -msgid "Adapts reports for Mexico's Electronic Accounting: Chart of Accounts, Trial Balance, and |DIOT|." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:105 +msgid "`Basic configurations and Youtube playlist `_" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:98 -msgid ":guilabel:`Mexico - Localization Reports for Closing`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:113 +msgid "The Odoo Mexican localization modules allow for the signing of electronic invoices, according to the specifications of the |SAT| for `version 4.0 of the CFDI `_, a legal requirement, as of January 1, 2022. These modules also add relevant accounting reports including the |DIOT|, enable foreign trade, and enable the creation of delivery guides." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:99 -msgid "`l10n_mx_reports_closing`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:120 +msgid "In order to electronically sign any documents in Odoo, the Sign application must be installed." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:100 -msgid "Necessary to create the Closing Entry (Also known as the *month 13th move*)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:123 +msgid ":doc:`Documentation on e-invoicing's legality and compliance in Mexico <../accounting/customer_invoices/electronic_invoicing/mexico>`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:101 -msgid ":guilabel:`Odoo Mexican XML Polizas Export`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:129 +#: ../../content/applications/finance/fiscal_localizations/united_states.rst:564 +msgid "Requirements" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:102 -msgid "`l10n_mx_xml_polizas`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:131 +msgid "It is necessary to meet the following requirements before configuring the Mexican localization modules in Odoo:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:103 -msgid "Allows the export of XML files of Journal Entries for a compulsory audit." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:134 +msgid "Be registered in the |SAT| with a valid |RFC|." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:104 -msgid ":guilabel:`Odoo Mexican XML Polizas Export Edi bridge`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:135 +msgid "Have a `Certificado de Sello Digital / Digital Seal Certificate `_ (CSD)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:105 -msgid "`l10n_mx_xml_polizas_edi`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:137 +msgid "Choose a |PAC|. Currently, Odoo works with the following |PAC|\\s: `Solución Factible `_, `Quadrum `_, and `SW Sapien - Smarter Web `_." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:106 -msgid "Complements the module `l10n_mx_xml_polizas`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:147 +msgid "After installing the correct modules, the next step is to verify that the company is configured with the correct data. To do so, go to :menuselection:`Settings --> Users & Companies --> Companies`, and select the company to configure." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:109 -msgid "When installing a database from scratch and selecting :guilabel:`Mexico` as the country, Odoo automatically installs the following modules: :guilabel:`Mexico - Accounting`, :guilabel:`EDI for Mexico`, and :guilabel:`EDI v4.0 for Mexico`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:151 +msgid "Enter the full :guilabel:`Address` in the resulting form, including: :guilabel:`ZIP` code, :guilabel:`State`, :guilabel:`Country`, and |RFC| (:guilabel:`Tax ID` number)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:113 -msgid "The following modules are optional. It's recommended to install them *only* if meeting a specific requirement. Make sure that they are needed for the business." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:154 +msgid "According to the requirements of the |CFDI| 4.0, the name of the main company contact **must** match the business name registered in the |SAT|, without the legal entity abbreviation. This is the same for the :guilabel:`ZIP` code." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:123 -msgid ":guilabel:`EDI for Mexico (Advanced Features)`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:159 +msgid "From a legal point of view, Mexican companies **must** use the local currency (MXN). To use another currency, let MXN be the default currency and use a :doc:`pricelist <../../sales/sales/products_prices/prices/pricing>` instead." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:124 -msgid "`l10n_mx_edi_extended`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:163 +msgid "Next, go to :menuselection:`Accounting --> Settings`, and scroll to the :guilabel:`MX Electronic invoicing` section. Under :guilabel:`Service Tax Administration (SAT)`, select the :guilabel:`Fiscal Regime` that applies to the company from the drop-down list, and click :guilabel:`Save`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:125 -msgid "Adds the external trade complement to invoices: A legal requirement for selling products to foreign countries." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:168 +msgid "In order to test the Mexican localization, configure the company with a real address within Mexico (including all fields). Add `EKU9003173C9` as the :guilabel:`Tax ID` and `ESCUELA KEMPER URGATE` as the :guilabel:`Company Name`. For the :guilabel:`Fiscal Regime`, use :guilabel:`General de Ley Personas Morales`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:127 -msgid ":guilabel:`EDI v4.0 for Mexico (COMEX)`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:176 +msgid "When using branches, all the invoicing information will be taken from the main company except for the zip. Unless the |RFC| is set on the branch, then the information will be taken directly from the branch." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:128 -msgid "`l10n_mx_edi_extended_40`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:180 +msgid "Branches enable users to establish multiple brands within the same parent company. Additionally, when different fiscal regimes are required for invoicing purposes, it is necessary to create a branch for each regime. By default, the regime is inherited from the parent company. However, if the regime is explicitly set on the branch, Odoo will adopt the regime applicable to that branch." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:129 -msgid "Adapts the module `l10n_mx_edi_extended` for CFDI 4.0." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:191 +msgid ":ref:`Install ` the **Contacts** application to access contact records." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:130 -msgid ":guilabel:`Mexico - Electronic Delivery Guide`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:193 +msgid "To create a contact that can be invoiced, go to the :menuselection:`Contacts` app and click :guilabel:`New`. Then, enter the contact name, full :guilabel:`Address` including the :guilabel:`ZIP` code, :guilabel:`State`, :guilabel:`Country`, and |RFC| (:guilabel:`Tax ID`)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:131 -msgid "`l10n_mx_edi_stock`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:198 +msgid "As with the company itself, all contacts must have their correct business name registered in the |SAT|. The :guilabel:`Fiscal Regime` must also be added in the :guilabel:`Sales & Purchase` tab." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:132 -msgid "Lets you create a *Carta Porte*: A bill of lading that proves to the government you are sending goods between A & B with a signed electronic document." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:202 +msgid "Having a |RFC| (:guilabel:`Tax ID`) set but no :guilabel:`Country` configured may result in incorrect invoices." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:134 -msgid ":guilabel:`Electronic Delivery Guide for Mexico CFDI 4.0`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:210 +msgid "In order to properly sign invoices, set the :ref:`Factor Type ` and :ref:`Tax Object ` fields on sales taxes." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:135 -msgid "`l10n_mx_edi_stock_40`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:214 +msgid "RESICO ISR withholdings and some |IEPS| taxes are created automatically, but the feature is not active by default. To enable it, go to :menuselection:`Accounting --> Configuration --> Taxes`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:136 -msgid "Adapts the module `l10n_mx_edi_stock` for CFDI 4.0" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:220 +msgid "Factor type" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:137 -msgid ":guilabel:`Odoo Mexico Localization for Stock/Landing`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:222 +msgid "Both the **Factor Type** and **SAT Tax Type** fields are pre-loaded in the default taxes." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:138 -msgid "`l10n_mx_edi_landing`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:224 +msgid "For new taxes, set these fields in :menuselection:`Accounting --> Configuration --> Taxes` and click :guilabel:`New`. Set the :guilabel:`Tax Type` to :guilabel:`Sales`. In the :guilabel:`Advanced Options` tab, fill :guilabel:`SAT Tax Type` and :guilabel:`Factor Type` fields." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:139 -msgid "Allows managing customs numbers related to landed costs in electronic documents." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:228 +msgid "Odoo supports four groups of :guilabel:`SAT Tax Types`: :guilabel:`IVA`, :guilabel:`ISR`, :guilabel:`IEPS`, and :guilabel:`Local Taxes`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:231 +msgid "If the factor type is :guilabel:`Quota`, standard calculation methods cannot be used. Instead, set the tax calculation computation to :guilabel:`Custom Formula`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:144 -msgid "After installing the correct modules, the next step is to verify that your company is configured with the correct data. To do so, go to :menuselection:`Settings --> General Settings --> Companies`, and select :guilabel:`Update Info` under your company name." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:235 +msgid "result = quantity * 6.455\n" +"\n" +"" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:148 -msgid "Enter the full :guilabel:`Address` in the resulting form, including: :guilabel:`ZIP` code, :guilabel:`State`, :guilabel:`Country`, and |RFC| (:guilabel:`VAT` number)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:238 +msgid "*quantity* = the number of items in the transaction" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:151 -msgid "According to the requirements of the CFDI 4.0, the name of the main company contact **must** coincide with your business name registered in the |SAT|, without the legal entity abbreviation." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:239 +msgid "*6.455* = the quota value (a fixed amount per unit)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Main company contact requirements for a correct invoicing." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:240 +msgid "Only per-unit quotas are supported, not quotas based on other factors" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:158 -msgid "From a legal point of view, a Mexican company **must** use the local currency (MXN). Therefore, Odoo does not provide features to manage an alternative configuration. If you want to manage another currency, let MXN be the default currency and use a :doc:`pricelist <../../sales/sales/products_prices/prices/pricing>`, instead." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:243 +msgid "Mexico manages two different kinds of 0% VAT to accommodate two scenarios:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:163 -msgid "Next, go to :menuselection:`Settings --> Accounting --> Electronic Invoicing (MX) --> Fiscal Regime`, then select the regime that applies to your company from the drop-down list, and click :guilabel:`Save`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:245 +msgid "For *0% VAT*, set the :guilabel:`Factor Type` to :guilabel:`Tasa`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Fiscal regime configuration in the Accounting settings." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:246 +msgid "For *VAT Exempt*, set the :guilabel:`Factor Type` to :guilabel:`Exento`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:171 -msgid "If you want to test the Mexican localization, the company can be configured with a real address within Mexico (including all fields), and add `EKU9003173C9` as the :guilabel:`VAT` and `ESCUELA KEMPER URGATE` as the :guilabel:`Company Name`. For the :guilabel:`Fiscal Regime`, use :guilabel:`General de Ley Personas Morales`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:249 +msgid "Local taxes are generated in a separate node in the XML file, these do not get validated by the |PAC|." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:179 -msgid "To create a contact that can be invoiced, go to :menuselection:`Contacts --> Create`. Then, enter the contact name, full :guilabel:`Address` including: :guilabel:`ZIP` code, :guilabel:`State`, :guilabel:`Country`, and |RFC| (:guilabel:`VAT` number)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:253 +msgid "Quotas and custom formulas require the :guilabel:`Define Taxes as Python Code` module. See :doc:`Taxes <../accounting/taxes>`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:184 -msgid "As with your own company, all of your contacts needs to have their correct business name registered in the |SAT|. This also applies to the :guilabel:`Fiscal Regime`, which needs to be added in the :guilabel:`MX EDI` tab." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:259 +msgid "Tax object" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:191 -msgid "Some additional configurations for factor type and tax objects need to be added to the sales taxes in order to properly sign invoices." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:261 +msgid "One requirement of the CFDI 4.0 is that the resulting XML file handles the breakdown of taxes of the operation in accordance with the regulation. There are eight different possible values that are added in the XML file:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:195 -msgid "Factor type" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:265 +msgid "`01`: No tax Object: This value is added automatically if the invoice line doesn't contain any taxes." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:197 -msgid "The *Factor Type* field is pre-loaded in the default taxes. If new taxes are created, you need to make sure to configure this field. To do so, go to :menuselection:`Accounting --> Configuration --> Taxes`, then enable the :guilabel:`Factor Type` field in the :guilabel:`Advanced Options` tab for all records, with the :guilabel:`Tax Type` set as :guilabel:`Sales`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:267 +msgid "`02`: Tax Object: This is the default configuration of any invoice line that contains taxes." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Factor Type Sales tax type configuration." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:268 +msgid "`03`: Tax Object and doesn't require breakdown: This can only be added manually." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:206 -msgid "Mexico manages two different kinds of 0% VAT to accommodate two scenarios:" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:269 +msgid "`04`: Tax Object and doesn't have tax: This can only be added manually." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:208 -msgid "*0% VAT* set the :guilabel:`Factor Type` as :guilabel:`Tasa`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:270 +msgid "`05`: Tax Object, VAT for PODEBI: This can only be added manually." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:209 -msgid "*VAT Exempt* set the :guilabel:`Factor Type` as :guilabel:`Exento`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:271 +msgid "`06`: VAT Object, No VAT forwarded: This object will be selected when there is an ISR withholding and no VAT tax." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:212 -msgid "Tax object" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:273 +msgid "`07`: No VAT forwarded, |IEPS| breakdown: This object will be selected when there is an ISR withholding, |IEPS| tax and no VAT tax." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:214 -msgid "One requirement of the CFDI 4.0 is that the resulting XML file needs (or does not need) to break down the taxes of the operation. There are three different possible values that are added in the XML file:" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:275 +msgid "`08`: No VAT forwarded, |IEPS| breakdown: This object can only be added manually." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:218 -msgid "`01`: Not subject to tax - this value is added automatically if your invoice line doesn't contain any taxes." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:278 +msgid "Using either 01, 03, 04, or 05 will remove the tax node from the XML file." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:220 -msgid "`02`: Subject to tax - this is the default configuration of any invoice line that contains taxes." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:281 +msgid "The :guilabel:`IEPS breakdown` status affects the behavior of the tax objects due to the missing |IEPS| when the breakdown does not happen." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:221 -msgid "`03`: Subject to tax and not forced to break down - this value can be triggered on-demand for certain customers to replace the value 02." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:287 +msgid "Local taxes" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:224 -msgid "To use the `03` value, navigate to :menuselection:`Contacts --> your customer's invoice --> MX EDI tab`, and activate the :guilabel:`No Tax Breakdown` checkbox." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:289 +msgid "Local taxes (e.g., *ISH*, *Cedullar*) require a separate XML node and may not follow standard tax logic." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "No Tax Breakdown option on the MX EDI tab of the customer's invoice." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:292 +msgid "When configuring a local tax, its name appears in the local tax complement. The rate is treated as a withholding if negative, or carried forward if positive." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:231 -msgid "The :guilabel:`No Tax Breakdown` value applies **only** to specific fiscal regimes and/or taxes. Consult your accountant first to see if it is needed for your business before making any modification." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:298 +msgid "IEPS breakdown" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:300 +msgid "By default Odoo hides the |IEPS| in the invoices so that the subtotal on which the VAT is calculated includes the amount of |IEPS|, this is to ensure that Fiscal Regimes that don't require it, don't recieve it." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:304 +msgid "It is possible to make the |IEPS| visible in the XML by selecting the :guilabel:`IEPS Breakdown` checkbox inside each contact on the :guilabel:`Sales & Purchase` tab." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:308 +msgid "When using either :ref:`eCommerce invoicing ` or the :ref:`Self invoicing portal `, the customer will have the option to decide whether or not to have the |IEPS| breakdown." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:236 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:315 msgid "Other tax configurations" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:238 -msgid "When registering a payment, Odoo will carry out the movement of taxes from the *Cash Basis Transition Account* to the account set in the :guilabel:`Definition` tab. For such movement, a tax base account will be used: (`Base Imponible de Impuestos en Base a Flujo de Efectivo`) in the journal entry when reclassifying taxes. **Do not delete this account**." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:317 +msgid "The Mexican Localization uses :doc:`cash basis taxes <../../finance/accounting/taxes/cash_basis>`. When registering a payment, Odoo carries out the movement of taxes from the *Cash Basis Transition Account* to the account set in the :guilabel:`Definition` tab of the tax record set on the invoice or bill line. For such movement, a tax base account is used: (:guilabel:`899.01.99 Base Imponible de Impuestos en Base a Flujo de Efectivo`) in the journal entry when reclassifying taxes. **Do not delete this account**." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:243 -msgid "If you create a new tax in :menuselection:`Accounting --> Configuration --> Taxes`, you need to add the correct :guilabel:`Tax Grids` for it (`IVA`, `ISR` or `IEPS`). Odoo **only** supports these three groups of taxes." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:327 +msgid "Withholdings" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:329 +msgid "By default, Odoo includes withholdings with special distributions to allocate VAT." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:331 +msgid "When registering an invoice, add the withholding and its corresponding VAT. Both must be included on the vendor bill to ensure correct accounting. Using :doc:`fiscal positions <../accounting/taxes/fiscal_positions>` is recommended so the cash-basis entry properly splits the distribution." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:337 +msgid "For a lease vendor bill of `10000 MXN`, the `10.67%` lease withholding corresponds to a `16% VAT 2/3 H`. Both taxes must be applied together to reflect the correct accounting." msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Tax accounts available for Odoo." +msgid "Cash Basis entry with VAT split between paid and due." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:253 -msgid "To configure products, go to :menuselection:`Accounting --> Customers --> Products`, then select a product to configure, or :guilabel:`Create` a new one. In the :guilabel:`Accounting` tab, and in the :guilabel:`UNSPSC Product Category` field, select the category that represents the product. The process can be done manually, or through :doc:`a bulk import <../../essentials/export_import_data>`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:344 +msgid "Withholdings |CFDI| is not currently supported. Consult with an accountant the proper distribution." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:259 -msgid "All products need to have an |SAT| code associated with them in order to prevent validation errors." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:350 +msgid "To configure products, go to :menuselection:`Accounting --> Customers --> Products`. Open an existing product or click :guilabel:`New`. In the :guilabel:`Accounting` tab, set the :guilabel:`UNSPSC Product Category`. Products and categories can be set manually, or through :doc:`a bulk import <../../essentials/export_import_data>`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:356 +msgid "All products need to have a |SAT| code associated with them in order to prevent validation errors." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:266 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:367 msgid "PAC credentials" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:268 -msgid "After you have processed your `Private Key (CSD) `_ with the |SAT|, you **must** register directly with the :ref:`PAC ` of your choice before you start creating invoices from Odoo." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:369 +msgid "After processing your `Private Key (CSD) `_ with the |SAT|, you **must** register directly with the :ref:`PAC ` of your choice before you start creating invoices from Odoo." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:273 -msgid "Once you've created your account with any of these providers, go to :menuselection:`Settings --> Accounting --> Electronic Invoicing (MX)`. Under the :guilabel:`MX PAC` section, enter the name of your |PAC| with your credentials (:guilabel:`PAC username` and :guilabel:`PAC password`)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:374 +msgid "Once you've created your account with any of these providers, go to :menuselection:`Accounting --> Configuration --> Settings` and navigate to the :guilabel:`MX Electronic invoicing` section. Under the :guilabel:`Authorized Certification Provider (PAC)` section, enter the name of your |PAC| with your credentials (:guilabel:`PAC username` and :guilabel:`PAC password`)." msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 msgid "Configuring PAC credentials from the Accounting settings." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:281 -msgid "If you do not have credentials, but want to test the electronic invoicing, you can activate the :guilabel:`MX PAC test environment` checkbox, and select :guilabel:`Solucion Factible` as the |PAC|. You do not need to add a username or password for a test environment." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:383 +msgid "To test the electronic invoicing without credentials, activate the :guilabel:`MX PAC test environment` checkbox, and select :guilabel:`Solucion Factible` as the :guilabel:`PAC`. It is not required to add a username or password for a test environment." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:286 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:390 msgid ".cer and .key certificates" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:288 -msgid "The `digital certificates of the company `_ must be uploaded within the :guilabel:`MX Certificates` section. To do so, navigate to :menuselection:`Settings --> Accounting --> Electronic Invoicing (MX)`. Under the :guilabel:`MX Certificates` section, select :guilabel:`Add a line`, and a window will open. Click :guilabel:`Create`, and from there, upload your digital :guilabel:`Certificate` (:file:`.cer` file), your :guilabel:`Certificate Key` (:file:`.key` file), and your :guilabel:`Certificate Password`. To finish, click on :guilabel:`Save & Close`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:392 +msgid "The `digital certificates of the company `_ must be uploaded within the :guilabel:`Certificates` section. To do so, navigate to :menuselection:`Settings --> General Settings --> Certificates and Keys`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Certificate and key upload inputs." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:397 +msgid "Under :guilabel:`Manage your certificates`, click the :icon:`fa-right-arrow` :guilabel:`Keys` link to access the :guilabel:`Keys` list view. Click :guilabel:`Create`, upload the digital :guilabel:`Key file` (:file:`.key` file), add a :guilabel:`Name` to the key, and enter the :guilabel:`Private key password`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:301 -msgid "If you still do not have one of the contracted |PAC|\\s and you want to test electronic invoicing, you can use the following |SAT| test certificates:" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:402 +msgid "From :menuselection:`Settings --> General Settings --> Certificates and Keys`, select :guilabel:`Certificates` to access the :guilabel:`Certificate` list view. Click :guilabel:`Create`, upload the digital :guilabel:`Certificate` (:file:`.cer` file), add a :guilabel:`Name` to the certificate, and select the :guilabel:`Private Key` created on the previous step from the drop-down menu." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:304 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:409 +msgid "The :guilabel:`Certificate Password` and :guilabel:`Public Key` fields on :guilabel:`Certificate` records are optional." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:413 +msgid "In order to test the electronic invoicing, the following |SAT| test certificates are provided:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:415 msgid ":download:`Certificate `" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:305 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:416 msgid ":download:`Certificate Key `" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:306 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:417 msgid "**Password**: ``12345678a``" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:309 -#: ../../content/applications/finance/fiscal_localizations/uruguay.rst:288 -msgid "Workflows" -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:314 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:427 msgid "The invoicing process in Odoo is based on `Annex 20 `_ version 4.0 of electronic invoicing of the |SAT|." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:321 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:436 msgid "To start invoicing from Odoo, a customer invoice must be created using the :doc:`standard invoicing flow <../accounting/customer_invoices>`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:324 -msgid "While the document is in draft mode, changes can be made to it (the correct :guilabel:`Payment Way` or :guilabel:`Usage` that the customer might require can be added, for example.)" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:439 +msgid "While the document is in draft mode, changes can be made to it, some fields take values previously set on the sale order or the contact." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:327 -msgid "After you :guilabel:`Confirm` the customer invoice, a blue message appears stating: :guilabel:`The invoice will be processed asynchronously by the following E-invoicing service: CFDI (4.0)`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:442 +msgid "The fields that need to be reviewed are:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:330 -msgid "Pressing the :guilabel:`Process Now` button sends the document to the government so it can be signed. After receiving the signed document back from the government, the :guilabel:`Fiscal Folio` field appears on the document, and the XML file is attached in the chatter." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:444 +msgid "CFDI to public." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:335 -msgid "If you click :guilabel:`Retry` in the :guilabel:`SAT status` field on the invoice, you can confirm if the XML file is valid in the |SAT|." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:446 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1483 +msgid "Payment Policy" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:338 -msgid "If you are in a testing environment, you will always receive the message :guilabel:`Not Found`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:447 +msgid "Payment Method (If Payment Policy is not set as |PPD|)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:340 -msgid "To send the signed invoice to your client by mail, you can send both the XML and PDF files together, directly from Odoo, by clicking the :guilabel:`Send & Print` button. You can also download the PDF file to your computer, by clicking the :guilabel:`Print` button, and selecting the desired print option." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:450 +msgid ":guilabel:`Usage`, :guilabel:`Payment Policy` and :guilabel:`Payment Method` can be previously set on a sale order and/or can be set on the contact for every invoice." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:348 -msgid "While an invoice is a document type \"I\" (Ingreso), a credit note is a document type \"E\" (Egreso)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:453 +msgid "The payment policy is a selectable field on the invoice and can be manually set to the required policy, however if no policy is selected, Odoo will compute an automatic policy based on the following general rules:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:350 -msgid "The only addition to the :doc:`standard flow for credit notes <../accounting/customer_invoices/credit_notes>` is that, as a requirement of the |SAT|, there has to be a relation between a credit note and an invoice through the fiscal folio." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:457 +msgid "The value will be set to |PUE| if the due date in which the payment is expected is within the current month, in case the date is outside the current month, the policy will be set to |PPD| instead." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:354 -msgid "Because of this requirement, the field :guilabel:`CFDI Origin` adds this relation with a `01|`, followed by the fiscal folio of the original invoice." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:462 +msgid "If the payment policy is not selected and |PPD| policy is expected, either select an invoice :guilabel:`Due Date` on a different month than the current one, or choose :guilabel:`Payment terms` that imply changing the due month (i.e., :guilabel:`30 Days`, or :guilabel:`15 Days`, as long as they fall on the next month)." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:467 +msgid "After clicking on :guilabel:`Confirm` in the customer invoice, click on the :guilabel:`Send` button to process the invoice with the government. Make sure that the :guilabel:`CFDI` checkbox is marked." msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Example CFDI Origin number." +msgid "CFDI Checkbox" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:473 +msgid "After receiving the signed document back from the government, the :guilabel:`Fiscal Folio` field appears on the document, and the XML file appears both in the |CFDI| tab and attached in the chatter." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:477 +msgid "If an email address is configured on the customer contact record, marking the :guilabel:`by Email` and :guilabel:`CFDI` checkboxes sends both the XML and PDF files together." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:480 +msgid "To download the PDF file locally, click the :guilabel:`Print` button." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:483 +msgid "When clicking :guilabel:`Update SAT`, the :guilabel:`SAT status` field on the invoice will confirm if the XML file is **Validated** in the |SAT|." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:486 +msgid "On a testing environment, the message :guilabel:`Not Found` will always come up." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:489 +msgid "If the partner does not contain the :guilabel:`Country` or :guilabel:`Zip` the invoicing is assumed as a |CFDI| to public and the invoicing will be addressed to the generic customer. If however, these fields are left empty and the user unticks the :guilabel:`CFDI to public` checkbox, a pop-up will appear blocking the operation." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:499 +msgid "While an invoice is a document type \"I\" (Ingreso), a credit note is a document type \"E\" (Egreso)." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:501 +msgid "The only addition to the :doc:`standard flow for credit notes <../accounting/customer_invoices/credit_notes>` is that, as a requirement of the |SAT|, there has to be a relation between a credit note and an invoice through the fiscal folio." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:505 +msgid "Because of this requirement, the field :guilabel:`CFDI Origin` adds this relation with a `01|`, followed by the fiscal folio of the original invoice." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:361 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:509 msgid "For the :guilabel:`CFDI Origin` field to be automatically added, use the :guilabel:`Add Credit Note` button from the invoice, instead of creating it manually." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:365 -msgid "Payment complements" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:517 +msgid "Vendor bills have to have a fiscal folio for reports and payments to work correctly, if the vendor bill was created by the purchase app or added manually, just add the XML file of the invoice on the chatter **As a log note** and the fiscal folio will be updated accordingly, keep in mind that the bill **Must be in draft state** for the update to happen." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:368 -msgid "Payment policy" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:523 +msgid "When clicking :guilabel:`Update SAT`, the :guilabel:`SAT status` field on the invoice will confirm if the XML file is **Validated** in the |SAT|, this is also true for vendor bills." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:370 -msgid "One addition of the Mexican localization is the :guilabel:`Payment Policy` field. According to the SAT documentation, there are two types of payments:" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:526 +msgid "See also :doc:`../accounting/vendor_bills`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:373 -msgid "`PUE` (Pago en una Sola Exhibición/Payment in a Single Exhibition)" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:536 +msgid "Payment policy" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:374 -msgid "`PPD` (Pago en Parcialidades o Diferido/Payment in Installements or Deferred)" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:538 +msgid "One addition of the Mexican localization is the :guilabel:`Payment Policy` field. `According to the SAT documentation `_, there are two types of payments:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:377 -msgid ":doc:`../../inventory_and_mrp/inventory/product_management/inventory_valuation/landed_costs`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:542 +msgid ":guilabel:`PUE` (Pago en una Sola Exhibición/Payment in a Single Exhibition)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:379 -msgid "The difference lies in the *Due Date* or *Payment Terms* of the invoice." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:543 +msgid ":guilabel:`PPD` (Pago en Parcialidades o Diferido/Payment in Installements or Deferred)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:381 -msgid "To configure |PUE| invoices, navigate to :menuselection:`Accounting --> Customers --> Invoices`, and either select an invoice :guilabel:`Due Date` within the same month, or choose a payment term that does not imply changing the due month (immediate payment, 15 days, 21 days, all falling within the current month)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:546 +msgid "Payment Complements are only generated if the policy of the invoice is set to |PPD|, please note that it is a requirement to set the :guilabel:`Payment Method` to something different than **99 - Por definir**." msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 msgid "Example of an invoice with the PUE requirements." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:390 -msgid "Some :guilabel:`Payment Terms` are already installed by default, and can be managed from :menuselection:`Accounting --> Configuration --> Payment Terms`." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:393 -msgid "To configure |PPD| invoices, navigate to :menuselection:`Accounting --> Customers --> Invoices`, and select an invoice with a :guilabel:`Due Date` after the first day of the following month. This also applies if your :guilabel:`Payment Term` is due in the following month." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:553 +msgid "If the invoice has a due date outside the current month, it will default to |PPD|." msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 msgid "Example of an invoice with the PPD requirements." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:401 -msgid "Because the |PPD| policy implies that an invoice is not going to get paid at the moment, the correct :guilabel:`Payment Way` for the |PPD| invoices is :guilabel:`99 - Por Definir` (To define)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:561 +msgid "Payment flow" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:406 -msgid "Payment flow" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:563 +msgid "In both cases, the payment process in Odoo :doc:`is the same <../accounting/payments>`, the main difference being payments related to |PPD| invoices, by law, need to be sent to the government as a document type \"P\" (Pago)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:408 -msgid "In both cases, the payment process in Odoo :doc:`is the same <../accounting/customer_invoices>`, the main difference being payments related to |PPD| invoices trigger the creation of a document type \"P\" (Pago)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:567 +msgid "If a payment is related to a |PUE| invoice, it can be registered through the payment popup, and be associated with the corresponding invoice. To do so, navigate to :menuselection:`Accounting --> Customers --> Invoices`, and select an invoice. Then, click the :guilabel:`Pay` button to open the payment popup, set the :guilabel:`Payment Way` and any other fields, and click :guilabel:`Create Payment`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:412 -msgid "If a payment is related to a |PUE| invoice, it can be registered with the wizard, and be associated with the corresponding invoice. To do so, navigate to :menuselection:`Accounting --> Customers --> Invoices`, and select an invoice. Then, click the :guilabel:`Register Payment` button. The invoice status changes to :guilabel:`In Payment`, since the payment is effectively validated when it is bank reconciled." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:574 +msgid ":doc:`../accounting/payments`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:419 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:575 msgid ":doc:`../accounting/bank/reconciliation`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:421 -msgid "While this process is the same for PPD invoices, the addition of the creating an :doc:`electronic document <../accounting/customer_invoices/electronic_invoicing>` means some additional requirements are needed to correctly send the document to the |SAT|." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:577 +msgid "While this process is the same for PPD invoices, the addition of creating an :doc:`electronic document <../accounting/customer_invoices/electronic_invoicing>` means some additional requirements are needed to correctly send the document to the |SAT|." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:425 -msgid "From an invoice, you need to confirm the specific :guilabel:`Payment Way` where you received the payment. Because of this, the :guilabel:`Payment Way` field **cannot** be set as `99 - Por Definir (To Define)`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:581 +msgid "From a legal perspective, PPD invoices **must** include the specific :guilabel:`Payment Way` that the payment was received. Because of this, the :guilabel:`Payment Way` field **cannot** be set as :guilabel:`To Define`, thus the field will become invisible when selecting it." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:429 -msgid "If you are going to add a bank account number in the :guilabel:`Accounting` tab of a customer's contact card, it must have a valid account number." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:586 +msgid "If a bank account number is required, add it in the :guilabel:`Accounting` tab of a customer's contact record." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:433 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:588 msgid "The exact configurations are in the `Anexo 20 of the SAT `_. Usually, the :guilabel:`Bank Account` needs to be 10 or 18 digits for transfers, 16 for credit or debit cards." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:437 -msgid "If a payment is related to a signed invoice with the :guilabel:`Payment Policy` `PPD`, Odoo generates the corresponding payment complement automatically, once you click :guilabel:`Process Now`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:593 +msgid "If a fully-reconciled payment is related to an invoice with a :guilabel:`Fiscal Folio`, the :guilabel:`Update Payments` appears. Click the :guilabel:`Update Payments` button to send the **payment complement** XML file to the government automatically and display it in the |CFDI| tab in both the invoice and the payment." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "CFDI (4.0) E-invoicing service process payment now message." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:599 +msgid "While it is a bad fiscal practice, the |PUE| payments can also be sent to the government, however it is required to click :guilabel:`Force CFDI` in the :guilabel:`CFDI` tab for this." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:445 -msgid "A payment in MXN **cannot** be used to pay multiple invoices in USD. Instead, the payment should be separated into multiple payments, using the :guilabel:`Register Payment` button on the corresponding invoices." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:602 +msgid "Similar to an invoice or credit note, the PDF and XML can be sent to the final customer. To do so, click the :icon:`fa-cog` :guilabel:`(gear)` icon to open the actions drop-down menu and select :guilabel:`Send receipt by email` from the payment view." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:450 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:606 +msgid "Regardless of whether the payment was created with or without reconciliation, it is possible to download the payment PDF from the :guilabel:`CFDI` tab on the invoice by clicking the :guilabel:`print` button." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 +msgid "Example of the print button on the CFDI tab." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:616 msgid "Invoice cancellations" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:452 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:618 msgid "It is possible to cancel the EDI documents sent to the |SAT|. According to the `Reforma Fiscal 2022 `_, since January 1st, 2022, there are two requirements for this:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:456 -msgid "With all cancellation requests, you **must** specify a *cancellation reason*." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:622 +msgid "All cancellation requests require a *cancellation reason*." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:457 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:623 msgid "After 24 hours from the invoice creation, the client must be asked to approve the cancellation. If there is no response within 72 hours, the cancellation is processed automatically." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:460 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:626 +msgid "Invoice cancellations are updated automatically on Odoo but can take some time, to check the status of the cancellation just press the :guilabel:`Update SAT` button." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:629 msgid "Invoice cancellations can be made for one of the following reasons:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:462 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:631 msgid "01 - Invoice issued with errors (with related document)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:463 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:632 msgid "02 - Invoice issued with errors (no replacement)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:464 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:633 msgid "03 - The operation was not carried out" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:465 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:634 msgid "04 - Nominative operation related to the global invoice" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:467 -msgid "To initiate a cancellation, go to :menuselection:`Accounting --> Customers --> Invoices`, select the posted invoice to cancel, and click :guilabel:`Request Cancel`. Then, refer to the :ref:`localizations/mexico/01-invoice-cancellation` or :ref:`localizations/mexico/02-03-04-invoice-cancellation` sections, depending on the cancellation reason." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:636 +msgid "To initiate a cancellation, go to :menuselection:`Accounting --> Customers --> Invoices`, select the posted invoice to cancel, and click :guilabel:`Request Cancel`. Then, refer to the :ref:`l10n/mx/01-invoice-cancellation` or :ref:`l10n/mx/02-03-04-invoice-cancellation` sections, depending on the cancellation reason." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:474 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:642 msgid "Alternatively, request a cancellation from the :guilabel:`CFDI` tab by clicking :guilabel:`Cancel` on the line item." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:480 -msgid "Cancellation reason 01 - Invoice issued with errors (with related document)" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:646 +msgid "If a cancellation is requested on a locked period, the CFDI will be cancelled but not the accounting entry." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:482 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:648 +msgid "If the client rejects the cancellation, the invoice cancellation line item is removed from the :guilabel:`CFDI` tab." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:654 +msgid "Cancellation reason 01" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:656 msgid "In the :guilabel:`Request CFDI Cancellation` pop-up window, select :guilabel:`01 - Invoice issued with errors (with related document)` from the :guilabel:`Reason` field and click :guilabel:`Create Replacement Invoice` to create a new draft invoice. This new draft invoice replaces the previous invoice, along with the related |CFDI|." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:486 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:660 msgid ":guilabel:`Confirm` the draft and :guilabel:`Send & Print` the invoice." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:487 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:661 msgid "Return to the initial invoice (i.e., the invoice from which you first requested the cancellation). Notice the :guilabel:`Substituted By` field appears with a reference to the new replacement invoice." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:490 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:664 msgid "Click :guilabel:`Request Cancel`. In the :guilabel:`Request CFDI Cancellation` pop-up window, the :guilabel:`01 - Invoice issued with errors (with related document)` option is automatically selected in the :guilabel:`Reason` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:493 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:667 msgid "Click :guilabel:`Confirm`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:495 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:669 msgid "The invoice cancellation is then generated with a reason line item in the :guilabel:`CFDI` tab." msgstr "" @@ -30667,465 +31879,962 @@ msgstr "" msgid "Canceled invoice line item in the CFDI tab." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:501 -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:520 -msgid "If the client rejects the cancellation, the invoice cancellation line item is removed from the :guilabel:`CFDI` tab." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:503 -msgid "When using the *01 - Invoice issued with errors (with related document)* cancellation reason, the `04|` prefix may appear in the :guilabel:`Fiscal Folio` field. This is an internal prefix used by Odoo to complete the cancellation and **does not** mean that the cancellation reason was *04 - Nominative operation related to the global invoice*." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:675 +msgid "When using the :guilabel:`01 - Invoice issued with errors (with related document)` cancellation reason, the `04|` prefix appears in the :guilabel:`Fiscal Folio` field. This is an internal prefix used by Odoo to complete the cancellation and **does not** mean that the cancellation reason was :guilabel:`04 - Nominative operation related to the global invoice`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:511 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:683 msgid "Cancellation reasons 02, 03, and 04" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:513 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:685 msgid "In the :guilabel:`Request CFDI Cancellation` pop-up window, select the desired cancellation :guilabel:`Reason` and :guilabel:`Confirm` the cancellation." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:516 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:688 msgid "Upon doing so, the invoice cancellation is generated with a reason line item in the :guilabel:`CFDI` tab." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:524 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:692 +msgid "If the :guilabel:`SAT Status` goes back to **Validated** it could be due to one of these three reasons:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:695 +msgid "The invoice is labeled as *No Cancelable* in the `SAT Website `_. due to the fact that it has a valid related document: Either another invoice linked with the :guilabel:`CFDI Origin` field or a Payment Complemement. If so, you need to cancel any other related document first." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:699 +msgid "The cancellation request is still being processed by the |SAT|. If so, wait a few minutes and try again." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:701 +msgid "The final customer needs to reject or accept the cancellation request in their `Buzón Tributario `_. This can take up to 72 hours and, in case that the cancellation requests gets rejected, you will need to repeat the process again." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:707 +msgid "`Tool to validate Mexican Electronic Documents (CFDI) status `_" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:710 +msgid "For the cancellation reasons **02**, **03** and **04**, the :guilabel:`Create Replacement Invoice` button is replaced by a :guilabel:`Confirm` button that requests the cancellation immediately." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:713 +msgid "Both the current :guilabel:`State` and :guilabel:`Cancellation Reason` can be found in the :guilabel:`CFDI` tab." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 +msgid "Old invoice with CFDI Origin." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:722 msgid "Payment cancellations" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:526 -msgid "It is also possible to cancel *Payment Complements*. For this, go to the payment, via :menuselection:`Accounting --> Customers --> Payments`, and select :guilabel:`Request EDI Cancellation`. As with invoices, a blue button will appear. Click :guilabel:`Process now`, and the document will be sent to the |SAT|. After a few seconds, you can click :guilabel:`Retry` to confirm the current |SAT| status." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:724 +msgid "To cancel :ref:`payment complements `, go to the :guilabel:`CFDI` tab of the related invoice and click :guilabel:`Cancel` on the line of the payment complement." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:532 -msgid "Finally, the payment status is moved to :guilabel:`Cancelled`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:727 +msgid "Like with invoices, go to the payment and click :guilabel:`Update SAT` in order to change the :guilabel:`SAT Status` and :guilabel:`Status` to :guilabel:`Cancelled`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:535 -msgid "Just like invoices, when you create a new *Payment Complement*, you can add the relation of the original document, by adding a `04|` plus the fiscal folio in the :guilabel:`CFDI Origin` field." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:731 +msgid "Just like invoices, when creating a new payment complement, it is possible to add the relation of the original document, by adding a `04|` plus the fiscal folio in the :guilabel:`CFDI Origin` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:539 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:735 +msgid "This action cancels the invoice and marks the :guilabel:`Reason` as :guilabel:`01 - Invoice issued with errors (with related document)`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:741 msgid "Invoicing special use cases" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:542 -msgid "CFDI to public" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:746 +msgid "CFDI relations" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:748 +msgid "Sometimes it is needed to relate the current document to previously signed CFDIs, to do so just fill the :guilabel:`CFDI Origin` field on the invoice indicating a relation, there are 7 possible values:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:751 +msgid "01: Nota de crédito" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:752 +msgid "02: Nota de débito de los documentos relacionados" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:753 +msgid "03: Devolución de mercancía sobre facturas o traslados previos" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:754 +msgid "04: Sustitución de los CFDI previos" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:755 +msgid "05: Traslados de mercancias facturados previamente" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:544 -msgid "If the customer you are selling goods or services to does not require an invoice, a *CFDI to Public* has to be created." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:756 +msgid "06: Factura generada por los traslados previos" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:547 -msgid "If you use the :guilabel:`Customer` name `PUBLICO EN GENERAL`, an error will be triggered. This is a main change in the CFDI 4.0 that requires invoices with that specific name to need additional fields, which Odoo does not currently support. So, for a *CFDI to Public* to be created, you need to add any name to your customer that is **not** `PUBLICO EN GENERAL`. (For example: `CLIENTE FINAL`)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:757 +msgid "07: CFDI por aplicación de anticipo" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:552 -msgid "In addition to this, it is required that the :guilabel:`ZIP` code of your company is added, the generic |RFC| is set as `XAXX010101000`, and the :guilabel:`Fiscal Regime` of your customer must be set as: `Sin obligaciones fiscales`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:760 +msgid "The format is: Origin Type|UUID1, UUID2, ...., UUIDn where more than one Origin Type can be added." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:764 +msgid "Here is an example with two relations:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:771 +msgid "The first section has relation type **04** with **1 UUID**" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:772 +msgid "The second section has relation type **07** with **2 UUIDs**" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:774 +msgid "Additionally any combination is also visible on the signed PDF." msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "CFDI to Public Customer field configuration." +msgid "Example of the PDF with 3 relations." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:562 -msgid "The main currency in Mexico is MXN. While this is mandatory for all Mexican companies, it is possible to send and receive invoices (and payments) in different currencies. To enable the use of :doc:`multicurrency <../accounting/get_started/multi_currency>`, navigate to the :menuselection:`Accounting --> Settings --> Currencies`, and set :guilabel:`Mexican Bank` as the :guilabel:`Service` in the :guilabel:`Automatic Currency Rates` section. Then, set the :guilabel:`Interval` field to the frequency you wish to update the exchange rates." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:784 +msgid "The :guilabel:`Main Currency` in Mexico is MXN. While this is mandatory for all Mexican companies, it is possible to send and receive invoices (and payments) in different currencies. To enable the use of :doc:`multicurrency <../accounting/get_started/multi_currency>`, navigate to the :menuselection:`Accounting --> Configuration --> Currencies`, and set :guilabel:`[MX] Bank of Mexico` as the :guilabel:`Service` in the :guilabel:`Automatic Currency Rates` section. Then, set the :guilabel:`Interval` field to the frequency you wish to update the exchange rates." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:569 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:791 msgid "This way, the XML file of the document will have the correct exchange rate, and the total amount, in both the foreign currency and in MXN." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:572 -msgid "It is highly recommended to use :doc:`a bank account for each currency <../accounting/bank/foreign_currency>`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:794 +msgid "It is highly recommended to use separate :doc:`bank accounts for each currency <../accounting/bank/foreign_currency>`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:576 -msgid "The only currencies that automatically update their exchange rate daily are: USD, EUR, GBP, and JPY." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:798 +msgid "The only currencies that automatically update their exchange rate daily are: USD, EUR, GBP, JPY and CNY." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Multi-currency configuration in the Accounting settings." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:806 +msgid "By law, electronic documents sent to the government cannot have negative lines, as this can trigger errors. Therefore, when using :doc:`Gift Cards <../../sales/sales/products_prices/ewallets_giftcards>` or :doc:`Loyalty Programs <../../sales/sales/products_prices/loyalty_discount>`, the subsequent negative lines will be translated in the XML as if they were regular :doc:`Discounts <../../sales/sales/products_prices/prices/pricing/>`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:813 +msgid "In order to set this up, navigate to :menuselection:`Sales --> Products --> Products` and create a product `Discounts`, make sure that it has a valid :guilabel:`Tax` (usually :guilabel:`IVA` at `16%`)." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:583 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:817 +msgid "After this, create and sign the invoice via |CFDI|, and add the `Discounts` product at the bottom. In the XML the discount should be subtracted from the first invoice line available, Odoo will try to subtract from each line the total amount in order until all the discount has been applied." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:822 +msgid "A `Discount` and `UNSPSC Product Category` for each product variant related to :guilabel:`Gift Cards` or :guilabel:`Loyalty Programs` have to be created." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:828 msgid "Down payments" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:585 -msgid "There can be cases where you receive a payment in advance from a customer that needs to be applied to an invoice later. In order to do this in Odoo, it is required to properly link invoices to each other with the :guilabel:`CFDI Origin` field. To do so, it is necessary to have the :doc:`Sales <../../sales>` app installed." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:830 +msgid "A common practice in Mexico is the usage of :doc:`down payments <../../sales/sales/invoicing/down_payment>`. It's usage primarily consists of cases where you receive a payment for a good or service where either the product or the price (or both) hasn't been determinated at the moment." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:835 +msgid "The |SAT| allows two diferent ways to handle this process: both of them involve linking all invoices to each other with the :guilabel:`CFDI Origin` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:591 -msgid "`The official documentation for registration of down payments in Mexico `_." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:839 +msgid "For this process, the :doc:`Sales <../../sales>` app must be installed." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:594 -msgid "First, navigate to the :menuselection:`Sales` app to create a product `Anticipo` and configure it. The :guilabel:`Product Type` must be :guilabel:`Service`, and use the :guilabel:`UNSPSC Category` must be: `84111506 Servicios de facturación`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:842 +msgid "`The official documentation for registration of down payments in Mexico `_." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:598 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:848 +msgid "First, navigate to :menuselection:`Sales --> Products --> Products` to create a product `Anticipo` and configure it. The :guilabel:`Product Type` must be :guilabel:`Service`, and use the :guilabel:`UNSPSC Category` :guilabel:`84111506 Servicios de facturación`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:852 msgid "Then, go to :menuselection:`Sales --> Settings --> Invoicing --> Down Payments`, and add the *Anticipo* product as the default." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:601 -msgid "Create a sales order with the total amount, and create a down payment (either using a percentage or fixed amount). Then, sign the document, and :guilabel:`Register the Payment`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:858 +msgid "Method A" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:604 -msgid "When the time comes for the customer to get the final invoice, create it again from the same sales order. In the :guilabel:`Create Invoices` wizard, select :guilabel:`Regular Invoice`, and uncheck :guilabel:`Deduct down payments`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:860 +msgid "This method consists of creating a down payment invoice, creating a invoice for the total amount, and finally, creating a credit note for the total of the down payment." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:608 -msgid "Then, copy the :guilabel:`Fiscal Folio` from the first invoice, and paste it into the :guilabel:`CDFI Origin` of the second invoice, adding the prefix `07|` before the value. Then, sign the document." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:863 +msgid "First, create a sales order with the total amount, and create a down payment from it (either using a percentage or fixed amount). Then, sign the document via CFDI, and register the payment." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:612 -msgid "After this, create a credit note for the first invoice. Copy the :guilabel:`Fiscal Folio` from the second invoice, and paste it in the :guilabel:`CFDI Origin` of the credit note, adding the prefix `07|`. Then, sign the document." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:866 +msgid "When the time comes for the customer to get the final invoice, create it again from the same sales order. In the :guilabel:`Create Invoice` popup, select :guilabel:`Regular Invoice`. Make sure to delete the line that contains the product *Anticipo*." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:616 -msgid "With this, all electronic documents are linked to each other. The final step is to fully pay the new invoice. At the bottom of the new invoice, you can find the credit note in the :guilabel:`Outstanding credits` - add it as payment. Finally, register the remaining amount with the :guilabel:`Register Payment` wizard." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:871 +msgid "When using down payments with the Mexican localization, make sure that the :guilabel:`Invoicing Policy` of the products are :guilabel:`Ordered quantities`. Otherwise a customer credit note will be created." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:622 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:875 +msgid "Then, copy the :guilabel:`Fiscal Folio` from the down payment invoice, and paste it into the :guilabel:`CDFI Origin` of the final invoice, adding the prefix `07|` before the value and sign the document via |CFDI|." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:879 +msgid "Finally, create a credit note for the first invoice. Copy the :guilabel:`Fiscal Folio` from the final invoice, and paste it in the :guilabel:`CFDI Origin` of the credit note, adding the prefix `07|`. Then, sign the document via |CFDI|." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:883 +msgid "With this, all electronic documents are linked to each other. The final step is to fully pay the new invoice. At the bottom of the new invoice, you can find the credit note in the :guilabel:`Outstanding credits` - add it as payment. Finally, register the remaining amount with the :guilabel:`Pay` popup." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:888 +msgid "In the sales order, all three documents should appear as \"In Payment\"." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:891 +msgid "Method B" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:893 +msgid "Another, simpler way to fulfill |SAT| requirements involves creating only the down payment invoice, and a second invoice for the remnant. This method involves the fact that negative lines are treated as discounts." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:897 +msgid "For this, follow the same process as :ref:`Method A `, up until the creation of the final invoice. Do not delete the line that contains the *Anticipo* and instead rename the other products :guilabel:`Description` to include the text `CFDI por remanente de un anticipo`. Don't forget to add the :guilabel:`Fiscal Folio` of the down payment invoice in the :guilabel:`CDFI Origin` of the final invoice, adding the prefix `07|`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:903 +msgid "Finally, sign the final invoice via |CFDI|." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:908 +msgid "Addendas and complements" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:910 +msgid "Addendas and complements can be included in the XML. To add one, go to :menuselection:`Accounting --> Configuration --> Addendas & Complementos (MX)` and :guilabel:`New` to enter the code to be injected. Additional fields beyond standard Odoo may be required." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:915 +msgid "This section might require techincal knowledge as well as technical debt, it is recommended to ask your account manager for the best technical assistance." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:918 +msgid "Once the desired nodes are created, they can be selected on each contact to make them appear on every invoice addressed to that contact. By default all the selected nodes will be added automatically on every invoice." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:922 +msgid "It is also possible to just select the nodes as needed on every invoice by selecting the :guilabel:`Other info` tab and then selecting the desired nodes from :guilabel:`Addendas & Complementos`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:927 +msgid "It is possible to add more than one per contact or per invoice." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:932 +msgid "XML reader" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:934 +msgid "In certain occasions, such as when you are creating invoices in another software or in the |SAT| directly, you would want to upload the invoices in Odoo. The XML Reader allows you to retrieve the data from an XML file. To do this, navigate to :menuselection:`Accounting --> Customers --> Invoices` and, in the list view, click the :guilabel:`Upload` button to select any number of XML files, and draft invoices will be automatically created. This can work also by dragging the files from your computer and dropping them in the view." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:941 +msgid "The draft invoices will retrieve the :guilabel:`Customer information` (if it doesn't exist, new ones will be created), the :guilabel:`Product Lines` (only if products with the same name already exist) and will calculate all taxes and additional fields exclusive to the Mexican Localization. The import information will appear in the chatter." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:947 +msgid "Depending on where the invoice was created, XML files could have different values from the total calculated in Odoo. **Always** double-check any document uploaded this way." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:950 +msgid ":guilabel:`Customer Invoices` created this way will be able to create **payment complements** and to be canceled at any time. If you use the :guilabel:`Print` button, the PDF document will have all the corresponding information." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:954 +msgid "This can be done for :guilabel:`Vendor Bills` too." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:957 +msgid "To retrieve the :guilabel:`Fiscal Folio`, drag and drop XML files as a log note in the chatter for previously created draft invoices." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:963 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1484 +msgid "CFDI to public" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:965 +msgid "The Mexican government requires that any goods or services that are sold must be backed up by an invoice. If the customer does not require an invoice or has no |RFC|, a *CFDI to Public* has to be created also known as a \"nominative\" invoice." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:969 +msgid "A contact must be created and it must have a particular name." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:971 +msgid "If the :guilabel:`CFDI to Public` checkbox in either a sales order or an invoice is checked, the final XML will override the data in the invoice contact and will add the following characteristics:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:974 +msgid "|RFC|: **XAXX010101000** if it is a national customer or **XEXX010101000** if it is a foreign customer" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:976 +msgid ":guilabel:`ZIP` code: The same code of the company" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:977 +msgid ":guilabel:`Usage`: S01 - Without Fiscal Effects" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 +msgid "CFDI to Public Checkbox" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:982 +msgid "If the final customer doesn't share any details, create a generic :guilabel:`Customer`. The name cannot be `PUBLICO EN GENERAL` or an error will be triggered (it can be, for example, `CLIENTE FINAL`)." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:987 +msgid "By default sending the invoice is not allowed if the partner does not have either the *Country* or *Zip code* set, however this is not required if the :guilabel:`CFDI to public` checkbox is active." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:992 +msgid "`Regla 2.7.1.21 Expedición de comprobantes en operaciones con el público en general `_." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:998 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1416 +msgid "Global invoice" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1000 +msgid "If by the end of a certain period of time (that can vary from daily to bimonthly, depending of your company's legal needs and preferences) and the customer still has sales that weren't marked as regular invoices or individual *CFDI to Public* invoices, the |SAT| allows for the creation of a single invoice that can contain all operations, known as a *global invoice*." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1006 +msgid "For this process, the :doc:`Sales <../../sales/sales>` app must be installed." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1009 +msgid "`Guía de llenado del CFDI global `_" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1013 +msgid "Sales flow" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1015 +msgid "First, it is necessary to create a special :guilabel:`Journal` created in :menuselection:`Accounting --> Configuration --> Journals` with the purpose of keeping a separate sequence." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1018 +msgid "Then, make sure that all the sales orders that need to be signed have the following configurations:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1020 +msgid ":guilabel:`CFDI to Public` checkbox enabled" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1021 +msgid ":guilabel:`Invoice Status` marked as :guilabel:`To Invoice`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1023 +msgid "After this, go to :menuselection:`Sales --> To Invoice --> Orders to Invoice`, select all relevant sales orders and press :guilabel:`Create Invoices`. Make sure to disable the :guilabel:`Consolidated Billing` checkbox and click :guilabel:`Create Draft Invoice`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1027 +msgid "Odoo will redirect to a list of invoices. Select all of them and in the :icon:`fa-gear` :guilabel:`Actions` drop-down menu select :guilabel:`Post entries`. Select all posted invoices again and go back to the :icon:`fa-gear` :guilabel:`Actions` drop-down menu to select :guilabel:`Create Global Invoice`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1032 +msgid "In the wizard, select the :guilabel:`Periodicity` indicated by a professional accountant and press :guilabel:`Create`. All invoices should be signed under the same XML file, with the same :guilabel:`Fiscal Folio`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1037 +msgid "Click :guilabel:`Show` in the :guilabel:`CFDI` tab to display a list with all related invoices." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1038 +msgid "Click :guilabel:`Cancel` in the :guilabel:`CFDI` tab to cancel the global invoice in both the |SAT| and Odoo." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1042 +msgid "Global invoices created this way won't have a **PDF** in them as their information is already within Odoo and is not to be seen by a customer." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1048 +msgid "Electronic accounting (reporting)" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1050 +msgid "For Mexico, `Electronic Accounting `_ refers to the obligation to keep accounting records and entries through electronic means, and to enter accounting information on a monthly basis, through the |SAT| website." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1055 +msgid "It consists of three main XML files:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1057 +msgid "The updated list of the chart of accounts that is currently in use" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1058 +msgid "A monthly trial balance, plus a closing entry report, also known as: *Trial Balance Month 13*" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1059 +msgid "An export of the journal entries in the general ledger (optional except in the case of a compulsory audit)" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1062 +msgid "The resulting XML files follow the requirements of the `Anexo Técnico de Contabilidad Electrónica 1.3 `_." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1065 +msgid "In addition to this, it is possible to generate the `DIOT `_: a report of vendors' journal entries that involve IVA taxes that can be exported in a TXT file." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1071 +msgid "In order to use these reports, the following modules must be installed:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1073 +msgid ":guilabel:`Odoo Mexican Localization Reports` `l10n_mx_reports`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1074 +msgid ":guilabel:`Mexico - Month 13 Trial Balance` `l10n_mx_reports_closing`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1075 +msgid ":guilabel:`Odoo Mexican XML Polizas Export` `l10n_mx_xml_polizas`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1077 +msgid "The *chart of accounts* and the *Trial Balance Month 13* reports can be found in :menuselection:`Accounting --> Reporting --> Trial Balance`. The *DIOT* report can be found in :menuselection:`Accounting --> Reporting --> Tax Report`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1082 +msgid "The specific characteristics and obligations of the reports that you send might change according to your fiscal regime. Always contact your accountant before sending any documents to the government." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1091 +msgid "The :doc:`chart of accounts <../accounting/get_started/chart_of_accounts>` in Mexico follows a specific pattern based on |SAT|'s' `Código agrupador de cuentas `_." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1095 +msgid "It is possible to create any account, as long as it respects |SAT|'s encoding group: the pattern is `NNN.YY.ZZ` or `NNN.YY.ZZZ`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1099 +msgid "Some examples are `102.01.99` or `401.01.001`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1101 +msgid "When a new account is created in :menuselection:`Accounting --> Configuration --> Chart of Accounts`, with the |SAT| encoding group pattern, the correct grouping code appears in :guilabel:`Tags`, and the account appears in the *COA* report." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1105 +msgid "Once all accounts are created, make sure the correct :guilabel:`Tags` are added as these mark the nature of the account." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1109 +msgid "It is not advised use any pattern that ends a section with a 0 (such as `100.01.01`, `301.00.003` or `604.77.00`). This triggers errors in the report. By default Odoo will mark the accounts as yellow if the numbering will cause issue later on, this is to prevent reports from providing inaccurate data." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1114 +msgid "Once everything is set up, go to :menuselection:`Accounting --> Reporting --> Trial Balance`, and click the :guilabel:`COA SAT (XML)` button to generate an XML file containing all of the accounts. This XML file is ready to upload to the |SAT| website." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1123 +msgid "The trial balance reports the initial balance, credit, and total balance of your accounts, provided that you added their correct :ref:`encoding group `." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1126 +msgid "To generate an XML file of the trial balance, go to :menuselection:`Accounting --> Reporting --> Trial Balance`, select the date, and click the :icon:`fa-cog` :guilabel:`(action menu)`, then select :guilabel:`SAT (XML)`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 +msgid "Trial balance report." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1134 +msgid "Odoo does not generate the *Balanza de Comprobación Complementaria*." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1139 +msgid "Month 13" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1141 +msgid "An additional report is the *Month 13*: a closing balance sheet that shows any adjustments or movements made in the accounting to close the year." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1144 +msgid "To generate this XML document, navigate to :menuselection:`Accounting --> Accounting --> Journal Entries`, and create a new document. Here, add all amounts to modify, and balance the debit and/or credit of each one." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1148 +msgid "After this is done, go to the :guilabel:`Other Info` tab and check the :guilabel:`Month 13 Closing` field. If needed, go to :menuselection:`Accounting --> Reporting --> Trial Balance` and select the date :guilabel:`Month 13`, where it is possible to see the the total amount of the year, plus all the additions of the journal entry. To generate the XML file, click the :icon:`fa-cog` :guilabel:`(action menu)`, then select :guilabel:`SAT (XML)`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1159 +msgid "By law, all transactions in Mexico must be recorded digitally. Since Odoo automatically creates all the underlying journal entries of all invoices and payments, simply exporting the general ledger complies with |SAT|'s audits and/or tax refunds." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1164 +msgid "The report can be filtered by period or by journal, depending on the need." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1166 +msgid "To create the XML, go to :menuselection:`Accounting --> Reporting --> General Ledger`, click :icon:`fa-cog` :guilabel:`(action menu)`, then click :guilabel:`XML (Polizas)`. Then, select among four :guilabel:`Export` types:" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1170 +msgid ":guilabel:`Tax audit`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1171 +msgid ":guilabel:`Audit certification`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1172 +msgid ":guilabel:`Return of goods`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1173 +msgid ":guilabel:`Compensation`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1175 +msgid "For :guilabel:`Tax audit` or :guilabel:`Audit certification`, add the :guilabel:`Order Number` provided by the |SAT|. For :guilabel:`Return of goods` or :guilabel:`Compensation`, add the :guilabel:`Process Number`, also provided by the |SAT|." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1180 +msgid "To see this report without sending it, use `ABC6987654/99` for the :guilabel:`Order Number` or `AB123451234512` for the :guilabel:`Process Number`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1186 +msgid "DIOT report" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1188 +msgid "The DIOT (Declaración Informativa de Operaciones con Terceros / *Informative Declaration of Operations with Third Parties*) is an additional obligation with the |SAT|, where the current status of creditable and non-creditable payments, withholdings, import taxes, and refunds of VAT from your vendor bills are provided to the |SAT|." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1194 +msgid "Since July 2025 the new 2025 version of the report is available." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1196 +msgid "Unlike other reports, the |DIOT| is uploaded to a website provided by the |SAT| that contains the A-29 form. In Odoo, you can download the records of your transactions as a TXT file that can be uploaded to the form, avoiding direct capture of this data." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1200 +msgid "The transactions file contains the total amount of the payments registered in vendor bills, broken down into the corresponding types of IVA. The :guilabel:`VAT`, :guilabel:`Country` and :guilabel:`Type of operation` fields are mandatory for all vendors." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1204 +msgid "To download the |DIOT| report as a TXT file, go to :menuselection:`Accounting --> Reports --> Tax Return`. Select the desired month, click :icon:`fa-cog` :guilabel:`(action menu)`, and select :guilabel:`DIOT (TXT)`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1208 +msgid "In case new taxes are created on the database, there are two types of tags, the tags containing **tax** must go into the tax distribution and the ones with the base name go on the base of the tax. All lines of a VAT tax **must** containing at least one tax grid." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 +msgid "DIOT (TXT) download button." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1216 +msgid "It is required to fill in the :guilabel:`Type of Operation` field in the :guilabel:`Accounting` tab of each vendor to prevent validation errors. Make sure that foreign customers have their :guilabel:`Country` set." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 +msgid "DIOT information on a vendor contact." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1223 +msgid "Selecting :guilabel:`87 - Global Operations` will cause the final TXT file to merge all vendors that are part of the global operations under one generic VAT: *XAXX010101000*." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1229 msgid "External trade" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:624 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1231 msgid "The external trade is a complement to a regular invoice that adds certain values in both the XML and PDF, to invoices with a foreign customer according to `SAT regulations `_, such as:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:628 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1235 msgid "The specific address of the receiver and the sender" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:629 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1236 msgid "The addition of a :guilabel:`Tariff Fraction` that identifies the type of product" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:630 -msgid "The correct :guilabel:`Incoterm` (International Commercial Terms), among others (*certificate of origin* and *special units of measure*)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1237 +msgid "The correct :doc:`../accounting/customer_invoices/incoterms` (International Commercial Terms)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:633 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1238 +msgid "And more, such as the *certificate of origin* and *special units of measure*" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1240 msgid "This allows the correct identification of exporters and importers, in addition to expanding the description of the merchandise sold." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:636 -msgid "Since January 1, 2018, external trade is a requirement for taxpayers, who carry export operations of type A1. While the current CFDI is 4.0, the external trade is currently on version 1.1" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1243 +msgid "Since January 1, 2018, external trade is a requirement for taxpayers who carry export operations of type A1. While the current CFDI is 4.0, the external trade is currently on version 2.0." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:639 -msgid "In order to use this feature, the modules :guilabel:`l10n_mx_edi_extended` and :guilabel:`l10n_mx_edi_extended_40` have to be installed." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1247 +msgid "In order to use this feature, the :guilabel:`EDI for Mexico (Advanced Features)` `l10n_mx_edi_extended` module must be installed." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:643 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1251 msgid "Before installing, make sure your business needs to use this feature. Consult your accountant first, if needed, before installing any modules." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:652 -msgid "To configure your company contact for external trade, navigate to :menuselection:`Accounting --> Customers --> Customers`, and select your :guilabel:`Company`. While the CFDI 4.0 requirements ask you to add a valid :guilabel:`ZIP` code in your contact, the external trade complement adds the requirement that your :guilabel:`City` and the :guilabel:`State` must also be valid. All three fields must coincide with the `Official SAT Catalog `_, or you will receive an error." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1254 +msgid "The :guilabel:`CFDI to public` checkbox must be ticked when creating foreign invoices." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:659 -msgid "Add the :guilabel:`City` and :guilabel:`State` in the company's *contact*, not in the company itself. You can find your company's contact in :menuselection:`Accounting --> Customers --> Customers`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1262 +msgid "To configure your company contact for external trade, navigate to :menuselection:`Accounting --> Customers --> Customers`, remove the default :guilabel:`Customer Invoices` filter, and select your :guilabel:`Company` name. While the CFDI 4.0 requirements require adding a valid :guilabel:`ZIP` code in the company contact record, the external trade complement adds the requirement that the :guilabel:`City` and the :guilabel:`State` must also be valid. All three fields must coincide with the `Official SAT Catalog for Carta Porte `_, or it will produce an error." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:663 -msgid "The fields :guilabel:`Locality` and :guilabel:`Colony Code` are optional and can be added in the company directly in :menuselection:`Settings --> General Settings --> Companies`. These two fields have to coincide with the data in the |SAT|." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1272 +msgid "Add the :guilabel:`City` and :guilabel:`State` in the company's *contact record*, not in the company record itself." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Optional external trade company fields." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1275 +msgid "On the contact record, the optional fields :guilabel:`Locality` and :guilabel:`Colony Code` can also be filled. These two fields also have to coincide with the data in the |SAT|." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:670 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1278 msgid "To configure the contact data for a foreign receiving client, navigate to :menuselection:`Accounting --> Customers --> Customers`, and select the foreign client's contact. The contact must have the following fields completed to avoid errors:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:674 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1282 msgid "The entire company :guilabel:`Address`, including a valid :guilabel:`ZIP` code and the foreign :guilabel:`Country`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:676 -msgid "The format of the foreign :guilabel:`VAT` (tax identification number, for example: Colombia `123456789-1`)" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1284 +msgid "The foreign :guilabel:`RFC` (tax identification number), in the correct format (for example: Colombia `123456789-1`)" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:678 -msgid "In the :guilabel:`MX EDI` tab, you need to address if the customer receives goods for a period of time temporarily (:guilabel:`Temporary`) or permanently (:guilabel:`Definitive`)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1286 +msgid "In the :guilabel:`Sales & Purchase` tab, to activate the :guilabel:`Needs external trade?` checkbox." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:682 -msgid "If the new contact was created by duplicating another existing contact from Mexico, make sure to delete any carried over information from the :guilabel:`Fiscal Regime` field. In addition, do not enable the :guilabel:`No Tax Breakdown` option. Selecting this option hides mandatory fields that are required for external trade contact configuration." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Required external trade customer fields." -msgstr "" - -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:691 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1290 msgid "In the resulting XML and PDF files, the :guilabel:`VAT` is automatically replaced by the generic VAT for abroad transactions: `XEXX010101000`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:697 -msgid "All products involved with external trade have four fields that are required, two of them exclusive to external trade." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1296 +msgid "All products involved with external trade have four additional fields that are required, two of which are exclusive to external trade." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:700 -msgid "The :guilabel:`Internal Reference` of the product is in the :guilabel:`General Information` tab." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1299 +msgid "The :guilabel:`Reference` of the product must be set in the :guilabel:`General Information` tab." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:701 -msgid "The :guilabel:`Weight` of the product must be more than `0`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1300 +msgid "The :guilabel:`Weight` of the product in the :guilabel:`Inventory` tab must be more than `0`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:702 -msgid "The `correct `_ :guilabel:`Tariff Fraction` of the product in the :guilabel:`Accounting` tab." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1301 +msgid "The `correct `_ :guilabel:`Tariff Fraction` of the product must be set in the :guilabel:`Accounting` tab for external trade." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:704 -msgid "The :guilabel:`UMT Aduana` corresponds to the :guilabel:`Tariff Fraction`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1303 +msgid "The :guilabel:`UMT Aduana` in the :guilabel:`Accounting` tab must be set and correspond to the :guilabel:`Tariff Fraction` for external trade." msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 msgid "Required external trade product fields." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:710 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1310 msgid "If the UoM code of the :guilabel:`Tariff Fraction` is `01`, the correct :guilabel:`UMT Aduana` is `kg`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:712 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1312 msgid "If the UoM code of the :guilabel:`Tariff Fraction` is `06`, the correct :guilabel:`UMT Aduana` is `Units`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:718 -msgid "Before creating an invoice, it is important to take into account that external trade invoices require to convert the amounts of your product into USD. Therefore, :doc:`multicurrency <../accounting/get_started/multi_currency>` **must** be enabled and *USD* **must** be activated in the :guilabel:`Currencies` section. The correct :guilabel:`Service` to run is :guilabel:`Mexican Bank`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1318 +msgid "Before creating an invoice, it is important to take into account that external trade invoices require converting product prices into a foreign currency such as USD. Therefore, :doc:`multicurrency <../accounting/get_started/multi_currency>` **must** be enabled with the foreign currency activated in the :guilabel:`Currencies` section. The correct :guilabel:`Service` to run is :guilabel:`[MX] Bank of Mexico`. To convert product prices, create a :doc:`pricelist <../../sales/sales/products_prices/prices/pricing>` in the foreign currency." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:724 -msgid "Then, with the correct exchange rate set up in :menuselection:`Accounting --> Settings --> Currency`, the only fields left are :guilabel:`Incoterm` and the optional :guilabel:`Certificate Source` in the :guilabel:`Other Info` tab." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1325 +msgid "Then, with the correct exchange rate set up in :menuselection:`Accounting --> Settings --> Currency`, set the :guilabel:`Incoterm` and the optional :guilabel:`Certificate Source` fields in the invoice's :guilabel:`Other Info` tab." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "External trade Other Info tab of a product." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1330 +msgid "While not mandatory, the information will be more complete if :guilabel:`CFDI to public` is also active." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:731 -msgid "Finally, sign the invoice with the same process as a regular invoice, and click the :guilabel:`Process Now` button." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1333 +msgid "Finally, confirm the invoice with the same process as a regular invoice, and click the :guilabel:`Send` button to sign it via CFDI." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:737 -msgid "A `Carta Porte `_ is a bill of lading: a document that states the type, quantity, and destination of goods being carried." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1341 +msgid "The :doc:`Point of sale <../../sales/point_of_sale>` adaptation of the Mexican Localization enables the creation of invoices that comply with the |SAT| requirements directly in the **POS session**, with the added benefit of creating receipt tickets that allow *self-invoicing* in a special portal and creating global invoices." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:740 -msgid "On December 1st, 2021, version 2.0 of this CFDI was implemented for all transportation providers, intermediaries, and owners of goods. Odoo is able to generate a document type \"T\" (Traslado), which, unlike other documents, is created in a delivery order instead of an invoice or payment." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1349 +msgid "Point of sale flow" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:744 -msgid "Odoo can create XML and PDF files with (or without) ground transport, and can process materials that are treated as *Dangerous Hazards*." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1351 +msgid "Other than the standard :doc:`Point of Sale configuration <../../sales/point_of_sale/configuration>`, the only requirement for the Mexican localization is the additional fact that each payment method needs to be configured with a correct :guilabel:`Payment Way`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:747 -msgid "In order to use this feature, the modules :guilabel:`l10n_mx_edi_extended`, :guilabel:`l10n_mx_edi_extended_40`, :guilabel:`l10n_mx_edi_stock` and :guilabel:`l10n_mx_edi_stock_40` have to be installed." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1357 +msgid "By default Odoo creates preconfigured payment methods for cash, credit card, and debit card." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:751 -msgid "In addition to this, it is necessary to have the :doc:`Inventory <../../inventory_and_mrp/inventory>` and :doc:`Sales <../../sales/sales>` apps installed, as well." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1359 +msgid "While selling on the **Point of Sale**, click the :guilabel:`Customer` button to either create or select a customer. Here it is possible to review customer invoicing information (such as the |RFC| or :guilabel:`Fiscal Regime`) and even modify it directly inside the session." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:755 -msgid "Odoo does not support Carta Porte type document type \"I\" (Ingreso), air, or marine transport. Consult your accountant first if this feature is needed before doing any modifications." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1363 +msgid "After selecting a customer, tick the :icon:`fa-file-text-o` :guilabel:`Invoice` checkbox. This opens a menu to select the :guilabel:`Usage` and to define if it is an invoice to the public. Click confirm, select the payment method, and then click validate to complete the order. The PDF is then downloaded and it is possible to send the invoice via mail to the final customer alongside the receipt." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:761 -msgid "Odoo manages two different types of CFDI:" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1370 +msgid "To create invoices from orders, go to the :guilabel:`Orders` menu, select the order, click :guilabel:`Load Order`, and tick the :icon:`fa-file-text-o` :guilabel:`Invoice` checkbox. This opens the same menu for the :guilabel:`Usage` and :guilabel:`CFDI to Public`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:763 -msgid "**No Federal Highways**: Is used when the *Distance to Destination* is `less than 30 KM `_." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 +msgid "Invoice Configuration for Point of Sale." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:765 -msgid "**Federal Transport**: Is used when the *Distance to Destination* exceeds 30 KM." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1377 +msgid "To sign a credit note automatically, tick the :icon:`fa-file-text-o` :guilabel:`Invoice` checkbox when processing a :ref:`refund `." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:767 -msgid "Other than the standard requirements of regular invoicing (The |RFC| of the customer, the UNSPSC code, etc.), if you are using *No Federal Highways*, no external configuration is needed." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1381 +msgid "Credit notes for returned products will contain the relation type :guilabel:`03 - Devolución de mercancía sobre facturas o traslados previos`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:770 -msgid "For *Federal Transport*, several configurations have to be added to contacts, vehicle setups, and products. Those configurations are added to the XML and PDF files." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1385 +msgid "In the Mexican localization, positive and negative lines in a **POS** session cannot be mixed." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:774 -msgid "Contacts and vehicles" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1387 +msgid "If a |SAT| validation error occurs customer will get a :doc:`Pro-Forma invoice <../../sales/sales/invoicing/proforma>` instead." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:776 -msgid "Like the external trade feature, the :guilabel:`Address` in both the company and the final customer must be complete. The :guilabel:`ZIP` code, :guilabel:`City`, and :guilabel:`State` must coincide with the `Official SAT Catalog for Carta Porte _`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1393 +msgid "Self-invoicing portal" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:781 -msgid "The field, :guilabel:`Locality`, is optional for both addresses." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1395 +msgid "If the final customer is not sure if they want to have their invoice generated at the exact moment of the sale, it is possible to give them the option of creating a receipt with either a QR code or a URL. To do so, follow these steps:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Delivery guide contact configuration." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1399 +msgid "Go to :menuselection:`Point of Sale --> Configuration`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:787 -msgid "The origin address used for the delivery guide is set in :menuselection:`Inventory --> Configuration --> Warehouses Management --> Warehouses`. While this is set as the company address by default, you can change it according to your correct warehouse address." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1400 +msgid "Select the :guilabel:`Point of Sale`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:791 -msgid "Another addition to this feature is the :guilabel:`Vehicle Setups` menu found in :menuselection:`Inventory --> Settings --> Mexico`. This menu lets you add all the information related to the vehicle used for the delivery order." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1401 +msgid "Scroll to the :guilabel:`Bills & Receipts` section." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:795 -msgid "All fields are mandatory to create a correct delivery guide." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1402 +msgid "Enable :guilabel:`Self-service invoicing`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:798 -msgid "The fields, :guilabel:`Vehicle Plate Number` and :guilabel:`Number Plate`, must contain between 5 to 7 characters." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1403 +msgid "Set the :guilabel:`Print` field to :guilabel:`QR code`, :guilabel:`URL`, or :guilabel:`QR code + URL`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:801 -msgid "In the :guilabel:`Intermediaries` section, you must add the operator of the vehicle. The only mandatory fields for this contact are the :guilabel:`VAT` and :guilabel:`Operator Licence`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1406 +msgid "Customers who scan this QR code or follow the URL will access to a menu where they can add their fiscal information, including the *Usage* and *Fiscal Regime* once they enter the five digit code that is also provided on the receipt." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Delivery guide vehicle configuration." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1411 +msgid ":doc:`../../sales/point_of_sale/receipts_invoices`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:810 -msgid "Similar to regular invoicing, all products must have a :guilabel:`UNSPSC category`. In addition to this, there are two extra configurations for products involved in delivery guides:" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1418 +msgid "As with regular sales orders, global invoices can also be created from a POS session." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:813 -msgid "The :guilabel:`Product Type` must be set as :guilabel:`Storable Product` for stock movements to be created." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1420 +msgid "For this, make sure not to select a customer or the invoice option in the payment menu and go to :menuselection:`Point of Sale --> Orders --> Orders`. There, select all the orders to invoice, click :icon:`fa-cog` :guilabel:`Actions` and select :guilabel:`Create Global Invoice`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:815 -msgid "In the :guilabel:`Inventory` tab, the field :guilabel:`Weight` should have more than `0`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1424 +msgid "Like with sales orders, choose the correct :guilabel:`Periodicity` and press :guilabel:`Create`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:818 -msgid "Creating a delivery guide of a product with the value `0` will trigger an error. As the :guilabel:`Weight` has been already stored in the delivery order, it is needed to return the products, and create the delivery order (and delivery guide) again with the correct amounts." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1426 +msgid "This attaches an XML file to each of the selected orders. The XML files can be downloaded by going to the :guilabel:`CFDI` tab. If needed, it is possible to cancel the invoice from the same tab." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Delivery guide product configuration." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1429 +msgid "If eventually any of the orders that are part of the global invoice need to be addressed to a customer, it is still possible to send an invoice by entering a new POS session, clicking the :icon:`fa-bars` :guilabel:`(drop-down menu)`, then click :guilabel:`Orders`. Change the :guilabel:`All active orders` filter to :guilabel:`Paid`, select the order, and click the :icon:`fa-file-text-o` :guilabel:`Invoice` button." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:826 -msgid "Sales and inventory flow" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1436 +msgid "Global invoices, just as regular invoices, can only be grouped by physical address. That is determined by the address set on the POS invoice journal, so when attempting to invoice two addresses a warning will come up to warn the user of the error." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:828 -msgid "To create a delivery guide, first, you need to create and confirm a sales order from :menuselection:`Sales --> Sales Order`. This generates a :guilabel:`Delivery` smart button. Click it, and :guilabel:`Validate` the transfer." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1445 +msgid "The eCommerce adaptation of the Mexican Localization provides and extra step to create invoices that comply with the |SAT| requirements on :doc:`eCommerce <../../websites/ecommerce>` by retrieving the customer data after the **Checkout** and even allowing for the signature of **automatic invoices** after the payment is processed, as well as sending customers the files via email and granting them access to retrieve their PDF file from their own customer portal." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:832 -msgid "After the status is set to :guilabel:`Done`, you can edit the transfer, and select the :guilabel:`Transport Type` (either :guilabel:`No Federal Highways` or :guilabel:`Federal Transport`)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1454 +msgid "eCommerce flow" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:836 -msgid "If your delivery guide has the type :guilabel:`No Federal Highways`, you can save the transfer, and then click :guilabel:`Generate Delivery Guide`. The resulting XML can be found in the chatter." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1456 +msgid "During the regular checkout process, a new :guilabel:`Invoicing Info` step appears, where it is possible to request an invoice or not. If :guilabel:`No` is selected, a **CFDI to Public** is created,. If :guilabel:`Yes` is selected, the :guilabel:`RFC`, :guilabel:`Fiscal Regime`, and :guilabel:`Usage` are required in order to get all information in the sales order, where its status will change to :guilabel:`To Invoice`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:840 -msgid "Other than the :guilabel:`UNSPSC` in all products, delivery guides that use :guilabel:`No Federal Highways` do not require any special configuration to be sent to the government." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1462 +msgid "Additionally the customer can decide whether or not to request :ref:`IEPS Breakdown `." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:843 -msgid "If your delivery guide has the type, :guilabel:`Federal Transport`, the tab :guilabel:`MX EDI` appears. There, enter a value in :guilabel:`Distance to Destination (KM)` bigger than `0`, and select the :guilabel:`Vehicle Setup` used for this delivery." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1466 +msgid "Make sure to add a :guilabel:`UNSPSC code` to the :ref:`shipping product `." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Delivery guide MX EDI tab configuration." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1469 +msgid "If the :guilabel:`Automatic Invoicing` is enabled in :menuselection:`Settings --> Website --> Invoicing`, the electronic document will be signed automatically." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:851 -msgid "Dangerous hazards" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1477 +msgid "The **Sales** app contains fields that make invoicing easier, while the fields themselves do not change the sales behavior, they are directly copied when creating an invoice." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:853 -msgid "Certain values in the :guilabel:`UNSPSC Category` are considered in the `official SAT catalog `_ as *dangerous hazards*. These categories need additional considerations when creating a delivery guide with :guilabel:`Federal Transport`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1480 +msgid "The copied fields are:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:858 -msgid "First, select your product from :menuselection:`Inventory --> Products --> Products`. Then, in the :guilabel:`Accounting` tab, the fields :guilabel:`Hazardous Material Designation Code (MX)` and :guilabel:`Hazardous Packaging (MX)` must be filled with the correct code from the |SAT| catalog." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1482 +msgid "Payment Way" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Delivery guide hazardous material product required fields." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1487 +msgid "Additionally, it is possible to get a preview of the invoice for validation purposes with the customer by installing the :doc:`pro-forma module <../../sales/sales/invoicing/proforma>`. This module adds the mentioned fields to the sale order as well as:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:865 -msgid "In :menuselection:`Inventory --> Settings --> Mexico --> Vehicle Setup`, the data from the :guilabel:`Environment Insurer` and :guilabel:`Environment Insurance Policy` has to be filed, as well. After this, continue with the regular process to create a delivery guide." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1491 +msgid "Product code" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Delivery Guide environment insurer required fields." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1492 +msgid "Unit code" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:873 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1493 +msgid "Fiscal regime" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1498 +msgid "Subscriptions" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1500 +msgid "While handling subscriptions, all the sales fields are used to create the recurrent invoices. These are automatically signed and sent via email with the PDF and XML attached with no additional manual actions required." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1505 +msgid "All invoices generated by the subscription app will always be automatically signed with no exceptions." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1511 +msgid "Inventory" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1516 msgid "Customs numbers" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:875 -msgid "A *customs declaration* (Pedimento Aduanero) is a fiscal document that certifies that all contributions to the fiscal entity (the |SAT|) has been paid for, including the import/export of goods." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1518 +msgid "A *customs declaration* (Pedimento Aduanero) is a fiscal document that certifies that all contributions to the fiscal entity (the |SAT|) have been paid for, including the import/export of goods." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:879 -msgid "According to the `Annex 20 `_ of CFDI 4.0, in documents where the invoiced goods come from a first-hand import operation, the field, :guilabel:`Customs Number`, needs to be added to all lines of products involved with the operation." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1522 +msgid "According to the `Annex 20 `_ of CFDI 4.0, in documents where the invoiced goods come from a first-hand import operation, the :guilabel:`Customs Number` field, needs to be added to all lines of products involved with the operation." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:883 -msgid "To do so, the module :guilabel:`l10n_mx_edi_landing` must be installed, in addition to the :doc:`Inventory <../../inventory_and_mrp/inventory>`, :doc:`Purchase <../../inventory_and_mrp/purchase>` and :doc:`Sales <../../sales/sales>` apps." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1528 +msgid "To do so, the :guilabel:`Odoo Mexico Localization for Stock/Landing` `l10n_mx_edi_landing` module must be installed, in addition to the :doc:`Inventory <../../inventory_and_mrp/inventory>`, :doc:`Purchase <../../inventory_and_mrp/purchase>`, and :doc:`Sales <../../sales/sales>` apps." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:888 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1533 msgid "Do not confuse this feature with external trade. The customs numbers are directly related to importing goods, while the external trade complement is related to exporting. Consult your accountant first if this feature is needed before doing any modifications." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:895 -msgid "In order to track the correct customs number for a specific invoice, Odoo uses :doc:`landed costs <../../inventory_and_mrp/inventory/product_management/inventory_valuation/landed_costs>`. Go to :menuselection:`Inventory --> Configuration --> Settings --> Valuation`. Make sure that :guilabel:`Landed Costs` is activated." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1540 +msgid "In order to track the correct customs number for a specific invoice, Odoo uses :doc:`landed costs <../../inventory_and_mrp/inventory/product_management/inventory_valuation/landed_costs>`. Go to :menuselection:`Inventory --> Configuration --> Settings`, and in the :guilabel:`Valuation` section, make sure that :guilabel:`Landed Costs` is activated." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:900 -msgid "Begin by creating a *service*-type product called, `Pedimento`. In the :guilabel:`Purchase` tab, activate :guilabel:`Is a Landed Cost`, and select a :guilabel:`Default Split Method`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1545 +msgid "Begin by creating a **service-type** product called, `Pedimento`. In the :guilabel:`Purchase` tab, activate :guilabel:`Is a Landed Cost`, and select a :guilabel:`Default Split Method`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:903 -msgid "Then, configure the *storable products* that hold the customs numbers. To do so, create the storable products, and make sure the :guilabel:`Product Category` has the following configuration." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1548 +msgid "Then, configure the **goods-type** products that hold the customs numbers. To do so, create the products, and make sure the :guilabel:`Product Category` has the following configuration:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:906 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1551 msgid ":guilabel:`Costing Method`: Either :guilabel:`FIFO` or :guilabel:`AVCO`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:907 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1552 msgid ":guilabel:`Inventory Valuation`: :guilabel:`Automated`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:908 -msgid ":guilabel:`Stock Valuation Account`: :guilabel:`115.01.01 Inventario`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1553 +msgid ":guilabel:`Stock Valuation Account`: :guilabel:`115.01.01 Inventory`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:909 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1554 msgid ":guilabel:`Stock Journal`: :guilabel:`Inventory Valuation`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:910 -msgid ":guilabel:`Stock Input Account`: :guilabel:`115.05.01 Mercancías en tránsito`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1555 +msgid ":guilabel:`Stock Input Account`: :guilabel:`115.05.01 Goods in transit`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1556 +msgid ":guilabel:`Stock Output Account`: :guilabel:`115.05.01 Goods in transit`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:911 -msgid ":guilabel:`Stock Output Account`: :guilabel:`115.05.01 Mercancías en tránsito`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1559 +msgid "Setting the :guilabel:`Inventory Valuation` to :guilabel:`Automated` requires first enabling the feature. Go to :menuselection:`Accounting --> Configuration --> Settings`, and in the :guilabel:`Stock Valuation` section, enable :guilabel:`Automatic Accounting`." msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 @@ -31136,228 +32845,260 @@ msgstr "" msgid "Storable product category configuration." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:920 +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1570 msgid "Purchase and sales flow" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:922 -msgid "After you configure your product, follow the standard :doc:`purchase flow <../../inventory_and_mrp/purchase>`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1572 +msgid "After configuring the product, follow the standard :doc:`purchase flow <../../inventory_and_mrp/purchase>`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:925 -msgid "Create a purchase order from :menuselection:`Purchase --> Orders --> Purchase Order`. Then, confirm the order to display a :guilabel:`Receipt` smart button. Click on the :guilabel:`Receipt` smart button to :guilabel:`Validate` the receipt." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1575 +msgid "Create a purchase order from :menuselection:`Purchase --> Orders --> Purchase Order`. Then, confirm the order to display a :guilabel:`Receipt` smart button. Click on the :guilabel:`Receipt` smart button and :guilabel:`Validate` the receipt." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:929 -msgid "Go to :menuselection:`Inventory --> Operations --> Landed Costs`, and create a new record. Add the transfer that you just created, and both: the product `Pedimento` and :guilabel:`Customs number`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1579 +msgid "Go to :menuselection:`Inventory --> Operations --> Landed Costs`, and create a new record. In the :guilabel:`Transfer`, add the receipt that was just validated, add the :guilabel:`Customs number` and in the :guilabel:`Additional Costs` tab, add the :guilabel:`Pedimento` product." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:932 -msgid "Optionally, you can add a cost amount. After this, validate the landed cost. Once :guilabel:`Posted`, all products related to that receipt have the customs number assigned." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1583 +msgid "Optionally, it is possible to add a cost amount. After this, :guilabel:`Validate` the landed cost. Once :guilabel:`Posted`, all products related to that receipt have the customs number assigned." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:936 -msgid "You can only add the *Pedimentos* number **once**, so be careful when associating the correct number with the transfer(s)." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1587 +msgid "The :guilabel:`Pedimento Number` field is not editable once it is set, so be careful when associating the correct number with the transfer(s)." msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 msgid "Customs number on a landed costs Inventory record." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:942 -msgid "Now, create a sales order, and confirm it. This should trigger a :guilabel:`Delivery` smart button. Validate it." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1593 +msgid "Next, create a sales order and confirm it. Click on the :guilabel:`Delivery` smart button that appears, and :guilabel:`Validate` the delivery order." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:945 -msgid "Finally, create an invoice from the sales order, and confirm it. The invoice line related to your product has a customs number in it. This number should match the customs number added in the *Landed Costs* record you created earlier." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1596 +msgid "Finally, :ref:`create an invoice from the sales order `, and confirm it. The invoice line related to the product has a customs number on it. This number matches the customs number added in the landed cost record created earlier." msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 msgid "Customs number on confirmed sales order product." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:953 -msgid "Electronic accounting" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1608 +msgid "A `Carta Porte `_ is a bill of lading: a document that states the type, quantity, and destination of goods being carried." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:955 -msgid "For Mexico, `Electronic Accounting `_ refers to the obligation to keep accounting records and entries through electronic means, and to enter accounting information on a monthly basis, through the |SAT| website." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1611 +msgid "On July 17th, 2024, version 3.1 of this |CFDI| was implemented for all transportation providers, intermediaries, and owners of goods. Odoo is able to generate a document type \"T\" (Traslado), which, unlike other documents, is created in a delivery order instead of an invoice or payment." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:960 -msgid "It consists of three main XML files:" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1615 +msgid "Odoo can create XML and PDF files with (or without) ground transport, and can process materials that are treated as *Dangerous Hazards*." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:962 -msgid "The updated list of the chart of accounts that you are currently using." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1618 +msgid "In order to print the PDF, the delivery order must be signed by the government and then it can be printed using the :guilabel:`Print Carta Porte` button on the delivery order." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:963 -msgid "A monthly trial balance, plus a closing entry report, also known as: *Trial Balance Month 13*." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1621 +msgid "The PDF file contains a QR code to verify the CCP code for the authorities." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:964 -msgid "Either optional, or for a compulsory audit, an export of the journal entries in your general ledger." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1623 +msgid "In order to transport goods between warehouses, the logistic route must contain a **Delivery** type of operation, see :doc:`Inter-warehouse replenishment <../../inventory_and_mrp/inventory/warehouses_storage/replenishment/resupply_warehouses>`" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:967 -msgid "The resulting XML files follow the requirements of the `Anexo Técnico de Contabilidad Electrónica 1.3 `_." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1628 +msgid "In order to use this feature, the :guilabel:`Mexico - Electronic Delivery Guide` `l10n_mx_edi_stock` module must be installed." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:970 -msgid "In addition to this, you can generate the `DIOT `_: A report of vendor's journal entries that involve IVA taxes that can be exported in a :file:`.txt` file." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1631 +msgid "Additionally, it is necessary to have the :doc:`Inventory <../../inventory_and_mrp/inventory>` and :doc:`Sales <../../sales/sales>` apps installed." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:975 -msgid "In order to use these reports, the modules :guilabel:`l10n_mx_reports`, :guilabel:`l10n_mx_reports_closing`, :guilabel:`l10n_mx_xml_polizas` and :guilabel:`l10n_mx_xml_polizas_edi` have to be installed, as well as the :doc:`Accounting <../accounting/get_started>`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1635 +msgid "Odoo does not support Carta Porte type document type \"I\" (Ingreso), air, train or marine transport." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:981 -msgid "The specific characteristics and obligations of the reports that you send might change according to your fiscal regime. Always contact your accountant before sending any documents to the government." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1638 +msgid "Consult your accountant first if this feature is needed before doing any modifications." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:990 -msgid "The :doc:`chart of accounts <../accounting/get_started/chart_of_accounts>` in México follows a specific pattern based on |SAT|'s' `Código agrupador de cuentas `_." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1643 +msgid "Odoo manages two different types of CFDI type \"T\". Both can be created from either :doc:`incoming shipments or delivery orders <../../inventory_and_mrp/inventory/shipping_receiving/daily_operations>`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:994 -msgid "You can create any account, as long as it respects |SAT|'s encoding group: the pattern is `NNN.YY.ZZ` or `NNN.YY.ZZZ`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1647 +msgid ":guilabel:`No Federal Highways` is used when the :guilabel:`Distance to Destination` is `less than 30 km `_." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:998 -msgid "Some examples are `102.01.99` or `401.01.001`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1650 +msgid ":guilabel:`Federal Transport` is used when the :guilabel:`Distance to Destination` exceeds 30 km." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1000 -msgid "When a new account is created in :menuselection:`Accounting --> Configuration --> Chart of Accounts`, with the |SAT| encoding group pattern, the correct grouping code appears in :guilabel:`Tags`, and your account appears in the *COA* report." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1652 +msgid "Other than the standard requirements of regular invoicing (the |RFC| of the customer, the UNSPSC code, etc.), if you are using *No Federal Highways*, no external configuration is needed." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1004 -msgid "Once you create all your accounts, make sure the correct :guilabel:`Tags` are added." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1655 +msgid "For *Federal Transport*, several configurations have to be added to contacts, vehicle setups, and products. Those configurations are then included in the XML and PDF files." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1007 -msgid "You cannot use any pattern that ends a section with a 0 (such as `100.01.01`, `301.00.003` or `604.77.00`). This triggers errors in the report." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1659 +msgid "Contacts and vehicles" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1010 -msgid "Once everything is set up, go to :menuselection:`Accounting --> Reporting --> Trial Balance`, click the :icon:`fa-caret-down` (:guilabel:`down arrow`) next to the :guilabel:`PDF` button, and select :guilabel:`COA SAT (XML)`. This generates an XML file with your accounts, which you can upload directly to the |SAT| website." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1661 +msgid "Like the external trade feature, the :guilabel:`Address` in both the company and the final customer must be complete. The :guilabel:`ZIP` code, :guilabel:`City`, and :guilabel:`State` must coincide with the `Official SAT Catalog for Carta Porte `_." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1018 -msgid "The trial balance reports the initial balance, credit, and total balance of your accounts, provided that you added their correct :ref:`encoding group `." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1667 +msgid "The field, :guilabel:`Locality`, is optional for both addresses." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1021 -msgid "To generate this report in an XML format, go to :menuselection:`Accounting --> Reporting --> Trial Balance`. Select the month you want to download in the calendar, then click the :icon:`fa-caret-down` (:guilabel:`down arrow`) next to the :guilabel:`PDF` button, and select :guilabel:`SAT (XML)`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1670 +msgid "The origin address used for the delivery guide is set in :menuselection:`Inventory --> Configuration --> Warehouses`. While this is set as the company address by default, you can change it to your correct warehouse address." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1674 +msgid "Another addition to this feature is the :guilabel:`Vehicle Setups` menu found in :menuselection:`Inventory --> Settings --> Vehicle Setups`. This menu lets you add all the information related to the vehicle used for the delivery order." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1678 +msgid "All fields are mandatory to create a correct delivery guide." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1681 +msgid "The fields, :guilabel:`Vehicle Plate Number` and :guilabel:`Number Plate`, must contain between 5 and 7 characters." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1684 +msgid "In the :guilabel:`Intermediaries` section, add the operator of the vehicle. The only mandatory fields for this contact are the :guilabel:`VAT` and :guilabel:`Operator Licence`." msgstr "" #: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Trial balance report." +msgid "Delivery guide vehicle configuration." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1030 -msgid "Odoo does not generate the *Balanza de Comprobación Complementaria*." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1693 +msgid "Similar to regular invoicing, all products must have a :guilabel:`UNSPSC category`. In addition to this, there are two extra configurations for products involved in delivery guides:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1033 -msgid "Month 13 trial balance" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1696 +msgid "The :guilabel:`Product Type` must be set as :guilabel:`Storable Product` for stock movements to be created." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1035 -msgid "The *Month 13* report is a closing balance sheet that shows any adjustments or movements made in the accounting to close the year." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1698 +msgid "In the :guilabel:`Inventory` tab, the field :guilabel:`Weight` must be more than `0`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1038 -msgid "To generate it, proceed as follows:" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1701 +msgid "Creating a delivery guide of a product with the value `0` will trigger an error. As the :guilabel:`Weight` has been already stored in the delivery order, it is needed to return the products and create the delivery order (and delivery guide) again with the correct amounts." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1040 -msgid "Go to :menuselection:`Accounting --> Accounting --> Journal Entries` and create a new entry for all the amounts to be changed, balancing the debit and/or credit of each one." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1706 +msgid "Sales and inventory flow" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1042 -msgid "In the :guilabel:`Other Info` tab, enable the :guilabel:`Month 13 Closing` option." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1708 +msgid "To create a delivery guide, first, first create and confirm a sales order from :menuselection:`Sales --> Sales Order`. Click the :guilabel:`Delivery` smart button that is generated, and :guilabel:`Validate` the transfer." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1043 -msgid "Go to :menuselection:`Accounting --> Reporting --> Trial Balance`, click the calendar, and select :guilabel:`Month 13`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1712 +msgid "After the status is set to :guilabel:`Done`, you can edit the transfer, and select the :guilabel:`Transport Type` in the :guilabel:`Additional Info` tab." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1045 -msgid "Click the :icon:`fa-caret-down` (:guilabel:`down arrow`) next to the :guilabel:`PDF` button, and select :guilabel:`SAT (XML)`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1715 +msgid "If using the :guilabel:`No Federal Highways` :guilabel:`Transport Type`, save the transfer, and then click :guilabel:`Generate Delivery Guide`. The resulting XML can be found in the chatter." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "Trial Balance Month 13 report." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1719 +msgid "Other than the :guilabel:`UNSPSC` on all products, delivery guides that use :guilabel:`No Federal Highways` do not require any special configuration to be sent to the government." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1054 -msgid "By law, all transactions in Mexico must be recorded digitally. Since Odoo automatically creates all the underlying journal entries of your invoicing and payments, you can export your journal entries to comply with |SAT|'s audits and/or tax refunds." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1722 +msgid "If using the :guilabel:`Federal Transport` :guilabel:`Transport Type`, the tab :guilabel:`MX EDI` appears. There, enter a value in :guilabel:`Distance to Destination (KM)` greater than `0`, and select the :guilabel:`Vehicle Setup` used for this delivery." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1059 -msgid "You can filter by period, or by journal, according to your current needs." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1726 +msgid "Finally, add a :guilabel:`Gross Vehicle Weight` and click :guilabel:`Generate Delivery Guide`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1061 -msgid "To create the XML, go to :menuselection:`Accounting --> Reporting --> General Ledger`, click the :icon:`fa-caret-down` (:guilabel:`down arrow`) next to the :guilabel:`PDF` button, and select :guilabel:`XML (Polizas)`. In the :guilabel:`XML Polizas Export Options` window, choose between four different :guilabel:`Export` types:" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1729 +msgid "Delivery Guides can also be created from :guilabel:`Receipts`, either from the Inventory app or by the standard flow of the Purchase app." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1066 -msgid ":guilabel:`Tax audit`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1733 +msgid "Dangerous hazards" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1067 -msgid ":guilabel:`Audit certification`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1735 +msgid "Certain values in the :guilabel:`UNSPSC Category` are considered in the `official SAT catalog `_ as *dangerous hazards*. These categories need additional considerations when creating a delivery guide with :guilabel:`Federal Transport`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1068 -msgid ":guilabel:`Return of goods`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1740 +msgid "First, select the product from :menuselection:`Inventory --> Products --> Products`. Then, in the :guilabel:`Accounting` tab, fill the :guilabel:`Hazardous Material Designation Code` and :guilabel:`Hazardous Packaging` fields with the correct code from the |SAT| catalog." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1069 -msgid ":guilabel:`Compensation`" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 +msgid "Delivery guide hazardous material product required fields." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1071 -msgid "For :guilabel:`Tax audit` or :guilabel:`Audit certification`, you need to write the :guilabel:`Order Number` provided by the |SAT|. For :guilabel:`Return of goods`, or :guilabel:`Compensation`, you need to write your :guilabel:`Process Number`, also provided by the |SAT|." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1748 +msgid "There exists the possibility that a :guilabel:`UNSPSC Category` may or may not be a dangerous hazard (for example *01010101*). If it is not dangerous, enter `0` in the :guilabel:`Hazardous Material Designation Code` field." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1077 -msgid "If you want to see this report without sending it, use `ABC6987654/99` for :guilabel:`Order Number` and `AB123451234512` for :guilabel:`Process Number`." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1752 +msgid "In :menuselection:`Inventory --> Settings --> Vehicle Setup`, complete the :guilabel:`Environment Insurer` and :guilabel:`Environment Insurance Policy` well. After this, continue with the regular process to create a delivery guide." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1081 -msgid "DIOT report" +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1757 +msgid "Imports and Exports" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1083 -msgid "The DIOT (Declaración Informativa de Operaciones con Terceros / *Informative Declaration of Operations with Third Parties*) is an additional obligation with the |SAT|, where the current status of creditable and non-creditable payments, withholdings, and refunds of VAT from your vendor bills, are provided to the |SAT|." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1759 +msgid "If your Carta Porte is for international operations (for exports), some additional fields need to be taken into account." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1088 -msgid "Unlike other reports, the |DIOT| is uploaded to a software provided by the |SAT| that contains the A-29 form. In Odoo, you can download the records of your transactions as a :file:`.txt` file that can be uploaded to the form, avoiding direct capture of this data." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1762 +msgid "First, make sure that all relevant :guilabel:`Products` have the following configuration:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1092 -msgid "The transactions file contains the total amount of your payments registered in vendor bills, broken down into the corresponding types of IVA. The :guilabel:`VAT` and :guilabel:`Country` is mandatory for all vendors." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1764 +msgid ":guilabel:`UNSPSC Category` cannot be :guilabel:`01010101 Does not exist in the catalog`." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1096 -msgid "To generate the |DIOT| report, go to :menuselection:`Accounting --> Reporting --> Tax Reports`. Select the month you want to download in the calendar, then click the :icon:`fa-caret-down` (:guilabel:`down arrow`) next to the :guilabel:`PDF` button to select :guilabel:`Report: DIOT (MX)` and download the :file:`.txt` file." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1765 +msgid ":guilabel:`Tariff Fraction` and :guilabel:`UMT Aduana` must be set, similar to the :ref:`external trade ` flow." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:-1 -msgid "A Vendor Bill that is In Payment." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1767 +msgid ":guilabel:`Material Type` must be set." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1105 -msgid "You need to fill the :guilabel:`L10N Mx Type of Operation` field in the :guilabel:`Accounting` tab of each one of your vendors to prevent validation errors. Make sure that your foreign customers have their country set up for :guilabel:`L10N Mx Nationality` to appear automatically." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1769 +msgid "Then, when creating a :guilabel:`Delivery Guide` from a delivery or receipt, fill the following fields:" msgstr "" -#: ../../content/applications/finance/fiscal_localizations/mexico.rst:0 -msgid "DIOT information on a vendor contact." +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1772 +msgid ":guilabel:`Customs Regimes`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1773 +msgid ":guilabel:`Customs Document Type`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1774 +msgid ":guilabel:`Customs Document Identification`" +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1776 +msgid "Then, when creating a :guilabel:`Delivery Guide` for a receipt where the :guilabel:`Customs Document Type` is :guilabel:`Pedimento`, two new fields appear: :guilabel:`Pedimento Number` and :guilabel:`Importer`." +msgstr "" + +#: ../../content/applications/finance/fiscal_localizations/mexico.rst:1781 +msgid "The field :guilabel:`Pedimento Number` should follow the pattern `xx xx xxxx xxxxxxx`. For example, `15 48 3009 0001235` with **Two** spaces between text." msgstr "" #: ../../content/applications/finance/fiscal_localizations/netherlands.rst:3 @@ -31571,7 +33312,7 @@ msgid "Remittance Advice." msgstr "" #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:188 -msgid "Odoo allows :ref:`electronic invoicing ` settings to be configured per contact." +msgid "Odoo allows :ref:`electronic invoicing ` settings to be configured per contact." msgstr "" #: ../../content/applications/finance/fiscal_localizations/new_zealand.rst:-1 @@ -32276,11 +34017,6 @@ msgstr "" msgid "Partner identification type." msgstr "" -#: ../../content/applications/finance/fiscal_localizations/peru.rst:387 -#: ../../content/applications/finance/fiscal_localizations/romania.rst:113 -msgid "Product" -msgstr "" - #: ../../content/applications/finance/fiscal_localizations/peru.rst:389 msgid "Additional to the basic information in your products, for the Peruvian localization, the UNSPC Code on the product is a required value to be configured." msgstr "" @@ -32321,6 +34057,10 @@ msgstr "" msgid "Tax affectation reason in invoice line." msgstr "" +#: ../../content/applications/finance/fiscal_localizations/peru.rst:431 +msgid "Invoice validation" +msgstr "" + #: ../../content/applications/finance/fiscal_localizations/peru.rst:433 msgid "Once you check all the information in your invoice is correct, you can proceed to validate it. This action registers the account move and triggers the Electronic invoice workflow to send it to the OSE and the SUNAT. The following message is displayed at the top of the invoice:" msgstr "" @@ -36560,6 +38300,10 @@ msgstr "" msgid ":guilabel:`Use Documents?`: Activate this option if this journal will use documents from the list of document types in Odoo." msgstr "" +#: ../../content/applications/finance/fiscal_localizations/uruguay.rst:288 +msgid "Workflows" +msgstr "" + #: ../../content/applications/finance/fiscal_localizations/uruguay.rst:290 msgid "Once you have configured your database, you can create your documents." msgstr "" diff --git a/locale/sources/general.pot b/locale/sources/general.pot index 76d0760a0a..c2060f8db7 100644 --- a/locale/sources/general.pot +++ b/locale/sources/general.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -137,7 +137,7 @@ msgid ":doc:`Multi-company `" msgstr "" #: ../../content/applications/general/companies.rst:17 -#: ../../content/applications/general/companies.rst:95 +#: ../../content/applications/general/companies.rst:97 #: ../../content/applications/general/companies/multi_company.rst:33 #: ../../content/applications/general/integrations/barcodelookup.rst:15 #: ../../content/applications/general/integrations/mail_plugins/outlook.rst:10 @@ -229,7 +229,6 @@ msgstr "" #: ../../content/applications/general/companies.rst:57 #: ../../content/applications/general/users.rst:5 -#: ../../content/applications/general/users/access_rights.rst:32 msgid "Users" msgstr "" @@ -249,112 +248,112 @@ msgstr "" msgid "Configure the :ref:`default layout ` for all company documents." msgstr "" -#: ../../content/applications/general/companies.rst:75 +#: ../../content/applications/general/companies.rst:77 msgid "Branches" msgstr "" -#: ../../content/applications/general/companies.rst:77 +#: ../../content/applications/general/companies.rst:79 msgid "Branches represent subdivisions within a company, such as regional offices or departments, that operate under a common parent company. They support hierarchical company structures through :ref:`configurable settings `, enabling :ref:`comprehensive or branch-specific views ` with flexible :ref:`access control `, :ref:`entity-specific or shared record visibility `, and customizable :ref:`reporting `." msgstr "" -#: ../../content/applications/general/companies.rst:86 +#: ../../content/applications/general/companies.rst:88 msgid "Independent subsidiaries should be created as additional companies, not branches." msgstr "" -#: ../../content/applications/general/companies.rst:89 +#: ../../content/applications/general/companies.rst:91 msgid ":doc:`Multi-company `" msgstr "" -#: ../../content/applications/general/companies.rst:90 +#: ../../content/applications/general/companies.rst:92 msgid ":ref:`Branch accounting `" msgstr "" -#: ../../content/applications/general/companies.rst:97 +#: ../../content/applications/general/companies.rst:99 msgid "Each branch is linked to its parent company but may contain different or specific information, such as its address or logo. A branch can be a parent company of branches at a lower level to create a multi-level architecture." msgstr "" -#: ../../content/applications/general/companies.rst:102 +#: ../../content/applications/general/companies.rst:104 msgid "Clarify the company's structure and hierarchy before creating companies and branches in Odoo. A company defined as a parent cannot be converted into a branch later, as doing so may result in :doc:`access rights ` issues." msgstr "" -#: ../../content/applications/general/companies.rst:105 +#: ../../content/applications/general/companies.rst:107 msgid "Always create the parent company first." msgstr "" -#: ../../content/applications/general/companies.rst:107 +#: ../../content/applications/general/companies.rst:109 msgid "To create a branch, follow these steps in the Settings app:" msgstr "" -#: ../../content/applications/general/companies.rst:109 +#: ../../content/applications/general/companies.rst:111 msgid "Navigate to the :guilabel:`Companies` section, click :icon:`oi-arrow-right` :guilabel:`Manage Companies`, or go to :menuselection:`Settings --> Users & Companies --> Companies`." msgstr "" -#: ../../content/applications/general/companies.rst:111 +#: ../../content/applications/general/companies.rst:113 msgid "In the :guilabel:`Companies` list view, open the desired parent company form." msgstr "" -#: ../../content/applications/general/companies.rst:112 +#: ../../content/applications/general/companies.rst:114 msgid "In the :guilabel:`Branches` tab, click :guilabel:`Add a line` and fill in the :ref:`General Information ` fields in the :guilabel:`Create Branches` window." msgstr "" -#: ../../content/applications/general/companies.rst:115 +#: ../../content/applications/general/companies.rst:117 msgid "To create branches from a branch and create a multi-level architecture, click :guilabel:`Add a line` in the new branch's :guilabel:`Branches` tab." msgstr "" -#: ../../content/applications/general/companies.rst:119 +#: ../../content/applications/general/companies.rst:121 msgid "Activate the :ref:`developer mode ` to set :doc:`social media accounts <../marketing/social_marketing>` and company-specific :doc:`email ` system parameters." msgstr "" -#: ../../content/applications/general/companies.rst:124 +#: ../../content/applications/general/companies.rst:126 msgid "Adding a branch to a company enables :doc:`multi-company ` functions." msgstr "" -#: ../../content/applications/general/companies.rst:129 +#: ../../content/applications/general/companies.rst:131 msgid "Comprehensive or branch-specific view" msgstr "" -#: ../../content/applications/general/companies.rst:132 +#: ../../content/applications/general/companies.rst:134 msgid "Selecting the parent company automatically links all its branches, while selecting a branch connects to that branch only. To switch between them, use the :ref:`company selector `." msgstr "" -#: ../../content/applications/general/companies.rst:136 +#: ../../content/applications/general/companies.rst:138 msgid "All configurations, except for :ref:`accounting ` settings inherited from the parent company, must be set individually per branch. This allows for branch-specific setups such as :doc:`loyalty programs <../sales/point_of_sale/pricing/loyalty>`, :doc:`price lists <../sales/point_of_sale/pricing/pricelists>`, or :doc:`inventory locations <../inventory_and_mrp/inventory/warehouses_storage/inventory_management/use_locations>`." msgstr "" -#: ../../content/applications/general/companies.rst:145 +#: ../../content/applications/general/companies.rst:147 #: ../../content/applications/general/companies/multi_company.rst:66 msgid "User access" msgstr "" -#: ../../content/applications/general/companies.rst:147 +#: ../../content/applications/general/companies.rst:149 msgid "Like in a multi-company environment, parent companies and branches support flexible :ref:`user access ` control and :doc:`access rights `. User access can be granted or restricted at the parent company level, the branch level, or both. For example, a user can be limited to a specific branch, while an administrator with access to the parent company can manage all associated branches." msgstr "" -#: ../../content/applications/general/companies.rst:156 +#: ../../content/applications/general/companies.rst:158 msgid "Shared records" msgstr "" -#: ../../content/applications/general/companies.rst:158 +#: ../../content/applications/general/companies.rst:160 msgid "In Odoo, some records are, by default, either specific to a single entity or shared across the parent company and all its branches." msgstr "" -#: ../../content/applications/general/companies.rst:161 +#: ../../content/applications/general/companies.rst:163 msgid "When creating a quotation, invoice, or vendor bill, the active company or branch is automatically selected and displayed in the :guilabel:`Company` field. If the active company is the parent company or one of its branches, then records specifically linked to that entity are accessible only within that entity and will only be visible when the company or branch is selected using the :ref:`company selector `." msgstr "" -#: ../../content/applications/general/companies.rst:167 +#: ../../content/applications/general/companies.rst:169 msgid "In contrast, some records, such as :ref:`products or contacts `, are not tied to any particular entity and are shared by default across the parent company and all its branches. However, they can be restricted to a single entity by setting the appropriate value in the :guilabel:`Company` field, if needed." msgstr "" -#: ../../content/applications/general/companies.rst:173 +#: ../../content/applications/general/companies.rst:175 msgid ":ref:`Branches accounting `" msgstr "" -#: ../../content/applications/general/companies.rst:178 +#: ../../content/applications/general/companies.rst:180 msgid "Reporting" msgstr "" -#: ../../content/applications/general/companies.rst:180 +#: ../../content/applications/general/companies.rst:182 msgid "All :doc:`reports <../finance/accounting/reporting>` can be generated for the parent company alone or with its branches, based on :ref:`user access `." msgstr "" @@ -5012,87 +5011,91 @@ msgstr "" msgid "Paste the token into the :guilabel:`Server Token` field and click :guilabel:`Connect`." msgstr "" -#: ../../content/applications/general/iot/connect.rst:85 +#: ../../content/applications/general/iot/connect.rst:83 +msgid "Once the IoT box is connected to a database, its green LED remains constantly lit." +msgstr "" + +#: ../../content/applications/general/iot/connect.rst:88 msgid "IoT system form" msgstr "" -#: ../../content/applications/general/iot/connect.rst:87 +#: ../../content/applications/general/iot/connect.rst:90 msgid "Once the IoT system is connected to the Odoo database, it is displayed as a card in the IoT app. Click the IP address on the card to access the :ref:`IoT box's ` or :ref:`Windows virtual IoT's ` homepage. Click the card to access the list of :doc:`devices ` connected to the IoT system." msgstr "" -#: ../../content/applications/general/iot/connect.rst:93 +#: ../../content/applications/general/iot/connect.rst:96 msgid ":ref:`Enable the developer mode ` to access the IoT system's :guilabel:`Technical Information`, such as its :guilabel:`Identifier`, :guilabel:`Domain address`, and :guilabel:`Image version`." msgstr "" -#: ../../content/applications/general/iot/connect.rst:98 +#: ../../content/applications/general/iot/connect.rst:101 msgid "By default, drivers are automatically :ref:`updated ` every time the IoT system is restarted. To disable automatic updates, uncheck the :guilabel:`Automatic drivers update` option." msgstr "" -#: ../../content/applications/general/iot/connect.rst:105 +#: ../../content/applications/general/iot/connect.rst:108 msgid "Troubleshooting" msgstr "" -#: ../../content/applications/general/iot/connect.rst:108 +#: ../../content/applications/general/iot/connect.rst:111 msgid "The pairing code does not appear or does not work" msgstr "" -#: ../../content/applications/general/iot/connect.rst:110 +#: ../../content/applications/general/iot/connect.rst:113 msgid "The :ref:`pairing code ` might not be displayed or printed under the following circumstances:" msgstr "" -#: ../../content/applications/general/iot/connect.rst:113 +#: ../../content/applications/general/iot/connect.rst:116 msgid "The IoT system is not connected to the Internet." msgstr "" -#: ../../content/applications/general/iot/connect.rst:114 +#: ../../content/applications/general/iot/connect.rst:117 msgid "The IoT system is already connected to an Odoo database." msgstr "" -#: ../../content/applications/general/iot/connect.rst:115 +#: ../../content/applications/general/iot/connect.rst:118 msgid "The :ref:`pairing code ` display time has expired. Reboot the IoT box or :ref:`restart the Windows virtual IoT service ` to display the pairing code again." msgstr "" -#: ../../content/applications/general/iot/connect.rst:118 +#: ../../content/applications/general/iot/connect.rst:121 msgid "The IoT system's image version is too old and needs to be :ref:`updated `." msgstr "" -#: ../../content/applications/general/iot/connect.rst:122 +#: ../../content/applications/general/iot/connect.rst:125 msgid "The IoT system is connected but does not appear in the database" msgstr "" -#: ../../content/applications/general/iot/connect.rst:124 +#: ../../content/applications/general/iot/connect.rst:127 msgid "The IoT system might take a few minutes to restart when it connects to a database. If it still does not appear after a few minutes:" msgstr "" -#: ../../content/applications/general/iot/connect.rst:127 +#: ../../content/applications/general/iot/connect.rst:130 msgid "Verify that the IoT system can reach the database and the server does not use a multi-database environment." msgstr "" -#: ../../content/applications/general/iot/connect.rst:129 +#: ../../content/applications/general/iot/connect.rst:132 msgid "Reboot the IoT box or :ref:`restart the Windows virtual IoT service `." msgstr "" -#: ../../content/applications/general/iot/connect.rst:132 +#: ../../content/applications/general/iot/connect.rst:135 msgid "The IoT box is connected to the Odoo database but cannot be reached" msgstr "" -#: ../../content/applications/general/iot/connect.rst:134 +#: ../../content/applications/general/iot/connect.rst:137 msgid "Verify that the IoT system and the computer running the Odoo database are connected to the same network." msgstr "" -#: ../../content/applications/general/iot/connect.rst:138 +#: ../../content/applications/general/iot/connect.rst:141 msgid "The Windows virtual IoT's homepage cannot be accessed from another device" msgstr "" -#: ../../content/applications/general/iot/connect.rst:140 +#: ../../content/applications/general/iot/connect.rst:143 msgid "Check the :ref:`iot/windows-iot/firewall`." msgstr "" -#: ../../content/applications/general/iot/connect.rst:143 +#: ../../content/applications/general/iot/connect.rst:146 msgid "The IoT system is disconnected from the database after an Odoo upgrade" msgstr "" -#: ../../content/applications/general/iot/connect.rst:145 +#: ../../content/applications/general/iot/connect.rst:148 msgid ":ref:`Update the IoT system's image ` by flashing the IoT box's card or :ref:`uninstalling the Windows virtual IoT program ` and :ref:`reinstalling ` the latest package for Windows **matching your database's version**." msgstr "" @@ -5191,7 +5194,7 @@ msgid "On the :guilabel:`Work Order` screen, a status graphic indicates whether msgstr "" #: ../../content/applications/general/iot/devices/camera.rst:82 -#: ../../content/applications/general/iot/devices/footswitch.rst:52 +#: ../../content/applications/general/iot/devices/footswitch.rst:50 #: ../../content/applications/general/iot/devices/measurement_tool.rst:92 msgid ":ref:`workcenter_iot`" msgstr "" @@ -5220,24 +5223,24 @@ msgstr "" msgid "Footswitch recognized on the IoT box." msgstr "" -#: ../../content/applications/general/iot/devices/footswitch.rst:27 +#: ../../content/applications/general/iot/devices/footswitch.rst:26 msgid "Link a footswitch to a work center in the Odoo Manufacturing app" msgstr "" -#: ../../content/applications/general/iot/devices/footswitch.rst:29 -msgid "To link a footswitch to an action, it first needs to be configured on a work center. Navigate to :menuselection:`Manufacturing app --> Configuration --> Work Centers`. From here, go to the desired :guilabel:`Work Center` in which the footswitch will be used, and add the device in the :guilabel:`IoT Triggers` tab, under the :guilabel:`Device` column, by selecting :guilabel:`Add a Line`. Doing so means the footswitch can be linked to an option in the :guilabel:`Action` column drop-down, and optionally, a key can be added to trigger it. An example of an :guilabel:`Action` in the *Manufacturing app* could be the :guilabel:`Validate` or :guilabel:`Mark as Done` buttons on a manufacturing work order." +#: ../../content/applications/general/iot/devices/footswitch.rst:28 +msgid "To link a footswitch to an action, it first needs to be configured on a work center. Navigate to :menuselection:`Manufacturing --> Configuration --> Work Centers`. From here, go to the desired :guilabel:`Work Center` in which the footswitch will be used, and add the device in the :guilabel:`IoT Triggers` tab, under the :guilabel:`Device` column, by selecting :guilabel:`Add a Line`. Doing so means the footswitch can be linked to an option in the :guilabel:`Action` column drop-down, and optionally, a key can be added to trigger it. An example of an :guilabel:`Action` in the *Manufacturing app* could be the :guilabel:`Validate` or :guilabel:`Mark as Done` buttons on a manufacturing work order." msgstr "" -#: ../../content/applications/general/iot/devices/footswitch.rst:-1 -msgid "Footswitch trigger setup on the Odoo database." +#: ../../content/applications/general/iot/devices/footswitch.rst:38 +msgid "Triggers are executed in the order they appear, with the first one taking priority. To reorder the triggers, click the :icon:`oi-draggable` :guilabel:`(draggable)` icon to the left of each trigger, and drag it to the desired position." msgstr "" #: ../../content/applications/general/iot/devices/footswitch.rst:43 -msgid "It should be noted that the first listed trigger is chosen first. So, the order matters, and these triggers can be dragged into any order. In the picture above, using the footswitch automatically skips the part of the process that's currently being worked on." +msgid "To identify the key assigned to each pedal, connect the footswitch to any computer and press the pedals as if typing. Usually, the pedals are mapped by default to the keyboard keys `a`, `b`, and `c`." msgstr "" -#: ../../content/applications/general/iot/devices/footswitch.rst:48 -msgid "On the :guilabel:`Work Order` screen, a status graphic indicates whether the database is correctly connected to the footswitch." +#: ../../content/applications/general/iot/devices/footswitch.rst:46 +msgid "The :guilabel:`Work Order` list includes a status indicator that shows whether the database is successfully connected to the footswitch." msgstr "" #: ../../content/applications/general/iot/devices/measurement_tool.rst:3 @@ -5449,7 +5452,7 @@ msgid "A list of reports currently linked to a printer in the IoT app." msgstr "" #: ../../content/applications/general/iot/devices/printer.rst:113 -msgid ":doc:`POS Order Printing <../../../sales/point_of_sale/restaurant/kitchen_printing>`" +msgid ":ref:`POS Order Printing `" msgstr "" #: ../../content/applications/general/iot/devices/printer.rst:116 @@ -6054,7 +6057,7 @@ msgid "Press **>0<** again to :guilabel:`SAVE`; the scale restarts." msgstr "" #: ../../content/applications/general/iot/devices/scale.rst:56 -msgid "Reboot the IoT box or :ref:`restart the Windows virtual IoT service `. The scale should then appear as `Toledo 8217`, as opposed to the previous display, where it appeared as `Adam Equipment Serial`." +msgid "Reboot the IoT box or :ref:`restart the Windows virtual IoT service `. The scale should then appear as `Toledo 8217`." msgstr "" #: ../../content/applications/general/iot/devices/screen.rst:3 @@ -6675,6 +6678,26 @@ msgstr "" msgid "Once the IoT box is :doc:`connected to the Odoo database `, its homepage can be accessed from Odoo by opening the IoT app and clicking the URL displayed on the IoT box's card." msgstr "" +#: ../../content/applications/general/iot/iot_box.rst:99 +msgid "LED status" +msgstr "" + +#: ../../content/applications/general/iot/iot_box.rst:101 +msgid "The IoT box features two LEDs, located to the right of the SD card slot, which show its status and help with troubleshooting when no display is connected. The LEDs can be interpreted as follows:" +msgstr "" + +#: ../../content/applications/general/iot/iot_box.rst:104 +msgid "**Red LED lit**: The IoT box has no Internet connection. Ensure the Ethernet cable is properly connected or :ref:`connect the IoT box via Wi-Fi `." +msgstr "" + +#: ../../content/applications/general/iot/iot_box.rst:106 +msgid "**Green LED flashing**: The IoT box is awaiting :doc:`connection to a database `." +msgstr "" + +#: ../../content/applications/general/iot/iot_box.rst:107 +msgid "**Green LED constantly lit**: The IoT box is connected to a database; no further action is required." +msgstr "" + #: ../../content/applications/general/iot/windows_iot.rst:5 msgid "To start using the Windows virtual IoT:" msgstr "" @@ -7308,10 +7331,14 @@ msgid "Once complete, click :guilabel:`Save` to save the changes, and implement msgstr "" #: ../../content/applications/general/users/access_rights.rst:34 +msgid "Manage user permissions" +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:36 msgid "The access rights for :ref:`individual users ` are set when the user is added to the database, but they can be adjusted at any point in the user's profile." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:37 +#: ../../content/applications/general/users/access_rights.rst:39 msgid "To make changes to a user's rights, click on the desired user to edit their profile." msgstr "" @@ -7319,15 +7346,15 @@ msgstr "" msgid "Users menu in the Users & Companies section of the Settings app of Odoo." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:42 +#: ../../content/applications/general/users/access_rights.rst:44 msgid "On the user's profile page, in the :guilabel:`Access Rights` tab, scroll down to view the current permissions." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:45 +#: ../../content/applications/general/users/access_rights.rst:47 msgid "For each app, use the drop-down menu to select what level of permission this user should have. The options vary for each section, yet the most common are: :guilabel:`Blank/None`, :guilabel:`User: Own Documents`, :guilabel:`User: All Documents`, or :guilabel:`Administrator`." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:49 +#: ../../content/applications/general/users/access_rights.rst:51 msgid "The :guilabel:`Administration` field in the :guilabel:`Access Rights` tab has the following options: :guilabel:`Settings` or :guilabel:`Access Rights`." msgstr "" @@ -7335,15 +7362,79 @@ msgstr "" msgid "The Sales apps drop-down menu to set the user's level of permissions." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:58 +#: ../../content/applications/general/users/access_rights.rst:60 +msgid "Manage specific permissions" +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:62 +msgid "While access rights are typically assigned in bundles under specific roles, they can also be set as explicit permissions." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:66 +msgid "For example, giving a user the :guilabel:`Administrator` permission for **Timesheets** gives them full access to that app. That user, while holding full access, can *still* have their ability to manage *their own* timesheets restricted — such as in the case of a salaried payroll administrator who does not need to track time." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:71 +msgid "To manage specific permissions, :ref:`developer mode ` must be enabled." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:73 +msgid "After that, navigate to the :menuselection:`Settings` app. Then click :guilabel:`Manage Users`, select a user, and go to the :guilabel:`Technical Access Rights` tab. From here, :guilabel:`Groups` can be edited, and specific access rights can be managed across the various sections. If no changes are made to these groups, then their permissions will mirror the selections made in the :guilabel:`Access Rights` tab." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:79 +msgid ":guilabel:`Selected groups`: a list of detailed access rights, set by choices made in the :guilabel:`Access Rights` tab." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:81 +msgid ":guilabel:`Groups added automatically`: *implied* permissions that are *inherited* with the explicit permissions already granted to the user. The values here will match the values listed under a given *Group*'s form located under the :menuselection:`Users & Companies --> Groups` menu, in the :guilabel:`Inherited` tab." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:-1 +msgid "The technical access rights tab opened up for a user profile." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:90 +msgid "When the *Sales Administrator* permission set is assigned to a user, then the *Canned Responses Administrator* permissions are inherited automatically. These assignments are reflected across the values listed in the :guilabel:`Selected Groups` and :guilabel:`Groups added automatically` tables, respectively." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:95 +msgid "To add a permission to this user profile, click :guilabel:`Add a line` in the :guilabel:`Selected groups` table, and then add permissions to this user profile. To remove a permission, click the :icon:`fa-times` :guilabel:`(cancel)` at the end of that permission's row." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:100 +msgid "Removing permissions from the :guilabel:`Selected Groups` list can impact what permissions are listed in the :guilabel:`Groups added automatically` list, since selected permission groups inform what permission groups are added automatically." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:104 +msgid "Clicking on the permission itself will open a group management form. Learn more about :ref:`managing groups `." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:107 +msgid "Any permission in the :guilabel:`Groups added automatically` section are implied or required by the permission shown in the :guilabel:`Selected groups` section. These cannot be removed, but more users can be given these permissions by clicking on the permission itself, and then adding the user to that permission's group." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:113 +msgid "Any permission in green is already provided by another permission (for example, setting the :guilabel:`Website` app's permission to :guilabel:`Editor and Designer` will also give that user the :guilabel:`Restricted Editor` permission)." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:116 +msgid "Any permissions in red are conflicting and cannot be active at the same time." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:117 +msgid "Any permissions in *italics* is implied by a :guilabel:`Selected group` (these are usually found in the :guilabel:`Groups added automatically`)." +msgstr "" + +#: ../../content/applications/general/users/access_rights.rst:123 msgid "Create and modify groups" msgstr "" -#: ../../content/applications/general/users/access_rights.rst:60 +#: ../../content/applications/general/users/access_rights.rst:125 msgid "*Groups* are app-specific sets of permissions that are used to manage common access rights for a large amount of users. Administrators can modify the existing groups in Odoo, or create new ones to define rules for models within an application." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:64 +#: ../../content/applications/general/users/access_rights.rst:129 msgid "To access groups, first activate Odoo's :ref:`developer mode `, then go to :menuselection:`Settings app --> Users & Companies --> Groups`." msgstr "" @@ -7351,23 +7442,23 @@ msgstr "" msgid "Groups menu in the Users & Companies section of the Settings app of Odoo." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:70 +#: ../../content/applications/general/users/access_rights.rst:135 msgid "To create a new group from the :guilabel:`Groups` page, click :guilabel:`Create`. Then, from the blank group form, select an :guilabel:`Application`, and complete the group form (detailed below)." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:73 +#: ../../content/applications/general/users/access_rights.rst:138 msgid "To modify existing groups, click on an existing group from the list displayed on the :guilabel:`Groups` page, and edit the contents of the form." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:76 +#: ../../content/applications/general/users/access_rights.rst:141 msgid "Enter a :guilabel:`Name` for the group and tick the checkbox next to :guilabel:`Share Group`, if this group was created to set access rights for sharing data with some users." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:80 +#: ../../content/applications/general/users/access_rights.rst:145 msgid "Always test the settings being changed to ensure they are being applied to the correct users." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:82 +#: ../../content/applications/general/users/access_rights.rst:147 msgid "The group form contains multiple tabs for managing all elements of the group. In each tab, click :guilabel:`Add a line` to add a new row for users or rules, and click the :icon:`fa-times` :guilabel:`(cancel)` icon to remove a row." msgstr "" @@ -7375,55 +7466,55 @@ msgstr "" msgid "Tabs in the Groups form to modify the settings of the group." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:89 +#: ../../content/applications/general/users/access_rights.rst:154 msgid ":guilabel:`Users` tab: lists the current users in the group. Users listed in black have administrative rights. Users without administrative access appear in blue. Click :guilabel:`Add a line` to add users to this group." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:92 +#: ../../content/applications/general/users/access_rights.rst:157 msgid ":guilabel:`Inherited` tab: Inherited means that users added to this group are automatically added to the groups listed on this tab. Click :guilabel:`Add a line` to add inherited groups." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:96 +#: ../../content/applications/general/users/access_rights.rst:161 msgid "For example, if the group *Sales/Administrator* lists the group *Website/Restricted Editor* in its :guilabel:`Inherited` tab, then any users added to the *Sales/Administrator* group automatically receive access to the *Website/Restricted Editor* group, as well." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:100 +#: ../../content/applications/general/users/access_rights.rst:165 msgid ":guilabel:`Menus` tab: defines which models the group can have access to. Click :guilabel:`Add a line` to add a specific menu." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:102 +#: ../../content/applications/general/users/access_rights.rst:167 msgid ":guilabel:`Views` tab: lists which views in Odoo the group has access to. Click :guilabel:`Add a line` to add a view to the group." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:104 +#: ../../content/applications/general/users/access_rights.rst:169 msgid ":guilabel:`Access Rights` tab: lists the first level of rights (models) that this group has. The :guilabel:`Name` column represents the name for the current group's access to the model selected in the :guilabel:`Model` column." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:108 +#: ../../content/applications/general/users/access_rights.rst:173 msgid "To link a new access right to a group, click :guilabel:`Add a line`. Select the appropriate model from the :guilabel:`Model` drop-down, then enter a name for the access right in the :guilabel:`Name` column. For each model, enable the following options as appropriate:" msgstr "" -#: ../../content/applications/general/users/access_rights.rst:112 +#: ../../content/applications/general/users/access_rights.rst:177 msgid ":guilabel:`Read`: Users can see the object's existing values." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:113 +#: ../../content/applications/general/users/access_rights.rst:178 msgid ":guilabel:`Write`: Users can edit the object's existing values." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:114 +#: ../../content/applications/general/users/access_rights.rst:179 msgid ":guilabel:`Create`: Users can create new values for the object." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:115 +#: ../../content/applications/general/users/access_rights.rst:180 msgid ":guilabel:`Delete`: Users can delete values for the object." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:118 +#: ../../content/applications/general/users/access_rights.rst:183 msgid "While there are no conventions for naming access rights, it is advisable to choose a name that identifies its purpose." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:121 +#: ../../content/applications/general/users/access_rights.rst:186 msgid "For example, the access that purchase managers have to the :guilabel:`Contact` model could be named `res.partner.purchase.manager`. This consists of the technical name of the model, followed by a name identifying the group of users in question." msgstr "" @@ -7431,83 +7522,83 @@ msgstr "" msgid "Name of access rights to a model." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:128 +#: ../../content/applications/general/users/access_rights.rst:193 msgid "To find the model's technical name from the current view, first enter a placeholder text in the :guilabel:`Name` field, then click the :guilabel:`Model` name, then the :icon:`fa-arrow-right` :guilabel:`(Internal link)` icon." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:132 +#: ../../content/applications/general/users/access_rights.rst:197 msgid ":guilabel:`Record Rules`: lists the second layer of editing and visibility rights. :guilabel:`Record Rules` overwrite, or refine, the group's access rights. Click :guilabel:`Add a line` to add a record rule to this group. For each rule, choose values for the following options:" msgstr "" -#: ../../content/applications/general/users/access_rights.rst:136 +#: ../../content/applications/general/users/access_rights.rst:201 msgid ":guilabel:`Apply for Read`." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:137 +#: ../../content/applications/general/users/access_rights.rst:202 msgid ":guilabel:`Apply for Write`." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:138 +#: ../../content/applications/general/users/access_rights.rst:203 msgid ":guilabel:`Apply for Create`." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:139 +#: ../../content/applications/general/users/access_rights.rst:204 msgid ":guilabel:`Apply for Delete`." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:142 +#: ../../content/applications/general/users/access_rights.rst:207 msgid "Record rules are written using a *domain*, or conditions that filter data. A domain expression is a list of such conditions. For example:" msgstr "" -#: ../../content/applications/general/users/access_rights.rst:145 +#: ../../content/applications/general/users/access_rights.rst:210 msgid "`[('mrp_production_ids', 'in', user.partner_id.commercial_partner_id.production_ids.ids)]`" msgstr "" -#: ../../content/applications/general/users/access_rights.rst:147 +#: ../../content/applications/general/users/access_rights.rst:212 msgid "This record rule is to enable MRP consumption warnings for subcontractors." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:149 +#: ../../content/applications/general/users/access_rights.rst:214 msgid "Odoo has a library of preconfigured record rules for ease of use. Users without knowledge of domains (and domain expressions) should consult an Odoo Business Analyst, or the Odoo Support Team, before making changes." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:156 +#: ../../content/applications/general/users/access_rights.rst:221 msgid "Superuser mode" msgstr "" -#: ../../content/applications/general/users/access_rights.rst:158 +#: ../../content/applications/general/users/access_rights.rst:223 msgid "*Superuser mode* allows the user to bypass record rules and access rights. To activate *Superuser mode*, first, activate :ref:`developer mode `. Then, navigate to the *debug* menu, represented by a :icon:`fa-bug` :guilabel:`(debug)` icon, located in the top banner." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:162 +#: ../../content/applications/general/users/access_rights.rst:227 msgid "Finally, towards the bottom of the menu, click :guilabel:`Become Superuser`." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:165 +#: ../../content/applications/general/users/access_rights.rst:230 msgid "Only users with *Settings* access for the *Administration* section of the *Access Rights* (in their user profile) are allowed to log in to *Superuser mode*." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:169 +#: ../../content/applications/general/users/access_rights.rst:234 msgid "*Superuser mode* allows for circumvention of record rules and access rights, and therefore, should be exercised with extreme caution." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:172 +#: ../../content/applications/general/users/access_rights.rst:237 msgid "Upon exiting *Superuser mode*, users may be locked out of the database, due to changes that were made. This can cause *impotent admin*, or an administrator without the ability to change access rights/settings." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:176 +#: ../../content/applications/general/users/access_rights.rst:241 msgid "In this case contact Odoo Support here: `new help ticket `_. The support team is able to restore access using a support login." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:179 +#: ../../content/applications/general/users/access_rights.rst:244 msgid "To leave *Superuser mode*, log out of the account, by navigating to the upper-right corner, and clicking on the :guilabel:`OdooBot` username. Then, select the :guilabel:`Log out` option." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:183 +#: ../../content/applications/general/users/access_rights.rst:248 msgid "An alternative way to activate *Superuser mode* is to login as a superuser. To do that, navigate to the login screen, and enter the appropriate :guilabel:`Email` and :guilabel:`Password`." msgstr "" -#: ../../content/applications/general/users/access_rights.rst:186 +#: ../../content/applications/general/users/access_rights.rst:251 msgid "Instead of clicking :guilabel:`Login`, click :guilabel:`Log in as superuser`." msgstr "" diff --git a/locale/sources/hr.pot b/locale/sources/hr.pot index f4152ffc04..e227b514c3 100644 --- a/locale/sources/hr.pot +++ b/locale/sources/hr.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1451,7 +1451,7 @@ msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:428 #: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:862 #: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1365 -#: ../../content/applications/hr/time_off.rst:527 +#: ../../content/applications/hr/time_off.rst:528 msgid "Overview" msgstr "" @@ -2401,8 +2401,9 @@ msgid "An Attendances app record form, filled out for Doris Cole for April 23, 2 msgstr "" #: ../../content/applications/hr/employees.rst:5 -#: ../../content/applications/hr/employees.rst:59 +#: ../../content/applications/hr/employees.rst:64 #: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:35 +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:89 msgid "Employees" msgstr "" @@ -2410,7 +2411,7 @@ msgstr "" msgid "Odoo **Employees** centralizes :doc:`personnel files `, employment :doc:`contracts `, and :doc:`departmental hierarchies ` in one system. Properly configuring its settings ensures the dashboard shows each employee's real-time attendance and work location—data that drives payroll accuracy, capacity planning, and compliance reporting." msgstr "" -#: ../../content/applications/hr/employees.rst:53 +#: ../../content/applications/hr/employees.rst:58 #: ../../content/applications/hr/fleet/new_vehicle.rst:16 #: ../../content/applications/hr/lunch.rst:19 #: ../../content/applications/hr/payroll.rst:15 @@ -2418,47 +2419,47 @@ msgstr "" msgid "Settings" msgstr "" -#: ../../content/applications/hr/employees.rst:55 +#: ../../content/applications/hr/employees.rst:60 msgid "To view and configure the available settings, navigate to :menuselection:`Employees app --> Configuration --> Settings`." msgstr "" -#: ../../content/applications/hr/employees.rst:61 +#: ../../content/applications/hr/employees.rst:66 msgid ":guilabel:`Presence Display`: select how the employee's availability status is calculated." msgstr "" -#: ../../content/applications/hr/employees.rst:63 +#: ../../content/applications/hr/employees.rst:68 msgid ":guilabel:`Based on attendances`: marked available when :ref:`checked into ` the **Attendances** app." msgstr "" -#: ../../content/applications/hr/employees.rst:65 +#: ../../content/applications/hr/employees.rst:70 msgid ":guilabel:`Based on user status in system`: marked available when the :doc:`employee logs in to Odoo `." msgstr "" -#: ../../content/applications/hr/employees.rst:68 +#: ../../content/applications/hr/employees.rst:73 msgid ":guilabel:`Advanced Presence Control`: when enabled, presence status can be calculated from operational signals rather than check-ins or logins:" msgstr "" -#: ../../content/applications/hr/employees.rst:71 +#: ../../content/applications/hr/employees.rst:76 msgid ":guilabel:`Based on number of emails sent`: an employee is marked present if they send at least # emails per hour; otherwise, they are marked absent. Enter the minimum number of emails that must be sent in the :guilabel:`Sent Emails` field." msgstr "" -#: ../../content/applications/hr/employees.rst:74 +#: ../../content/applications/hr/employees.rst:79 msgid ":guilabel:`Based on IP Address`: an employee is marked present only when connected from one of the specified corporate IP addresses. Enter the IP addresses in the :guilabel:`IP Addresses` field, separating each address with a comma." msgstr "" -#: ../../content/applications/hr/employees.rst:78 +#: ../../content/applications/hr/employees.rst:83 msgid ":guilabel:`Skills Management`: enable this option to display the :ref:`resumé tab ` on employee profiles. This allows for the display of :ref:`work experience `, :ref:`skills `, and :doc:`certifications `." msgstr "" -#: ../../content/applications/hr/employees.rst:81 +#: ../../content/applications/hr/employees.rst:86 msgid ":guilabel:`Remote Work`: enable this option to allow for a detailed schedule to appear on the employee form, in the :ref:`Work Information ` tab. When enabled, the specific location can be set for each working day for the employee. The corresponding icon is displayed in the upper-right corner of the employee card, indicating their location by icon, and status by color." msgstr "" -#: ../../content/applications/hr/employees.rst:88 +#: ../../content/applications/hr/employees.rst:93 msgid "A green :icon:`fa-home` :guilabel:`(home)` icon indicates the employee is working from home that day. A :icon:`fa-building` :guilabel:`(building)` icon means the employee is scheduled to work at the office." msgstr "" -#: ../../content/applications/hr/employees.rst:92 +#: ../../content/applications/hr/employees.rst:97 msgid "The *color* of the icon indicates the employee's status, with green indicating present, yellow indicating absent, and gray indicating it is outside of the employee's working hours." msgstr "" @@ -2466,23 +2467,23 @@ msgstr "" msgid "Two employee Kanban cards displaying their working location and status." msgstr "" -#: ../../content/applications/hr/employees.rst:99 +#: ../../content/applications/hr/employees.rst:104 msgid "Work organization" msgstr "" -#: ../../content/applications/hr/employees.rst:101 +#: ../../content/applications/hr/employees.rst:106 msgid "Using the drop-down menu, select the default :guilabel:`Company Working Hours`. The default options are :guilabel:`Standard 40 hours/week`, :guilabel:`Appointment Resource Default Calendar`, and :guilabel:`Standard 32 hours/week (4 work days, friday free)`." msgstr "" -#: ../../content/applications/hr/employees.rst:105 +#: ../../content/applications/hr/employees.rst:110 msgid "The available working hours listed are the same as the configured :ref:`working schedules ` in the **Payroll** app. Working hours can be created and modified from both the **Payroll** and **Employees** apps." msgstr "" -#: ../../content/applications/hr/employees.rst:110 +#: ../../content/applications/hr/employees.rst:115 msgid "Employee update rights" msgstr "" -#: ../../content/applications/hr/employees.rst:112 +#: ../../content/applications/hr/employees.rst:117 msgid "Enable the :guilabel:`Employee Editing` option to allow employees to edit their own data on their employee record." msgstr "" @@ -2824,7 +2825,7 @@ msgstr "" #: ../../content/applications/hr/employees/departments.rst:67 #: ../../content/applications/hr/fleet/accidents.rst:141 -#: ../../content/applications/hr/recruitment.rst:183 +#: ../../content/applications/hr/recruitment.rst:158 msgid "Kanban view" msgstr "" @@ -3315,99 +3316,99 @@ msgstr "" msgid "To add a new location, type in the location name, then click :guilabel:`Create (new location)` to add the location, or :guilabel:`Create and edit...` to add the location, assign a :guilabel:`Work Address`, and a :guilabel:`Cover Image`." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:262 +#: ../../content/applications/hr/employees/new_employee.rst:264 msgid "APPROVERS" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:264 +#: ../../content/applications/hr/employees/new_employee.rst:266 msgid "To see this section, the user must have either :guilabel:`Administrator` or :guilabel:`Officer: Manage all employees` rights set for the **Employees** application. For the category to appear, the respective app **must** be installed. For example, if the **Time Off** app is not installed, the :guilabel:`Time Off` approver field does not appear. Only one selection can be made for each field." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:270 +#: ../../content/applications/hr/employees/new_employee.rst:272 msgid "The users that appear in the drop-down menu for the :guilabel:`Approvers` section **must** have *Administrator* rights set for the corresponding human resources role." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:273 +#: ../../content/applications/hr/employees/new_employee.rst:275 msgid "To check who has these rights, go to :menuselection:`Settings app` and click :icon:`oi-arrow-right` :guilabel:`Manage Users` in the :guilabel:`Users` section. Then, click on an employee, then click into the :guilabel:`Access Rights` tab. Scroll to the :guilabel:`HUMAN RESOURCES` and check the various settings." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:278 +#: ../../content/applications/hr/employees/new_employee.rst:280 msgid "In order for the user to appear as an approver for :guilabel:`Expenses`, they **must** have either :guilabel:`Team Approver`, :guilabel:`All Approver`, or :guilabel:`Administrator` set for the :guilabel:`Expenses` role." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:281 +#: ../../content/applications/hr/employees/new_employee.rst:283 msgid "In order for the user to appear as an approver for :guilabel:`Time Off`, they **must** have either :guilabel:`Officer:Manage all Requests` or :guilabel:`Administrator` set for the :guilabel:`Time Off` role." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:284 +#: ../../content/applications/hr/employees/new_employee.rst:286 msgid "In order for the user to appear as an approver for :guilabel:`Timesheets`, they **must** have either :guilabel:`Officer:Manage all contracts` or :guilabel:`Administrator` set for the :guilabel:`Payroll` role." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:287 +#: ../../content/applications/hr/employees/new_employee.rst:289 msgid "In order for the user to appear as an approver for :guilabel:`Attendances`, they **must** have :guilabel:`Administrator` set for the :guilabel:`Payroll` role." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:290 +#: ../../content/applications/hr/employees/new_employee.rst:292 msgid ":guilabel:`Expense`: using the drop-down menus, select the user responsible for approving all expenses for the employee." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:292 +#: ../../content/applications/hr/employees/new_employee.rst:294 msgid ":guilabel:`Time Off`: using the drop-down menus, select the user responsible for approving all time off requests from this employee." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:294 +#: ../../content/applications/hr/employees/new_employee.rst:296 msgid ":guilabel:`Timesheet`: using the drop-down menus, select the user responsible for approving all the employee's timesheet entries." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:296 +#: ../../content/applications/hr/employees/new_employee.rst:298 msgid ":guilabel:`Attendance`: using the drop-down menus, select the user responsible for approving all attendance entries for the employee." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:300 +#: ../../content/applications/hr/employees/new_employee.rst:302 msgid "REMOTE WORK" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:302 +#: ../../content/applications/hr/employees/new_employee.rst:304 msgid "This section **only** appears if the *Remote Work* setting is enabled in the configuration menu." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:304 +#: ../../content/applications/hr/employees/new_employee.rst:306 msgid "Use the drop-down menu to select the default location the employee works, for each day of the week. The default options are :guilabel:`Home`, :guilabel:`Office`, or :guilabel:`Other`." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:307 +#: ../../content/applications/hr/employees/new_employee.rst:309 msgid "A new location can be typed into the field, then click either :guilabel:`Create (new location)` to add the location, or :guilabel:`Create and edit...` to add the new location and edit the form." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:310 +#: ../../content/applications/hr/employees/new_employee.rst:312 msgid "After edits are done, click :guilabel:`Save & Close`, and the new location is added, and populates the field." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:313 +#: ../../content/applications/hr/employees/new_employee.rst:315 msgid "Leave the field blank (:guilabel:`Unspecified`) for non-working days, such as Saturday and Sunday." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:316 +#: ../../content/applications/hr/employees/new_employee.rst:318 msgid "It is also possible to add or modify work locations by navigating to :menuselection:`Employees app --> Configuration --> Work Locations`. To modify a location, click on an existing location, then make any changes on the form." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:320 +#: ../../content/applications/hr/employees/new_employee.rst:322 msgid "Click :guilabel:`New` to create a new location, then enter the following information on the form. All fields are **required**." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:323 +#: ../../content/applications/hr/employees/new_employee.rst:325 msgid ":guilabel:`Work Location`: enter the name for the location. This can be as general or as specific, as needed, such as `Home` or `Building 1, Second Floor`, respectfully." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:325 +#: ../../content/applications/hr/employees/new_employee.rst:327 msgid ":guilabel:`Work Address`: using the drop-down menu, select the address for the location." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:326 +#: ../../content/applications/hr/employees/new_employee.rst:328 msgid ":guilabel:`Cover Image`: click on the icon to select it for the :guilabel:`Cover Image`. Options are a :icon:`fa-home` :guilabel:`(home)` icon, an :icon:`fa-building-o` :guilabel:`(building)` icon, and a :icon:`fa-map-marker` :guilabel:`(map marker)` icon." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:329 +#: ../../content/applications/hr/employees/new_employee.rst:331 msgid ":guilabel:`Company`: using the drop-down menu, select the company the location applies to. The current company populates this field, by default. This field **only** appears in a multi-company database." msgstr "" @@ -3415,115 +3416,115 @@ msgstr "" msgid "A new work location form with all fields filled out." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:339 +#: ../../content/applications/hr/employees/new_employee.rst:341 msgid "SCHEDULE" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:341 +#: ../../content/applications/hr/employees/new_employee.rst:343 msgid "This section defines when the employee is expected to work." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:343 +#: ../../content/applications/hr/employees/new_employee.rst:345 msgid ":guilabel:`Working Hours`: using the drop-down menu, select the hours the employee is expected to work. By default, a :guilabel:`Standard 40 hour/week` working schedule is available. If the **Timesheets** app is installed, an :guilabel:`Appointment Resource Default Calendar` option is also available." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:348 +#: ../../content/applications/hr/employees/new_employee.rst:350 msgid "To view and modify the specific daily working hours, click the :icon:`oi-arrow-right` :guilabel:`(Internal link)` arrow at the end of the :guilabel:`Working Hours` line. Working hours can be modified or deleted here." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:353 +#: ../../content/applications/hr/employees/new_employee.rst:355 msgid ":guilabel:`Working Hours` are related to a company's working schedules, and an Employee **cannot** have working hours that are outside of a company's working schedule." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:356 +#: ../../content/applications/hr/employees/new_employee.rst:358 msgid "Each individual working schedule is company-specific. For multi-company databases, each company **must** have its own working hours set." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:359 +#: ../../content/applications/hr/employees/new_employee.rst:361 msgid "If an employee's working hours are not configured as a working schedule for the company, new working schedules can be added, or existing working schedules can be modified." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:362 +#: ../../content/applications/hr/employees/new_employee.rst:364 msgid "Working hours can be modified in the **Payroll** application, where they are referred to as :guilabel:`Working Schedules`." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:365 +#: ../../content/applications/hr/employees/new_employee.rst:367 msgid "For more information on how to create or modify :guilabel:`Working Schedules` in the **Payroll** application, refer to the :doc:`../../hr/payroll` documentation." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:368 +#: ../../content/applications/hr/employees/new_employee.rst:370 msgid "After the new working time is created, or an existing one is modified, the :guilabel:`Working Hours` can be selected on the employee form." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:371 +#: ../../content/applications/hr/employees/new_employee.rst:373 msgid ":guilabel:`Timezone`: using the drop-down menu, select the timezone for the employee." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:374 +#: ../../content/applications/hr/employees/new_employee.rst:376 msgid "PLANNING" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:376 +#: ../../content/applications/hr/employees/new_employee.rst:378 msgid "This section is **only** visible if the **Planning** app is installed, as this section affects what the employee can be assigned in the **Planning** app." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:379 +#: ../../content/applications/hr/employees/new_employee.rst:381 msgid ":guilabel:`Roles`: using the drop-down menu, select all the roles the employee can perform. There are no preconfigured roles available, so all roles must be :ref:`configured in the Planning app `. There is no limit to the number of roles assigned to an employee." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:382 +#: ../../content/applications/hr/employees/new_employee.rst:384 msgid ":guilabel:`Default Role`: using the drop-down menu, select the default role the employee will typically perform. If the :guilabel:`Default Role` is selected before the :guilabel:`Roles` field is configured, the selected role is automatically added to the list of :guilabel:`Roles`." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:389 +#: ../../content/applications/hr/employees/new_employee.rst:391 msgid "Private information tab" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:391 +#: ../../content/applications/hr/employees/new_employee.rst:393 msgid "No information in the :guilabel:`Private Information` tab is required to create an employee, however, some information in this section may be necessary for the company's payroll department." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:394 +#: ../../content/applications/hr/employees/new_employee.rst:396 msgid "In order to properly process payslips and ensure all deductions are accounted for, it is recommended to check with the accounting department and payroll department to ensure all required fields are populated." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:398 +#: ../../content/applications/hr/employees/new_employee.rst:400 msgid "Enter the various information in the following sections and fields of the :guilabel:`Private Information` tab. Fields are entered either using a drop-down menu, ticking a checkbox, or typing in the information." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:403 +#: ../../content/applications/hr/employees/new_employee.rst:405 msgid "Depending on the localization setting, other fields may be present. For example, for the United States, a :guilabel:`SSN No` (Social Security Number) field is present." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:407 +#: ../../content/applications/hr/employees/new_employee.rst:411 msgid "PRIVATE CONTACT" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:409 +#: ../../content/applications/hr/employees/new_employee.rst:413 msgid ":guilabel:`Private Address`: enter the employee's private home address." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:410 +#: ../../content/applications/hr/employees/new_employee.rst:414 msgid ":guilabel:`Private Email`: enter the employee's personal email address." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:411 +#: ../../content/applications/hr/employees/new_employee.rst:415 msgid ":guilabel:`Private Phone`: enter the employee's personal phone number." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:412 +#: ../../content/applications/hr/employees/new_employee.rst:416 msgid ":guilabel:`Bank Account`: enter the bank account number for the employee, and click :guilabel:`Create and edit..`. A :guilabel:`Create Bank Account` form loads with the bank account number populating the :guilabel:`Account Number` field. Next, select the :guilabel:`Bank` using the drop-down menu." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:417 +#: ../../content/applications/hr/employees/new_employee.rst:421 msgid "If the bank is not already configured, click :guilabel:`Create and edit...` and a blank :guilabel:`Create Bank` form loads, with the bank name populating the :guilabel:`Bank` field. Next, enter the :guilabel:`Bank Identifier Code`, also referred to as a BIC or SWIFT code. Then enter the :guilabel:`Bank Address`, :guilabel:`Phone`, and :guilabel:`Email`. Once the form is complete, click :guilabel:`Save & Close`, and the new bank populates the :guilabel:`Bank` field." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:423 +#: ../../content/applications/hr/employees/new_employee.rst:427 msgid "Next, enter the :guilabel:`ABA/Routing` number for the bank account, then select the :guilabel:`Account Holder`, which is typically the employee." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:426 +#: ../../content/applications/hr/employees/new_employee.rst:430 msgid "Finally, click the :guilabel:`Send Money` toggle. This changes the toggle color to green, and the status changes from :guilabel:`Untrusted` in black text, to :guilabel:`Trusted` in green text." msgstr "" @@ -3531,251 +3532,252 @@ msgstr "" msgid "The Create Bank Account form with all the information filled out." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:433 +#: ../../content/applications/hr/employees/new_employee.rst:437 msgid "**All** bank accounts must be marked as :guilabel:`Trusted`, if not payments cannot be processed and sent to the bank account. Having an :guilabel:`Untrusted` bank account for an employee will cause an error in the **Payroll** application." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:437 +#: ../../content/applications/hr/employees/new_employee.rst:441 msgid ":guilabel:`Home-Work Distance`: enter the number, in miles or kilometers, the employee commutes to work, in one direction. The unit of measure can be changed from kilometers (:guilabel:`km`) to miles (:guilabel:`mi`) using the drop-down menu. This field is only necessary if the employee is receiving any type of commuter benefits or tax deductions based on commute distances." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:441 +#: ../../content/applications/hr/employees/new_employee.rst:445 msgid ":guilabel:`Private Car Plate`: enter the license plate for the employee's personal car." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:444 +#: ../../content/applications/hr/employees/new_employee.rst:448 msgid "EMERGENCY" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:446 +#: ../../content/applications/hr/employees/new_employee.rst:450 msgid "This section details the person to contact in the event of an emergency." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:448 +#: ../../content/applications/hr/employees/new_employee.rst:452 msgid ":guilabel:`Contact Name`: enter the emergency contact's name." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:449 +#: ../../content/applications/hr/employees/new_employee.rst:453 msgid ":guilabel:`Contact Phone`: enter the emergency contact's phone number. It is recommended to enter a phone number that the person has the most access to, typically a mobile phone." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:453 +#: ../../content/applications/hr/employees/new_employee.rst:457 msgid "FAMILY STATUS" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:455 +#: ../../content/applications/hr/employees/new_employee.rst:459 msgid "This section is used for tax purposes, and affects the **Payroll** app. Enter the following information in the fields." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:458 +#: ../../content/applications/hr/employees/new_employee.rst:462 msgid ":guilabel:`Marital Status`: select the marital status for the employee using the drop-down menu. The default options are :guilabel:`Single`, :guilabel:`Married`, :guilabel:`Legal Cohabitant`, :guilabel:`Widower`, and :guilabel:`Divorced`." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:462 +#: ../../content/applications/hr/employees/new_employee.rst:466 msgid "If :guilabel:`Married` or :guilabel:`Legal Cohabitant` is selected, two additional fields appear: :guilabel:`Spouse Complete Name` and :guilabel:`Spouse Birthdate`. Enter these fields with the respective information." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:465 +#: ../../content/applications/hr/employees/new_employee.rst:469 msgid ":guilabel:`Number of Dependent Children`: enter the number of dependent children. This number is the same number used for calculating tax deductions, and should follow all tax regulations regarding applicable dependents." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:470 +#: ../../content/applications/hr/employees/new_employee.rst:474 msgid "CITIZENSHIP" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:472 +#: ../../content/applications/hr/employees/new_employee.rst:476 msgid "This section outlines all the information relating to the employee's citizenship. This section is primarily for employees who are working in a different country than their citizenship. For employees working outside of their home country, for example on a work visa, this information may be required. Information for all fields may not be available." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:477 +#: ../../content/applications/hr/employees/new_employee.rst:481 msgid ":guilabel:`Nationality (Country)`: using the drop-down menu, select the country the employee is from." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:479 +#: ../../content/applications/hr/employees/new_employee.rst:483 msgid ":guilabel:`Identification No`: enter the employee's identification number in this field." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:480 +#: ../../content/applications/hr/employees/new_employee.rst:484 msgid ":guilabel:`SSN No`: enter the employee's social security number." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:481 +#: ../../content/applications/hr/employees/new_employee.rst:485 msgid ":guilabel:`Passport No`: enter the employee's passport number." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:482 +#: ../../content/applications/hr/employees/new_employee.rst:486 msgid ":guilabel:`Gender`: select the employee's gender from the drop-down menu. The default options are :guilabel:`Male`, :guilabel:`Female`, and :guilabel:`Other`." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:484 +#: ../../content/applications/hr/employees/new_employee.rst:488 msgid ":guilabel:`Date of Birth`: using the calendar selector, select the birthday of the employee." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:485 +#: ../../content/applications/hr/employees/new_employee.rst:489 msgid ":guilabel:`Place of Birth`: enter the city or town the employee was born." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:486 +#: ../../content/applications/hr/employees/new_employee.rst:490 msgid ":guilabel:`Country of Birth`: using the drop-down menu, select the country the employee was born." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:487 +#: ../../content/applications/hr/employees/new_employee.rst:491 msgid ":guilabel:`Non-resident`: tick this checkbox if the employee lives in a foreign country." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:490 +#: ../../content/applications/hr/employees/new_employee.rst:494 msgid "EDUCATION" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:492 +#: ../../content/applications/hr/employees/new_employee.rst:496 msgid "This section allows for only one entry, and should be populated with the highest degree the employee has earned." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:495 +#: ../../content/applications/hr/employees/new_employee.rst:499 msgid ":guilabel:`Certificate Level`: using the drop-down menu, select the highest degree the employee has earned. The default options are :guilabel:`Graduate`, :guilabel:`Bachelor`, :guilabel:`Master`, :guilabel:`Doctor`, and :guilabel:`Other`." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:498 +#: ../../content/applications/hr/employees/new_employee.rst:502 msgid ":guilabel:`Field of Study`: type in the subject the employee studied, such as `Business` or `Computer Science`." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:500 +#: ../../content/applications/hr/employees/new_employee.rst:504 msgid ":guilabel:`School`: type in the name of the school the employee earned the degree from." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:503 +#: ../../content/applications/hr/employees/new_employee.rst:507 msgid "WORK PERMIT" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:505 +#: ../../content/applications/hr/employees/new_employee.rst:509 msgid "This section should be filled in if the employee is working on some type of work permit. This section may be left blank if they do not require any work permits for employment." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:508 +#: ../../content/applications/hr/employees/new_employee.rst:512 msgid ":guilabel:`Visa No`: enter the employee's visa number." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:509 +#: ../../content/applications/hr/employees/new_employee.rst:513 msgid ":guilabel:`Work Permit No`: enter the employee's work permit number." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:510 +#: ../../content/applications/hr/employees/new_employee.rst:514 msgid ":guilabel:`Visa Expiration Date`: using the calendar selector, select the date the employee's visa expires." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:512 +#: ../../content/applications/hr/employees/new_employee.rst:516 msgid ":guilabel:`Work Permit Expiration Date`: using the calendar selector, select the date the employee's work permit expires." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:514 +#: ../../content/applications/hr/employees/new_employee.rst:518 msgid ":guilabel:`Work Permit`: click :guilabel:`Upload your file`, then navigate to the work permit file in the file explorer, and click :guilabel:`Select` to add the permit." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:520 +#: ../../content/applications/hr/employees/new_employee.rst:524 +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:125 msgid "Payroll tab" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:522 +#: ../../content/applications/hr/employees/new_employee.rst:526 msgid "Depending on the installed :doc:`localization <../payroll/payroll_localizations>`, the sections and fields in this tab may vary considerably. Due to the specific nature of localizations and the variety of information that may be requested in this tab, it is recommended to check with the accounting department to fill out this section correctly." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:527 +#: ../../content/applications/hr/employees/new_employee.rst:531 msgid "The following fields are universal for all localizations:" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:529 +#: ../../content/applications/hr/employees/new_employee.rst:533 msgid ":guilabel:`Legal Name`: enter the legal name for the employee. This is the name that typically is used for filing taxes." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:531 +#: ../../content/applications/hr/employees/new_employee.rst:535 msgid ":guilabel:`Payslip Language`: enter the desired language to be used when printing payslips for this employee." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:533 +#: ../../content/applications/hr/employees/new_employee.rst:537 msgid ":guilabel:`Registration Number of the Employee`: enter the employees registration number." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:536 +#: ../../content/applications/hr/employees/new_employee.rst:540 msgid ":doc:`Payroll localizations <../payroll/payroll_localizations>`" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:541 +#: ../../content/applications/hr/employees/new_employee.rst:545 msgid "Settings tab" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:543 +#: ../../content/applications/hr/employees/new_employee.rst:547 msgid "This tab provides various fields for different applications within the database. Depending on what applications are installed, different fields may appear in this tab." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:547 +#: ../../content/applications/hr/employees/new_employee.rst:551 msgid "STATUS" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:549 +#: ../../content/applications/hr/employees/new_employee.rst:553 msgid ":guilabel:`Employee Type`: using the drop-down menu, select the *type* of employee. The default options are :guilabel:`Employee`, :guilabel:`Worker`, :guilabel:`Student`, :guilabel:`Trainee`, :guilabel:`Contractor`, and :guilabel:`Freelancer`." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:552 +#: ../../content/applications/hr/employees/new_employee.rst:556 msgid ":guilabel:`Related User`: using the drop-down menu, select a user in the database to link to this employee." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:556 +#: ../../content/applications/hr/employees/new_employee.rst:560 msgid "Employees do **not** need to be users of the database." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:558 +#: ../../content/applications/hr/employees/new_employee.rst:562 msgid "*Employees* do **not** count towards the Odoo subscription billing, while *Users* **do** count towards billing. If the new employee should also be a user, the user **must** be created." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:561 +#: ../../content/applications/hr/employees/new_employee.rst:565 msgid "After the employee is created, click :guilabel:`Create User` at the end of the :guilabel:`Related User` line. A :guilabel:`Create User` form appears." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:564 +#: ../../content/applications/hr/employees/new_employee.rst:568 msgid "The employee name populates the :guilabel:`Name` field by default. If the :guilabel:`Email Address`, :guilabel:`Phone`, :guilabel:`Mobile`, and :guilabel:`photo` are populated on the employee form, the corresponding fields are auto-populated on the :guilabel:`Create User` form." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:568 +#: ../../content/applications/hr/employees/new_employee.rst:572 msgid "Once the form is completed, click the :guilabel:`Save` button. The user is created, and populates the :guilabel:`Related User` field." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:571 +#: ../../content/applications/hr/employees/new_employee.rst:575 msgid "Users can also be created manually. For more information on how to manually add a user, refer to the :doc:`../../general/users/` document." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:575 +#: ../../content/applications/hr/employees/new_employee.rst:579 msgid "APPLICATION SETTINGS" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:577 +#: ../../content/applications/hr/employees/new_employee.rst:581 msgid "This section affects the **Fleet** and **Manufacturing** apps. Enter the following information in this section." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:580 +#: ../../content/applications/hr/employees/new_employee.rst:584 msgid ":guilabel:`Hourly Cost`: enter the hourly cost for the employee, in a XX.XX format. This cost is factored in when the employee is working at a :doc:`work center <../../inventory_and_mrp/manufacturing/advanced_configuration/using_work_centers>`." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:585 +#: ../../content/applications/hr/employees/new_employee.rst:589 msgid "Manufacturing costs are added to the costs for producing a product, if the value of the manufactured product is **not** a fixed amount. This cost does **not** affect the **Payroll** application." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:589 +#: ../../content/applications/hr/employees/new_employee.rst:593 msgid ":guilabel:`Fleet Mobility Card`: if applicable, enter the :guilabel:`Fleet Mobility Card` number" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:592 +#: ../../content/applications/hr/employees/new_employee.rst:596 msgid "ATTENDANCE/POINT OF SALE" msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:594 +#: ../../content/applications/hr/employees/new_employee.rst:598 msgid "This section determines how employees sign in to either the **Attendances** or **Point Of Sale** apps, and only appear if either of these apps is installed." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:597 +#: ../../content/applications/hr/employees/new_employee.rst:601 msgid ":guilabel:`PIN Code`: enter the employee's pin number in this field. This code is used to sign in and out of **Attendances** app kiosks, and a :abbr:`POS (Point Of Sale)` system." msgstr "" -#: ../../content/applications/hr/employees/new_employee.rst:599 +#: ../../content/applications/hr/employees/new_employee.rst:603 msgid ":guilabel:`Badge ID`: click :guilabel:`Generate` at the end of the :guilabel:`Badge ID` line to create a badge number. Once generated, the badge number populates the :guilabel:`Badge ID` field, and :guilabel:`Generate` changes to :guilabel:`Print Badge`. Click :guilabel:`Print Badge` to create a PDF file of the employee's badge. The badge can be printed and used to log into a :abbr:`POS (point of sale)` system or :ref:`check-in ` on an **Attendances** app kiosk." msgstr "" @@ -3869,8 +3871,7 @@ msgstr "" #: ../../content/applications/hr/frontdesk.rst:35 #: ../../content/applications/hr/lunch/products.rst:12 #: ../../content/applications/hr/payroll.rst:828 -#: ../../content/applications/hr/payroll/work_entries.rst:56 -#: ../../content/applications/hr/time_off.rst:250 +#: ../../content/applications/hr/time_off.rst:251 msgid "Enter the following information on the form:" msgstr "" @@ -3971,8 +3972,7 @@ msgid "The employee form loads, displaying all their information. Click the :ico msgstr "" #: ../../content/applications/hr/employees/offboarding.rst:169 -#: ../../content/applications/hr/payroll/contracts.rst:281 -#: ../../content/applications/hr/time_off.rst:307 +#: ../../content/applications/hr/time_off.rst:308 msgid "Fill out the following fields on the form:" msgstr "" @@ -5009,7 +5009,7 @@ msgid "To determine the responsible person is for a contract, open an individual msgstr "" #: ../../content/applications/hr/fleet/new_vehicle.rst:51 -msgid "To open a contract from a list of all contracts, navigate to :menuselection:`Fleet app --> Fleet --> Contracts` and all contracts appear in the list. Click on a :guilabel:`Contract` to open it. In the :guilabel:`Information` section of the contract, look under :guilabel:`Responsible` to see who receives expiration alerts." +msgid "To open a contract from a list of all contracts, navigate to :menuselection:`Fleet app --> Fleet --> Contracts`, and all contracts appear in the list. Click on a :guilabel:`Contract` to open it. In the :guilabel:`Information` section of the contract, look under :guilabel:`Responsible` to see who receives expiration alerts." msgstr "" #: ../../content/applications/hr/fleet/new_vehicle.rst:56 @@ -5686,7 +5686,7 @@ msgstr "" #: ../../content/applications/hr/frontdesk.rst:215 #: ../../content/applications/hr/payroll/reporting.rst:3 #: ../../content/applications/hr/referrals/reporting.rst:3 -#: ../../content/applications/hr/time_off.rst:572 +#: ../../content/applications/hr/time_off/reporting.rst:3 msgid "Reporting" msgstr "" @@ -7155,6 +7155,7 @@ msgid "A new contract template form, with the fields filled in." msgstr "" #: ../../content/applications/hr/payroll.rst:133 +#: ../../content/applications/hr/payroll/contracts.rst:117 msgid "Salary information tab" msgstr "" @@ -7281,7 +7282,7 @@ msgstr "" #: ../../content/applications/hr/payroll.rst:237 #: ../../content/applications/hr/payroll.rst:665 -#: ../../content/applications/hr/payroll/contracts.rst:40 +#: ../../content/applications/hr/payroll/contracts.rst:50 msgid "General information section" msgstr "" @@ -7606,7 +7607,7 @@ msgid "Salary structure details for Regular Pay, listing all the specific Salary msgstr "" #: ../../content/applications/hr/payroll.rst:521 -#: ../../content/applications/hr/time_off.rst:300 +#: ../../content/applications/hr/time_off.rst:301 msgid "Rules" msgstr "" @@ -7746,7 +7747,7 @@ msgid "A new Input Type form filled in." msgstr "" #: ../../content/applications/hr/payroll.rst:624 -#: ../../content/applications/hr/recruitment.rst:94 +#: ../../content/applications/hr/recruitment.rst:69 msgid "Salary package configurator" msgstr "" @@ -7895,7 +7896,6 @@ msgid ":guilabel:`Assigned to`: select the user the activity is automatically as msgstr "" #: ../../content/applications/hr/payroll.rst:740 -#: ../../content/applications/hr/payroll/contracts.rst:133 msgid "Sign section" msgstr "" @@ -8093,9409 +8093,10478 @@ msgid ":doc:`payroll/work_entries`" msgstr "" #: ../../content/applications/hr/payroll.rst:898 -msgid ":doc:`payroll/salary_attachments`" +msgid ":doc:`payroll/time_off_to_report`" msgstr "" #: ../../content/applications/hr/payroll.rst:899 -msgid ":doc:`payroll/payslips`" +msgid ":doc:`payroll/salary_attachments`" msgstr "" #: ../../content/applications/hr/payroll.rst:900 -msgid ":doc:`payroll/reporting`" +msgid ":doc:`payroll/payslips`" msgstr "" #: ../../content/applications/hr/payroll.rst:901 -msgid ":doc:`payroll/work_entry_analysis`" +msgid ":doc:`payroll/batches`" msgstr "" #: ../../content/applications/hr/payroll.rst:902 -msgid ":doc:`payroll/salary_attachment`" +msgid ":doc:`payroll/commissions`" msgstr "" #: ../../content/applications/hr/payroll.rst:903 -msgid ":doc:`payroll/payroll_localizations`" +msgid ":doc:`payroll/reporting`" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:5 -msgid "Every employee in Odoo is required to have a running contract in order to be paid. A contract outlines the terms of an employee's position, their compensation, working hours, and any other details about their position." +#: ../../content/applications/hr/payroll.rst:904 +msgid ":doc:`payroll/headcount`" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:10 -msgid "Contract documents (PDFs) are uploaded and organized using the *Documents* application, and are signed using the *Sign* application. Ensure these applications are installed to send and sign contracts. Please refer to the :doc:`../../productivity/documents` and :doc:`../../productivity/sign` documentation." +#: ../../content/applications/hr/payroll.rst:905 +msgid ":doc:`payroll/work_entry_analysis`" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:15 -msgid "To view the employee contracts, go to the :menuselection:`Payroll app --> Contracts --> Contracts` from the top menu. All employee contracts, and their current contract status, are displayed in a list view, by default. The list view displays running contracts, contracts that require action, expired contracts, and cancelled contracts." +#: ../../content/applications/hr/payroll.rst:906 +msgid ":doc:`payroll/payroll_localizations`" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:-1 -msgid "Contracts dashboard view showing running contracts and contracts with issues." +#: ../../content/applications/hr/payroll/batches.rst:3 +msgid "Batches" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:25 -msgid "The list of contracts in the *Payroll* application matches the list of contracts in the *Employees* application." +#: ../../content/applications/hr/payroll/batches.rst:5 +msgid "Batches are used to generate multiple :doc:`payslips ` at once and process them in a group, rather than create and process individual payslips. This method not only helps the payroll department pay employees in less time, but it also helps keep payslips organized." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:30 -msgid "In order for an employee to be paid, an active contract is required. If a new contract is needed, click the :guilabel:`Create` button on the :guilabel:`Contracts` dashboard. A contract form appears where the information can be entered." +#: ../../content/applications/hr/payroll/batches.rst:9 +msgid "Typically, a company's payroll department :ref:`creates a new batch ` for each salary structure, for every pay period (usually weekly, bi-weekly, or monthly). If desired, batches can be further organized by department, job position, or salary structure type." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:35 -msgid "New contract form" +#: ../../content/applications/hr/payroll/batches.rst:13 +msgid "Once a batch is made, :ref:`payslips are added to the batch `, then the batch is processed, and employees are paid." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:42 -msgid ":guilabel:`Contact Reference`: type in the name or title for the contract, such as `John Smith Contract`. This field is **required**." +#: ../../content/applications/hr/payroll/batches.rst:17 +msgid "View batches" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:44 -msgid ":guilabel:`Employee`: using the drop-down menu, select the employee that the contract applies to." +#: ../../content/applications/hr/payroll/batches.rst:19 +msgid "To view all the batches in the database, navigate to :menuselection:`Payroll app --> Payslips --> Batches` to display all payslip batches that have been created. These payslip batches are displayed in a list view, by default." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:45 -msgid ":guilabel:`Contract Start Date`: the date the contract starts. To choose a date, click the drop-down menu, navigate to the correct month and year with the :guilabel:`< > (arrow)` icons, then click on the desired date. This field is **required**." +#: ../../content/applications/hr/payroll/batches.rst:23 +msgid "Each batch displays the :guilabel:`Name`, the dates the batch includes (the :guilabel:`Date From` and :guilabel:`Date To` fields), its :guilabel:`Status`, the number of payslips in the batch (:guilabel:`Payslips Count`), and the :guilabel:`Company`." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:48 -msgid ":guilabel:`Contract End Date`: if the contract has a specific end date, click the drop-down menu, navigate to the correct month and year with the :guilabel:`< > (arrow)` icons, then click on the desired date." +#: ../../content/applications/hr/payroll/batches.rst:-1 +msgid "View displaying all batches created." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:51 -msgid ":guilabel:`Working Schedule`: select one of the working schedules from the drop-down menu. This field is **required**." +#: ../../content/applications/hr/payroll/batches.rst:33 +msgid "Create a new batch" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:55 -msgid "The :guilabel:`Working Schedule` drop-down menu displays all the working schedules for the selected company. To modify or add to this list, go to :menuselection:`Payroll app --> Configuration --> Working Schedules`. Click :guilabel:`New`, and create a new working schedule, or click on an existing working schedule and make edits." +#: ../../content/applications/hr/payroll/batches.rst:35 +msgid "New batches of payslips must be created from the :guilabel:`Payslips Batches` dashboard, by navigating to :menuselection:`Payroll app --> Payslips --> Batches`. Click the :guilabel:`New` button in the top-left corner. Doing so reveals a blank payslip batch form on a separate page." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:60 -msgid ":guilabel:`Work Entry Source`: select how the :doc:`work entries ` are generated. This field is **required**. Click the radio button next to the desired selection. The options are:" +#: ../../content/applications/hr/payroll/batches.rst:39 +msgid "On the new payslip batch form, enter the :guilabel:`Batch Name`. This should be something short and descriptive, to keep records organized." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:63 -msgid ":guilabel:`Working Schedule`: work entries are generated based on the selected :guilabel:`Working Schedule`." +#: ../../content/applications/hr/payroll/batches.rst:43 +msgid "A company pays its employees on a bi-weekly basis, and creates separate batches for their two different :ref:`salary structures ` they use: worker pay and regular pay." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:65 -msgid ":guilabel:`Attendances`: work entries are generated based on the employee's check-in records in the *Attendances* application. (This requires the *Attendances* application)." +#: ../../content/applications/hr/payroll/batches.rst:47 +msgid "The names for their four August 2025 batches are:" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:67 -msgid ":guilabel:`Planning`: work entries are generated based on the planned schedule for the employee from the *Planning* application. (This requires the *Planning* application)." +#: ../../content/applications/hr/payroll/batches.rst:49 +msgid "`Aug 1-14 2025 - Worker`" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:70 -msgid ":guilabel:`Salary Structure Type`: select one of the salary structure types from the drop-down menu. The default salary structure types are :guilabel:`Employee` or :guilabel:`Worker`. A :ref:`new salary structure type ` can be created, if needed." +#: ../../content/applications/hr/payroll/batches.rst:50 +msgid "`Aug 1-14 2025 - Regular`" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:73 -msgid ":guilabel:`Department`: select the department the contract applies to from the drop-down menu." +#: ../../content/applications/hr/payroll/batches.rst:51 +msgid "`Aug 15-31 2025 - Worker`" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:74 -msgid ":guilabel:`Job Position`: select the specific job position the contract applies to from the drop-down menu." +#: ../../content/applications/hr/payroll/batches.rst:52 +msgid "`Aug 15-31 2025 - Regular`" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:78 -msgid "If the selected :guilabel:`Job Position` has a contract template linked to it with a specific :guilabel:`Salary Structure Type`, the :guilabel:`Salary Structure Type` changes to the one associated with that :guilabel:`Job Position`." +#: ../../content/applications/hr/payroll/batches.rst:54 +msgid "Next, select the date range to which the batch applies. Click into one of the :guilabel:`Period` fields, and a calendar pop-up window appears. From this calendar pop-up window, navigate to the correct month, and click on the corresponding day for both the start and end dates of the batch." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:82 -msgid ":guilabel:`Wage on Payroll`: enter the employee's monthly wage." +#: ../../content/applications/hr/payroll/batches.rst:58 +msgid "The current company populates the :guilabel:`Company` field. If operating in a multi-company environment, it is **not** possible to modify the :guilabel:`Company` from the form. The batch **must** be created while in the database for the desired company." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:83 -msgid ":guilabel:`Contract Type`: choose either :guilabel:`Permanent`, :guilabel:`Temporary`, :guilabel:`Seasonal`, :guilabel:`Full-Time`, or :guilabel:`Part-Time` from the drop-down menu." +#: ../../content/applications/hr/payroll/batches.rst:-1 +msgid "The details entered for the new batch." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:-1 -msgid "New contract form to be filled in when creating a new contract, with required fields\n" -"outlined in red." +#: ../../content/applications/hr/payroll/batches.rst:68 +msgid "Add payslips to a batch" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:92 -msgid "The :guilabel:`Working Schedule` drop-down menu displays all the working times for the selected :guilabel:`Company`. To modify or add to this list, go to :menuselection:`Payroll app --> Configuration --> Working Times`, and either :guilabel:`Create` a new working time, or click on an existing working time, then edit it by clicking :guilabel:`Edit`." +#: ../../content/applications/hr/payroll/batches.rst:70 +msgid "Once a :ref:`batch has been created `, payslips need to be added to the batch. Payslips can either be :ref:`created and added ` to the batch, or if they have *already* been created, they can be :ref:`added to the batch `." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:97 -msgid ":guilabel:`Yearly Cost (Real)`: this field automatically updates after the :guilabel:`Schedule Pay` and :guilabel:`Wage` fields are entered. This amount is the total yearly cost for the employer. This field can be modified. However, if this is modified, the :guilabel:`Wage` field updates, accordingly. Ensure both the :guilabel:`Wage` and :guilabel:`Yearly Cost (Real)` are correct if this field is modified." +#: ../../content/applications/hr/payroll/batches.rst:75 +msgid "Batches can only have payslips added to them when they are in the :guilabel:`New` stage. Payslips can either be :ref:`created by the database ` and added to the batch, or :ref:`pre-existing payslips can be individually added ` to the batch." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:102 -msgid ":guilabel:`Monthly Cost (Real)`: this field automatically updates after the :guilabel:`Schedule Pay` and :guilabel:`Wage` fields are entered. This amount is the total monthly cost for the employer. This field **cannot** be modified, and is calculated based on the :guilabel:`Yearly Cost (Real)`." +#: ../../content/applications/hr/payroll/batches.rst:79 +msgid "Once either of these methods has been used, the status of the batch changes to :guilabel:`Confirmed`, and both options to add payslips no longer appears." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:0 -msgid "Optional tabs for a new contract." +#: ../../content/applications/hr/payroll/batches.rst:85 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:102 +msgid "Generate payslips" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:112 -msgid "Contract Details tab" +#: ../../content/applications/hr/payroll/batches.rst:87 +msgid "To generate the payslips and add them to the batch, first open the batch by navigating to :menuselection:`Payroll app --> Payslips --> Batches`, and click on the desired batch. Next, click the :guilabel:`Generate Payslips` button and a :guilabel:`Generate Payslips` pop-up window loads." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:114 -msgid "The :guilabel:`Contract Details` tab allows for the addition and editing of a contract, along with specifying which template to use when a new contract is created. These fields **must** be populated in order to create a new contract." +#: ../../content/applications/hr/payroll/batches.rst:91 +msgid "This form contains three sections, and the configuration of this form determines which payslips are created. The :guilabel:`Employees Selection` section determines which employees' payslips to create. Using the drop-down menus, configure the :guilabel:`Department`, :guilabel:`Job Position`, and :guilabel:`Salary Structure Type` fields, if desired. As selections are made, the :guilabel:`Employees` section at the bottom updates to show which payslips are going to be generated." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:119 -msgid "To access the various contract template fields in the :guilabel:`Contract Details` tab, the *Salary Configurator* (`hr_contract_salary`) module **must** be :ref:`installed `." +#: ../../content/applications/hr/payroll/batches.rst:98 +msgid "The :guilabel:`Payslip Generation` section allows the user to pick a specific :guilabel:`Salary Structure` to create payslips for. If left blank, the default structure for each employee is used to calculate their pay." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:123 -msgid "When the *Salary Configurator* module is installed, the *Salary Configurator - Holidays* and *Salary Configurator - Payroll* modules install, as well." +#: ../../content/applications/hr/payroll/batches.rst:103 +msgid "By default, Odoo lists all employees in the :guilabel:`Employees` section when generating payslips." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:126 -msgid "Once the modules are installed, the database reverts to the main dashboard." +#: ../../content/applications/hr/payroll/batches.rst:106 +msgid "The list filters automatically as selections are made." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:128 -msgid ":guilabel:`Contract Template`: select a pre-existing contract template from the drop-down menu. Contract templates are typically created through the configuration menu, and stored in the *Documents* application." +#: ../../content/applications/hr/payroll/batches.rst:108 +msgid "Configuration is optional unless a batch is being created **excluding** certain employees." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:135 -msgid ":guilabel:`HR Responsible`: select the person who is responsible for validating the contract from the drop-down menu. This field is required." +#: ../../content/applications/hr/payroll/batches.rst:110 +msgid "Once all the desired configurations have been made, click the :guilabel:`Generate` button, and all payslips are created and attached to the batch. Once generated, a :icon:`fa-book` :guilabel:`Payslips` smart button appears at the top, along with the number of payslips in the batch. Click this smart button to view a list of all the payslips in the batch." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:137 -msgid ":guilabel:`New Contract Document Template`: select a contract from the drop-down menu to be modified for this new employee contract. These documents are stored in the *Sign* application." +#: ../../content/applications/hr/payroll/batches.rst:115 +msgid "Once the payslips have been generated and attached to the batch, the status of the batch changes to :guilabel:`Confirmed`." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:139 -msgid ":guilabel:`Contract Update Document Template`: select a contract from the drop-down menu, if the employee has an existing contract that requires updating. These documents are stored in the *Sign* application." +#: ../../content/applications/hr/payroll/batches.rst:-1 +msgid "Payslips being generated for marketing and community managers." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:144 -msgid "The :guilabel:`HR Responsible`, :guilabel:`New Contract Document Template`, and :guilabel:`Contract Update Document Template` fields are only visible if the *Sign* application is installed, along with the `hr_contract_salary` and `hr_contract_salary_payroll` :doc:`modules <../../general/apps_modules>`. The *Sign* application is where the contract templates are stored. This application is required for an employee to sign any contract." +#: ../../content/applications/hr/payroll/batches.rst:124 +msgid "Add payslips" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:151 -msgid "Accounting section" +#: ../../content/applications/hr/payroll/batches.rst:126 +msgid "Instead of generating payslips, :ref:`individual payslips that have already been created ` can be added to a batch. Start by opening the desired batch by navigating to :menuselection:`Payroll app --> Payslips --> Batches`, and clicking on the desired batch." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:153 -msgid ":guilabel:`Analytic Account`: select the account the contract affects from the drop-down menu. It is recommended to check with the accounting department to ensure the correct account is selected." +#: ../../content/applications/hr/payroll/batches.rst:130 +msgid "Next, click the :guilabel:`Add Payslips` button, and an :guilabel:`Add Payslips` form loads in a pop-up window. All available payslips that have not yet been added to a batch, appear on the list." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:157 -msgid "Part Time section" +#: ../../content/applications/hr/payroll/batches.rst:134 +msgid "**All** payslips not yet assigned to a batch appear in the list, regardless of status (:guilabel:`Draft`, :guilabel:`Waiting`, :guilabel:`Paid`, or :guilabel:`Cancelled`). This allows already processed or cancelled payslips to be grouped retroactively for reporting or record keeping purposes." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:159 -msgid ":guilabel:`Part Time`: tick this box if the employee is working part-time. When active, additional fields appear:" +#: ../../content/applications/hr/payroll/batches.rst:139 +msgid "Tick the checkbox next to each desired payslip to be added, then click the :guilabel:`Select` button at the bottom. All selected payslips are added to the batch, and the status of the batch changes to :guilabel:`Confirmed`. A :icon:`fa-book` :guilabel:`Payslips` smart button appears at the top, along with the number of payslips in the batch. Click this smart button to view a list of all the payslips in the batch." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:162 -msgid ":guilabel:`% (Percentage)`: enter the percent of time the employee works as compared to a full-time employee." +#: ../../content/applications/hr/payroll/batches.rst:-1 +#: ../../content/applications/hr/payroll/batches.rst:-1 +msgid "Adding individual payslips to a batch by selecting them form this list." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:164 -msgid ":guilabel:`Standard Calendar`: select the working hours that a typical full-time worker uses from the drop-down menu." +#: ../../content/applications/hr/payroll/batches.rst:151 +msgid "Process a batch" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:166 -msgid ":guilabel:`Part Time Work Entry Type`: select the work entry type that generates the balance of a full-time working schedule." +#: ../../content/applications/hr/payroll/batches.rst:153 +msgid "After a :ref:`batch has been created ` , and :ref:`all required payslips have been added `, the batch must then be processed, and employees paid." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:170 -msgid "If a full-time employee works 40 hours a week, and the employee works 20, enter `50` in the :guilabel:`% (Percentage)` field (50% of 40 hours = 20 hours). The employee generates twenty (20) hours of work entries under the work entry type `part-time`, and another twenty (20) hours of work entries under the work entry type `generic time off`, for a total of forty (40) hours worth of work entries." +#: ../../content/applications/hr/payroll/batches.rst:156 +msgid "Open the desired batch by navigating to :menuselection:`Payroll app --> Payslips --> Batches`, and clicking on the desired batch. For a batch to be processed, it must have a status of :guilabel:`Confirmed`. That means the batch has been created and payslips have been added to them, but the payslips have *not* been processed yet." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:177 -msgid "Notes section" +#: ../../content/applications/hr/payroll/batches.rst:161 +msgid "Click the :guilabel:`Create Draft Entry` button to confirm and create a draft of the individual payslips. After this occurs, the batch status changes to :guilabel:`Done`." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:179 -msgid ":guilabel:`Notes`: a text field where any notes for the employee contract are entered for future reference." +#: ../../content/applications/hr/payroll/batches.rst:165 +msgid "At any time, the batch needs to be reverted back to a status of :guilabel:`New`, click the :guilabel:`Set to Draft` button. This action does **not** remove any payslips that have already been added to the batch, instead, the status changes back to :guilabel:`New`." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:-1 -msgid "Contract details in optional tabs for a new contract." +#: ../../content/applications/hr/payroll/batches.rst:169 +msgid "After any desired changes have been made, click :guilabel:`Confirm` and the batch status changes to :guilabel:`Confirmed`." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:187 -msgid "Modify a contract template" +#: ../../content/applications/hr/payroll/batches.rst:172 +msgid "It is important to note, that if any payslips in the batch have a status of :guilabel:`Paid`, the batch **cannot** revert to a status of :guilabel:`New`." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:189 -msgid "Click the :icon:`fa-external-link` :guilabel:`(external Link)` icon at the end of either the :guilabel:`New Contract Document Template` or :guilabel:`Contract Update Document Template` to open the corresponding contract template, and proceed to make any desired changes." +#: ../../content/applications/hr/payroll/batches.rst:175 +msgid "Once the status has changed to :guilabel:`Done`, the payments must be logged in the database. Click the :guilabel:`Create Payment Report` button, and a pop-up window loads, where the payment report details are entered." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:193 -msgid "Click the :guilabel:`Upload your file` button next to the corresponding document, navigate to the file, then click :guilabel:`Open` to select the document and add it to the tab." +#: ../../content/applications/hr/payroll/batches.rst:179 +msgid "Using the drop-down menu, select the :guilabel:`Export Format` for the payment report. The two default options available are :guilabel:`NACHA`, and :guilabel:`CSV`." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:197 -msgid "Modifying document templates" +#: ../../content/applications/hr/payroll/batches.rst:182 +msgid "The :guilabel:`NACHA` option creates a compatible ACH file which is sent to the company's bank, and outlines all the banking information to transfer money from the company to the employees, either via direct deposit (most common) or a check. Refer to the :ref:`fiscal localization document ` for more information." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:199 -msgid "Contracts templates can be modified at any point when changes are needed." +#: ../../content/applications/hr/payroll/batches.rst:188 +#: ../../content/applications/hr/payroll/payslips.rst:222 +msgid "Other options may be available depending on the :doc:`payroll localization ` installed in the database." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:201 -msgid ":guilabel:`Tags`: select any tags associated with the contract." +#: ../../content/applications/hr/payroll/batches.rst:191 +msgid "If :guilabel:`CSV` is selected, all other fields are hidden form view. Once this is selected, click the :guilabel:`Generate` button to create the payment report." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:202 -msgid ":guilabel:`Signed Document Workspace`: this is where the signatures are stored. Choose a pre-configured workspace, or create a new one. To create a new :guilabel:`Signed Document Workspace`, type in the name of the workspace, then click either :guilabel:`Create` to add the new workspace, or :guilabel:`Create and Edit` to add the workspace and modify the workspace details." +#: ../../content/applications/hr/payroll/batches.rst:194 +msgid "Next, select the desired :guilabel:`Bank Journal` the paychecks are logged on. Last, using the calendar selector, set the date the paychecks are issued in the :guilabel:`Effective Date` field." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:206 -msgid ":guilabel:`Signed Document Tags`: select or create any tags that are only associated with the signed contract, as opposed to the original unsigned contract." +#: ../../content/applications/hr/payroll/batches.rst:197 +msgid "Once the pop-up window is configured, click the :guilabel:`Generate` button, and the file appears on the batch form, in a new :guilabel:`Payment Report` field." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:208 -msgid ":guilabel:`Redirect Link`: enter a redirect link for the employee to access the contract. A redirect link takes the user from one URL to another. In this case, it takes them to the newly-updated contract specifically written for them." +#: ../../content/applications/hr/payroll/batches.rst:200 +msgid "After the report is created, click the :guilabel:`Mark as paid` button to mark the payslips as paid in the database." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:211 -msgid ":guilabel:`Who can Sign`: select either :guilabel:`All Users` or :guilabel:`On Invitation`." +#: ../../content/applications/hr/payroll/commissions.rst:4 +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:360 +msgid "Commissions" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:213 -msgid ":guilabel:`All Users`: any user in the organization can sign the contract." +#: ../../content/applications/hr/payroll/commissions.rst:6 +msgid "Commissions are payments made to employees that are earned as part of their salary. The payments are awarded after a sale has been made, and the amount depends on how much the sale was. Typically the amount is either a percentage of the sale, or a set commission based on a structure created by the company." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:214 -msgid ":guilabel:`On Invitation`: only users selected in this field can sign the contract." +#: ../../content/applications/hr/payroll/commissions.rst:11 +msgid "To pay an employee a commission they earned, a separate commission paycheck must be issued to the employee. In Odoo, a commission payslip is referred to as a *warrant payslip*." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:216 -msgid ":guilabel:`Invited Users`: select the person (or people) that can sign the document." +#: ../../content/applications/hr/payroll/commissions.rst:15 +msgid "Create warrant payslips" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:217 -msgid ":guilabel:`Document`: the attached document can be replaced by clicking the :icon:`fa-pencil` :guilabel:`(pencil)` icon. A pop-up window appears, so another document can be selected for upload. The file **must** be a PDF. To remove the document, click the :icon:`fa-trash-o` :guilabel:`(trash can)` icon." +#: ../../content/applications/hr/payroll/commissions.rst:17 +msgid "Warrant payslips are generated directly from the :guilabel:`Payslips Batches` dashboard, which is accessed by navigating to :menuselection:`Payroll app --> Payslips --> Batches`." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:222 -msgid "Once the edits are complete, click the :guilabel:`Save` button. All the information for the selected contract template populates the fields in the :guilabel:`Salary Information` tab. Any additional tabs, such as :guilabel:`Personal Documents`, appears if applicable." +#: ../../content/applications/hr/payroll/commissions.rst:20 +msgid "First, click the :guilabel:`Generate Warrant Payslips` button in the top-left corner. Doing so reveals a :guilabel:`Generate Warrant Payslips` pop-up window, in which the necessary information **must** be filled out." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:227 -msgid "Personal documents" +#: ../../content/applications/hr/payroll/commissions.rst:24 +msgid "Set the time frame the commission was earned, in the two fields next to :guilabel:`Period`. Click into each field, and a calendar pop-up window loads. Navigate to the desired date and click on it to select it." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:229 -msgid "This tab **only** appears after an :guilabel:`Employee` is selected, and houses any documents that are linked to the employee on their employee record. Documents cannot be added to this tab, this tab **only** shows documents that are already uploaded and associated with the employee." +#: ../../content/applications/hr/payroll/commissions.rst:28 +msgid "Using the drop-down menu, select the :guilabel:`Department` in the corresponding field. When a department is selected, the employees listed for that department appear in the :guilabel:`Employee` section, below." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:233 -msgid "The available documents in this tab can be downloaded. Click the :icon:`fa-download` :guilabel:`(download)` icon next to the document to download it." +#: ../../content/applications/hr/payroll/commissions.rst:32 +msgid "If a file is needed for the record, upload a file to the :guilabel:`Import File` field, such as a sales invoice, using the :guilabel:`Upload your file` button. Any file type is accepted." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:237 -msgid "Send the contract" +#: ../../content/applications/hr/payroll/commissions.rst:35 +msgid "Under the :guilabel:`Employee` section, enter the individual :guilabel:`Commission Amount` for each employee in the far-right column. To remove an employee, click the :icon:`fa-trash-o` :guilabel:`(trash)` icon to remove the line." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:239 -msgid "Click on the following button to send the contract to the employee:" +#: ../../content/applications/hr/payroll/commissions.rst:39 +msgid "Add a new commission by clicking :guilabel:`Add a Line`, and entering the :guilabel:`Employee` and the appropriate :guilabel:`Commission Amount`." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:-1 -msgid "Send the contract to the employee via one of the buttons." +#: ../../content/applications/hr/payroll/commissions.rst:42 +msgid "Once all the commissions are properly entered, click the :guilabel:`Generate Payslips` button to create the warrant payslips in a batch, or click :guilabel:`Export` to export a CSV file of the commissions." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:245 -msgid ":guilabel:`Generate Offer`: Clicking this opens a pop-up window that contains the basic information from the contract, as well as a link for the contract when using the salary configurator. Click :guilabel:`Send` to send an email to the employee, so they can sign the contract." +#: ../../content/applications/hr/payroll/commissions.rst:46 +msgid ":ref:`Process the batch ` in the same way as a typical batch to complete the payment process." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:250 -msgid "At the bottom of the pop-up form is a :guilabel:`Link Expiration Date`. This is the timeframe that the contract offer is valid for. By default, this field is pre-populated with `30 days`, but it can be modified." +#: ../../content/applications/hr/payroll/commissions.rst:-1 +msgid "Enter the commission details." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:255 -msgid "In order to send a contract using the :guilabel:`Generate Simulation Link`, there **must** be a signature field in the contract PDF being sent to the employee, so they can sign it." +#: ../../content/applications/hr/payroll/commissions.rst:53 +msgid ":doc:`Commissions <../../sales/sales/commissions>`" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:258 -msgid ":guilabel:`Signature Request`: clicking this reveals a pop-up window, where an email can be typed to the employee. Select the document (such as a contract, NDA, or Homeworking Policy) from the drop-down menu, and fill out the email section. Click :guilabel:`Send` when the email is ready to be sent." +#: ../../content/applications/hr/payroll/contracts.rst:5 +msgid "Every employee in Odoo is required to have a running contract in order to be paid. A contract outlines the terms of an employee's position, their compensation, working hours, and any other relevant details pertaining to their compensation." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:264 -msgid "To send a contract using the :guilabel:`Generate Simulation Link`, there **must** be a signature field in the contract PDF being sent to the employee, so they can sign it." +#: ../../content/applications/hr/payroll/contracts.rst:10 +msgid "Contract documents (PDFs) are uploaded and organized using the **Documents** application, and are signed using the **Sign** application. Ensure these applications are installed to send and sign contracts. Please refer to the :doc:`../../productivity/documents` and :doc:`../../productivity/sign` documentation for more information." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:268 -#: ../../content/applications/hr/payroll/salary_attachments.rst:3 -msgid "Salary attachments" +#: ../../content/applications/hr/payroll/contracts.rst:18 +msgid "Contracts dashboard" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:270 -msgid "Any automatic deductions or allocations for an employee, such as child support payments and wage garnishments, are referred to as a *salary attachment*. This section is where all of these deductions or allocations are set." +#: ../../content/applications/hr/payroll/contracts.rst:20 +msgid "Both the **Payroll** and **Employees** apps display *identical employee contract information*." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:274 -msgid "To add a new deduction, first navigate to :menuselection:`Payroll app --> Contracts --> Salary Attachments`. Next, click :guilabel:`Create`, and a new salary attachment form loads." +#: ../../content/applications/hr/payroll/contracts.rst:22 +msgid "To access the contracts dashboard from the **Employees** app, navigate to :menuselection:`Employees app --> Employees --> Contracts`. To access the contracts dashboard from the **Payroll** app, navigate to :menuselection:`Payroll app --> Contracts --> Contracts`." +msgstr "" + +#: ../../content/applications/hr/payroll/contracts.rst:26 +msgid "The :guilabel:`Contracts` dashboard displays all employee contracts in a default list view, grouped by :guilabel:`Status`. The available status groupings are :guilabel:`New`, :guilabel:`Running`, :guilabel:`Expired`, and :guilabel:`Cancelled`. Each grouping displays the number of contracts within the grouping." msgstr "" #: ../../content/applications/hr/payroll/contracts.rst:-1 -msgid "The salary attachment form with everything filled in for Ronnie Hart's child support." +msgid "Contracts dashboard view showing running contracts and contracts with issues." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:283 -msgid ":guilabel:`Employee`: using the drop-down menu, select the employee the salary attachment applies to." +#: ../../content/applications/hr/payroll/contracts.rst:35 +msgid "Any changes made to contracts in the **Employees** app is reflected in the **Payroll** app, and vice versa. Contract information remains identical, regardless of where the contract information is accessed." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:285 -msgid ":guilabel:`Description`: enter a short description for the salary attachment, such as `Child Support` or `529 Contribution`." +#: ../../content/applications/hr/payroll/contracts.rst:42 +msgid "Create a contract" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:287 -msgid ":guilabel:`Type`: using the drop-down menu, select the type of salary attachment being created." +#: ../../content/applications/hr/payroll/contracts.rst:44 +msgid "To create a new contract, click the :guilabel:`New` button on the :ref:`Contracts dashboard `, and a blank contract form appears." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:288 -msgid ":guilabel:`Start Date`: the date the salary attachment starts. Choose a date by clicking on the drop-down menu, navigating to the correct month and year by using the :icon:`fa-chevron-left` :icon:`fa-chevron-right` :guilabel:`(arrow)` icons, then clicking on the desired date. This field is **required**." +#: ../../content/applications/hr/payroll/contracts.rst:52 +msgid "Enter the following information in the top-half of the blank contract form:" msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:292 -msgid ":guilabel:`Estimated End Date`: this field automatically populates after both the :guilabel:`Monthly Amount` and :guilabel:`Total Amount` fields are populated. This field is **not** modifiable." +#: ../../content/applications/hr/payroll/contracts.rst:54 +msgid ":guilabel:`Contact Reference`: Type in the name or title for the contract, such as `John Smith Contract`. This field is **required**." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:295 -msgid ":guilabel:`Document`: attach any documents relevant to the salary attachment. Click the :guilabel:`Upload Your File` button, navigate to the desired document in the file explorer, then click :guilabel:`Open` to select the document, and attach it to the form. To change the attached document, click the :icon:`fa-pencil` :guilabel:`(pencil)` icon, and select a different document. To remove a document, click the :icon:`fa-trash-o` :guilabel:`(trash can)` icon." +#: ../../content/applications/hr/payroll/contracts.rst:56 +msgid ":guilabel:`Employee`: Using the drop-down menu, select the employee the contract is for." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:300 -msgid ":guilabel:`Monthly Amount`: enter the amount to be taken out of the employee's paycheck every month for this specific salary attachment." +#: ../../content/applications/hr/payroll/contracts.rst:57 +msgid ":guilabel:`Contract Start Date`: Required. Defaults to the current date. To choose a different date, click into the field. In the popover calendar, select a different date." msgstr "" -#: ../../content/applications/hr/payroll/contracts.rst:302 -msgid ":guilabel:`Total Amount`: enter the total amount that the employee pays for the salary attachment to be completed." +#: ../../content/applications/hr/payroll/contracts.rst:59 +msgid ":guilabel:`Contract End Date`: Optional. Select a date from the calendar popover, or leave blank for an indefinite contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:5 -msgid "Payroll localizations" +#: ../../content/applications/hr/payroll/contracts.rst:61 +msgid ":guilabel:`Working Schedule`: Select one of the available working schedules the employee is expected to work, from the drop-down menu. If this field is left blank, this allows the employee to work as many or as few hours as desired every week, with no restrictions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:7 -msgid "*Localizations* are country-specific settings preconfigured in Odoo at the creation of the database, which account for all taxes, fees, and allowances for that particular country." +#: ../../content/applications/hr/payroll/contracts.rst:66 +msgid "The :guilabel:`Working Schedule` drop-down menu displays all the working schedules for the selected company. To modify or add to this list, go to :menuselection:`Payroll app --> Configuration --> Working Schedules`. Click :guilabel:`New`, and create a new working schedule, or click on an existing working schedule and make edits." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:10 -msgid "*Payroll localizations* refer to the specific process of adapting payroll systems, policies, and compliance measures to align with the specific labor laws, tax regulations, and social security requirements of a particular country or region." +#: ../../content/applications/hr/payroll/contracts.rst:71 +msgid ":guilabel:`Work Entry Source`: Using the drop-down menu, select how the :doc:`work entries ` are generated. This field is **required**. Click the radio button next to the desired selection. The options are:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:14 -msgid "This ensures that employee salaries, benefits, deductions, and contributions are processed accurately and in full compliance with local legal and financial obligations." +#: ../../content/applications/hr/payroll/contracts.rst:75 +msgid ":guilabel:`Working Schedule`: Work entries are generated based on the selected :guilabel:`Working Schedule`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:17 -msgid "Localization also includes integrating country-specific payroll elements such as benefits, holidays, termination rules, and reporting requirements, helping businesses avoid legal risks while ensuring employees receive their correct compensation." +#: ../../content/applications/hr/payroll/contracts.rst:77 +msgid ":guilabel:`Attendances`: Work entries are generated based on the employee's check-in records in the **Attendances** app. (This requires the **Attendances** app to be installed)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:22 -msgid "Install localization package" +#: ../../content/applications/hr/payroll/contracts.rst:79 +msgid ":guilabel:`Planning`: Work entries are generated based on the planned schedule for the employee from the **Planning** app. (This requires the **Planning** app to be installed)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:24 -msgid "A country-specific localization module :ref:`must be installed ` to properly configure and process payroll. To install the required module, first open the **Apps** app." +#: ../../content/applications/hr/payroll/contracts.rst:82 +msgid ":guilabel:`Salary Structure Type`: Select one of the salary structure types from the drop-down menu. The default salary structure types are :guilabel:`Employee` or :guilabel:`Worker`. A :ref:`new salary structure type ` can be created, if needed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:27 -msgid "Clear out the default :icon:`fa-filter` :guilabel:`Apps` filter, then type the name of the desired country into the search bar. All available modules for that country are presented." +#: ../../content/applications/hr/payroll/contracts.rst:85 +msgid ":guilabel:`Department`: Select the department the employee is working within, using the drop-down menu." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:31 -msgid "Some countries only have one localization module, while other have multiple modules. This is typically when other software is neede to process payroll, and importing and exporting data is required." +#: ../../content/applications/hr/payroll/contracts.rst:87 +msgid ":guilabel:`Job Position`: Select the employee's specific job position using the drop-down menu." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:35 -msgid "For example. when searching for **Payroll** modules for `Egypt`, the following modules appear in the search, and must be installed: `Egypt - Payroll` and `Egypt - Payroll with Accounting`." +#: ../../content/applications/hr/payroll/contracts.rst:90 +msgid "If the selected :guilabel:`Job Position` has a contract template linked to it with a specific :guilabel:`Salary Structure Type`, the :guilabel:`Salary Structure Type` changes to the one associated with that :guilabel:`Job Position`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:38 -msgid "Refer to the :ref:`country-specific documentation ` for a complete list of the related **Payroll** modules required for each specific country." +#: ../../content/applications/hr/payroll/contracts.rst:94 +msgid ":guilabel:`Contract Type`: Using the drop-down menu, select the type of contract being created. The default options are :guilabel:`Permanent`, :guilabel:`Temporary`, :guilabel:`Seasonal`, :guilabel:`Full-Time`, :guilabel:`Intern`, :guilabel:`Student`, :guilabel:`Apprenticeship`, :guilabel:`Thesis`, :guilabel:`Statutory`, and :guilabel:`Employee`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:42 -msgid "To see if any localization modules have been installed on the database, navigate to :menuselection:`Payroll app --> Configuration --> Settings`. In the :guilabel:`Settings` page, if a localization module was installed, a :guilabel:`(Country) Localization` section appears." +#: ../../content/applications/hr/payroll/contracts.rst:98 +msgid ":guilabel:`Wage on Payroll`: Enter the employee's monthly wage in this field." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:47 -msgid "It is **not** recommended to alter the localization settings, unless specifically required." +#: ../../content/applications/hr/payroll/contracts.rst:101 +msgid "The :guilabel:`Working Schedule` drop-down menu displays all the working times for the selected :guilabel:`Company`. To modify or add to this list, go to :menuselection:`Payroll app --> Configuration --> Working Times`, and either :guilabel:`Create` a new working time, or click on an existing working time, then edit it by clicking :guilabel:`Edit`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:50 -msgid "Odoo can handle a multi-company configuration. This is generally done when there is a main company or office location, such as a headquarters, and there are other offices/branches around the country or globe, that fall under that main company or headquarters. In Odoo, each company, including the headquarters, must be set up as their own company/branch using the multi-company method." +#: ../../content/applications/hr/payroll/contracts.rst:106 +msgid ":guilabel:`HR Responsible`: Select the person who is responsible for validating the contract using the drop-down menu. This field is required." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:56 -msgid "Each individual company can have a different localization setting, since locations can vary anywhere in the world, where rules and laws differ." +#: ../../content/applications/hr/payroll/contracts.rst:110 +msgid "The :guilabel:`HR Responsible` field only appears if the **Salary Configurator** (`hr_contract_salary`) module and the **Sign** app are both installed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:59 -msgid "For more information on companies, refer to the :doc:`Companies <../../general/companies>` documentation, which covers how to set up companies." +#: ../../content/applications/hr/payroll/contracts.rst:-1 +msgid "New contract form to be filled in when creating a new contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:65 -msgid "List of countries" +#: ../../content/applications/hr/payroll/contracts.rst:119 +msgid "The :guilabel:`Salary Information` tab is where the specific details of how much and how often the employee is paid. Fill in the following fields in this tab:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:67 -msgid "Payroll localization modules are available for the countries listed below." +#: ../../content/applications/hr/payroll/contracts.rst:122 +msgid ":guilabel:`Wage Type`: Using the drop-down menu, select what kind of pay the employee receives. The two default options are :guilabel:`Fixed Wage` or :guilabel:`Hourly Wage`. Select :guilabel:`Fixed Wage` for salaried employees, and select :guilabel:`Hourly Wage` for employees who are paid based on their logged worked hours." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:70 -msgid "New countries are frequently added to this list, as Odoo keeps expanding and improving existing localizations and related documentation." +#: ../../content/applications/hr/payroll/contracts.rst:126 +msgid ":guilabel:`Schedule Pay`: Using the drop-down menu, select how often the employee is paid. The default options are :guilabel:`Annually`, :guilabel:`Semi-annually`, :guilabel:`Quarterly`, :guilabel:`Bi-monthly`, :guilabel:`Monthly`, :guilabel:`Semi-monthly`, :guilabel:`Bi-weekly`, :guilabel:`Weekly`, or :guilabel:`Daily`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:73 -msgid ":doc:`Australia `" +#: ../../content/applications/hr/payroll/contracts.rst:130 +msgid ":guilabel:`Wage`: Enter the amount the employee receives each pay period. The first field allows for a wage to be entered, the second field displays how often the pay is issued to the employee. The second field *cannot** be modified, and is updated when the :guilabel:`Schedule Pay` field changes." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:74 -msgid ":doc:`Belgium `" +#: ../../content/applications/hr/payroll/contracts.rst:134 +msgid ":guilabel:`Yearly Cost (Real)`: This field automatically updates after the :guilabel:`Schedule Pay` and :guilabel:`Wage` fields are entered. This amount is the total yearly cost for the employer. This field can be modified. However, if this is modified, the :guilabel:`Wage` field updates, accordingly. Ensure both the :guilabel:`Wage` and :guilabel:`Yearly Cost (Real)` are correct if this field is modified." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:75 -msgid "Bangladesh" +#: ../../content/applications/hr/payroll/contracts.rst:139 +msgid ":guilabel:`Monthly Cost (Real)`: This field automatically updates after the :guilabel:`Schedule Pay` and :guilabel:`Wage` fields are entered. This amount is the total monthly cost for the employer. This field **cannot** be modified, and is calculated based on the :guilabel:`Yearly Cost (Real)`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:76 -msgid ":doc:`Egypt `" +#: ../../content/applications/hr/payroll/contracts.rst:-1 +msgid "The Salary Information tab filled out." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:77 -msgid ":doc:`Hong Kong `" +#: ../../content/applications/hr/payroll/contracts.rst:148 +#: ../../content/applications/hr/recruitment/add-new-applicants.rst:109 +msgid "Details tab" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:78 -msgid "India" +#: ../../content/applications/hr/payroll/contracts.rst:150 +msgid "The :guilabel:`Details` tab of the contract houses the contract template information, accounting information (refer to the :doc:`country-specific localization document ` for more information), any part time work information, and notes. Fill out the following fields in this tab:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:79 -msgid "Indonesia" +#: ../../content/applications/hr/payroll/contracts.rst:155 +msgid ":guilabel:`Contract Template`: Using the drop-down menu, select a contract template to use when making an offer to an applicant." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:80 -msgid ":doc:`Jordan `" +#: ../../content/applications/hr/payroll/contracts.rst:159 +msgid "Contract templates are typically created through the **Payroll** app configuration menu, and stored in the **Documents** app. To view the contract templates, and to create new ones, navigate to :menuselection:`Payroll app --> Configuration --> Templates`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:81 -msgid "Kenya" +#: ../../content/applications/hr/payroll/contracts.rst:163 +msgid ":guilabel:`Originated Offer`: This field automatically populates with the original offer sent to the employee. This field is **not** modifiable, and is only populated if applicable." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:82 -msgid "Lithuania" +#: ../../content/applications/hr/payroll/contracts.rst:165 +msgid ":guilabel:`Part Time`: Tick the checkbox if the contract is for part time work. Once enabled, a percentage field appears next to the checkbox. The percentage **cannot** be modified, and automatically updates based on the selected :guilabel:`Working Schedule` in the top-half of the contract, compared to the typical working schedule for the company (typically 40 hours/week)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:83 -msgid "Luxembourg" +#: ../../content/applications/hr/payroll/contracts.rst:171 +msgid ":guilabel:`Standard Calendar`: This field is automatically populated with the default working schedule for the company. In most cases, this is :guilabel:`Standard 40 hours/week`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:84 -msgid "Malaysia" +#: ../../content/applications/hr/payroll/contracts.rst:173 +msgid ":guilabel:`Part Time Work Entry Type`: Using the drop-down menu, select the work entry type that generates the balance of a full-time working schedule." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:85 -msgid "Mexico" +#: ../../content/applications/hr/payroll/contracts.rst:177 +msgid "An employee contract is being created for a part-time employee who works 20 hours a week." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:86 -msgid "Morocco" +#: ../../content/applications/hr/payroll/contracts.rst:179 +msgid "To configure this, the employee's :guilabel:`Working Schedule` is set to :guilabel:`20 Hours/Part time` in the :ref:`general information section `. In the :guilabel:`Details` tab, the :guilabel:`Part Time` checkbox is ticked, and the percentage is set to `50`. The :guilabel:`Standard Calendar` is set to :guilabel:`Standard 40 hours/week`, and the :guilabel:`Part Time Work Entry Type` is set to :guilabel:`Unpaid`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:87 -msgid "Netherlands" +#: ../../content/applications/hr/payroll/contracts.rst:185 +msgid "When a typical work week is processed in the **Payroll** app, the employee generates twenty (20) hours of regular work entries under the work entry type `Attendance`, and another twenty (20) hours of work entries under the work entry type `Unpaid`, for a total of forty (40) hours worth of work entries." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:88 -msgid "Pakistan" +#: ../../content/applications/hr/payroll/contracts.rst:190 +msgid ":guilabel:`Notes`: Enter any relevant notes for the contract in this field." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:89 -msgid "Poland" +#: ../../content/applications/hr/payroll/contracts.rst:-1 +msgid "The Details tab filled out." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:90 -msgid "Romania" +#: ../../content/applications/hr/payroll/contracts.rst:196 +msgid "Signatories tab" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:91 -msgid "Saudi Arabia" +#: ../../content/applications/hr/payroll/contracts.rst:198 +msgid "The :guilabel:`Signatories` tab is where the default contract templates are selected, for both new and updated contracts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:92 -msgid "Slovakia" +#: ../../content/applications/hr/payroll/contracts.rst:201 +msgid "Using the drop-down menu, select the default contract template to use when creating a new or updated contract, in the respective fields." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:93 -msgid "Switzerland" +#: ../../content/applications/hr/payroll/contracts.rst:204 +msgid "Once a PDF template is selected, any mapped signature fields in the file appear in a list, below the selection, identifying who must sign the document. These fields **cannot** be updated." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:94 -msgid "Türkiye" +#: ../../content/applications/hr/payroll/contracts.rst:207 +msgid "Any changes to the template and signatories but be done in the **Sign** app, where contract templates are uploaded, modified, and stored." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:95 -msgid ":doc:`United Arab Emirates `" +#: ../../content/applications/hr/payroll/contracts.rst:211 +msgid "The :guilabel:`PDF Template` fields are only visible if the **Sign** app is installed, along with the :guilabel:`hr_contract_salary` and :guilabel:`hr_contract_salary_payroll` :doc:`modules <../../general/apps_modules>`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations.rst:96 -msgid "United States" +#: ../../content/applications/hr/payroll/contracts.rst:-1 +msgid "The Signatories tab with the roles specified for signing." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:3 -msgid "Australia" +#: ../../content/applications/hr/payroll/contracts.rst:219 +msgid "Personal documents tab" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:8 -msgid "Odoo is currently in the process of becoming compliant with STP Phase 2 and SuperStream. An announcement will be made as soon as companies can use Odoo for payroll as a one-stop platform." +#: ../../content/applications/hr/payroll/contracts.rst:221 +msgid "Occasionally, additional paperwork may be required when creating a contract, such as legal documents declaring the employee is able to work in the country. When this situation occurs, Odoo allows for one image file of the necessary document to be attached to a contract in the :guilabel:`Personal Documents` tab." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:12 -msgid "Setting up employees" +#: ../../content/applications/hr/payroll/contracts.rst:226 +msgid "Click the :guilabel:`Upload your file` button, navigate to the desired document, and click :guilabel:`Select` to attach the file to the contract. The file name appears on the :guilabel:`Image` line." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:15 -msgid "Employee settings" +#: ../../content/applications/hr/payroll/contracts.rst:231 +msgid "This tab **only** appears after an :guilabel:`Employee` is selected. Additionally, only image files can be attached in this field at this time." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:17 -msgid "Create an employee by going to :menuselection:`Employees --> New`. Go to the :guilabel:`Settings` tab, and configure the :guilabel:`Australian Payroll` section, for example checking if they are :guilabel:`Non-resident`, if they benefit from the :guilabel:`Tax-free Threshold`, their :guilabel:`TFN Status`, :guilabel:`Employee Type`, etc." +#: ../../content/applications/hr/payroll/contracts.rst:235 +#: ../../content/applications/hr/payroll/salary_attachments.rst:3 +msgid "Salary attachments" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Employee settings tab for the Australian payroll localization." +#: ../../content/applications/hr/payroll/contracts.rst:237 +msgid "After an employee is selected for the contract, a :icon:`fa-book` :guilabel:`Salary Attachments` smart button appears at the top of the page." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:26 -msgid "Employee private information" +#: ../../content/applications/hr/payroll/contracts.rst:240 +msgid "For new employees who do not currently have a contract, the smart button displays :guilabel:`New`. If the contract is being updated for a current employee who already has salary attachments configured, the smart button displays the number of salary attachments currently running." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:28 -msgid "In addition, some personal employee information is required for payroll compliance with Single Touch Payroll, and to process superannuation payments. Open the employee's :guilabel:`Private Information` tab and fill in the following fields:" +#: ../../content/applications/hr/payroll/contracts.rst:244 +msgid ":doc:`Create or update any necessary salary attachments ` for the contract, before sending." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:32 -msgid ":guilabel:`Private Address`" +#: ../../content/applications/hr/payroll/contracts.rst:248 +msgid "Send a contract" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:33 -msgid ":guilabel:`Private Email`" +#: ../../content/applications/hr/payroll/contracts.rst:250 +msgid "After a contract has been created and configured, the next step is to send it to the employee or applicant. Click the :guilabel:`Generate Offer` button, and the :guilabel:`Offer for (Employee)` form loads." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:34 -msgid ":guilabel:`Private Phone`" +#: ../../content/applications/hr/payroll/contracts.rst:254 +msgid "The :guilabel:`Offer for (Employee)` form displays all the basic information from the contract, as well as a link the employee can use to sign the contract. The last field on the form is a :guilabel:`Validity Days Count` field. This indicates how long the offer is valid. Enter the desired number of days in the field. The default is `30` days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:35 -msgid ":guilabel:`Date of Birth`" +#: ../../content/applications/hr/payroll/contracts.rst:259 +msgid "Click :guilabel:`Send By Email` and a pop-up email window loads, using a preconfigured default email template. Click :guilabel:`Send` to send the offer." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Employee private information tab for the Australian payroll localization." +#: ../../content/applications/hr/payroll/contracts.rst:263 +msgid "In order to send a contract using the :guilabel:`Generate Offer` button, there **must** be an employee signature field on the contract PDF being sent." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:41 -msgid "Odoo will remind you to complete the required data at different stages of the process." +#: ../../content/applications/hr/payroll/contracts.rst:-1 +msgid "Send the contract to the employee via one of the buttons." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:44 -msgid "Super accounts and funds" +#: ../../content/applications/hr/payroll/contracts.rst:270 +msgid "Contract status" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:46 -msgid "You can add the superannuation details of new employees under the employee's :guilabel:`Super Accounts` tab. Click :guilabel:`Add a line` and make sure to include the :guilabel:`Member Since` date, :guilabel:`Member Number`, and :guilabel:`Super Fund`." +#: ../../content/applications/hr/payroll/contracts.rst:272 +msgid "When creating and sending out a contract, the default status of the contract is :guilabel:`New`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:51 -msgid "Use the :guilabel:`Proportion` field if an employee's contributions should sent to multiple funds at a time." +#: ../../content/applications/hr/payroll/contracts.rst:274 +msgid "Once there is a minimum of one completed signature on the document, the status changes to :guilabel:`Partially Signed`. Internal users, such as HR and recruitment employees, are alerted in the database when there is a signature requested of them." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Configuring a super fund and super account for the Australian payroll localization." +#: ../../content/applications/hr/payroll/contracts.rst:278 +msgid "After all required parties have signed the contract, the status changes to :guilabel:`Fully Signed`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:57 -msgid "To create a new :guilabel:`Super Fund`, start typing its name and click :guilabel:`Create and edit...`. Fill in its:" +#: ../../content/applications/hr/payroll/contracts.rst:280 +msgid "All status changes happen automatically as the document is signed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:60 -msgid ":guilabel:`Address`" +#: ../../content/applications/hr/payroll/contracts.rst:283 +msgid ":doc:`../../productivity/documents`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:61 -msgid ":guilabel:`ABN`" +#: ../../content/applications/hr/payroll/contracts.rst:284 +msgid ":doc:`../../productivity/sign`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:62 -msgid ":guilabel:`Type` (APRA / SMSF)" +#: ../../content/applications/hr/payroll/headcount.rst:3 +msgid "Headcount report" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:63 -msgid "unique identifier (:guilabel:`USI` for APRA, :guilabel:`ESA` for SMSF)" +#: ../../content/applications/hr/payroll/headcount.rst:5 +msgid "The *Headcount report* in the **Payroll** app shows the number of employees on payroll and allows headcount comparisons between different periods of time." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:64 -msgid "(for SMFS only) :guilabel:`Bank Account`" +#: ../../content/applications/hr/payroll/headcount.rst:9 +msgid "Create a headcount report" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Configuring a super fund for the Australian payroll localization." +#: ../../content/applications/hr/payroll/headcount.rst:11 +msgid "Create a headcount report to see the number of employees at a specific time or compare headcounts across periods." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:70 -msgid "Manage all super accounts and funds by going to :menuselection:`Payroll --> Configuration --> Super Funds` or :menuselection:`Super Accounts`." +#: ../../content/applications/hr/payroll/headcount.rst:14 +msgid "To create a headcount report, navigate to :menuselection:`Payroll app --> Reporting --> Headcount` and click :guilabel:`New`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:74 -msgid "Odoo is currently in the process of becoming SuperStream-compliant." +#: ../../content/applications/hr/payroll/headcount.rst:17 +msgid "Report name: generated automatically as `Headcount for (Company Name) on the (YYYY-MM-DD)` and **cannot** be modified." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:79 -msgid "Once the employee has been created, create their employment contract by clicking the :icon:`fa-book` :guilabel:`Contracts` smart button, or by going to :menuselection:`Employees --> Employees --> Contracts`." +#: ../../content/applications/hr/payroll/headcount.rst:19 +msgid ":guilabel:`Company`: populated automatically (works in both single and multi-company databases)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:84 -msgid "Only one contract can be active per employee at a time. However, an employee can be assigned consecutive contracts during their employment." +#: ../../content/applications/hr/payroll/headcount.rst:20 +msgid ":guilabel:`From`/:guilabel:`To` dates: defaults to current date (from) and blank (to). Adjust these to define the period to analyze." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:88 -msgid "Employment contract creation: recommended steps" +#: ../../content/applications/hr/payroll/headcount.rst:-1 +msgid "A headcount report form filled out for the third quarter of 2025." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Recommended steps to create an employment contract." +#: ../../content/applications/hr/payroll/headcount.rst:26 +msgid "Next, click :guilabel:`Populate` to generate the report." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:94 -msgid "1. Basic contractual information" +#: ../../content/applications/hr/payroll/headcount.rst:28 +msgid "At the top of the form, a :icon:`fa-people` :guilabel:`Employees` smart button appears. Clicking the button displays the total number of employees for the selected period." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:96 -msgid "Select the :guilabel:`Contract Start Date` and :guilabel:`Working Schedule` (set, or flexible for casual workers)." +#: ../../content/applications/hr/payroll/headcount.rst:32 +msgid "View all headcount reports" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:98 -msgid "Keep the :guilabel:`Salary Structure Type` set to :guilabel:`Australian Employee`. This structure covers all of the ATO's tax schedules." +#: ../../content/applications/hr/payroll/headcount.rst:34 +msgid "See how the company headcount has changed over time by viewing all headcount reports in a list view." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:103 -msgid "(if using the Attendances or Planning app) Select the :guilabel:`Work Entry Source` to define how working hours and days are accounted for on the employee's payslip." +#: ../../content/applications/hr/payroll/headcount.rst:36 +msgid "To view all headcount reports, navigate to :menuselection:`Payroll app --> Reporting --> Headcount`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:106 -msgid ":guilabel:`Working Schedule`: work entries are automatically generated based on the employee's working schedule, starting from the contract's start date." +#: ../../content/applications/hr/payroll/headcount.rst:39 +msgid "View employees in a headcount" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:110 -msgid "An employee works 38 hours a week, their contract begins on 01/01, today's date is 16/01, and the user generates a pay run from 14/01 to 20/01. The working hours on the payslip will be automatically calculated to be 38 hours (5 * 7.36 hours) if no unpaid leave is taken." +#: ../../content/applications/hr/payroll/headcount.rst:41 +msgid "TO get an overall view of employees and their salary impact on the company, view all employee records of a specific headcount report." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:114 -msgid ":guilabel:`Attendances`: the working schedule is ignored, and work entries are only generated after clocking in and out of the Attendances app. Note that attendances can be imported." +#: ../../content/applications/hr/payroll/headcount.rst:44 +msgid "To view the employees of a specific headcount report, click the :icon:`fa-people` :guilabel:`Employees` smart button at the top of a headcount report." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:116 -msgid ":guilabel:`Planning`: the working schedule is ignored, and work entries are generated from planning shifts in the Planning app." +#: ../../content/applications/hr/payroll/headcount.rst:47 +msgid "All employees from the headcount appear in a list view, grouped by :guilabel:`Department`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:120 -msgid "Timesheets do not impact work entries in Odoo. If you need to import your timesheets in Odoo, import them by going to :menuselection:`Payroll --> Work Entries --> Work Entries` instead." +#: ../../content/applications/hr/payroll/headcount.rst:49 +msgid ":guilabel:`Employee`: the employee's full name" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:124 -msgid "2. Salary Information tab" +#: ../../content/applications/hr/payroll/headcount.rst:50 +msgid ":guilabel:`Department`: the department their job position is in" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:126 -msgid ":guilabel:`Wage Type`: select :guilabel:`Fixed Wage` for full-time and part-time employees, and :guilabel:`Hourly Wage` for casual workers. The latter allows you to add a :guilabel:`Casual Loading` percentage." +#: ../../content/applications/hr/payroll/headcount.rst:51 +msgid ":guilabel:`Job Title`: their role" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:131 -msgid "For hourly workers, the :guilabel:`Hourly Wage` field should exclude casual loading." +#: ../../content/applications/hr/payroll/headcount.rst:52 +msgid ":guilabel:`Employer Cost`: how much the company pays the employee each pay-period" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:133 -msgid ":guilabel:`Schedule Pay`: in Australia, only the following pay run frequencies are accepted: :guilabel:`Daily`, :guilabel:`Weekly`, :guilabel:`Bi-weekly` (or fortnightly), :guilabel:`Monthly`, and :guilabel:`Quarterly`." +#: ../../content/applications/hr/payroll/headcount.rst:53 +msgid ":guilabel:`Wage on Payroll`: the dollar amount on payroll reports" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:136 -msgid ":guilabel:`Wage` /*period*: assign a wage to the contract according to their pay frequency. On payslips, the corresponding annual and hourly rates will be computed automatically." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:5 +msgid "Payroll localizations" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:140 -msgid "3. Australia tab" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:7 +msgid "*Localizations* are country-specific settings preconfigured in Odoo at the creation of the database, which account for all taxes, fees, and allowances for that particular country." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Australia tab of a contract." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:10 +msgid "*Payroll localizations* refer to the specific process of adapting payroll systems, policies, and compliance measures to align with the specific labor laws, tax regulations, and social security requirements of a particular country or region." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:145 -msgid ":guilabel:`General`" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:14 +msgid "This ensures that employee salaries, benefits, deductions, and contributions are processed accurately and in full compliance with local legal and financial obligations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:147 -msgid "Add the :guilabel:`Regular Pay Day` if relevant." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:17 +msgid "Localization also includes integrating country-specific payroll elements such as benefits, holidays, termination rules, and reporting requirements, helping businesses avoid legal risks while ensuring employees receive their correct compensation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:148 -msgid "Enable :guilabel:`Report in BAS - W3` if you choose to add PAYG withholding amounts in BAS section W3 instead of W2 (refer to the `ATO's web page on PAYG withholding `_ for more information)." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:22 +msgid "Install localization package" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:153 -msgid ":guilabel:`Leave loading / workplace giving`" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:24 +msgid "A country-specific localization module :ref:`must be installed ` to properly configure and process payroll. To install the required module, first open the **Apps** app." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:155 -msgid "Define whether your employees are :guilabel:`Eligible for Leave Loading`." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:27 +msgid "Clear out the default :icon:`fa-filter` :guilabel:`Apps` filter, then type the name of the desired country into the search bar. All available modules for that country are presented." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:156 -msgid "Set the :guilabel:`Workplace Giving Employee` amount in exchange for deductions." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:31 +msgid "Some countries only have one localization module, while other have multiple modules. This is typically when other software is neede to process payroll, and importing and exporting data is required." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:157 -msgid "Set the :guilabel:`Salary Sacrificed Workplace Giving` amount (e.g., receiving a benefit instead of a deduction)." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:35 +msgid "For example. when searching for **Payroll** modules for `Egypt`, the following modules appear in the search, and must be installed: `Egypt - Payroll` and `Egypt - Payroll with Accounting`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:160 -msgid ":guilabel:`Super contributions`" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:38 +msgid "Refer to the :ref:`country-specific documentation ` for a complete list of the related **Payroll** modules required for each specific country." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:162 -msgid "Add the :guilabel:`Extra Negotiated Super %` on top of the *super guarantee*." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:42 +msgid "To see if any localization modules have been installed on the database, navigate to :menuselection:`Payroll app --> Configuration --> Settings`. In the :guilabel:`Settings` page, if a localization module was installed, a :guilabel:`(Country) Localization` section appears." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:163 -msgid "Add the :guilabel:`Extra Compulsory Super %` as per industrial agreements or awards obligations." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:47 +msgid "It is **not** recommended to alter the localization settings, unless specifically required." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:165 -msgid ":guilabel:`Salary sacrifice`" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:50 +msgid "Odoo can handle a multi-company configuration. This is generally done when there is a main company or office location, such as a headquarters, and there are other offices/branches around the country or globe, that fall under that main company or headquarters. In Odoo, each company, including the headquarters, must be set up as their own company/branch using the multi-company method." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:167 -msgid ":guilabel:`Salary Sacrifice Superannuation` allows employees to sacrifice part of their salary in favor of reportable employer superannuation contributions (RESC)." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:56 +msgid "Each individual company can have a different localization setting, since locations can vary anywhere in the world, where rules and laws differ." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:169 -msgid ":guilabel:`Salary Sacrifice Other Benefits` allows them to sacrifice part of their salary towards some other form of benefit (refer to the `ATO's web page on Salary sacrificing for employees `_ for more information)." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:59 +msgid "For more information on companies, refer to the :doc:`Companies <../../general/companies>` documentation, which covers how to set up companies." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:175 -msgid "As of Odoo 18, salary sacrificing for other benefits currently does not impact fringe benefits tax (FBT) reporting." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:65 +msgid "List of countries" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:181 -msgid "4. Salary attachments" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:67 +msgid "Payroll localization modules are available for the countries listed below." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:183 -msgid "If the employee is to receive additional recurring payments every pay run, whether indefinitely or for a set number of periods, click the :icon:`fa-book` :guilabel:`Salary Attachments` smart button on the contract. Choose a :guilabel:`Type` and a :guilabel:`Description`." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:70 +msgid "New countries are frequently added to this list, as Odoo keeps expanding and improving existing localizations and related documentation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:188 -msgid "Around 32 recurring salary attachment types exist for Australia. These are mostly related to allowances and child support. `Contact us `_ for more information as to whether allowances from your industry can be covered." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:73 +msgid ":doc:`Australia `" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:193 -msgid "5. Run the contract" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:74 +msgid ":doc:`Belgium `" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Example of a running contract." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:75 +msgid "Bangladesh" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:198 -msgid "Once all the information has been completed, change the contract stage from :guilabel:`New` to :guilabel:`Running`." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:76 +msgid ":doc:`Egypt `" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:202 -msgid "Prepare pay runs" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:77 +msgid ":doc:`Hong Kong `" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:205 -msgid "Regular" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:78 +msgid "India" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:207 -msgid "Pay runs are created by going to :menuselection:`Payroll --> Payslips --> Batches`. After clicking :guilabel:`New`, enter a :guilabel:`Batch Name`, select a :guilabel:`Period`, and click :guilabel:`Generate Payslips`." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:79 +msgid "Indonesia" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Steps to generate payslips." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:80 +msgid ":doc:`Jordan `" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:214 -msgid "Employees on a pay run can be filtered down by :guilabel:`Department` and :guilabel:`Job Position`. There is no limit to the amount of payslips that can be created in one batch. After clicking :guilabel:`Generate`, one payslip is created per employee in the :guilabel:`Waiting` stage, in which they can be reviewed and amended before validation." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:81 +msgid "Kenya" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Generated payslips in the waiting stage." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:82 +msgid "Lithuania" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:222 -msgid "On the payslip form view, there are two types of inputs:" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:83 +msgid "Luxembourg" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:224 -msgid ":guilabel:`Worked days` are computed based on the :ref:`work entry source set on the employee's contract `. :ref:`Work entries can be configured ` according to different types: attendance, overtime, Saturday rate, Sunday rate, public holiday rate, etc." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:84 +msgid "Malaysia" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:228 -msgid ":guilabel:`Other inputs` are individual payments or amounts of :ref:`different types ` (allowances, lump sums, deductions, termination payments, leaves, etc.) that have little to do with the hours worked during the current pay period. The :ref:`previously configured salary attachments ` are simply recurring other inputs attached to a contract." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:85 +msgid "Mexico" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Worked days and other inputs of a payslip." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:86 +msgid "Morocco" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:237 -msgid "Under the :guilabel:`Salary Computation` tab, Odoo automatically computes payslip rules based on employees, contracts, worked hours, other input types, and salary attachments." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:87 +msgid "Netherlands" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:240 -msgid "The salary structure *Australian Employee* has 35 payslip rules that automatically compute and dynamically display according to the payslip inputs." +#: ../../content/applications/hr/payroll/payroll_localizations.rst:88 +msgid "Pakistan" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 -msgid "Salary computation tab of a payslip" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:89 +msgid "Poland" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:248 -msgid "The following rules apply for that pay period in the above example:" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:90 +msgid "Romania" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:250 -msgid ":guilabel:`Basic Salary`: pre-sacrifice gross salary" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:91 +msgid "Saudi Arabia" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:251 -msgid ":guilabel:`Ordinary Time Earnings`: amount to which the super guarantee percentage needs to be applied" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:92 +msgid "Slovakia" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:253 -msgid ":guilabel:`Salary Sacrifice Total`: includes the $150 sacrificed to superannuation" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:93 +msgid "Switzerland" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:254 -msgid ":guilabel:`Taxable Allowance Payments`: includes the $10 allowance (*cents per KM* in this case)" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:94 +msgid "Türkiye" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:256 -msgid ":guilabel:`Taxable Salary`: gross salary amount minus non-taxable amounts" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:95 +msgid ":doc:`United Arab Emirates `" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:257 -msgid ":guilabel:`Salary Withholding` and :guilabel:`Total Withholding`: amounts to be withheld from the taxable salary" +#: ../../content/applications/hr/payroll/payroll_localizations.rst:96 +msgid ":doc:`United States `" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:259 -msgid ":guilabel:`Net Salary`: the employee's net wage" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:3 +msgid "Australia" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:260 -msgid ":guilabel:`Concessional Super Contribution`: in this scenario, the amount sacrificed to superannuation, payable to the employee's super fund in addition to the super guarantee" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:8 +msgid "Odoo is currently in the process of becoming compliant with STP Phase 2 and SuperStream. An announcement will be made as soon as companies can use Odoo for payroll as a one-stop platform." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:262 -msgid ":guilabel:`Super Guarantee`: as of 01 July 2024, it is computed as 11.5% of the ordinary time earnings amount" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:12 +msgid "Setting up employees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:266 -msgid "As of Odoo 18, the most recent tax schedule rates (2024-2025) have been updated for all salary rules and computations." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:15 +msgid "Employee settings" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:270 -msgid "Out-of-cycle" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:17 +msgid "Create an employee by going to :menuselection:`Employees --> New`. Go to the :guilabel:`Settings` tab, and configure the :guilabel:`Australian Payroll` section, for example checking if they are :guilabel:`Non-resident`, if they benefit from the :guilabel:`Tax-free Threshold`, their :guilabel:`TFN Status`, :guilabel:`Employee Type`, etc." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:272 -msgid "In Australia, payslips created without a batch are considered to be *out-of-cycle* runs. Create them by going to :menuselection:`Payroll --> Payslips --> Individual Payslips`. The same payslip rules apply, but the way these payslips are submitted to the ATO in the frame of Single Touch Payroll (STP) is slightly different." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Employee settings tab for the Australian payroll localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:278 -msgid "As of Odoo 18, adding an out-of-cycle payslip to an existing batch is **not** recommended." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:26 +msgid "Employee private information" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:281 -msgid "Finalise pay runs" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:28 +msgid "In addition, some personal employee information is required for payroll compliance with Single Touch Payroll, and to process superannuation payments. Open the employee's :guilabel:`Private Information` tab and fill in the following fields:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:284 -msgid "Validate payslips" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:32 +msgid ":guilabel:`Private Address`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:286 -msgid "Once all payslip data is deemed correct, click :guilabel:`Create Draft Entry` on the payslip batch. This can also be done payslip by payslip for control reasons." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:33 +msgid ":guilabel:`Private Email`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:289 -msgid "This has several impacts:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:34 +msgid ":guilabel:`Private Phone`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:291 -msgid "Marking the batch and its payslips as :guilabel:`Done`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:35 +msgid ":guilabel:`Date of Birth`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:292 -msgid "Creating a draft accounting entry per payslip or one entry for the whole batch, depending on your payroll settings. At this stage, accountants can post entries to affect the balance sheet, P&L report, and BAS report." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Employee private information tab for the Australian payroll localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:295 -msgid "Preparing the STP submission (or payroll data to be filed to the ATO as part of STP compliance). This needs to be performed by the :guilabel:`STP Responsible` user, defined under :menuselection:`Payroll --> Configuration --> Settings`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:41 +msgid "Odoo will remind you to complete the required data at different stages of the process." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:298 -msgid "Preparing super contribution lines as part of SuperStream compliance. This needs to be done by the :guilabel:`HR Super Send` user selected under :menuselection:`Payroll --> Configuration --> Settings`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:44 +msgid "Super accounts and funds" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Example of a draft payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:46 +msgid "You can add the superannuation details of new employees under the employee's :guilabel:`Super Accounts` tab. Click :guilabel:`Add a line` and make sure to include the :guilabel:`Member Since` date, :guilabel:`Member Number`, and :guilabel:`Super Fund`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:306 -msgid "Submit payroll data to the ATO" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:51 +msgid "Use the :guilabel:`Proportion` field if an employee's contributions should sent to multiple funds at a time." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:309 -msgid "Odoo is currently in the process of becoming compliant with STP Phase 2, and this step described above does not submit data yet to the ATO." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Configuring a super fund and super account for the Australian payroll localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:312 -msgid "As per ATO requirements, STP submission for a pay run needs to be done on or before the payday. For this reason, submit your STP data to the ATO first before proceeding with payment. To do so, click :guilabel:`Submit to ATO` on the payslip batch." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:57 +msgid "To create a new :guilabel:`Super Fund`, start typing its name and click :guilabel:`Create and edit...`. Fill in its:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:316 -msgid "On the STP record for this pay run, a few useful information is displayed:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:60 +msgid ":guilabel:`Address`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:318 -msgid "a warning message if important information is missing," +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:61 +msgid ":guilabel:`ABN`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:319 -msgid "an automatically generated activity for the STP responsible user, and" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:62 +msgid ":guilabel:`Type` (APRA / SMSF)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:320 -msgid "a summary of payslips contained in this pay run, auditable from this view." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:63 +msgid "unique identifier (:guilabel:`USI` for APRA, :guilabel:`ESA` for SMSF)" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:64 +msgid "(for SMFS only) :guilabel:`Bank Account`" msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Example of an STP record." +msgid "Configuring a super fund for the Australian payroll localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:325 -msgid "Once the STP record is ready to go, click :guilabel:`Submit to ATO`, then read and accept the related terms and conditions." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:70 +msgid "Manage all super accounts and funds by going to :menuselection:`Payroll --> Configuration --> Super Funds` or :menuselection:`Super Accounts`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:329 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:219 -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:333 -msgid "Pay employees" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:74 +msgid "Odoo is currently in the process of becoming SuperStream-compliant." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:331 -msgid "Once the ATO submission is complete, you can proceed to pay your employees. To facilitate the payment matching process, remember to post the payslip-related journal entries prior to validating a payment." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:79 +msgid "Once the employee has been created, create their employment contract by clicking the :icon:`fa-book` :guilabel:`Contracts` smart button, or by going to :menuselection:`Employees --> Employees --> Contracts`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:335 -msgid "Although you may decide to pay your employees individually, we recommend creating a batch payment from your payslip batch. To do so, click :guilabel:`Pay` on the payslip batch, and select :guilabel:`ABA Credit Transfer` as the :guilabel:`Payment Method`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:84 +msgid "Only one contract can be active per employee at a time. However, an employee can be assigned consecutive contracts during their employment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Selecting the payment method for a payslip batch." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:88 +msgid "Employment contract creation: recommended steps" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:342 -msgid "This has two impacts:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Recommended steps to create an employment contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:344 -msgid "Marking the batch and its payslips as :guilabel:`Paid`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:94 +msgid "1. Basic contractual information" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:345 -msgid "Creating a :guilabel:`Payment Batch` linked to the payslip batch." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:96 +msgid "Select the :guilabel:`Contract Start Date` and :guilabel:`Working Schedule` (set, or flexible for casual workers)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Example of a paid batch of payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:98 +msgid "Keep the :guilabel:`Salary Structure Type` set to :guilabel:`Australian Employee`. This structure covers all of the ATO's tax schedules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:350 -msgid "When receiving the bank statement in Odoo, you can now match the statement line with the batch payment in one click. The payment is not reconciled against the payslip batch, and all individual payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:103 +msgid "(if using the Attendances or Planning app) Select the :guilabel:`Work Entry Source` to define how working hours and days are accounted for on the employee's payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Steps to reconcile a bank statement with a batch payment." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:106 +msgid ":guilabel:`Working Schedule`: work entries are automatically generated based on the employee's working schedule, starting from the contract's start date." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:358 -msgid "Impact on accounting" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:110 +msgid "An employee works 38 hours a week, their contract begins on 01/01, today's date is 16/01, and the user generates a pay run from 14/01 to 20/01. The working hours on the payslip will be automatically calculated to be 38 hours (5 * 7.36 hours) if no unpaid leave is taken." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:360 -msgid "Depending on the employee and contract configuration, the journal entry linked to a payslip will be more or less exhaustive." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:114 +msgid ":guilabel:`Attendances`: the working schedule is ignored, and work entries are only generated after clocking in and out of the Attendances app. Note that attendances can be imported." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:364 -msgid "For instance, here is the journal entry generated by the employee Marcus Cook configured above." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:116 +msgid ":guilabel:`Planning`: the working schedule is ignored, and work entries are generated from planning shifts in the Planning app." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 -msgid "Example of a journal entry for a payslip" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:120 +msgid "Timesheets do not impact work entries in Odoo. If you need to import your timesheets in Odoo, import them by going to :menuselection:`Payroll --> Work Entries --> Work Entries` instead." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:369 -msgid "Once posted, predefined accounts will impact the company's balance sheet (PAYGW, wages, and superannuation liabilities) and profit & loss report (wages and superannuation expenses). In addition, the employee's gross wage and PAYG withholding will update the BAS report for the relevant period (see Tax Grid: W1 and W2). Accounts can be adjusted to the company's chart of accounts." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:124 +msgid "2. Salary Information tab" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Example of a BAS report PAYG tax witheld section." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:126 +msgid ":guilabel:`Wage Type`: select :guilabel:`Fixed Wage` for full-time and part-time employees, and :guilabel:`Hourly Wage` for casual workers. The latter allows you to add a :guilabel:`Casual Loading` percentage." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:378 -msgid "Other payroll flows" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:131 +msgid "For hourly workers, the :guilabel:`Hourly Wage` field should exclude casual loading." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:381 -msgid "Paying super contributions" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:133 +msgid ":guilabel:`Schedule Pay`: in Australia, only the following pay run frequencies are accepted: :guilabel:`Daily`, :guilabel:`Weekly`, :guilabel:`Bi-weekly` (or fortnightly), :guilabel:`Monthly`, and :guilabel:`Quarterly`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:384 -msgid "Odoo has a partnership with a clearing house to process both superannuation payments and data to the right funds in one click, via direct debit. Odoo is currently in the process of becoming compliant with SuperStream, and an announcement will be made as soon as superannuation contributions can be processed via Odoo's payroll solution." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:136 +msgid ":guilabel:`Wage` /*period*: assign a wage to the contract according to their pay frequency. On payslips, the corresponding annual and hourly rates will be computed automatically." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:389 -msgid "Once a quarter (or more frequently, in preparation for `Payday Super `_), you have to process superannuation payments to your employees' super funds. To do so, go to :menuselection:`Payroll --> Reporting --> Super Contributions`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:140 +msgid "3. Australia tab" msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Example of a super file." +msgid "Australia tab of a contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:397 -msgid "When ready to pay, add the :guilabel:`Bank Journal` that will be used to pay the super from, then click :guilabel:`Lock` to prevent the contributions from subsequent payslips from being added to that file. Instead, a new Super file will be created." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:145 +msgid ":guilabel:`General`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:401 -msgid "Once the payment has been processed, it can be traced back to the Super file and matched with a bank statement." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:147 +msgid "Add the :guilabel:`Regular Pay Day` if relevant." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Example of a super file payment." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:148 +msgid "Enable :guilabel:`Report in BAS - W3` if you choose to add PAYG withholding amounts in BAS section W3 instead of W2 (refer to the `ATO's web page on PAYG withholding `_ for more information)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:408 -msgid "Terminating employees" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:153 +msgid ":guilabel:`Leave loading / workplace giving`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:410 -msgid "Employees can be terminated by going to :menuselection:`Payroll --> Reporting --> Terminate Employee`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:155 +msgid "Define whether your employees are :guilabel:`Eligible for Leave Loading`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:413 -msgid "The following fields must be completed:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:156 +msgid "Set the :guilabel:`Workplace Giving Employee` amount in exchange for deductions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:415 -msgid ":guilabel:`Contract End Date`: once the termination is validated, this date will be added to the contract automatically, and mark the contract as :guilabel:`Expired` when the date has been reached." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:157 +msgid "Set the :guilabel:`Salary Sacrificed Workplace Giving` amount (e.g., receiving a benefit instead of a deduction)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:418 -msgid ":guilabel:`Cessation Type Code`: a mandatory field for the ATO's STP reporting." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:160 +msgid ":guilabel:`Super contributions`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:419 -msgid ":guilabel:`Termination Type`: the type of redundancy (genuine or non-genuine) affects the computation of unused annual and long service leave withholding." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:162 +msgid "Add the :guilabel:`Extra Negotiated Super %` on top of the *super guarantee*." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Terminating the contract of an employee." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:163 +msgid "Add the :guilabel:`Extra Compulsory Super %` as per industrial agreements or awards obligations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:425 -msgid "The balance of unused annual leaves and long service leaves is displayed for reference." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:165 +msgid ":guilabel:`Salary sacrifice`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:427 -msgid "Confirming the termination creates an out-of-cycle payslip with the tag :guilabel:`final pay`. It computes the worked days until the contract end date, in addition to the employee's unused annual and long service leave entitlements." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:167 +msgid ":guilabel:`Salary Sacrifice Superannuation` allows employees to sacrifice part of their salary in favor of reportable employer superannuation contributions (RESC)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Example of an out-of-cycle payslip of a terminated employee." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:169 +msgid ":guilabel:`Salary Sacrifice Other Benefits` allows them to sacrifice part of their salary towards some other form of benefit (refer to the `ATO's web page on Salary sacrificing for employees `_ for more information)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:434 -msgid "Odoo automatically computes unused leave entitlements based on the employee's current hourly rate leave loading (for annual leaves only), and the remaining leave balance. However, these amounts can be manually edited in the :guilabel:`Other Inputs` table if necessary." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:175 +msgid "As of Odoo 18, salary sacrificing for other benefits currently does not impact fringe benefits tax (FBT) reporting." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:438 -msgid "Employment Termination Payments (ETP) can also be added to the :guilabel:`Other Inputs` table. Odoo has a comprehensive list of excluded and non-excluded ETPs for companies to select from." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:181 +msgid "4. Salary attachments" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Adding employment termination payments." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:183 +msgid "If the employee is to receive additional recurring payments every pay run, whether indefinitely or for a set number of periods, click the :icon:`fa-book` :guilabel:`Salary Attachments` smart button on the contract. Choose a :guilabel:`Type` and a :guilabel:`Description`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:445 -msgid "Withholding for unused leaves and ETPs is computed according to the ATO's `Schedule 7 `_ and `Schedule 11 `_ and updated as of 01 July 2024." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:188 +msgid "Around 32 recurring salary attachment types exist for Australia. These are mostly related to allowances and child support. `Contact us `_ for more information as to whether allowances from your industry can be covered." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:451 -msgid "Once an employee has been terminated and the last detailed of their employment resolved, you can archive the employee by clicking the :icon:`fa-cog` (:guilabel:`Actions`) icon, then :icon:`oi-archive` :guilabel:`Archive` on the employee's form view." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:193 +msgid "5. Run the contract" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:456 -msgid "Switching from another STP software to Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Example of a running contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:458 -msgid "When switching from another STP-enabled software to Odoo, you might need to maintain the continuity in the YTD values of your employees. Odoo allows importing employees' YTD values by going to :menuselection:`Payroll --> Configuration --> Settings` and clicking :guilabel:`Import YTD Balances`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:198 +msgid "Once all the information has been completed, change the contract stage from :guilabel:`New` to :guilabel:`Running`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Import YTD balances button." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:202 +msgid "Prepare pay runs" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:466 -msgid "For the ATO to recognize the employee records of your previous software and keep a continuity in Odoo, you must enter the:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:205 +msgid "Regular" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:469 -msgid ":guilabel:`Previous BMS ID` (one per database)" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:207 +msgid "Pay runs are created by going to :menuselection:`Payroll --> Payslips --> Batches`. After clicking :guilabel:`New`, enter a :guilabel:`Batch Name`, select a :guilabel:`Period`, and click :guilabel:`Generate Payslips`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:470 -msgid ":guilabel:`Previous Payroll ID` (one per employee)" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Steps to generate payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:472 -msgid "Ask your previous software provider if you cannot find its BMS ID or your employees' payroll IDs." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:214 +msgid "Employees on a pay run can be filtered down by :guilabel:`Department` and :guilabel:`Job Position`. There is no limit to the amount of payslips that can be created in one batch. After clicking :guilabel:`Generate`, one payslip is created per employee in the :guilabel:`Waiting` stage, in which they can be reviewed and amended before validation." msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Importing YTD balances." +msgid "Generated payslips in the waiting stage." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:477 -msgid "This will give you the opportunity to add your employees' YTD opening balances in the current fiscal year. The ATO reports on a lot of different types of YTD. These are represented by the 13 following :guilabel:`Salary Rules` in Odoo." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:222 +msgid "On the payslip form view, there are two types of inputs:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Salary rules for an employee." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:224 +msgid ":guilabel:`Worked days` are computed based on the :ref:`work entry source set on the employee's contract `. :ref:`Work entries can be configured ` according to different types: attendance, overtime, Saturday rate, Sunday rate, public holiday rate, etc." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:485 -msgid "Let us say that the employee Marcus Cook has been transitioned from another STP-enabled software on September 1. Marcus has received two monthly payslips in his previous software (for July and August). Here are the YTD balances Marcus's company needs to transfer to Odoo:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:228 +msgid ":guilabel:`Other inputs` are individual payments or amounts of :ref:`different types ` (allowances, lump sums, deductions, termination payments, leaves, etc.) that have little to do with the hours worked during the current pay period. The :ref:`previously configured salary attachments ` are simply recurring other inputs attached to a contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:492 -msgid "YTD category" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Worked days and other inputs of a payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:493 -msgid "YTD balance to transfer" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:237 +msgid "Under the :guilabel:`Salary Computation` tab, Odoo automatically computes payslip rules based on employees, contracts, worked hours, other input types, and salary attachments." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:494 -msgid "Gross (normal attendance)" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:240 +msgid "The salary structure *Australian Employee* has 35 payslip rules that automatically compute and dynamically display according to the payslip inputs." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:495 -msgid "$13,045.45" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 +msgid "Salary computation tab of a payslip" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:496 -msgid "Gross (overtime)" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:248 +msgid "The following rules apply for that pay period in the above example:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:497 -msgid "$1,000" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:250 +msgid ":guilabel:`Basic Salary`: pre-sacrifice gross salary" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:498 -msgid "Paid leave" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:251 +msgid ":guilabel:`Ordinary Time Earnings`: amount to which the super guarantee percentage needs to be applied" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:499 -msgid "$954.55" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:253 +msgid ":guilabel:`Salary Sacrifice Total`: includes the $150 sacrificed to superannuation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:500 -msgid "Laundry allowance" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:254 +msgid ":guilabel:`Taxable Allowance Payments`: includes the $10 allowance (*cents per KM* in this case)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:501 -msgid "$200" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:256 +msgid ":guilabel:`Taxable Salary`: gross salary amount minus non-taxable amounts" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:502 -msgid "Total withholding" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:257 +msgid ":guilabel:`Salary Withholding` and :guilabel:`Total Withholding`: amounts to be withheld from the taxable salary" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:503 -msgid "$2,956" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:259 +msgid ":guilabel:`Net Salary`: the employee's net wage" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:504 -msgid "Super Guarantee" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:260 +msgid ":guilabel:`Concessional Super Contribution`: in this scenario, the amount sacrificed to superannuation, payable to the employee's super fund in addition to the super guarantee" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:505 -msgid "$1,610" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:262 +msgid ":guilabel:`Super Guarantee`: as of 01 July 2024, it is computed as 11.5% of the ordinary time earnings amount" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:507 -msgid "If some YTD balances need to be reported with more granularity to the ATO, you can use the salary rule's inputs." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:266 +msgid "As of Odoo 18, the most recent tax schedule rates (2024-2025) have been updated for all salary rules and computations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:511 -msgid "For instance, the *Basic Salary* rule can contain six inputs, and three are necessary in our example: regular gross amounts, overtime, and paid leaves. These are all reported differently in terms of YTD amounts." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:270 +msgid "Out-of-cycle" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 -msgid "Adding YTD inputs" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:272 +msgid "In Australia, payslips created without a batch are considered to be *out-of-cycle* runs. Create them by going to :menuselection:`Payroll --> Payslips --> Individual Payslips`. The same payslip rules apply, but the way these payslips are submitted to the ATO in the frame of Single Touch Payroll (STP) is slightly different." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:518 -msgid "The finalized YTD opening balances for Marcus Cook look like the following." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:278 +msgid "As of Odoo 18, adding an out-of-cycle payslip to an existing batch is **not** recommended." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 -msgid "Example of finalized YTD opening balances" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:281 +msgid "Finalise pay runs" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:523 -msgid "As a result, YTD computations on payslips are based on the employee's opening balances instead of starting from zero." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:284 +msgid "Validate payslips" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:527 -msgid "STP finalisation" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:286 +msgid "Once all payslip data is deemed correct, click :guilabel:`Create Draft Entry` on the payslip batch. This can also be done payslip by payslip for control reasons." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:530 -msgid "Odoo is currently in the process of becoming compliant with STP Phase 2, and the finalisation flows described below do not yet submit data to the ATO." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:289 +msgid "This has several impacts:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:534 -msgid "EOFY finalisation" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:291 +msgid "Marking the batch and its payslips as :guilabel:`Done`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:536 -msgid "Employers reporting through STP must make a finalization declaration by 14 July each year. To do so, go to :menuselection:`Payroll --> Reporting --> STP Finalisation`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:292 +msgid "Creating a draft accounting entry per payslip or one entry for the whole batch, depending on your payroll settings. At this stage, accountants can post entries to affect the balance sheet, P&L report, and BAS report." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "EOFY finalisation of an employee." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:295 +msgid "Preparing the STP submission (or payroll data to be filed to the ATO as part of STP compliance). This needs to be performed by the :guilabel:`STP Responsible` user, defined under :menuselection:`Payroll --> Configuration --> Settings`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:542 -msgid "Both active and terminated employees to finalise are displayed." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:298 +msgid "Preparing super contribution lines as part of SuperStream compliance. This needs to be done by the :guilabel:`HR Super Send` user selected under :menuselection:`Payroll --> Configuration --> Settings`." msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "List of employees to finalise." +msgid "Example of a draft payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:547 -msgid "From the finalisation form view, you can proceed with a final audit of all employees' payslips during the relevant financial year. Once ready, click :guilabel:`Submit to ATO`. When you have made the finalisation declaration, employees will see the status of their payment information change to :guilabel:`Tax ready` on their online income statement after the end of the financial year." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:306 +msgid "Submit payroll data to the ATO" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:553 -msgid "Individual finalisation" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:309 +msgid "Odoo is currently in the process of becoming compliant with STP Phase 2, and this step described above does not submit data yet to the ATO." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:555 -msgid "Odoo also allows you to finalise employees individually during the year. This can be useful when:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:312 +msgid "As per ATO requirements, STP submission for a pay run needs to be done on or before the payday. For this reason, submit your STP data to the ATO first before proceeding with payment. To do so, click :guilabel:`Submit to ATO` on the payslip batch." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:557 -msgid "one-off payments are made after a first finalisation; and" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:316 +msgid "On the STP record for this pay run, a few useful information is displayed:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:558 -msgid "finalisation after termination of employment during the year." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:318 +msgid "a warning message if important information is missing," msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:560 -msgid "To proceed with an individual finalisation, go to :menuselection:`Payroll --> Reporting --> STP Finalisation`, leave the :guilabel:`EOFY Declaration` checkbox unticked, and manually add employees to be finalised." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:319 +msgid "an automatically generated activity for the STP responsible user, and" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Individual EOFY finalisation." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:320 +msgid "a summary of payslips contained in this pay run, auditable from this view." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:567 -msgid "Even if you finalise an employee record partway through the financial year, the ATO will not pre-fill the information into the employee's tax return until after the end of the financial year." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Example of an STP record." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:571 -msgid "Adjustments" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:325 +msgid "Once the STP record is ready to go, click :guilabel:`Submit to ATO`, then read and accept the related terms and conditions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:574 -msgid "Odoo is currently in the process of becoming compliant with STP Phase 2, and the adjustment flows described below do not yet submit data to the ATO." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:329 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:219 +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:333 +msgid "Pay employees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:578 -msgid "Amend finalisation" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:331 +msgid "Once the ATO submission is complete, you can proceed to pay your employees. To facilitate the payment matching process, remember to post the payslip-related journal entries prior to validating a payment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:580 -msgid "If you need to amend YTD amounts for an employee after a finalisation declaration was made, it is still possible to remove the finalisation indicator for that employee. To do so, go to :menuselection:`Payroll --> Reporting --> STP Finalisation`, select the employee, and leave the :guilabel:`Finalisation` checkbox unticked." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:335 +msgid "Although you may decide to pay your employees individually, we recommend creating a batch payment from your payslip batch. To do so, click :guilabel:`Pay` on the payslip batch, and select :guilabel:`ABA Credit Transfer` as the :guilabel:`Payment Method`." msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Amending YTD amounts for an employee." +msgid "Selecting the payment method for a payslip batch." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:588 -msgid "When ready, click :guilabel:`Submit to ATO` to file the finalisation update to the ATO." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:342 +msgid "This has two impacts:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:590 -msgid "Once the correct YTD details are ready for that employee after amendment, finalise that employee again." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:344 +msgid "Marking the batch and its payslips as :guilabel:`Paid`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:594 -msgid "The ATO expects employers to correct errors within 14 days of detection or, if your pay cycle is longer than 14 days (e.g., monthly), by the date you would be due to lodge the next regular pay event. Finalisation amendments can be done through STP up to five years after the end of the financial year." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:345 +msgid "Creating a :guilabel:`Payment Batch` linked to the payslip batch." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:599 -msgid "Finalising and amending finalisation for a single employee can also be useful when rehiring an employee within the same financial year." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Example of a paid batch of payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:603 -msgid "Full file replacements" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:350 +msgid "When receiving the bank statement in Odoo, you can now match the statement line with the batch payment in one click. The payment is not reconciled against the payslip batch, and all individual payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:605 -msgid "An employer can make full file replacements of pay runs to replace the last lodgement sent to the ATO if it turns out to contain significantly inaccurate data." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Steps to reconcile a bank statement with a batch payment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:608 -msgid "To do so, open the last STP submission and click :guilabel:`Replace File`. Then, select which payslips need to be reset by ticking the :guilabel:`Reset Payslip` checkbox." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:358 +msgid "Impact on accounting" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Replace file button." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:360 +msgid "Depending on the employee and contract configuration, the journal entry linked to a payslip will be more or less exhaustive." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:614 -msgid "Resetting payslips does not create new payslips or a new pay run, but instead:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:364 +msgid "For instance, here is the journal entry generated by the employee Marcus Cook configured above." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:616 -msgid "The payslips batch is reset from :guilabel:`Paid` or :guilabel:`Done` to :guilabel:`Confirmed`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 +msgid "Example of a journal entry for a payslip" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:617 -msgid "The status of the reset payslips revert back to :guilabel:`Draft`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:369 +msgid "Once posted, predefined accounts will impact the company's balance sheet (PAYGW, wages, and superannuation liabilities) and profit & loss report (wages and superannuation expenses). In addition, the employee's gross wage and PAYG withholding will update the BAS report for the relevant period (see Tax Grid: W1 and W2). Accounts can be adjusted to the company's chart of accounts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:618 -msgid "The correct payslips remain paid and matched against the original payment." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Example of a BAS report PAYG tax witheld section." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:619 -msgid "A new STP submission is created to replace the former one. For traceability purposes, the former STP submission is not deleted but marked as replaced." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:378 +msgid "Other payroll flows" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:622 -msgid "First, correct the reset payslips and create their draft entry. Once done, the :guilabel:`Submit to ATO` reappears on the payslip batch to process the full file replacement." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:381 +msgid "Paying super contributions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Resubmitting a payslip batch." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:384 +msgid "Odoo has a partnership with a clearing house to process both superannuation payments and data to the right funds in one click, via direct debit. Odoo is currently in the process of becoming compliant with SuperStream, and an announcement will be made as soon as superannuation contributions can be processed via Odoo's payroll solution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:628 -msgid "When ready, submit the pay run to the ATO once again. Please note that full file replacements are only meant as a last resort to amend a substantial amount of erroneous data. When possible, the ATO recommends correcting an incorrect payslips by submitting a correction as part of the next pay run or via update event." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:389 +msgid "Once a quarter (or more frequently, in preparation for `Payday Super `_), you have to process superannuation payments to your employees' super funds. To do so, go to :menuselection:`Payroll --> Reporting --> Super Contributions`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:633 -msgid "Moreover, it is not possible to submit a second full file replacement of the same submission, and a full file replacement can only be done once every 24 hours." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Example of a super file." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:637 -msgid "Zero out YTD values" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:397 +msgid "When ready to pay, add the :guilabel:`Bank Journal` that will be used to pay the super from, then click :guilabel:`Lock` to prevent the contributions from subsequent payslips from being added to that file. Instead, a new Super file will be created." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:639 -msgid "In case of a mid-year change of several key identifiers, YTD values need to be zeroed out, and then re-posted with the updated key identifier." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:401 +msgid "Once the payment has been processed, it can be traced back to the Super file and matched with a bank statement." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:642 -msgid "For the following **company identifiers**, all employees need to be zeroed out:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Example of a super file payment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:644 -msgid "ABN" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:408 +msgid "Terminating employees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:645 -msgid "Branch Code" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:410 +msgid "Employees can be terminated by going to :menuselection:`Payroll --> Reporting --> Terminate Employee`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:646 -msgid "BMS ID" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:413 +msgid "The following fields must be completed:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:648 -msgid "For the following **employee identifiers**, only individual employees can be zeroed out:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:415 +msgid ":guilabel:`Contract End Date`: once the termination is validated, this date will be added to the contract automatically, and mark the contract as :guilabel:`Expired` when the date has been reached." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:650 -msgid "TFN" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:418 +msgid ":guilabel:`Cessation Type Code`: a mandatory field for the ATO's STP reporting." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:651 -msgid "Payroll ID" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:419 +msgid ":guilabel:`Termination Type`: the type of redundancy (genuine or non-genuine) affects the computation of unused annual and long service leave withholding." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:653 -msgid "Before updating any key identifiers, create a new STP submission by going to :menuselection:`Payroll --> Reporting --> Single Touch Payroll` and:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Terminating the contract of an employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:656 -msgid "Change the :guilabel:`Submission Type` to :guilabel:`Update`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:425 +msgid "The balance of unused annual leaves and long service leaves is displayed for reference." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:657 -msgid "Tick the :guilabel:`Zero Out YTD` checkbox." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:427 +msgid "Confirming the termination creates an out-of-cycle payslip with the tag :guilabel:`final pay`. It computes the worked days until the contract end date, in addition to the employee's unused annual and long service leave entitlements." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:658 -msgid "Click :guilabel:`Add a line` to specify which employees." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Example of an out-of-cycle payslip of a terminated employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:659 -msgid "Click :guilabel:`Submit to ATO`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:434 +msgid "Odoo automatically computes unused leave entitlements based on the employee's current hourly rate leave loading (for annual leaves only), and the remaining leave balance. However, these amounts can be manually edited in the :guilabel:`Other Inputs` table if necessary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 -msgid "Creating a new STP submission to zero out YTD values." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:438 +msgid "Employment Termination Payments (ETP) can also be added to the :guilabel:`Other Inputs` table. Odoo has a comprehensive list of excluded and non-excluded ETPs for companies to select from." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:664 -msgid "Once that is done, modify the key identifier(s) to amend." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Adding employment termination payments." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:666 -msgid "Finally, go back to :menuselection:`Payroll --> Reporting --> Single Touch Payroll` to create and submit a new :guilabel:`Update`, this time without ticking the :guilabel:`Zero Out YTD` checkbox. This will notify the ATO that the previously recorded YTD balances are to be adjusted to the new key identifiers." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:445 +msgid "Withholding for unused leaves and ETPs is computed according to the ATO's `Schedule 7 `_ and `Schedule 11 `_ and updated as of 01 July 2024." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:672 -msgid "Payroll links to other apps" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:451 +msgid "Once an employee has been terminated and the last detailed of their employment resolved, you can archive the employee by clicking the :icon:`fa-cog` (:guilabel:`Actions`) icon, then :icon:`oi-archive` :guilabel:`Archive` on the employee's form view." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:675 -msgid "Time Off" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:456 +msgid "Switching from another STP software to Odoo" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:677 -msgid "The :doc:`Time Off app <../../../hr/time_off>` is natively integrated with the Payroll app in Odoo. Different types of leaves will populate payslips based on the concept of *work entries*." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:458 +msgid "When switching from another STP-enabled software to Odoo, you might need to maintain the continuity in the YTD values of your employees. Odoo allows importing employees' YTD values by going to :menuselection:`Payroll --> Configuration --> Settings` and clicking :guilabel:`Import YTD Balances`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:680 -msgid "Go to :menuselection:`Time Off --> Configuration --> Time Off Types`, and for each type, configure the following two fields under the :guilabel:`Payroll` section:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Import YTD balances button." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:683 -msgid ":guilabel:`Work Entry Type`: defines which work entry should be selected on the :guilabel:`Worked Days` table of the payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:466 +msgid "For the ATO to recognize the employee records of your previous software and keep a continuity in Odoo, you must enter the:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:685 -msgid ":guilabel:`Unused Leave Type`: choose between :guilabel:`Annual`, :guilabel:`Long Service`, or :guilabel:`Personal Leave`. If :guilabel:`Personal Leave` is selected, the remaining leave balance for this time off type will not show up as an entitlement at the time of termination. Unused leaves of the type :guilabel:`Annual` will include leave loading if the employee is eligible for it." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:469 +msgid ":guilabel:`Previous BMS ID` (one per database)" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:470 +msgid ":guilabel:`Previous Payroll ID` (one per employee)" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:472 +msgid "Ask your previous software provider if you cannot find its BMS ID or your employees' payroll IDs." msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Configuring time off types." +msgid "Importing YTD balances." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:695 -msgid "Expenses" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:477 +msgid "This will give you the opportunity to add your employees' YTD opening balances in the current fiscal year. The ATO reports on a lot of different types of YTD. These are represented by the 13 following :guilabel:`Salary Rules` in Odoo." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:697 -msgid "The :doc:`Expenses app <../../../finance/expenses>` is also natively integrated with the **Payroll** app in Odoo. First of all, go to :menuselection:`Expenses --> Configuration --> Settings` and enable :guilabel:`Reimburse in Payslip`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Salary rules for an employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:701 -msgid "When an employee on your payroll submits an approved expense to be reimbursed, you can reimburse them using two ways:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:485 +msgid "Let us say that the employee Marcus Cook has been transitioned from another STP-enabled software on September 1. Marcus has received two monthly payslips in his previous software (for July and August). Here are the YTD balances Marcus's company needs to transfer to Odoo:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:704 -msgid "If the expense is to be reimbursed outside of a pay run, click :guilabel:`Post Journal Entries`. The payment must be made manually." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:492 +msgid "YTD category" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:706 -msgid "If the expense is to be reimbursed as part of the next pay run, click :guilabel:`Report in Next Payslip` instead." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:493 +msgid "YTD balance to transfer" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Two ways of reimbursing an expense." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:494 +msgid "Gross (normal attendance)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:712 -msgid "After an expense has been added to the next payslip, you can find it in the :guilabel:`Other Inputs` table. This input type is then computed as an addition to the net salary." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:495 +msgid "$13,045.45" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "The expense reimbursement on a payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:496 +msgid "Gross (overtime)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:718 -msgid "After paying the employee, the payslip's journal item related to the employee's reimbursement is automatically matched against the expense's vendor bill." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:497 +msgid "$1,000" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "The payslip's journal item related to the employee's expense reimbursement." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:498 +msgid "Paid leave" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:725 -msgid "Advanced configurations" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:499 +msgid "$954.55" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:732 -msgid "You can access other input types by going to :menuselection:`Payroll --> Configuration --> Other Input Types`. There are 63 other input types related to Australia. We do not recommend using the other ones as part of your payroll solution, since they cannot be used in the frame of STP. You can archive or delete them." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:500 +msgid "Laundry allowance" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:737 -msgid "On each input type, the following fields are important:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:501 +msgid "$200" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:739 -msgid ":guilabel:`Payment Type` classifies input types in six categories:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:502 +msgid "Total withholding" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:741 -msgid ":guilabel:`Allowance`: a separate amount you pay to your employees in addition to salary and wages. Some of these allowances are mandated by modern awards: laundry, transport, etc." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:503 +msgid "$2,956" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:745 -msgid "`Contact us `_ if you plan to use allowances subject to varied rates of withholding (such as *cents per KM* or *travel allowances*) to see whether Odoo currently covers your business case." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:504 +msgid "Super Guarantee" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:750 -msgid "As of Odoo 18, some allowances such as :guilabel:`Laundry: Allowance for approved uniforms` are managed by two other inputs: one to lodge the amount paid up to the ATO limit, and the other one to lodge the amount exceeding the ATO limit. This is necessary for Odoo to compute PAYGW correctly." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:505 +msgid "$1,610" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:754 -msgid "Some businesses may require to shift the reporting of an allowance from :guilabel:`OTE` to :guilabel:`Salary & Wages` depending on the employee. In this case, you must duplicate and re-configure an existing other input type. For example, :guilabel:`Work-Related Non-Expense` allowance is :guilabel:`OTE` by default." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:507 +msgid "If some YTD balances need to be reported with more granularity to the ATO, you can use the salary rule's inputs." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:759 -msgid ":guilabel:`Deduction`: union fees and child support deductions are considered deductions." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:511 +msgid "For instance, the *Basic Salary* rule can contain six inputs, and three are necessary in our example: regular gross amounts, overtime, and paid leaves. These are all reported differently in terms of YTD amounts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:760 -msgid ":guilabel:`ETP`: employment termination payments. These are either considered excluded or non-excluded (see `ATO's web page on ETP components taxation `_)." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 +msgid "Adding YTD inputs" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:762 -msgid ":guilabel:`Leave`: leave-related other inputs that are not pertaining to a single pay period (lump sum, cashing out leaves while in service, unused leaves, etc.)." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:518 +msgid "The finalized YTD opening balances for Marcus Cook look like the following." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:764 -msgid ":guilabel:`Lump Sum`: return to work and lump sum E (for back payments) fall under this category." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 +msgid "Example of finalized YTD opening balances" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:766 -msgid ":guilabel:`Other`: other payments with their own specific logic." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:523 +msgid "As a result, YTD computations on payslips are based on the employee's opening balances instead of starting from zero." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:768 -msgid ":guilabel:`PAYGW Treatment` affects how Odoo withholds tax for this input type: :guilabel:`Regular`, :guilabel:`No PAYG Withholding`, and :guilabel:`Excess Only` (for allowances)." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:527 +msgid "STP finalisation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:771 -msgid ":guilabel:`Superannuation Treatment`: :guilabel:`OTE`, :guilabel:`Salary & Wages`, and :guilabel:`Not Salary & Wages`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:530 +msgid "Odoo is currently in the process of becoming compliant with STP Phase 2, and the finalisation flows described below do not yet submit data to the ATO." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:773 -msgid ":guilabel:`STP Code`: only visible in :ref:`developer mode `, this field tells Odoo how to report the gross value of this payment to the ATO. We do not recommend changing the value of this field if it was already set by default." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:534 +msgid "EOFY finalisation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:777 -msgid "Grouping other input types by :guilabel:`Payment Type` can help you understand the different scenarios in which these inputs can be used." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:536 +msgid "Employers reporting through STP must make a finalization declaration by 14 July each year. To do so, go to :menuselection:`Payroll --> Reporting --> STP Finalisation`." msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Other input types grouped by payment type." +msgid "EOFY finalisation of an employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:788 -msgid "A *work entry type* is a type of attendance for employees (e.g., attendance, paid leave, overtime, etc.). A few work entry types are created by default in every Australian database." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:542 +msgid "Both active and terminated employees to finalise are displayed." msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Default work entry types for the Australian localization." +msgid "List of employees to finalise." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:794 -msgid "Before using Odoo's payroll solution for Australia, it is recommended you trim work entry types to keep the ones you need only by going to :menuselection:`Payroll --> Configuration --> Work Entry Types`" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:547 +msgid "From the finalisation form view, you can proceed with a final audit of all employees' payslips during the relevant financial year. Once ready, click :guilabel:`Submit to ATO`. When you have made the finalisation declaration, employees will see the status of their payment information change to :guilabel:`Tax ready` on their online income statement after the end of the financial year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:798 -msgid "For each type, make sure to configure the following fields for Australia:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:553 +msgid "Individual finalisation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:800 -msgid ":guilabel:`Is OTE`: determines whether time spent in this category can be considered ordinary time earnings, meaning that the superannuation guarantee rate will apply (e.g., regular attendance, paid leave, etc.)." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:555 +msgid "Odoo also allows you to finalise employees individually during the year. This can be useful when:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:803 -msgid ":guilabel:`Penalty Rate`: used to determine the percentage of penalty that applies to time spent in this category. It is important that you configure the penalty rate that applies in your state or industry according to the type of work (e.g., Saturday rate, Sunday rate, overtime rate, etc.)." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:557 +msgid "one-off payments are made after a first finalisation; and" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:806 -msgid ":guilabel:`STP Code`: only visible in :ref:`developer mode `, this field tells Odoo how to report the time spent in this category to the ATO. We do not recommend changing the value of this field if it was already set by default." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:558 +msgid "finalisation after termination of employment during the year." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:560 +msgid "To proceed with an individual finalisation, go to :menuselection:`Payroll --> Reporting --> STP Finalisation`, leave the :guilabel:`EOFY Declaration` checkbox unticked, and manually add employees to be finalised." msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Configuring a work entry type." +msgid "Individual EOFY finalisation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:814 -msgid "Current limitations" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:567 +msgid "Even if you finalise an employee record partway through the financial year, the ATO will not pre-fill the information into the employee's tax return until after the end of the financial year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:816 -msgid "As of Odoo 18, we do not recommend companies to use the Payroll app for the following business flows:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:571 +msgid "Adjustments" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:819 -msgid "Income stream types: Foreign Employment Income" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:574 +msgid "Odoo is currently in the process of becoming compliant with STP Phase 2, and the adjustment flows described below do not yet submit data to the ATO." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:820 -msgid "Tax treatment category: actors & performers" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:578 +msgid "Amend finalisation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:821 -msgid "Death benefits reporting" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:580 +msgid "If you need to amend YTD amounts for an employee after a finalisation declaration was made, it is still possible to remove the finalisation indicator for that employee. To do so, go to :menuselection:`Payroll --> Reporting --> STP Finalisation`, select the employee, and leave the :guilabel:`Finalisation` checkbox unticked." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:822 -msgid "Reporting obligations for WPN (instead of ABN)" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Amending YTD amounts for an employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:823 -msgid "Allowances subject to a varied rate of withholding (such as *cents per kilometer* allowance and *travel allowances*)" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:588 +msgid "When ready, click :guilabel:`Submit to ATO` to file the finalisation update to the ATO." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:826 -msgid "`Contact us `_ if you would like to make sure whether Odoo fits your payroll requirements in Australia." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:590 +msgid "Once the correct YTD details are ready for that employee after amendment, finalise that employee again." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:832 -msgid "Employment Hero integration" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:594 +msgid "The ATO expects employers to correct errors within 14 days of detection or, if your pay cycle is longer than 14 days (e.g., monthly), by the date you would be due to lodge the next regular pay event. Finalisation amendments can be done through STP up to five years after the end of the financial year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:834 -msgid "If your business is already up and running with Employment Hero, you can use the connector as an alternative payroll solution. The Employment Hero module synchronizes payslip accounting entries (e.g., expenses, social charges, liabilities, taxes) automatically from Employment Hero to Odoo. Payroll administration is still done in Employment Hero; Odoo only records the journal entries." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:599 +msgid "Finalising and amending finalisation for a single employee can also be useful when rehiring an employee within the same financial year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:842 -msgid ":ref:`Install ` the Employment Hero Payroll module (`l10n_employment_hero`)." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:603 +msgid "Full file replacements" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:843 -msgid "Configure the Employment Hero API by going to :menuselection:`Accounting --> Configuration --> Settings`. More fields become visible after ticking the :guilabel:`Enable Employment Hero Integration` checkbox." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:605 +msgid "An employer can make full file replacements of pay runs to replace the last lodgement sent to the ATO if it turns out to contain significantly inaccurate data." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 -msgid "Enabling the Employment Hero integration." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:608 +msgid "To do so, open the last STP submission and click :guilabel:`Replace File`. Then, select which payslips need to be reset by ticking the :guilabel:`Reset Payslip` checkbox." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:850 -msgid "Find the :guilabel:`API Key` in the :guilabel:`My Account` section of the Employment Hero platform." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Replace file button." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 -msgid "Finding the Employment Hero API key under the My Account section." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:614 +msgid "Resetting payslips does not create new payslips or a new pay run, but instead:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:856 -msgid "The :guilabel:`Payroll URL` is pre-filled with `https://keypay.yourpayroll.com.au`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:616 +msgid "The payslips batch is reset from :guilabel:`Paid` or :guilabel:`Done` to :guilabel:`Confirmed`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:859 -msgid "Do not change the pre-filled :guilabel:`Payroll URL`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:617 +msgid "The status of the reset payslips revert back to :guilabel:`Draft`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:861 -msgid "Find the :guilabel:`Business Id` in the Employment Hero URL (e.g., `189241`)." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:618 +msgid "The correct payslips remain paid and matched against the original payment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 -msgid "Finding the Employment Hero Business ID in the URL." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:619 +msgid "A new STP submission is created to replace the former one. For traceability purposes, the former STP submission is not deleted but marked as replaced." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:866 -msgid "Select any Odoo journal as the :guilabel:`Payroll Journal` to post the payslip entries." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:622 +msgid "First, correct the reset payslips and create their draft entry. Once done, the :guilabel:`Submit to ATO` reappears on the payslip batch to process the full file replacement." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:868 -msgid "Configure the tax by going to :menuselection:`Accounting --> Configuration --> Taxes`. Create the necessary taxes for the Employment Hero payslip entries. Fill in the tax code from Employment Hero in the :menuselection:`Matching Employment Hero Tax` field." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Resubmitting a payslip batch." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:873 -msgid "The API explained" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:628 +msgid "When ready, submit the pay run to the ATO once again. Please note that full file replacements are only meant as a last resort to amend a substantial amount of erroneous data. When possible, the ATO recommends correcting an incorrect payslips by submitting a correction as part of the next pay run or via update event." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:875 -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:56 -msgid "The API syncs the journal entries from Employment Hero to Odoo and leaves them in draft mode. The reference includes the Employment Hero payslip entry ID in brackets for the user to easily retrieve the same record in Employment Hero and Odoo." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:633 +msgid "Moreover, it is not possible to submit a second full file replacement of the same submission, and a full file replacement can only be done once every 24 hours." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Employment Hero journal entries in Odoo." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:637 +msgid "Zero out YTD values" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:882 -msgid "By default, the synchronization happens once per week. It is possible to fetch the records manually by going to :menuselection:`Accounting --> Configuration --> Settings` and, in the :guilabel:`Employment Hero`, clicking :guilabel:`Fetch Payruns Manually`." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:639 +msgid "In case of a mid-year change of several key identifiers, YTD values need to be zeroed out, and then re-posted with the updated key identifier." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:886 -msgid "Employment Hero payslip entries also work based on double-entry bookkeeping. The accounts used by Employment Hero are defined in the Payroll settings section." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:642 +msgid "For the following **company identifiers**, all employees need to be zeroed out:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 -msgid "Finding the Employment Hero accounts." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:644 +msgid "ABN" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:892 -msgid "For the API to work, you must create the same accounts as the default accounts of your Employment Hero business (same name and same code) in Odoo. You also need to choose the correct account types in Odoo to generate accurate financial reports." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:645 +msgid "Branch Code" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3 -msgid "Belgium" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:646 +msgid "BMS ID" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:8 -msgid "Understanding the Belgian payslip" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:648 +msgid "For the following **employee identifiers**, only individual employees can be zeroed out:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:13 -msgid "Providing employees with a clear, transparent payslip is essential for compliance and employee satisfaction. This guide explains how to interpret a Belgian payslip, detailing key components that impact salary calculations and deductions." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:650 +msgid "TFN" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:20 -msgid "The first section of the payslip contains the employee's general details. It is crucial to verify the accuracy of the civil status and the number of dependents, as these factors influence tax calculations. Employers can ensure updates are made through their internal salary configurator or employee profile management systems." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:651 +msgid "Payroll ID" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "How to read a payslip - General Information." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:653 +msgid "Before updating any key identifiers, create a new STP submission by going to :menuselection:`Payroll --> Reporting --> Single Touch Payroll` and:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:31 -msgid "This section outlines time-off applications and their impact on salary. The base salary typically remains constant unless unpaid leave is taken. If an employee has taken unpaid leave, parental leave, or any unexpected absence, their salary will reflect the corresponding deductions." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:656 +msgid "Change the :guilabel:`Submission Type` to :guilabel:`Update`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "How to read a payslip - Work Entries." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:657 +msgid "Tick the :guilabel:`Zero Out YTD` checkbox." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:39 -msgid "Payroll calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:658 +msgid "Click :guilabel:`Add a line` to specify which employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:41 -msgid "The core of the payslip details various salary components, deductions, and benefits. Below are the primary elements:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:659 +msgid "Click :guilabel:`Submit to ATO`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:44 -msgid "**Benefits in Kind**: If applicable, benefits in kind (such as a mobile or internet subscription or a laptop) are subject to taxation and impact net remuneration." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 +msgid "Creating a new STP submission to zero out YTD values." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:47 -msgid "When a company car is provided for personal use, a taxable benefit (ATN) is added to the employee's salary. This is determined by:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:664 +msgid "Once that is done, modify the key identifier(s) to amend." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:50 -msgid "The catalog value and age of the vehicle" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:666 +msgid "Finally, go back to :menuselection:`Payroll --> Reporting --> Single Touch Payroll` to create and submit a new :guilabel:`Update`, this time without ticking the :guilabel:`Zero Out YTD` checkbox. This will notify the ATO that the previously recorded YTD balances are to be adjusted to the new key identifiers." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:51 -msgid "The vehicle's CO2 emissions" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:672 +msgid "Payroll links to other apps" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:53 -msgid "This benefit is subject to withholding tax and will be adjusted later in the payroll process." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:675 +msgid "Time Off" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:54 -msgid "**Social Security contributions**: A mandatory 13.07% deduction from gross salary is allocated to the National Social Security Office (ONSS). This includes:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:677 +msgid "The :doc:`Time Off app <../../../hr/time_off>` is natively integrated with the Payroll app in Odoo. Different types of leaves will populate payslips based on the concept of *work entries*." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:57 -msgid "Pensions: 7.5%" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:680 +msgid "Go to :menuselection:`Time Off --> Configuration --> Time Off Types`, and for each type, configure the following two fields under the :guilabel:`Payroll` section:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:58 -msgid "Health Insurance for Care: 3.55%" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:683 +msgid ":guilabel:`Work Entry Type`: defines which work entry should be selected on the :guilabel:`Worked Days` table of the payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:59 -msgid "Health Insurance for Benefits: 1.15%" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:685 +msgid ":guilabel:`Unused Leave Type`: choose between :guilabel:`Annual`, :guilabel:`Long Service`, or :guilabel:`Personal Leave`. If :guilabel:`Personal Leave` is selected, the remaining leave balance for this time off type will not show up as an entitlement at the time of termination. Unused leaves of the type :guilabel:`Annual` will include leave loading if the employee is eligible for it." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:60 -msgid "Unemployment: 0.87%" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Configuring time off types." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:62 -msgid "Additionally, the employer contributes on average 25% of the employer's contributions to the National Social Security Office." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:695 +msgid "Expenses" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:64 -msgid "**Employment bonus**: A reduction in employee contributions based on gross salary, which is phased out if the salary exceeds a specific threshold." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:697 +msgid "The :doc:`Expenses app <../../../finance/expenses>` is also natively integrated with the **Payroll** app in Odoo. First of all, go to :menuselection:`Expenses --> Configuration --> Settings` and enable :guilabel:`Reimburse in Payslip`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:68 -msgid "`More info on job bonuses `_" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:701 +msgid "When an employee on your payroll submits an approved expense to be reimbursed, you can reimburse them using two ways:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:70 -msgid "**Withholding taxes**: Withholding tax rates are revised annually by the `SPF Finances `_." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:704 +msgid "If the expense is to be reimbursed outside of a pay run, click :guilabel:`Post Journal Entries`. The payment must be made manually." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:73 -msgid "The tax amount is influenced by:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:706 +msgid "If the expense is to be reimbursed as part of the next pay run, click :guilabel:`Report in Next Payslip` instead." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:75 -msgid "Gross salary" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Two ways of reimbursing an expense." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:76 -msgid "Marital status (married, legally cohabiting, or single)" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:712 +msgid "After an expense has been added to the next payslip, you can find it in the :guilabel:`Other Inputs` table. This input type is then computed as an addition to the net salary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:77 -msgid "Household composition (children or other dependents)" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "The expense reimbursement on a payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:79 -msgid "This serves as an advance payment on professional income tax." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:718 +msgid "After paying the employee, the payslip's journal item related to the employee's reimbursement is automatically matched against the expense's vendor bill." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:80 -msgid "**Reduction in withholding tax**: A reduction based on gross salary, which is ignored if salary surpasses a specific amount." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "The payslip's journal item related to the employee's expense reimbursement." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:82 -msgid "**Special Social Security contribution**: A household income-based tax applicable to all employees covered by social security." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:725 +msgid "Advanced configurations" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:84 -msgid "**Meal voucher deduction**: Employees receive meal vouchers valued for instance at €8 per workday, where:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:732 +msgid "You can access other input types by going to :menuselection:`Payroll --> Configuration --> Other Input Types`. There are 63 other input types related to Australia. We do not recommend using the other ones as part of your payroll solution, since they cannot be used in the frame of STP. You can archive or delete them." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:87 -msgid "The employer contributes €6.91" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:737 +msgid "On each input type, the following fields are important:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:88 -msgid "The employee contributes €1.09" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:739 +msgid ":guilabel:`Payment Type` classifies input types in six categories:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:91 -msgid "5 worked days -> deduction of €5.45 (:math:`5\\times\\text{€}1.09`)" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:741 +msgid ":guilabel:`Allowance`: a separate amount you pay to your employees in addition to salary and wages. Some of these allowances are mandated by modern awards: laundry, transport, etc." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:92 -msgid "22 worked days -> deduction of €23.98 (:math:`22\\times\\text{€}1.09`)" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:745 +msgid "`Contact us `_ if you plan to use allowances subject to varied rates of withholding (such as *cents per KM* or *travel allowances*) to see whether Odoo currently covers your business case." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:94 -msgid "Variations in this deduction impact monthly net salary." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:750 +msgid "As of Odoo 18, some allowances such as :guilabel:`Laundry: Allowance for approved uniforms` are managed by two other inputs: one to lodge the amount paid up to the ATO limit, and the other one to lodge the amount exceeding the ATO limit. This is necessary for Odoo to compute PAYGW correctly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:95 -msgid "**Representation fees**: An optional net salary component, allocated in two parts:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:754 +msgid "Some businesses may require to shift the reporting of an allowance from :guilabel:`OTE` to :guilabel:`Salary & Wages` depending on the employee. In this case, you must duplicate and re-configure an existing other input type. For example, :guilabel:`Work-Related Non-Expense` allowance is :guilabel:`OTE` by default." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:97 -msgid "A fixed portion, independent of working hours" -msgstr "" - -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:98 -msgid "A prorated portion, adjusted for part-time schedules" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:759 +msgid ":guilabel:`Deduction`: union fees and child support deductions are considered deductions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:99 -msgid "**Net salary**: The final amount deposited into the employee's bank account after deductions." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:760 +msgid ":guilabel:`ETP`: employment termination payments. These are either considered excluded or non-excluded (see `ATO's web page on ETP components taxation `_)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:104 -msgid "December pay" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:762 +msgid ":guilabel:`Leave`: leave-related other inputs that are not pertaining to a single pay period (lump sum, cashing out leaves while in service, unused leaves, etc.)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:107 -msgid "Why a December settlement?" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:764 +msgid ":guilabel:`Lump Sum`: return to work and lump sum E (for back payments) fall under this category." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:109 -msgid "An employer must pay a vacation allowance to an employee in December under two conditions:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:766 +msgid ":guilabel:`Other`: other payments with their own specific logic." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:111 -msgid "If the employee has reduced their working hours during the vacation year." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:768 +msgid ":guilabel:`PAYGW Treatment` affects how Odoo withholds tax for this input type: :guilabel:`Regular`, :guilabel:`No PAYG Withholding`, and :guilabel:`Excess Only` (for allowances)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:112 -msgid "If the employee is unable to take all their vacation days before the end of the year." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:771 +msgid ":guilabel:`Superannuation Treatment`: :guilabel:`OTE`, :guilabel:`Salary & Wages`, and :guilabel:`Not Salary & Wages`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:114 -msgid "In principle, employers must ensure that employees take their annual vacation before December 31. However, certain circumstances may prevent employees from using all their vacation days. In these cases, the employer must pay the simple vacation allowance for unused days before the end of the year. Additionally, if the employee has not received the double vacation allowance earlier in the year (typically in May or June), they are entitled to receive it." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:773 +msgid ":guilabel:`STP Code`: only visible in :ref:`developer mode `, this field tells Odoo how to report the gross value of this payment to the ATO. We do not recommend changing the value of this field if it was already set by default." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:121 -msgid "Reduction of working hours" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:777 +msgid "Grouping other input types by :guilabel:`Payment Type` can help you understand the different scenarios in which these inputs can be used." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:123 -msgid "When an employee reduces their average working hours with the same employer, the employer must pay the vacation allowance in December of the year in which the reduction occurs, as if the employee had left the company." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Other input types grouped by payment type." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:127 -msgid "**Possible scenarios**:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:788 +msgid "A *work entry type* is a type of attendance for employees (e.g., attendance, paid leave, overtime, etc.). A few work entry types are created by default in every Australian database." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:129 -msgid "Transition to part-time work." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Default work entry types for the Australian localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:130 -msgid "Partial career break." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:794 +msgid "Before using Odoo's payroll solution for Australia, it is recommended you trim work entry types to keep the ones you need only by going to :menuselection:`Payroll --> Configuration --> Work Entry Types`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:131 -msgid "Thematic leave on a part-time basis." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:798 +msgid "For each type, make sure to configure the following fields for Australia:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:132 -msgid "Partial return to work after a full incapacity period." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:800 +msgid ":guilabel:`Is OTE`: determines whether time spent in this category can be considered ordinary time earnings, meaning that the superannuation guarantee rate will apply (e.g., regular attendance, paid leave, etc.)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:134 -msgid "The settlement is calculated based on the previous vacation year's earnings and includes:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:803 +msgid ":guilabel:`Penalty Rate`: used to determine the percentage of penalty that applies to time spent in this category. It is important that you configure the penalty rate that applies in your state or industry according to the type of work (e.g., Saturday rate, Sunday rate, overtime rate, etc.)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:136 -msgid "**Simple vacation allowance**: 7.67% of the yearly gross salary from the previous year, including any fictitious salary for assimilated interruption days, minus the simple vacation allowance already paid during the vacation year." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:806 +msgid ":guilabel:`STP Code`: only visible in :ref:`developer mode `, this field tells Odoo how to report the time spent in this category to the ATO. We do not recommend changing the value of this field if it was already set by default." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:139 -msgid "**Double vacation allowance**: 7.67% of the yearly gross salary from the previous year, including any fictitious salary for assimilated interruption days, minus the double vacation allowance already paid during the vacation year." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Configuring a work entry type." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:143 -msgid "If all vacation days have been taken before the reduction in working hours, no additional calculation is required." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:814 +msgid "Current limitations" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:147 -msgid "Inability to use vacation days" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:816 +msgid "As of Odoo 18, we do not recommend companies to use the Payroll app for the following business flows:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:149 -msgid "As a general rule, all vacation days must be used within the vacation year. However, if an employee is unable to take all their vacation due to force majeure or specific suspension reasons, the employer must pay the following by December 31:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:819 +msgid "Income stream types: Foreign Employment Income" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:153 -msgid "**Simple vacation allowance** for unused days, based on the December salary." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:820 +msgid "Tax treatment category: actors & performers" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:154 -msgid "**Double vacation allowance** if it has not yet been paid, based on the December salary." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:821 +msgid "Death benefits reporting" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:156 -msgid "**Eligible reasons include**:" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:822 +msgid "Reporting obligations for WPN (instead of ABN)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:158 -msgid "Common illness or accident." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:823 +msgid "Allowances subject to a varied rate of withholding (such as *cents per kilometer* allowance and *travel allowances*)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:159 -msgid "Work accident or occupational disease." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:826 +msgid "`Contact us `_ if you would like to make sure whether Odoo fits your payroll requirements in Australia." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:160 -msgid "Maternity leave, paternity leave (converted maternity leave), prophylactic leave." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:832 +msgid "Employment Hero integration" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:161 -msgid "Birth, adoption, or reception leave." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:834 +msgid "If your business is already up and running with Employment Hero, you can use the connector as an alternative payroll solution. The Employment Hero module synchronizes payslip accounting entries (e.g., expenses, social charges, liabilities, taxes) automatically from Employment Hero to Odoo. Payroll administration is still done in Employment Hero; Odoo only records the journal entries." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:162 -msgid "Parental leave or protective maternity leave measures." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:842 +msgid ":ref:`Install ` the Employment Hero Payroll module (`l10n_employment_hero`)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:165 -msgid "New rule (effective end of 2024)" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:843 +msgid "Configure the Employment Hero API by going to :menuselection:`Accounting --> Configuration --> Settings`. More fields become visible after ticking the :guilabel:`Enable Employment Hero Integration` checkbox." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:167 -msgid "Employees unable to take vacation due to the above reasons (except force majeure or protective maternity leave measures) can carry over unused days for up to 24 months. Since the vacation allowance is already paid in December of the vacation year, no additional payment will be made when the carried-over days are used." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 +msgid "Enabling the Employment Hero integration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:173 -msgid "Employer payment responsibilities" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:850 +msgid "Find the :guilabel:`API Key` in the :guilabel:`My Account` section of the Employment Hero platform." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:175 -msgid "The employer must pay any outstanding simple vacation allowance based on 7.67% of the gross salary from the previous year. However, an exit vacation allowance based on the current year's gross salary is not due." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 +msgid "Finding the Employment Hero API key under the My Account section." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:179 -msgid "If an employee reduces their working hours and continues in the same role the following year, an additional vacation allowance calculation may be required in December." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:856 +msgid "The :guilabel:`Payroll URL` is pre-filled with `https://keypay.yourpayroll.com.au`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:183 -msgid "Example calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:859 +msgid "Do not change the pre-filled :guilabel:`Payroll URL`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:185 -msgid "In 2013, an employee works full-time (5 days per week)." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:861 +msgid "Find the :guilabel:`Business Id` in the Employment Hero URL (e.g., `189241`)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:186 -msgid "In 2014, the employee works full-time until June 30, then switches to part-time (5 half-days per week)." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:0 +msgid "Finding the Employment Hero Business ID in the URL." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:188 -msgid "The employee takes vacation in August 2014 under the new part-time regime (20 half-days over 4 weeks)." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:866 +msgid "Select any Odoo journal as the :guilabel:`Payroll Journal` to post the payslip entries." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:190 -msgid "They receive a simple vacation allowance for 20 half-days and a double vacation allowance equivalent to 92% of their monthly salary." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:868 +msgid "Configure the tax by going to :menuselection:`Accounting --> Configuration --> Taxes`. Create the necessary taxes for the Employment Hero payslip entries. Fill in the tax code from Employment Hero in the :menuselection:`Matching Employment Hero Tax` field." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:192 -msgid "In December 2014, the employee receives additional simple (7.67%) and double (7.67%) vacation allowances based on 2013's gross salary, minus previously paid amounts." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:873 +msgid "The API explained" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:194 -msgid "In 2015, if the employee continues part-time, they receive vacation based on part-time hours plus 5 full-time vacation days from the 2014 vacation year." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:875 +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:56 +msgid "The API syncs the journal entries from Employment Hero to Odoo and leaves them in draft mode. The reference includes the Employment Hero payslip entry ID in brackets for the user to easily retrieve the same record in Employment Hero and Odoo." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:196 -msgid "A second settlement in December 2015 includes additional simple (7.67%) and double (7.67%) vacation allowances based on the 2014 gross salary, minus previously paid amounts." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Employment Hero journal entries in Odoo." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:200 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1650 -msgid "How to do it in Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:882 +msgid "By default, the synchronization happens once per week. It is possible to fetch the records manually by going to :menuselection:`Accounting --> Configuration --> Settings` and, in the :guilabel:`Employment Hero`, clicking :guilabel:`Fetch Payruns Manually`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:202 -msgid "On a classic :doc:`payslip <../payslips>` issued in December, press the :guilabel:`Compute December Holiday Pay` button to open a configuration wizard." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:886 +msgid "Employment Hero payslip entries also work based on double-entry bookkeeping. The accounts used by Employment Hero are defined in the Payroll settings section." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:205 -msgid "Based on the allocated and requested time off, the :guilabel:`Simple Holiday Pay N-1` and :guilabel:`Double Holiday Pay N-1` for the December payslip are computed (and editable for manual encoding). Click :guilabel:`Validate` to confirm." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:-1 +msgid "Finding the Employment Hero accounts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "December Pay Amount." +#: ../../content/applications/hr/payroll/payroll_localizations/australia.rst:892 +msgid "For the API to work, you must create the same accounts as the default accounts of your Employment Hero business (same name and same code) in Odoo. You also need to choose the correct account types in Odoo to generate accurate financial reports." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:212 -msgid "After validation, two additional inputs are stored on the payslip, and the payslip is re-computed to take those new remunerations into account." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3 +msgid "Belgium" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:215 -msgid "The simple holiday pay is included into the gross remuneration." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:8 +msgid "Understanding the Belgian payslip" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "December Pay Simple." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:13 +msgid "Providing employees with a clear, transparent payslip is essential for compliance and employee satisfaction. This guide explains how to interpret a Belgian payslip, detailing key components that impact salary calculations and deductions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:220 -msgid "The double holiday pay is computed separately and included into the net amount." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:20 +msgid "The first section of the payslip contains the employee's general details. It is crucial to verify the accuracy of the civil status and the number of dependents, as these factors influence tax calculations. Employers can ensure updates are made through their internal salary configurator or employee profile management systems." msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "December Pay Double." +msgid "How to read a payslip - General Information." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:228 -msgid "Departure: holiday attests" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:31 +msgid "This section outlines time-off applications and their impact on salary. The base salary typically remains constant unless unpaid leave is taken. If an employee has taken unpaid leave, parental leave, or any unexpected absence, their salary will reflect the corresponding deductions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:233 -msgid "In Belgium, when an employee leaves a company, the employer is required to provide vacation attestations. These documents help the new employer determine the employee's vacation entitlements and any vacation pay due. Odoo facilitates the automatic generation of these attestations based on payroll and time-off data." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "How to read a payslip - Work Entries." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:239 -msgid "Types of attestations" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:39 +msgid "Payroll calculation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:241 -msgid "Odoo generates two types of vacation attestations:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:41 +msgid "The core of the payslip details various salary components, deductions, and benefits. Below are the primary elements:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:243 -msgid "**For the previous year (N-1)**: If the employee has not yet taken all the vacation days from the previous year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:44 +msgid "**Benefits in Kind**: If applicable, benefits in kind (such as a mobile or internet subscription or a laptop) are subject to taxation and impact net remuneration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:245 -msgid "**For the current year (N)**: Covering the vacation rights accrued in the year of departure." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:47 +msgid "When a company car is provided for personal use, a taxable benefit (ATN) is added to the employee's salary. This is determined by:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:247 -msgid "Each attestation includes details such as:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:50 +msgid "The catalog value and age of the vehicle" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:249 -msgid "The period the employee was employed." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:51 +msgid "The vehicle's CO2 emissions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:250 -msgid "Agreed working time and any modifications." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:53 +msgid "This benefit is subject to withholding tax and will be adjusted later in the payroll process." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:251 -msgid "Gross amounts of single and double vacation pay paid." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:54 +msgid "**Social Security contributions**: A mandatory 13.07% deduction from gross salary is allocated to the National Social Security Office (ONSS). This includes:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:252 -msgid "Social security contributions paid by the employer." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:57 +msgid "Pensions: 7.5%" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:253 -msgid "Number of vacation days already taken." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:58 +msgid "Health Insurance for Care: 3.55%" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:254 -msgid "Additional (European) vacation pay and days." -msgstr "" - -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:257 -msgid "Calculation logic in Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:59 +msgid "Health Insurance for Benefits: 1.15%" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:259 -msgid "Odoo computes the attestations based on payroll and leave data. The main calculations include:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:60 +msgid "Unemployment: 0.87%" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:261 -msgid "**Retrieving payroll and leave records**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:62 +msgid "Additionally, the employer contributes on average 25% of the employer's contributions to the National Social Security Office." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:263 -msgid "The system identifies the employee's payroll records for the current and previous years." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:64 +msgid "**Employment bonus**: A reduction in employee contributions based on gross salary, which is phased out if the salary exceeds a specific threshold." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:264 -msgid "It retrieves validated leave requests and allocations." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:68 +msgid "`More info on job bonuses `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:266 -msgid "**Computing gross remuneration**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:70 +msgid "**Withholding taxes**: Withholding tax rates are revised annually by the `SPF Finances `_." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:268 -msgid "The gross annual salary for both the current and previous years is computed from payroll records." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:73 +msgid "The tax amount is influenced by:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:270 -msgid "The average monthly salary is calculated for unpaid leave adjustments." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:75 +msgid "Gross salary" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:272 -msgid "**Time-off calculations**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:76 +msgid "Marital status (married, legally cohabiting, or single)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:274 -msgid "The number of vacation days taken and allocated in the current year is determined." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:77 +msgid "Household composition (children or other dependents)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:275 -msgid "Unpaid leave days are accounted for separately." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:79 +msgid "This serves as an advance payment on professional income tax." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:277 -msgid "**Fictitious remuneration calculation**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:80 +msgid "**Reduction in withholding tax**: A reduction based on gross salary, which is ignored if salary surpasses a specific amount." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:279 -msgid "If unpaid leave was taken, Odoo computes a fictitious remuneration adjustment using the formula:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:82 +msgid "**Special Social Security contribution**: A household income-based tax applicable to all employees covered by social security." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:282 -msgid "\\text{Fictitious Remuneration} = (\\text{Unpaid Leave Days} \\times\n" -"\\text{Average Monthly Salary} \\times 3) \\div (13 \\times 5)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:84 +msgid "**Meal voucher deduction**: Employees receive meal vouchers valued for instance at €8 per workday, where:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:288 -msgid "**Generating the final attestation**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:87 +msgid "The employer contributes €6.91" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:290 -msgid "Odoo creates a payroll entry reflecting the vacation pay due." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:88 +msgid "The employee contributes €1.09" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:291 -msgid "The attestation document is generated and can be printed or exported." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:91 +msgid "5 worked days -> deduction of €5.45 (:math:`5\\times\\text{€}1.09`)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:293 -msgid "Two payslips are created:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:92 +msgid "22 worked days -> deduction of €23.98 (:math:`22\\times\\text{€}1.09`)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:295 -msgid "**Payslip for the current year** (`termination_payslip_n`)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:94 +msgid "Variations in this deduction impact monthly net salary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:297 -msgid "This payslip covers the employee's last salary period in the year of termination." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:95 +msgid "**Representation fees**: An optional net salary component, allocated in two parts:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:299 -msgid "**Payslip for the previous year** (`termination_payslip_n1`)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:97 +msgid "A fixed portion, independent of working hours" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:301 -msgid "The one accounts the amount of money converted from the untaken time off of previous year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:98 +msgid "A prorated portion, adjusted for part-time schedules" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:303 -msgid "Each payslip is generated using the appropriate payroll structure, ensuring correct calculations for all entitlements and deductions." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:99 +msgid "**Net salary**: The final amount deposited into the employee's bank account after deductions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:306 -msgid "Before computing the final payment, the system gathers necessary payroll data:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:104 +msgid "December pay" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:308 -msgid "**Annual gross salary calculation**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:107 +msgid "Why a December settlement?" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:310 -msgid "To estimate the employee's **annual gross salary**, the system looks for the most recent validated monthly payslip. If a payslip is found, the **gross salary** from that payslip is multiplied by 12 to get an annual estimate. If no payslip exists, the annual gross salary is set to **zero**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:109 +msgid "An employer must pay a vacation allowance to an employee in December under two conditions:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:315 -msgid "**European leave recovery**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:111 +msgid "If the employee has reduced their working hours during the vacation year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:317 -msgid "The system retrieves all **European leave days (LEAVE216)** taken by the employee during the current year. It then calculates the **total amount paid for these leaves** and determines how much should be deducted." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:112 +msgid "If the employee is unable to take all their vacation days before the end of the year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:321 -msgid "The deduction follows these principles:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:114 +msgid "In principle, employers must ensure that employees take their annual vacation before December 31. However, certain circumstances may prevent employees from using all their vacation days. In these cases, the employer must pay the simple vacation allowance for unused days before the end of the year. Additionally, if the employee has not received the double vacation allowance earlier in the year (typically in May or June), they are entitled to receive it." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:323 -msgid "If an employee has taken **European holidays (additional vacation days)**, the amount paid in advance must be recovered." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:121 +msgid "Reduction of working hours" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:325 -msgid "The recovery is either:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:123 +msgid "When an employee reduces their average working hours with the same employer, the employer must pay the vacation allowance in December of the year in which the reduction occurs, as if the employee had left the company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:327 -msgid "Deducted from **the double vacation pay (85%)** for the next year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:127 +msgid "**Possible scenarios**:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:328 -msgid "Or, if the employee leaves, deducted from the final termination payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:129 +msgid "Transition to part-time work." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:330 -msgid "If leave has been taken, the **termination certificate** must specify:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:130 +msgid "Partial career break." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:332 -msgid "The **number of European leave days** already granted." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:131 +msgid "Thematic leave on a part-time basis." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:333 -msgid "The **gross allowance** corresponding to these days." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:132 +msgid "Partial return to work after a full incapacity period." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:335 -msgid "To ensure fairness, the system first checks whether a deduction has already been applied in the **double vacation pay**. If so, only the remaining amount is deducted from the final payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:134 +msgid "The settlement is calculated based on the previous vacation year's earnings and includes:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:338 -msgid "Once the required values are determined, they are recorded in the payslip as **additional payroll inputs**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:136 +msgid "**Simple vacation allowance**: 7.67% of the yearly gross salary from the previous year, including any fictitious salary for assimilated interruption days, minus the simple vacation allowance already paid during the vacation year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:341 -msgid "**Gross salary reference**: Includes the final salary amount plus any fictitious remuneration." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:139 +msgid "**Double vacation allowance**: 7.67% of the yearly gross salary from the previous year, including any fictitious salary for assimilated interruption days, minus the double vacation allowance already paid during the vacation year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:342 -msgid "**European leave deduction**: Deducts the previously paid European leave amounts." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:143 +msgid "If all vacation days have been taken before the reduction in working hours, no additional calculation is required." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:343 -msgid "**Other inputs**: Allocates time off taken, taxable amounts, and any outstanding allocations." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:147 +msgid "Inability to use vacation days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:345 -msgid "After setting these values, the system **computes the payslip** to ensure all deductions and payments are correctly applied." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:149 +msgid "As a general rule, all vacation days must be used within the vacation year. However, if an employee is unable to take all their vacation due to force majeure or specific suspension reasons, the employer must pay the following by December 31:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:348 -msgid "This process ensures that the final **termination payslip** takes into account all salary components, including **annual gross pay, European leave recovery, and any unpaid entitlements**. Odoo retrieves past payslips and time-off records to ensure compliance with **Belgian payroll regulations**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:153 +msgid "**Simple vacation allowance** for unused days, based on the December salary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:353 -msgid "By automating this process, Odoo minimizes manual intervention, reducing errors and ensuring employees receive the correct termination payments." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:154 +msgid "**Double vacation allowance** if it has not yet been paid, based on the December salary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:357 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:609 -msgid "How does it work in Odoo?" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:156 +msgid "**Eligible reasons include**:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:359 -msgid "In Odoo, to access the holiday attests process, go to the employee form view and click on :icon:`fa-cog` :guilabel:`(Action)` then :guilabel:`Departure: Holiday Attests` or navigate to :menuselection:`Payroll --> Reporting --> Departure: Holiday Attests`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:158 +msgid "Common illness or accident." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:363 -msgid "In the wizard that appears, you can see all the payslips over the current and last year, the time off requests and allocations. You can also encode the unpaid time off you would like to declare on that holiday attest." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:159 +msgid "Work accident or occupational disease." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:367 -msgid "Once you're ready, click the :guilabel:`Validate & Compute holiday attests` button. Two payslips are generated for each considered period (N and N-1)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:160 +msgid "Maternity leave, paternity leave (converted maternity leave), prophylactic leave." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:370 -msgid "Once validated, two :file:`.pdf` documents are generated. One **classic payslip** and one **holiday attests** for the future employer." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:161 +msgid "Birth, adoption, or reception leave." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 -msgid "Departure Holiday Attests Payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:162 +msgid "Parental leave or protective maternity leave measures." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 -msgid "Departure Holiday Attests Time off." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:165 +msgid "New rule (effective end of 2024)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 -msgid "Departure Holiday Attests Unpaid." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:167 +msgid "Employees unable to take vacation due to the above reasons (except force majeure or protective maternity leave measures) can carry over unused days for up to 24 months. Since the vacation allowance is already paid in December of the vacation year, no additional payment will be made when the carried-over days are used." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:387 -msgid "In our example, the employee also took one European time off during the N-year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:173 +msgid "Employer payment responsibilities" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:389 -msgid "For year N-1, you can see that all legal time off were taken." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:175 +msgid "The employer must pay any outstanding simple vacation allowance based on 7.67% of the gross salary from the previous year. However, an exit vacation allowance based on the current year's gross salary is not due." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 -msgid "Departure Holiday Attests Attest N-1." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:179 +msgid "If an employee reduces their working hours and continues in the same role the following year, an additional vacation allowance calculation may be required in December." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 -msgid "Departure Holiday Attests Payslip N-1." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:183 +msgid "Example calculation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:397 -msgid "For year N, you can also see the number off additional time off (European) and already taken legal time off are taken into account as well." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:185 +msgid "In 2013, an employee works full-time (5 days per week)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 -msgid "Departure Holiday Attests Attest N." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:186 +msgid "In 2014, the employee works full-time until June 30, then switches to part-time (5 half-days per week)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 -msgid "Departure Holiday Attests Payslip N." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:188 +msgid "The employee takes vacation in August 2014 under the new part-time regime (20 half-days over 4 weeks)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:407 -msgid "Important Notes" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:190 +msgid "They receive a simple vacation allowance for 20 half-days and a double vacation allowance equivalent to 92% of their monthly salary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:409 -msgid "By using Odoo's automated attestation generation, companies can ensure compliance with Belgian labor laws while reducing manual administrative work." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:192 +msgid "In December 2014, the employee receives additional simple (7.67%) and double (7.67%) vacation allowances based on 2013's gross salary, minus previously paid amounts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:413 -msgid "The feature is only available for companies registered in Belgium." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:194 +msgid "In 2015, if the employee continues part-time, they receive vacation based on part-time hours plus 5 full-time vacation days from the 2014 vacation year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:414 -msgid "If the notice period is not set for an employee, Odoo will prompt for this information." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:196 +msgid "A second settlement in December 2015 includes additional simple (7.67%) and double (7.67%) vacation allowances based on the 2014 gross salary, minus previously paid amounts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:415 -msgid "Employers must ensure vacation attestations are provided before the employee needs to submit them to their new employer or the ONEM." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:200 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1650 +msgid "How to do it in Odoo" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:421 -msgid "Departure: notice period & termination fees" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:202 +msgid "On a classic :doc:`payslip <../payslips>` issued in December, press the :guilabel:`Compute December Holiday Pay` button to open a configuration wizard." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:423 -msgid "This documentation explains how the employee departure process works in the application, focusing on the notice period calculation and severance pay when the employee does not serve their notice period." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:205 +msgid "Based on the allocated and requested time off, the :guilabel:`Simple Holiday Pay N-1` and :guilabel:`Double Holiday Pay N-1` for the December payslip are computed (and editable for manual encoding). Click :guilabel:`Validate` to confirm." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:430 -msgid "This module helps manage employee departures by determining the correct notice period based on seniority, departure reasons, and specific country regulations (Belgium). It also calculates severance pay when the employee does not work during their notice period." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "December Pay Amount." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:435 -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:78 -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:124 -msgid "Key features" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:212 +msgid "After validation, two additional inputs are stored on the payslip, and the payslip is re-computed to take those new remunerations into account." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:437 -msgid "Automatic calculation of notice period start and end dates." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:215 +msgid "The simple holiday pay is included into the gross remuneration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:438 -msgid "Consideration of public holidays and company-specific schedules." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "December Pay Simple." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:439 -msgid "Calculation of severance pay based on company policies and government rules." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:220 +msgid "The double holiday pay is computed separately and included into the net amount." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:440 -msgid "Generation of a final payslip including termination fees." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "December Pay Double." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:443 -msgid "Notice period calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:228 +msgid "Departure: holiday attests" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:445 -msgid "The notice period depends on several factors:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:233 +msgid "In Belgium, when an employee leaves a company, the employer is required to provide vacation attestations. These documents help the new employer determine the employee's vacation entitlements and any vacation pay due. Odoo facilitates the automatic generation of these attestations based on payroll and time-off data." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:447 -msgid "The employee's seniority in the company." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:239 +msgid "Types of attestations" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:448 -msgid "The reason for departure (resignation, dismissal, retirement, etc.)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:241 +msgid "Odoo generates two types of vacation attestations:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:449 -msgid "Whether the employee works during the notice period or not." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:243 +msgid "**For the previous year (N-1)**: If the employee has not yet taken all the vacation days from the previous year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:450 -msgid "The salary level before January 1, 2014 (for some cases)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:245 +msgid "**For the current year (N)**: Covering the vacation rights accrued in the year of departure." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:452 -msgid "The notice period starts on the first Monday after the departure date unless a specific rule applies (e.g., a mandatory waiting period of three days for certain dismissals)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:247 +msgid "Each attestation includes details such as:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:456 -msgid "Notice duration rules" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:249 +msgid "The period the employee was employed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:458 -msgid "The following table shows the duration of the notice period based on the length of service:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:250 +msgid "Agreed working time and any modifications." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:461 -msgid "For resigned employees" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:251 +msgid "Gross amounts of single and double vacation pay paid." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:464 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:493 -msgid "Seniority (months)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:252 +msgid "Social security contributions paid by the employer." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:464 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:493 -msgid "Notice Period (weeks)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:253 +msgid "Number of vacation days already taken." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:466 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:495 -msgid "0 - 3" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:254 +msgid "Additional (European) vacation pay and days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:466 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:495 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1244 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1300 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1564 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1620 -msgid "1" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:257 +msgid "Calculation logic in Odoo" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:468 -msgid "3 - 6" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:259 +msgid "Odoo computes the attestations based on payroll and leave data. The main calculations include:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:468 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1246 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1302 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1566 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1622 -msgid "2" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:261 +msgid "**Retrieving payroll and leave records**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:470 -msgid "6 - 12" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:263 +msgid "The system identifies the employee's payroll records for the current and previous years." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:470 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:497 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1248 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1304 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1568 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1624 -msgid "3" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:264 +msgid "It retrieves validated leave requests and allocations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:472 -msgid "12 - 18" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:266 +msgid "**Computing gross remuneration**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:472 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:499 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1250 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1306 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1570 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1626 -msgid "4" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:268 +msgid "The gross annual salary for both the current and previous years is computed from payroll records." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:474 -msgid "18 - 24" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:270 +msgid "The average monthly salary is calculated for unpaid leave adjustments." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:474 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:501 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1252 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1572 -msgid "5" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:272 +msgid "**Time-off calculations**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:476 -msgid "24 - 48" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:274 +msgid "The number of vacation days taken and allocated in the current year is determined." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:476 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:503 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1254 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1574 -msgid "6" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:275 +msgid "Unpaid leave days are accounted for separately." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:478 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:519 -msgid "48 - 60" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:277 +msgid "**Fictitious remuneration calculation**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:478 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:505 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1256 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1576 -msgid "7" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:279 +msgid "If unpaid leave was taken, Odoo computes a fictitious remuneration adjustment using the formula:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:480 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:521 -msgid "60 - 72" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:282 +msgid "\\text{Fictitious Remuneration} = (\\text{Unpaid Leave Days} \\times\n" +"\\text{Average Monthly Salary} \\times 3) \\div (13 \\times 5)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:480 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:509 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1260 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1580 -msgid "9" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:288 +msgid "**Generating the final attestation**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:482 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:523 -msgid "72 - 84" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:290 +msgid "Odoo creates a payroll entry reflecting the vacation pay due." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:482 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:511 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1262 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1582 -msgid "10" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:291 +msgid "The attestation document is generated and can be printed or exported." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:484 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:525 -msgid "84 - 96" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:293 +msgid "Two payslips are created:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:484 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:515 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1266 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1586 -msgid "12" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:295 +msgid "**Payslip for the current year** (`termination_payslip_n`)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:486 -msgid "96+" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:297 +msgid "This payslip covers the employee's last salary period in the year of termination." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:486 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:517 -msgid "13" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:299 +msgid "**Payslip for the previous year** (`termination_payslip_n1`)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:490 -msgid "For dismissed employees" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:301 +msgid "The one accounts the amount of money converted from the untaken time off of previous year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:497 -msgid "3 - 4" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:303 +msgid "Each payslip is generated using the appropriate payroll structure, ensuring correct calculations for all entitlements and deductions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:499 -msgid "4 - 5" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:306 +msgid "Before computing the final payment, the system gathers necessary payroll data:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:501 -msgid "5 - 6" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:308 +msgid "**Annual gross salary calculation**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:503 -msgid "6 - 9" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:310 +msgid "To estimate the employee's **annual gross salary**, the system looks for the most recent validated monthly payslip. If a payslip is found, the **gross salary** from that payslip is multiplied by 12 to get an annual estimate. If no payslip exists, the annual gross salary is set to **zero**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:505 -msgid "9 - 12" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:315 +msgid "**European leave recovery**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:507 -msgid "12 - 15" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:317 +msgid "The system retrieves all **European leave days (LEAVE216)** taken by the employee during the current year. It then calculates the **total amount paid for these leaves** and determines how much should be deducted." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:507 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1258 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1578 -msgid "8" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:321 +msgid "The deduction follows these principles:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:509 -msgid "15 - 18" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:323 +msgid "If an employee has taken **European holidays (additional vacation days)**, the amount paid in advance must be recovered." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:511 -msgid "18 - 21" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:325 +msgid "The recovery is either:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:513 -msgid "21 - 24" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:327 +msgid "Deducted from **the double vacation pay (85%)** for the next year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:513 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1264 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1584 -msgid "11" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:328 +msgid "Or, if the employee leaves, deducted from the final termination payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:515 -msgid "24 - 36" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:330 +msgid "If leave has been taken, the **termination certificate** must specify:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:517 -msgid "36 - 48" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:332 +msgid "The **number of European leave days** already granted." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:519 -msgid "15" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:333 +msgid "The **gross allowance** corresponding to these days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:521 -msgid "18" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:335 +msgid "To ensure fairness, the system first checks whether a deduction has already been applied in the **double vacation pay**. If so, only the remaining amount is deducted from the final payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:523 -msgid "21" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:338 +msgid "Once the required values are determined, they are recorded in the payslip as **additional payroll inputs**:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:525 -msgid "24" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:341 +msgid "**Gross salary reference**: Includes the final salary amount plus any fictitious remuneration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:527 -msgid "96 - 108" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:342 +msgid "**European leave deduction**: Deducts the previously paid European leave amounts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:527 -msgid "27" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:343 +msgid "**Other inputs**: Allocates time off taken, taxable amounts, and any outstanding allocations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:529 -msgid "108 - 120" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:345 +msgid "After setting these values, the system **computes the payslip** to ensure all deductions and payments are correctly applied." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:529 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:330 -msgid "30" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:348 +msgid "This process ensures that the final **termination payslip** takes into account all salary components, including **annual gross pay, European leave recovery, and any unpaid entitlements**. Odoo retrieves past payslips and time-off records to ensure compliance with **Belgian payroll regulations**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:531 -msgid "120 - 132" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:353 +msgid "By automating this process, Odoo minimizes manual intervention, reducing errors and ensuring employees receive the correct termination payments." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:531 -msgid "33" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:357 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:609 +msgid "How does it work in Odoo?" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:533 -msgid "132 - 144" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:359 +msgid "In Odoo, to access the holiday attests process, go to the employee form view and click on :icon:`fa-cog` :guilabel:`(Action)` then :guilabel:`Departure: Holiday Attests` or navigate to :menuselection:`Payroll --> Reporting --> Departure: Holiday Attests`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:533 -msgid "36" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:363 +msgid "In the wizard that appears, you can see all the payslips over the current and last year, the time off requests and allocations. You can also encode the unpaid time off you would like to declare on that holiday attest." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:535 -msgid "144 - 156" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:367 +msgid "Once you're ready, click the :guilabel:`Validate & Compute holiday attests` button. Two payslips are generated for each considered period (N and N-1)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:535 -msgid "39" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:370 +msgid "Once validated, two :file:`.pdf` documents are generated. One **classic payslip** and one **holiday attests** for the future employer." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:537 -msgid "156 - 168" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 +msgid "Departure Holiday Attests Payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:537 -msgid "42" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 +msgid "Departure Holiday Attests Time off." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:539 -msgid "168 - 180" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 +msgid "Departure Holiday Attests Unpaid." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:539 -msgid "45" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:387 +msgid "In our example, the employee also took one European time off during the N-year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:541 -msgid "180 - 192" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:389 +msgid "For year N-1, you can see that all legal time off were taken." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:541 -msgid "48" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 +msgid "Departure Holiday Attests Attest N-1." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:543 -msgid "192 - 204" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 +msgid "Departure Holiday Attests Payslip N-1." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:543 -msgid "51" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:397 +msgid "For year N, you can also see the number off additional time off (European) and already taken legal time off are taken into account as well." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:545 -msgid "204 - 216" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 +msgid "Departure Holiday Attests Attest N." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:545 -msgid "54" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 +msgid "Departure Holiday Attests Payslip N." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:547 -msgid "216 - 228" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:407 +msgid "Important Notes" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:547 -msgid "57" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:409 +msgid "By using Odoo's automated attestation generation, companies can ensure compliance with Belgian labor laws while reducing manual administrative work." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:549 -msgid "228 - 240" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:413 +msgid "The feature is only available for companies registered in Belgium." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:549 -msgid "60" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:414 +msgid "If the notice period is not set for an employee, Odoo will prompt for this information." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:551 -msgid "240 - 252" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:415 +msgid "Employers must ensure vacation attestations are provided before the employee needs to submit them to their new employer or the ONEM." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:551 -msgid "62" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:421 +msgid "Departure: notice period & termination fees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:553 -msgid "252 - 264" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:423 +msgid "This documentation explains how the employee departure process works in the application, focusing on the notice period calculation and severance pay when the employee does not serve their notice period." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:553 -msgid "63" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:430 +msgid "This module helps manage employee departures by determining the correct notice period based on seniority, departure reasons, and specific country regulations (Belgium). It also calculates severance pay when the employee does not work during their notice period." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:555 -msgid "264 - 276" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:435 +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:78 +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:124 +msgid "Key features" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:555 -msgid "64" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:437 +msgid "Automatic calculation of notice period start and end dates." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:557 -msgid "276 - 288" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:438 +msgid "Consideration of public holidays and company-specific schedules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:557 -msgid "65" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:439 +msgid "Calculation of severance pay based on company policies and government rules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:559 -msgid "288+" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:440 +msgid "Generation of a final payslip including termination fees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:559 -msgid "66+" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:443 +msgid "Notice period calculation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:563 -msgid "Special case: employees hired before 2014" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:445 +msgid "The notice period depends on several factors:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:565 -msgid "For employees who started before January 1, 2014, the notice period calculation is divided into two parts:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:447 +msgid "The employee's seniority in the company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:569 -msgid "Part 1: Seniority acquired before December 31, 2013" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:448 +msgid "The reason for departure (resignation, dismissal, retirement, etc.)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:571 -msgid "**Lower-level employees** (annual gross salary ≤ €32,254): The notice period is 3 months for the first 5 years of seniority, increasing by 1.5 months per additional year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:449 +msgid "Whether the employee works during the notice period or not." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:573 -msgid "**Higher-level employees** (annual gross salary > €32,254): The notice period is 1 month per started year of seniority, with a minimum of 3 months." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:450 +msgid "The salary level before January 1, 2014 (for some cases)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:577 -msgid "Part 2: Seniority acquired from January 1, 2014 onwards" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:452 +msgid "The notice period starts on the first Monday after the departure date unless a specific rule applies (e.g., a mandatory waiting period of three days for certain dismissals)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:579 -msgid "The standard notice period rules from 2014 apply to seniority acquired after this date." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:456 +msgid "Notice duration rules" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:581 -msgid "The total notice period is the sum of both periods calculated separately." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:458 +msgid "The following table shows the duration of the notice period based on the length of service:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:584 -msgid "Severance pay calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:461 +msgid "For resigned employees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:586 -msgid "If an employee does not serve their notice period, severance pay is calculated based on:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:464 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:493 +msgid "Seniority (months)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:588 -msgid "The remaining notice duration." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:464 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:493 +msgid "Notice Period (weeks)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:589 -msgid "The employee's last salary." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:466 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:495 +msgid "0 - 3" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:590 -msgid "Additional compensation such as bonuses, stock options, and insurance contributions." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:466 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:495 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1244 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1300 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1564 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1620 +msgid "1" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:592 -msgid "The severance pay consists of:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:468 +msgid "3 - 6" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:594 -msgid "The current salary, which corresponds either to the full notice period that should normally be observed or the remaining part of it." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:468 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1246 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1302 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1566 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1622 +msgid "2" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:596 -msgid "Benefits acquired during the contract (e.g., meal vouchers, company car, mobile phone usage)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:470 +msgid "6 - 12" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:598 -msgid "The current salary is determined as follows:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:470 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:497 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1248 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1304 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1568 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1624 +msgid "3" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:600 -msgid "The employee's gross monthly salary at the time of dismissal." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:472 +msgid "12 - 18" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:601 -msgid "All recurring bonuses, except for one-time bonuses (e.g., team work bonus, seniority bonus)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:472 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:499 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1250 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1306 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1570 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1626 +msgid "4" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:602 -msgid "Additional compensation for overtime hours worked over a longer period." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:474 +msgid "18 - 24" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:603 -msgid "Variable salary (average over the last twelve months)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:474 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:501 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1252 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1572 +msgid "5" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:605 -msgid "The system automatically generates a termination payslip including these calculations, ensuring compliance with Belgian labor laws." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:476 +msgid "24 - 48" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:611 -msgid "In Odoo, to access the departure process, go to the employee form view and click on :icon:`fa-cog` :guilabel:`(Action)` then :guilabel:`Departure: Notice Period and payslip` or navigate to :menuselection:`Payroll --> Reporting --> Departure: Notice Period`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:476 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:503 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1254 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1574 +msgid "6" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:615 -msgid "In the wizard that appears, select the reason for departure, provide a description of the departure, and specify the dismissal date. The employee's seniority is calculated based on their contract history, and the notice period is determined accordingly. You can also indicate whether the employee will be working during the notice period." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:478 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:519 +msgid "48 - 60" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Departure Notice Wizard." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:478 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:505 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1256 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1576 +msgid "7" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:623 -msgid "If the employee is working during the notice period, there are no termination fees to calculate, and the notice period will be recorded on the employee's form. Click the :guilabel:`Validate` button." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:480 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:521 +msgid "60 - 72" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:627 -msgid "If the employee is working partially or not at all, the wizard will generate and calculate a termination fees payslip. Click the :guilabel:`Validate & Compute termination fees` button." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:480 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:509 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1260 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1580 +msgid "9" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:630 -msgid "The payslip takes into account all the salaries and benefits the employee would have received over the course of a year to calculate a virtual annual remuneration. This amount is then prorated based on the notice period to convert it into a gross salary." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:482 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:523 +msgid "72 - 84" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:634 -msgid "A detailed summary is provided on the payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:482 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:511 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1262 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1582 +msgid "10" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 -msgid "Departure Notice: Termination Fees Payslip 1." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:484 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:525 +msgid "84 - 96" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 -msgid "Departure Notice: Termination Fees Payslip 2." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:484 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:515 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1266 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1586 +msgid "12" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:644 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1354 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2118 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2253 -msgid "Conclusion" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:486 +msgid "96+" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:646 -msgid "This module simplifies the departure process by providing clear and automatic calculations for the notice period and severance pay. It helps HR teams ensure compliance and streamline the exit process for employees." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:486 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:517 +msgid "13" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:653 -msgid "DIMONA" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:490 +msgid "For dismissed employees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:656 -msgid "What is the Dimona?" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:497 +msgid "3 - 4" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:659 -msgid "Obligation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:499 +msgid "4 - 5" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:661 -msgid "All employers, both in the public and private sectors, are required to electronically communicate the entry and exit of their personnel to the National Social Security Office (Royal Decree of November 5, 2002)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:501 +msgid "5 - 6" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:665 -msgid "This involves the immediate declaration of employment, also known as DIMONA (Déclaration Immédiate - Onmiddellijke Aangifte). Its purpose is to immediately notify social security institutions of the beginning and end of an employment relationship between the worker and the employer." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:503 +msgid "6 - 9" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:669 -msgid "The declarations submitted by the employer and immediately checked by the NSSO feed into a database called the *personnel file*. The employer can access it in a secure environment. There are numerous search criteria: they can be based on characteristics and combinations of characteristics." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:505 +msgid "9 - 12" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:673 -msgid "Failure to comply with this reporting obligation may result in criminal penalties as provided for in Article 181 of the Social Penal Code." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:507 +msgid "12 - 15" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:676 -msgid "Furthermore, in case of omission of declaration, the employer will owe the NSSO a solidarity contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:507 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1258 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1578 +msgid "8" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:680 -msgid "Concept and terminology" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:509 +msgid "15 - 18" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:683 -msgid "Employer-worker relationship" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:511 +msgid "18 - 21" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:685 -msgid "The relationship between the \"employer\" and the \"worker\" couple. This relationship includes stable data (employer identification number, worker's national identification social security number (NISS), start date of the relationship, and optionally end date), which will be maintained even in case of creation, closure, modification, or cancellation of a period. This relationship begins with the worker's first engagement and ends at the end of their last occupation. In the personnel file, \"employer-worker\" relationships constitute the first level of consultation. The second level encompasses all Dimona periods;" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:513 +msgid "21 - 24" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:694 -msgid "Dimona period" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:513 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1264 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1584 +msgid "11" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:696 -msgid "A period is created with each IN declaration, thus at the beginning of each new occupation. It is closed by an exit date at the end of each occupation. The employer-worker relationship, on the other hand, is maintained until the end of the last occupation. Several Dimona periods may or may not succeed each other within the same employer-worker relationship." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:515 +msgid "24 - 36" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:701 -msgid "Any changes generated by an OUT declaration, a modification (UPDATE), or a cancellation (CANCEL) occur at this second level." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:517 +msgid "36 - 48" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:704 -msgid "This Dimona period is identified by a \"period identification number\". It is assigned to each IN declaration and constitutes the unique identification key of a period for submitting OUT, modification, or cancellation declarations." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:519 +msgid "15" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:709 -msgid "Dimona number" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:521 +msgid "18" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:711 -msgid "A unique number assigned by the NSSO to each Dimona declaration (IN, OUT, UPDATE, CANCEL,...). For an IN declaration, it is the period identification number. When declarations are submitted via file transfer, multiple Dimona numbers are created: one number per employment relationship included in the structured message;" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:523 +msgid "21" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:717 -msgid "Dimona characteristics" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:525 +msgid "24" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:719 -msgid "Mandatory data of a Dimona declaration. There are four: the industry sector number, worker type, sub-entity (reserved for certain public sector employers), and user (for temporary workers). Characteristics are always linked to a period. In case of different characteristics, multiple periods can coexist;" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:527 +msgid "96 - 108" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:725 -msgid "Receipt confirmation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:527 +msgid "27" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:727 -msgid "Confirms for web users that the declaration has been received (appears immediately on the screen);" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:529 +msgid "108 - 120" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:730 -msgid "Receipt acknowledgment" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:529 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:330 +msgid "30" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:732 -msgid "Electronic message for batch senders indicating whether the file is usable for the NSSO. This \"receipt acknowledgment\" contains the ticket number (:dfn:`file identification number`) and the file status: accepted or rejected depending on whether the file is readable or not;" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:531 +msgid "120 - 132" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:737 -msgid "Notification" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:531 +msgid "33" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:739 -msgid "Electronic message with feedback on the processing of the declaration. The notification is the immediate result of form and content checks. It can be of three types: positive (Dimona accepted), negative (Dimona rejected), or provisional (only in case of problems with worker identification). The provisional notification will always be followed by a positive or negative notification." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:533 +msgid "132 - 144" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:744 -msgid "For the declaration of students under a student contract (STU), the notification will also contain a warning if the student is declared for more than 475 hours. If the declaration was made via a secure channel, the exact number of days of excess will be communicated." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:533 +msgid "36" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:748 -msgid "For the daily declaration of occasional workers in the hospitality industry, the notification will also contain a warning if the worker is declared for more than 50 days and/or for the employer quota, if more than 100 days of occasional work have been declared." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:535 +msgid "144 - 156" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:752 -msgid "Once you have received this notification, you have five working days to contest the accuracy of the data mentioned therein. At the end of this period, these data will be considered final. For any disputes, you must contact the Eranova Contact Center (tel: 02 511 51 51, email: contactcenter@eranova.fgov.be)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:535 +msgid "39" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:757 -msgid "Note that if the employer is affiliated with an approved social secretariat or a full-service secretariat, they may not receive any notification. In this case, notifications are electronically transmitted to the social secretariat or full-service secretariat, even for declarations that the employer has submitted personally. However, the employer has access to the personnel file, where they can view all data." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:537 +msgid "156 - 168" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:764 -msgid "Channels" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:537 +msgid "42" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:766 -msgid "The Dimona declaration must be submitted in the form of an electronic message via one of the following channels:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:539 +msgid "168 - 180" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:769 -msgid "web" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:539 +msgid "45" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:770 -msgid "personnel file" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:541 +msgid "180 - 192" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:771 -msgid "file transfer" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:541 +msgid "48" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:772 -msgid "web service (REST)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:543 +msgid "192 - 204" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:773 -msgid "Dimona Mobile" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:543 +msgid "51" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:775 -msgid "The choice of one channel over another has no impact on the declaration. Therefore, you can freely choose the channel you will use." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:545 +msgid "204 - 216" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:778 -msgid "Any declaration modifications can also be made through any of these four channels. The channel through which the original declaration was submitted plays no role." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:545 +msgid "54" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:781 -msgid "A Dimona declaration cannot be submitted via SMS." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:547 +msgid "216 - 228" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:784 -msgid "Dimona in Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:547 +msgid "57" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:787 -msgid "Manual" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:549 +msgid "228 - 240" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:789 -msgid "In Odoo, when you have the Belgian Payroll Localization installed, as soon as you have a contract set to the running stage, it creates an activity for the HR responsible that they need to introduce the Dimona for today with the correct link to the Dimona Platform (the web channel mentioned in the Channels section of this article)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:549 +msgid "60" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Dimona Activity." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:551 +msgid "240 - 252" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:798 -msgid "Automated" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:551 +msgid "62" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:800 -msgid "In Odoo, when you have the Belgian Payroll Localization installed, it is also possible to install the module Belgium - Payroll - Dimona. This module will allow you to perform the 4 main actions needed in the Dimona (as seen in Section 1 of this article):" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:553 +msgid "252 - 264" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:804 -msgid "Open the dimona" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:553 +msgid "63" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:805 -msgid "Update the dimona" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:555 +msgid "264 - 276" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:806 -msgid "Close the dimona" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:555 +msgid "64" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:807 -msgid "Cancel the Dimona" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:557 +msgid "276 - 288" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:809 -msgid "These actions answer the different use case explained in Section 1." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:557 +msgid "65" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:812 -msgid "Contract and employee data" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:559 +msgid "288+" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:814 -msgid "Basically, it checks the contract and employee data needed to create, update, close or cancel." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:559 +msgid "66+" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:817 -msgid "Error handling" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:563 +msgid "Special case: employees hired before 2014" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:819 -msgid "If some information is missing or wrongly configured, the system will return errors and you can take corrective action in order to make sure your Dimona is correctly sent, updated, closed or canceled." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:565 +msgid "For employees who started before January 1, 2014, the notice period calculation is divided into two parts:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:824 -msgid "Synchronization status" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:569 +msgid "Part 1: Seniority acquired before December 31, 2013" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:826 -msgid "The status of sync and errors are shown in the chatter of the contract." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:571 +msgid "**Lower-level employees** (annual gross salary ≤ €32,254): The notice period is 3 months for the first 5 years of seniority, increasing by 1.5 months per additional year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:829 -msgid "Scheduled action" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:573 +msgid "**Higher-level employees** (annual gross salary > €32,254): The notice period is 1 month per started year of seniority, with a minimum of 3 months." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:831 -msgid "Finally, the cron checks every day, for all contracts that have the status dimona waiting and triggers the necessary actions to update the dimona status accordingly." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:577 +msgid "Part 2: Seniority acquired from January 1, 2014 onwards" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:835 -msgid "Technical configuration (outside Odoo)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:579 +msgid "The standard notice period rules from 2014 apply to seniority acquired after this date." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:837 -msgid "Regarding the technical configuration, everything is described in the module information with all the technical prerequisites. If your customer or partner need further assistance with that, they need to contact their IT department or representatives as this is not part of Odoo configuration." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:581 +msgid "The total notice period is the sum of both periods calculated separately." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:842 -msgid "Functional configuration (within Odoo)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:584 +msgid "Severance pay calculation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:844 -msgid "From the Odoo configuration point of view, navigate to :menuselection:`Payroll app --> Configuration --> Settings` and in the :guilabel:`Belgian Localization` section for :guilabel:`ONSS`, configure the following:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:586 +msgid "If an employee does not serve their notice period, severance pay is calculated based on:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:848 -msgid ":guilabel:`ONSS Company ID`: VAT Number of the Company" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:588 +msgid "The remaining notice duration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:849 -msgid ":guilabel:`Registration Number`: 9 digits code received from the NSSO (ONSS - RSZ)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:589 +msgid "The employee's last salary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:850 -msgid ":guilabel:`DMFA Employer Class`: 3 digits code received from the NSSO (ONSS - RSZ)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:590 +msgid "Additional compensation such as bonuses, stock options, and insurance contributions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:851 -msgid ":guilabel:`Expeditor Number ONSS`: Not Mandatory (see technical documentation of the module for more information)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:592 +msgid "The severance pay consists of:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:853 -msgid ":guilabel:`PEM Certificate`, :guilabel:`PEM Passphare`, :guilabel:`KEY file`: check the module information for explanation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:594 +msgid "The current salary, which corresponds either to the full notice period that should normally be observed or the remaining part of it." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:859 -msgid "DmfA - Multifunctional Declaration" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:596 +msgid "Benefits acquired during the contract (e.g., meal vouchers, company car, mobile phone usage)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:864 -msgid "DmfA stands for \"Déclaration Multifonctionnelle\" or \"Multifunctionele Aangifte.\" It has replaced the quarterly ONSS declaration since the first quarter of 2003. Through this declaration, employers submit salary and working time data for their employees." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:598 +msgid "The current salary is determined as follows:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:868 -msgid "These data are processed in a way that allows all social security institutions to work with the same information. The declaration is called \"multifunctional\" because it is used not only for social security contribution calculations and reductions but also as a data source for institutions managing social security rights and benefits." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:600 +msgid "The employee's gross monthly salary at the time of dismissal." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:873 -msgid "Sectors utilizing DmfA data include:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:601 +msgid "All recurring bonuses, except for one-time bonuses (e.g., team work bonus, seniority bonus)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:875 -msgid "Health insurance" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:602 +msgid "Additional compensation for overtime hours worked over a longer period." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:876 -msgid "Unemployment benefits" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:603 +msgid "Variable salary (average over the last twelve months)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:877 -msgid "Pensions" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:605 +msgid "The system automatically generates a termination payslip including these calculations, ensuring compliance with Belgian labor laws." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:878 -msgid "Occupational risks (Fedris)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:611 +msgid "In Odoo, to access the departure process, go to the employee form view and click on :icon:`fa-cog` :guilabel:`(Action)` then :guilabel:`Departure: Notice Period and payslip` or navigate to :menuselection:`Payroll --> Reporting --> Departure: Notice Period`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:879 -msgid "Family allowances" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:615 +msgid "In the wizard that appears, select the reason for departure, provide a description of the departure, and specify the dismissal date. The employee's seniority is calculated based on their contract history, and the notice period is determined accordingly. You can also indicate whether the employee will be working during the notice period." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:880 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:89 -msgid "Annual leave" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Departure Notice Wizard." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:882 -msgid "All employers registered with ONSS must submit a DmfA declaration." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:623 +msgid "If the employee is working during the notice period, there are no termination fees to calculate, and the notice period will be recorded on the employee's form. Click the :guilabel:`Validate` button." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:885 -msgid "Relationship with Dimona and DRS" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:627 +msgid "If the employee is working partially or not at all, the wizard will generate and calculate a termination fees payslip. Click the :guilabel:`Validate & Compute termination fees` button." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:887 -msgid "DmfA is closely linked to two other mandatory declarations:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:630 +msgid "The payslip takes into account all the salaries and benefits the employee would have received over the course of a year to calculate a virtual annual remuneration. This amount is then prorated based on the notice period to convert it into a gross salary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:890 -msgid "Dimona (immediate declaration)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:634 +msgid "A detailed summary is provided on the payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:892 -msgid "Dimona records the start and end of an employment relationship with an employee." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 +msgid "Departure Notice: Termination Fees Payslip 1." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:895 -msgid "DRS (social risks declaration)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 +msgid "Departure Notice: Termination Fees Payslip 2." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:897 -msgid "During an employment relationship, various social risks may arise, such as termination, workplace accidents, or long-term illness. When a social risk occurs, social security institutions require additional information beyond that provided by DmfA and Dimona." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:644 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1354 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2118 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2253 +msgid "Conclusion" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:901 -msgid "DRS is now primarily an electronic declaration, though paper submissions remain possible." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:646 +msgid "This module simplifies the departure process by providing clear and automatic calculations for the notice period and severance pay. It helps HR teams ensure compliance and streamline the exit process for employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:904 -msgid "Who submits the DmfA declaration?" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:653 +msgid "DIMONA" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:907 -msgid "Self-declaration options" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:656 +msgid "What is the Dimona?" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:909 -msgid "Employers can submit their DmfA declaration themselves via:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:659 +msgid "Obligation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:911 -msgid "**Web Submission:** Suitable for employers with a small workforce. Declarations are entered directly through the social security portal." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:661 +msgid "All employers, both in the public and private sectors, are required to electronically communicate the entry and exit of their personnel to the National Social Security Office (Royal Decree of November 5, 2002)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:913 -msgid "**Batch Submission:** Designed for large employers or organizations handling multiple declarations (e.g., social secretariats, payroll software providers). Declarations are submitted via file transfer (FTP, SFTP, etc.)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:665 +msgid "This involves the immediate declaration of employment, also known as DIMONA (Déclaration Immédiate - Onmiddellijke Aangifte). Its purpose is to immediately notify social security institutions of the beginning and end of an employment relationship between the worker and the employer." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:918 -msgid "Advantages of web submission" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:669 +msgid "The declarations submitted by the employer and immediately checked by the NSSO feed into a database called the *personnel file*. The employer can access it in a secure environment. There are numerous search criteria: they can be based on characteristics and combinations of characteristics." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:920 -msgid "**Automatic access to the company's employee list**: Based on Dimona data. If an employee is missing, they must first be declared via Dimona. After 24 hours, the employee list is updated, allowing for an accurate DmfA submission." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:673 +msgid "Failure to comply with this reporting obligation may result in criminal penalties as provided for in Article 181 of the Social Penal Code." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:923 -msgid "**Automatic calculation of net payable amount**: Once all required data is entered, the system calculates the total payable amount." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:676 +msgid "Furthermore, in case of omission of declaration, the employer will owe the NSSO a solidarity contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:925 -msgid "**Reduction calculations**: The system calculates applicable reductions, except for reductions under code \"0001\" (personal contribution reductions for low-income workers). Employers need to check the relevant boxes and, if necessary, provide additional details." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:680 +msgid "Concept and terminology" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:930 -msgid "Advantages of batch submission" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:683 +msgid "Employer-worker relationship" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:932 -msgid "**Submission of large volumes of declarations**: Ideal for organizations managing multiple payrolls." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:685 +msgid "The relationship between the \"employer\" and the \"worker\" couple. This relationship includes stable data (employer identification number, worker's national identification social security number (NISS), start date of the relationship, and optionally end date), which will be maintained even in case of creation, closure, modification, or cancellation of a period. This relationship begins with the worker's first engagement and ends at the end of their last occupation. In the personnel file, \"employer-worker\" relationships constitute the first level of consultation. The second level encompasses all Dimona periods;" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:934 -msgid "**Quick response on acceptance status**: Employers receive immediate feedback on whether their declaration has been accepted." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:694 +msgid "Dimona period" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:936 -msgid "**Error reporting**: The system generates a report on detected anomalies, regardless of acceptance status." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:696 +msgid "A period is created with each IN declaration, thus at the beginning of each new occupation. It is closed by an exit date at the end of each occupation. The employer-worker relationship, on the other hand, is maintained until the end of the last occupation. Several Dimona periods may or may not succeed each other within the same employer-worker relationship." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:938 -msgid "**Automatic correction of calculation errors**: When possible, errors are corrected automatically, and employers are notified of adjustments." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:701 +msgid "Any changes generated by an OUT declaration, a modification (UPDATE), or a cancellation (CANCEL) occur at this second level." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:942 -msgid "Third-Party submission options" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:704 +msgid "This Dimona period is identified by a \"period identification number\". It is assigned to each IN declaration and constitutes the unique identification key of a period for submitting OUT, modification, or cancellation declarations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:944 -msgid "Employers who do not wish to submit the DmfA themselves can delegate the task to:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:709 +msgid "Dimona number" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:946 -msgid "**Accredited Social Secretariats**: These organizations handle payroll and declaration tasks on behalf of employers." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:711 +msgid "A unique number assigned by the NSSO to each Dimona declaration (IN, OUT, UPDATE, CANCEL,...). For an IN declaration, it is the period identification number. When declarations are submitted via file transfer, multiple Dimona numbers are created: one number per employment relationship included in the structured message;" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:948 -msgid "**Service Providers**: These may be companies or individuals with whom the employer has a contractual agreement to manage payroll declarations securely." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:717 +msgid "Dimona characteristics" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:951 -msgid "For more information on accredited social secretariats or service providers, please refer to the relevant `official DmfA documentation `_." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:719 +msgid "Mandatory data of a Dimona declaration. There are four: the industry sector number, worker type, sub-entity (reserved for certain public sector employers), and user (for temporary workers). Characteristics are always linked to a period. In case of different characteristics, multiple periods can coexist;" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:958 -msgid "The declaration is generated under :menuselection:`Payroll app --> Reporting --> Belgium --> DmfA` as is supposed to work properly after several required configuration steps." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:725 +msgid "Receipt confirmation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:962 -msgid "Company" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:727 +msgid "Confirms for web users that the declaration has been received (appears immediately on the screen);" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:964 -msgid "To generate a valid DmfA declaration, specific company and employer-related information is required, (under :menuselection:`Payroll app --> Configuration --> Settings`). These include:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:730 +msgid "Receipt acknowledgment" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:967 -msgid ":guilabel:`ONSS Company ID`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:732 +msgid "Electronic message for batch senders indicating whether the file is usable for the NSSO. This \"receipt acknowledgment\" contains the ticket number (:dfn:`file identification number`) and the file status: accepted or rejected depending on whether the file is readable or not;" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:968 -msgid ":guilabel:`ONSS Registration Number`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:737 +msgid "Notification" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:969 -msgid ":guilabel:`DMFA Employer Class`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:739 +msgid "Electronic message with feedback on the processing of the declaration. The notification is the immediate result of form and content checks. It can be of three types: positive (Dimona accepted), negative (Dimona rejected), or provisional (only in case of problems with worker identification). The provisional notification will always be followed by a positive or negative notification." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:970 -msgid ":guilabel:`ONSS Certificate`: certificate for signature file generation (required for batch declarations)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:744 +msgid "For the declaration of students under a student contract (STU), the notification will also contain a warning if the student is declared for more than 475 hours. If the declaration was made via a secure channel, the exact number of days of excess will be communicated." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:972 -msgid "VAT :guilabel:`Company Number`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:748 +msgid "For the daily declaration of occasional workers in the hospitality industry, the notification will also contain a warning if the worker is declared for more than 50 days and/or for the employer quota, if more than 100 days of occasional work have been declared." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:973 -msgid ":guilabel:`Revenue Code`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:752 +msgid "Once you have received this notification, you have five working days to contest the accuracy of the data mentioned therein. At the end of this period, these data will be considered final. For any disputes, you must contact the Eranova Contact Center (tel: 02 511 51 51, email: contactcenter@eranova.fgov.be)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:974 -msgid ":guilabel:`FFE Employer Type` (Fonds de Fermeture d'Entreprise)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:757 +msgid "Note that if the employer is affiliated with an approved social secretariat or a full-service secretariat, they may not receive any notification. In this case, notifications are electronically transmitted to the social secretariat or full-service secretariat, even for declarations that the employer has submitted personally. However, the employer has access to the personnel file, where they can view all data." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:979 -msgid "Additionally, each employee must be assigned to a valid working address, identified with a DmfA code, in their employee record. This operating unit must be linked to a valid ONSS identification number to ensure compliance with declaration requirements. Failing to configure this properly may result in errors during the declaration submission process." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:764 +msgid "Channels" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:984 -msgid "On the employee form, the :guilabel:`Work Address` must be defined." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:766 +msgid "The Dimona declaration must be submitted in the form of an electronic message via one of the following channels:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:986 -msgid "Under :menuselection:`Payroll app --> Configuration --> DMFA: Work Locations`, you can link the work address to a ONSS identification number." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:769 +msgid "web" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "DmfA - Work Location ONSS ID." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:770 +msgid "personnel file" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:993 -msgid "Work entry type" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:771 +msgid "file transfer" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:995 -msgid "A DmfA code should be defined for each work entry type that is declared. Under :menuselection:`Payroll app --> Configuration --> Work Entries --> Work Entry Types`, specify the :guilabel:`DMFA code`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:772 +msgid "web service (REST)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1000 -msgid "Potential configuration errors" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:773 +msgid "Dimona Mobile" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1002 -msgid "During the declaration generation process, configuration issues may arise, triggering errors such as:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:775 +msgid "The choice of one channel over another has no impact on the declaration. Therefore, you can freely choose the channel you will use." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1005 -msgid "Terminated employees without or with invalid start/end notice period" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:778 +msgid "Any declaration modifications can also be made through any of these four channels. The channel through which the original declaration was submitted plays no role." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1006 -msgid "Invalid NISS number for some employees" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:781 +msgid "A Dimona declaration cannot be submitted via SMS." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1007 -msgid "Work addresses not linked to an ONSS identification code" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:784 +msgid "Dimona in Odoo" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1008 -msgid "Work entry type missing a corresponding DmfA code" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:787 +msgid "Manual" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1009 -msgid "Other inconsistencies in employer or employee records" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:789 +msgid "In Odoo, when you have the Belgian Payroll Localization installed, as soon as you have a contract set to the running stage, it creates an activity for the HR responsible that they need to introduce the Dimona for today with the correct link to the Dimona Platform (the web channel mentioned in the Channels section of this article)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1011 -msgid "Employers should ensure accurate configuration to avoid delays and rejection of their declarations." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Dimona Activity." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1014 -msgid "Web declaration" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:798 +msgid "Automated" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "DmfA - Web Declaration." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:800 +msgid "In Odoo, when you have the Belgian Payroll Localization installed, it is also possible to install the module Belgium - Payroll - Dimona. This module will allow you to perform the 4 main actions needed in the Dimona (as seen in Section 1 of this article):" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1019 -msgid "A web declaration generates a PDF summarizing the company's general information, as well as all employee data that must be manually entered into the system. This includes:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:804 +msgid "Open the dimona" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1022 -msgid "For the company:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:805 +msgid "Update the dimona" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "DmfA - PDF Company." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:806 +msgid "Close the dimona" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1027 -msgid "For a specific employee:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:807 +msgid "Cancel the Dimona" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "DmfA - PDF Employee." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:809 +msgid "These actions answer the different use case explained in Section 1." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1032 -msgid "**Occupations**: Work schedules, part-time codes, parental leave, exploitation unit, reference working hours." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:812 +msgid "Contract and employee data" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1034 -msgid "**Services**: Aggregated work performance (in days and hours) for the quarter, categorized by occupation and type. The codification of working time in the DmfA declaration ensures accurate reporting of employee activities. Each code corresponds to a specific type of working time or absence. For a complete and detailed list of codes, please refer to the official social security website: `socialsecurity.be `_" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:814 +msgid "Basically, it checks the contract and employee data needed to create, update, close or cancel." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1040 -msgid "**1**: All performances covered by a salary subject to ONSS contributions, excluding legal and additional vacation for workers." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:817 +msgid "Error handling" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1042 -msgid "**2**: Legal vacation days for workers." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:819 +msgid "If some information is missing or wrongly configured, the system will return errors and you can take corrective action in order to make sure your Dimona is correctly sent, updated, closed or canceled." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1043 -msgid "**3**: Additional vacation days for workers." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:824 +msgid "Synchronization status" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1044 -msgid "**4**: Compensatory rest days." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:826 +msgid "The status of sync and errors are shown in the chatter of the contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1045 -msgid "**5**: Days of illness or non-occupational accident." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:829 +msgid "Scheduled action" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1046 -msgid "**6**: Family leave days." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:831 +msgid "Finally, the cron checks every day, for all contracts that have the status dimona waiting and triggers the necessary actions to update the dimona status accordingly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1047 -msgid "**7**: Maternity or paternity leave days." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:835 +msgid "Technical configuration (outside Odoo)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1048 -msgid "**8**: Strike days." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:837 +msgid "Regarding the technical configuration, everything is described in the module information with all the technical prerequisites. If your customer or partner need further assistance with that, they need to contact their IT department or representatives as this is not part of Odoo configuration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1049 -msgid "**9**: Temporary unemployment for economic reasons." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:842 +msgid "Functional configuration (within Odoo)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1050 -msgid "**10**: Temporary unemployment for bad weather." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:844 +msgid "From the Odoo configuration point of view, navigate to :menuselection:`Payroll app --> Configuration --> Settings` and in the :guilabel:`Belgian Localization` section for :guilabel:`ONSS`, configure the following:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1051 -msgid "**11**: Temporary unemployment for force majeure." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:848 +msgid ":guilabel:`ONSS Company ID`: VAT Number of the Company" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1052 -msgid "**12**: Professional training days." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:849 +msgid ":guilabel:`Registration Number`: 9 digits code received from the NSSO (ONSS - RSZ)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1053 -msgid "**13**: Suspension for disciplinary reasons." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:850 +msgid ":guilabel:`DMFA Employer Class`: 3 digits code received from the NSSO (ONSS - RSZ)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1054 -msgid "**14**: Additional vacation days for employment start or resumption." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:851 +msgid ":guilabel:`Expeditor Number ONSS`: Not Mandatory (see technical documentation of the module for more information)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1055 -msgid "**15**: Flexible vacation days." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:853 +msgid ":guilabel:`PEM Certificate`, :guilabel:`PEM Passphare`, :guilabel:`KEY file`: check the module information for explanation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1057 -msgid "**Remunerations**: Aggregated by code per occupation:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:859 +msgid "DmfA - Multifunctional Declaration" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1059 -msgid "**1**: Regular salary amounts excluding certain indemnities." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:864 +msgid "DmfA stands for \"Déclaration Multifonctionnelle\" or \"Multifunctionele Aangifte.\" It has replaced the quarterly ONSS declaration since the first quarter of 2003. Through this declaration, employers submit salary and working time data for their employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1060 -msgid "**2**: Bonuses and similar benefits granted independently of actual working days." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:868 +msgid "These data are processed in a way that allows all social security institutions to work with the same information. The declaration is called \"multifunctional\" because it is used not only for social security contribution calculations and reductions but also as a data source for institutions managing social security rights and benefits." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1061 -msgid "**3**: Severance payments expressed in working hours." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:873 +msgid "Sectors utilizing DmfA data include:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1062 -msgid "**7**: Simple vacation pay for exiting employees (subject to contributions)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:875 +msgid "Health insurance" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1063 -msgid "**10**: Personal use of a company vehicle and other mobility benefits." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:876 +msgid "Unemployment benefits" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1064 -msgid "**11**: Simple vacation pay for exiting employees (not subject to contributions)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:877 +msgid "Pensions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1065 -msgid "**12**: Advance vacation pay paid by a previous employer (not subject to contributions)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:878 +msgid "Occupational risks (Fedris)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1067 -msgid "**Contributions**: Employer and employee contributions, such as:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:879 +msgid "Family allowances" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1069 -msgid "**256**: Asbestos fund contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:880 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:89 +msgid "Annual leave" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1070 -msgid "**255**: Special work accident contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:882 +msgid "All employers registered with ONSS must submit a DmfA declaration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1071 -msgid "**495**: Total employer + 13.07% employee contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:885 +msgid "Relationship with Dimona and DRS" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1072 -msgid "**809**: Enterprise closure fund contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:887 +msgid "DmfA is closely linked to two other mandatory declarations:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1073 -msgid "**810**: Special enterprise closure fund contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:890 +msgid "Dimona (immediate declaration)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1074 -msgid "**831**: Auxiliary Joint Committee for Employees (CP200) contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:892 +msgid "Dimona records the start and end of an employment relationship with an employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1075 -msgid "**855**: Wage restraint contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:895 +msgid "DRS (social risks declaration)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1076 -msgid "**856**: Special social security contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:897 +msgid "During an employment relationship, various social risks may arise, such as termination, workplace accidents, or long-term illness. When a social risk occurs, social security institutions require additional information beyond that provided by DmfA and Dimona." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1077 -msgid "**859**: Temporary unemployment contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:901 +msgid "DRS is now primarily an electronic declaration, though paper submissions remain possible." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1080 -msgid "Batch declaration" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:904 +msgid "Who submits the DmfA declaration?" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1085 -msgid "Batch declarations require technical knowledge, including SSH keys, SFTP servers, and electronic signatures. Employers should refer to the `official batch documentation `_ and `process overview `_." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:907 +msgid "Self-declaration options" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1090 -msgid "A batch submission generates three files:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:909 +msgid "Employers can submit their DmfA declaration themselves via:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1092 -msgid "**Declaration file** (e.g., FI.DMFA.112768.20250109.00014.R.1.1)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:911 +msgid "**Web Submission:** Suitable for employers with a small workforce. Declarations are entered directly through the social security portal." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1093 -msgid "**Launch file** (e.g., GO.DMFA.112768.20250109.00014.R.1)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:913 +msgid "**Batch Submission:** Designed for large employers or organizations handling multiple declarations (e.g., social secretariats, payroll software providers). Declarations are submitted via file transfer (FTP, SFTP, etc.)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1094 -msgid "**Electronic signature file** (e.g., FS.DMFA.112768.20250109.00014.R.1.1) (only for real declarations, not tests)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:918 +msgid "Advantages of web submission" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1097 -msgid "The full process includes creating, sending, validating, and potentially correcting declarations. Rejections and anomalies must be addressed before final acceptance." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:920 +msgid "**Automatic access to the company's employee list**: Based on Dimona data. If an employee is missing, they must first be declared via Dimona. After 24 hours, the employee list is updated, allowing for an accurate DmfA submission." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1103 -msgid "**Creation of the Declaration**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:923 +msgid "**Automatic calculation of net payable amount**: Once all required data is entered, the system calculates the total payable amount." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1105 -msgid "Create an XML document containing employee benefit data, remuneration, and contributions for the company." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:925 +msgid "**Reduction calculations**: The system calculates applicable reductions, except for reductions under code \"0001\" (personal contribution reductions for low-income workers). Employers need to check the relevant boxes and, if necessary, provide additional details." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1107 -msgid "More information on XML files can be found in the *Specifications* page." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:930 +msgid "Advantages of batch submission" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1109 -msgid "**Sending the Declaration**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:932 +msgid "**Submission of large volumes of declarations**: Ideal for organizations managing multiple payrolls." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1111 -msgid "Use FTP or SFTP for sending the file. Access requires prior authorization for secure zone access by a local manager." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:934 +msgid "**Quick response on acceptance status**: Employers receive immediate feedback on whether their declaration has been accepted." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1113 -msgid "Detailed instructions are available on the `Introduce and Modify (via batch) `_." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:936 +msgid "**Error reporting**: The system generates a report on detected anomalies, regardless of acceptance status." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1116 -msgid "**File Acknowledgment Receipt**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:938 +msgid "**Automatic correction of calculation errors**: When possible, errors are corrected automatically, and employers are notified of adjustments." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1118 -msgid "**Positive Receipt**: Indicates the file can be processed. However, this does not guarantee acceptance." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:942 +msgid "Third-Party submission options" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1120 -msgid "**Negative Receipt**: Indicates issues with the file structure or access rights." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:944 +msgid "Employers who do not wish to submit the DmfA themselves can delegate the task to:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1122 -msgid "**Notification and Ticket Number for the Declaration**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:946 +msgid "**Accredited Social Secretariats**: These organizations handle payroll and declaration tasks on behalf of employers." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1124 -msgid "A positive notification is sent for each accepted declaration." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:948 +msgid "**Service Providers**: These may be companies or individuals with whom the employer has a contractual agreement to manage payroll declarations securely." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1125 -msgid "Negative notification: Provides information on encountered anomalies." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:951 +msgid "For more information on accredited social secretariats or service providers, please refer to the relevant `official DmfA documentation `_." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1127 -msgid "**Sending PID**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:958 +msgid "The declaration is generated under :menuselection:`Payroll app --> Reporting --> Belgium --> DmfA` as is supposed to work properly after several required configuration steps." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1129 -msgid "Employers and SSA will receive PID and version numbers via batch for declarations." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:962 +msgid "Company" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1131 -msgid "**Modification Notification with System Corrections**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:964 +msgid "To generate a valid DmfA declaration, specific company and employer-related information is required, (under :menuselection:`Payroll app --> Configuration --> Settings`). These include:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1133 -msgid "If corrections are made, a modification notification is sent with corrected values." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:967 +msgid ":guilabel:`ONSS Company ID`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1138 -msgid "Double holiday pay" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:968 +msgid ":guilabel:`ONSS Registration Number`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1140 -msgid "Double holiday pay is an additional bonus paid to employees and workers during their annual leave. The amount depends on the employee's or worker's salary." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:969 +msgid ":guilabel:`DMFA Employer Class`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1144 -msgid "How is double holiday pay calculated?" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:970 +msgid ":guilabel:`ONSS Certificate`: certificate for signature file generation (required for batch declarations)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1146 -msgid "For employees, double holiday pay amounts to 92% of their gross salary for the month when they take their main annual leave. This amount is calculated based on the number of months worked or considered equivalent in the previous year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:972 +msgid "VAT :guilabel:`Company Number`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1151 -msgid "Impact of additional or European leave" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:973 +msgid ":guilabel:`Revenue Code`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1153 -msgid "If you take additional or European leave, your employer will pay you regular holiday pay for that leave. However, the following year, this amount will be deducted from your double holiday pay. This is because additional leave is considered an advance on the next year's legal leave." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:974 +msgid ":guilabel:`FFE Employer Type` (Fonds de Fermeture d'Entreprise)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1158 -msgid "Factors affecting the calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:979 +msgid "Additionally, each employee must be assigned to a valid working address, identified with a DmfA code, in their employee record. This operating unit must be linked to a valid ONSS identification number to ensure compliance with declaration requirements. Failing to configure this properly may result in errors during the declaration submission process." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1160 -msgid "**Months Worked**: The calculation is based on the number of months you worked in the previous year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:984 +msgid "On the employee form, the :guilabel:`Work Address` must be defined." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1162 -msgid "**Absences**: If you had unpaid absences, they may reduce your double holiday pay." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:986 +msgid "Under :menuselection:`Payroll app --> Configuration --> DMFA: Work Locations`, you can link the work address to a ONSS identification number." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1163 -msgid "**Variable Revenues**: Bonuses and commissions earned in the previous year can impact the total amount of double holiday pay." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "DmfA - Work Location ONSS ID." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1165 -msgid "**Withholding Taxes**: The double holiday pay is subject to income tax deductions, which depend on your annual earnings and family situation." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:993 +msgid "Work entry type" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1169 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1489 -msgid "Withholding tax calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:995 +msgid "A DmfA code should be defined for each work entry type that is declared. Under :menuselection:`Payroll app --> Configuration --> Work Entries --> Work Entry Types`, specify the :guilabel:`DMFA code`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1171 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1491 -msgid "The withholding tax is calculated using a progressive rate system. The process involves:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1000 +msgid "Potential configuration errors" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1173 -msgid "**Identify the Employee's Annual Taxable Revenue**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1002 +msgid "During the declaration generation process, configuration issues may arise, triggering errors such as:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1175 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1495 -msgid "Compute the annualized salary, including benefits in kind (e.g., company car, internet, mobile phone, laptop)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1005 +msgid "Terminated employees without or with invalid start/end notice period" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1177 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1497 -msgid "Apply reductions for dependent children." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1006 +msgid "Invalid NISS number for some employees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1179 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1499 -msgid "**Apply Tax Rates**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1007 +msgid "Work addresses not linked to an ONSS identification code" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1181 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1501 -msgid "Use predefined tax brackets to determine the base withholding tax rate." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1008 +msgid "Work entry type missing a corresponding DmfA code" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1182 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1502 -msgid "If applicable, apply a reduction based on the number of dependent children." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1009 +msgid "Other inconsistencies in employer or employee records" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1185 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1505 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:146 -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:96 -msgid "Tax brackets" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1011 +msgid "Employers should ensure accurate configuration to avoid delays and rejection of their declarations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1187 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1507 -msgid "The withholding tax is applied progressively based on the following brackets (as of 2025):" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1014 +msgid "Web declaration" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1190 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1510 -msgid "Lower Bound" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "DmfA - Web Declaration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1190 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1510 -msgid "Upper Bound" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1019 +msgid "A web declaration generates a PDF summarizing the company's general information, as well as all employee data that must be manually entered into the system. This includes:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1190 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1510 -msgid "Tax Rate" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1022 +msgid "For the company:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1192 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1512 -msgid "0.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "DmfA - PDF Company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1192 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1512 -msgid "10,415.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1027 +msgid "For a specific employee:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1192 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1512 -msgid "0.00%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "DmfA - PDF Employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1194 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1514 -msgid "10,415.01" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1032 +msgid "**Occupations**: Work schedules, part-time codes, parental leave, exploitation unit, reference working hours." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1194 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1514 -msgid "13,330.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1034 +msgid "**Services**: Aggregated work performance (in days and hours) for the quarter, categorized by occupation and type. The codification of working time in the DmfA declaration ensures accurate reporting of employee activities. Each code corresponds to a specific type of working time or absence. For a complete and detailed list of codes, please refer to the official social security website: `socialsecurity.be `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1194 -msgid "19.17%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1040 +msgid "**1**: All performances covered by a salary subject to ONSS contributions, excluding legal and additional vacation for workers." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1196 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1516 -msgid "13,330.01" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1042 +msgid "**2**: Legal vacation days for workers." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1196 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1516 -msgid "16,960.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1043 +msgid "**3**: Additional vacation days for workers." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1196 -msgid "21.20%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1044 +msgid "**4**: Compensatory rest days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1198 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1518 -msgid "16,960.01" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1045 +msgid "**5**: Days of illness or non-occupational accident." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1198 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1518 -msgid "20,340.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1046 +msgid "**6**: Family leave days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1198 -msgid "26.25%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1047 +msgid "**7**: Maternity or paternity leave days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1200 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1520 -msgid "20,340.01" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1048 +msgid "**8**: Strike days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1200 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1520 -msgid "23,020.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1049 +msgid "**9**: Temporary unemployment for economic reasons." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1200 -msgid "31.30%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1050 +msgid "**10**: Temporary unemployment for bad weather." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1202 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1522 -msgid "23,020.01" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1051 +msgid "**11**: Temporary unemployment for force majeure." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1202 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1522 -msgid "25,710.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1052 +msgid "**12**: Professional training days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1202 -msgid "34.33%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1053 +msgid "**13**: Suspension for disciplinary reasons." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1204 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1524 -msgid "25,710.01" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1054 +msgid "**14**: Additional vacation days for employment start or resumption." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1204 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1304 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1524 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1624 -msgid "31,070.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1055 +msgid "**15**: Flexible vacation days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1204 -msgid "36.34%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1057 +msgid "**Remunerations**: Aggregated by code per occupation:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1206 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1526 -msgid "31,070.01" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1059 +msgid "**1**: Regular salary amounts excluding certain indemnities." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1206 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1526 -msgid "33,810.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1060 +msgid "**2**: Bonuses and similar benefits granted independently of actual working days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1206 -msgid "39.37%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1061 +msgid "**3**: Severance payments expressed in working hours." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1208 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1528 -msgid "33,810.01" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1062 +msgid "**7**: Simple vacation pay for exiting employees (subject to contributions)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1208 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1528 -msgid "44,770.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1063 +msgid "**10**: Personal use of a company vehicle and other mobility benefits." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1208 -msgid "42.39%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1064 +msgid "**11**: Simple vacation pay for exiting employees (not subject to contributions)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1210 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1530 -msgid "44,770.01" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1065 +msgid "**12**: Advance vacation pay paid by a previous employer (not subject to contributions)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1210 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1212 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1530 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1532 -msgid "58,460.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1067 +msgid "**Contributions**: Employer and employee contributions, such as:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1210 -msgid "47.44%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1069 +msgid "**256**: Asbestos fund contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1212 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1532 -msgid "∞" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1070 +msgid "**255**: Special work accident contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1212 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1532 -msgid "53.50%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1071 +msgid "**495**: Total employer + 13.07% employee contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1216 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1536 -msgid "Tax exemption" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1072 +msgid "**809**: Enterprise closure fund contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1218 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1538 -msgid "A withholding tax exemption is granted when the normal annual gross income does not exceed a specific threshold, which is determined based on the number of dependent children [2]." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1073 +msgid "**810**: Special enterprise closure fund contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1221 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1541 -msgid "A disabled dependent child counts as two." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1074 +msgid "**831**: Auxiliary Joint Committee for Employees (CP200) contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1223 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1543 -msgid "The method involves referring to a two-column table:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1075 +msgid "**855**: Wage restraint contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1225 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1545 -msgid "**Column 1**: Indicates the number of dependent children." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1076 +msgid "**856**: Special social security contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1226 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1546 -msgid "**Column 2**: Specifies the maximum allowable normal annual gross income, based on the number of dependent children listed in Column 1, which must not be exceeded to qualify for full or partial exemption from withholding tax." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1077 +msgid "**859**: Temporary unemployment contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1230 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1550 -msgid "After determining the annual gross income, two scenarios may arise:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1080 +msgid "Batch declaration" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1232 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1552 -msgid "If the annual income exceeds the threshold, no exemption is granted." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1085 +msgid "Batch declarations require technical knowledge, including SSH keys, SFTP servers, and electronic signatures. Employers should refer to the `official batch documentation `_ and `process overview `_." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1233 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1553 -msgid "If the annual income does not exceed the threshold, an exemption will be applied." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1090 +msgid "A batch submission generates three files:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1235 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1555 -msgid "The amount of this exemption corresponds to the difference between the annual gross income and the threshold amount." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1092 +msgid "**Declaration file** (e.g., FI.DMFA.112768.20250109.00014.R.1.1)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1238 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1558 -msgid "Of course, if this difference exceeds the base withholding tax amount, no withholding tax will be due." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1093 +msgid "**Launch file** (e.g., GO.DMFA.112768.20250109.00014.R.1)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1242 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1298 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1562 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1618 -msgid "No. of Children" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1094 +msgid "**Electronic signature file** (e.g., FS.DMFA.112768.20250109.00014.R.1.1) (only for real declarations, not tests)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1242 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1562 -msgid "Max Revenue (EUR)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1097 +msgid "The full process includes creating, sending, validating, and potentially correcting declarations. Rejections and anomalies must be addressed before final acceptance." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1244 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1564 -msgid "18,400.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1103 +msgid "**Creation of the Declaration**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1246 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1566 -msgid "21,930.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1105 +msgid "Create an XML document containing employee benefit data, remuneration, and contributions for the company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1248 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1568 -msgid "28,270.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1107 +msgid "More information on XML files can be found in the *Specifications* page." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1250 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1570 -msgid "35,330.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1109 +msgid "**Sending the Declaration**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1252 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1572 -msgid "42,390.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1111 +msgid "Use FTP or SFTP for sending the file. Access requires prior authorization for secure zone access by a local manager." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1254 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1574 -msgid "49,450.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1113 +msgid "Detailed instructions are available on the `Introduce and Modify (via batch) `_." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1256 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1576 -msgid "56,510.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1116 +msgid "**File Acknowledgment Receipt**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1258 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1578 -msgid "63,570.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1118 +msgid "**Positive Receipt**: Indicates the file can be processed. However, this does not guarantee acceptance." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1260 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1580 -msgid "70,630.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1120 +msgid "**Negative Receipt**: Indicates issues with the file structure or access rights." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1262 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1582 -msgid "77,690.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1122 +msgid "**Notification and Ticket Number for the Declaration**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1264 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1584 -msgid "84,750.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1124 +msgid "A positive notification is sent for each accepted declaration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1266 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1125 +msgid "Negative notification: Provides information on encountered anomalies." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1127 +msgid "**Sending PID**" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1129 +msgid "Employers and SSA will receive PID and version numbers via batch for declarations." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1131 +msgid "**Modification Notification with System Corrections**" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1133 +msgid "If corrections are made, a modification notification is sent with corrected values." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1138 +msgid "Double holiday pay" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1140 +msgid "Double holiday pay is an additional bonus paid to employees and workers during their annual leave. The amount depends on the employee's or worker's salary." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1144 +msgid "How is double holiday pay calculated?" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1146 +msgid "For employees, double holiday pay amounts to 92% of their gross salary for the month when they take their main annual leave. This amount is calculated based on the number of months worked or considered equivalent in the previous year." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1151 +msgid "Impact of additional or European leave" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1153 +msgid "If you take additional or European leave, your employer will pay you regular holiday pay for that leave. However, the following year, this amount will be deducted from your double holiday pay. This is because additional leave is considered an advance on the next year's legal leave." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1158 +msgid "Factors affecting the calculation" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1160 +msgid "**Months Worked**: The calculation is based on the number of months you worked in the previous year." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1162 +msgid "**Absences**: If you had unpaid absences, they may reduce your double holiday pay." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1163 +msgid "**Variable Revenues**: Bonuses and commissions earned in the previous year can impact the total amount of double holiday pay." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1165 +msgid "**Withholding Taxes**: The double holiday pay is subject to income tax deductions, which depend on your annual earnings and family situation." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1169 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1489 +msgid "Withholding tax calculation" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1171 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1491 +msgid "The withholding tax is calculated using a progressive rate system. The process involves:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1173 +msgid "**Identify the Employee's Annual Taxable Revenue**:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1175 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1495 +msgid "Compute the annualized salary, including benefits in kind (e.g., company car, internet, mobile phone, laptop)." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1177 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1497 +msgid "Apply reductions for dependent children." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1179 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1499 +msgid "**Apply Tax Rates**:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1181 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1501 +msgid "Use predefined tax brackets to determine the base withholding tax rate." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1182 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1502 +msgid "If applicable, apply a reduction based on the number of dependent children." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1185 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1505 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:146 +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:96 +msgid "Tax brackets" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1187 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1507 +msgid "The withholding tax is applied progressively based on the following brackets (as of 2025):" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1190 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1510 +msgid "Lower Bound" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1190 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1510 +msgid "Upper Bound" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1190 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1510 +msgid "Tax Rate" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1192 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1512 +msgid "0.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1192 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1512 +msgid "10,415.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1192 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1512 +msgid "0.00%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1194 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1514 +msgid "10,415.01" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1194 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1514 +msgid "13,330.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1194 +msgid "19.17%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1196 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1516 +msgid "13,330.01" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1196 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1516 +msgid "16,960.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1196 +msgid "21.20%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1198 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1518 +msgid "16,960.01" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1198 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1518 +msgid "20,340.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1198 +msgid "26.25%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1200 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1520 +msgid "20,340.01" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1200 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1520 +msgid "23,020.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1200 +msgid "31.30%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1202 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1522 +msgid "23,020.01" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1202 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1522 +msgid "25,710.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1202 +msgid "34.33%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1204 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1524 +msgid "25,710.01" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1204 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1304 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1524 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1624 +msgid "31,070.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1204 +msgid "36.34%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1206 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1526 +msgid "31,070.01" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1206 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1526 +msgid "33,810.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1206 +msgid "39.37%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1208 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1528 +msgid "33,810.01" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1208 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1528 +msgid "44,770.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1208 +msgid "42.39%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1210 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1530 +msgid "44,770.01" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1210 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1212 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1530 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1532 +msgid "58,460.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1210 +msgid "47.44%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1212 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1532 +msgid "∞" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1212 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1532 +msgid "53.50%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1216 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1536 +msgid "Tax exemption" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1218 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1538 +msgid "A withholding tax exemption is granted when the normal annual gross income does not exceed a specific threshold, which is determined based on the number of dependent children [2]." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1221 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1541 +msgid "A disabled dependent child counts as two." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1223 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1543 +msgid "The method involves referring to a two-column table:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1225 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1545 +msgid "**Column 1**: Indicates the number of dependent children." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1226 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1546 +msgid "**Column 2**: Specifies the maximum allowable normal annual gross income, based on the number of dependent children listed in Column 1, which must not be exceeded to qualify for full or partial exemption from withholding tax." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1230 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1550 +msgid "After determining the annual gross income, two scenarios may arise:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1232 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1552 +msgid "If the annual income exceeds the threshold, no exemption is granted." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1233 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1553 +msgid "If the annual income does not exceed the threshold, an exemption will be applied." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1235 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1555 +msgid "The amount of this exemption corresponds to the difference between the annual gross income and the threshold amount." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1238 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1558 +msgid "Of course, if this difference exceeds the base withholding tax amount, no withholding tax will be due." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1242 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1298 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1562 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1618 +msgid "No. of Children" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1242 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1562 +msgid "Max Revenue (EUR)" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1244 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1564 +msgid "18,400.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1246 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1566 +msgid "21,930.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1248 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1568 +msgid "28,270.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1250 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1570 +msgid "35,330.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1252 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1572 +msgid "42,390.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1254 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1574 +msgid "49,450.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1256 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1576 +msgid "56,510.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1258 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1578 +msgid "63,570.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1260 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1580 +msgid "70,630.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1262 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1582 +msgid "77,690.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1264 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1584 +msgid "84,750.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1266 #: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1586 msgid "91,810.00" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1270 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1590 -msgid "Tax reductions" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1270 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1590 +msgid "Tax reductions" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1272 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1592 +msgid "When there is no justification for fully or partially exempting the exceptional allowance from withholding tax, it is still possible to grant a reduction in withholding tax." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1275 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1595 +msgid "To determine eligibility for this reduction, one must check whether the normal annual gross salary exceeds a certain higher threshold, which varies according to the number of dependent children [3]. This threshold is higher than the one used for exemption purposes." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1279 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1599 +msgid "A disabled child counts as two." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1281 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1601 +msgid "The method involves referring to a three-column table:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1283 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1603 +msgid "**Column 1**: Indicates the number of dependent children (up to a maximum of 5)." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1284 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1604 +msgid "**Column 2**: Specifies the percentage reduction in withholding tax, based on the number of dependent children listed in Column 1, which must not be exceeded to qualify for the reduction." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1286 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1606 +msgid "**Column 3**: Shows the threshold amount that must not be exceeded, corresponding to the number of dependent children listed in Column 1." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1289 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1609 +msgid "Two scenarios may arise:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1291 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1611 +msgid "If the threshold amount is exceeded, no reduction will be granted." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1292 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1612 +msgid "If the threshold amount is not exceeded, a reduction will be applied to the withholding tax amount, up to a percentage rate determined in Column 2." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1295 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1615 +msgid "For employees with dependent children, tax reductions apply as follows:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1298 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1618 +msgid "Reduction (%)" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1298 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1618 +msgid "Max Revenue" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1300 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1620 +msgid "7.5%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1300 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1302 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1620 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1622 +msgid "28,245.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1302 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1622 +msgid "20.0%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1304 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1624 +msgid "35.0%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1306 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1626 +msgid "55.0%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1306 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1626 +msgid "36,720.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1308 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1628 +msgid "5+" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1308 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1628 +msgid "75.0%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1308 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1628 +msgid "39,550.00" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1312 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1632 +msgid "Final tax calculation" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1314 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1634 +msgid "The final withholding tax amount is:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1316 +msgid "\\text{Tax} = \\text{Gross Double Holiday} \\times \\text{Applicable Tax Rate} -\n" +"\\text{Reduction (if applicable)}" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1322 +msgid "The resulting tax is deducted from the gross double holiday salary to determine the net amount payable to the employee." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1325 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1645 +msgid "The calculation considers work duration, absences, variable revenue, and applicable withholding taxes. Odoo automates these calculations to ensure compliance with Belgian labor laws and tax regulations." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1330 +msgid "Generate a batch in Odoo" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1332 +msgid "Navigate to :menuselection:`Payroll App --> Payslips --> Batches` and create a new record with valid dates (here december 2024)" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1335 +msgid "Then click the **Generate Payslips** button, select the CP200 salary structure type and the Thirteen Month salary structure. You can also filter eligible employees by department and / or job position." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Double Holiday Batch Wizard." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1342 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1663 +msgid "Once validated, a payslip is generated for each employee." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Double Holiday Payslips." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1347 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1668 +msgid "You can now check the different payslips before validation. Once validated, the PDF files are generated and posted on employee portals as for classic payslips." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Double Holiday PDF." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1356 +msgid "Double holiday pay is a significant benefit that rewards employees for their work in the previous year. Understanding how it is calculated helps in better financial planning for the holiday period." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1362 +msgid "Eco vouchers" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1367 +msgid "Eco vouchers are a tax-free employee benefit designed to support the purchase of environmentally-friendly products and services. These vouchers are ordered via external providers and are exempt from social security contributions." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1372 +msgid "Eligibility & allocation" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1374 +msgid "Employees who have worked during the **reference period (01/06/N-1 - 31/05/N)** are eligible for up to **250€** in eco vouchers, which are granted at the beginning of **July**." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1378 +msgid "For 2025, employees must have worked between **01/06/2024 and 31/05/2025** to qualify." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1380 +msgid "For employees who join during the reference period, the voucher amount is prorated based on their worked days." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1384 +msgid "An employee hired on **06/01**, having worked **6 out of 12 months**, would receive:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1386 +msgid "250\\text{€} \\times (6/12) = 125\\text{€}" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1391 +msgid "For part-time employees, the amount is adjusted as follows:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1396 +msgid "Work Regime" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1397 +msgid "Voucher Amount (€)" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1398 +msgid "4/5" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1399 +msgid "250€" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1400 +msgid "3/5" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1401 +msgid "200€" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1402 +msgid "1/2" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1403 +msgid "125€" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1404 +msgid "< 1/2" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1405 +msgid "100€" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1408 +msgid "If an employee starts on **1st September** in **full-time** and then switches to **half-time** on **1st April 2024**, the calculation will be:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1411 +msgid "250\\text{€} \\times (7/12) + 125\\text{€} \\times (2/12) = 166\\text{€}" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1417 +msgid "Exceptions & adjustments" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1419 +msgid "If an employee worked full-time for the entire reference period but did not receive **250€**, certain non-assimilated leave days may have affected the calculation." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1422 +msgid "The following leave types are **not** considered for eco-voucher entitlement:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1424 +msgid "**Unpaid leaves**" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1425 +msgid "**Sick leave compensated by mutual insurance** (after 30 days of work incapacity)" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1428 +msgid "Usage & validity" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1430 +msgid "Eco vouchers are valid for **24 months** from the date of issuance." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1433 +msgid "The list of eligible products and services that can be purchased with eco vouchers is available here:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1436 +msgid "`Eco-Voucher Eligible Products `_" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1441 +msgid "End of year bonus" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1443 +msgid "This document explains the calculation of the thirteenth-month salary (year-end bonus) in Belgium within Odoo. The calculation considers the employee's contracts, working time rates, and applicable taxes." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1448 +msgid "Calculation of the thirteenth-month salary" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1451 +msgid "Eligibility criteria" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1453 +msgid "The employee must have worked for at least **six complete months** in the year." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1454 +msgid "Both full-time and part-time employees are eligible, with prorated calculations based on work time." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1458 +msgid "Salary calculation" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1460 +msgid "The thirteenth-month salary is computed as follows:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1462 +msgid "**Determine the basic salary**:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1464 +msgid "Retrieve the employee's contractual wage." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1465 +msgid "Identify the applicable work rate." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1467 +msgid "**Compute eligible months**:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1469 +msgid "If explicitly provided (`MONTHS` input), use the given number of months." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1470 +msgid "Otherwise, calculate the number of complete months worked." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1471 +msgid "Prorate the salary for partial-year work." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1473 +msgid "**Adjust for absences**:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1475 +msgid "Deduct unpaid absences to obtain the presence prorata." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1476 +msgid "Consider up to 60 days of sick leave as paid time off." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1478 +msgid "**Include variable revenues**:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1480 +msgid "If explicitly provided (`VARIABLE` input), use the given value." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1481 +msgid "Otherwise, calculate the average variable revenue over the last year." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1483 +msgid "**Final amount**:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1485 +msgid "The final thirteenth-month amount is the sum of the prorated fixed salary and average variable revenues." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1493 +msgid "**Identify the employee's annual taxable revenue**:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1514 +msgid "23.22%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1516 +msgid "25.23%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1518 +msgid "30.28%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1520 +msgid "35.33%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1522 +msgid "38.36%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1524 +msgid "40.38%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1526 +msgid "43.41%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1528 +msgid "46.44%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1530 +msgid "51.48%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1636 +msgid "\\text{Tax} = \\text{Gross Thirteenth Month} \\times \\text{Applicable Tax Rate} -\n" +"\\text{Reduction (if applicable)}" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1642 +msgid "The resulting tax is deducted from the gross thirteenth-month salary to determine the net amount payable to the employee." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1652 +msgid "Navigate to :menuselection:`Payroll app --> Payslips --> Batches` and create a new record with valid dates (here december 2024)." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1655 +msgid "Then click the :guilabel:`Generate Payslips` button, select the :guilabel:`CP200: Belgian Employee` :guilabel:`Salary Structure Type` and the :guilabel:`CP200: Employees 13th Month` :guilabel:`Salary Structure`. You can also filter eligible employees by :guilabel:`Department` and / or :guilabel:`Job Position`." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "End of Year Bonus Batch Wizard." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "End of Year Bonus Payslips." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "End of Year Bonus PDF." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1677 +msgid "Holiday pay recovery" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1679 +msgid "This document explains how Odoo calculates the recovery of holiday pay (both simple and double) for employees in Belgium who have changed employers. When an employee moves from one company to another, their previous employer may have already paid their holiday pay for the previous year. This amount needs to be recovered by the new employer, and this guide outlines how this is managed in Odoo." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1685 +msgid "Understanding holiday pay in Belgium" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1687 +msgid "In Belgium, employees are entitled to annual leave and corresponding holiday pay, which consists of:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1689 +msgid "**Simple holiday pay**: Regular salary payments for the days of leave taken." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1690 +msgid "**Double holiday pay**: An additional payment, typically equal to approximately 92% of the gross monthly salary, given when employees take their annual leave." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1693 +msgid "When an employee changes jobs, their previous employer may have already paid these amounts. To avoid double payment, the new employer needs to recover the amounts already paid." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1697 +msgid "Recovery of simple holiday pay" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1699 +msgid "The recovery of simple holiday pay in Odoo is based on the following criteria:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1701 +msgid "The recovery applies if the employee has taken leave in the current year and their previous employer already paid the holiday pay." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1703 +msgid "The calculation considers the number of leave days taken and the hours worked per week." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1704 +msgid "The recovery process is split into:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1706 +msgid "**Year N**: The current year's holiday pay recovery." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1272 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1592 -msgid "When there is no justification for fully or partially exempting the exceptional allowance from withholding tax, it is still possible to grant a reduction in withholding tax." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1707 +msgid "**Year N-1**: The recovery of holiday pay from the previous year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1275 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1595 -msgid "To determine eligibility for this reduction, one must check whether the normal annual gross salary exceeds a certain higher threshold, which varies according to the number of dependent children [3]. This threshold is higher than the one used for exemption purposes." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1709 +msgid "The system checks:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1279 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1599 -msgid "A disabled child counts as two." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1711 +msgid "If the employee's first contract date with the company was in the previous year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1281 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1601 -msgid "The method involves referring to a three-column table:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1712 +msgid "If the employee has a pending holiday pay recovery amount." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1283 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1603 -msgid "**Column 1**: Indicates the number of dependent children (up to a maximum of 5)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1713 +msgid "If the recovery has not already been processed." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1714 +msgid "If the employee has taken annual leave." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1716 +msgid "If all conditions are met, Odoo calculates the amount to be deducted from the payroll to account for the holiday pay already received from the previous employer." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1720 +msgid "Recovery of double holiday pay" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1722 +msgid "The recovery of double holiday pay follows these steps:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1724 +msgid "The system verifies the employee's contract and determines their employment duration." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1725 +msgid "The gross salary is calculated based on the employee's contract." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1726 +msgid "The number of months worked in the previous year is identified." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1727 +msgid "A threshold amount is computed as follows:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1729 +msgid "\\text{Threshold} = \\text{Current monthly salary} \\times \\text{Months worked in previous year}\n" +"\\times \\text{Occupation rate} \\times 7.67%" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1735 +msgid "If the amount on the holiday certificate from the previous employer is lower than this threshold, no limit applies." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1738 +msgid "The system recovers the lower of:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1740 +msgid "The calculated threshold." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1741 +msgid "The actual amount paid by the previous employer." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1743 +msgid "If the employee has worked for more than 12 months in the current company, no double holiday pay needs to be recovered." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1747 +msgid "How to configure in Odoo" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1749 +msgid "In the employee form view, under the :guilabel:`Settings` tab, you can enter the various amounts from holiday attests provided by the new employee." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Holiday Pay Recovery Configuration." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1755 +msgid "For simple holiday pay recovery, you need to enter:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1757 +msgid "The :guilabel:`Number of days` for paid leave" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1758 +msgid "The :guilabel:`Amount to recover` by the employee" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1761 +msgid "The :guilabel:`Recovered Amount` field displays the amount already recovered." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1763 +msgid "For double holiday pay recovery, you must enter a **line for each employer's holiday attest**. Each line should include:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1766 +msgid "The :guilabel:`# Months` (number of months) the employee worked for that employer" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1767 +msgid "The :guilabel:`Amount` provided to the employee" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1768 +msgid "The :guilabel:`Occupational Rate`" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1770 +msgid "Odoo uses this data to compute a **recovery limit**. If the employee now has a lower salary, the full amount cannot be recovered." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1774 +msgid "Be careful not to mix holiday attests for the current year (N) and the previous year (N-1)." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1776 +msgid "For simple holiday pay recovery, the system deducts the amount from each legal time-off period until:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1779 +msgid "The **total amount** has been fully recovered, or" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1780 +msgid "The **number of time-off days** has been matched (if the employee's current salary is lower than before)." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Holiday Pay Recovery Simple Payslip." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1786 +msgid "Once the **payslip** is validated and paid, the recovered simple holiday pay is reflected in the employee form view." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Holiday Pay Recovery Simple Amount." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1792 +msgid "On the double holiday payslip, click :guilabel:`Compute Double Pay Recovery` to open a wizard that helps calculate the recoverable amount." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1795 +msgid "In the :guilabel:`Double Pay Recovery Computation` wizard, you'll find:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1797 +msgid "The relevant holiday attests listed in the :guilabel:`Occupation Lines`" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1798 +msgid "The :guilabel:`Double Pay To Recover` amount based on the threshold" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1800 +msgid "This amount is **editable** if manual adjustments are needed." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Holiday Pay Recovery Double Wizard." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1805 +msgid "Once validated, the double pay recovery is applied to the payslip." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Holiday Pay Recovery Double Amount." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1810 +msgid "Odoo automates the recovery of both **simple** and **double** holiday pay, ensuring compliance with **Belgian labor laws**. By analyzing contract details, employment duration, and past payments, Odoo calculates the necessary deductions and prevents duplicate holiday pay payments." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1817 +msgid "Individual accounts" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1820 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1973 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2132 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2316 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2842 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3064 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3134 +msgid "Introduction" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1822 +msgid "The individual account provides workers with a detailed overview of their earnings, deductions (such as social security contributions, withholding tax, etc.), and the working days performed, on a pay period basis. Additionally, it contains all relevant administrative data related to remuneration." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1828 +msgid "Required information in the individual account" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1830 +msgid "The individual account must include several mandatory details as determined by Royal Decree." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1832 +msgid "**Employer identification:**" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1834 +msgid "Name, address, ONSS number, ONVA number" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1835 +msgid "Relevant joint committee (or sub-committee)" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1836 +msgid "Name of the holiday fund for workers" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1837 +msgid "Insurer for work-related accidents" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1838 +msgid "Approved social secretariat" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1839 +msgid "Relevant affiliation numbers" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1841 +msgid "**Worker identification:**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1284 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1604 -msgid "**Column 2**: Specifies the percentage reduction in withholding tax, based on the number of dependent children listed in Column 1, which must not be exceeded to qualify for the reduction." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1843 +msgid "Name, address, date of birth, gender, tax status" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1286 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1606 -msgid "**Column 3**: Shows the threshold amount that must not be exceeded, corresponding to the number of dependent children listed in Column 1." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1844 +msgid "Type of employment contract, job title, professional qualification" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1289 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1609 -msgid "Two scenarios may arise:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1845 +msgid "Workplace location (or note if working at multiple locations)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1291 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1611 -msgid "If the threshold amount is exceeded, no reduction will be granted." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1846 +msgid "Start and end date of employment" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1292 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1612 -msgid "If the threshold amount is not exceeded, a reduction will be applied to the withholding tax amount, up to a percentage rate determined in Column 2." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1847 +msgid "Employee ID number, starting salary" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1295 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1615 -msgid "For employees with dependent children, tax reductions apply as follows:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1848 +msgid "Remuneration components and payment periodicity" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1298 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1618 -msgid "Reduction (%)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1850 +msgid "**Remuneration components:**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1298 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1618 -msgid "Max Revenue" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1852 +msgid "Per pay period (daily, weekly, bi-weekly, or monthly):" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1300 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1620 -msgid "7.5%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1854 +msgid "Number of working days and hours (regular, additional, and overtime)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1300 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1302 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1620 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1622 -msgid "28,245.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1855 +msgid "Days of work interruption and reasons (illness, vacations, public holidays, replacement days, compensatory rest days, etc.)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1302 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1622 -msgid "20.0%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1857 +msgid "Fixed or hourly salary, variable remuneration, bonuses, meal vouchers, eco vouchers, holiday pay (including early holiday pay if applicable), severance pay, year-end bonuses (as per sectoral or other collective labor agreements), benefits in kind and their estimated value" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1304 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1624 -msgid "35.0%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1860 +msgid "Gross amount of all remuneration components" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1306 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1626 -msgid "55.0%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1861 +msgid "Amounts subject to social and tax deductions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1306 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1626 -msgid "36,720.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1862 +msgid "Various social and tax deductions: personal ONSS contributions, withholding tax, special social security contributions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1308 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1628 -msgid "5+" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1864 +msgid "Net amount payable to the worker" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1308 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1628 -msgid "75.0%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1865 +msgid "Other payments made by the employer, including reimbursement of travel expenses, allowances, and other payments" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1308 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1628 -msgid "39,550.00" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1868 +msgid "Per quarter:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1312 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1632 -msgid "Final tax calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1870 +msgid "Number of actual working days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1314 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1634 -msgid "The final withholding tax amount is:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1871 +msgid "Days of work interruption by reason" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1316 -msgid "\\text{Tax} = \\text{Gross Double Holiday} \\times \\text{Applicable Tax Rate} -\n" -"\\text{Reduction (if applicable)}" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1872 +msgid "Total remuneration subject to social security contributions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1322 -msgid "The resulting tax is deducted from the gross double holiday salary to determine the net amount payable to the employee." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1873 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1878 +msgid "Employee social security contribution amounts" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1325 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1645 -msgid "The calculation considers work duration, absences, variable revenue, and applicable withholding taxes. Odoo automates these calculations to ensure compliance with Belgian labor laws and tax regulations." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1875 +msgid "Per year:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1330 -msgid "Generate a batch in Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1877 +msgid "Total amounts subject to social security contributions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1332 -msgid "Navigate to :menuselection:`Payroll App --> Payslips --> Batches` and create a new record with valid dates (here december 2024)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1879 +msgid "Taxable remuneration and other amounts" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1335 -msgid "Then click the **Generate Payslips** button, select the CP200 salary structure type and the Thirteen Month salary structure. You can also filter eligible employees by department and / or job position." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1880 +msgid "Withholding tax amount" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Double Holiday Batch Wizard." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1883 +msgid "Responsibility for establishing and updating the individual account" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1342 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1663 -msgid "Once validated, a payslip is generated for each employee." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1885 +msgid "Belgian employers using **Odoo Payroll** can generate the individual accounts of their workers." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Double Holiday Payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1887 +msgid "However, to ensure accurate record-keeping, employers must:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1347 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1668 -msgid "You can now check the different payslips before validation. Once validated, the PDF files are generated and posted on employee portals as for classic payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1889 +msgid "Ensure payment of sector-mandated year-end bonuses" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Double Holiday PDF." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1890 +msgid "Ensure that all public holidays, legal vacation days, and compensatory rest days are taken before the end of the year" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1356 -msgid "Double holiday pay is a significant benefit that rewards employees for their work in the previous year. Understanding how it is calculated helps in better financial planning for the holiday period." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1892 +msgid "Plan collective vacation and replacement public holidays in advance" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1362 -msgid "Eco vouchers" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1893 +msgid "Pay workers their holiday pay (including early holiday pay if applicable)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1367 -msgid "Eco vouchers are a tax-free employee benefit designed to support the purchase of environmentally-friendly products and services. These vouchers are ordered via external providers and are exempt from social security contributions." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1894 +msgid "Distribute due eco vouchers" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1372 -msgid "Eligibility & allocation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1895 +msgid "Pay any required travel expenses between home and work" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1374 -msgid "Employees who have worked during the **reference period (01/06/N-1 - 31/05/N)** are eligible for up to **250€** in eco vouchers, which are granted at the beginning of **July**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1897 +msgid "If these obligations are met, the corresponding data will be included in the individual account." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1378 -msgid "For 2025, employees must have worked between **01/06/2024 and 31/05/2025** to qualify." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1900 +msgid "Storage and retention period of the individual account" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1380 -msgid "For employees who join during the reference period, the voucher amount is prorated based on their worked days." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1902 +msgid "The individual account is a social document that must be kept by the employer for a specified period after its creation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1384 -msgid "An employee hired on **06/01**, having worked **6 out of 12 months**, would receive:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1905 +msgid "Employers may store individual accounts:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1386 -msgid "250\\text{€} \\times (6/12) = 125\\text{€}" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1907 +msgid "At the ONSS-registered address" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1391 -msgid "For part-time employees, the amount is adjusted as follows:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1908 +msgid "At a workplace" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1396 -msgid "Work Regime" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1909 +msgid "At their home or registered office if located in Belgium; otherwise, at the residence of a designated agent in Belgium" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1397 -msgid "Voucher Amount (€)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1911 +msgid "At the office of the approved social secretariat, if affiliated" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1398 -msgid "4/5" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1913 +msgid "Records must be kept legible and in a format allowing efficient oversight. The retention period is **five years** from the end of the annual closing of the account." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1399 -msgid "250€" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1917 +msgid "When must workers receive a copy of their individual account?" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1400 -msgid "3/5" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1919 +msgid "Each worker must receive a copy of their individual account:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1401 -msgid "200€" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1921 +msgid "**During employment:** Before March 1 of the following year" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1402 -msgid "1/2" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1922 +msgid "**At the end of employment:** Within two months following the end of the quarter in which the contract ended" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1403 -msgid "125€" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1924 +msgid "**If additional payments occur after contract termination:** A copy reflecting the additional payment must be provided within two months of the payment" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1404 -msgid "< 1/2" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1927 +msgid "Additionally, employers must issue a **simplified individual account** with certain worker and employer details within two months of the worker's employment start date." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1405 -msgid "100€" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1930 +msgid "Any modifications to mandatory details, such as job function or workplace location, must be communicated in writing (e.g., an updated simplified individual account) within one month of the effective change date." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1408 -msgid "If an employee starts on **1st September** in **full-time** and then switches to **half-time** on **1st April 2024**, the calculation will be:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1935 +msgid "Generate individual accounts in Odoo" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1411 -msgid "250\\text{€} \\times (7/12) + 125\\text{€} \\times (2/12) = 166\\text{€}" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1937 +msgid "Navigate to :menuselection:`Payroll app --> Reporting --> Belgium --> Individual Accounts`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1417 -msgid "Exceptions & adjustments" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1939 +msgid "Then select the reference year and click the :guilabel:`Populate` button. The :file:`.pdf` are displayed as soon as they are available and are generated 30 by 30, this could take some time according to the number of employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1419 -msgid "If an employee worked full-time for the entire reference period but did not receive **250€**, certain non-assimilated leave days may have affected the calculation." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1943 +msgid "On the first page, the :guilabel:`Employer Information` and the :guilabel:`Employee Information` is listed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1422 -msgid "The following leave types are **not** considered for eco-voucher entitlement:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Individual Account PDF Header." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1424 -msgid "**Unpaid leaves**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1949 +msgid "The next page displays all the employee worked days and payslip lines, month by month, split by structure (e.g., End of year bonus and monthly pay)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1425 -msgid "**Sick leave compensated by mutual insurance** (after 30 days of work incapacity)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Individual Account PDF Month by Month." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1428 -msgid "Usage & validity" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1955 +msgid "The next page displays the same information quarter by quarter and summarized for the whole year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1430 -msgid "Eco vouchers are valid for **24 months** from the date of issuance." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Individual Account PDF Quarter by Quarter." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1433 -msgid "The list of eligible products and services that can be purchased with eco vouchers is available here:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1960 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3101 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3171 +msgid "Once all PDF files are generated, they can be posted to the employee documents portal if the **Documents** application is :doc:`installed and properly configured <../../../productivity/documents>`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1436 -msgid "`Eco-Voucher Eligible Products `_" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1964 +msgid "Select the checkbox of each employee whose documents you want to post, and click the :guilabel:`Post PDF` button." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1441 -msgid "End of year bonus" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1970 +msgid "Intellectual property and 273 sheets" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1443 -msgid "This document explains the calculation of the thirteenth-month salary (year-end bonus) in Belgium within Odoo. The calculation considers the employee's contracts, working time rates, and applicable taxes." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1975 +msgid "The 273S declaration is used for the **Prepayment on Mobile Income (Pr.M)**, which concerns the taxation of **Author's Rights** and **Neighboring Rights** (also known as **Revenus Mobilier**). These are specific types of income that are subject to particular tax treatment in certain jurisdictions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1448 -msgid "Calculation of the thirteenth-month salary" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1980 +msgid "This document provides users with essential information about how the 273S declaration functions within Odoo for reporting income derived from these rights, including applicable tax rates and conditions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1451 -msgid "Eligibility criteria" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1985 +msgid "Tax rates and calculation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1453 -msgid "The employee must have worked for at least **six complete months** in the year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1987 +msgid "The net income from Author's Rights and Neighboring Rights is taxable at a specific rate of **15%**. However, the effective tax rate can vary based on the application of flat-rate deductions. These flat rates reduce the taxable amount, leading to a lower effective tax rate for lower incomes." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1454 -msgid "Both full-time and part-time employees are eligible, with prorated calculations based on work time." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1991 +msgid "Key points of taxation:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1458 -msgid "Salary calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1993 +msgid "**Effective tax rate**:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1460 -msgid "The thirteenth-month salary is computed as follows:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1995 +msgid "For incomes below the first flat-rate threshold, the effective tax rate can be as low as **7.5%**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1462 -msgid "**Determine the basic salary**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1997 +msgid "For incomes reaching the flat-rate ceiling of **37,500 EUR** (indexed annually), the rate can increase to **12%**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1464 -msgid "Retrieve the employee's contractual wage." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2000 +msgid "**Additional taxes**: Income from Author's Rights and Neighboring Rights must be declared in the personal income tax declaration. As a result, municipal surcharges may also apply to the tax due." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1465 -msgid "Identify the applicable work rate." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2003 +msgid "The **prepayment** of the tax is handled via a withholding tax on the income. The debtor of the income (e.g., the employer or company paying the royalties) must submit the 273S declaration to the tax authorities. This withholding tax rate is generally **15%**, but for incomes exceeding the indexed ceiling of **37,500 EUR**, the rate increases to **30%**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1467 -msgid "**Compute eligible months**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2009 +msgid "Benefits of Author's Rights in employment contracts" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1469 -msgid "If explicitly provided (`MONTHS` input), use the given number of months." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2011 +msgid "Companies can offer tax-advantageous remuneration to their directors or employees by granting **Author's Rights**. These rights are subject to a **15% withholding tax**, but there are flat-rate deductions that make this tax treatment very favorable, especially when incomes are lower." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1470 -msgid "Otherwise, calculate the number of complete months worked." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2015 +msgid "Important considerations:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1471 -msgid "Prorate the salary for partial-year work." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2017 +msgid "**Creative works**: To qualify for Author's Rights protection, the work must be creative, original, and fixed in a tangible form. Simple ideas or concepts are not eligible." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1473 -msgid "**Adjust for absences**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2019 +msgid "**Exploitation requirement**: From January 1, 2023, a new regulation mandates that transferred or licensed protected works must be exploited, meaning they must be used for public communication, execution, representation, or reproduction." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1475 -msgid "Deduct unpaid absences to obtain the presence prorata." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2022 +msgid "**Eligibility for tax benefits**: To benefit from the favorable tax regime, the rights holder must meet specific criteria, such as:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1476 -msgid "Consider up to 60 days of sick leave as paid time off." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2025 +msgid "Holding an \"Artistic Work Certificate.\"" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1478 -msgid "**Include variable revenues**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2026 +msgid "Licensing or transferring rights to a third party for public communication or reproduction." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1480 -msgid "If explicitly provided (`VARIABLE` input), use the given value." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2028 +msgid "**Income ratio restrictions**: The proportion of income from Author's Rights in relation to regular salary will be capped at **30%**, with **70%** of the total income being subject to regular income tax." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1481 -msgid "Otherwise, calculate the average variable revenue over the last year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2031 +msgid "**Income cap**: The absolute ceiling for qualifying income under this regime remains **37,500 EUR** (indexed at **70,220 EUR** for the 2024 income year)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1483 -msgid "**Final amount**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2034 +msgid "If your average income from the last four years exceeds this ceiling, you will no longer be eligible for the advantageous tax regime." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1485 -msgid "The final thirteenth-month amount is the sum of the prorated fixed salary and average variable revenues." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2037 +msgid "**Ruling Request**: For greater clarity on the scope and remuneration of the transfer of Author's Rights, an advanced agreement with the tax authorities (referred to as a **ruling**) can be requested." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1493 -msgid "**Identify the employee's annual taxable revenue**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2042 +msgid "Tax treatment of Author's Rights income" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1514 -msgid "23.22%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2044 +msgid "Since 2008, income from the transfer or licensing of Author's Rights has benefited from a favorable tax treatment. Specifically, the income is subject to:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1516 -msgid "25.23%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2047 +msgid "**15% Withholding Tax** up to an indexed ceiling of **70,220 EUR** (2023 income year)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1518 -msgid "30.28%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2048 +msgid "**Flat-Rate Deductions**:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1520 -msgid "35.33%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2050 +msgid "**50% flat-rate deduction** applies to the first **18,720 EUR** of income." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1522 -msgid "38.36%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2051 +msgid "**25% flat-rate deduction** applies to the next **18,730 EUR** (from **18,720 EUR to 37,450 EUR**)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1524 -msgid "40.38%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2054 +msgid "Example of tax impact:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1526 -msgid "43.41%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2056 +msgid "For example, if a company director receives **10,000 EUR** in Author's Rights income, they will pay **750 EUR** in tax (15% of the income after the flat-rate deductions), leaving them with a net income of **9,250 EUR**. This results in an effective tax rate of **7.5%** on the Author's Rights income." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1528 -msgid "46.44%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2062 +msgid "Odoo integration for Declaration 273S" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1530 -msgid "51.48%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2064 +msgid "Odoo users can efficiently manage the submission of the **273S Declaration** for Author's Rights and Neighboring Rights income via the **Odoo Payroll** module. Here's a quick overview of how this can be done:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1636 -msgid "\\text{Tax} = \\text{Gross Thirteenth Month} \\times \\text{Applicable Tax Rate} -\n" -"\\text{Reduction (if applicable)}" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2069 +msgid "Set up Author's Rights in Odoo" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1642 -msgid "The resulting tax is deducted from the gross thirteenth-month salary to determine the net amount payable to the employee." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2071 +msgid "On the employees form view, make sure the :guilabel:`Intellectual Property` checkbox is enabled, and the allocated salary percentage is specified as well." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1652 -msgid "Navigate to :menuselection:`Payroll app --> Payslips --> Batches` and create a new record with valid dates (here december 2024)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2074 +msgid "Once a payslip is generated, the :abbr:`IP (intellectual property)` part is computed based on the intellectual property percentage and the gross salary. The tax is computed accordingly based on the revenue amount." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1655 -msgid "Then click the :guilabel:`Generate Payslips` button, select the :guilabel:`CP200: Belgian Employee` :guilabel:`Salary Structure Type` and the :guilabel:`CP200: Employees 13th Month` :guilabel:`Salary Structure`. You can also filter eligible employees by :guilabel:`Department` and / or :guilabel:`Job Position`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Intellectual Property Payslip 1." msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "End of Year Bonus Batch Wizard." +msgid "Intellectual Property Payslip 2." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "End of Year Bonus Payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2085 +msgid "Generate the 273S form" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "End of Year Bonus PDF." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2087 +msgid "Odoo can generate the 273S form automatically based on the income data entered into the system. Ensure that all required details, including the amount of income subject to the tax, are accurately entered." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1677 -msgid "Holiday pay recovery" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2091 +msgid "Navigate to :menuselection:`Payroll app --> Reporting --> Belgium --> 273S Sheet` to create a :guilabel:`New` record." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1679 -msgid "This document explains how Odoo calculates the recovery of holiday pay (both simple and double) for employees in Belgium who have changed employers. When an employee moves from one company to another, their previous employer may have already paid their holiday pay for the previous year. This amount needs to be recovered by the new employer, and this guide outlines how this is managed in Odoo." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2094 +msgid "Select the reference :guilabel:`Year` and :guilabel:`Month`, then click :guilabel:`Export XML file` to generate the declaration. Click :guilabel:`Export PDF File` to generate the printed details." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1685 -msgid "Understanding holiday pay in Belgium" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "273S Wizard File Generation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1687 -msgid "In Belgium, employees are entitled to annual leave and corresponding holiday pay, which consists of:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2100 +msgid "On the first PDF section, the company information and the global declaration is listed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1689 -msgid "**Simple holiday pay**: Regular salary payments for the days of leave taken." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "273S PDF Company Info." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1690 -msgid "**Double holiday pay**: An additional payment, typically equal to approximately 92% of the gross monthly salary, given when employees take their annual leave." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2105 +msgid "On the second section, the employees specific information is listed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1693 -msgid "When an employee changes jobs, their previous employer may have already paid these amounts. To avoid double payment, the new employer needs to recover the amounts already paid." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "273S PDF Employee Info." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1697 -msgid "Recovery of simple holiday pay" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2111 +msgid "File the 273S Declaration" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1699 -msgid "The recovery of simple holiday pay in Odoo is based on the following criteria:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2113 +msgid "After generating the XML file, the company or the debtor of the income can submit it to the tax authorities directly from MyMinfin. Keep track of the filing and payment deadlines to ensure timely submission and compliance." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1701 -msgid "The recovery applies if the employee has taken leave in the current year and their previous employer already paid the holiday pay." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2120 +msgid "The **273S Declaration** is an essential tool for companies and individuals benefiting from the favorable tax regime on Author's Rights and Neighboring Rights. By leveraging Odoo's tax management features, users can ensure compliance while optimizing their tax liabilities." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1703 -msgid "The calculation considers the number of leave days taken and the hours worked per week." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2124 +msgid "For further assistance, please consult a tax professional." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1704 -msgid "The recovery process is split into:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2129 +msgid "Representation fees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1706 -msgid "**Year N**: The current year's holiday pay recovery." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2134 +msgid "Representation fees must be **allocated on the payslip** between **serious and non-serious representation costs**. By default, the threshold is set at **€283.73**, but it can be adjusted based on what the company can **legally justify**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1707 -msgid "**Year N-1**: The recovery of holiday pay from the previous year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2138 +msgid "The representation fees is configured on the employee's contract form in the :guilabel:`Expense Fees` field." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1709 -msgid "The system checks:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2141 +msgid "On the payslip, two or one line are displayed in the case the representation fees amount exceeds the threshold or not." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1711 -msgid "If the employee's first contract date with the company was in the previous year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2145 +msgid "Breakdown of the threshold" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1712 -msgid "If the employee has a pending holiday pay recovery amount." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2147 +msgid "Only part of the representation costs are pro-rated because certain costs are **fully covered** by the company. These fixed costs include:" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2150 +msgid "\\text{€}283.73\\text{ Total} = \\begin{cases}\n" +"+ \\text{ €148.73 (Tax, since 2021 - coronavirus)} \\\\\n" +"+ \\text{ €30 (Internet)} \\\\\n" +"+ \\text{ €25 (Phone)} \\\\\n" +"+ \\text{ €80 (Car management fees)} \\\\\n" +"\\end{cases}" +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2160 +msgid "The **serious portion** of the representation costs is **not prorated**, while the **non-serious portion** is prorated based on working time." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1713 -msgid "If the recovery has not already been processed." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2163 +msgid "Navigate to :menuselection:`Payroll app --> Configuration --> Salary --> Rule Parameters`, and search for the `CP200: Representation Fees Threshold` record. Then, adapt the current value or introduce a new one from a given date." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1714 -msgid "If the employee has taken annual leave." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Representation Fees Threshold." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1716 -msgid "If all conditions are met, Odoo calculates the amount to be deducted from the payroll to account for the holiday pay already received from the previous employer." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2171 +msgid "It is possible to define, based on job position, which jobs are eligible to certain criteria in the :guilabel:`Payroll` tab." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1720 -msgid "Recovery of double holiday pay" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 +msgid "Representation Fees Job Position." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1722 -msgid "The recovery of double holiday pay follows these steps:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2178 +msgid "Calculation of representation fees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1724 -msgid "The system verifies the employee's contract and determines their employment duration." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2181 +msgid "Conditions for payment" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1725 -msgid "The gross salary is calculated based on the employee's contract." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2183 +msgid "Representation fees are only granted if:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1726 -msgid "The number of months worked in the previous year is identified." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2185 +msgid "The employee **receives a basic salary**, and" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1727 -msgid "A threshold amount is computed as follows:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2186 +msgid "The employee has **worked at least part of the time**, unless a **salary simulation** is in progress." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1729 -msgid "\\text{Threshold} = \\text{Current monthly salary} \\times \\text{Months worked in previous year}\n" -"\\times \\text{Occupation rate} \\times 7.67%" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2189 +msgid "If the employee is on **full leave** (without any working days), they are **not eligible** for representation fees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1735 -msgid "If the amount on the holiday certificate from the previous employer is lower than this threshold, no limit applies." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2193 +msgid "Determining the work time rate" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1738 -msgid "The system recovers the lower of:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2195 +msgid "The number of **working days per week** is extracted from the employee's contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1740 -msgid "The calculated threshold." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2196 +msgid "If the employee has periods of **incapacity for work** (e.g., illness), the calculation adjusts the **work time rate** accordingly:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1741 -msgid "The actual amount paid by the previous employer." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2199 +msgid "The total **incapacity hours** are determined." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1743 -msgid "If the employee has worked for more than 12 months in the current company, no double holiday pay needs to be recovered." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2200 +msgid "If the company follows a **biweekly schedule**, the incapacity hours are divided by **two**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1747 -msgid "How to configure in Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2201 +msgid "The incapacity **rate** is calculated as:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1749 -msgid "In the employee form view, under the :guilabel:`Settings` tab, you can enter the various amounts from holiday attests provided by the new employee." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2203 +msgid "\\text{incapacity rate} = 1 - \\frac{\\text{incapacity hours}}{\\text{total weekly hours}}" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Holiday Pay Recovery Configuration." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2208 +msgid "The **final work time rate** is then adjusted by multiplying it with the incapacity rate." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1755 -msgid "For simple holiday pay recovery, you need to enter:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2211 +msgid "Applying the threshold and pro-rating rules" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1757 -msgid "The :guilabel:`Number of days` for paid leave" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2213 +msgid "The **default threshold (€283.73)** is applied unless adjusted by the company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1758 -msgid "The :guilabel:`Amount to recover` by the employee" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2214 +msgid "If the employee has **worked a full-time schedule**, they receive the **full representation fees** without reduction." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1761 -msgid "The :guilabel:`Recovered Amount` field displays the amount already recovered." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2216 +msgid "If the employee works **part-time** (contractual or due to time credit), only the **non-serious portion** of the fees is prorated." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1763 -msgid "For double holiday pay recovery, you must enter a **line for each employer's holiday attest**. Each line should include:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2219 +msgid "The prorated formula for non-serious expenses is:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1766 -msgid "The :guilabel:`# Months` (number of months) the employee worked for that employer" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2221 +msgid "\\text{adjusted amount} = \\text{threshold} + (\\text{total fees} - \\text{threshold}) \\times\n" +"\\frac{\\text{work time rate}}{100}" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1767 -msgid "The :guilabel:`Amount` provided to the employee" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2227 +msgid "If the employee has **missing workdays**, the final amount is further adjusted:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1768 -msgid "The :guilabel:`Occupational Rate`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2229 +msgid "First calculate the **daily reduction**:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1770 -msgid "Odoo uses this data to compute a **recovery limit**. If the employee now has a lower salary, the full amount cannot be recovered." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2231 +msgid "\\text{daily reduction} = \\frac{(\\text{total amount} - \\text{threshold}) \\times 3}{13 \\times \\text{days per week}}" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1774 -msgid "Be careful not to mix holiday attests for the current year (N) and the previous year (N-1)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2236 +msgid "Then calculate the **final amount**:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1776 -msgid "For simple holiday pay recovery, the system deducts the amount from each legal time-off period until:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2238 +msgid "\\text{final amount} = max(0, \\text{total amount} - \\text{daily reduction} \\times\n" +"\\text{missing days})" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1779 -msgid "The **total amount** has been fully recovered, or" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2245 +msgid "Final calculation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1780 -msgid "The **number of time-off days** has been matched (if the employee's current salary is lower than before)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2247 +msgid "If the employee meets all conditions, the final representation fees amount is **rounded to two decimal places** for payroll purposes." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Holiday Pay Recovery Simple Payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2249 +msgid "Employees working a full schedule receive **full reimbursement**, while those working **reduced hours** have the **non-serious portion prorated** accordingly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1786 -msgid "Once the **payslip** is validated and paid, the recovered simple holiday pay is reflected in the employee form view." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2255 +msgid "This calculation ensures **fair allocation** of representation fees by distinguishing between **fixed serious costs** and **prorated non-serious costs**. The company can adjust the **threshold (€283.73 by default)** based on **justifiable business expenses**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Holiday Pay Recovery Simple Amount." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2259 +msgid "Employees working **full-time** receive their full representation fees, while those working **part-time or with absences** only receive a **pro-rated portion** of the non-serious fees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1792 -msgid "On the double holiday payslip, click :guilabel:`Compute Double Pay Recovery` to open a wizard that helps calculate the recoverable amount." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2265 +msgid "Sick time off and relapse" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1795 -msgid "In the :guilabel:`Double Pay Recovery Computation` wizard, you'll find:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2267 +msgid "In Belgium, sick leave is managed according to two main regimes:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1797 -msgid "The relevant holiday attests listed in the :guilabel:`Occupation Lines`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2269 +msgid "**With guaranteed salary**: The employer continues to pay the worker's salary for a specified period." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1798 -msgid "The :guilabel:`Double Pay To Recover` amount based on the threshold" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2271 +msgid "**Without guaranteed salary**: The worker receives benefits from the mutual insurance company after the guaranteed salary period." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1800 -msgid "This amount is **editable** if manual adjustments are needed." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2275 +msgid "Sick leave with guaranteed salary" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Holiday Pay Recovery Double Wizard." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2277 +msgid "The guaranteed salary is a period during which the employer continues to pay the salary of the worker who is unable to work." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1805 -msgid "Once validated, the double pay recovery is applied to the payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2280 +msgid "**Employees**: The employer pays 100% of the salary during the first full month of incapacity. After this period, if the incapacity continues, the worker falls under the mutual insurance regime." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Holiday Pay Recovery Double Amount." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2284 +msgid "Sick leave without guaranteed salary" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1810 -msgid "Odoo automates the recovery of both **simple** and **double** holiday pay, ensuring compliance with **Belgian labor laws**. By analyzing contract details, employment duration, and past payments, Odoo calculates the necessary deductions and prevents duplicate holiday pay payments." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2286 +msgid "After the guaranteed salary period, the ONEM (National Employment Office) or the mutual insurance company takes over." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1817 -msgid "Individual accounts" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2289 +msgid "**Long-term illness**: An incapacity lasting more than 30 days leads to benefits from the mutual insurance company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1820 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1973 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2132 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2316 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2842 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3064 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3134 -msgid "Introduction" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2291 +msgid "**Relapse**: If a worker returns to work and then becomes ill again for the same reason within 14 days, this may be considered a relapse, and the rules for guaranteed salary may be adjusted." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1822 -msgid "The individual account provides workers with a detailed overview of their earnings, deductions (such as social security contributions, withholding tax, etc.), and the working days performed, on a pay period basis. Additionally, it contains all relevant administrative data related to remuneration." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2295 +msgid "Management in Odoo" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1828 -msgid "Required information in the individual account" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2297 +msgid "In Odoo, sick leave is automatically managed if the absences are related to the *Sick Time Off* work entry type." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1830 -msgid "The individual account must include several mandatory details as determined by Royal Decree." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2300 +msgid "**Recording time off**: The employee records their absence through the **Time Off** module." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1832 -msgid "**Employer identification:**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2301 +msgid "**Automation of work entries**: If the request is approved, Odoo automatically generates the corresponding Work Entries." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1834 -msgid "Name, address, ONSS number, ONVA number" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2303 +msgid "**Impact on payroll**: The guaranteed salary is automatically calculated according to the rules configured based on the worker's status (employee)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1835 -msgid "Relevant joint committee (or sub-committee)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2305 +msgid "**Compensation after the guaranteed salary**: Once the guaranteed salary period has expired, Odoo adjusts the Work Entries to reflect the transition to the mutual insurance company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1836 -msgid "Name of the holiday fund for workers" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2308 +msgid "Thus, Odoo ensures a smooth and compliant management of sick leave according to Belgian regulations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1837 -msgid "Insurer for work-related accidents" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2313 +msgid "Social Balance Sheet" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1838 -msgid "Approved social secretariat" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2318 +msgid "The *Social Balance Sheet* was introduced by the law of December 22, 1995, as part of measures for the implementation of the multi-year employment plan. Companies required to file annual accounts (including some that are not obligated to publish such accounts - see the `National Bank of Belgium website `_ for details) must also prepare and submit a Social Balance Sheet to the National Bank of Belgium." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1839 -msgid "Relevant affiliation numbers" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2324 +msgid "The Royal Decree of August 4, 1996, incorporates the Social Balance Sheet into the annual accounts, specifically as an annex. This makes it an integral part of a company's financial statements." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1841 -msgid "**Worker identification:**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2328 +msgid "Contents of the Social Balance Sheet" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1843 -msgid "Name, address, date of birth, gender, tax status" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2330 +msgid "The content of the Social Balance Sheet is determined by the Royal Decree of January 30, 2001, implementing the Company Code. The Social Balance Sheet consists of several sections:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1844 -msgid "Type of employment contract, job title, professional qualification" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2333 +msgid "Sections I and II: Information on employed persons and personnel movements during the fiscal year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1845 -msgid "Workplace location (or note if working at multiple locations)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2334 +msgid "Section III: Initiatives related to training." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1846 -msgid "Start and end date of employment" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2336 +msgid "Since the Social Balance Sheet is part of a company's annual accounts, the works council receives this information as part of its mission regarding economic and financial information." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1847 -msgid "Employee ID number, starting salary" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2339 +msgid "Additionally, the works council receives data on employment-related benefits along with annual employment-related information (Trillium). These details were fully integrated into the Social Balance Sheet until 2008." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1848 -msgid "Remuneration components and payment periodicity" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2344 +msgid "Scope of the Social Balance Sheet" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1850 -msgid "**Remuneration components:**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2346 +msgid "The Social Balance Sheet contains specific data related to workforce composition, staff turnover, and training programs. Some organizations not required to publish annual accounts must still file a separate Social Balance Sheet. This applies primarily to certain hospitals and private legal entities employing at least 20 full-time equivalents (FTEs)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1852 -msgid "Per pay period (daily, weekly, bi-weekly, or monthly):" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2351 +msgid "Any company, association, or foundation with at least 20 workers on an annual average (in FTE) must complete and submit the Social Balance Sheet." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1854 -msgid "Number of working days and hours (regular, additional, and overtime)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2354 +msgid "The Social Balance Sheet is part of:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1855 -msgid "Days of work interruption and reasons (illness, vacations, public holidays, replacement days, compensatory rest days, etc.)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2356 +msgid "\"Other documents to be filed under the Company and Associations Code\" (for companies);" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1857 -msgid "Fixed or hourly salary, variable remuneration, bonuses, meal vouchers, eco vouchers, holiday pay (including early holiday pay if applicable), severance pay, year-end bonuses (as per sectoral or other collective labor agreements), benefits in kind and their estimated value" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2357 +msgid "\"Explanatory Notes\" (for associations and foundations)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1860 -msgid "Gross amount of all remuneration components" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2360 +msgid "Obligations by entity type" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1861 -msgid "Amounts subject to social and tax deductions" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2363 +msgid "Companies, associations, and foundations required to publish a Social Balance Sheet" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1862 -msgid "Various social and tax deductions: personal ONSS contributions, withholding tax, special social security contributions" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2365 +msgid "For Belgian companies employing at least one FTE:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1864 -msgid "Net amount payable to the worker" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2367 +msgid "**Standardized model**: This schema includes a \"Social Balance Sheet\" section, which must be completed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1865 -msgid "Other payments made by the employer, including reimbursement of travel expenses, allowances, and other payments" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2369 +msgid "**Specific model**: If the model used does not include a Social Balance Sheet, it must be provided separately." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1868 -msgid "Per quarter:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2372 +msgid "For Belgian associations and foundations employing at least 20 FTEs:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1870 -msgid "Number of actual working days" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2374 +msgid "**Standard model**: Includes a \"Social Balance Sheet\" section that must be completed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1871 -msgid "Days of work interruption by reason" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2375 +msgid "**Specific model**: A separate Social Balance Sheet must be submitted if the chosen model does not include one." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1872 -msgid "Total remuneration subject to social security contributions" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2378 +msgid "Associations and foundations with fewer than 20 FTEs may voluntarily complete the Social Balance Sheet but are not legally required to do so." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1873 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1878 -msgid "Employee social security contribution amounts" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2381 +msgid "For foreign companies, such as branches of foreign corporations and foreign non-profit organizations (ASBL) with activities in Belgium, the Social Balance Sheet applies only to their Belgian operations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1875 -msgid "Per year:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2385 +msgid "The Social Balance Sheet is made publicly available by the Central Balance Sheet Office as part of the financial statements submission." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1877 -msgid "Total amounts subject to social security contributions" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2389 +msgid "Entities required to file a separate Social Balance Sheet" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1879 -msgid "Taxable remuneration and other amounts" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2391 +msgid "Certain organizations that do not need to publish annual accounts must still submit a Social Balance Sheet to the Central Balance Sheet Office. This data is used exclusively for statistical purposes and is not made publicly available. Submission in these cases is free of charge." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1880 -msgid "Withholding tax amount" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2395 +msgid "This exception applies to:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1883 -msgid "Responsibility for establishing and updating the individual account" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2397 +msgid "**Hospitals**, unless they are structured as limited liability companies or large ASBLs, which must submit full financial statements, including the integrated Social Balance Sheet." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1885 -msgid "Belgian employers using **Odoo Payroll** can generate the individual accounts of their workers." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2399 +msgid "**Private legal entities** that are not required to submit annual accounts but have at least 20 employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1887 -msgid "However, to ensure accurate record-keeping, employers must:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2402 +msgid "The required model depends on the entity type:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1889 -msgid "Ensure payment of sector-mandated year-end bonuses" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2404 +msgid "**Hospitals** must use the full or abridged Social Balance Sheet model based on their size." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1890 -msgid "Ensure that all public holidays, legal vacation days, and compensatory rest days are taken before the end of the year" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2405 +msgid "**Foreign entities** must use the full or abridged Social Balance Sheet model, based on the size of their Belgian establishments." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1892 -msgid "Plan collective vacation and replacement public holidays in advance" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2407 +msgid "**Private legal entities** with at least 50 employees must use the full model, while those with 20-49 employees may use the abridged model." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1893 -msgid "Pay workers their holiday pay (including early holiday pay if applicable)" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2411 +msgid "Social Balance Sheet models" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1894 -msgid "Distribute due eco vouchers" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2413 +msgid "The latest versions of the Social Balance Sheet models can be found at the following links:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1895 -msgid "Pay any required travel expenses between home and work" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2415 +msgid "**Full Model**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1897 -msgid "If these obligations are met, the corresponding data will be included in the individual account." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2417 +msgid "PDF: `Full Social Balance Sheet PDF `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1900 -msgid "Storage and retention period of the individual account" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2418 +msgid "Word: `Full Social Balance Sheet Word `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1902 -msgid "The individual account is a social document that must be kept by the employer for a specified period after its creation." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2420 +msgid "**Abridged Model**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1905 -msgid "Employers may store individual accounts:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2422 +msgid "PDF: `Abridged Social Balance Sheet PDF `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1907 -msgid "At the ONSS-registered address" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2423 +msgid "Word: `Abridged Social Balance Sheet Word `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1908 -msgid "At a workplace" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2426 +msgid "Assistance in completing the Social Balance Sheet" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1909 -msgid "At their home or registered office if located in Belgium; otherwise, at the residence of a designated agent in Belgium" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2428 +msgid "For guidance on completing the Social Balance Sheet, refer to the following resources:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1911 -msgid "At the office of the approved social secretariat, if affiliated" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2430 +msgid "**CNC Opinion S100**: `Questions and Answers on the Social Balance Sheet `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1913 -msgid "Records must be kept legible and in a format allowing efficient oversight. The retention period is **five years** from the end of the annual closing of the account." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2431 +msgid "**CNC Opinion 2009/12**: `Social Balance Sheet and Statutory Workers `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1917 -msgid "When must workers receive a copy of their individual account?" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2432 +msgid "**Explanatory Note**: `Information on Training Activities `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1919 -msgid "Each worker must receive a copy of their individual account:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2435 +msgid "Submitting a separate Social Balance Sheet" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1921 -msgid "**During employment:** Before March 1 of the following year" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2437 +msgid "A separate Social Balance Sheet must be submitted online as a PDF via the **Filing** application. The model can be selected under :guilabel:`Other Documents`, with options for :guilabel:`Abridged Social Balance Sheet` or :guilabel:`Full Social Balance Sheet`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1922 -msgid "**At the end of employment:** Within two months following the end of the quarter in which the contract ended" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2441 +msgid "For further details, visit the National Bank of Belgium's website: `www.nbb.be `_." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1924 -msgid "**If additional payments occur after contract termination:** A copy reflecting the additional payment must be provided within two months of the payment" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2444 +msgid "Generating Social Balance Sheet in Odoo" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1927 -msgid "Additionally, employers must issue a **simplified individual account** with certain worker and employer details within two months of the worker's employment start date." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2446 +msgid "Navigate to :menuselection:`Payroll app --> Reporting --> Belgium --> Social Balance Sheet` and select the reference :guilabel:`Period`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1930 -msgid "Any modifications to mandatory details, such as job function or workplace location, must be communicated in writing (e.g., an updated simplified individual account) within one month of the effective change date." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Social Balance Sheet Wizard." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1935 -msgid "Generate individual accounts in Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2452 +msgid "Then click :guilabel:`Export to PDF` or :guilabel:`Export to XLSX` to generate the social balance sheets containing all the data available in your Odoo database." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1937 -msgid "Navigate to :menuselection:`Payroll app --> Reporting --> Belgium --> Individual Accounts`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2455 +msgid "The different pieces of information are split by gender, or by working schedule (Part Time, Full Time, Full Time equivalent), for the whole period, and month by month, as requested by the National Bank of Belgium." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1939 -msgid "Then select the reference year and click the :guilabel:`Populate` button. The :file:`.pdf` are displayed as soon as they are available and are generated 30 by 30, this could take some time according to the number of employees." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Social Balance Sheet PDF Header." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1943 -msgid "On the first page, the :guilabel:`Employer Information` and the :guilabel:`Employee Information` is listed." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Social Balance Sheet PDF Content." msgstr "" #: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Individual Account PDF Header." +msgid "Social Balance Sheet XLSX Content." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1949 -msgid "The next page displays all the employee worked days and payslip lines, month by month, split by structure (e.g., End of year bonus and monthly pay)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2471 +msgid "Social Security certificate" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Individual Account PDF Month by Month." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2473 +msgid "The Social Security certificate in Odoo provides a detailed breakdown of all social charges paid by the employee or employer, categorized by type (e.g., year-end bonus, private car reimbursement, double holiday pay, etc.). This report is particularly useful for audit companies and for verifying that the declared amounts align with accounting entries." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1955 -msgid "The next page displays the same information quarter by quarter and summarized for the whole year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2479 +msgid "Accessing the Social Security certificate" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Individual Account PDF Quarter by Quarter." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2481 +msgid "To generate the Social Security certificate, follow these steps:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1960 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3101 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3171 -msgid "Once all PDF files are generated, they can be posted to the employee documents portal if the **Documents** application is :doc:`installed and properly configured <../../../productivity/documents>`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2483 +msgid "Navigate to :menuselection:`Payroll app --> Reporting --> Belgium --> Social Security Certificate`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1964 -msgid "Select the checkbox of each employee whose documents you want to post, and click the :guilabel:`Post PDF` button." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2485 +msgid "Select the reference :guilabel:`Period`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1970 -msgid "Intellectual property and 273 sheets" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2486 +msgid "Choose the data :guilabel:`Aggregation Level`:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1975 -msgid "The 273S declaration is used for the **Prepayment on Mobile Income (Pr.M)**, which concerns the taxation of **Author's Rights** and **Neighboring Rights** (also known as **Revenus Mobilier**). These are specific types of income that are subject to particular tax treatment in certain jurisdictions." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2488 +msgid ":guilabel:`Whole Company`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1980 -msgid "This document provides users with essential information about how the 273S declaration functions within Odoo for reporting income derived from these rights, including applicable tax rates and conditions." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2489 +msgid ":guilabel:`By Department`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1985 -msgid "Tax rates and calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2490 +msgid ":guilabel:`By Employee`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1987 -msgid "The net income from Author's Rights and Neighboring Rights is taxable at a specific rate of **15%**. However, the effective tax rate can vary based on the application of flat-rate deductions. These flat rates reduce the taxable amount, leading to a lower effective tax rate for lower incomes." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Social Security Certificate Wizard." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1991 -msgid "Key points of taxation:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2496 +msgid "Exporting the report" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1993 -msgid "**Effective tax rate**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2498 +msgid "Once the selections are made, you can export the report in different formats:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1995 -msgid "For incomes below the first flat-rate threshold, the effective tax rate can be as low as **7.5%**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2500 +msgid "Click :guilabel:`Export to PDF` to generate a printable version of the Social Security certificate." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:1997 -msgid "For incomes reaching the flat-rate ceiling of **37,500 EUR** (indexed annually), the rate can increase to **12%**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2502 +msgid "Click :guilabel:`Export to XLSX` to generate an Excel file containing all relevant data." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2000 -msgid "**Additional taxes**: Income from Author's Rights and Neighboring Rights must be declared in the personal income tax declaration. As a result, municipal surcharges may also apply to the tax due." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Social Security Certificate PDF Header." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2003 -msgid "The **prepayment** of the tax is handled via a withholding tax on the income. The debtor of the income (e.g., the employer or company paying the royalties) must submit the 273S declaration to the tax authorities. This withholding tax rate is generally **15%**, but for incomes exceeding the indexed ceiling of **37,500 EUR**, the rate increases to **30%**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Social Security Certificate PDF Content." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2009 -msgid "Benefits of Author's Rights in employment contracts" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Social Security Certificate XLSX Content." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2011 -msgid "Companies can offer tax-advantageous remuneration to their directors or employees by granting **Author's Rights**. These rights are subject to a **15% withholding tax**, but there are flat-rate deductions that make this tax treatment very favorable, especially when incomes are lower." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2513 +msgid "This feature ensures full transparency and compliance with social security regulations in Belgium." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2015 -msgid "Important considerations:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2523 +msgid "Legal time off" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2017 -msgid "**Creative works**: To qualify for Author's Rights protection, the work must be creative, original, and fixed in a tangible form. Simple ideas or concepts are not eligible." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2525 +msgid "This guide provides an overview of the basic rules governing legal holiday entitlements in Belgium for employers using Odoo." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2019 -msgid "**Exploitation requirement**: From January 1, 2023, a new regulation mandates that transferred or licensed protected works must be exploited, meaning they must be used for public communication, execution, representation, or reproduction." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2529 +msgid "Holiday entitlement calculation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2022 -msgid "**Eligibility for tax benefits**: To benefit from the favorable tax regime, the rights holder must meet specific criteria, such as:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2531 +msgid "Your holiday entitlement for the current year (N) is determined by the number of months worked in Belgium during the previous year (N-1)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2025 -msgid "Holding an \"Artistic Work Certificate.\"" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2534 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2565 +msgid "**Calculation details:**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2026 -msgid "Licensing or transferring rights to a third party for public communication or reproduction." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2536 +msgid "Employees earn **2 days of leave per month** based on a 6-day work week." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2028 -msgid "**Income ratio restrictions**: The proportion of income from Author's Rights in relation to regular salary will be capped at **30%**, with **70%** of the total income being subject to regular income tax." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2537 +msgid "The entitlement is adjusted for a 5-day work week: :math:`(\\text{Total Days} \\div 6) \\times 5`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2031 -msgid "**Income cap**: The absolute ceiling for qualifying income under this regime remains **37,500 EUR** (indexed at **70,220 EUR** for the 2024 income year)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2540 +msgid "If an employee worked **7 months** in the previous year (N-1):" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2034 -msgid "If your average income from the last four years exceeds this ceiling, you will no longer be eligible for the advantageous tax regime." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2542 +msgid "**6-day work week:** :math:`7 \\times 2 = 14 \\text{ days}`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2037 -msgid "**Ruling Request**: For greater clarity on the scope and remuneration of the transfer of Author's Rights, an advanced agreement with the tax authorities (referred to as a **ruling**) can be requested." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2543 +msgid "**5-day work week:** :math:`14 \\div 6 \\times 5 = 11.67 \\text{ days}`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2042 -msgid "Tax treatment of Author's Rights income" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2545 +msgid "**Partial Month Calculation:**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2044 -msgid "Since 2008, income from the transfer or licensing of Author's Rights has benefited from a favorable tax treatment. Specifically, the income is subject to:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2547 +msgid "Worked **1st to 10th**: Full month counted." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2047 -msgid "**15% Withholding Tax** up to an indexed ceiling of **70,220 EUR** (2023 income year)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2548 +msgid "Worked **11th to 19th**: Half month counted." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2048 -msgid "**Flat-Rate Deductions**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2549 +msgid "Worked **20th onwards**: Month not counted." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2050 -msgid "**50% flat-rate deduction** applies to the first **18,720 EUR** of income." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2551 +msgid "**Rounding Rules:**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2051 -msgid "**25% flat-rate deduction** applies to the next **18,730 EUR** (from **18,720 EUR to 37,450 EUR**)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2553 +msgid "Less than **0.35**: Round to **0**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2054 -msgid "Example of tax impact:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2554 +msgid "Between **0.35 - 0.74**: Round to **0.5**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2056 -msgid "For example, if a company director receives **10,000 EUR** in Author's Rights income, they will pay **750 EUR** in tax (15% of the income after the flat-rate deductions), leaving them with a net income of **9,250 EUR**. This results in an effective tax rate of **7.5%** on the Author's Rights income." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2555 +msgid "**0.75 and above**: Round to **1**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2062 -msgid "Odoo integration for Declaration 273S" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2557 +msgid "For a full-time employee, this typically results in **11.5 days of legal holiday** entitlement." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2064 -msgid "Odoo users can efficiently manage the submission of the **273S Declaration** for Author's Rights and Neighboring Rights income via the **Odoo Payroll** module. Here's a quick overview of how this can be done:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2560 +msgid "Maximum holiday entitlement" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2069 -msgid "Set up Author's Rights in Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2562 +msgid "Employees are entitled to a maximum of **4 weeks** of holiday based on their working schedule. If an employee switches between full-time and part-time work, their entitlement is adjusted accordingly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2071 -msgid "On the employees form view, make sure the :guilabel:`Intellectual Property` checkbox is enabled, and the allocated salary percentage is specified as well." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2567 +msgid "**5-day work week**: :math:`4 \\times 5 = 20 \\text{ days}`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2074 -msgid "Once a payslip is generated, the :abbr:`IP (intellectual property)` part is computed based on the intellectual property percentage and the gross salary. The tax is computed accordingly based on the revenue amount." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2568 +msgid "**4-day work week**: :math:`4 \\times 4 = 16 \\text{ days}`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Intellectual Property Payslip 1." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2569 +msgid "**3-day work week**: :math:`4 \\times 3 = 12 \\text{ days}`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Intellectual Property Payslip 2." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2572 +msgid "If an employee joined **Odoo on January 1, 2024**, and plans to switch to a **3-day work week from April 1, 2024**:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2085 -msgid "Generate the 273S form" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2575 +msgid "**Step 1: Calculate holiday entitlement for 2024**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2087 -msgid "Odoo can generate the 273S form automatically based on the income data entered into the system. Ensure that all required details, including the amount of income subject to the tax, are accurately entered." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2577 +msgid "The employee worked **9 months in 2023**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2091 -msgid "Navigate to :menuselection:`Payroll app --> Reporting --> Belgium --> 273S Sheet` to create a :guilabel:`New` record." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2578 +msgid "**6-day work week basis**: :math:`9 \\times 2 = 18 \\text{ days}`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2094 -msgid "Select the reference :guilabel:`Year` and :guilabel:`Month`, then click :guilabel:`Export XML file` to generate the declaration. Click :guilabel:`Export PDF File` to generate the printed details." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2579 +msgid "Adjusted for **5-day work week**: :math:`18 \\div 6 \\times 5 = 15 \\text{ days}`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "273S Wizard File Generation." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2581 +msgid "**Step 2: Verify maximum holiday entitlement**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2100 -msgid "On the first PDF section, the company information and the global declaration is listed." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2583 +msgid "For a **5-day work week**, the maximum entitlement is **20 days**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "273S PDF Company Info." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2584 +msgid "Since the employee is entitled to **15 days**, they remain within the limit." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2105 -msgid "On the second section, the employees specific information is listed." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2586 +msgid "**Step 3: Adjust entitlement for the new work schedule**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "273S PDF Employee Info." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2588 +msgid "From April 1, 2024, the employee moves to a **3-day work week**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2111 -msgid "File the 273S Declaration" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2589 +msgid "Maximum entitlement for a **3-day work week**: :math:`3 \\times 4 = 12 \\text{ days}`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2113 -msgid "After generating the XML file, the company or the debtor of the income can submit it to the tax authorities directly from MyMinfin. Keep track of the filing and payment deadlines to ensure timely submission and compliance." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2590 +msgid "If no leave is taken before April 1, the employee may take up to **12 days** from their 15-day entitlement." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2120 -msgid "The **273S Declaration** is an essential tool for companies and individuals benefiting from the favorable tax regime on Author's Rights and Neighboring Rights. By leveraging Odoo's tax management features, users can ensure compliance while optimizing their tax liabilities." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2592 +msgid "The **remaining 3 days** will be settled at the end of the year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2124 -msgid "For further assistance, please consult a tax professional." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2594 +msgid "This ensures compliance with Belgian legal leave regulations and allows employers to manage holiday entitlements effectively within Odoo." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2129 -msgid "Representation fees" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2598 +msgid "Legal time off allocation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2134 -msgid "Representation fees must be **allocated on the payslip** between **serious and non-serious representation costs**. By default, the threshold is set at **€283.73**, but it can be adjusted based on what the company can **legally justify**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2600 +msgid "This is possible to generate the legal time off for all your employees at the beginning of a new year using the wizard in :menuselection:`Payroll app --> Reporting --> Belgium --> Paid Time Off Allocation`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2138 -msgid "The representation fees is configured on the employee's contract form in the :guilabel:`Expense Fees` field." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2604 +msgid "Based on your employees occupation over last year, the number of available time off is pre-computed for each employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2141 -msgid "On the payslip, two or one line are displayed in the case the representation fees amount exceeds the threshold or not." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Paid Time Off Allocation Wizard." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2145 -msgid "Breakdown of the threshold" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2610 +msgid "Once validated, a draft allocation is generated for each single employee, waiting a manual confirmation that can be done in batch." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2147 -msgid "Only part of the representation costs are pro-rated because certain costs are **fully covered** by the company. These fixed costs include:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Paid Time Off Allocations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2150 -msgid "\\text{€}283.73\\text{ Total} = \\begin{cases}\n" -"+ \\text{ €148.73 (Tax, since 2021 - coronavirus)} \\\\\n" -"+ \\text{ €30 (Internet)} \\\\\n" -"+ \\text{ €25 (Phone)} \\\\\n" -"+ \\text{ €80 (Car management fees)} \\\\\n" -"\\end{cases}" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2619 +msgid "European time off" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2160 -msgid "The **serious portion** of the representation costs is **not prorated**, while the **non-serious portion** is prorated based on working time." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2622 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2854 +msgid "How does it work?" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2163 -msgid "Navigate to :menuselection:`Payroll app --> Configuration --> Salary --> Rule Parameters`, and search for the `CP200: Representation Fees Threshold` record. Then, adapt the current value or introduce a new one from a given date." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2624 +msgid "If you were not subject to Belgian ONSS contributions before joining our company and do not have entitlement to legal holidays, or if your entitlement is incomplete, you can apply for European leave." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Representation Fees Threshold." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2628 +msgid "To qualify for European leave in a given year, you must work for at least 3 months during that year, whether with us or another employer. Once you have met this requirement, you will earn 5 days of European leave. Subsequently, you will accumulate additional days of vacation each month as follows:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2171 -msgid "It is possible to define, based on job position, which jobs are eligible to certain criteria in the :guilabel:`Payroll` tab." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2632 +msgid "After 3 months: 5 days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:0 -msgid "Representation Fees Job Position." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2633 +msgid "After 4 months: 7 days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2178 -msgid "Calculation of representation fees" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2634 +msgid "After 5 months: 9 days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2181 -msgid "Conditions for payment" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2635 +msgid "After 6 months: 10 days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2183 -msgid "Representation fees are only granted if:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2636 +msgid "After 7 months: 12 days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2185 -msgid "The employee **receives a basic salary**, and" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2637 +msgid "After 8 months: 14 days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2186 -msgid "The employee has **worked at least part of the time**, unless a **salary simulation** is in progress." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2638 +msgid "After 9 months: 15 days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2189 -msgid "If the employee is on **full leave** (without any working days), they are **not eligible** for representation fees." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2639 +msgid "After 10 months: 17 days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2193 -msgid "Determining the work time rate" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2640 +msgid "After 11 months: 19 days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2195 -msgid "The number of **working days per week** is extracted from the employee's contract." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2643 +msgid "The total of legal leave and European leave cannot exceed 20 days per year. You must use all your legal holidays before taking European leave." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2196 -msgid "If the employee has periods of **incapacity for work** (e.g., illness), the calculation adjusts the **work time rate** accordingly:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2646 +msgid "European leave entitlement expires on December 31st of the year it is earned and cannot be carried over to the following year. To qualify for European leave in a new year, you must complete another 3 months of work." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2199 -msgid "The total **incapacity hours** are determined." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2651 +msgid "How are these days paid?" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2200 -msgid "If the company follows a **biweekly schedule**, the incapacity hours are divided by **two**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2653 +msgid "European leaves are paid holidays taken in advance of your \"Double Holiday Pay\" (the June extra pay) for the following year. Essentially, the more European leave days you take in a given year, the less you will receive as June extra pay in the following year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2201 -msgid "The incapacity **rate** is calculated as:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2660 +msgid "Working schedule change" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2203 -msgid "\\text{incapacity rate} = 1 - \\frac{\\text{incapacity hours}}{\\text{total weekly hours}}" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2662 +msgid "This guide explains how to modify an employee's working time schedule in the Belgian payroll module of Odoo. Changing an employee's working hours affects their wage calculation, time-off allocation, and contract terms." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2208 -msgid "The **final work time rate** is then adjusted by multiplying it with the incapacity rate." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2667 +msgid "Steps to change an employee's working schedule" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2211 -msgid "Applying the threshold and pro-rating rules" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2669 +msgid "Navigate to the employee's contract (:menuselection:`Payroll app --> Contracts`), and select the contract of the employee whose working schedule you want to modify." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2213 -msgid "The **default threshold (€283.73)** is applied unless adjusted by the company." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2671 +msgid "Click on :icon:`fa-cog` :guilabel:`(Action)` and select :guilabel:`Working Schedule Change`. The wizard displays the current contract details and allows you to set new working time parameters." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2214 -msgid "If the employee has **worked a full-time schedule**, they receive the **full representation fees** without reduction." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2673 +msgid "Set the new working schedule:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2216 -msgid "If the employee works **part-time** (contractual or due to time credit), only the **non-serious portion** of the fees is prorated." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2675 +msgid "Choose the new :guilabel:`Working Schedule` from the available resource calendars." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2219 -msgid "The prorated formula for non-serious expenses is:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2676 +msgid "Define the :guilabel:`Start Date` for the change (mandatory)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2221 -msgid "\\text{adjusted amount} = \\text{threshold} + (\\text{total fees} - \\text{threshold}) \\times\n" -"\\frac{\\text{work time rate}}{100}" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2677 +msgid "If applicable, specify an :guilabel:`End Date`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2227 -msgid "If the employee has **missing workdays**, the final amount is further adjusted:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2678 +msgid "If the :guilabel:`Part Time` checkbox is selected, any difference between the reference calendar and the employee's new calendar will be covered using the *Absence Work Entry Type*. This ensures that the employee's monthly salary remains the same, regardless of the number of absence days in a given month. This setup is required for configuring *Time Credit*, *Parental Leave*, or *Medical Half-Time* correctly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2229 -msgid "First calculate the **daily reduction**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2684 +msgid "Adjust the employee's wage:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2231 -msgid "\\text{daily reduction} = \\frac{(\\text{total amount} - \\text{threshold}) \\times 3}{13 \\times \\text{days per week}}" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2686 +msgid "The wizard automatically computes the full-time equivalent wage based on the new working schedule." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2236 -msgid "Then calculate the **final amount**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2688 +msgid "You can review and modify the new wage if necessary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2238 -msgid "\\text{final amount} = max(0, \\text{total amount} - \\text{daily reduction} \\times\n" -"\\text{missing days})" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2690 +msgid "Manage time off allocation:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2245 -msgid "Final calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2692 +msgid "Select the relevant :guilabel:`Time Off Type`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2247 -msgid "If the employee meets all conditions, the final representation fees amount is **rounded to two decimal places** for payroll purposes." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2693 +msgid "Odoo automatically adjusts the employee's time-off entitlement based on the new working schedule using the following formula:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2249 -msgid "Employees working a full schedule receive **full reimbursement**, while those working **reduced hours** have the **non-serious portion prorated** accordingly." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2696 +msgid "\\text{New Time Off Allocation} = \\max(\\min(\\text{ Computed Allocation},\n" +"\\text{ Max Allocation}) + \\text{ Leaves Taken}, \\text{ Leaves Taken})" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2255 -msgid "This calculation ensures **fair allocation** of representation fees by distinguishing between **fixed serious costs** and **prorated non-serious costs**. The company can adjust the **threshold (€283.73 by default)** based on **justifiable business expenses**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2702 +msgid "**Computed Allocation** is the expected leave allocation based on the new schedule." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2259 -msgid "Employees working **full-time** receive their full representation fees, while those working **part-time or with absences** only receive a **pro-rated portion** of the non-serious fees." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2703 +msgid "**Max Allocation** is the maximum number of days allowed under the new working time." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2265 -msgid "Sick time off and relapse" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2704 +msgid "**Leaves Taken** ensures the employee does not receive fewer days than already used." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2267 -msgid "In Belgium, sick leave is managed according to two main regimes:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2706 +msgid "Decide on a follow-up contract" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2269 -msgid "**With guaranteed salary**: The employer continues to pay the worker's salary for a specified period." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2708 +msgid "If the working time change is temporary, you can enable :guilabel:`Post Change Contract Creation` to automatically create a contract that resumes the previous working schedule after the specified end date." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2271 -msgid "**Without guaranteed salary**: The worker receives benefits from the mutual insurance company after the guaranteed salary period." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2712 +msgid "Validate the changes" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2275 -msgid "Sick leave with guaranteed salary" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2714 +msgid "Click :guilabel:`Validate` to apply the new working schedule." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2277 -msgid "The guaranteed salary is a period during which the employer continues to pay the salary of the worker who is unable to work." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2715 +msgid "If the new schedule is the same as the current one, an error will be displayed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2280 -msgid "**Employees**: The employer pays 100% of the salary during the first full month of incapacity. After this period, if the incapacity continues, the worker falls under the mutual insurance regime." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2716 +msgid "The system will create a new contract with the updated working time and wage." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2284 -msgid "Sick leave without guaranteed salary" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2717 +msgid "If a previous contract existed, it will be closed with an end date before the new contract begins." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2286 -msgid "After the guaranteed salary period, the ONEM (National Employment Office) or the mutual insurance company takes over." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2721 +msgid "Result" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2289 -msgid "**Long-term illness**: An incapacity lasting more than 30 days leads to benefits from the mutual insurance company." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2723 +msgid "The employee's new working schedule is recorded." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2291 -msgid "**Relapse**: If a worker returns to work and then becomes ill again for the same reason within 14 days, this may be considered a relapse, and the rules for guaranteed salary may be adjusted." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2724 +msgid "Wage and time-off entitlements are adjusted accordingly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2295 -msgid "Management in Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2725 +msgid "A follow-up contract is created if applicable." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2297 -msgid "In Odoo, sick leave is automatically managed if the absences are related to the *Sick Time Off* work entry type." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "Working Schedule Change New Contracts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2300 -msgid "**Recording time off**: The employee records their absence through the **Time Off** module." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2733 +msgid "Work entries exports" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2301 -msgid "**Automation of work entries**: If the request is approved, Odoo automatically generates the corresponding Work Entries." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2736 +msgid "What are work entries?" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2303 -msgid "**Impact on payroll**: The guaranteed salary is automatically calculated according to the rules configured based on the worker's status (employee)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2738 +msgid "In the context of payroll, *work entries* typically refer to records or documentation related to an employee's work hours and earnings for a specific pay period. These entries are crucial for accurately calculating and processing employee compensation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2305 -msgid "**Compensation after the guaranteed salary**: Once the guaranteed salary period has expired, Odoo adjusts the Work Entries to reflect the transition to the mutual insurance company." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2742 +msgid "Work entries in the context of payroll are essential for both employees and employers. They provide a transparent and accurate record of an employee's compensation and deductions, ensuring that employees are paid correctly and that tax and legal requirements are met. Payroll software and systems are commonly used to manage and automate these work entries, making the payroll process more efficient and accurate." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2308 -msgid "Thus, Odoo ensures a smooth and compliant management of sick leave according to Belgian regulations." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2749 +msgid "Main concepts" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2313 -msgid "Social Balance Sheet" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2752 +msgid "General" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2318 -msgid "The *Social Balance Sheet* was introduced by the law of December 22, 1995, as part of measures for the implementation of the multi-year employment plan. Companies required to file annual accounts (including some that are not obligated to publish such accounts - see the `National Bank of Belgium website `_ for details) must also prepare and submit a Social Balance Sheet to the National Bank of Belgium." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2754 +msgid "In Odoo, work entries mainly refer to *time entries* (attendance tracking), these are work entries that consist of time records, which include the number of hours worked by an employee during a given pay period. These entries may specify regular working hours, overtime hours, and any other relevant time-related information, such as breaks, paid time off, unpaid time off, parental leave, credit-time, etc." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2324 -msgid "The Royal Decree of August 4, 1996, incorporates the Social Balance Sheet into the annual accounts, specifically as an annex. This makes it an integral part of a company's financial statements." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2760 +msgid "Work entries serve a dual role in payroll management. First, they enable organizations to independently compute employee payslips. Second, they facilitate the transmission of pertinent data to external payroll service providers, who then use this information to calculate and generate the payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2328 -msgid "Contents of the Social Balance Sheet" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2768 +msgid "They have a Name: used to identify the type of entry (e.g., Attendance, Paid Time Off, etc.)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2330 -msgid "The content of the Social Balance Sheet is determined by the Royal Decree of January 30, 2001, implementing the Company Code. The Social Balance Sheet consists of several sections:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2769 +msgid "They have a Payroll Code: used in Odoo's salary rules computations" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2333 -msgid "Sections I and II: Information on employed persons and personnel movements during the fiscal year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2770 +msgid "They have an External Code: used to provide the correct Work Entry code to an external payroll service provider." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2334 -msgid "Section III: Initiatives related to training." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2772 +msgid "They are generated based on the configuration of the contract and the time off types" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2336 -msgid "Since the Social Balance Sheet is part of a company's annual accounts, the works council receives this information as part of its mission regarding economic and financial information." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2773 +msgid "They have a duration, a start and end date, a state and are always linked to an employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2339 -msgid "Additionally, the works council receives data on employment-related benefits along with annual employment-related information (Trillium). These details were fully integrated into the Social Balance Sheet until 2008." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2778 +msgid "They are the main source of configuration for your work entries. Thanks to your different types of work entries, you'll be able to differentiate the time records of your employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2344 -msgid "Scope of the Social Balance Sheet" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2780 +msgid "They have a name." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2346 -msgid "The Social Balance Sheet contains specific data related to workforce composition, staff turnover, and training programs. Some organizations not required to publish annual accounts must still file a separate Social Balance Sheet. This applies primarily to certain hospitals and private legal entities employing at least 20 full-time equivalents (FTEs)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2781 +msgid "They contain a code, external code, payroll code and a color for visual tracking." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2351 -msgid "Any company, association, or foundation with at least 20 workers on an annual average (in FTE) must complete and submit the Social Balance Sheet." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2782 +msgid "They allow other types of configurations such as how they are displayed in payslips, decide whether this type of work entry should be considered as paid or unpaid (eg. unpaid leave), decide whether this type of work entry has a link with time off, is valid for some advantages or how it should be reflected in your reporting." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2354 -msgid "The Social Balance Sheet is part of:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2788 +#: ../../content/applications/hr/time_off.rst:42 +msgid "Time off types" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2356 -msgid "\"Other documents to be filed under the Company and Associations Code\" (for companies);" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2790 +msgid "As mentioned above, since work entry types can be linked to a time off type, you are also able to define the work entry type for each time-off type. On the time off type you have a many2one relation with the work entry type." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2357 -msgid "\"Explanatory Notes\" (for associations and foundations)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2795 +msgid "Steps to generate the work entries of your staff" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2360 -msgid "Obligations by entity type" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2797 +msgid "Create all the employees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2363 -msgid "Companies, associations, and foundations required to publish a Social Balance Sheet" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2798 +msgid "Create a contract and set its status to :guilabel:`Running` for each employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2365 -msgid "For Belgian companies employing at least one FTE:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2800 +msgid "In the contract, choose the :guilabel:`Work Entry Source`. It tells the system how work entries for an employee should be generated. It can be based on:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2367 -msgid "**Standardized model**: This schema includes a \"Social Balance Sheet\" section, which must be completed." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2803 +msgid ":guilabel:`Working Schedule`: Odoo uses the predefined working hours and days set in the employee's working schedule to generate work entries. This is useful for regular, predictable shifts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2369 -msgid "**Specific model**: If the model used does not include a Social Balance Sheet, it must be provided separately." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2806 +msgid ":guilabel:`Attendances`: Work entries are generated from the employee's attendance records (i.e., when they check-in and check-out)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2372 -msgid "For Belgian associations and foundations employing at least 20 FTEs:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2808 +msgid ":guilabel:`Planning`: Work entries are created based on the validated shifts or slots allocated to the employee in the **Planning** app (often used for scheduling roles like retail shifts, restaurants, etc.)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2374 -msgid "**Standard model**: Includes a \"Social Balance Sheet\" section that must be completed." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2812 +msgid "Generate the work entries each month" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2375 -msgid "**Specific model**: A separate Social Balance Sheet must be submitted if the chosen model does not include one." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2814 +msgid "Odoo automatically creates the work entries in the **Payroll** app based on the work entry source of the contract and the different time-offs taken. You can edit the work entries manually. You can always decide to regenerate work entries manually but be careful if you already made some manual changes, Odoo will regenerate the work entries based on what it knows (e.g., your working schedule and time off)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2378 -msgid "Associations and foundations with fewer than 20 FTEs may voluntarily complete the Social Balance Sheet but are not legally required to do so." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2819 +msgid "Managing conflicts" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2381 -msgid "For foreign companies, such as branches of foreign corporations and foreign non-profit organizations (ASBL) with activities in Belgium, the Social Balance Sheet applies only to their Belgian operations." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2821 +msgid "Conflicts are pointing to entries that can't be validated without your intervention. This means you'll have to qualify the entry and decide which is the correct entry to be defined for the time period if you want to be able to generate the payslip or validate the entries. Conflicts arise when there are overlapping entries or when Odoo detects that there is a time off request still pending for validation. For instance, if an employee is marked as attending work and at the same time there's a paid leave request to be validated for the same period, that's a conflict." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2385 -msgid "The Social Balance Sheet is made publicly available by the Central Balance Sheet Office as part of the financial statements submission." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2828 +msgid "Conflicts can be managed by filtering on the conflicting entries and resolving the discrepancy. Since **Odoo 16.4**, Odoo filters by default on conflicting entries. For prior versions, you can still filter manually on conflicting entries or use the conflicting menu item." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2389 -msgid "Entities required to file a separate Social Balance Sheet" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2831 +msgid "Once the conflict is resolved you can either proceed to generate the payslips for your employees or export your work entries to the right entity." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2391 -msgid "Certain organizations that do not need to publish annual accounts must still submit a Social Balance Sheet to the Central Balance Sheet Office. This data is used exclusively for statistical purposes and is not made publicly available. Submission in these cases is free of charge." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2835 +msgid "Export work entries" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2395 -msgid "This exception applies to:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2838 +msgid "This section is about exporting work entries to SD Worx, but the configuration and behavior is similar for other exports to Partena, Group S and UCM." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2397 -msgid "**Hospitals**, unless they are structured as limited liability companies or large ASBLs, which must submit full financial statements, including the integrated Social Balance Sheet." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2844 +msgid "This sheet is here to help you learn how Odoo's **SD Worx** (`l10n_be_hr_payroll_sd_worx`) module simplifies payroll by enabling easy export of work entries. This guide provides quick steps to generate :file:`.txt` files for direct import into SD Worx calendars, saving time and ensuring accuracy." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2399 -msgid "**Private legal entities** that are not required to submit annual accounts but have at least 20 employees." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2849 +msgid "First and foremost, it's important to understand there is no direct integration between Odoo and SD Worx. There is no automatic exchange of information, either way. Odoo does not communicate directly with SD Worx, and the reverse is also true." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2402 -msgid "The required model depends on the entity type:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2856 +msgid "In reality, Odoo provides a standardized export in .txt format for employees' work entries, allowing the generation of a file that conforms to a specific format for inputting these entries into the SD Worx software." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2404 -msgid "**Hospitals** must use the full or abridged Social Balance Sheet model based on their size." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2861 +msgid "What does it mean in terms of data management?" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2405 -msgid "**Foreign entities** must use the full or abridged Social Balance Sheet model, based on the size of their Belgian establishments." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2863 +msgid "Since there is no direct integration between both systems, it implies that certain data will need to be manually entered into both systems. For instance, when you create a new employee in Odoo, you'll also need to manually create the employee in SD Worx (and vice versa). This manual data entry requirement extends to various aspects such as contracts, work schedules, salary details, and personal information about employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2407 -msgid "**Private legal entities** with at least 50 employees must use the full model, while those with 20-49 employees may use the abridged model." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2869 +msgid "Essentially, all the information necessary for SD Worx to calculate salaries and generate payslips must be manually inputted into both systems." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2411 -msgid "Social Balance Sheet models" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2873 +msgid "What's the advantage of exporting to SD worx?" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2413 -msgid "The latest versions of the Social Balance Sheet models can be found at the following links:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2875 +msgid "Odoo is an integrated software that can comprehensively handle all variable payroll elements, including employee personal information, contract details, various time-off types, and other work entry categories. Through Odoo's integration capabilities, you can access all this crucial data in one centralized location, making it easily accessible for your HR team and employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2415 -msgid "**Full Model**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2880 +msgid "This integration not only ensures data accuracy but also maintains consistency, reducing the likelihood of errors when transmitting work entry information to your external payroll provider. With the module in place, a single click generates a :file:`.txt` file that's ready for direct import into SD Worx, streamlining the entire data transmission process." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2417 -msgid "PDF: `Full Social Balance Sheet PDF `_" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2886 +msgid "Steps to set up the SD Worx module" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2418 -msgid "Word: `Full Social Balance Sheet Word `_" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2889 +msgid "You must be logged into a Belgian company for the following steps to work." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2420 -msgid "**Abridged Model**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2891 +msgid ":ref:`install ` the **Belgium - Payroll - Export to SD Worx** (`l10n_be_hr_payroll_sd_worx`) module." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2422 -msgid "PDF: `Abridged Social Balance Sheet PDF `_" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2893 +msgid "Go to :menuselection:`Payroll app --> Configuration --> Settings` to fill in the :guilabel:`SD Worx code` field. This is the company's SD Worx code, you get it directly from the SD worx software. When you create a company, it has a unique identifier which you need to set in the field." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2423 -msgid "Word: `Abridged Social Balance Sheet Word `_" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2897 +msgid "For each employee, under the :guilabel:`Settings` tab, fill in the :guilabel:`SDWorx code` field." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2426 -msgid "Assistance in completing the Social Balance Sheet" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2898 +msgid "For work entry types, under the :guilabel:`Settings` tab, fill in the :guilabel:`SDWorx code` field as well." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2428 -msgid "For guidance on completing the Social Balance Sheet, refer to the following resources:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2901 +msgid "You can now export your work entries in the SD Worx :file:`.txt` format by opening the wizard under :menuselection:`Payroll app --> Reporting --> Belgium --> Export Work Entries to SDWorx`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2430 -msgid "**CNC Opinion S100**: `Questions and Answers on the Social Balance Sheet `_" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2904 +msgid "The file contains a series of lines such as the following line of text: `1111110000024K2023042370100360`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2431 -msgid "**CNC Opinion 2009/12**: `Social Balance Sheet and Statutory Workers `_" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2907 +msgid "Each line represents a work entry, and the structure is outlined below:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2432 -msgid "**Explanatory Note**: `Information on Training Activities `_" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2909 +msgid "`111111` -> Company SD Worx code" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2435 -msgid "Submitting a separate Social Balance Sheet" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2910 +msgid "`0000024` -> Employee SD Worx code" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2437 -msgid "A separate Social Balance Sheet must be submitted online as a PDF via the **Filing** application. The model can be selected under :guilabel:`Other Documents`, with options for :guilabel:`Abridged Social Balance Sheet` or :guilabel:`Full Social Balance Sheet`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2911 +msgid "`K` -> Delimiter" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2441 -msgid "For further details, visit the National Bank of Belgium's website: `www.nbb.be `_." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2912 +msgid "`20230423` -> Date" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2444 -msgid "Generating Social Balance Sheet in Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2913 +msgid "`7010` -> SD Worx work entry code" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2446 -msgid "Navigate to :menuselection:`Payroll app --> Reporting --> Belgium --> Social Balance Sheet` and select the reference :guilabel:`Period`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2914 +msgid "`0360` -> Duration (edited)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Social Balance Sheet Wizard." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2916 +msgid "Once the :file:`.txt` file is exported, it can be directly imported in this format into the SD Worx software. Doing so updates the calendars of each collaborator." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2452 -msgid "Then click :guilabel:`Export to PDF` or :guilabel:`Export to XLSX` to generate the social balance sheets containing all the data available in your Odoo database." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2922 +msgid "274.XX sheets" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2455 -msgid "The different pieces of information are split by gender, or by working schedule (Part Time, Full Time, Full Time equivalent), for the whole period, and month by month, as requested by the National Bank of Belgium." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2924 +msgid "This section provides an overview of Declaration 274, its components, and how it is handled within Odoo." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Social Balance Sheet PDF Header." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2928 +msgid "Declaration 274.10" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Social Balance Sheet PDF Content." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2930 +msgid "Withholding tax is an advance payment on professional income tax. It is calculated based on guidelines established by the tax administration. While reducing withholding tax is generally not allowed, employees may request to pay more in order to better match their final tax liability." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Social Balance Sheet XLSX Content." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2934 +msgid "Withholding tax must be deducted from both employees' and company directors' income. If the withholding tax is insufficient, advance tax payments must be made to avoid additional tax penalties." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2471 -msgid "Social Security certificate" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2938 +msgid "In practice, some employees do not inform their employer of personal changes (e.g., having a child), which can affect tax calculations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2473 -msgid "The Social Security certificate in Odoo provides a detailed breakdown of all social charges paid by the employee or employer, categorized by type (e.g., year-end bonus, private car reimbursement, double holiday pay, etc.). This report is particularly useful for audit companies and for verifying that the declared amounts align with accounting entries." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2941 +msgid "Withholding tax must be declared and paid either quarterly or monthly using form 274. These declarations must be submitted via the FINPROF application by the 15th of the month following the reporting period." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2479 -msgid "Accessing the Social Security certificate" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2945 +msgid "Taxable income and corresponding withholding tax must be recorded in fiscal remuneration forms 281.x and summary statements 325x. Employers failing to report these correctly may be subject to a 309% penalty on undisclosed amounts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2481 -msgid "To generate the Social Security certificate, follow these steps:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2949 +msgid "The tax administration compares the declared amounts in form 274 with the amounts reported in the fiscal forms. If withholding tax payments are insufficient, the company may be charged the difference. If a 274 form is submitted without corresponding tax payment, additional tax penalties will apply." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2483 -msgid "Navigate to :menuselection:`Payroll app --> Reporting --> Belgium --> Social Security Certificate`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2954 +msgid "It is crucial to adhere to all administrative guidelines to avoid unexpected tax charges." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2485 -msgid "Select the reference :guilabel:`Period`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2957 +msgid "Declarations 274.32, 274.33, 274.34" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2486 -msgid "Choose the data :guilabel:`Aggregation Level`:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2960 +msgid "Withholding tax exemptions for research employees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2488 -msgid ":guilabel:`Whole Company`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2962 +msgid "Companies employing scientific researchers may qualify for withholding tax reductions under specific conditions:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2489 -msgid ":guilabel:`By Department`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2965 +msgid "**Form 281.32** applies to civil engineers and PhD holders." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2490 -msgid ":guilabel:`By Employee`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2966 +msgid "**Form 281.33** applies to employees holding a master's degree." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Social Security Certificate Wizard." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2967 +msgid "**Form 281.34** applies to employees holding a bachelor's degree." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2496 -msgid "Exporting the report" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2969 +msgid "Employers engaged in scientific research may be eligible for an exemption from withholding tax payments. To qualify, they must register their R&D projects with Belspo. From August 1, 2023, this registration must occur before the project begins." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2498 -msgid "Once the selections are made, you can export the report in different formats:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2974 +msgid "Tax exemption details" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2500 -msgid "Click :guilabel:`Export to PDF` to generate a printable version of the Social Security certificate." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2976 +msgid "This tax incentive allows companies to retain 80% of the withholding tax deducted from researchers' salaries. However, the exemption rate differs for researchers based on their qualifications:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2502 -msgid "Click :guilabel:`Export to XLSX` to generate an Excel file containing all relevant data." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2979 +msgid "PhD and master's degree holders: Full 80% exemption." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Social Security Certificate PDF Header." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2980 +msgid "Bachelor's degree holders: 50% of the full exemption amount." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Social Security Certificate PDF Content." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2981 +msgid "For non-SME companies, this limit is further reduced to 25%." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Social Security Certificate XLSX Content." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2983 +msgid "The exemption applies only to the portion of working time dedicated to scientific research, covering fundamental research, industrial research, or experimental development." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2513 -msgid "This feature ensures full transparency and compliance with social security regulations in Belgium." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2986 +msgid "This exemption does not affect the net salary of employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2523 -msgid "Legal time off" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2989 +msgid "Capping rules" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2525 -msgid "This guide provides an overview of the basic rules governing legal holiday entitlements in Belgium for employers using Odoo." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2991 +msgid "The total exemption granted to researchers with a bachelor's degree is limited to 25% of the exemption granted to PhD and master's degree holders. For small companies (as defined in Article 15 §§ 1-6 of the Companies Code), this limit is doubled. These rules have remained unchanged since January 1, 2020." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2529 -msgid "Holiday entitlement calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2997 +msgid "How it works in Odoo" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2531 -msgid "Your holiday entitlement for the current year (N) is determined by the number of months worked in Belgium during the previous year (N-1)." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2999 +msgid "Odoo automates the calculation and declaration of withholding tax exemptions using predefined payroll structures. Below is an explanation of how the system processes these exemptions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2534 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2565 -msgid "**Calculation details:**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3002 +msgid "Navigate to :menuselection:`Payroll app --> Reporting --> 274.XX Sheets` to create a new declaration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2536 -msgid "Employees earn **2 days of leave per month** based on a 6-day work week." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3005 +msgid "Select the reference :guilabel:`Year` and :guilabel:`Month`, and the different amounts are computed accordingly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2537 -msgid "The entitlement is adjusted for a 5-day work week: :math:`(\\text{Total Days} \\div 6) \\times 5`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3008 +msgid "**Payroll calculation**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2540 -msgid "If an employee worked **7 months** in the previous year (N-1):" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3010 +msgid "Odoo calculates gross salary and total withholding tax." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2542 -msgid "**6-day work week:** :math:`7 \\times 2 = 14 \\text{ days}`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3011 +msgid "It accounts for specific payroll components, including December double bonuses." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2543 -msgid "**5-day work week:** :math:`14 \\div 6 \\times 5 = 11.67 \\text{ days}`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3013 +msgid "**Filtering eligible payslips**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2545 -msgid "**Partial Month Calculation:**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3015 +msgid "Payslips linked to research-related contracts are considered." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2547 -msgid "Worked **1st to 10th**: Full month counted." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3016 +msgid "Employees are categorized based on their qualifications (PhD, master's, or bachelor's degrees)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2548 -msgid "Worked **11th to 19th**: Half month counted." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3018 +msgid "**Exemption calculation**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2549 -msgid "Worked **20th onwards**: Month not counted." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3020 +msgid "The withholding tax exemption is calculated at 80% of the withheld amount." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2551 -msgid "**Rounding Rules:**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3021 +msgid "Exemptions for bachelor's degree holders are capped according to regulations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2553 -msgid "Less than **0.35**: Round to **0**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3023 +msgid "**Final adjustments**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2554 -msgid "Between **0.35 - 0.74**: Round to **0.5**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3025 +msgid "The system ensures compliance with legal capping rules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2555 -msgid "**0.75 and above**: Round to **1**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3026 +msgid "If necessary, adjustments are made based on the total exemption granted." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2557 -msgid "For a full-time employee, this typically results in **11.5 days of legal holiday** entitlement." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3028 +msgid "Click on :guilabel:`Export XML file` to generate the file to post on FINPROF portal and the structured communication to link to your payment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2560 -msgid "Maximum holiday entitlement" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 +msgid "274.XX XML file." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2562 -msgid "Employees are entitled to a maximum of **4 weeks** of holiday based on their working schedule. If an employee switches between full-time and part-time work, their entitlement is adjusted accordingly." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3034 +msgid "Click on :guilabel:`Create 274.XX Sheets` to generate the :file:`.pdf` files of those declarations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2567 -msgid "**5-day work week**: :math:`4 \\times 5 = 20 \\text{ days}`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3037 +msgid "In order to for the exemption to work properly, the *Certificate Level* should be correctly configured on the employee's form." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2568 -msgid "**4-day work week**: :math:`4 \\times 4 = 16 \\text{ days}`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3040 +msgid "The *Time Percentage R&D* rate should be specified on the employee's contract form as well." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2569 -msgid "**3-day work week**: :math:`4 \\times 3 = 12 \\text{ days}`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3042 +msgid "If the accounting application is installed and running properly, you can also post directly the different amounts in your accounting entries with the :guilabel:`Post Journal Entries` button." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2572 -msgid "If an employee joined **Odoo on January 1, 2024**, and plans to switch to a **3-day work week from April 1, 2024**:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3046 +msgid "If the *Post Journal Entries* is not present on the wizard, you need to configure the journal and the different accounts for each amount type from :menuselection:`Payroll app --> Configuration --> Settings`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2575 -msgid "**Step 1: Calculate holiday entitlement for 2024**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3050 +msgid "In the :guilabel:`Belgian Localization` section, complete each of the :guilabel:`Witholding Taxes Exemption` journal entry accounts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2577 -msgid "The employee worked **9 months in 2023**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3053 +msgid "Employers using Odoo can efficiently manage and report withholding tax exemptions, ensuring compliance with regulatory requirements." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2578 -msgid "**6-day work week basis**: :math:`9 \\times 2 = 18 \\text{ days}`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3056 +msgid "For further details, consult the Odoo finance documentation or your tax adviser." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2579 -msgid "Adjusted for **5-day work week**: :math:`18 \\div 6 \\times 5 = 15 \\text{ days}`" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3061 +msgid "281.10 Declaration" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2581 -msgid "**Step 2: Verify maximum holiday entitlement**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3066 +msgid "The Belgian fiscal declaration 281.10 is an annual statement that employers must submit to the tax authorities, detailing the salaries and benefits provided to each employee. This declaration ensures accurate tax calculations and compliance with Belgian tax regulations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2583 -msgid "For a **5-day work week**, the maximum entitlement is **20 days**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3071 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3141 +msgid "Generating the declaration in Odoo" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2584 -msgid "Since the employee is entitled to **15 days**, they remain within the limit." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3073 +msgid "Odoo provides a streamlined process for generating the 281.10 declaration, offering both a comprehensive XML file for electronic submission and individual PDF files for record-keeping." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2586 -msgid "**Step 3: Adjust entitlement for the new work schedule**" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3077 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3147 +msgid "Global XML declaration" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2588 -msgid "From April 1, 2024, the employee moves to a **3-day work week**." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3079 +msgid "To generate the global XML file in Odoo, navigate to :menuselection:`Payroll app --> Reporting --> 281.10 Sheet`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2589 -msgid "Maximum entitlement for a **3-day work week**: :math:`3 \\times 4 = 12 \\text{ days}`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3082 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3152 +msgid "Then, create a new record by selecting the reference :guilabel:`Year`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2590 -msgid "If no leave is taken before April 1, the employee may take up to **12 days** from their 15-day entitlement." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3085 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3155 +msgid "The :guilabel:`Sending Type` and :guilabel:`Treatment Type` options are currently experimental and should be kept at their default values to ensure a valid original declaration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2592 -msgid "The **remaining 3 days** will be settled at the end of the year." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3088 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3158 +msgid "Click the :guilabel:`Populate` button to generate the eligible employees, then click the :guilabel:`Create XML` button. A green indicator will appear to confirm successful file generation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2594 -msgid "This ensures compliance with Belgian legal leave regulations and allows employers to manage holiday entitlements effectively within Odoo." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3092 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3162 +msgid "Individual PDF declaration" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2598 -msgid "Legal time off allocation" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3094 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3164 +msgid "To generate individual PDF files for each employee, click the :guilabel:`Populate` button. A line is generated for each employee who received a payslip during the reference year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2600 -msgid "This is possible to generate the legal time off for all your employees at the beginning of a new year using the wizard in :menuselection:`Payroll app --> Reporting --> Belgium --> Paid Time Off Allocation`." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3098 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3168 +msgid "The PDF files are generated automatically in batches of 30, so the process may take some time to complete." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2604 -msgid "Based on your employees occupation over last year, the number of available time off is pre-computed for each employee." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3105 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3175 +msgid "Select the employees whose documents you want to post, then click the :guilabel:`Post PDF` button." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Paid Time Off Allocation Wizard." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3107 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3177 +msgid "Once posted, employees can access the PDF from their documents portal via the :icon:`fa-file-text` :guilabel:`Documents` smart button on their profile." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2610 -msgid "Once validated, a draft allocation is generated for each single employee, waiting a manual confirmation that can be done in batch." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3111 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3181 +msgid "Submitting the XML declaration" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Paid Time Off Allocations." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3113 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3183 +msgid "After generating the XML file, it must be submitted to the Belgian tax authorities. Ensure you are familiar with the `official submission process `_." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2619 -msgid "European time off" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3117 +msgid "The XML files containing the fiscal data to be sent via the Belcotax-on-web (BOW) application must be converted to the .bow format." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2622 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2854 -msgid "How does it work?" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3120 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3190 +msgid "This conversion requires the use of a validation module available under the *Technical Documentation* section." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2624 -msgid "If you were not subject to Belgian ONSS contributions before joining our company and do not have entitlement to legal holidays, or if your entitlement is incomplete, you can apply for European leave." +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3123 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3193 +msgid "The validation module has two prerequisites:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2628 -msgid "To qualify for European leave in a given year, you must work for at least 3 months during that year, whether with us or another employer. Once you have met this requirement, you will earn 5 days of European leave. Subsequently, you will accumulate additional days of vacation each month as follows:" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3125 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3195 +msgid "Java 8 must be installed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2632 -msgid "After 3 months: 5 days" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3126 +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3196 +msgid "The certificate authority that signed the validation module must be recognized." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2633 -msgid "After 4 months: 7 days" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3131 +msgid "281.45 Declaration" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2634 -msgid "After 5 months: 9 days" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3136 +msgid "The Belgian fiscal declaration 281.45 is an annual statement that entities must submit to the tax authorities, detailing the amounts of author's rights and neighboring rights paid to beneficiaries. This declaration ensures accurate tax reporting and compliance with Belgian tax regulations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2635 -msgid "After 6 months: 10 days" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3143 +msgid "Odoo provides a streamlined process for generating the 281.45 declaration, offering both a comprehensive XML file for electronic submission and individual PDF files for record-keeping." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2636 -msgid "After 7 months: 12 days" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3149 +msgid "To generate the global XML file in Odoo, navigate to :menuselection:`Payroll app --> Reporting --> 281.45 Sheet`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2637 -msgid "After 8 months: 14 days" +#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3187 +msgid "The XML files containing the fiscal data to be sent via the Belcotax-on-web (BOW) application must be converted to the :file:`.bow` format." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2638 -msgid "After 9 months: 15 days" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:3 +msgid "Egypt" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2639 -msgid "After 10 months: 17 days" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:5 +msgid "The Egypt **Payroll** localization package enables payroll processing that fully complies with Egyptian labor laws. It calculates progressive income tax, employee- and employer-paid social security, and core salary components, including housing and transportation allowances." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2640 -msgid "After 11 months: 19 days" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:12 +msgid ":ref:`Install ` the following modules to get all the features of the Egypt **Payroll** localization:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2643 -msgid "The total of legal leave and European leave cannot exceed 20 days per year. You must use all your legal holidays before taking European leave." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:18 +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:19 +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:20 +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:39 +msgid "Name" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2646 -msgid "European leave entitlement expires on December 31st of the year it is earned and cannot be carried over to the following year. To qualify for European leave in a new year, you must complete another 3 months of work." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:19 +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:20 +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:21 +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:40 +msgid "Technical name" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2651 -msgid "How are these days paid?" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:20 +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:21 +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:22 +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:42 +msgid "Description" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2653 -msgid "European leaves are paid holidays taken in advance of your \"Double Holiday Pay\" (the June extra pay) for the following year. Essentially, the more European leave days you take in a given year, the less you will receive as June extra pay in the following year." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:21 +msgid ":guilabel:`Egypt - Payroll`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2660 -msgid "Working schedule change" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:22 +msgid "`l10n_eg_hr_payroll`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2662 -msgid "This guide explains how to modify an employee's working time schedule in the Belgian payroll module of Odoo. Changing an employee's working hours affects their wage calculation, time-off allocation, and contract terms." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:23 +msgid "Payroll module includes all salary rules, leave logic, and compensation rules compliant with Egyptian Labor Law." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2667 -msgid "Steps to change an employee's working schedule" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:25 +msgid ":guilabel:`Egypt - Payroll with Accounting`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2669 -msgid "Navigate to the employee's contract (:menuselection:`Payroll app --> Contracts`), and select the contract of the employee whose working schedule you want to modify." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:26 +msgid "`l10n_eg_hr_payroll_account`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2671 -msgid "Click on :icon:`fa-cog` :guilabel:`(Action)` and select :guilabel:`Working Schedule Change`. The wizard displays the current contract details and allows you to set new working time parameters." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:27 +msgid "Adds account mappings related to payroll calculations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2673 -msgid "Set the new working schedule:" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:30 +msgid ":doc:`Egypt fiscal localization documentation <../../../finance/fiscal_localizations/egypt>`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2675 -msgid "Choose the new :guilabel:`Working Schedule` from the available resource calendars." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:33 +msgid "Egyptian employee contracts" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2676 -msgid "Define the :guilabel:`Start Date` for the change (mandatory)." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:35 +msgid "Once an employee has been :doc:`created in the database <../../employees/new_employee>`, a :ref:`contract must be created `." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2677 -msgid "If applicable, specify an :guilabel:`End Date`." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:38 +msgid "To check if the user already has a contract, navigate to the **Employees** app, then click on the employee's Kanban card. The :icon:`fa-book` :guilabel:`Contracts` smart button displays a red zero when no contract exists. Otherwise, it displays :guilabel:`In contract since (contract start date)` in green." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2678 -msgid "If the :guilabel:`Part Time` checkbox is selected, any difference between the reference calendar and the employee's new calendar will be covered using the *Absence Work Entry Type*. This ensures that the employee's monthly salary remains the same, regardless of the number of absence days in a given month. This setup is required for configuring *Time Credit*, *Parental Leave*, or *Medical Half-Time* correctly." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:44 +msgid "Contracts can also be found by navigating to :menuselection:`Employees app --> Employees --> Contracts`. All contracts appear in a list view, grouped by status." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2684 -msgid "Adjust the employee's wage:" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:47 +msgid "Populate the following contractual information in the :guilabel:`Salary Information` tab of the contract:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2686 -msgid "The wizard automatically computes the full-time equivalent wage based on the new working schedule." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:50 +msgid ":guilabel:`Social Insurance Reference Amount`: Used as the base amount for calculating the :ref:`social insurance employee and employer portions `." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2688 -msgid "You can review and modify the new wage if necessary." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:53 +msgid ":guilabel:`Number of Leave Days`: Used for calculating the :ref:`provision amount for the annual leave for the employee `." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2690 -msgid "Manage time off allocation:" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:55 +msgid ":guilabel:`Provision Number of Days`: Corresponds with the number of days used in the calculation of the :ref:`provision value of the end of service for the employee `." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2692 -msgid "Select the relevant :guilabel:`Time Off Type`." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:58 +msgid ":guilabel:`Total Number of Days`: Refers to the number of days used to calculate the :ref:`end-of-service benefit paid to the employee when their employment with the company ends `." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2693 -msgid "Odoo automatically adjusts the employee's time-off entitlement based on the new working schedule using the following formula:" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:65 +msgid "Social insurance" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2696 -msgid "\\text{New Time Off Allocation} = \\max(\\min(\\text{ Computed Allocation},\n" -"\\text{ Max Allocation}) + \\text{ Leaves Taken}, \\text{ Leaves Taken})" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:67 +msgid "Social insurance rules calculate the contribution amounts that are to be paid by the employer and employee to the :abbr:`NOSI (National Organization for Social Insurance)`. This is only available for Egyptian employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2702 -msgid "**Computed Allocation** is the expected leave allocation based on the new schedule." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:71 +msgid "The employer contributes 18.75% of the social insurance reference amount for the employee. On the other hand, the employee contributes 11% of their insurance reference amount, and that amount gets deducted from the payslip amount." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2703 -msgid "**Max Allocation** is the maximum number of days allowed under the new working time." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:76 +msgid "The social insurance reference amount is set per employee in their contracts." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2704 -msgid "**Leaves Taken** ensures the employee does not receive fewer days than already used." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:79 +msgid "Leaves" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2706 -msgid "Decide on a follow-up contract" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:81 +msgid "The following leave types are available to employees working in Egypt: :ref:`Annual leave `, :ref:`Sick leave `, :ref:`Unpaid leave `, and :ref:`Other leave types `." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2708 -msgid "If the working time change is temporary, you can enable :guilabel:`Post Change Contract Creation` to automatically create a contract that resumes the previous working schedule after the specified end date." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:91 +msgid "Employees are eligible for 21 days of annual leave, and if the employee requires more days, they have to be :ref:`requested from HR managers ` accordingly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2712 -msgid "Validate the changes" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:95 +msgid "Since the annual leave is fully paid, it is not connected to a salary rule, but it will appear on the worked days on the payslip form and on the PDF printout." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2714 -msgid "Click :guilabel:`Validate` to apply the new working schedule." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:101 +msgid "Sick leave" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2715 -msgid "If the new schedule is the same as the current one, an error will be displayed." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:103 +msgid "Three cases exist for sick leaves in terms of the amount to be deducted from the employee:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2716 -msgid "The system will create a new contract with the updated working time and wage." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:105 +msgid ":guilabel:`Fully paid`: first 30 calendar days each year (affects only working entries; no payroll deduction)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2717 -msgid "If a previous contract existed, it will be closed with an end date before the new contract begins." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:108 +msgid "**Payroll computation** =(Daily Wage)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2721 -msgid "Result" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:110 +msgid ":guilabel:`75% paid`: next 60 days; payroll rule deducts 25% of an employee's salary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2723 -msgid "The employee's new working schedule is recorded." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:112 +msgid "**Payroll computation** =(Daily Wage * 0.25)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2724 -msgid "Wage and time-off entitlements are adjusted accordingly." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:114 +msgid ":guilabel:`0% paid`: after 90 days; payroll rule deducts 100% of an employee's salary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2725 -msgid "A follow-up contract is created if applicable." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:116 +msgid "**Payroll computation** =(Daily Wage * 0.00)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "Working Schedule Change New Contracts." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:121 +msgid "Unpaid leave" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2733 -msgid "Work entries exports" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:123 +msgid "Deductions are applied on the employee's salary based on the number of unpaid leave days taken, and it is calculated by dividing the monthly salary for the employee by 30 to get the daily salary and then multiplying it by the number of unpaid leave days taken." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2736 -msgid "What are work entries?" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:130 +msgid "Other leave types" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2738 -msgid "In the context of payroll, *work entries* typically refer to records or documentation related to an employee's work hours and earnings for a specific pay period. These entries are crucial for accurately calculating and processing employee compensation." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:132 +msgid "These are leave types considered fully paid and do not affect the end payslip, but are tracked in the working entries:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2742 -msgid "Work entries in the context of payroll are essential for both employees and employers. They provide a transparent and accurate record of an employee's compensation and deductions, ensuring that employees are paid correctly and that tax and legal requirements are met. Payroll software and systems are commonly used to manage and automate these work entries, making the payroll process more efficient and accurate." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:135 +msgid "Maternity leave" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2749 -msgid "Main concepts" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:136 +msgid "Hajj leave" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2752 -msgid "General" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:137 +msgid "Death leave" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2754 -msgid "In Odoo, work entries mainly refer to *time entries* (attendance tracking), these are work entries that consist of time records, which include the number of hours worked by an employee during a given pay period. These entries may specify regular working hours, overtime hours, and any other relevant time-related information, such as breaks, paid time off, unpaid time off, parental leave, credit-time, etc." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:140 +msgid "Income tax" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2760 -msgid "Work entries serve a dual role in payroll management. First, they enable organizations to independently compute employee payslips. Second, they facilitate the transmission of pertinent data to external payroll service providers, who then use this information to calculate and generate the payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:142 +msgid "In Egypt, employees are subject to a progressive income tax system, where tax rates increase with higher annual income brackets." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2768 -msgid "They have a Name: used to identify the type of entry (e.g., Attendance, Paid Time Off, etc.)." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:148 +msgid "Depending on the annual income of the employee, the following rates apply:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2769 -msgid "They have a Payroll Code: used in Odoo's salary rules computations" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:154 +msgid "Taxable Amount" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2770 -msgid "They have an External Code: used to provide the correct Work Entry code to an external payroll service provider." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:155 +msgid "<600k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2772 -msgid "They are generated based on the configuration of the contract and the time off types" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:156 +msgid "600k - 699k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2773 -msgid "They have a duration, a start and end date, a state and are always linked to an employee." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:157 +msgid "700k - 799k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2778 -msgid "They are the main source of configuration for your work entries. Thanks to your different types of work entries, you'll be able to differentiate the time records of your employees." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:158 +msgid "800k - 899k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2780 -msgid "They have a name." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:159 +msgid "900k - 1.2M" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2781 -msgid "They contain a code, external code, payroll code and a color for visual tracking." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:160 +msgid ">1.2M" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2782 -msgid "They allow other types of configurations such as how they are displayed in payslips, decide whether this type of work entry should be considered as paid or unpaid (eg. unpaid leave), decide whether this type of work entry has a link with time off, is valid for some advantages or how it should be reflected in your reporting." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:161 +msgid "0%" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2788 -#: ../../content/applications/hr/time_off.rst:42 -msgid "Time off types" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:162 +msgid "1-40k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2790 -msgid "As mentioned above, since work entry types can be linked to a time off type, you are also able to define the work entry type for each time-off type. On the time off type you have a many2one relation with the work entry type." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:168 +msgid "10%" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2795 -msgid "Steps to generate the work entries of your staff" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:169 +msgid "More than 40k to 55k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2797 -msgid "Create all the employees" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:170 +msgid "1 - 55k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2798 -msgid "Create a contract and set its status to :guilabel:`Running` for each employee." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:175 +msgid "15%" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2800 -msgid "In the contract, choose the :guilabel:`Work Entry Source`. It tells the system how work entries for an employee should be generated. It can be based on:" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:176 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:177 +msgid "More than 55k to 70k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2803 -msgid ":guilabel:`Working Schedule`: Odoo uses the predefined working hours and days set in the employee's working schedule to generate work entries. This is useful for regular, predictable shifts." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:178 +msgid "1 - 70k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2806 -msgid ":guilabel:`Attendances`: Work entries are generated from the employee's attendance records (i.e., when they check-in and check-out)." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:182 +msgid "20%" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2808 -msgid ":guilabel:`Planning`: Work entries are created based on the validated shifts or slots allocated to the employee in the **Planning** app (often used for scheduling roles like retail shifts, restaurants, etc.)." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:183 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:184 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:185 +msgid "More than 70k to 200k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2812 -msgid "Generate the work entries each month" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:186 +msgid "1 - 200k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2814 -msgid "Odoo automatically creates the work entries in the **Payroll** app based on the work entry source of the contract and the different time-offs taken. You can edit the work entries manually. You can always decide to regenerate work entries manually but be careful if you already made some manual changes, Odoo will regenerate the work entries based on what it knows (e.g., your working schedule and time off)." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:189 +msgid "22.5%" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2819 -msgid "Managing conflicts" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:190 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:191 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:192 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:193 +msgid "More than 200k to 400k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2821 -msgid "Conflicts are pointing to entries that can't be validated without your intervention. This means you'll have to qualify the entry and decide which is the correct entry to be defined for the time period if you want to be able to generate the payslip or validate the entries. Conflicts arise when there are overlapping entries or when Odoo detects that there is a time off request still pending for validation. For instance, if an employee is marked as attending work and at the same time there's a paid leave request to be validated for the same period, that's a conflict." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:194 +msgid "1 - 400k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2828 -msgid "Conflicts can be managed by filtering on the conflicting entries and resolving the discrepancy. Since **Odoo 16.4**, Odoo filters by default on conflicting entries. For prior versions, you can still filter manually on conflicting entries or use the conflicting menu item." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:196 +msgid "25%" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2831 -msgid "Once the conflict is resolved you can either proceed to generate the payslips for your employees or export your work entries to the right entity." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:197 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:198 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:199 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:200 +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:201 +msgid "More than 400k" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2835 -msgid "Export work entries" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:202 +msgid "1 - 1.2M" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2838 -msgid "This section is about exporting work entries to SD Worx, but the configuration and behavior is similar for other exports to Partena, Group S and UCM." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:203 +msgid "27.5%" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2844 -msgid "This sheet is here to help you learn how Odoo's **SD Worx** (`l10n_be_hr_payroll_sd_worx`) module simplifies payroll by enabling easy export of work entries. This guide provides quick steps to generate :file:`.txt` files for direct import into SD Worx calendars, saving time and ensuring accuracy." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:209 +msgid "More than 1.2M" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2849 -msgid "First and foremost, it's important to understand there is no direct integration between Odoo and SD Worx. There is no automatic exchange of information, either way. Odoo does not communicate directly with SD Worx, and the reverse is also true." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:212 +msgid "Exemptions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2856 -msgid "In reality, Odoo provides a standardized export in .txt format for employees' work entries, allowing the generation of a file that conforms to a specific format for inputting these entries into the SD Worx software." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:214 +msgid "Employees are eligible to an EGP 20,000 personal exception on their gross income." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2861 -msgid "What does it mean in terms of data management?" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:217 +msgid "Overtime" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2863 -msgid "Since there is no direct integration between both systems, it implies that certain data will need to be manually entered into both systems. For instance, when you create a new employee in Odoo, you'll also need to manually create the employee in SD Worx (and vice versa). This manual data entry requirement extends to various aspects such as contracts, work schedules, salary details, and personal information about employees." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:219 +msgid "Depending on the time of day and the time at which the overtime is recorded in, the additional amount to be paid to the employee can be as follows:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2869 -msgid "Essentially, all the information necessary for SD Worx to calculate salaries and generate payslips must be manually inputted into both systems." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:222 +msgid "During daytime hours on working days, the amount is 1.35x times the employee's hourly wage." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2873 -msgid "What's the advantage of exporting to SD worx?" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:223 +msgid "During nighttime hours on working days, the amount is 1.70x times the employee's hourly wage." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2875 -msgid "Odoo is an integrated software that can comprehensively handle all variable payroll elements, including employee personal information, contract details, various time-off types, and other work entry categories. Through Odoo's integration capabilities, you can access all this crucial data in one centralized location, making it easily accessible for your HR team and employees." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:224 +msgid "On rest days and public holidays: The amount is 2.0x times the employee's hourly wage." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2880 -msgid "This integration not only ensures data accuracy but also maintains consistency, reducing the likelihood of errors when transmitting work entry information to your external payroll provider. With the module in place, a single click generates a :file:`.txt` file that's ready for direct import into SD Worx, streamlining the entire data transmission process." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:227 +msgid "Overtime hours are registered as other inputs directly on payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2886 -msgid "Steps to set up the SD Worx module" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:232 +msgid "Provisions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2889 -msgid "You must be logged into a Belgian company for the following steps to work." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:234 +msgid "Provisions are the amounts computed by the employer to account for the payments made to the employee for :abbr:`EOS (end-of-service)` benefits or annual leave. And it is computed on a monthly basis." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2891 -msgid ":ref:`install ` the **Belgium - Payroll - Export to SD Worx** (`l10n_be_hr_payroll_sd_worx`) module." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:238 +msgid "End of service benefit provision" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2893 -msgid "Go to :menuselection:`Payroll app --> Configuration --> Settings` to fill in the :guilabel:`SD Worx code` field. This is the company's SD Worx code, you get it directly from the SD worx software. When you create a company, it has a unique identifier which you need to set in the field." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:240 +msgid "It is computed by dividing the end of service Provision Number of Days by 12 and multiplying the result by the daily salary for the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2897 -msgid "For each employee, under the :guilabel:`Settings` tab, fill in the :guilabel:`SDWorx code` field." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:243 +msgid "\\text{Payroll computation} = \\frac{\\text{Provision Number of Days}}{12} \\times \\frac{\\text{Wage} + \\text{Allowances}}{30}" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2898 -msgid "For work entry types, under the :guilabel:`Settings` tab, fill in the :guilabel:`SDWorx code` field as well." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:249 +msgid "Annual leave provision" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2901 -msgid "You can now export your work entries in the SD Worx :file:`.txt` format by opening the wizard under :menuselection:`Payroll app --> Reporting --> Belgium --> Export Work Entries to SDWorx`." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:251 +msgid "It is computed by dividing the number of leave days by 12 and multiplying the result by the daily salary for the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2904 -msgid "The file contains a series of lines such as the following line of text: `1111110000024K2023042370100360`" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:254 +msgid "\\text{Payroll computation} = \\frac{\\text{Number of Leave Days}}{12} \\times \\frac{\\text{Wage} + \\text{Allowances}}{30}" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2907 -msgid "Each line represents a work entry, and the structure is outlined below:" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:262 +msgid "End of service" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2909 -msgid "`111111` -> Company SD Worx code" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:264 +msgid "At the end of the service slip that is generated for the employee, there are the following points that are unique only to the payslip:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2910 -msgid "`0000024` -> Employee SD Worx code" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:268 +msgid "Unused leaves compensation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2911 -msgid "`K` -> Delimiter" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:270 +msgid "The number of available annual leaves is shown on the employee's record. It is based on the annual leave type defined in the Payroll settings. It is calculated as the total remaining allocations for that specific leave type assigned to the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2912 -msgid "`20230423` -> Date" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:274 +msgid "That number is then multiplied by the daily rate for the employee and added as an allowance on their payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2913 -msgid "`7010` -> SD Worx work entry code" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:278 +msgid "End of service benefit" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2914 -msgid "`0360` -> Duration (edited)" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:280 +msgid "It is calculated by multiplying the daily wage of the employee by the number of days for the end of service that is set in the employee's contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2916 -msgid "Once the :file:`.txt` file is exported, it can be directly imported in this format into the SD Worx software. Doing so updates the calendars of each collaborator." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:283 +msgid "\\text{Payroll computation} = \\frac{\\text{Wage + Allowances}}{30} \\times \\text{End of Service Number of Days}" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2922 -msgid "274.XX sheets" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:289 +msgid "Out of contract" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2924 -msgid "This section provides an overview of Declaration 274, its components, and how it is handled within Odoo." +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:291 +msgid "Out-of-contract days are the days that fall within the payslip period but are not included in the employee's contract period. The corresponding amount is added as a deduction on the payslip and is calculated by multiplying the number of out-of-contract days by the employee's daily wage." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2928 -msgid "Declaration 274.10" +#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:295 +msgid "\\text{Payroll computation} = \\frac{\\text Wage + Allowances}{\\text{Days in the Month}} \\times \\text{Out of Contract Days}" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2930 -msgid "Withholding tax is an advance payment on professional income tax. It is calculated based on guidelines established by the tax administration. While reducing withholding tax is generally not allowed, employees may request to pay more in order to better match their final tax liability." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:3 +msgid "Employment Hero Payroll" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2934 -msgid "Withholding tax must be deducted from both employees' and company directors' income. If the withholding tax is insufficient, advance tax payments must be made to avoid additional tax penalties." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:5 +msgid "The `Employment Hero `_ module synchronises payslip accounting entries (e.g., expenses, social charges, liabilities, taxes) automatically from Employment Hero to Odoo. Payroll administration is still done in Employment Hero, but the **journal entries** are done in Odoo." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2938 -msgid "In practice, some employees do not inform their employer of personal changes (e.g., having a child), which can affect tax calculations." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:11 +msgid "KeyPay was rebranded as **Employment Hero** in March 2023." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2941 -msgid "Withholding tax must be declared and paid either quarterly or monthly using form 274. These declarations must be submitted via the FINPROF application by the 15th of the month following the reporting period." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:18 +msgid ":ref:`Activate ` the :guilabel:`Employment Hero Payroll` module (`l10n_employment_hero`)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2945 -msgid "Taxable income and corresponding withholding tax must be recorded in fiscal remuneration forms 281.x and summary statements 325x. Employers failing to report these correctly may be subject to a 309% penalty on undisclosed amounts." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:20 +msgid "Configure the **Employment Hero API** by going to :menuselection:`Accounting --> Configuration --> Settings`. More fields become visible after clicking on :guilabel:`Enable Employment Hero Integration`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2949 -msgid "The tax administration compares the declared amounts in form 274 with the amounts reported in the fiscal forms. If withholding tax payments are insufficient, the company may be charged the difference. If a 274 form is submitted without corresponding tax payment, additional tax penalties will apply." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:0 +msgid "Enabling Employment Hero Integration in Odoo Accounting displays new fields in the\n" +"settings" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2954 -msgid "It is crucial to adhere to all administrative guidelines to avoid unexpected tax charges." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:28 +msgid "The API Key can be found in the :guilabel:`My Account` section of the Employment Hero platform." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2957 -msgid "Declarations 274.32, 274.33, 274.34" +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:0 +msgid "\"Account Details\" section on the Employment Hero dashboard" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2960 -msgid "Withholding tax exemptions for research employees" +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:33 +msgid "The **Payroll URL** is left empty by default to avoid any confusion. Please fill it according to the documentation specific to the localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2962 -msgid "Companies employing scientific researchers may qualify for withholding tax reductions under specific conditions:" +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:37 +msgid "Employment hero is available for :ref:`Australia `, :ref:`Malaysia `, :ref:`New Zealand `, :ref:`Singapore `, and the :ref:`United Kingdom `." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2965 -msgid "**Form 281.32** applies to civil engineers and PhD holders." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:43 +msgid "The **Business ID** can be found in the Employment Hero URL. (i.e., `189241`)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2966 -msgid "**Form 281.33** applies to employees holding a master's degree." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:0 +msgid "The Employment Hero Business ID number is in the URL" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2967 -msgid "**Form 281.34** applies to employees holding a bachelor's degree." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:48 +msgid "Choose any Odoo journal to post the payslip entries." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2969 -msgid "Employers engaged in scientific research may be eligible for an exemption from withholding tax payments. To qualify, they must register their R&D projects with Belspo. From August 1, 2023, this registration must occur before the project begins." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:49 +msgid "Configure the tax by going to :menuselection:`Accounting --> Configuration --> Taxes`. Create the necessary taxes for the Employment Hero payslip entries. Fill in the tax code from **Employment Hero** in the :guilabel:`Matching Employment Hero Tax` field." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2974 -msgid "Tax exemption details" +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:54 +msgid "How does the API work?" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2976 -msgid "This tax incentive allows companies to retain 80% of the withholding tax deducted from researchers' salaries. However, the exemption rate differs for researchers based on their qualifications:" +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:-1 +msgid "Example of a Employment Hero Journal Entry in Odoo Accounting (Australia)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2979 -msgid "PhD and master's degree holders: Full 80% exemption." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:63 +msgid "By default, the synchronisation happens once per week. The records can be fetched manually by going to :menuselection:`Accounting --> Configuration --> Settings` and, in the :guilabel:`Enable Employment Hero Integration` option, click on :guilabel:`Fetch Payruns Manually`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2980 -msgid "Bachelor's degree holders: 50% of the full exemption amount." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:67 +msgid "Employment Hero payslip entries also work based on double-entry bookkeeping." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2981 -msgid "For non-SME companies, this limit is further reduced to 25%." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:69 +msgid "The accounts used by Employment Hero are defined in the section :guilabel:`Payroll settings`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2983 -msgid "The exemption applies only to the portion of working time dedicated to scientific research, covering fundamental research, industrial research, or experimental development." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:-1 +msgid "Chart of Accounts menu in Employment Hero" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2986 -msgid "This exemption does not affect the net salary of employees." +#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:74 +msgid "For the API to work, create the same accounts as the default accounts of the Employment Hero business (**same name and same code**) in Odoo. The correct account types must be chosen in Odoo to generate accurate financial reports." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2989 -msgid "Capping rules" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:3 +msgid "Hong Kong" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2991 -msgid "The total exemption granted to researchers with a bachelor's degree is limited to 25% of the exemption granted to PhD and master's degree holders. For small companies (as defined in Article 15 §§ 1-6 of the Companies Code), this limit is doubled. These rules have remained unchanged since January 1, 2020." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:8 +msgid "Ensure the :guilabel:`Hong Kong - Payroll` (`l10n_hk_hr_payroll`) module is installed before proceeding." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2997 -msgid "How it works in Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:14 +msgid "Create employees" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:2999 -msgid "Odoo automates the calculation and declaration of withholding tax exemptions using predefined payroll structures. Below is an explanation of how the system processes these exemptions." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:16 +msgid "Go to the :menuselection:`Employees` app and click :guilabel:`New`. Then, configure the following fields:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3002 -msgid "Navigate to :menuselection:`Payroll app --> Reporting --> 274.XX Sheets` to create a new declaration." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:19 +msgid "Under the :guilabel:`Work Information` tab" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3005 -msgid "Select the reference :guilabel:`Year` and :guilabel:`Month`, and the different amounts are computed accordingly." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:21 +msgid ":guilabel:`Working Hours`: :guilabel:`HK Standard 40 hours/week` option **must** be selected." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3008 -msgid "**Payroll calculation**" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:23 +msgid "Under the :guilabel:`Private Information` tab" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3010 -msgid "Odoo calculates gross salary and total withholding tax." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:25 +msgid ":guilabel:`Surname, Given Name, Name in Chinese`: name of the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3011 -msgid "It accounts for specific payroll components, including December double bonuses." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:26 +msgid ":guilabel:`Private Address`: address of the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3013 -msgid "**Filtering eligible payslips**" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:27 +msgid ":guilabel:`Bank Account Number`: employee's bank account number." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3015 -msgid "Payslips linked to research-related contracts are considered." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:28 +msgid ":guilabel:`Current Rental`: employee's rental records (if rental allowance is applicable)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3016 -msgid "Employees are categorized based on their qualifications (PhD, master's, or bachelor's degrees)." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:29 +msgid ":guilabel:`Autopay Type`: :guilabel:`BBAN`, :guilabel:`SVID`, :guilabel:`EMAL`, etc." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3018 -msgid "**Exemption calculation**" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:30 +msgid ":guilabel:`Autopay Reference`: autopay reference number." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3020 -msgid "The withholding tax exemption is calculated at 80% of the withheld amount." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:31 +msgid ":guilabel:`Identification No`: HKID of the employee." msgstr "" - -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3021 -msgid "Exemptions for bachelor's degree holders are capped according to regulations." + +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:32 +msgid ":guilabel:`Gender`: gender of the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3023 -msgid "**Final adjustments**" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:35 +msgid "For the :guilabel:`Bank Account Number`, this account should be set as :guilabel:`Trusted` before further processing." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3025 -msgid "The system ensures compliance with legal capping rules." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:38 +msgid "To achieve this, click on the right-arrow button next to :guilabel:`Bank Account Number` field. Set the :guilabel:`Send Money` to :guilabel:`Trusted` by clicking on the toggle." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3026 -msgid "If necessary, adjustments are made based on the total exemption granted." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:42 +msgid "To populate the :guilabel:`Current Rental`, click on the :guilabel:`History` button. Then, click on :guilabel:`New`. Fill in the relevant details and save the rental record. Upon saving the record, the rental contract :guilabel:`state` will be visible (at the top-right corner) and can be set to :guilabel:`Running`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3028 -msgid "Click on :guilabel:`Export XML file` to generate the file to post on FINPROF portal and the structured communication to link to your payment." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:47 +msgid "Under the :guilabel:`HR Settings` tab:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:-1 -msgid "274.XX XML file." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:49 +msgid ":guilabel:`Volunteer Contribution Option`: select either :guilabel:`Only Mandatory Contribution`, :guilabel:`With Fixed %VC`, or :guilabel:`Cap 5% VC`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3034 -msgid "Click on :guilabel:`Create 274.XX Sheets` to generate the :file:`.pdf` files of those declarations." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:51 +msgid ":guilabel:`MPF Manulife Account`: account number, if applicable." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3037 -msgid "In order to for the exemption to work properly, the *Certificate Level* should be correctly configured on the employee's form." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:56 +msgid "Manage contracts" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3040 -msgid "The *Time Percentage R&D* rate should be specified on the employee's contract form as well." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:58 +msgid "Once the new employee has been created, click the :guilabel:`Contracts` smart button on the employee record, or navigate to :menuselection:`Employees app --> Employees --> Contracts`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3042 -msgid "If the accounting application is installed and running properly, you can also post directly the different amounts in your accounting entries with the :guilabel:`Post Journal Entries` button." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:62 +msgid "Only **one** contract can be active simultaneously per employee, but an employee can be assigned consecutive contracts during their employment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3046 -msgid "If the *Post Journal Entries* is not present on the wizard, you need to configure the journal and the different accounts for each amount type from :menuselection:`Payroll app --> Configuration --> Settings`." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:65 +msgid "The following are critical for setting up a contract:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3050 -msgid "In the :guilabel:`Belgian Localization` section, complete each of the :guilabel:`Witholding Taxes Exemption` journal entry accounts." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:67 +msgid ":guilabel:`Salary Structure Type`: set as :guilabel:`CAP57: Hong Kong Employee`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3053 -msgid "Employers using Odoo can efficiently manage and report withholding tax exemptions, ensuring compliance with regulatory requirements." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:68 +msgid ":guilabel:`Contract Start Date`: start date of employment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3056 -msgid "For further details, consult the Odoo finance documentation or your tax adviser." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:69 +msgid ":guilabel:`Working Schedule`: set as :guilabel:`HK Standard 40 hours/week` (from employee record)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3061 -msgid "281.10 Declaration" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:70 +msgid ":guilabel:`Work Entry Source`: select either :guilabel:`Working Schedule`, :guilabel:`Attendances` or :guilabel:`Planning`. This field determines how the work entries are accounted for in the payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3066 -msgid "The Belgian fiscal declaration 281.10 is an annual statement that employers must submit to the tax authorities, detailing the salaries and benefits provided to each employee. This declaration ensures accurate tax calculations and compliance with Belgian tax regulations." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:74 +msgid ":guilabel:`Working Schedule`: the work entries are generated automatically based on the employee's working schedule." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3071 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3141 -msgid "Generating the declaration in Odoo" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:76 +msgid ":guilabel:`Attendances`: the work entries are generated based on the check-in/out period logged in the *Attendances*." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3073 -msgid "Odoo provides a streamlined process for generating the 281.10 declaration, offering both a comprehensive XML file for electronic submission and individual PDF files for record-keeping." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:78 +msgid ":guilabel:`Planning`: the work entries are generated from planning shifts only." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3077 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3147 -msgid "Global XML declaration" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:80 +msgid "Under the :guilabel:`Salary Information` tab" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3079 -msgid "To generate the global XML file in Odoo, navigate to :menuselection:`Payroll app --> Reporting --> 281.10 Sheet`." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:82 +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:61 +msgid ":guilabel:`Wage Type`: select :guilabel:`Fixed Wage` for Full-time or Part-time employees, or :guilabel:`Hourly Wage` for employees who are paid hourly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3082 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3152 -msgid "Then, create a new record by selecting the reference :guilabel:`Year`." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:84 +msgid ":guilabel:`Schedule Pay`: the frequency of payslip issuance." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3085 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3155 -msgid "The :guilabel:`Sending Type` and :guilabel:`Treatment Type` options are currently experimental and should be kept at their default values to ensure a valid original declaration." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:85 +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:64 +msgid ":guilabel:`Wage`: :guilabel:`Monthly` or :guilabel:`Hourly` depending on the :guilabel:`Wage Type`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3088 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3158 -msgid "Click the :guilabel:`Populate` button to generate the eligible employees, then click the :guilabel:`Create XML` button. A green indicator will appear to confirm successful file generation." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:87 +msgid ":guilabel:`Internet Subscription`: this is an **optional** field to provide additional internet allowance on top of the current salary package." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3092 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3162 -msgid "Individual PDF declaration" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:91 +msgid "Timesheets do **not** impact work entries in Odoo." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3094 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3164 -msgid "To generate individual PDF files for each employee, click the :guilabel:`Populate` button. A line is generated for each employee who received a payslip during the reference year." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:93 +msgid "Once all information has been setup, set the contract status to :guilabel:`Running` by clicking the :guilabel:`Running` button in the top-right of the page." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3098 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3168 -msgid "The PDF files are generated automatically in batches of 30, so the process may take some time to complete." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 +msgid "Hong Kong employment contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3105 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3175 -msgid "Select the employees whose documents you want to post, then click the :guilabel:`Post PDF` button." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:104 +msgid "Once the employees, and their contracts, are configured, payslips can be generated in the *Payroll* app." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3107 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3177 -msgid "Once posted, employees can access the PDF from their documents portal via the :icon:`fa-file-text` :guilabel:`Documents` smart button on their profile." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:107 +msgid "Odoo provides **four** different salary structures under CAP57 regulation:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3111 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3181 -msgid "Submitting the XML declaration" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:109 +msgid ":guilabel:`CAP57: Employees Monthly Pay`: to process the monthly employee salary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3113 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3183 -msgid "After generating the XML file, it must be submitted to the Belgian tax authorities. Ensure you are familiar with the `official submission process `_." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:110 +msgid ":guilabel:`CAP57: Payment in Lieu of Notice`: to process final payment upon contract termination using :abbr:`ADW (Average Daily Wage)`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3117 -msgid "The XML files containing the fiscal data to be sent via the Belcotax-on-web (BOW) application must be converted to the .bow format." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:112 +msgid ":guilabel:`CAP57: Long Service Payment`: applicable to employees with more than five years of service upon contract termination." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3120 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3190 -msgid "This conversion requires the use of a validation module available under the *Technical Documentation* section." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:114 +msgid ":guilabel:`CAP57: Severance Payment`: applicable to employees with more than two years of service upon contract termination." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3123 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3193 -msgid "The validation module has two prerequisites:" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:117 +msgid "Before running the payslips, the accounts used in the salary rule can be adjusted by navigating to :menuselection:`Payroll app --> Configuration --> Rules`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3125 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3195 -msgid "Java 8 must be installed." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 +msgid "Hong Kong Salary Rules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3126 -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3196 -msgid "The certificate authority that signed the validation module must be recognized." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:123 +msgid "Odoo can create pay runs in two ways: via :ref:`batch ` or :ref:`individual ` payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3131 -msgid "281.45 Declaration" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:129 +msgid "Batch payslips" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3136 -msgid "The Belgian fiscal declaration 281.45 is an annual statement that entities must submit to the tax authorities, detailing the amounts of author's rights and neighboring rights paid to beneficiaries. This declaration ensures accurate tax reporting and compliance with Belgian tax regulations." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:131 +msgid "This method of payslip generation is used for recurring payments, since multiple employee payslips can be managed at once. Go to :menuselection:`Payroll app --> Payslips --> Batches`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3143 -msgid "Odoo provides a streamlined process for generating the 281.45 declaration, offering both a comprehensive XML file for electronic submission and individual PDF files for record-keeping." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:134 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:158 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:399 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:418 +msgid "Click on :guilabel:`New`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3149 -msgid "To generate the global XML file in Odoo, navigate to :menuselection:`Payroll app --> Reporting --> 281.45 Sheet`." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:135 +msgid "Enter a :guilabel:`Batch Name` (e.g. `2024 - Jan`) and :guilabel:`Period` (e.g. `01/01/2024` - `01/31/2024`)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/belgium.rst:3187 -msgid "The XML files containing the fiscal data to be sent via the Belcotax-on-web (BOW) application must be converted to the :file:`.bow` format." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:137 +msgid "Click on :guilabel:`Generate Payslips`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:3 -msgid "Egypt" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:138 +msgid "Choose which :guilabel:`Salary Structure` to use for this batch. The department filter allows the batch to only apply to a specific group of employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:5 -msgid "The Egypt **Payroll** localization package enables payroll processing that fully complies with Egyptian labor laws. It calculates progressive income tax, employee- and employer-paid social security, and core salary components, including housing and transportation allowances." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:140 +msgid "Click on :guilabel:`Generate`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:12 -msgid ":ref:`Install ` the following modules to get all the features of the Egypt **Payroll** localization:" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:141 +msgid "A :guilabel:`Payslips` smart button is created automatically." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:18 -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:19 -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:20 -msgid "Name" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:143 +msgid "Next, click :guilabel:`Create Draft Entry` to generate a draft journal entry found in the :guilabel:`Other Info` tab of each payslip. A :guilabel:`Confirmation` pop-up window appears asking :guilabel:`Are you sure you want to proceed?`. Click :guilabel:`Ok` to create the journal entries." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:19 -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:20 -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:21 -msgid "Technical name" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:150 +msgid "Individual payslips" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:20 -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:21 -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:22 -msgid "Description" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:152 +msgid "Go to :menuselection:`Payroll app --> Payslips --> All Payslips`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:21 -msgid ":guilabel:`Egypt - Payroll`" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:154 +msgid "This method of payslip generation is commonly used to handle non-recurring payments (e.g. :guilabel:`CAP57: Payment in Lieu of Notice`, :guilabel:`CAP57: Long Service Payment` or :guilabel:`CAP57: Severance Payment`)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:22 -msgid "`l10n_eg_hr_payroll`" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:159 +msgid "Select an :guilabel:`Employee`. When selected, the :guilabel:`Contract` is filled out automatically." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:23 -msgid "Payroll module includes all salary rules, leave logic, and compensation rules compliant with Egyptian Labor Law." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:161 +msgid "Add a pay :guilabel:`Period`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:25 -msgid ":guilabel:`Egypt - Payroll with Accounting`" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:162 +msgid "Select a salary :guilabel:`Structure` (e.g. :guilabel:`CAP57: Employees Monthly Pay`)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:26 -msgid "`l10n_eg_hr_payroll_account`" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:163 +msgid "The :guilabel:`Worked Days & Inputs` tab automatically compute the worked days/hours and time off leaves that are applicable." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:27 -msgid "Adds account mappings related to payroll calculations." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:165 +msgid "Additional payslip items can be added at this time (e.g. :guilabel:`Commissions`, :guilabel:`Deductions`) under the :guilabel:`Other Inputs` section." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:30 -msgid ":doc:`Egypt fiscal localization documentation <../../../finance/fiscal_localizations/egypt>`" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:167 +msgid "Click on :guilabel:`Compute Sheet` button to generate the payslip lines. This button updates the :guilabel:`Salary Computation` tab." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:33 -msgid "Egyptian employee contracts" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:171 +msgid "If the work entry for an employee was amended, click the :icon:`fa-cog` :guilabel:`(gear)` icon, then click :guilabel:`Recompute Whole Sheet` to refresh the payslip's :guilabel:`Worked Days & Inputs` tab." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:35 -msgid "Once an employee has been :doc:`created in the database <../../employees/new_employee>`, a :ref:`contract must be created `." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:175 +msgid "The :guilabel:`Salary Computation` tab shows the detailed breakdown of the computation, based on the salary rules configured for each structure type." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:38 -msgid "To check if the user already has a contract, navigate to the **Employees** app, then click on the employee's Kanban card. The :icon:`fa-book` :guilabel:`Contracts` smart button displays a red zero when no contract exists. Otherwise, it displays :guilabel:`In contract since (contract start date)` in green." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:178 +msgid ":guilabel:`Rent Allowance`: amount derived from the employee's active rental record." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:44 -msgid "Contracts can also be found by navigating to :menuselection:`Employees app --> Employees --> Contracts`. All contracts appear in a list view, grouped by status." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:179 +msgid ":guilabel:`Basic Salary`: amount of base salary provided (after rent allowance deduction)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:47 -msgid "Populate the following contractual information in the :guilabel:`Salary Information` tab of the contract:" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:180 +msgid ":guilabel:`713 Gross`: net payable amount considering *Commission*, *Internet Allowance*, *Reimbursements*, *Back-pay*, *Deduction*, etc." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:50 -msgid ":guilabel:`Social Insurance Reference Amount`: Used as the base amount for calculating the :ref:`social insurance employee and employer portions `." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:182 +msgid ":guilabel:`MPF Gross`: net payable amount from 713 gross after consideration of additional allowances, deductions, and end-of-year payment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:53 -msgid ":guilabel:`Number of Leave Days`: Used for calculating the :ref:`provision amount for the annual leave for the employee `." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:184 +msgid ":guilabel:`Employee Mandatory Contribution`: employee MPF Contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:55 -msgid ":guilabel:`Provision Number of Days`: Corresponds with the number of days used in the calculation of the :ref:`provision value of the end of service for the employee `." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:185 +msgid ":guilabel:`Employer Mandatory Contribution`: employer MPF Contribution." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:58 -msgid ":guilabel:`Total Number of Days`: Refers to the number of days used to calculate the :ref:`end-of-service benefit paid to the employee when their employment with the company ends `." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:186 +msgid ":guilabel:`Gross`: net payable amount from MPF gross after consideration of MPF deductions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:65 -msgid "Social insurance" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:187 +msgid ":guilabel:`Net Salary`: final payable amount to be paid to the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:67 -msgid "Social insurance rules calculate the contribution amounts that are to be paid by the employer and employee to the :abbr:`NOSI (National Organization for Social Insurance)`. This is only available for Egyptian employees." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:190 +msgid "There are no MPF contributions for the first month. Both employee and employer contribution starts on second month." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:71 -msgid "The employer contributes 18.75% of the social insurance reference amount for the employee. On the other hand, the employee contributes 11% of their insurance reference amount, and that amount gets deducted from the payslip amount." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 +msgid "Hong Kong Salary computation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:76 -msgid "The social insurance reference amount is set per employee in their contracts." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:196 +msgid "Under the :guilabel:`Other Inputs` section in :guilabel:`Worked Days & Inputs` tab, there are additional manual input types:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:79 -msgid "Leaves" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:199 +msgid ":guilabel:`Back Pay`: additional salary payout can be included under this category." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:81 -msgid "The following leave types are available to employees working in Egypt: :ref:`Annual leave `, :ref:`Sick leave `, :ref:`Unpaid leave `, and :ref:`Other leave types `." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:200 +msgid ":guilabel:`Commission`: the commission earned during the period can be manually entered here." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:91 -msgid "Employees are eligible for 21 days of annual leave, and if the employee requires more days, they have to be :ref:`requested from HR managers ` accordingly." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:201 +msgid ":guilabel:`Global Deduction`: a lump-sum deduction from the entire payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:95 -msgid "Since the annual leave is fully paid, it is not connected to a salary rule, but it will appear on the worked days on the payslip form and on the PDF printout." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:202 +msgid ":guilabel:`Global Reimbursement`: a lump-sum reimbursement to the entire payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:101 -msgid "Sick leave" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:203 +msgid ":guilabel:`Referral Fee`: the additional bonus offered for any form of business-related referral." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:103 -msgid "Three cases exist for sick leaves in terms of the amount to be deducted from the employee:" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:204 +msgid ":guilabel:`Moving Daily Wage`: to override the :abbr:`ADW (Average Daily Wage)` value used for leaves computation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:105 -msgid ":guilabel:`Fully paid`: first 30 calendar days each year (affects only working entries; no payroll deduction)." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:206 +msgid ":guilabel:`Skip Rent Allowance`: if set, the rental allowance is excluded from the current payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:108 -msgid "**Payroll computation** =(Daily Wage)" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:208 +msgid ":guilabel:`Custom Average Monthly Salary`: to override the average monthly salary used for end-of-year payment (rule is only applicable to payslips generated in December)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:110 -msgid ":guilabel:`75% paid`: next 60 days; payroll rule deducts 25% of an employee's salary." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:210 +msgid ":guilabel:`Lieu of Notice Period (Months)`: only applicable to :guilabel:`CAP57: Payment in Lieu of Notice` salary structure. By default, the final payout is set as 1-month. Use the :guilabel:`Count` field under the :guilabel:`Other Inputs` section to set a different notice period duration." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:112 -msgid "**Payroll computation** =(Daily Wage * 0.25)" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:215 +msgid "Once the payslips are ready, click on :guilabel:`Compute Sheet`, followed by :guilabel:`Create Draft entry` to generate a draft journal entry found in the :guilabel:`Other Info` tab of the payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:114 -msgid ":guilabel:`0% paid`: after 90 days; payroll rule deducts 100% of an employee's salary." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:221 +msgid "Once the draft journal entries have been posted, the company can now pay the employees. The user can choose between **two** different *payment methods*:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:116 -msgid "**Payroll computation** =(Daily Wage * 0.00)" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:224 +msgid "From the employee's payslip (:menuselection:`Payroll app --> Payslips --> All Payslips`), once the payslip's journal entry has been posted, click :guilabel:`Register Payment`. The process is the same as :doc:`paying vendor bills <../../../finance/accounting/payments>`. Select the desired bank journal and payment method, then later reconcile the payment with the corresponding bank statement." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:121 -msgid "Unpaid leave" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:228 +msgid "For batch payments (:menuselection:`Payroll app --> Payslips --> Batches`), once all draft journal entries from the batch are confirmed, click :guilabel:`Mark as Paid` to post the payment journal entry. Then :doc:`create a payment <../../../finance/accounting/payments>` in the *Accounting* app, and reconcile accordingly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:123 -msgid "Deductions are applied on the employee's salary based on the number of unpaid leave days taken, and it is calculated by dividing the monthly salary for the employee by 30 to get the daily salary and then multiplying it by the number of unpaid leave days taken." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:234 +msgid "Attendances and hourly wage" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:130 -msgid "Other leave types" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:236 +msgid "To configure the contract for an employee paid hourly using the *Attendances* app for hours tracking, navigate to :menuselection:`Payroll app --> Contracts --> Contracts`. Create a new :ref:`contract `. It is important to remember to set the :guilabel:`Work Entry Source` as :guilabel:`Attendances`, and :guilabel:`Wage Type` as :guilabel:`Hourly Wage`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:132 -msgid "These are leave types considered fully paid and do not affect the end payslip, but are tracked in the working entries:" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:242 +msgid "To record the hours logged by the employee using *Attendances* app:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:135 -msgid "Maternity leave" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:244 +msgid "Go to :menuselection:`Attendances app`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:136 -msgid "Hajj leave" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:245 +msgid "The employee can check-in/out, via the kiosk mode and the time will be logged automatically." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:137 -msgid "Death leave" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:246 +msgid "In the :menuselection:`Payroll app`, review the attendance work entries generated from :menuselection:`Payroll app --> Work Entries --> Work Entries`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:140 -msgid "Income tax" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:248 +msgid "Next, generate the :ref:`payslips ` and process the payment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:142 -msgid "In Egypt, employees are subject to a progressive income tax system, where tax rates increase with higher annual income brackets." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 +msgid "Hong Kong Attendance Work Entry." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:148 -msgid "Depending on the annual income of the employee, the following rates apply:" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 +msgid "Hong Kong Attendance Payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:154 -msgid "Taxable Amount" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:257 +msgid "Time Off with Payroll" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:155 -msgid "<600k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:259 +msgid "The work entry types and time off types are fully integrated between the *Time Off* and *Payroll* apps. There are several default time off types and work entry types specific to Hong Kong which are installed automatically along with the *Hong Kong - Payroll* module." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:156 -msgid "600k - 699k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:263 +msgid "Go to :menuselection:`Payroll app --> Configuration --> Work Entry Types` and click :guilabel:`New`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:157 -msgid "700k - 799k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:265 +msgid "There are two checkboxes to be considered when setting up the work entry type:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:158 -msgid "800k - 899k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:267 +msgid ":guilabel:`Use 713`: Include this leave type as part of 713 computation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:159 -msgid "900k - 1.2M" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:268 +msgid ":guilabel:`Non-full pay`: 80% of the :abbr:`ADW (Average Daily Wage)`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:160 -msgid ">1.2M" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 +msgid "Hong Kong Work Entry Type." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:161 -msgid "0%" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:274 +msgid ":ref:`Creating and configuring work entry types `" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:162 -msgid "1-40k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:277 +msgid "Understanding 713 Ordinance" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:168 -msgid "10%" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:279 +msgid "The *Hong Kong - Payroll* module is compliant with 713 Ordinance which relates to the :abbr:`ADW (Average Daily Wage)` computation to ensure fair compensation for employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:169 -msgid "More than 40k to 55k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:282 +msgid "The ADW computation is as follows:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:170 -msgid "1 - 55k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:287 +msgid "Hong Kong ADW Formula." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:175 -msgid "15%" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:287 +msgid ":abbr:`ADW (Average Daily Wage)` equals the total wage in a 12-month period, minus the wages of non-full pay, divided by the total days in a 12-month period minus the days of non-full pay." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:176 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:177 -msgid "More than 55k to 70k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:291 +msgid "For 418 compliance, there is no automated allocation of the *Statutory Holiday* entitlement to the employees. As soon as 418 requirements are met, manually allocate the leaves, via the *Time Off* app." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:178 -msgid "1 - 70k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:296 +msgid "Before generating payslips, ensure the statuses are :guilabel:`Done` to validate the outcome." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:182 -msgid "20%" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:301 +msgid "Period" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:183 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:184 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:185 -msgid "More than 70k to 200k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:302 +msgid "Days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:186 -msgid "1 - 200k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:303 +msgid "Wage" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:189 -msgid "22.5%" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:304 +msgid "Commission" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:190 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:191 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:192 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:193 -msgid "More than 200k to 400k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:305 +msgid "Total" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:194 -msgid "1 - 400k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:306 +msgid "ADW" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:196 -msgid "25%" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:307 +msgid "Leave Value" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:197 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:198 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:199 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:200 -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:201 -msgid "More than 400k" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:308 +msgid "Jan" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:202 -msgid "1 - 1.2M" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:309 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:323 +msgid "31" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:203 -msgid "27.5%" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:310 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:312 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:317 +msgid "$20200" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:209 -msgid "More than 1.2M" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:311 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:325 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:332 +msgid "$0" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:212 -msgid "Exemptions" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:313 +msgid "$651.61 ($20200/31)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:214 -msgid "Employees are eligible to an EGP 20,000 personal exception on their gross income." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:314 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:321 +msgid "N/A" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:217 -msgid "Overtime" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:315 +msgid "Feb" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:219 -msgid "Depending on the time of day and the time at which the overtime is recorded in, the additional amount to be paid to the employee can be as follows:" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:316 +msgid "28" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:222 -msgid "During daytime hours on working days, the amount is 1.35x times the employee's hourly wage." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:318 +msgid "$5000" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:223 -msgid "During nighttime hours on working days, the amount is 1.70x times the employee's hourly wage." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:319 +msgid "$25200" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:224 -msgid "On rest days and public holidays: The amount is 2.0x times the employee's hourly wage." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:320 +msgid "$769.49 ($45400/59)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:227 -msgid "Overtime hours are registered as other inputs directly on payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:322 +msgid "Mar (One Day Annual Leave)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:232 -msgid "Provisions" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:324 +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:326 +msgid "$20324.33" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:234 -msgid "Provisions are the amounts computed by the employer to account for the payments made to the employee for :abbr:`EOS (end-of-service)` benefits or annual leave. And it is computed on a monthly basis." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:327 +msgid "$730.27 ($65724.33/90)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:238 -msgid "End of service benefit provision" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:328 +msgid "$769.49" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:240 -msgid "It is computed by dividing the end of service Provision Number of Days by 12 and multiplying the result by the daily salary for the employee." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:329 +msgid "Apr (One Day 80% Sick Leave)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:243 -msgid "\\text{Payroll computation} = \\frac{\\text{Provision Number of Days}}{12} \\times \\frac{\\text{Wage} + \\text{Allowances}}{30}" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:331 +msgid "$20117.56" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:249 -msgid "Annual leave provision" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:335 +msgid "$584.22 ($730.27*0.8)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:251 -msgid "It is computed by dividing the number of leave days by 12 and multiplying the result by the daily salary for the employee." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:338 +msgid "Here is an example demonstrating the 713 logic:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:254 -msgid "\\text{Payroll computation} = \\frac{\\text{Number of Leave Days}}{12} \\times \\frac{\\text{Wage} + \\text{Allowances}}{30}" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:340 +msgid "**Jan**: Generate a payslip with a monthly wage of $20200. The :abbr:`ADW (Average Daily Wage)` is always computed on a cumulative basis of the trailing 12-months." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:262 -msgid "End of service" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:342 +msgid "**Feb**: Generate a similar payslip, but add an :guilabel:`Other Input Type` for the :guilabel:`Commission`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:264 -msgid "At the end of the service slip that is generated for the employee, there are the following points that are unique only to the payslip:" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:344 +msgid "**Mar**: Apply for **one** full-paid annual leave in March. The salary compensation for the leave taken is based on :abbr:`ADW (Average Daily Wage)` thus far." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:268 -msgid "Unused leaves compensation" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:0 +msgid "Hong Kong March 713." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:270 -msgid "The number of available annual leaves is shown on the employee's record. It is based on the annual leave type defined in the Payroll settings. It is calculated as the total remaining allocations for that specific leave type assigned to the employee." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:350 +msgid "**Apr**: Apply for a 1-day non-full pay leave in April. Since this is a non-full pay leave, the :abbr:`ADW (Average Daily Wage)` is computed accordingly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:274 -msgid "That number is then multiplied by the daily rate for the employee and added as an allowance on their payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:0 +msgid "Hong Kong April 713." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:278 -msgid "End of service benefit" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:357 +msgid "The value of :abbr:`ADW (Average Daily Wage)` is computed in the backend, and not be visible to the user." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:280 -msgid "It is calculated by multiplying the daily wage of the employee by the number of days for the end of service that is set in the employee's contract." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:361 +msgid "`HK 713 Ordinance `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:283 -msgid "\\text{Payroll computation} = \\frac{\\text{Wage + Allowances}}{30} \\times \\text{End of Service Number of Days}" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:362 +msgid "`HK 418 Ordinance `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:289 -msgid "Out of contract" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:365 +msgid "Generate reports" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:291 -msgid "Out-of-contract days are the days that fall within the payslip period but are not included in the employee's contract period. The corresponding amount is added as a deduction on the payslip and is calculated by multiplying the number of out-of-contract days by the employee's daily wage." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:367 +msgid "Before generating the below reports, setup the following in :menuselection:`Settings app --> Payroll`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/egypt.rst:295 -msgid "\\text{Payroll computation} = \\frac{\\text Wage + Allowances}{\\text{Days in the Month}} \\times \\text{Out of Contract Days}" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:370 +msgid "Configure the following in the :guilabel:`Accounting` section:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:3 -msgid "Employment Hero Payroll" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:372 +msgid "Tick the :guilabel:`Payroll HSBC Autopay` checkbox." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:5 -msgid "The `Employment Hero `_ module synchronises payslip accounting entries (e.g., expenses, social charges, liabilities, taxes) automatically from Employment Hero to Odoo. Payroll administration is still done in Employment Hero, but the **journal entries** are done in Odoo." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:374 +msgid ":guilabel:`Autopay Type`: Set as :guilabel:`H2H Submission`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:11 -msgid "KeyPay was rebranded as **Employment Hero** in March 2023." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:375 +msgid "Select the :guilabel:`Bank Account` to use." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:18 -msgid ":ref:`Activate ` the :guilabel:`Employment Hero Payroll` module (`l10n_employment_hero`)." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:377 +msgid "Configure the following in the :guilabel:`HK Localization` section:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:20 -msgid "Configure the **Employment Hero API** by going to :menuselection:`Accounting --> Configuration --> Settings`. More fields become visible after clicking on :guilabel:`Enable Employment Hero Integration`." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:379 +msgid ":guilabel:`Employer's Name shows on reports`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:0 -msgid "Enabling Employment Hero Integration in Odoo Accounting displays new fields in the\n" -"settings" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:380 +msgid ":guilabel:`Employer's File Number`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:28 -msgid "The API Key can be found in the :guilabel:`My Account` section of the Employment Hero platform." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:381 +msgid ":guilabel:`Manulife MPF Scheme`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:0 -msgid "\"Account Details\" section on the Employment Hero dashboard" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 +msgid "Hong Kong Payroll Settings." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:33 -msgid "The **Payroll URL** is left empty by default to avoid any confusion. Please fill it according to the documentation specific to the localization." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:387 +msgid "IRD report" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:37 -msgid "Employment hero is available for :ref:`Australia `, :ref:`Malaysia `, :ref:`New Zealand `, :ref:`Singapore `, and the :ref:`United Kingdom `." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:389 +msgid "There are a total of **four** IRD reports available:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:43 -msgid "The **Business ID** can be found in the Employment Hero URL. (i.e., `189241`)" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:391 +msgid ":guilabel:`IR56B`: employer's Return of Remuneration and Pensions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:0 -msgid "The Employment Hero Business ID number is in the URL" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:392 +msgid ":guilabel:`IR56E`: notification of Commencement of Employment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:48 -msgid "Choose any Odoo journal to post the payslip entries." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:393 +msgid ":guilabel:`IR56F`: notification of Ceasation of Employment (remaining in HK)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:49 -msgid "Configure the tax by going to :menuselection:`Accounting --> Configuration --> Taxes`. Create the necessary taxes for the Employment Hero payslip entries. Fill in the tax code from **Employment Hero** in the :guilabel:`Matching Employment Hero Tax` field." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:394 +msgid ":guilabel:`IR56G`: notification of Ceasation of Employment (departing from HK permanently)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:54 -msgid "How does the API work?" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:396 +msgid "Go to :menuselection:`Payroll app --> Reporting`, and select one of the :guilabel:`IR56B/E/F/G Sheet` options:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:-1 -msgid "Example of a Employment Hero Journal Entry in Odoo Accounting (Australia)" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:400 +msgid "Fill in the relevant information for the IRD report." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:63 -msgid "By default, the synchronisation happens once per week. The records can be fetched manually by going to :menuselection:`Accounting --> Configuration --> Settings` and, in the :guilabel:`Enable Employment Hero Integration` option, click on :guilabel:`Fetch Payruns Manually`." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:401 +msgid "Click on :guilabel:`Populate`, and the :guilabel:`Eligible Employees` smart button appears." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:67 -msgid "Employment Hero payslip entries also work based on double-entry bookkeeping." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:402 +msgid "The :guilabel:`Employee Declarations` status is :guilabel:`Draft` and changed to :guilabel:`Generated PDF` status once the schedule runs." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:69 -msgid "The accounts used by Employment Hero are defined in the section :guilabel:`Payroll settings`." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:404 +msgid "Once the PDF is generated, the IRD form may be downloaded." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:-1 -msgid "Chart of Accounts menu in Employment Hero" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 +msgid "Hong Kong IR56B report." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/employment_hero.rst:74 -msgid "For the API to work, create the same accounts as the default accounts of the Employment Hero business (**same name and same code**) in Odoo. The correct account types must be chosen in Odoo to generate accurate financial reports." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:410 +msgid "The scheduled action called *Payroll: Generate pdfs* can be manually triggered. It is set by default to run the PDF generation monthly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:3 -msgid "Hong Kong" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:414 +msgid "Manulife MPF sheet" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:8 -msgid "Ensure the :guilabel:`Hong Kong - Payroll` (`l10n_hk_hr_payroll`) module is installed before proceeding." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:416 +msgid "Go to :menuselection:`Payroll app --> Reporting --> Manulife MPF Sheet`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:14 -msgid "Create employees" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:419 +msgid "Select the relevant :guilabel:`Year`, :guilabel:`Month`, and :guilabel:`Sequence No.`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:16 -msgid "Go to the :menuselection:`Employees` app and click :guilabel:`New`. Then, configure the following fields:" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:420 +msgid "Click on :guilabel:`Create XLSX`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:19 -msgid "Under the :guilabel:`Work Information` tab" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:421 +msgid "The *Manulife MPF XLSX* file is then generated, and available for download." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:21 -msgid ":guilabel:`Working Hours`: :guilabel:`HK Standard 40 hours/week` option **must** be selected." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 +msgid "Hong Kong Manulife Sheet." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:23 -msgid "Under the :guilabel:`Private Information` tab" +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:427 +msgid "Odoo will not be developing further reports for other MPF trustee as there will soon be an eMPF platform setup by the local government." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:25 -msgid ":guilabel:`Surname, Given Name, Name in Chinese`: name of the employee." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:431 +msgid "`eMPF `_" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:26 -msgid ":guilabel:`Private Address`: address of the employee." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:434 +msgid "HSBC autopay report" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:27 -msgid ":guilabel:`Bank Account Number`: employee's bank account number." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:436 +msgid "If *HSBC Autopay* is selected as the batch payment method, click on :guilabel:`Create HSBC Autopay Report`, and fill in the mandatory fields:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:28 -msgid ":guilabel:`Current Rental`: employee's rental records (if rental allowance is applicable)." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 +msgid "Hong Kong HSBC Autopay wizard." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:29 -msgid ":guilabel:`Autopay Type`: :guilabel:`BBAN`, :guilabel:`SVID`, :guilabel:`EMAL`, etc." +#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:442 +msgid "This creates an :file:`.apc` file format which can be uploaded to the HSCB portal for processing." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:30 -msgid ":guilabel:`Autopay Reference`: autopay reference number." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:3 +msgid "Jordan" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:31 -msgid ":guilabel:`Identification No`: HKID of the employee." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:5 +msgid "The Jordan **Payroll** localization package offers a comprehensive solution for managing payroll in compliance with Jordanian labor laws. It supports income tax calculations using progressive tax brackets, social security contributions from both employees and employers and basic salary calculations, including allowances such as housing and transportation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:32 -msgid ":guilabel:`Gender`: gender of the employee." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:13 +msgid ":ref:`Install ` the following modules to get all the features of the Jordan **Payroll** localization:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:35 -msgid "For the :guilabel:`Bank Account Number`, this account should be set as :guilabel:`Trusted` before further processing." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:22 +msgid ":guilabel:`Jordan - Payroll`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:38 -msgid "To achieve this, click on the right-arrow button next to :guilabel:`Bank Account Number` field. Set the :guilabel:`Send Money` to :guilabel:`Trusted` by clicking on the toggle." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:23 +msgid "`l10n_jo_hr_payroll`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:42 -msgid "To populate the :guilabel:`Current Rental`, click on the :guilabel:`History` button. Then, click on :guilabel:`New`. Fill in the relevant details and save the rental record. Upon saving the record, the rental contract :guilabel:`state` will be visible (at the top-right corner) and can be set to :guilabel:`Running`." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:24 +msgid "Payroll module supporting basic calculation, tax income brackets, and national contribution tax and social security" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:47 -msgid "Under the :guilabel:`HR Settings` tab:" +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:26 +msgid ":guilabel:`Jordan - Payroll with Accounting`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:49 -msgid ":guilabel:`Volunteer Contribution Option`: select either :guilabel:`Only Mandatory Contribution`, :guilabel:`With Fixed %VC`, or :guilabel:`Cap 5% VC`." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:27 +msgid "`l10n_jo_hr_payroll_account`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:51 -msgid ":guilabel:`MPF Manulife Account`: account number, if applicable." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:28 +msgid "Bridge module between **Payroll** and **Accounting**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:56 -msgid "Manage contracts" +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:31 +msgid ":doc:`Jordan fiscal localization documentation <../../../finance/fiscal_localizations/jordan>`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:58 -msgid "Once the new employee has been created, click the :guilabel:`Contracts` smart button on the employee record, or navigate to :menuselection:`Employees app --> Employees --> Contracts`." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:34 +msgid "Basic calculations" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:62 -msgid "Only **one** contract can be active simultaneously per employee, but an employee can be assigned consecutive contracts during their employment." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:36 +msgid "The Jordan **Payroll** localization package in Odoo provides foundational payroll management tools that are compliant with Jordan's labor laws and regulations. Key features include:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:65 -msgid "The following are critical for setting up a contract:" +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:39 +msgid "**Basic salary calculations**: Odoo supports the computation of employee salaries based on predefined salary structures, ensuring accurate payroll processing." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:67 -msgid ":guilabel:`Salary Structure Type`: set as :guilabel:`CAP57: Hong Kong Employee`." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:41 +msgid "**Social security contributions**: It handles social security deductions for employees and employer contributions, aligning with local regulations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:68 -msgid ":guilabel:`Contract Start Date`: start date of employment." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:43 +msgid "**Taxation support**: The system is configured to handle income tax calculations in Jordan, including deductions based on progressive tax brackets as required by Jordanian labor and tax laws." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:69 -msgid ":guilabel:`Working Schedule`: set as :guilabel:`HK Standard 40 hours/week` (from employee record)." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:46 +msgid "**Custom allowances and deductions**: The localization supports additional allowances, deductions, or overtime as part of payroll computation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:70 -msgid ":guilabel:`Work Entry Source`: select either :guilabel:`Working Schedule`, :guilabel:`Attendances` or :guilabel:`Planning`. This field determines how the work entries are accounted for in the payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:49 +msgid "These features ensure businesses can manage payroll effectively and comply with Jordanian-specific legal requirements. For enhanced functionality, businesses may leverage Odoo's flexibility to customize payroll workflows." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:74 -msgid ":guilabel:`Working Schedule`: the work entries are generated automatically based on the employee's working schedule." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:54 +msgid "Social security" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:76 -msgid ":guilabel:`Attendances`: the work entries are generated based on the check-in/out period logged in the *Attendances*." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:56 +msgid "The Jordan **Payroll** localization package in Odoo simplifies social security management by automating calculations for both employees and employers. Contributions are based on a percentage of the employee's basic salary, with a maximum insurable wage cap in line with Jordanian Social Security Corporation (SSC) regulations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:78 -msgid ":guilabel:`Planning`: the work entries are generated from planning shifts only." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:62 +msgid "Employee contributions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:80 -msgid "Under the :guilabel:`Salary Information` tab" +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:64 +msgid "Odoo calculates the employee's social security deduction as 7.5% of their basic salary, up to the insurable wage cap of 3,000 JOD. If the employee's salary exceeds this cap, the deduction is based on the capped amount. This ensures compliance with :abbr:`SSC (Jordanian Social Security Corporation)` requirements and reflects accurately on the employee's payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:82 -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:61 -msgid ":guilabel:`Wage Type`: select :guilabel:`Fixed Wage` for Full-time or Part-time employees, or :guilabel:`Hourly Wage` for employees who are paid hourly." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:70 +msgid "Employer contributions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:84 -msgid ":guilabel:`Schedule Pay`: the frequency of payslip issuance." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:72 +msgid "For employers, Odoo computes social security contributions as 14.25% of the employee's basic salary, also capped at 3,000 JOD. Like the employee contributions, if the salary exceeds this cap, the employer's contribution is calculated based on the capped amount. These contributions include pensions, workplace injury insurance, and other mandated benefits." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:85 -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:64 -msgid ":guilabel:`Wage`: :guilabel:`Monthly` or :guilabel:`Hourly` depending on the :guilabel:`Wage Type`." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:80 +msgid "**Capped contributions**: The system ensures that both employee and employer contributions are aligned with the SSC-mandated insurance cap." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:87 -msgid ":guilabel:`Internet Subscription`: this is an **optional** field to provide additional internet allowance on top of the current salary package." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:82 +msgid "**Automated calculations**: Contributions are automatically calculated and included in payroll, reducing errors and administrative work." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:91 -msgid "Timesheets do **not** impact work entries in Odoo." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:84 +msgid "**Compliance with regulations**: Odoo's configuration ensures full compliance with Jordanian social security laws, reflecting the correct rates and caps for both sides." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:93 -msgid "Once all information has been setup, set the contract status to :guilabel:`Running` by clicking the :guilabel:`Running` button in the top-right of the page." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:88 +msgid "Income tax calculation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 -msgid "Hong Kong employment contract." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:90 +msgid "The Jordan **Payroll** localization package automates income tax calculations using progressive tax brackets, ensuring compliance with Jordanian labor laws. The system applies income tax rates based on the employee's annual gross income, with higher brackets subject to increased percentages. The calculations are divided into six brackets, and the appropriate tax is deducted monthly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:102 -msgid "Generate payslips" +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:98 +msgid "**5% bracket**: Applicable to annual gross income up to 5,000 JOD. Odoo calculates 5% of the income within this range. If the gross income is below 5,000 JOD, the entire amount is taxed at 5%." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:104 -msgid "Once the employees, and their contracts, are configured, payslips can be generated in the *Payroll* app." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:101 +msgid "**10% bracket**: Applicable to annual gross income between 5,001 and 10,000 JOD. Only the portion of income exceeding 5,000 JOD is taxed at 10%. For example, if the gross income is 7,000 JOD, only 2,000 JOD is taxed at 10%." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:107 -msgid "Odoo provides **four** different salary structures under CAP57 regulation:" +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:104 +msgid "**15% bracket**: Applicable to annual gross income between 10,001 and 15,000 JOD. The portion of income exceeding 10,000 JOD up to 15,000 JOD is taxed at 15%. For instance, if the gross income is 12,000 JOD, only 2,000 JOD is taxed at 15%." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:109 -msgid ":guilabel:`CAP57: Employees Monthly Pay`: to process the monthly employee salary." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:107 +msgid "**20% bracket**: Applicable to annual gross income between 15,001 and 20,000 JOD. Income within this range is taxed at 20%, with deductions automatically adjusted by Odoo." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:110 -msgid ":guilabel:`CAP57: Payment in Lieu of Notice`: to process final payment upon contract termination using :abbr:`ADW (Average Daily Wage)`." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:109 +msgid "**25% bracket**: Applicable to annual gross income between 20,001 and 1,000,000 JOD. Income beyond 20,000 JOD up to 1,000,000 JOD is taxed at 25%. For higher incomes, Odoo ensures accurate calculations by applying the cap of this range." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:112 -msgid ":guilabel:`CAP57: Long Service Payment`: applicable to employees with more than five years of service upon contract termination." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:112 +msgid "**30% bracket**: Applicable to annual gross income exceeding 1,000,000 JOD. Any income above this amount is taxed at 30%, with the system ensuring accurate monthly deductions for high-income earners." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:114 -msgid ":guilabel:`CAP57: Severance Payment`: applicable to employees with more than two years of service upon contract termination." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:117 +msgid "Automated process" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:117 -msgid "Before running the payslips, the accounts used in the salary rule can be adjusted by navigating to :menuselection:`Payroll app --> Configuration --> Rules`." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:119 +msgid "Odoo determines the appropriate tax bracket for each employee based on their gross annual income and applies the corresponding rates. These deductions are prorated and deducted monthly, simplifying payroll management and ensuring compliance." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 -msgid "Hong Kong Salary Rules." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:126 +msgid "**Progressive tax system**: Calculates taxes for each income range individually, ensuring fairness and accuracy." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:123 -msgid "Odoo can create pay runs in two ways: via :ref:`batch ` or :ref:`individual ` payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:128 +msgid "**Automated deductions**: Ensures a smooth payroll workflows with accurate and timely monthly tax deductions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:129 -msgid "Batch payslips" +#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:130 +msgid "**Alignment with Jordanian regulations**: Fully complies with Jordanian tax laws, minimizing manual intervention and errors." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:131 -msgid "This method of payslip generation is used for recurring payments, since multiple employee payslips can be managed at once. Go to :menuselection:`Payroll app --> Payslips --> Batches`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:3 +msgid "United Arab Emirates" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:134 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:158 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:399 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:418 -msgid "Click on :guilabel:`New`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:14 +msgid ":ref:`Install ` the following modules to get all the features of the **United Arab Emirates** **Payroll** localization:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:135 -msgid "Enter a :guilabel:`Batch Name` (e.g. `2024 - Jan`) and :guilabel:`Period` (e.g. `01/01/2024` - `01/31/2024`)." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:23 +msgid ":guilabel:`United Arab Emirates - Payroll`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:137 -msgid "Click on :guilabel:`Generate Payslips`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:24 +msgid "`l10n_ae_hr_payroll`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:138 -msgid "Choose which :guilabel:`Salary Structure` to use for this batch. The department filter allows the batch to only apply to a specific group of employees." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:25 +msgid "Includes all rules, calculations, and salary structures." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:140 -msgid "Click on :guilabel:`Generate`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:26 +msgid ":guilabel:`United Arab Emirates - Payroll with Accounting`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:141 -msgid "A :guilabel:`Payslips` smart button is created automatically." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:27 +msgid "`l10n_ae_hr_payroll_account`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:143 -msgid "Next, click :guilabel:`Create Draft Entry` to generate a draft journal entry found in the :guilabel:`Other Info` tab of each payslip. A :guilabel:`Confirmation` pop-up window appears asking :guilabel:`Are you sure you want to proceed?`. Click :guilabel:`Ok` to create the journal entries." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:28 +msgid "Includes all accounts related to the payroll module." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:150 -msgid "Individual payslips" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:31 +msgid ":doc:`United Arab Emirates fiscal localization documentation <../../../finance/fiscal_localizations/united_arab_emirates>`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:152 -msgid "Go to :menuselection:`Payroll app --> Payslips --> All Payslips`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:37 +msgid "First, configure the :doc:`employee general information <../../employees/new_employee>` and then configure the following fields under the :guilabel:`Private Information` tab:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:154 -msgid "This method of payslip generation is commonly used to handle non-recurring payments (e.g. :guilabel:`CAP57: Payment in Lieu of Notice`, :guilabel:`CAP57: Long Service Payment` or :guilabel:`CAP57: Severance Payment`)." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:40 +msgid ":guilabel:`Nationality (Country)`: The nationality affects an employee's payslips, whether they are nationals or expats." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:159 -msgid "Select an :guilabel:`Employee`. When selected, the :guilabel:`Contract` is filled out automatically." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:42 +msgid ":guilabel:`Identification Number`: Used to extract the :ref:`WPS report `." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:161 -msgid "Add a pay :guilabel:`Period`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:44 +msgid ":guilabel:`Bank Account`: Used to extract the :ref:`WPS report ` and generate payments for those employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:162 -msgid "Select a salary :guilabel:`Structure` (e.g. :guilabel:`CAP57: Employees Monthly Pay`)." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:48 +msgid "The :guilabel:`Nationality (Country)` field needs to be set even if the employee is a |UAE| national since there is a different type of handling if they are citizens of a |GCC| country." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:163 -msgid "The :guilabel:`Worked Days & Inputs` tab automatically compute the worked days/hours and time off leaves that are applicable." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:54 +msgid "Once the employee form has been created, ensure the :doc:`contract <../contracts>` is enabled by clicking on the :icon:`fa-book` :guilabel:`Contracts` smart button, or going to :menuselection:`Employees --> Contracts`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:165 -msgid "Additional payslip items can be added at this time (e.g. :guilabel:`Commissions`, :guilabel:`Deductions`) under the :guilabel:`Other Inputs` section." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:58 +msgid "The following contractual information related to employees working in the United Arab Emirates are found under the :guilabel:`Salary Information` tab:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:167 -msgid "Click on :guilabel:`Compute Sheet` button to generate the payslip lines. This button updates the :guilabel:`Salary Computation` tab." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:63 +msgid ":guilabel:`Scheduled Pay`: the frequency of payslip issuance." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:171 -msgid "If the work entry for an employee was amended, click the :icon:`fa-cog` :guilabel:`(gear)` icon, then click :guilabel:`Recompute Whole Sheet` to refresh the payslip's :guilabel:`Worked Days & Inputs` tab." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:66 +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:110 +msgid ":guilabel:`Housing Allowance`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:175 -msgid "The :guilabel:`Salary Computation` tab shows the detailed breakdown of the computation, based on the salary rules configured for each structure type." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:67 +msgid ":guilabel:`Transportation Allowance`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:178 -msgid ":guilabel:`Rent Allowance`: amount derived from the employee's active rental record." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:68 +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:118 +msgid ":guilabel:`Other Allowance`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:179 -msgid ":guilabel:`Basic Salary`: amount of base salary provided (after rent allowance deduction)." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:71 +msgid "The allowance values set on the contract are used on the payslip lines as allowances." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:180 -msgid ":guilabel:`713 Gross`: net payable amount considering *Commission*, *Internet Allowance*, *Reimbursements*, *Back-pay*, *Deduction*, etc." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:73 +msgid ":guilabel:`Number of Leave Days`: Used to specify the number of annual leave days that an employee deserves in a particular year. Regardless of the actual number of leaves that the employee gets (extra leave days for some internal company reasons), the final calculation of the end of service and unpaid leaves is dependent on the number set on this field." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:182 -msgid ":guilabel:`MPF Gross`: net payable amount from 713 gross after consideration of additional allowances, deductions, and end-of-year payment." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:79 +msgid "The :guilabel:`Number of Leave Days` affects the calculation for unpaid leave provisions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:184 -msgid ":guilabel:`Employee Mandatory Contribution`: employee MPF Contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:81 +msgid ":guilabel:`Is DEWS Applied`: DIFC Employee Workplace Savings (DEWS), if the employee is a |UAE| national and has |DEWS| applied, tick this checkbox." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:185 -msgid ":guilabel:`Employer Mandatory Contribution`: employer MPF Contribution." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:83 +msgid ":guilabel:`Computed Based On Daily Salary`: Defines the way that the end of service is calculated:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:186 -msgid ":guilabel:`Gross`: net payable amount from MPF gross after consideration of MPF deductions." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:85 +msgid "Do not tick this checkbox if the standard calculation is to be used. This computes the compensation amount by dividing the monthly salary by **30** and then multiplying it by **21**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:187 -msgid ":guilabel:`Net Salary`: final payable amount to be paid to the employee." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:87 +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:89 +msgid "Tick this checkbox and directly set the actual :guilabel:`Daily Salary` so that it is used in the end of service calculation." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:190 -msgid "There are no MPF contributions for the first month. Both employee and employer contribution starts on second month." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:93 +msgid "Salary structures and salary rules" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 -msgid "Hong Kong Salary computation." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:96 +msgid "Other input rules" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:196 -msgid "Under the :guilabel:`Other Inputs` section in :guilabel:`Worked Days & Inputs` tab, there are additional manual input types:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:98 +msgid "The following are the different allowances that can be defined directly on the :doc:`payslip form <../payslips>` to allow for the values that are set against these inputs to affect the |WPS| calculations as monthly variable salaries for the specific employee that they are linked to." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:199 -msgid ":guilabel:`Back Pay`: additional salary payout can be included under this category." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:102 +msgid "Rules that are related to the |WPS| setup, are linked to other input types, and whenever they are used, their values are reflected on the |WPS| as monthly variable salary for that specific employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:200 -msgid ":guilabel:`Commission`: the commission earned during the period can be manually entered here." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:106 +msgid "**Type**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:201 -msgid ":guilabel:`Global Deduction`: a lump-sum deduction from the entire payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:106 +msgid "**Code**" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:202 -msgid ":guilabel:`Global Reimbursement`: a lump-sum reimbursement to the entire payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:108 +msgid ":guilabel:`Conveyance Allowance`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:203 -msgid ":guilabel:`Referral Fee`: the additional bonus offered for any form of business-related referral." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:108 +msgid "`CONVALLOW`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:204 -msgid ":guilabel:`Moving Daily Wage`: to override the :abbr:`ADW (Average Daily Wage)` value used for leaves computation." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:110 +msgid "`HOUALLOW`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:206 -msgid ":guilabel:`Skip Rent Allowance`: if set, the rental allowance is excluded from the current payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:112 +msgid ":guilabel:`Medical Allowance`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:208 -msgid ":guilabel:`Custom Average Monthly Salary`: to override the average monthly salary used for end-of-year payment (rule is only applicable to payslips generated in December)." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:112 +msgid "`MEDALLOW`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:210 -msgid ":guilabel:`Lieu of Notice Period (Months)`: only applicable to :guilabel:`CAP57: Payment in Lieu of Notice` salary structure. By default, the final payout is set as 1-month. Use the :guilabel:`Count` field under the :guilabel:`Other Inputs` section to set a different notice period duration." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:114 +msgid ":guilabel:`Annual Passage Allowance`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:215 -msgid "Once the payslips are ready, click on :guilabel:`Compute Sheet`, followed by :guilabel:`Create Draft entry` to generate a draft journal entry found in the :guilabel:`Other Info` tab of the payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:114 +msgid "`ANNUALPASSALLOW`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:221 -msgid "Once the draft journal entries have been posted, the company can now pay the employees. The user can choose between **two** different *payment methods*:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:116 +msgid ":guilabel:`Overtime Allowance`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:224 -msgid "From the employee's payslip (:menuselection:`Payroll app --> Payslips --> All Payslips`), once the payslip's journal entry has been posted, click :guilabel:`Register Payment`. The process is the same as :doc:`paying vendor bills <../../../finance/accounting/payments>`. Select the desired bank journal and payment method, then later reconcile the payment with the corresponding bank statement." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:116 +msgid "`OVERTIMEALLOW`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:228 -msgid "For batch payments (:menuselection:`Payroll app --> Payslips --> Batches`), once all draft journal entries from the batch are confirmed, click :guilabel:`Mark as Paid` to post the payment journal entry. Then :doc:`create a payment <../../../finance/accounting/payments>` in the *Accounting* app, and reconcile accordingly." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:118 +msgid "`OTALLOW`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:234 -msgid "Attendances and hourly wage" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:120 +msgid ":guilabel:`Leave Encashment`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:236 -msgid "To configure the contract for an employee paid hourly using the *Attendances* app for hours tracking, navigate to :menuselection:`Payroll app --> Contracts --> Contracts`. Create a new :ref:`contract `. It is important to remember to set the :guilabel:`Work Entry Source` as :guilabel:`Attendances`, and :guilabel:`Wage Type` as :guilabel:`Hourly Wage`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:120 +msgid "`LEAVEENCASH`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:242 -msgid "To record the hours logged by the employee using *Attendances* app:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:124 +msgid "End of service (EOS)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:244 -msgid "Go to :menuselection:`Attendances app`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:126 +msgid "End of service (EOS) provides the calculation for the allowance that the employee gets at the end of their service. It is triggered when the employee's departure reason is set by archiving the employee's record." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:245 -msgid "The employee can check-in/out, via the kiosk mode and the time will be logged automatically." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:130 +msgid "There are several different calculations depending on the scenario:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:246 -msgid "In the :menuselection:`Payroll app`, review the attendance work entries generated from :menuselection:`Payroll app --> Work Entries --> Work Entries`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:132 +msgid "*The Employee spent less than a year in the company*: The employee does not get any |EOS| allowance since they are not eligible for it (they are eligible once they complete their first year in the company)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:248 -msgid "Next, generate the :ref:`payslips ` and process the payment." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:135 +msgid "*The Employee spent more than a year and less than 5 years in the company*: The employee is eligible for an equivalent of **21** days of salary for each year they spent on the company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 -msgid "Hong Kong Attendance Work Entry." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:139 +msgid "There are two ways for calculating the daily wage that gets paid for the employee against the 21 days of the |EOS|: Either by the default way of dividing the monthly basic wage by 30. Or, it can be manually input on the contract of the employee under the *Daily Salary* field." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 -msgid "Hong Kong Attendance Payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:143 +msgid "*The Employee spent more than 5 years in the company*: The employee is eligible for an equivalent of **30** days of salary for each year they spent on the company. In this case, if the default method is used, then the employee gets paid an equivalent of 1 month of salary, and the set *Daily Salary* field, they will get the amount for the day multiplied by 30." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:257 -msgid "Time Off with Payroll" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:149 +msgid "There are two payslips printout formats, one for normal salaries and one for end of service payslips, it is based on the employee being archived and having a departure reason or not." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:259 -msgid "The work entry types and time off types are fully integrated between the *Time Off* and *Payroll* apps. There are several default time off types and work entry types specific to Hong Kong which are installed automatically along with the *Hong Kong - Payroll* module." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:153 +msgid "End of service provision (EOS Provision)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:263 -msgid "Go to :menuselection:`Payroll app --> Configuration --> Work Entry Types` and click :guilabel:`New`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:155 +msgid "The |EOS| provision provides the calculation for the end-of-service provision amount that the company puts aside every month to count for the |EOS| that will be paid to them as an |EOS| allowance." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:265 -msgid "There are two checkboxes to be considered when setting up the work entry type:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:159 +msgid "Unlike the |EOS|, the provision is part of the employee's payslip from the start of their contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:267 -msgid ":guilabel:`Use 713`: Include this leave type as part of 713 computation." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:161 +msgid "Just like the |EOS|, the provision has two calculations depending on the period spent by the employee in the company:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:268 -msgid ":guilabel:`Non-full pay`: 80% of the :abbr:`ADW (Average Daily Wage)`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:164 +msgid "Less than 5 years: :math:`\\frac{\\text{Monthly Wage}}{30}\\times{\\frac{21}{12}}`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 -msgid "Hong Kong Work Entry Type." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:165 +msgid "More than 5 years: :math:`\\frac{\\text{Monthly Wage}}{30}\\times{\\frac{30}{12}}`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:274 -msgid ":ref:`Creating and configuring work entry types `" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:168 +msgid "This rule is not shown to the employee on the payslip printout and it does not affect their net payable, it is only for internal use by the company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:277 -msgid "Understanding 713 Ordinance" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:172 +msgid "Annual leave provisions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:279 -msgid "The *Hong Kong - Payroll* module is compliant with 713 Ordinance which relates to the :abbr:`ADW (Average Daily Wage)` computation to ensure fair compensation for employees." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:174 +msgid "Annual leave provisions are used for calculating the annual leave provision accumulated each month, just like the |EOS| provision, it does not affect the total amount paid to the employee, it is for internal use by the company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:282 -msgid "The ADW computation is as follows:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:178 +msgid "It is calculated by dividing the employee's total salary (Total Salary = Wage + Allowances) by **30** to get the daily salary. The daily salary is then multiplied by the eligible leave days and divided by **12** to determine the monthly provision amount." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:287 -msgid "Hong Kong ADW Formula." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:182 +msgid "\\text{Monthly Leave Provision} = \\frac{\\text{Total Salary} \\times \\text{Number of Leave Days}}{30}\n" +"\\div 12" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:287 -msgid ":abbr:`ADW (Average Daily Wage)` equals the total wage in a 12-month period, minus the wages of non-full pay, divided by the total days in a 12-month period minus the days of non-full pay." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:189 +msgid "Social insurance contributions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:291 -msgid "For 418 compliance, there is no automated allocation of the *Statutory Holiday* entitlement to the employees. As soon as 418 requirements are met, manually allocate the leaves, via the *Time Off* app." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:191 +msgid "Social insurance contributions calculate the *social insurance*, which is only available to |UAE| nationals." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:296 -msgid "Before generating payslips, ensure the statuses are :guilabel:`Done` to validate the outcome." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:194 +msgid "The company contributes **15%** of the total monthly salary for the employee if the company is in **Abu Dhabi** and **12.5%** if the company is in **another Emirate**." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:301 -msgid "Period" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:198 +msgid "The total monthly salary for the employee = [basic + all allowances set on the contract]." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:302 -msgid "Days" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:200 +msgid "On the other hand, the employee contributes **5%** of their total monthly salary and that amount gets deducted from the payslip amount." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:303 -msgid "Wage" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:204 +msgid "Annual remaining leave balance rules" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:304 -msgid "Commission" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:206 +msgid "Annual remaining leave balance rules are used for calculating the amount to be paid to or taken from the employee based on the number of leave days deserved by the employee during the current year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:305 -msgid "Total" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:209 +msgid "The annual leave :ref:`time off type ` is specified using the :guilabel:`Is Annual Leave` checkbox." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:306 -msgid "ADW" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:212 +msgid "If enabled, the rule calculates the amount of leave days deserved by the employee up to the current date and subtracts the number of annual leave days taken, and if the result is positive, this means that the employee should be compensated for remaining amount and if negative this means that the employee is liable to the company for the difference." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:307 -msgid "Leave Value" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:218 +msgid "Sick leave rules" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:308 -msgid "Jan" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:220 +msgid "Sick leave rules provide the calculation for cases where the employee is on sick leave and decides how the payslip should be affected." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:309 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:323 -msgid "31" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:223 +msgid "There are **3 cases** for the employee to have:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:310 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:312 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:317 -msgid "$20200" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:225 +msgid "**Fully paid sick leave:** The employee can upload a sick leave certificate (SLI). Employees are eligible for **15 days** of this type of leave per calendar year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:311 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:325 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:332 -msgid "$0" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:229 +msgid "The SLI is not mandatory in Odoo but can be done from the setup of the :ref:`time off types `." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:313 -msgid "$651.61 ($20200/31)" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:232 +msgid "**50% paid sick leave:** Same as the fully paid one, but the employees are eligible for **30 days** from this leave type. These 30 days are counted after the first **15** fully paid days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:314 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:321 -msgid "N/A" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:234 +msgid "**0% paid sick leave:** Same as the fully paid one, but the employees are eligible for **45 days** from this leave type. These **45 days** are counted after the first **15/30** fully/half-paid days." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:315 -msgid "Feb" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:239 +msgid "As per the labor law of the United Arab Emirates, the 15, 30, 45 days are not specified as working days or calendar days so this point will rely on the company policy." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:316 -msgid "28" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:242 +msgid "The amount paid for the employee per sick leave day is counted as follows:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:318 -msgid "$5000" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:244 +msgid "\\frac{\\text{Number of Leave Days} \\times \\text{Gross Per Month}}{30} \\times \\text{Percentage}" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:319 -msgid "$25200" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:249 +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:274 +msgid "Where the gross per month is the basic + all other allowances set on the employee's contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:320 -msgid "$769.49 ($45400/59)" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:252 +msgid "Daman investments end of service programme (DEWS)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:322 -msgid "Mar (One Day Annual Leave)" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:254 +msgid "|DEWS| allows for calculating the |DEWS| amounts for the employees who are eligible for it and would like to be registered on it under their current contract with the company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:324 -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:326 -msgid "$20324.33" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:257 +msgid "It is calculated based on the number of years that employees have spent in the company:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:327 -msgid "$730.27 ($65724.33/90)" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:259 +msgid "**Less than 5 years:** 5.83% is deducted from the employee's **BASIC** salary towards the DEWS." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:328 -msgid "$769.49" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:260 +msgid "**More than 5 years:** 8.33% of The employee's **BASIC** is deducted from the total payable for that employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:329 -msgid "Apr (One Day 80% Sick Leave)" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:264 +msgid "Unpaid leaves" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:331 -msgid "$20117.56" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:266 +msgid "Unpaid leaves allows for calculating the amount to be deducted when an employee takes an unpaid leave. It is calculated by the following equation:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:335 -msgid "$584.22 ($730.27*0.8)" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:269 +msgid "\\frac{\\text{Total Number of Unpaid Leave Days} \\times \\text{Gross Per Month}}{30}" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:338 -msgid "Here is an example demonstrating the 713 logic:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:277 +msgid "Out of contract days" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:340 -msgid "**Jan**: Generate a payslip with a monthly wage of $20200. The :abbr:`ADW (Average Daily Wage)` is always computed on a cumulative basis of the trailing 12-months." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:279 +msgid "The out of contract days rule provides a calculation for the days before/after the contract period that overlaps with the contract of days on the employee's payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:342 -msgid "**Feb**: Generate a similar payslip, but add an :guilabel:`Other Input Type` for the :guilabel:`Commission`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:283 +msgid "Payslips are generated for the period of 1st-30th of September but the contract expires on the 21st, in this case, there are 7 days flagged as out of contract." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:344 -msgid "**Mar**: Apply for **one** full-paid annual leave in March. The salary compensation for the leave taken is based on :abbr:`ADW (Average Daily Wage)` thus far." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:286 +msgid "It is calculated by the following equation:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:0 -msgid "Hong Kong March 713." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:288 +msgid "\\frac{\\text{Total Number of Unpaid Leave Days} \\times \\text{Gross Per Month}}{\\text{Number of Days in Current Month}}" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:350 -msgid "**Apr**: Apply for a 1-day non-full pay leave in April. Since this is a non-full pay leave, the :abbr:`ADW (Average Daily Wage)` is computed accordingly." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:294 +msgid "Manual deductions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:0 -msgid "Hong Kong April 713." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:296 +msgid "Manual deductions allows the user to add manual deductions to be applied to employees per payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:357 -msgid "The value of :abbr:`ADW (Average Daily Wage)` is computed in the backend, and not be visible to the user." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:298 +msgid "The amount to be deducted and the description of the deduction is to be set directly on the payslip manually as other inputs." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:361 -msgid "`HK 713 Ordinance `_" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:302 +msgid "Net salary" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:362 -msgid "`HK 418 Ordinance `_" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:304 +msgid "Net salary showcases the net amount that the employee will get based on the payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:365 -msgid "Generate reports" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:306 +msgid "It is calculated by adding basic to all allowances and deducting all deductions from it." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:367 -msgid "Before generating the below reports, setup the following in :menuselection:`Settings app --> Payroll`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:309 +msgid "The approach taken for the rules above is to first get the full amounts for all static amounts that are set on the contract and then deduct the amounts that should be deducted such as unpaid leaves, sick leaves, manual deductions, commission, etc." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:370 -msgid "Configure the following in the :guilabel:`Accounting` section:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:314 +msgid "Generating accounting entries from payslips" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:372 -msgid "Tick the :guilabel:`Payroll HSBC Autopay` checkbox." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:316 +msgid "The accounts are linked to each payroll rule as a debit or credit so that when a draft entry is generated from a payslip, the amounts are reflected on the accounts accordingly." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:374 -msgid ":guilabel:`Autopay Type`: Set as :guilabel:`H2H Submission`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:319 +msgid "The accounts need to be set in a way that would make the end-result entry balanced, otherwise a warning is raised if it is not balanced and it will not generate the entry." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:375 -msgid "Select the :guilabel:`Bank Account` to use." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:322 +msgid "After reviewing the payslips and making sure that all the amounts are correct, generate a draft entry, either one entry for all employees or an entry per employee depending on the setup done on the settings." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:377 -msgid "Configure the following in the :guilabel:`HK Localization` section:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:327 +msgid "Debit and credit accounts set up for the basic and allowance rules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:379 -msgid ":guilabel:`Employer's Name shows on reports`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:0 +msgid "Accounting setup for the rules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:380 -msgid ":guilabel:`Employer's File Number`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:335 +msgid "After a batch or a payslip's journal entry has been posted, the company can proceed to pay their employees." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:381 -msgid ":guilabel:`Manulife MPF Scheme`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:338 +msgid "In the batch itself or on the payslip, by clicking on the pay button, a payment is created and linked to the posted entry for the payslip. The same can be done for batch payslips if one payment is done from a single/multiple payment bank/cash journal." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 -msgid "Hong Kong Payroll Settings." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:343 +msgid "Once the payslip is generated, the employee will be able to access the slips from their portal users. They will automatically receive an email mentioning that the payslips are now available to be viewed on their portal view." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:387 -msgid "IRD report" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:348 +msgid "Payslip printouts" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:389 -msgid "There are a total of **four** IRD reports available:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:350 +msgid "Two printout formats can be extracted from the payslip, it depends on the type of the payslip either a *Monthly* payslip or an *End of Service* Payslip. It is triggered if the employee for the payslip is generated is archived during that month." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:391 -msgid ":guilabel:`IR56B`: employer's Return of Remuneration and Pensions." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:355 +msgid "Instant Pay structure" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:392 -msgid ":guilabel:`IR56E`: notification of Commencement of Employment." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:357 +msgid "This structure is used when off-cycle payslips are required to make payments to employees for special situations, such as one-time or advance salaries. Examples of one-time payments include:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:393 -msgid ":guilabel:`IR56F`: notification of Ceasation of Employment (remaining in HK)." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:361 +msgid "Bonuses" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:394 -msgid ":guilabel:`IR56G`: notification of Ceasation of Employment (departing from HK permanently)." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:362 +msgid "Allowances" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:396 -msgid "Go to :menuselection:`Payroll app --> Reporting`, and select one of the :guilabel:`IR56B/E/F/G Sheet` options:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:365 +msgid "Salary Advances" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:400 -msgid "Fill in the relevant information for the IRD report." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:367 +msgid "Employees may request a portion of their salary before the end of the pay cycle. In such cases, the payroll officer can issue a salary advance using the following steps:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:401 -msgid "Click on :guilabel:`Populate`, and the :guilabel:`Eligible Employees` smart button appears." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:370 +msgid "Create an off-cycle payslip using the United Arab Emirates: Instant Pay structure." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:402 -msgid "The :guilabel:`Employee Declarations` status is :guilabel:`Draft` and changed to :guilabel:`Generated PDF` status once the schedule runs." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:372 +msgid "Add another input of type Salary Advance and specify the amount to be paid to the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:404 -msgid "Once the PDF is generated, the IRD form may be downloaded." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:374 +msgid "Confirm the payslip and process the payment." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 -msgid "Hong Kong IR56B report." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:376 +msgid "In the next cycle, when a payslip is generated for the employee using the `United Arab Emirates: Regular Pay` structure, another input type, `Advance Recovery` is automatically added for the same amount that was previously paid." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:410 -msgid "The scheduled action called *Payroll: Generate pdfs* can be manually triggered. It is set by default to run the PDF generation monthly." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:381 +msgid "If the employee and payroll officer agree to recover the advance over two consecutive cycles, the payroll officer can adjust the Advance Recovery amount on the first payslip. The remaining balance is automatically added to the following cycle." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:414 -msgid "Manulife MPF sheet" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:388 +msgid "Wages protection system (WPS) reports" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:416 -msgid "Go to :menuselection:`Payroll app --> Reporting --> Manulife MPF Sheet`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:390 +msgid "The |WPS| is a report that needs to be submitted by the company to prove that they paid their employees the right amounts on the right dates. It can either be generated per payslip or batch." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:419 -msgid "Select the relevant :guilabel:`Year`, :guilabel:`Month`, and :guilabel:`Sequence No.`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:393 +msgid "The following steps need to be followed before generating the report:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:420 -msgid "Click on :guilabel:`Create XLSX`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:395 +msgid "Go to :menuselection:`Payroll --> Configuration --> Settings` and under the :guilabel:`UAE Payroll WPS Settings` section, configure the following:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:421 -msgid "The *Manulife MPF XLSX* file is then generated, and available for download." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:398 +msgid ":guilabel:`Employer Unique ID`: Set a unique identifier for the company to be used in the |WPS| report." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 -msgid "Hong Kong Manulife Sheet." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:400 +msgid ":guilabel:`Salaries Bank Account`: Select a bank account or start typing to :guilabel:`Create and edit` a new bank account." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:427 -msgid "Odoo will not be developing further reports for other MPF trustee as there will soon be an eMPF platform setup by the local government." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:404 +msgid "When setting the :guilabel:`Salaries Bank Account` make sure to complete the following:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:431 -msgid "`eMPF `_" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:406 +msgid ":guilabel:`Account Holder`: set as the company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:434 -msgid "HSBC autopay report" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:407 +msgid ":guilabel:`Account Number`: has to be a valid IBAN." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:436 -msgid "If *HSBC Autopay* is selected as the batch payment method, click on :guilabel:`Create HSBC Autopay Report`, and fill in the mandatory fields:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:408 +msgid ":guilabel:`Bank`: has to have the :guilabel:`UAE Routing Code Agent ID` set." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:-1 -msgid "Hong Kong HSBC Autopay wizard." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:409 +msgid ":guilabel:`Send Money`: should be enabled and set to :guilabel:`Trusted`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/hong_kong.rst:442 -msgid "This creates an :file:`.apc` file format which can be uploaded to the HSCB portal for processing." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:411 +msgid "Set the unique identifier on all of the employees who are a part of the target of the batch/payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:3 -msgid "Jordan" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:414 +msgid "The :guilabel:`Identification No` field can be found on the employee's page under the :guilabel:`Private Information` tab." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:5 -msgid "The Jordan **Payroll** localization package offers a comprehensive solution for managing payroll in compliance with Jordanian labor laws. It supports income tax calculations using progressive tax brackets, social security contributions from both employees and employers and basic salary calculations, including allowances such as housing and transportation." +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:417 +msgid "Once the initial setup is done, the |WPS| can be generated either for one payslip or for a batch as follows:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:13 -msgid ":ref:`Install ` the following modules to get all the features of the Jordan **Payroll** localization:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:420 +msgid "Generate the payslip one by one or as a batch." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:22 -msgid ":guilabel:`Jordan - Payroll`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:421 +msgid "Post the draft entity related to the payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:23 -msgid "`l10n_jo_hr_payroll`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:422 +msgid "Create the payment report and set the :guilabel:`Export Format` to :guilabel:`UAE WPS`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:24 -msgid "Payroll module supporting basic calculation, tax income brackets, and national contribution tax and social security" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:425 +msgid "The report comes in a :file:`.sif` format as per the governmental requirements, so either use software that can open :file:`.sif` files or convert it to another format (:file:`.xslx`) to be able to review it." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:26 -msgid ":guilabel:`Jordan - Payroll with Accounting`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:429 +msgid "The resulting file consists of the following:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:27 -msgid "`l10n_jo_hr_payroll_account`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:431 +msgid "**Employee Detail Record** (**EDR**): includes details of the employees on the batch. There should be one :abbr:`EDR (Employee Detail Record)` record per employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:28 -msgid "Bridge module between **Payroll** and **Accounting**" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:433 +msgid "**Employee Variable Pay** (**EVP**): includes the details of the variable salary the employee got on that payslip. If the employee has any. The variable amounts are calculated from when other inputs are used that are linked to the salary rules (:menuselection:`Payroll --> Configuration --> Rules`)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:31 -msgid ":doc:`Jordan fiscal localization documentation <../../../finance/fiscal_localizations/jordan>`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:437 +msgid "**Salary Control Record** (**SCR**): There should only be one :abbr:`SCR (Salary Control Record)` per |WPS| file as it indicates the employer details and the totals for the payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:34 -msgid "Basic calculations" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:3 +msgid "United States" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:36 -msgid "The Jordan **Payroll** localization package in Odoo provides foundational payroll management tools that are compliant with Jordan's labor laws and regulations. Key features include:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:5 +msgid "The U.S. payroll localization covers salary computations for employees, including both employee and employer payroll taxes. It accounts for federal and state regulations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:39 -msgid "**Basic salary calculations**: Odoo supports the computation of employee salaries based on predefined salary structures, ensuring accurate payroll processing." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:8 +msgid "The states included in this localization are:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:41 -msgid "**Social security contributions**: It handles social security deductions for employees and employer contributions, aligning with local regulations." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:10 +msgid "California (CA)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:43 -msgid "**Taxation support**: The system is configured to handle income tax calculations in Jordan, including deductions based on progressive tax brackets as required by Jordanian labor and tax laws." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:11 +msgid "New York (NY)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:46 -msgid "**Custom allowances and deductions**: The localization supports additional allowances, deductions, or overtime as part of payroll computation." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:12 +msgid "Texas (TX)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:49 -msgid "These features ensure businesses can manage payroll effectively and comply with Jordanian-specific legal requirements. For enhanced functionality, businesses may leverage Odoo's flexibility to customize payroll workflows." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:13 +msgid "Florida (FL)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:54 -msgid "Social security" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:14 +msgid "Colorado (CO)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:56 -msgid "The Jordan **Payroll** localization package in Odoo simplifies social security management by automating calculations for both employees and employers. Contributions are based on a percentage of the employee's basic salary, with a maximum insurable wage cap in line with Jordanian Social Security Corporation (SSC) regulations." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:15 +msgid "Alabama (AL)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:62 -msgid "Employee contributions" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:16 +msgid "Washington (WA)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:64 -msgid "Odoo calculates the employee's social security deduction as 7.5% of their basic salary, up to the insurable wage cap of 3,000 JOD. If the employee's salary exceeds this cap, the deduction is based on the capped amount. This ensures compliance with :abbr:`SSC (Jordanian Social Security Corporation)` requirements and reflects accurately on the employee's payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:17 +msgid "Nevada (NV)" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:70 -msgid "Employer contributions" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:20 +msgid "Federal taxes (Income, :abbr:`FICA (Federal Insurance Contributions Act)`, and Unemployment) for both employees and employers are covered by default in the Odoo U.S. Payroll localization. Additional states will be added over time, so check back for updates." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:72 -msgid "For employers, Odoo computes social security contributions as 14.25% of the employee's basic salary, also capped at 3,000 JOD. Like the employee contributions, if the salary exceeds this cap, the employer's contribution is calculated based on the capped amount. These contributions include pensions, workplace injury insurance, and other mandated benefits." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:24 +msgid "Before configuring the United States localization, refer to the general :doc:`payroll <../../payroll>` documentation, which includes the basic information for all localizations, as well as all universal settings and fields." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:80 -msgid "**Capped contributions**: The system ensures that both employee and employer contributions are aligned with the SSC-mandated insurance cap." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:31 +msgid "Apps & modules" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:82 -msgid "**Automated calculations**: Contributions are automatically calculated and included in payroll, reducing errors and administrative work." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:33 +msgid ":ref:`Install ` the following modules to get all the features of the United States payroll localization:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:84 -msgid "**Compliance with regulations**: Odoo's configuration ensures full compliance with Jordanian social security laws, reflecting the correct rates and caps for both sides." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:41 +msgid "Dependencies" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:88 -msgid "Income tax calculation" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:43 +msgid ":guilabel:`United States - Payroll`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:90 -msgid "The Jordan **Payroll** localization package automates income tax calculations using progressive tax brackets, ensuring compliance with Jordanian labor laws. The system applies income tax rates based on the employee's annual gross income, with higher brackets subject to increased percentages. The calculations are divided into six brackets, and the appropriate tax is deducted monthly." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:44 +msgid "`l10n_us_hr_payroll`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:98 -msgid "**5% bracket**: Applicable to annual gross income up to 5,000 JOD. Odoo calculates 5% of the income within this range. If the gross income is below 5,000 JOD, the entire amount is taxed at 5%." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:45 +msgid "hr_payroll" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:101 -msgid "**10% bracket**: Applicable to annual gross income between 5,001 and 10,000 JOD. Only the portion of income exceeding 5,000 JOD is taxed at 10%. For example, if the gross income is 7,000 JOD, only 2,000 JOD is taxed at 10%." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:46 +msgid "hr_contract_reports" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:104 -msgid "**15% bracket**: Applicable to annual gross income between 10,001 and 15,000 JOD. The portion of income exceeding 10,000 JOD up to 15,000 JOD is taxed at 15%. For instance, if the gross income is 12,000 JOD, only 2,000 JOD is taxed at 15%." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:47 +msgid "hr_work_entry_holidays" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:107 -msgid "**20% bracket**: Applicable to annual gross income between 15,001 and 20,000 JOD. Income within this range is taxed at 20%, with deductions automatically adjusted by Odoo." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:48 +msgid "hr_payroll_holidays" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:109 -msgid "**25% bracket**: Applicable to annual gross income between 20,001 and 1,000,000 JOD. Income beyond 20,000 JOD up to 1,000,000 JOD is taxed at 25%. For higher incomes, Odoo ensures accurate calculations by applying the cap of this range." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:49 +msgid "Provides U.S. payroll basics, including employee tax details, salary structures (Basic/Gross/Net), tax rules, and W-2/3PA reporting." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:112 -msgid "**30% bracket**: Applicable to annual gross income exceeding 1,000,000 JOD. Any income above this amount is taxed at 30%, with the system ensuring accurate monthly deductions for high-income earners." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:51 +msgid ":guilabel:`United States - Payroll with Accounting`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:117 -msgid "Automated process" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:52 +msgid "`l10n_us_hr_payroll_account`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:119 -msgid "Odoo determines the appropriate tax bracket for each employee based on their gross annual income and applies the corresponding rates. These deductions are prorated and deducted monthly, simplifying payroll management and ensuring compliance." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:53 +msgid "hr_payroll_account" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:126 -msgid "**Progressive tax system**: Calculates taxes for each income range individually, ensuring fairness and accuracy." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:54 +msgid "l10n_us" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:128 -msgid "**Automated deductions**: Ensures a smooth payroll workflows with accurate and timely monthly tax deductions." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:55 +msgid "l10n_us_hr_payroll" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/jordan.rst:130 -msgid "**Alignment with Jordanian regulations**: Fully complies with Jordanian tax laws, minimizing manual intervention and errors." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:56 +msgid "Links payroll and accounting by creating journal entries (per payslip if needed) to record payroll in the company's books." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:3 -msgid "United Arab Emirates" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:60 +msgid ":doc:`Configure the United States fiscal localization <../../../finance/fiscal_localizations/united_states>`" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:14 -msgid ":ref:`Install ` the following modules to get all the features of the **United Arab Emirates** **Payroll** localization:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:64 +msgid "General configurations" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:23 -msgid ":guilabel:`United Arab Emirates - Payroll`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:66 +msgid "First, the company must be configured. Navigate to :menuselection:`Settings app --> Users & Companies --> Companies`. From the list, select the desired company, and configure the following fields:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:24 -msgid "`l10n_ae_hr_payroll`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:70 +msgid ":guilabel:`Company Name`: Enter the business name in this field." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:25 -msgid "Includes all rules, calculations, and salary structures." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:71 +msgid ":guilabel:`Address`: Complete the full address, including the :guilabel:`City`, :guilabel:`State`, :guilabel:`Zip Code`, and :guilabel:`Country`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:26 -msgid ":guilabel:`United Arab Emirates - Payroll with Accounting`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:75 +msgid "The state selected in the company's address is associated as the *work address* by default for the employee, and the one used to calculate payroll taxes." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:27 -msgid "`l10n_ae_hr_payroll_account`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:78 +msgid ":guilabel:`Tax ID`: Enter the company's :abbr:`EIN (Employer Identification Number)`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:28 -msgid "Includes all accounts related to the payroll module." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:79 +msgid ":guilabel:`Company ID` : Enter the business's state ID number." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:31 -msgid ":doc:`United Arab Emirates fiscal localization documentation <../../../finance/fiscal_localizations/united_arab_emirates>`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:80 +msgid ":guilabel:`Currency`: By default, :abbr:`USD (US Dollars)` is selected. If not, select :guilabel:`USD` from the drop-down menu." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:37 -msgid "First, configure the :doc:`employee general information <../../employees/new_employee>` and then configure the following fields under the :guilabel:`Private Information` tab:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:82 +msgid ":guilabel:`Phone`: Enter the company phone number." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:40 -msgid ":guilabel:`Nationality (Country)`: The nationality affects an employee's payslips, whether they are nationals or expats." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:83 +msgid ":guilabel:`Email`: Enter the email used for general contact information." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:42 -msgid ":guilabel:`Identification Number`: Used to extract the :ref:`WPS report `." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:86 +msgid "Ensure the information is accurate, as it is used when creating W-2s." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:44 -msgid ":guilabel:`Bank Account`: Used to extract the :ref:`WPS report ` and generate payments for those employees." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:91 +msgid "Every employee being paid must have their employee profiles configured for the United States payroll localization. Additional fields are present after configuring the database for the United States." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:48 -msgid "The :guilabel:`Nationality (Country)` field needs to be set even if the employee is a |UAE| national since there is a different type of handling if they are citizens of a |GCC| country." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:94 +msgid "To update an employee form, open the :menuselection:`Employees` app and click on the desired employee record. On the employee form, configure the required fields in the related tabs." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:54 -msgid "Once the employee form has been created, ensure the :doc:`contract <../contracts>` is enabled by clicking on the :icon:`fa-book` :guilabel:`Contracts` smart button, or going to :menuselection:`Employees --> Contracts`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:98 +msgid "Work tab" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:58 -msgid "The following contractual information related to employees working in the United Arab Emirates are found under the :guilabel:`Salary Information` tab:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:100 +msgid "Enter the :guilabel:`Work Address` for the employee in the :guilabel:`Location` section of the :guilabel:`Work` tab." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:63 -msgid ":guilabel:`Scheduled Pay`: the frequency of payslip issuance." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:104 +msgid "The state selected in this address determines which salary rules Odoo applies when calculating taxes." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:66 -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:108 -msgid ":guilabel:`Housing Allowance`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:108 +msgid "Personal tab" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:67 -msgid ":guilabel:`Transportation Allowance`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:110 +msgid "Ensure the employee has a minimum of one :ref:`trusted bank account ` listed in the :guilabel:`Bank Accounts` field in the :guilabel:`Private Contact` section." +msgstr "" + +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:113 +msgid "These accounts are used to pay the employee, via an automation through a NACHA payment file. Payroll **cannot** be processed for employees without a *trusted* :ref:`bank account `. If no trusted bank account is set, a warning appears on the **Payroll** dashboard and an error occurs when attempting to run payroll." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:68 -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:116 -msgid ":guilabel:`Other Allowance`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:118 +msgid "Ensure there is a valid :guilabel:`SSN No` entered in the :guilabel:`Citizenship` section . The last four digits of the :abbr:`SSN (Social Security Number)` number appears on the employee's payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:71 -msgid "The allowance values set on the contract are used on the payslip lines as allowances." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "Where bank account information is located on the employee profile." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:73 -msgid ":guilabel:`Number of Leave Days`: Used to specify the number of annual leave days that an employee deserves in a particular year. Regardless of the actual number of leaves that the employee gets (extra leave days for some internal company reasons), the final calculation of the end of service and unpaid leaves is dependent on the number set on this field." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:128 +msgid "Contract overview section" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:79 -msgid "The :guilabel:`Number of Leave Days` affects the calculation for unpaid leave provisions." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:130 +msgid "This section holds information that drives salary calculations. Ensure the following fields are configured:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:81 -msgid ":guilabel:`Is DEWS Applied`: DIFC Employee Workplace Savings (DEWS), if the employee is a |UAE| national and has |DEWS| applied, tick this checkbox." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:133 +msgid ":guilabel:`Contract`: The Validity of the compensation conditions can be updated depending on the needs." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:83 -msgid ":guilabel:`Computed Based On Daily Salary`: Defines the way that the end of service is calculated:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:135 +msgid ":guilabel:`Wage Type`: Select how the employee is paid." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:85 -msgid "Do not tick this checkbox if the standard calculation is to be used. This computes the compensation amount by dividing the monthly salary by **30** and then multiplying it by **21**." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:137 +msgid "Select :guilabel:`Fixed Wage` for salaried employees who receive the same amount each pay period." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:87 -msgid "Tick this checkbox and directly set the actual :guilabel:`Daily Salary` so that it is used in the end of service calculation." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:139 +msgid "Select :guilabel:`Hourly Wage` for employees paid based on hours worked." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:91 -msgid "Salary structures and salary rules" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:142 +msgid "Set a default :guilabel:`Wage Type` in the salary :ref:`Structure Type ` to configure employees in bulk. If needed, the default can be overridden on individual employee records if exceptions are needed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:94 -msgid "Other input rules" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:146 +msgid ":guilabel:`Contract Type`: Determines how the employee is paid and classified, such as :guilabel:`Salary-exempt`, :guilabel:`Salary-nonexempt`, :guilabel:`Hourly`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:96 -msgid "The following are the different allowances that can be defined directly on the :doc:`payslip form <../payslips>` to allow for the values that are set against these inputs to affect the |WPS| calculations as monthly variable salaries for the specific employee that they are linked to." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:150 +msgid "This field is visible on payslips. Some states require payslips to state if the employee is exempt or non-exempt from overtime. Ensure the selection follows the state laws." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:100 -msgid "Rules that are related to the |WPS| setup, are linked to other input types, and whenever they are used, their values are reflected on the |WPS| as monthly variable salary for that specific employee." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:153 +msgid ":guilabel:`Pay Category`: Select :guilabel:`United States: Employee` for this field. This defines when the employee is paid, their default working schedule, and the work entry type it applies to." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:104 -msgid "**Type**" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "The contract overview section of the employee form of the payroll tab." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:104 -msgid "**Code**" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:160 +msgid "Schedule section" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:106 -msgid ":guilabel:`Conveyance Allowance`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:162 +msgid ":guilabel:`Work Entry Source`: Defines how :doc:`work entries <../work_entries>` are generated for payroll during the specified pay period. The options are:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:106 -msgid "`CONVALLOW`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:165 +msgid ":guilabel:`Working Schedule`: Based on the employee's assigned :ref:`working schedule ` (e.g., 40 hours per week)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:108 -msgid "`HOUALLOW`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:167 +msgid ":guilabel:`Attendances`: Based on :doc:`approved checked-in hours <../../attendances/management>` in the **Attendances** app." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:110 -msgid ":guilabel:`Medical Allowance`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:169 +msgid ":guilabel:`Planning`: Based on :ref:`scheduled shifts ` in the **Planning** app." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:110 -msgid "`MEDALLOW`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:172 +msgid ":guilabel:`Extra Hours`: Tick the checkbox to allow the **Attendances** app to add any extra work entries logged by the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:112 -msgid ":guilabel:`Annual Passage Allowance`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:174 +msgid ":guilabel:`Working Hours`: Using the drop-down menu, select the default work schedule. This is particularly important for employees available to receive overtime pay (typically hourly employees, not salaried)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:112 -msgid "`ANNUALPASSALLOW`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:179 +msgid "W-2 form section" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:114 -msgid ":guilabel:`Overtime Allowance`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:181 +msgid "A W-2 is an annual tax form that reports an employee's wages, taxes, and benefits. Employees use it to file their tax returns. The options below correspond to checkboxes in *box 13* of the W-2 form. Select any that apply to the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:114 -msgid "`OVERTIMEALLOW`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:185 +msgid ":guilabel:`Statutory Employee`: Tick this box if the employee is exempt from income tax, but subject to :abbr:`FICA (Federal Insurance Contributions Act)` taxes." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:116 -msgid "`OTALLOW`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:187 +msgid ":guilabel:`Retirement Plan`: Tick this box if the employee is an active contributor to an employer-sponsored retirement plan." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:118 -msgid ":guilabel:`Leave Encashment`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:189 +msgid ":guilabel:`Third-Party Sick Pay`: Tick this box if the employee is covered under a plan where sick pay benefits may be provided by a third party (e.g., an insurance company) during the year." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:118 -msgid "`LEAVEENCASH`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:193 +msgid "W-4 form section" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:122 -msgid "End of service (EOS)" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:195 +msgid "A W-4 is an :abbr:`IRS (Internal Revenue Services)` form that determines an employee's federal tax withholding, which the employer remits directly to the :abbr:`IRS (Internal Revenue Services)`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:124 -msgid "End of service (EOS) provides the calculation for the allowance that the employee gets at the end of their service. It is triggered when the employee's departure reason is set by archiving the employee's record." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:198 +msgid "Configure any relevant fields for the employee in this section." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:128 -msgid "There are several different calculations depending on the scenario:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:201 +msgid "State filing section" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:130 -msgid "*The Employee spent less than a year in the company*: The employee does not get any |EOS| allowance since they are not eligible for it (they are eligible once they complete their first year in the company)." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:203 +msgid "An employee's marital status impacts their payroll taxes. Configure the following fields regarding their status and withholdings." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:133 -msgid "*The Employee spent more than a year and less than 5 years in the company*: The employee is eligible for an equivalent of **21** days of salary for each year they spent on the company." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:206 +msgid ":guilabel:`Status`: Using the drop-down menu, select the employee's *federal* filing status. The options are :guilabel:`Single`, :guilabel:`Married/RDP filing jointly`, :guilabel:`Married/RDP filing separately`, :guilabel:`Head of household`, or :guilabel:`Qualifying surviving spouse/RDP with child`. This typically comes from the employee's W-4 form." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:137 -msgid "There are two ways for calculating the daily wage that gets paid for the employee against the 21 days of the |EOS|: Either by the default way of dividing the monthly basic wage by 30. Or, it can be manually input on the contract of the employee under the *Daily Salary* field." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:210 +msgid ":guilabel:`Tax Status`: Using the drop-down menu, select the employee's *state* filing status, if applicable." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:141 -msgid "*The Employee spent more than 5 years in the company*: The employee is eligible for an equivalent of **30** days of salary for each year they spent on the company. In this case, if the default method is used, then the employee gets paid an equivalent of 1 month of salary, and the set *Daily Salary* field, they will get the amount for the day multiplied by 30." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:214 +msgid "The federal and state statuses do **not** need to match." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:147 -msgid "There are two payslips printout formats, one for normal salaries and one for end of service payslips, it is based on the employee being archived and having a departure reason or not." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:217 +msgid "As of 2025, these states do **not** collect state income tax: Alaska, Florida, Nevada, New Hampshire, South Dakota, Tennessee, Texas, Washington, and Wyoming. If a payroll localization exists for these states, there are **no** corresponding state options in the :guilabel:`Tax Status` field. Leave it blank." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:151 -msgid "End of service provision (EOS Provision)" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:222 +msgid ":guilabel:`Withholding Allowance`: Enter the total annual amount to be withheld from the employee's pay for the year, for state taxes. Only fill this out if the employee lives in a state with state income tax." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:153 -msgid "The |EOS| provision provides the calculation for the end-of-service provision amount that the company puts aside every month to count for the |EOS| that will be paid to them as an |EOS| allowance." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:225 +msgid ":guilabel:`Extra Withholding`: Enter the total *extra* annual amount (not including the :guilabel:`Withholding Allowance` amount) to be withheld from the employee's pay for the year, for state taxes, if the employee lives in a state with state income tax." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:157 -msgid "Unlike the |EOS|, the provision is part of the employee's payslip from the start of their contract." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "The state filing section of the employee form, filled out." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:159 -msgid "Just like the |EOS|, the provision has two calculations depending on the period spent by the employee in the company:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:233 +msgid "Common benefits" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:162 -msgid "Less than 5 years: :math:`\\frac{\\text{Monthly Wage}}{30}\\times{\\frac{21}{12}}`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:235 +msgid "The following sections of benefits are considered common ones offered by US employers. This information needs to be populated with the information selected by the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:163 -msgid "More than 5 years: :math:`\\frac{\\text{Monthly Wage}}{30}\\times{\\frac{30}{12}}`" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:239 +msgid "The benefits listed in this section are considered the most commonly offered by companies. If other employee benefits exist that require regular paycheck deductions, they can be added as *inputs*." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:166 -msgid "This rule is not shown to the employee on the payslip printout and it does not affect their net payable, it is only for internal use by the company." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:244 +msgid "Pre-tax deductions" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:170 -msgid "Annual leave provisions" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:246 +msgid "Pre-tax benefits lower the employee's gross wage, which decreases the base amount for tax calculations. These are displayed at the beginning of the payslip before the gross wage is stipulated." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:172 -msgid "Annual leave provisions are used for calculating the annual leave provision accumulated each month, just like the |EOS| provision, it does not affect the total amount paid to the employee, it is for internal use by the company." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:251 +msgid "Retirement plans section" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:176 -msgid "It is calculated by dividing the employee's total salary (Total Salary = Wage + Allowances) by **30** to get the daily salary. The daily salary is then multiplied by the eligible leave days and divided by **12** to determine the monthly provision amount." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:253 +msgid "This section is where the employee and employer 401(k) contributions are configured. Fill out the following fields:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:180 -msgid "\\text{Monthly Leave Provision} = \\frac{\\text{Total Salary} \\times \\text{Number of Leave Days}}{30}\n" -"\\div 12" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:256 +msgid ":guilabel:`401(k)`: Enter the amount of money taken out of the employee's payslip each pay period. This can be entered either as a percentage (%) of the payslip amount, or a specific dollar amount per payslip ($/slip)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:187 -msgid "Social insurance contributions" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:259 +msgid ":guilabel:`Matching Amount`: Enter the matching amount the employer contributes to the employee's 401(k), as compared to the employee's contributions. This field can also be configured as either a percentage (%) of the employee's contribution, or a specific dollar amount ($/slip)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:189 -msgid "Social insurance contributions calculate the *social insurance*, which is only available to |UAE| nationals." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:262 +msgid ":guilabel:`Matching Yearly Cap`: If there is a limit to the employer's contribution, enter it as a percentage of the employee's annual salary." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:192 -msgid "The company contributes **15%** of the total monthly salary for the employee if the company is in **Abu Dhabi** and **12.5%** if the company is in **another Emirate**." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:266 +msgid "A company allows employees to contribute to a 401(k) retirement plan, and matches 50% of the employee's contributions, up to $5,000 USD a year. The employee earns $50,000 USD a year, and contributes 20% of their pay to their 401(k), which is $10,000 USD." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:196 -msgid "The total monthly salary for the employee = [basic + all allowances set on the contract]." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:270 +msgid "To configure this, enter `20.00` in the :guilabel:`401(k)` field, `50.00` in the :guilabel:`Matching Amount` field, and `20.00` in the :guilabel:`Matching Yearly Cap` field." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:198 -msgid "On the other hand, the employee contributes **5%** of their total monthly salary and that amount gets deducted from the payslip amount." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:0 +msgid "An employee's retirement configurations." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:202 -msgid "Annual remaining leave balance rules" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:277 +msgid "Health benefits section" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:204 -msgid "Annual remaining leave balance rules are used for calculating the amount to be paid to or taken from the employee based on the number of leave days deserved by the employee during the current year." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:279 +msgid "This section is where the employee's health contributions are configured. Populate each of the fields with the corresponding amount deducted from *each paycheck* for the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:207 -msgid "The annual leave :ref:`time off type ` is specified using the :guilabel:`Is Annual Leave` checkbox." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "The health benefits section for an employee, filled out with payslip deductions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:210 -msgid "If enabled, the rule calculates the amount of leave days deserved by the employee up to the current date and subtracts the number of annual leave days taken, and if the result is positive, this means that the employee should be compensated for remaining amount and if negative this means that the employee is liable to the company for the difference." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:286 +msgid "Other benefits section" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:216 -msgid "Sick leave rules" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:288 +msgid "This section currently only houses a :guilabel:`Commuter` benefit field. Enter the amount being deducted per paycheck, for applicable commuter benefits." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:218 -msgid "Sick leave rules provide the calculation for cases where the employee is on sick leave and decides how the payslip should be affected." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:292 +msgid "Post-tax deductions section" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:221 -msgid "There are **3 cases** for the employee to have:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:294 +msgid "These types of benefits count as deductions *after* taxes are calculated. They appear towards the end of the payslip before the net amount is displayed. Currently, only one field, :guilabel:`ROTH 401(k)` appears in this section. Enter either a percentage (%) of the payslip amount, or a specific dollar amount per payslip ($/slip) being deducted from the employee's pay, and deposited into a ROTH 401(k) account." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:223 -msgid "**Fully paid sick leave:** The employee can upload a sick leave certificate (SLI). Employees are eligible for **15 days** of this type of leave per calendar year." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:301 +msgid "Payroll configuration" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:227 -msgid "The SLI is not mandatory in Odoo but can be done from the setup of the :ref:`time off types `." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:303 +msgid "Several sections within the **Payroll** app installs a Salary Structure, Structure Type, Rules, and Parameters specific to the United States." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:230 -msgid "**50% paid sick leave:** Same as the fully paid one, but the employees are eligible for **30 days** from this leave type. These 30 days are counted after the first **15** fully paid days." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:307 +msgid "Salary structures & structure types" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:233 -msgid "**0% paid sick leave:** Same as the fully paid one, but the employees are eligible for **45 days** from this leave type. These **45 days** are counted after the first **15/30** fully/half-paid days." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:309 +msgid "When the **l10n_us_hr_payroll** module is :ref:`installed `, a new :guilabel:`Salary Structure` gets installed, :guilabel:`United States: Regular Pay`. This structure includes one :guilabel:`Structure Type`, :guilabel:`United States: Regular Pay`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:238 -msgid "As per the labor law of the United Arab Emirates, the 15, 30, 45 days are not specified as working days or calendar days so this point will rely on the company policy." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:313 +msgid "The :guilabel:`Salary Structure` contains all the individual :ref:`salary rules ` that informs the **Payroll** app how to calculate employee payslips." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:241 -msgid "The amount paid for the employee per sick leave day is counted as follows:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "The United States salary structure in the salary structures list." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:244 -msgid "\\frac{\\text{Number of Leave Days} \\times \\text{Gross Per Month}}{30} \\times \\text{Percentage}" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:322 +msgid "Salary rules" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:249 -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:274 -msgid "Where the gross per month is the basic + all other allowances set on the employee's contract." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:324 +msgid "To view the salary rules that inform the salary structure what to do, navigate to :menuselection:`Payroll app --> Configuration --> Structures` and expand the :guilabel:`United States: Employee` group to reveal the :guilabel:`United States: Regular Pay` structure type. Click :guilabel:`United States: Regular Pay` to view the detailed salary rules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:252 -msgid "Daman investments end of service programme (DEWS)" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "The top portion of the US salary rules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:254 -msgid "|DEWS| allows for calculating the |DEWS| amounts for the employees who are eligible for it and would like to be registered on it under their current contract with the company." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:332 +msgid "Each rule defines how pay is calculated, taking into account factors such as commissions, bonuses, taxes, and insurance. The *logic* behind the :guilabel:`United States: Regular Pay` rules is as follows:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:257 -msgid "It is calculated based on the number of years that employees have spent in the company:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:336 +msgid "The first four rules listed reflects all sources of income, including the basic wage listed on the contract (:guilabel:`Basic Salary`), plus any allowances, such as :guilabel:`Commissions`, :guilabel:`Tips`, and :guilabel:`Bonuses`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:259 -msgid "**Less than 5 years:** 5.83% is deducted from the employee's **BASIC** salary towards the DEWS." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:0 +msgid "The basic salary rules for the US localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:260 -msgid "**More than 5 years:** 8.33% of The employee's **BASIC** is deducted from the total payable for that employee." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:343 +msgid "Adding up these inputs is how the gross salary (:guilabel:`Gross Pay`) is calculated. This amount is the base amount used to calculate payroll taxes." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:264 -msgid "Unpaid leaves" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:346 +msgid "The next set of rules are the various pre-tax benefits and taxable income, such as :guilabel:`Medical` insurance contributions and :guilabel:`Commuter Benefits`. After the employee's :guilabel:`Gross Pay` is calculated, Odoo deducts all the pre-tax benefits listed on the employee's contract to determine the employee's :guilabel:`Taxable Income`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:266 -msgid "Unpaid leaves allows for calculating the amount to be deducted when an employee takes an unpaid leave. It is calculated by the following equation:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:0 +msgid "The pre-tax rules for the US localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:269 -msgid "\\frac{\\text{Total Number of Unpaid Leave Days} \\times \\text{Gross Per Month}}{30}" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:354 +msgid "Next, all the various tax rules are listed where both federal and state payroll withholdings are outlined. First, federal tax rules are listed, then any state rules (if any) are listed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:277 -msgid "Out of contract days" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:0 +msgid "The federal tax rules for the US localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:279 -msgid "The out of contract days rule provides a calculation for the days before/after the contract period that overlaps with the contract of days on the employee's payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:361 +msgid "The rule for federal withholdings for `Worker's Compensation` appears *after* several state-specific withholdings are listed, and does **not** appear in the above image, but are listed in the rules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:283 -msgid "Payslips are generated for the period of 1st-30th of September but the contract expires on the 21st, in this case, there are 7 days flagged as out of contract." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:365 +msgid "The last rules listed are the post-tax employee deductions." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:286 -msgid "It is calculated by the following equation:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:0 +msgid "The post-tax rules for the US localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:288 -msgid "\\frac{\\text{Total Number of Unpaid Leave Days} \\times \\text{Gross Per Month}}{\\text{Number of Days in Current Month}}" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:370 +msgid "The :guilabel:`Other Inputs` tab contains anything else affecting payroll. This includes items to be added to the payslip, such as :guilabel:`Tips`, and other deductions, such as :guilabel:`Child Support`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:294 -msgid "Manual deductions" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:0 +msgid "The other inputs for the US localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:296 -msgid "Manual deductions allows the user to add manual deductions to be applied to employees per payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:377 +msgid "The employee's net salary is the amount the employee receives from the employer. The formula to calculate the net salary is:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:298 -msgid "The amount to be deducted and the description of the deduction is to be set directly on the payslip manually as other inputs." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:380 +msgid "\\text{Gross Salary} + \\text{Allowances} - \\text{Payroll Taxes} - \\text{General Deductions}" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:302 -msgid "Net salary" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:384 +msgid "Additionally, an extra section exists in payroll calculation for the US called `Employer Deductions`, and it breaks down the payments the employer must make as their portion of payroll taxes." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:304 -msgid "Net salary showcases the net amount that the employee will get based on the payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:0 +msgid "The employer deduction rules for the US localization." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:306 -msgid "It is calculated by adding basic to all allowances and deducting all deductions from it." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:392 +msgid "The rule for employer deductions for `Worker's Compensation` appears *after* several state-specific employer deductions are listed, and does **not** appear in the above image, but are listed in the rules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:309 -msgid "The approach taken for the rules above is to first get the full amounts for all static amounts that are set on the contract and then deduct the amounts that should be deducted such as unpaid leaves, sick leaves, manual deductions, commission, etc." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:397 +msgid "Rule parameters" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:314 -msgid "Generating accounting entries from payslips" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:399 +msgid "Some calculations require specific rates associated with them, or wage caps. *Rules Parameters* are capable of listing a value, either a percentage or a fixed amount, to reference in the salary rules." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:316 -msgid "The accounts are linked to each payroll rule as a debit or credit so that when a draft entry is generated from a payslip, the amounts are reflected on the accounts accordingly." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:403 +msgid "The wage base for Social Security tax calculations has a cap for 2025, accounted for in the `US: FICA OASDI Cap` parameter." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:319 -msgid "The accounts need to be set in a way that would make the end-result entry balanced, otherwise a warning is raised if it is not balanced and it will not generate the entry." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:406 +msgid "Most rules pull information stored in the parameters module to get the rate of the rule (a percentage) and the cap (a dollar amount)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:322 -msgid "After reviewing the payslips and making sure that all the amounts are correct, generate a draft entry, either one entry for all employees or an entry per employee depending on the setup done on the settings." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:409 +msgid "To view rule parameters, navigate to :menuselection:`Payroll app --> Configuration --> Rule Parameters`. Here, all rule parameters are displayed with their linked :guilabel:`Salary Rules`, which can be accessed. Review the parameters associated with a rule by looking for the :guilabel:`Name` of the rule, and make any edits as needed." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:327 -msgid "Debit and credit accounts set up for the basic and allowance rules." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:415 +msgid "The Unemployment tax of a company is different from the one added by default in Odoo. To update this, navigate to :menuselection:`Payroll app --> Configuration --> Rule Parameters`, then, filter the results by :abbr:`FUTA (Federal Unemployment Tax Act)`, or the name of the state that needs editing, and edit the corresponding rate from the list." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:0 -msgid "Accounting setup for the rules." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:421 +msgid "Odoo adds updated rule parameters for the current calendar year. It is **not** recommended to edit rule parameters **unless a federal or state parameter has changed**, and is different from the rule parameters created by Odoo. Check with all local and national regulations *before* making any changes to rule parameters." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:335 -msgid "After a batch or a payslip's journal entry has been posted, the company can proceed to pay their employees." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:427 +msgid "Run US payroll" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:338 -msgid "In the batch itself or on the payslip, by clicking on the pay button, a payment is created and linked to the posted entry for the payslip. The same can be done for batch payslips if one payment is done from a single/multiple payment bank/cash journal." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:429 +msgid "Before running paypoll, the payroll officer must validate employee :doc:`work entries <../work_entries>` to confirm pay accuracy and catch errors. This includes checking that all time off is approved and any overtime is appropriate." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:343 -msgid "Once the payslip is generated, the employee will be able to access the slips from their portal users. They will automatically receive an email mentioning that the payslips are now available to be viewed on their portal view." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:433 +msgid "Work entries sync based on the employee's :doc:`contract <../contracts>` configuration. Odoo pulls from the assigned working schedule, attendance records, planning schedule, and approved time off." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:348 -msgid "Payslip printouts" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:436 +msgid "Any :ref:`discrepencies or conflicts ` must be resolved, then the work entries can be :ref:`regenerated `." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:350 -msgid "Two printout formats can be extracted from the payslip, it depends on the type of the payslip either a *Monthly* payslip or an *End of Service* Payslip. It is triggered if the employee for the payslip is generated is archived during that month." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:439 +msgid "Once everything is correct, draft payslips can be :ref:`created individually ` or in :doc:`batches <../batches>`, referred to in the **Payroll** app as *Pay Runs*." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:355 -msgid "Master report" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "The work entries for a pay run, with some time off entered in the work entries." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:357 -msgid "The *Master report* provides a detailed view of the amounts paid to employees for a specific period based on the payslips that are generated for them during that period with payslip lines being set as columns in an Excel report." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:446 +msgid "To cut down on the payroll officer's time, it is typical to process payslips in batches, either by wage type (fixed salary vs hourly), pay schedule (weekly, bi-weekly, monthly, etc.), department (direct cost vs. administration), or any other grouping that best suits the company." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:361 -msgid "It is mainly used to make the auditing process for the human resources department easier and faster." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:450 +msgid "The process of running payroll includes different actions that need to be executed to ensure that the amount withheld from payroll taxes is correct, the amount that the employee receives as their net salary is correct, and the computation of hours worked reflects the employee's actual hours worked, among others." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:363 -msgid "To access this report, go to :menuselection:`Payroll --> Reporting --> Master Report`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:455 +msgid "When running a payroll batch, check that the period, company, and employees included are correct *before* starting to analyze or validate the data." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:368 -msgid "Wages protection system (WPS) reports" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:458 +msgid "Once the payslips are drafted, review them for accuracy. Check the :guilabel:`Worked Days & Inputs` tab, and ensure the listed worked time is correct, as well as any other inputs. Add any missing inputs, such as commissions, tips, reimbursements, that are missing." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:370 -msgid "The |WPS| is a report that needs to be submitted by the company to prove that they paid their employees the right amounts on the right dates. It can either be generated per payslip or batch." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:462 +msgid "Next, check the various totals (gross pay, employee taxes, benefits, employer taxes, net salaries), then click :guilabel:`Compute Sheet` to update the salary calculations, if there were edits. If everything is correct, click :guilabel:`Validate`." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:373 -msgid "The following steps need to be followed before generating the report:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "The worked days tab of a payslip." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:375 -msgid "Go to :menuselection:`Payroll --> Configuration --> Settings` and under the :guilabel:`UAE Payroll WPS Settings` section, configure the following:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:470 +msgid "Accounting check" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:378 -msgid ":guilabel:`Employer Unique ID`: Set a unique identifier for the company to be used in the |WPS| report." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:472 +msgid "The accounting process when running payroll has two components: :ref:`creating journal entries `, and :ref:`registering payments `." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:380 -msgid ":guilabel:`Salaries Bank Account`: Select a bank account or start typing to :guilabel:`Create and edit` a new bank account." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:478 +msgid "Journal entry creation" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:384 -msgid "When setting the :guilabel:`Salaries Bank Account` make sure to complete the following:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:480 +msgid "After payslips are confirmed and validated, journal entries are posted either individually, or in a batch. The journal entry is created first as a draft." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:386 -msgid ":guilabel:`Account Holder`: set as the company." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:484 +msgid "It must be decided if journal entries are done individually or in batches *before* running payroll." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:387 -msgid ":guilabel:`Account Number`: has to be a valid IBAN." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "All payslips in a draft state." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:388 -msgid ":guilabel:`Bank`: has to have the :guilabel:`UAE Routing Code Agent ID` set." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:490 +msgid "Four accounts from the US :abbr:`CoA (Chart of Accounts)` are included with the payroll localization:" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:389 -msgid ":guilabel:`Send Money`: should be enabled and set to :guilabel:`Trusted`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:493 +msgid "`611000 Salaries & Wages`: Records gross salary and the employer's portion of payroll expenses. Also groups values from rules without specific accounts (e.g., company-specific benefits)." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:391 -msgid "Set the unique identifier on all of the employees who are a part of the target of the batch/payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:495 +msgid "`230100 Employee Payroll Taxes`: Withheld taxes from employees, which the employer must file and pay. The partner and label columns of the journal entry indicate the specific tax." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:394 -msgid "The :guilabel:`Identification No` field can be found on the employee's page under the :guilabel:`Private Information` tab." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:497 +msgid "`230200 Employer Payroll Taxes`: Employer portion of payroll taxes to be filed and paid. The partner and label columns of the journal entry indicate the specific tax." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:397 -msgid "Once the initial setup is done, the |WPS| can be generated either for one payslip or for a batch as follows:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:499 +msgid "`230000 Salary Payable`: Net salary owed to the employee." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:400 -msgid "Generate the payslip one by one or as a batch." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:502 +msgid "The :abbr:`CoA (Chart of Accounts)` configuration is done by default when a company is located in the US. The account codes and names can be edited to suit the company's needs. If there is no :abbr:`CoA (Chart of Accounts)` account associated with a salary rule (used in a salary structure), Odoo uses the account `Salary Expenses` to create the journal entry, regardless of the nature of the move." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:401 -msgid "Post the draft entity related to the payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:508 +msgid "If everything seems correct on the journal entry draft, post the journal entries." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:402 -msgid "Create the payment report and set the :guilabel:`Export Format` to :guilabel:`UAE WPS`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "Journal entries posted." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:405 -msgid "The report comes in a :file:`.sif` format as per the governmental requirements, so either use software that can open :file:`.sif` files or convert it to another format (:file:`.xslx`) to be able to review it." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:516 +msgid "Register Payments" msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:409 -msgid "The resulting file consists of the following:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:518 +msgid "After the :ref:`journla entries ` are validated, Odoo can generate payments." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:411 -msgid "**Employee Detail Record** (**EDR**): includes details of the employees on the batch. There should be one :abbr:`EDR (Employee Detail Record)` record per employee." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:521 +msgid "To generate payments from payslips,employee's **must** have a *trusted* bank account. If the employee's bank account is *not* marked as `trusted`, NACHA files **cannot** be generated through Odoo." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:413 -msgid "**Employee Variable Pay** (**EVP**): includes the details of the variable salary the employee got on that payslip. If the employee has any. The variable amounts are calculated from when other inputs are used that are linked to the salary rules (:menuselection:`Payroll --> Configuration --> Rules`)." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:525 +msgid "Payments can be :guilabel:`Grouped by Partner` if there is a partner associated with a salary rule." msgstr "" -#: ../../content/applications/hr/payroll/payroll_localizations/united_arab_emirates.rst:417 -msgid "**Salary Control Record** (**SCR**): There should only be one :abbr:`SCR (Salary Control Record)` per |WPS| file as it indicates the employer details and the totals for the payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "Payslips with a status of paid." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:3 -msgid "Payslips" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:531 +msgid "Close Payroll" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:5 -msgid "*Payslips* are generated by payroll officers through the :menuselection:`Payroll` application." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:533 +msgid "If there are no errors, payroll is completed for the pay period." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:7 -msgid "The :guilabel:`Payslips` drop-down header of the :menuselection:`Payroll` application consists of three sections: :guilabel:`To Pay`, :guilabel:`All Payslips`, and :guilabel:`Batches`." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:536 +msgid "Reports" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:10 -msgid "These three sections provide all the tools needed to create payslips for employees, including individual payslips, a batch of payslips, or commission payslips." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:538 +msgid "The US localization contains several reports unique to the US, which provide tax information for employees, as well as the ability to integrate with outside organizations such as ADP." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "Payslips menu selection in Payroll." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:542 +msgid "W2 Report" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:20 -msgid "To pay" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:544 +msgid "The *W2 Report* provides a CSV file that allows employees to e-file their W2 report with third-party software. To access this report, navigate to :menuselection:`Payroll -> Reporting -> United States -> W2`." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:22 -msgid "Click on :menuselection:`Payroll app --> Payslips --> To Pay` to see the payslips that need to be paid." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:548 +msgid "To create a W2 form, click :guilabel:`New`, and a blank :guilabel:`Create W2 Form` page loads. Set the :guilabel:`Start Date` and :guilabel:`End Date` (typically a calendar year), and select the :guilabel:`Company`, if in a multi-company database." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "View all payslips that need to be paid on the Payslips To Pay page." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:552 +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:574 +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:596 +msgid "All pay runs for the time period appear in a list view. To add any missing pay runs, click :guilabel:`Add a line` at the bottom of the list, and select the missing files." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:29 -msgid "Each payslip lists the :guilabel:`Reference` number for the individual payslip, the :guilabel:`Employee` name, the :guilabel:`Batch Name`, the :guilabel:`Company`, the :guilabel:`Basic Wage`, :guilabel:`Gross Wage`, :guilabel:`Net Wage`, and the :guilabel:`Status` of the payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:555 +msgid "When done, click the :guilabel:`Generate` button to create a CSV file with a summary of all payroll related payments made during the specified time period." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:33 -msgid "Click on an individual payslip entry to view the details for that individual payslip." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "The W2 report screen, with the file to download in the top half." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:38 -msgid "Create a new payslip" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:562 +msgid "Form 941" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:40 -msgid "A new payslip can be created from either the :ref:`Payslips To Pay ` page or the :ref:`Employee Payslips ` page." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:564 +msgid "The *Form 941* report is meant to inform the government of the amount of federal income tax, :abbr:`FICA (Federal Insurance Contributions Act)` taxes (Medicare and Social Security) withheld from employee paychecks. It also reports the employee's side of taxes." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:43 -msgid "Create a new payslip by clicking the :guilabel:`New` button in the top-left corner." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:568 +msgid "To create this report, navigate to :menuselection:`Payroll -> Reporting -> United States -> Form 941`. Click the :guilabel:`New` button, and a new :guilabel:`Form 941` report page loads. Configure the information on the top portion of the form, including the :guilabel:`Company`, :guilabel:`Tax Year`, :guilabel:`Quarter`, :guilabel:`IRS Payment Option` (how the money is being sent to the IRS), and :guilabel:`Deposit Schedule and Tax Liability` (how often payments are made to the IRS)." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:45 -msgid "A blank payslip form is loaded, where the necessary payslip information can be entered." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:577 +msgid "When done, click :guilabel:`Generate`, and the report is created as a CSV file, and appears on the :guilabel:`Form 941` report dashboard. Companies then download and submit this report through a third party for e-filing." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:48 -msgid "Payslip form" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "The 941 report screen, with the file to download in the top half." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:50 -msgid "On the blank payslip form, several fields are required. Most of the required fields auto-populate after an employee is selected." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:585 +msgid "Form 940" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:53 -msgid "Fill out the following information on the payslip form:" +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:587 +msgid "The *Form 940* report details the annual :abbr:`FUTA (Federal Unemployment Tax Act)` withheld for payroll." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:55 -msgid ":guilabel:`Employee`: type in the name of an employee, or select the desired employee from the drop-down list in this field. This field is **required**." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:590 +msgid "To create this report, navigate to :menuselection:`Payroll -> Reporting -> United States -> Form 940`. Click the :guilabel:`New` button, and a new :guilabel:`Form 940` report page loads. Configure the information on the top portion of the form, including the :guilabel:`Company`, :guilabel:`Tax Year`, :guilabel:`Single State Payer`, :guilabel:`Multi State Employer`, :guilabel:`Paid in Credit Reduction State`, and :guilabel:`IRS Payment Option` (how the money is being sent to the IRS)." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:59 -msgid "It is recommended to **only** create payslips for employees that are already in the database. If there is no current employee record (and therefore no employee contract) it is recommended to create the new employee in the *Employees* application **before** creating payslips for that employee. Refer to the :doc:`new employee <../employees/new_employee>` documentation for instructions on how to add an employee." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:599 +msgid "When done, click :guilabel:`Generate`, and the report is created as a CSV file, and appears on the :guilabel:`Form 940` report dashboard. Companies then download and submit this report through a third party for e-filing." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:65 -msgid ":guilabel:`Period`: the first day to the last day of the *current* month auto-populates the :guilabel:`Period` fields by default. The dates can be changed, if desired." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:-1 +msgid "The 940 report screen, with the file to download in the top half." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:68 -msgid "To change the start date, click on the first date in the :guilabel:`Period` field to reveal a pop-up calendar. On this calendar, use the :guilabel:`< (less-than)` and :guilabel:`> (greater-than)` icons to select the desired month. Then, click on the desired day to select that specific date." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:607 +msgid "Export data to third-party apps" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:73 -msgid "Repeat this process to modify the end date for the payslip. These fields are **required**." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:609 +msgid "The *ADP Export* report generates a CSV file that can be submitted to ADP, which then makes payments to the employees." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:74 -msgid ":guilabel:`Contract`: using the drop-down menu, select the desired contract for the employee. Only the available corresponding contracts for the selected employee appear as options. This field is **required**." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:612 +msgid "The CSV file summarizes the employee's worked hours during a specified time period, correlating to their salary or hourly wage. The report is generated from :doc:`work entry <../work_entries>` *after* any time off is confirmed." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:77 -msgid ":guilabel:`Batch`: using the drop-down menu in this field, select the batch of payslips this new payslip should be added to." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:616 +msgid "The export format is meant to match with the ADP format. Since companies can customize their portal and may require some changes, the data is there to be fed to ADP to run payroll in it." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:79 -msgid ":guilabel:`Structure`: using the drop-down menu, select the salary structure type. Only the corresponding structures associated with the selected contract for the employee appear as options." +#: ../../content/applications/hr/payroll/payroll_localizations/united_states.rst:620 +msgid "To access the ADP Export report, the `United States - Payroll - Export to ADP` module **must** be :ref:`installed `." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:82 -msgid "If no employee and/or no contract is selected yet, all available :guilabel:`Structures` appear in the list. Once an employee and/or contract is selected, any unavailable :guilabel:`Structures` set for that employee and/or contract do not appear. This field is **required**." +#: ../../content/applications/hr/payroll/payslips.rst:3 +msgid "Payslips" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "The top fields for a new payslip all filled out for a February payslip." +#: ../../content/applications/hr/payroll/payslips.rst:5 +msgid "*Payslips* are individual records of payment, containing all the details of how the pay was calculated (hours, deductions, other inputs, etc.), and generated by payroll officers through the **Payroll** application. Payslips can be created and processed individually, or multiple payslips can be processed at one time, in a single batch." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:91 -msgid "Typically, after making a selection in the :guilabel:`Employee` field, Odoo auto-populates all other required fields (besides the :guilabel:`Period` field), but **only** if that information is already on that employee's form in the *Employees* app." +#: ../../content/applications/hr/payroll/payslips.rst:13 +msgid "Create a payslip" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:96 -msgid "If modifications to auto-populated fields are made, it is recommended to check with the accounting department to ensure every entry that affects the *Accounting* application is correct." +#: ../../content/applications/hr/payroll/payslips.rst:15 +msgid "A new payslip can be created from either the :ref:`Payslips To Pay ` page or the :ref:`Employee Payslips ` page." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:102 -msgid "Worked days & inputs tab" +#: ../../content/applications/hr/payroll/payslips.rst:18 +msgid "Navigate to :menuselection:`Payroll app --> Payslips`, and click either :guilabel:`To Pay` or :guilabel:`All Payslips`. Click the :guilabel:`New` button in the top-left corner, and a blank payslip form loads." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:104 -msgid ":guilabel:`Worked Days`: the entries under :guilabel:`Worked Days` (including the :guilabel:`Type`, :guilabel:`Description`, :guilabel:`Number of Days`, :guilabel:`Number of Hours`, and :guilabel:`Amount`) are automatically filled in, based on what was entered for the :guilabel:`Period`, :guilabel:`Contract`, and :guilabel:`Structure` fields of the payslip form." +#: ../../content/applications/hr/payroll/payslips.rst:23 +msgid "Payslip form" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:108 -msgid ":guilabel:`Other Inputs`: additional inputs affecting the payslip can be entered in this section, such as deductions, reimbursements, and expenses." +#: ../../content/applications/hr/payroll/payslips.rst:25 +msgid "Fill out the following information on the payslip form:" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:111 -msgid "Click :guilabel:`Add a line` to create an entry in the :guilabel:`Other Inputs` section." +#: ../../content/applications/hr/payroll/payslips.rst:27 +msgid ":guilabel:`Employee`: Using the drop-down menu, select the employee in this field. This field is **required**. Once a selection is made, other fields may auto-populate according to the employee record." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:113 -msgid "Using the drop-down menu in the :guilabel:`Type` column, select a :guilabel:`Type` for the input. Next, enter a :guilabel:`Description`, if desired. Lastly, enter the amount in the :guilabel:`Count` field." +#: ../../content/applications/hr/payroll/payslips.rst:32 +msgid "It is recommended to **only** create payslips for employees that are already in the database. If there is no current employee record (and therefore no employee contract) it is recommended to create the new employee in the **Employees** application *before* creating payslips for that employee. Refer to the :doc:`new employee <../employees/new_employee>` documentation for instructions on how to add an employee." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "The fields filled out in the worked days and inputs tab." +#: ../../content/applications/hr/payroll/payslips.rst:38 +msgid ":guilabel:`Contract`: The current contract for the selected employee populates this field. This field is **required**." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:122 -msgid "Salary computation tab" +#: ../../content/applications/hr/payroll/payslips.rst:42 +msgid "All employees are required to have a contract in order to generate payslips. Additionally, *only one* contract can be in the running stage for each employee, therefore the current contract populates this field, and it is **not** recommended to make changes to this field." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:124 -msgid ":guilabel:`Salary Computation`: the :guilabel:`Salary Computation` tab is automatically filled in after the :guilabel:`Compute Sheet` button is clicked. Doing so displays the wages, deductions, taxes, etc. for the entry." +#: ../../content/applications/hr/payroll/payslips.rst:46 +msgid ":guilabel:`Batch`: Using the drop-down menu, select the payslip batch this new payslip should be added to, if applicable." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "The fields filled out in the salary computation tab." +#: ../../content/applications/hr/payroll/payslips.rst:48 +msgid ":guilabel:`Structure`: The structure linked to the employee's contract auto-populates this field by default. If desired, use the drop-down menu to select a different structure." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:133 -msgid "Other info tab" +#: ../../content/applications/hr/payroll/payslips.rst:50 +msgid ":guilabel:`Period`: The first day to the last day of the *current* month auto-populates the :guilabel:`Period` fields by default. The dates can be changed, if desired." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:135 -msgid ":guilabel:`Payslip Name`: type in a name for the payslip in this field. The name should be short and descriptive, such as `(Employee Name) April 2023`. This field is **required**." +#: ../../content/applications/hr/payroll/payslips.rst:53 +msgid "To change the start date, click on the first date in the :guilabel:`Period` field to reveal a pop-up calendar. Navigate to the desired month, and click on the desired day to select that specific date." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:137 -msgid ":guilabel:`Company`: select the company the payslip applies to using the drop-down menu in this field. This field is **required**." +#: ../../content/applications/hr/payroll/payslips.rst:57 +msgid "Repeat this process to modify the end date for the payslip. These fields are **required**." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:139 -msgid ":guilabel:`Close Date`: enter the date that the payment is made to the employee in this field." +#: ../../content/applications/hr/payroll/payslips.rst:60 +msgid "Typically, after making a selection in the :guilabel:`Employee` field, Odoo auto-populates all other required fields (besides the :guilabel:`Period` field), but **only** if that information is already on that employee's form in the **Employees** app." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:141 -msgid "Click in the field to reveal a calendar pop-up window. Using the :guilabel:`< > (less-than/greater-than)` icons, navigate to the desired month and year." +#: ../../content/applications/hr/payroll/payslips.rst:65 +msgid "If modifications to auto-populated fields are made, it is recommended to check with the accounting department to ensure every entry that affects the **Accounting** application is correct." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:144 -msgid "Then, click on the desired date to select it." +#: ../../content/applications/hr/payroll/payslips.rst:-1 +msgid "The top fields for a new payslip all filled out for a February payslip." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:145 -msgid ":guilabel:`Date Account`: enter the date on which the payslip should be posted in this field." +#: ../../content/applications/hr/payroll/payslips.rst:75 +msgid "Worked days & inputs tab" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:146 -msgid ":guilabel:`Salary Journal`: this field auto-populates after selecting an existing :guilabel:`Employee`. This field **cannot** be edited, as it is linked to the *Accounting* application. This field is **required**." +#: ../../content/applications/hr/payroll/payslips.rst:77 +msgid "The :guilabel:`Worked Days & Inputs` tab details the number of days and hours the employee worked during the specified :guilabel:`Period` of time on the top portion of the payslip form, and is calculated based on the selected :guilabel:`Contract` and :guilabel:`Structure` fields." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:149 -msgid ":guilabel:`Accounting Entry`: if applicable, this field is automatically populated once the payslip is confirmed. This field **cannot** be modified." +#: ../../content/applications/hr/payroll/payslips.rst:81 +msgid "The :guilabel:`Worked Days` section is automatically populated and lists all the individual attendance records for the time period, including both worked time and any time off taken." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:151 -msgid ":guilabel:`Add an Internal Note...`: any note or reference message for the new entry can be typed in this field." +#: ../../content/applications/hr/payroll/payslips.rst:84 +msgid "Each individual entry lists the :guilabel:`Type`, :guilabel:`Description`, :guilabel:`Number of Days`, :guilabel:`Number of Hours`, and the total :guilabel:`Amount`." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "The fields filled out in the other info tab." +#: ../../content/applications/hr/payroll/payslips.rst:87 +msgid "Additional records cannot be created for the :guilabel:`Worked Days & Inputs` as it is auto-populated according to the employee's attendance records or working schedule on their :ref:`employee record `." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:159 -msgid "Process the new payslip" +#: ../../content/applications/hr/payroll/payslips.rst:91 +msgid "The :guilabel:`Other Inputs` section is where additional inputs are listed, such as deductions, reimbursements, and expenses." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:161 -msgid "When all the necessary information on the payslip is entered, click the :guilabel:`Compute Sheet` button. Upon doing so, all the information on the payslip is saved, and the :guilabel:`Salary Computation` tab auto-populates, based on the information on the employee's contract or attendance records." +#: ../../content/applications/hr/payroll/payslips.rst:94 +msgid "Each individual item lists the :guilabel:`Type`, :guilabel:`Description`, and :guilabel:`Count`. To add a new input, click :guilabel:`Add a line`, and using the drop-down menu, select the :guilabel:`Type`. Next, enter a brief :guilabel:`Description`, and last, enter the :guilabel:`Count`." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:166 -msgid "If any modifications need to be made, first click the :guilabel:`Cancel` button, then click the :guilabel:`Set to Draft` button. Make any desired changes, then click the :guilabel:`Compute Sheet` button once again, and the changes are reflected in the :guilabel:`Worked Days` and :guilabel:`Salary Computation` tabs." +#: ../../content/applications/hr/payroll/payslips.rst:-1 +msgid "The fields filled out in the worked days and inputs tab." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:171 -msgid "Once everything on the payslip form is correct, click the :guilabel:`Create Draft Entry` button to create the payslip." +#: ../../content/applications/hr/payroll/payslips.rst:103 +msgid "Salary computation tab" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:174 -msgid "Then, a confirmation pop-up window appears, asking :guilabel:`Are you sure you want to proceed?`. Click :guilabel:`OK` to confirm." +#: ../../content/applications/hr/payroll/payslips.rst:105 +msgid "The :guilabel:`Salary Computation` tab is where all the individual salary rules are listed and calculated, including everything from the employee's salary, to all the deductions and allowances, such as taxes, expenses, benefit contributions, and any other items associated with the installed :doc:`payroll localization `." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:178 -msgid "The database may need to be refreshed for the payslip and email to appear." +#: ../../content/applications/hr/payroll/payslips.rst:110 +msgid "When the payslip is first created, this tab remains blank. Click the :guilabel:`Compute Sheet` button in the upper-left corner, and the :guilabel:`Salary Computation` tab is populated." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:180 -msgid "To print the payslip, click the :guilabel:`Print` button. To cancel the payslip, click the :guilabel:`Cancel` button." +#: ../../content/applications/hr/payroll/payslips.rst:114 +msgid "It is **not** possible to make edits to this tab, as the calculations are based on other entries on the payslip." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "The new payslip is emailed to the employee and the email appears in the chatter." +#: ../../content/applications/hr/payroll/payslips.rst:118 +msgid "The :guilabel:`Compute Sheet` button does not disappear from view after it is clicked, so the payslip can be recalculated at any point prior to :ref:`processing it `." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:187 -msgid "Next, the payment must be sent to the employee. To do this, click the :guilabel:`Register Payment` button. Doing so reveals a pop-up form, in which the desired :guilabel:`Bank Journal` that the payment should be made against must be selected from a drop-down menu. Then, click the :guilabel:`Confirm` button to confirm the journal, and return to the payslip." +#: ../../content/applications/hr/payroll/payslips.rst:121 +msgid "If any changes need to be made to the :ref:`Worked Days & Inputs ` tab, click the :guilabel:`Compute Sheet` button to recalculate the payslip." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:193 -msgid "In order for a payslip to be paid, the employee *must* have a bank account entered in their contact information. If there is no bank information, a payslip cannot be paid, and an error appears when the :guilabel:`Make Payment` button is clicked. Banking information can be found in the :ref:`Private Information ` tab on the employee's card in the *Employees* app. Edit the employee card, and add banking information, if it is missing." +#: ../../content/applications/hr/payroll/payslips.rst:-1 +msgid "The fields filled out in the salary computation tab." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:0 -msgid "Banking information can be entered in an employee's card." +#: ../../content/applications/hr/payroll/payslips.rst:128 +msgid "Other info tab" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:203 -msgid "Odoo automatically checks bank account information. If there is an error with the employee's listed bank account, an error appears in a pop-up window, stating, *The employee bank account is untrusted.* If this error appears, update the employee's bank account information on their :ref:`Employee Form `." +#: ../../content/applications/hr/payroll/payslips.rst:130 +msgid "The :guilabel:`Other Info` tab houses information that is required, but not associated with any inputs or calculations, as the other tabs do." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:208 -msgid "If a payment needs to be cancelled or refunded, click the corresponding :guilabel:`Cancel` or :guilabel:`Refund` button, located at the top-left of the screen." +#: ../../content/applications/hr/payroll/payslips.rst:133 +msgid "The :guilabel:`Payslip Name` is auto-populated according to the employee name and the time period the payslip is for. Make any desired edits to the name in this field. This field is **required**." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:212 -msgid "Before processing payslips, it is best practice to check the *Warnings* section of the *Payroll* app dashboard. Here, all possible issues concerning payroll appear." +#: ../../content/applications/hr/payroll/payslips.rst:136 +msgid "The :guilabel:`Company` field is also automatically populated according to the employee's record, and cannot be modified." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:215 -msgid "To view the warnings, navigate to :menuselection:`Payroll app --> Dashboard`. The warnings appear in the top-left corner of the dashboard." +#: ../../content/applications/hr/payroll/payslips.rst:139 +msgid "The end date selected in the :guilabel:`Period` field in the top half of the form populates both the :guilabel:`Close Date` and :guilabel:`Date Account` fields, by default. The :guilabel:`Close Date` is the date the payment is issued to the employee, while the :guilabel:`Date Account` is the end date the payslip covers. Modify the dates, if needed." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "The dashboard view of the Payroll app, with the warnings box highlighted." +#: ../../content/applications/hr/payroll/payslips.rst:144 +msgid "The :guilabel:`Salary Journal` field is populated by default, and **cannot** be edited. This is the accounting journal the paycheck is logged in." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:222 -msgid "Warnings are grouped by type, such as `Employees Without Running Contracts` or `Employees Without Bank account Number`. Click on a warning to view all entries associated with that specific issue." +#: ../../content/applications/hr/payroll/payslips.rst:147 +msgid "If there are any additional notes or information needed for the payslip, add them to the :guilabel:`Add an Internal Note...` field." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:225 -msgid "If the warnings are not resolved, at any point in the payslip processing process, an error may occur. Errors appear in a pop-up window, and provide details for the error, and how to resolve them." +#: ../../content/applications/hr/payroll/payslips.rst:-1 +msgid "The fields filled out in the other info tab." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:232 -msgid "All payslips" +#: ../../content/applications/hr/payroll/payslips.rst:156 +msgid "Process a payslip" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:234 -msgid "To view all payslips, regardless of status, go to :menuselection:`Payroll app --> Payslips --> All Payslips`. The :guilabel:`Employee Payslips` page loads, displaying all payslips, organized by batch, in a default nested list view." +#: ../../content/applications/hr/payroll/payslips.rst:158 +msgid "When all the necessary information on the payslip is entered, the payslip can be processed. First, a :ref:`draft of the journal entry ` is created, followed by a :ref:`payment report `, and finally, the employee is :ref:`paid `." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:238 -msgid "Click on the :guilabel:`▶ (right arrow)` next to an individual batch name to view all the payslips in that particular batch, along with all the payslip details." +#: ../../content/applications/hr/payroll/payslips.rst:163 +msgid "Before processing payslips, it is best practice to check the *Warnings* section of the **Payroll** app dashboard. Here, all possible issues concerning payroll appear." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:241 -msgid "The number of payslips in the batch is written in parenthesis after the batch name. The :guilabel:`Status` for each individual payslip appears on the far-right side, indicating one of the following status options:" +#: ../../content/applications/hr/payroll/payslips.rst:166 +msgid "To view the warnings, navigate to :menuselection:`Payroll app --> Dashboard`. The warnings appear in the top-left corner of the dashboard." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:245 -msgid ":guilabel:`Draft`: the payslip is created, and there is still time to make edits, since the amounts are not calculated." +#: ../../content/applications/hr/payroll/payslips.rst:-1 +msgid "The dashboard view of the Payroll app, with the warnings box visible." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:247 -msgid ":guilabel:`Waiting`: the payslip has been calculated, and the salary details can be found in the *Salary Computation* tab." +#: ../../content/applications/hr/payroll/payslips.rst:172 +msgid "Warnings are grouped by type, such as `Employees Without Running Contracts` or `Employees Without Bank account Number`. Click on a warning to view all entries associated with that specific issue." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:249 -msgid ":guilabel:`Done`: the payslip is calculated and ready to be paid." +#: ../../content/applications/hr/payroll/payslips.rst:175 +msgid "If the warnings are not resolved, at any point in the payslip processing process, an error may occur. Errors appear in a pop-up window, and provide details for the error, and how to resolve them." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:250 -msgid ":guilabel:`Paid`: the employee has been paid." +#: ../../content/applications/hr/payroll/payslips.rst:182 +msgid "Create draft entry" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "View all payslips organized by batches. Click on the arrow to expand each batch." +#: ../../content/applications/hr/payroll/payslips.rst:184 +msgid "Once everything on the payslip form is correct, click the :guilabel:`Create Draft Entry` button to create the payslip. A :guilabel:`Confirmation` pop-up window appears, asking :guilabel:`Are you sure you want to proceed?` Click :guilabel:`OK` to confirm." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:256 -msgid "Click on an individual payslip to view the details for that payslip on a separate page. Using the breadcrumb menu, click :guilabel:`Employee Payslips` to go back to the list view of all payslips." +#: ../../content/applications/hr/payroll/payslips.rst:188 +msgid "Once the payslip draft is created, the status changes to :guilabel:`Done`, a :icon:`fa-usd` :guilabel:`Journal Entry (Draft)` smart button appears at the top, and additional buttons appear in the top-left corner." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:259 -msgid "A new payslip can be created from the :guilabel:`Employee Payslips` page, by clicking the :guilabel:`New` button in the upper-left corner. Doing so reveals a separate blank payslip form page. On that blank payslip form page, enter all the necessary information, as described in the :ref:`Create new payslips ` section." +#: ../../content/applications/hr/payroll/payslips.rst:193 +msgid "After creating a draft entry, Odoo considers the payslip as confirmed." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:264 -msgid "To print PDF versions of payslips from the *Payslips to Pay* or :guilabel:`Employee Payslips` pages, first select the desired payslips by clicking on the individual checkbox to the left of each payslip to be printed. Or, click the box to the left of the :guilabel:`Reference` column title, which selects all visible payslips on the page. Then, click the :guilabel:`Print` button to print the payslips." +#: ../../content/applications/hr/payroll/payslips.rst:195 +msgid "Click the :icon:`fa-usd` :guilabel:`Journal Entry (Draft)` smart button to view the detailed accounting journal entry. Click :guilabel:`Post` to post the entry. Using the breadcrumb menu, return to the payslip." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:270 -msgid "Payslips can also be exported to an Excel spreadsheet. To export **all** payslips, click on the :guilabel:`⚙️ (gear)` icon at the end of the words :guilabel:`Employee Payslips` in the top-left corner. This reveals a drop-down menu. Click :guilabel:`Export All` to export all payslips to a spreadsheet." +#: ../../content/applications/hr/payroll/payslips.rst:199 +msgid "After the journal entry is posted, the smart button at the top changes to :icon:`fa-usd` :guilabel:`Journal Entry (Posted)`" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "Click on the Export All smart button to export all payslips to an Excel payslip." +#: ../../content/applications/hr/payroll/payslips.rst:203 +msgid "Employees cannot be :ref:`paid ` until the journal entry is posted." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:279 -msgid "To export only select payslips, first select the payslips to be exported from the list. Then, click the checkbox to the left of each individual payslip to select it. As payslips are selected, a smart button appears in the top-center of the page, indicating the number of selected payslips. Then, click the :guilabel:`⚙️ (gear) Actions` icon in the top-center of the page, and click :guilabel:`Export`." +#: ../../content/applications/hr/payroll/payslips.rst:208 +msgid "Create payment report" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "The individual list of employee ayslips with three selected to be exported." +#: ../../content/applications/hr/payroll/payslips.rst:210 +msgid "Once the payslip status has changed to :guilabel:`Done`, a payment report must be created. A payment report is a document that contains all the necessary information to transfer the employee's earnings from the company's bank account to theirs. These are submitted by the payroll department to the appropriate institution." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:290 -msgid "Both *To Pay* and *All Payslips* display all the detailed information for each payslip." +#: ../../content/applications/hr/payroll/payslips.rst:215 +msgid "Click the :guilabel:`Create Payment Report` and a pop-up window loads. Using the drop-down menu, select the :guilabel:`Export Format` for the payment report. The two default options available are :guilabel:`NACHA` and :guilabel:`CSV`. :guilabel:`NACHA` stands for the :abbr:`National Automated Clearing House Association (NACHA)`, and this selection creates a compatible ACH file which is sent to the company's bank." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:293 -msgid "Batches" +#: ../../content/applications/hr/payroll/payslips.rst:225 +msgid "If :guilabel:`CSV` is selected, all other fields are hidden from view." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:295 -msgid "To view payslips in batches, navigate to :menuselection:`Payroll app --> Payslips --> Batches` to display all the payslip batches that have been created. These payslip batches are displayed in a list view, by default." +#: ../../content/applications/hr/payroll/payslips.rst:227 +msgid "Next, select the desired :guilabel:`Bank Journal` the paycheck is logged to. Last, using the calendar selector, set the date the paycheck is issued in the :guilabel:`Effective Date` field." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:299 -msgid "Each batch displays the :guilabel:`Name`, :guilabel:`Date From` and :guilabel:`Date To` dates, its :guilabel:`Status`, the number of payslips in the batch (:guilabel:`Payslips Count`), and the :guilabel:`Company`." +#: ../../content/applications/hr/payroll/payslips.rst:230 +msgid "Once the pop-up window is configured, click the :guilabel:`Generate` button, and the file appears on the payslip form, in a new :guilabel:`Payment Report` field." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "View displaying all batches created." +#: ../../content/applications/hr/payroll/payslips.rst:236 +msgid "Pay employee" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:308 -msgid "Create a new batch" +#: ../../content/applications/hr/payroll/payslips.rst:238 +msgid "Next, the payment must be sent to the employee. To do this, click the :guilabel:`Pay` button in the upper-left corner. Doing so reveals a :guilabel:`Pay` pop-up form." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:310 -msgid "To create a new batch of payslips from the :guilabel:`Payslips Batches` page (:menuselection:`Payroll app --> Payslips --> Batches`), click the :guilabel:`New` button in the top-left corner. Doing so reveals a blank payslip batch form on a separate page." +#: ../../content/applications/hr/payroll/payslips.rst:241 +msgid "All the necessary information is pre-populated on the form according to the payslip configuration, but modifications can be made, if necessary, to any of the fields *except* the :guilabel:`Amount`. This is populated according to the payslip calculations, and **cannot** be modified." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:314 -msgid "On the new payslip batch form, enter the :guilabel:`Batch Name`." +#: ../../content/applications/hr/payroll/payslips.rst:245 +msgid ":guilabel:`Journal`: The accounting journal the payslip is logged to." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:316 -msgid "Next, select the date range to which the batch applies. Click into one of the :guilabel:`Period` fields, and a calendar pop-up window appears. From this calendar pop-up window, navigate to the correct month, and click on the corresponding day for both the start and end dates of the batch." +#: ../../content/applications/hr/payroll/payslips.rst:246 +msgid ":guilabel:`Payment Method`: Using the drop-down menu, select how the employee is being paid. The default options are:" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:320 -msgid "The current company populates the :guilabel:`Company` field. If operating in a multi-company environment, it is **not** possible to modify the :guilabel:`Company` from the form. The batch **must** be created while in the database for the desired company." +#: ../../content/applications/hr/payroll/payslips.rst:249 +msgid ":guilabel:`Manual Payment`: Select this if paying the employee in a method *other* than A :guilabel:`Check` or :guilabel:`NACHA`." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "Enter the details for the new batch." +#: ../../content/applications/hr/payroll/payslips.rst:251 +msgid ":guilabel:`Check`: Select this when issuing a check directly to the employee." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:331 -msgid "Process a batch" +#: ../../content/applications/hr/payroll/payslips.rst:252 +msgid ":guilabel:`NACHA`: Select this if using the :abbr:`National Automated Clearing House Association (NACHA)` to transfer the payment to the employee, via direct deposit." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:333 -msgid "Click on an individual batch to view the details for that batch on a separate page. On this batch detail page, different options (buttons) appear at the top, depending on the status of the batch:" +#: ../../content/applications/hr/payroll/payslips.rst:255 +msgid ":guilabel:`Group Payments`: If the employee has multiple payslips for the same time period (for example, payroll, reimbursement, and commission checks), tick the checkbox to group all payments into one payment." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:336 -msgid ":guilabel:`New` status: batches without any payslips added to them have a status of :guilabel:`New`. The following button options appear for these batches:" +#: ../../content/applications/hr/payroll/payslips.rst:258 +msgid ":guilabel:`Payment Date`: Using the calendar selector, select the date the employee is to be paid." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:0 -msgid "A batch with a status of new, with the available buttons highlighted." +#: ../../content/applications/hr/payroll/payslips.rst:260 +msgid "Once the pop-up :guilabel:`Pay` form is complete, click the :guilabel:`Create Payments` button, and the payment is processed." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:343 -msgid ":guilabel:`Add Payslips`: click the :guilabel:`Add Payslips` button to add payslips to the batch, and an :guilabel:`Add Payslips` pop-up window appears. Only payslips that can be added to the batch (payslips not currently part of a batch) appear on the list." +#: ../../content/applications/hr/payroll/payslips.rst:263 +msgid "After the payment is processed, and there is confirmation that the checks have been issued, or the funds have been directly deposited to the employee's bank account, click the :guilabel:`Mark as paid` button to mark the payslip as paid." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:347 -msgid "Select the desired payslips by clicking the checkbox to the left of each payslip name, then click the :guilabel:`Select` button to add them to the batch. Once payslips are selected and added to the batch, the status changes to :guilabel:`Confirmed`." +#: ../../content/applications/hr/payroll/payslips.rst:-1 +msgid "Banking information can be entered in an employee's card." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:351 -msgid ":guilabel:`Generate Payslips`: after payslips have been added to the batch, click the :guilabel:`Generate Payslips` button to process the payslips and create individual payslips in the database." +#: ../../content/applications/hr/payroll/payslips.rst:271 +msgid "In order for a payslip to be paid, the employee **must** have a bank account entered in the :ref:`private information tab ` of their employee record, *and* the bank account must be marked as :guilabel:`Trusted`." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:355 -msgid "A :guilabel:`Generate Payslips` pop-up window appears. If only a specific :guilabel:`Salary Structure` and/or specific :guilabel:`Department` is desired to make payslips for, select them from the corresponding drop-down menus. If no selections are made, then all payslips listed in the pop-up window are processed as usual." +#: ../../content/applications/hr/payroll/payslips.rst:275 +msgid "If there is no bank information, or if the bank is not listed as :guilabel:`Trusted`, payslips cannot be paid, and an error appears when the :guilabel:`Pay` button is clicked. Edit the employee record, and add banking information, or trust the bank account, as needed." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:360 -msgid "Click the :guilabel:`Generate` button to create the payslips. The :guilabel:`Generate Payslips` button changes to a :guilabel:`Create Draft Entry` button, and the status changes to :guilabel:`Confirmed`." +#: ../../content/applications/hr/payroll/payslips.rst:280 +msgid "Refund a payslip" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:364 -msgid ":guilabel:`Confirmed` status: batches that have been created and have payslips in them, but the payslips have *not* been processed, have a status of :guilabel:`Confirmed`. The following two button options appear for these batches:" +#: ../../content/applications/hr/payroll/payslips.rst:282 +msgid "When refunding a payment, the refund is achieved by creating a payslip for a negative amount of the original payslip." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:0 -msgid "A batch with a status of confirmed, with the available buttons highlighted." +#: ../../content/applications/hr/payroll/payslips.rst:286 +msgid "An employee is paid $5,000.00 USD in a paycheck, in error. When refunding the payslip, a new payslip is created in the amount of $-5,000.00." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:372 -msgid ":guilabel:`Create Draft Entry`: click the :guilabel:`Create Draft Entry` button to confirm the individual payslips (and the batch), and create a draft of the payslips. The batch now has a status of :guilabel:`Done`." +#: ../../content/applications/hr/payroll/payslips.rst:289 +msgid "If a payment needs to be refunded, navigate to the individual payslip being refunded, and click the :guilabel:`Refund` button, located at the top-left of the screen. The :guilabel:`Refund Payslip` dashboard loads, with all refund payslips appearing in a list view." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:375 -#: ../../content/applications/hr/payroll/payslips.rst:397 -msgid ":guilabel:`Set to Draft`: if at any point the batch needs to be reverted back to a status of :guilabel:`New`, click the :guilabel:`Set to Draft` button. This action does **not** remove any payslips that have already been added to the batch." +#: ../../content/applications/hr/payroll/payslips.rst:294 +msgid "Since refunds are uncommon, typically only the one payslip being refunded appears in the list." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:379 -msgid ":guilabel:`Done` status: batches with confirmed payslips in them have a status of :guilabel:`Done`. The following button options appear for these batches:" +#: ../../content/applications/hr/payroll/payslips.rst:296 +msgid "By default, the refund payslip has a status of :guilabel:`Waiting`. This refund payslip is processed :ref:`in the same way a regular payslip is processed `." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:0 -msgid "A batch with a status of done, with the available buttons highlighted." +#: ../../content/applications/hr/payroll/payslips.rst:300 +msgid "Print a payslip" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:386 -msgid ":guilabel:`Create Payment Report`: click the :guilabel:`Create Payment Report` button, and a :guilabel:`Select a bank journal` pop-up window appears. Select the correct bank journal from the drop-down menu." +#: ../../content/applications/hr/payroll/payslips.rst:302 +msgid "To print a payslip, click the :guilabel:`Print` button in the upper-left corner of the individual payslip record. A PDF file is downloaded, and the payslip appears in the chatter, and the file is attached to the payslip record." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:390 -msgid "The batch name appears in the :guilabel:`File name` field, but this can be modified, if desired. Finally, click :guilabel:`Confirm` to process the payslips, and pay the employees." +#: ../../content/applications/hr/payroll/payslips.rst:-1 +msgid "The new payslip is emailed to the employee and the email appears in the chatter." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:392 -msgid ":guilabel:`Mark as paid`: after the payments have been created via the :guilabel:`Create Payment Report` button, the payslips need to be marked as paid in the database." +#: ../../content/applications/hr/payroll/payslips.rst:312 +msgid "View all payslips" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:395 -msgid "Click the :guilabel:`Mark as paid` button, and the status of the batch changes to :guilabel:`Paid`." +#: ../../content/applications/hr/payroll/payslips.rst:314 +msgid "To view all payslips, regardless of status, go to :menuselection:`Payroll app --> Payslips --> All Payslips`. The :guilabel:`Employee Payslips` page loads, displaying all payslips, organized by batch, in a default nested list view." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:401 -msgid ":guilabel:`Paid` status: batches that have been completed have a status of :guilabel:`Paid`. No other button options appear for this status." +#: ../../content/applications/hr/payroll/payslips.rst:318 +msgid "Click the :guilabel:`▶ (right arrow)` next to an individual batch name to expand the list, and view all the payslips in that particular batch, along with all the payslip details." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:0 -msgid "A batch with a status of paid, with the available buttons highlighted." +#: ../../content/applications/hr/payroll/payslips.rst:321 +msgid "The number of payslips in the batch is written in parenthesis after the batch name. The :guilabel:`Status` for each individual payslip appears on the far-right side, indicating one of the following status options:" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:408 -msgid "On the batch detail page, the individual payslips in the batch are accessible, via the :guilabel:`Payslips` smart button, located above the batch information, in the center. Click the :guilabel:`Payslips` smart button to view a list of all the individual payslips." +#: ../../content/applications/hr/payroll/payslips.rst:325 +msgid ":guilabel:`Draft`: the payslip is created, and there is still time to make edits, since the amounts are not calculated." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:412 -msgid "Use the breadcrumb menu to navigate back to the individual batch detail page, or back to the list of all batches." +#: ../../content/applications/hr/payroll/payslips.rst:327 +msgid ":guilabel:`Waiting`: the payslip has been calculated, and the salary details can be found in the *Salary Computation* tab." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:416 -msgid "Generate warrant payslips" +#: ../../content/applications/hr/payroll/payslips.rst:329 +msgid ":guilabel:`Done`: the payslip is calculated and ready to be paid." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:418 -msgid "Commissions are paid to employees in Odoo using *warrant payslips*." +#: ../../content/applications/hr/payroll/payslips.rst:330 +msgid ":guilabel:`Paid`: the employee has been paid." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:420 -msgid "Warrant payslips can be generated directly from the :guilabel:`Payslips Batches` page (:menuselection:`Payroll app --> Payslips --> Batches`)." +#: ../../content/applications/hr/payroll/payslips.rst:-1 +msgid "View all payslips organized by batches. Click on the arrow to expand each batch." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:423 -msgid "First, select the desired batches by clicking the box to the left of each batch for which commission payslips should be created. Next, click the :guilabel:`Generate Warrant Payslips` button at the top of the page." +#: ../../content/applications/hr/payroll/payslips.rst:335 +msgid "Click on an individual payslip to view the details for that payslip on a separate page. Using the breadcrumb menu, click :guilabel:`Employee Payslips` to go back to the list view of all payslips." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:427 -msgid "Doing so reveals a :guilabel:`Generate Warrant Payslips` pop-up window, in which the necessary information **must** be filled out." +#: ../../content/applications/hr/payroll/payslips.rst:338 +msgid "A new payslip can be created from the :guilabel:`Employee Payslips` page, by clicking the :guilabel:`New` button in the upper-left corner. Doing so reveals a separate blank payslip form page. On that blank payslip form page, enter all the necessary information, as described in the :ref:`Create a payslip ` section." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:-1 -msgid "Enter the commission details." +#: ../../content/applications/hr/payroll/payslips.rst:343 +msgid "Payslips can also be exported to an Excel spreadsheet. To export **all** payslips, click on the :icon:`fa-cog` :guilabel:`(gear)` icon at the end of the words :guilabel:`Employee Payslips` in the top-left corner. This reveals a drop-down menu. Click :icon:`fa-upload` :guilabel:`Export All` to export all payslips to a spreadsheet." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:434 -msgid "In this pop-up window, click on the drop-down menus, located beside the :guilabel:`Period` field, to reveal calendar pop-up windows. On these calendar pop-up windows, select the desired period for which the payslips are being generated. Using the :guilabel:`< (left)` and :guilabel:`> (right)` arrow icons, navigate to the correct month, and click on the date to select it." +#: ../../content/applications/hr/payroll/payslips.rst:348 +msgid "To export only select payslips, first select the payslips to be exported from the list. Then, click the checkbox to the left of each individual payslip to select it. As payslips are selected, a smart button appears in the top-center of the page, indicating the number of selected payslips. Then, click the :icon:`fa-cog` :guilabel:`Actions` icon in the top-center of the page, and click :icon:`fa-upload` :guilabel:`Export`." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:439 -msgid "In the :guilabel:`Department` field, select the desired department from the drop-down menu." +#: ../../content/applications/hr/payroll/payslips.rst:355 +msgid "Both *To Pay* and *All Payslips* display all the detailed information for each payslip." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:441 -msgid "When a department is selected, the employees listed for that department appear in the :guilabel:`Employee` section." +#: ../../content/applications/hr/payroll/payslips.rst:360 +msgid "View payslips to pay" msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:444 -msgid "Under the :guilabel:`Employee` section, enter the :guilabel:`Commission Amount` for each employee in the far-right column. To remove an employee, click the :guilabel:`🗑️ (trash)` icon to remove the line." +#: ../../content/applications/hr/payroll/payslips.rst:362 +msgid "To only view the payslips awaiting to be processed, navigate to :menuselection:`Payroll app --> Payslips --> To Pay`." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:448 -msgid "Add a new entry by clicking :guilabel:`Add a Line`, and entering the :guilabel:`Employee` and the appropriate :guilabel:`Commission Amount`." +#: ../../content/applications/hr/payroll/payslips.rst:-1 +msgid "View all payslips that need to be paid on the Payslips To Pay page." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:451 -msgid "Click the :guilabel:`Upload your file` button to add a file, if necessary. Any file type is accepted." +#: ../../content/applications/hr/payroll/payslips.rst:368 +msgid "Each payslip lists the :guilabel:`Reference` number for the individual payslip, the :guilabel:`Employee` name, the :guilabel:`Batch Name`, the :guilabel:`Company`, the :guilabel:`Basic Wage`, :guilabel:`Gross Wage`, :guilabel:`Net Wage`, and the :guilabel:`Status` of the payslip." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:454 -msgid "Once all the commissions are properly entered, click the :guilabel:`Generate Payslips` button to create the warrant payslips in a batch." +#: ../../content/applications/hr/payroll/payslips.rst:372 +msgid "Click on an individual payslip entry to view the details for that individual payslip." msgstr "" -#: ../../content/applications/hr/payroll/payslips.rst:457 -msgid ":ref:`Process the batch ` in the same way as a typical batch to complete the payment process." +#: ../../content/applications/hr/payroll/payslips.rst:374 +msgid "Process the payslips :ref:`in the same way a regular payslip is processed `, or in a batch." msgstr "" #: ../../content/applications/hr/payroll/reporting.rst:5 @@ -17770,84 +18839,16 @@ msgstr "" msgid "Finally, click :guilabel:`Save`, which saves the currently configured report. Then, it appears beneath the :guilabel:`Favorites` in the search bar drop-down mega menu of filter options." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachment.rst:3 -msgid "Salary attachment report" -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:5 -msgid "*Salary attachments* in Odoo refer to a portion of an employee's earnings that are designated for a specific purpose, both voluntary and involuntary. These can include contributions to a retirement plan, repayment of a loan, wage garnishments, or child support." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:9 -msgid "Voluntary salary attachments, such as repaying a loan, or contributing to a charity on a monthly basis, are considered *Assignments of Salary* in Odoo. Salary attachments that are required, such as a lawsuit settlement repayment, or repaying a tax lien, are considered *Attachments of Salary* in Odoo. Child support payments have their own category, and are simply referred to as *Child Support* in Odoo." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:15 -msgid "To view this report, navigate to :menuselection:`Payroll app --> Reporting --> Salary Attachment Report`. The :guilabel:`Salary Attachment Report` shows all deductions or allocations per employee, organized by payslip, in a default pivot table. The default filter is the end of the current year (:guilabel:`Payslip End Date: (year)`). The employees populate the rows, while the various deductions populate the columns, organized by type of deduction, and further grouped by individual payslip." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:22 -msgid "The default report contains **all** payslips for the current year, so the report typically contains a large number of columns. This could make it difficult to view all the data at once, as the report may be very wide and require scrolling to view all the data." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:26 -msgid "To view a condensed version of salary attachments, and have all the salary attachment columns visible on one page, click the :icon:`fa-minus-square-o` :guilabel:`Total` icon at the top of the report, above the various payslips." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:30 -msgid "This presents the salary attachments for the current year, and only displays three columns, :guilabel:`Attachment of Salary`, :guilabel:`Assignment of Salary`, and :guilabel:`Child Support.`" -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:33 -msgid "Each entry displays the total amount paid for each specific type of salary attachment, for each employee." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:-1 -msgid "The Attachment of Salary report that shows all salary garnishments in a condensed view." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:39 -msgid "The report can be downloaded as an XLSX file, or :doc:`inserted into a spreadsheet <../../productivity/spreadsheet/insert>` using the corresponding buttons at the top." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:42 -msgid "Click the :guilabel:`Measures` button to reveal the options of what data is displayed. :guilabel:`Assignment of salary`, :guilabel:`Attachment of salary`, and :guilabel:`Child support` are all selected and visible, by default, while the :guilabel:`Count` option is not." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:46 -msgid "Click an option to either show or hide that particular metric. A :icon:`fa-check` :guilabel:`(checkmark)` icon indicates the data is visible." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:50 -msgid "Compare to previous year" -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:52 -msgid "The :guilabel:`Salary Attachment Report` can be compared to the report for the previous time period or the previous year." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:55 -msgid "To view these comparisons, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon in the search bar, then click either :guilabel:`Payslip End Date: Previous Period` or :guilabel:`Payslip End Date: Previous Year`, beneath the :icon:`fa-adjust` :guilabel:`Comparison` column." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:59 -msgid "The report updates and displays the current time period values, and the previous time period values, as well as the :guilabel:`Variation` between the two, in a percentage." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachment.rst:-1 -msgid "The salary attachment report modified to compare to the previous year." -msgstr "" - #: ../../content/applications/hr/payroll/salary_attachments.rst:5 msgid "Salary attachments are portions of earnings taken directly out of a payslip for a specific purpose, whether voluntary or required." msgstr "" #: ../../content/applications/hr/payroll/salary_attachments.rst:8 -msgid "When the deduction is voluntary, they are typically considered *deductions*. When the deduction is court-ordered, or involuntary, it is sometimes referred to as a *wage garnishment*. In Odoo, these are all universally called, *salary attachments*." +msgid "When the deduction is voluntary, they are typically considered *deductions*. When the deduction is court-ordered, or involuntary, it is sometimes referred to as a *wage garnishment*. In Odoo, these are all universally called *salary attachments*." msgstr "" #: ../../content/applications/hr/payroll/salary_attachments.rst:12 -msgid "Note that salary attachments could also be used to give recurring amount of money to employees. Like bonus divided in multiple parts." +msgid "Note that salary attachments could also be used to give recurring amounts of money to employees, like a bonus divided in multiple payments." msgstr "" #: ../../content/applications/hr/payroll/salary_attachments.rst:18 @@ -17855,39 +18856,39 @@ msgid "Salary attachment types" msgstr "" #: ../../content/applications/hr/payroll/salary_attachments.rst:20 -msgid "To view the currently configured salary attachment types, navigate to :menuselection:`Payroll app --> Configuration --> Salary Attachment Types`. The default salary attachment types are: :guilabel:`Attachment of Salary`, :guilabel:`Assignment of Salary`, and :guilabel:`Child Support`." +msgid "To view the currently configured salary attachment types, navigate to :menuselection:`Payroll app --> Configuration --> Other Input Types`. This displays *all* other salary inputs, not just the various salary attachments." msgstr "" #: ../../content/applications/hr/payroll/salary_attachments.rst:24 -msgid "Each salary attachment type displays the :guilabel:`Name` of the attachment type, the :guilabel:`Code` used when calculating payslips, a checkbox to indicate if there is :guilabel:`No End Date`, and whether it is :guilabel:`Country` specific (or universal)." +msgid "The three default salary attachment types that appear in this list are: :guilabel:`Attachment of Salary`, :guilabel:`Assignment of Salary`, and :guilabel:`Child Support`." +msgstr "" + +#: ../../content/applications/hr/payroll/salary_attachments.rst:27 +msgid "Each salary attachment type displays the :guilabel:`Name` of the attachment type, and the :guilabel:`Code` used when calculating payslips." msgstr "" #: ../../content/applications/hr/payroll/salary_attachments.rst:-1 msgid "The default salary attachment types." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:32 +#: ../../content/applications/hr/payroll/salary_attachments.rst:34 msgid "Create new salary attachment types" msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:35 -msgid "Upon installation of the **Payroll** application, the pre-configured default salary attachment types are linked to a variety of rules that are linked to various salary structures, as well as the installed :ref:`localization package `." +#: ../../content/applications/hr/payroll/salary_attachments.rst:37 +msgid "Upon installation of the **Payroll** application, the preconfigured default salary attachment types are linked to a variety of rules that are linked to various salary structures, as well as the installed :ref:`localization package `." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:39 +#: ../../content/applications/hr/payroll/salary_attachments.rst:41 msgid "It is **not** recommended to alter or modify **any** of the preconfigured salary attachment types, especially if they have been previously used on payslips in the database. Doing so may affect various salary rules, and can prevent the creation of payslips." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:43 +#: ../../content/applications/hr/payroll/salary_attachments.rst:45 msgid "A new salary attachment type *can* be created, but this should only be done when absolutely necessary. A salary attachment type needs to be linked to a salary rule in order to be considered in the salary computation." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:47 -msgid "To make a new type of salary attachment, click the :guilabel:`New` button, and a blank :guilabel:`Salary Attachment Types` form loads. Enter the :guilabel:`Name` for the new salary attachment type in the corresponding field. Next, enter the :guilabel:`Code` used in the salary rules to compute payslips. Last, tick the :guilabel:`No End Date` checkbox if this salary attachment never expires." -msgstr "" - -#: ../../content/applications/hr/payroll/salary_attachments.rst:53 -msgid "If in a multi-company database, with locations in multiple countries, a :guilabel:`Country` field also appears on the :guilabel:`Salary Attachment Types` form. Select the country the attachment applies to, or leave blank if it is universal." +#: ../../content/applications/hr/payroll/salary_attachments.rst:49 +msgid "To make a new type of salary attachment, click the :guilabel:`New` button, and a blank :guilabel:`Other Input Types` form loads. Enter the :guilabel:`Description` for the new salary attachment type in the corresponding field. Next, tick the :guilabel:`Available in attachments` checkbox, indicating it is available to use as a salary attachment. Enter the :guilabel:`Code` used in the salary rules to compute payslips. Lastly, if the salary attachment type should **only** be used in a specific payroll structure, use the drop-down menu in the :guilabel:`Available in Structure` field, and select the specific structure." msgstr "" #: ../../content/applications/hr/payroll/salary_attachments.rst:60 @@ -17899,491 +18900,467 @@ msgid "All salary attachments must be configured separately for each employee, f msgstr "" #: ../../content/applications/hr/payroll/salary_attachments.rst:66 -msgid "All salary attachments appear in a default list view, and displays the name of the :guilabel:`Employees`, :guilabel:`Description`, the salary attachment :guilabel:`Type`, the :guilabel:`Monthly Amount`, :guilabel:`Start Date`, and current :guilabel:`Status`." +msgid "All salary attachments appear in a default list view, and displays the name of the :guilabel:`Employees`, :guilabel:`Description`, the salary attachment :guilabel:`Type`, the :guilabel:`payslips Amount`, :guilabel:`Start Date`, and current :guilabel:`Status`." msgstr "" #: ../../content/applications/hr/payroll/salary_attachments.rst:70 -msgid "To create a new salary attachment, click the :guilabel:`New` button in the top-left corner, and a blank :guilabel:`Salary Attachment` form loads. Enter the following information on the form:" +msgid "At the end of each line is a :guilabel:`Related Payslips` button. Click this to view all payslips containing the corresponding salary attachment." msgstr "" #: ../../content/applications/hr/payroll/salary_attachments.rst:73 +msgid "To create a new salary attachment, click the :guilabel:`New` button in the top-left corner, and a blank :guilabel:`Salary Attachment` form loads. Enter the following information on the form:" +msgstr "" + +#: ../../content/applications/hr/payroll/salary_attachments.rst:76 msgid ":guilabel:`Employees`: Using the drop-down menu, select the desired employees. Multiple employees can be listed in this field." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:75 +#: ../../content/applications/hr/payroll/salary_attachments.rst:78 msgid ":guilabel:`Description`: Enter a short description of the salary attachment." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:76 +#: ../../content/applications/hr/payroll/salary_attachments.rst:79 msgid ":guilabel:`Type`: Using the drop-down menu, select the specific :ref:`salary attachment type `." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:78 +#: ../../content/applications/hr/payroll/salary_attachments.rst:81 msgid ":guilabel:`Start Date`: Using the calendar selector, select the date the salary attachment goes into effect." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:80 -msgid ":guilabel:`Estimated End Date`: This field is **not** modifiable, and **only** appears after the :guilabel:`Monthly Amount` field is populated. This field is the estimated date when the salary attachment will be completed. Today's date populates the field by default. Then, when the :guilabel:`Total Amount` field is populated, this date is updated." +#: ../../content/applications/hr/payroll/salary_attachments.rst:83 +msgid ":guilabel:`Estimated End Date`: This field is **not** modifiable, and **only** appears after the :guilabel:`Payslip Amount` field is populated. This field is the estimated date when the salary attachment is completed. Today's date populates the field by default. Then, when the :guilabel:`Total Amount` field is populated, this date is updated." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:84 +#: ../../content/applications/hr/payroll/salary_attachments.rst:87 msgid ":guilabel:`Document`: If any documentation is needed, such as a court order, click the :guilabel:`Upload your file` button, and a file explorer window loads. Select the desired document to attach it to the record. Only **one** document can be attached to a salary attachment." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:87 -msgid ":guilabel:`Monthly Amount`: Enter the amount taken out of each paycheck every month in this field." +#: ../../content/applications/hr/payroll/salary_attachments.rst:90 +msgid ":guilabel:`No End Date`: Tick this checkbox if the salary attachment runs indefinitely. If ticked, the :guilabel:`Total Amount` field is hidden from view." +msgstr "" + +#: ../../content/applications/hr/payroll/salary_attachments.rst:92 +msgid ":guilabel:`Payslip Amount`: Enter the amount taken out of each paycheck in this field." +msgstr "" + +#: ../../content/applications/hr/payroll/salary_attachments.rst:93 +msgid ":guilabel:`Total Amount`: Enter the total amount to be paid for the salary attachment. Note that this field **only** appears if the :guilabel:`No End Date` option is **not** ticked." +msgstr "" + +#: ../../content/applications/hr/payroll/salary_attachments.rst:95 +msgid ":guilabel:`Negative Amount`: Tick this checkbox if the salary attachment" msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:88 -msgid ":guilabel:`Total Amount`: This field **only** appears if the :ref:`salary attachment type ` has no end date (the :guilabel:`No End Date` option is **not** ticked.)" +#: ../../content/applications/hr/payroll/salary_attachments.rst:96 +msgid ":guilabel:`Occurrences`: This field is **not** editable, and only appears once both the :guilabel:`Payslip Amount` and :guilabel:`Total Amount` fields are populated. The number indicates the amount of payslips needed to complete the salary attachment." msgstr "" #: ../../content/applications/hr/payroll/salary_attachments.rst:-1 msgid "The salary attachment form with all fields filled out." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:95 +#: ../../content/applications/hr/payroll/salary_attachments.rst:103 msgid "Since the salary attachment form auto saves as the fields are populated, after making a salary attachment for an individual employee, there is no further action required." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:98 +#: ../../content/applications/hr/payroll/salary_attachments.rst:106 msgid "If creating salary attachments for multiple employees on a single salary attachment form, after the form is filled out, click the :guilabel:`Create Individual Attachments` button. This creates separate salary attachments for each of the employees listed in the :guilabel:`Employees` field." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:102 +#: ../../content/applications/hr/payroll/salary_attachments.rst:110 msgid "After the separate salary attachments have been created, the screen returns to the :guilabel:`Salary Attachment` dashboard, but with a :guilabel:`Description` filter, populated with the description filled in on the salary attachment form. All the salary attachments have a status of :guilabel:`Running`, since they are currently active. Clear the filter in the search box to view the default :guilabel:`Salary Attachment` dashboard in its entirety." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:109 +#: ../../content/applications/hr/payroll/salary_attachments.rst:117 msgid "Manage salary attachments" msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:111 +#: ../../content/applications/hr/payroll/salary_attachments.rst:119 msgid "Salary attachments can have one of three statuses: *Running*, *Completed*, or *Cancelled*. To view the current status of all salary attachments, navigate to :menuselection:`Payroll app --> Contracts --> Salary Attachments`." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:115 -msgid "All salary attachments appear in the order they were configured. To view the salary attachments by a particular metric, such as the :guilabel:`Status`, or :guilabel:`Type`, click on the column title to sort by that specific column." +#: ../../content/applications/hr/payroll/salary_attachments.rst:123 +msgid "All salary attachments appear in chronological order, by :guilabel:`Start Date`, with the most recent appearing at the top. To view the salary attachments by a particular metric, such as the :guilabel:`Status`, or :guilabel:`Type`, click on the column title to sort by that specific column." +msgstr "" + +#: ../../content/applications/hr/payroll/salary_attachments.rst:-1 +msgid "All salary attachments, organized by start date." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:120 +#: ../../content/applications/hr/payroll/salary_attachments.rst:131 msgid "Completed salary attachments" msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:122 +#: ../../content/applications/hr/payroll/salary_attachments.rst:133 msgid "When a salary attachment is created, it has a status of :guilabel:`Running`. Once the salary attachment is finished (the *Total Amount* entered on the :ref:`salary attachment form ` has been paid in full), the status automatically changes to *Completed*, and the employee no longer has the money taken out of future paychecks." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:127 +#: ../../content/applications/hr/payroll/salary_attachments.rst:138 msgid "If a salary attachment has been fulfilled, but has not automatically changed to *Completed*, the record can be manually updated. To change the status, open the *Salary Attachment* dashboard by navigating to :menuselection:`Payroll app --> Contracts --> Salary Attachments`." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:131 +#: ../../content/applications/hr/payroll/salary_attachments.rst:142 msgid "Click on the record to update, and the detailed :guilabel:`Salary Attachment` form loads. On the individual :guilabel:`Salary Attachment` record, click the :guilabel:`Mark as Completed` button in the upper-left corner, and the status changes to :guilabel:`Completed`." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:136 +#: ../../content/applications/hr/payroll/salary_attachments.rst:147 msgid "The following is an example of when a payroll manager may need to manually change a salary attachment from :guilabel:`Active` to :guilabel:`Completed`." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:139 +#: ../../content/applications/hr/payroll/salary_attachments.rst:150 msgid "Rose Smith has a salary attachment for a lawsuit settlement, where she is required to pay $3,000.00. A salary attachment is created that takes $250.00 a month out of Rose's paycheck, to go towards this settlement payment." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:143 +#: ../../content/applications/hr/payroll/salary_attachments.rst:154 msgid "After six months, Rose has paid $1,500.00 from her salary. She received a tax refund, and uses the money to pay off the remainder of the lawsuit settlement. After sending the relevant documentation to the payroll manager, showing the settlement has been paid in full, the payroll manager manually changes the status of her salary attachment to :guilabel:`Completed`." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:149 +#: ../../content/applications/hr/payroll/salary_attachments.rst:160 msgid "Cancel salary attachments" msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:151 +#: ../../content/applications/hr/payroll/salary_attachments.rst:162 msgid "Any salary attachment can be cancelled at any time. To cancel a salary attachment, click on the individual attachment record from the main :guilabel:`Salary Attachment` dashboard to open the record. From the :guilabel:`Salary Attachment` record, click the :guilabel:`Cancel` button to cancel the salary attachment, and stop having the designated money taken out of future paychecks." msgstr "" -#: ../../content/applications/hr/payroll/salary_attachments.rst:157 -msgid ":doc:`salary_attachment`" -msgstr "" - -#: ../../content/applications/hr/payroll/work_entries.rst:5 -msgid "Work entries are created automatically in the *Payroll* app, based on the employee's :ref:`salary structure type `, and from the *Planning*, *Attendances*, and *Time Off* applications." -msgstr "" - -#: ../../content/applications/hr/payroll/work_entries.rst:9 -msgid "The *Work Entries* dashboard of the *Payroll* application provides a visual overview of the individual work entries for every employee." -msgstr "" - -#: ../../content/applications/hr/payroll/work_entries.rst:12 -msgid "To open the dashboard, navigate to :menuselection:`Payroll app --> Work Entries --> Work Entries`." -msgstr "" - -#: ../../content/applications/hr/payroll/work_entries.rst:14 -msgid "On the :guilabel:`Work Entry` dashboard, work entries appear in alphabetical order, based on the first name of the employees. The entire month is displayed, with the current day highlighted in pale yellow." -msgstr "" - -#: ../../content/applications/hr/payroll/work_entries.rst:18 -msgid "If any entries have :ref:`conflicts ` that need to be resolved, the dashboard defaults to filter only the :guilabel:`Conflicting` entries." -msgstr "" - -#: ../../content/applications/hr/payroll/work_entries.rst:21 -msgid "To remove the filter from the :guilabel:`Search...` bar to view all work entries, click the :guilabel:`✖️ (remove)` icon on the :guilabel:`Conflicting` filter in the :guilabel:`Search...` bar, and all work entries appear in the list." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:3 +msgid "Time off to report" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:-1 -msgid "Conflicts dashboard view showing all employee's conflicts in work entries." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:5 +msgid "Payroll is often processed a few days before the end of a pay period, so that employees can be paid in a timely manner. When work schedules are predictable, this method often works. However, sometimes employees take time off unexpectedly, especially sick time. When this occurs, there can be discrepancies in payroll that must be addressed." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:31 -msgid "To change the view, so only the entries for a single day, week, or month are shown, click on :guilabel:`Month`. A drop-down menu appears with the options of :guilabel:`Day`, :guilabel:`Week`, or :guilabel:`Month`. Click on one of the options to only display data for that specific selection." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:11 +msgid "The payroll department for a medium-sized company processes paychecks every two weeks, on Wednesdays. Each employee is paid on the Friday after." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:35 -msgid "Use the :guilabel:`⬅️ (left arrow)` and :guilabel:`➡️ (right arrow)` icons on the left and right side of the :guilabel:`Month` button to adjust the displayed dates. The arrows adjust the date based on the type of time selected." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:14 +msgid "One employee is sick on the last Thursday and Friday of the two-week pay period. Since they have automatically generated work entries based on their working schedule, and payroll is processed on Wednesdays, the paycheck they receive incorrectly states that they were paid for a regular work day for all ten days of the two-week pay period." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:39 -msgid "For example, if :guilabel:`Month` is selected, the arrows move one month with each click of the arrow. If :guilabel:`Week` or :guilabel:`Day` is selected, the time moves by either a week or a day for each click of the arrow, respectively." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:19 +msgid "Instead of cancelling the paycheck and reissuing it, causing delays for the employee and more work for the payroll department, Odoo allows for the deferral of the time off taken, to the following pay period." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:43 -msgid "At any point, to return to a view containing the current day, click the :guilabel:`Today` button." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:23 +msgid "This ensures all time off balances are correct, and the employee is properly compensated for their time." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:48 -msgid "Add a new work entry" +#: ../../content/applications/hr/payroll/time_off_to_report.rst:29 +msgid "Time off dashboard" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:50 -msgid "If a work entry is missing and needs to be added, such as sick time, or if an employee forgot to clock in and out for a shift, click :guilabel:`New` on the :guilabel:`Work Entry` dashboard, to create a new work entry." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:31 +msgid "When time off requests are submitted for a time period that was already processed on a payslip, the time off requests appear in the *Time Off* page of the **Payroll** app. To access this, navigate to :menuselection:`Payroll app --> Work Entries --> Time Off to Report`." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:54 -msgid "A :guilabel:`Create` work entry pop-up form appears." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:35 +msgid "The :guilabel:`Time Off` page default filter is :guilabel:`To Defer`, and displays all requests with a :guilabel:`Payslip State` of :guilabel:`To defer to next payslip`. This is because the employee was *already paid* for that time as worked time, and it was logged as regular time spent at work." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:58 -msgid ":guilabel:`Description`: enter a short description for the work entry, such as `Sick Time`. If this field is left blank, it automatically populates once an employee is selected. The default entry is `Attendance: (Employee)`." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:-1 +msgid "A list of all time off requests that were not approved before payslips were generated." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:61 -msgid ":guilabel:`Employee`: select the employee the work entry is for, using the drop-down menu." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:43 +msgid "Defer multiple time off entries" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:62 -msgid ":guilabel:`Work Entry Type`: select the :ref:`work entry type ` using the drop-down menu." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:45 +msgid "In order to keep the employee's time off balances correct, the time off request **must** be applied to the following pay period. This not only ensures time off request balances are current, it also eliminates the need to redo work entries, cancel paychecks, and reissue paychecks." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:64 -msgid ":guilabel:`From` and :guilabel:`To`: enter the start (:guilabel:`From`) and end (:guilabel:`To`) dates and times for the work entry." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:49 +msgid "To select the work entries to defer, tick the box to the left of the work entry line on the :ref:`Time Off page `. To select all work entries in the list, tick the box to the left of the :guilabel:`Employee` column title, at the top of the list." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:67 -msgid "First, click on either the :guilabel:`From` or :guilabel:`To` line to reveal a calendar pop-up window. Select the date by navigating to the correct month and year, using the :guilabel:`< (left arrow)` and :guilabel:`> (right arrow)` icons, then click on the specific day." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:53 +msgid "Once any work entry is selected, two buttons appear at the top of the report: a :guilabel:`(#) selected` button, and an :icon:`fa-gear` :guilabel:`Actions` button. The :guilabel:`(#) selected` button indicates how many entries are currently selected." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:71 -msgid "Next, select the time, by clicking on either the hour or minute fields at the bottom of the calendar, and select the desired time for both the hour and minutes." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:57 +msgid "When all the desired work entries are selected, click the :icon:`fa-gear` :guilabel:`Actions` button, and a menu appears with several choices. Click :guilabel:`Defer to Next Month` in the list, and all selected entries are deferred to the following month." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:74 -msgid "When the date and time are correct for the entry, click the :guilabel:`Apply` button." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:62 +msgid "Defer individual time off entries" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:75 -msgid ":guilabel:`Duration`: displays the hours based on the :guilabel:`To` and :guilabel:`From` entries. Modifying this field modifies the :guilabel:`To` field (the :guilabel:`From` field does not change)." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:64 +msgid "Time off requests appearing on the :ref:`Time Off page ` can be deferred individually. Click on an individual time off request, and the details for that request load." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:79 -msgid "Once the desired information is entered, click :guilabel:`Save & Close` to save the entry, and close the pop-up form." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:67 +msgid "The specific details for the time off request appear on the left-hand side, and all of the employee's submitted time off requests appear on the right-hand side (including the request in the details on the left-hand side)." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:-1 -msgid "Filling in the work entry Create form in Odoo." +#: ../../content/applications/hr/payroll/time_off_to_report.rst:71 +msgid "To defer the time off request to the next payslip, click the :guilabel:`Report to Next Month` button in the upper-left corner. Once processed, the :guilabel:`Report to Next Month` button disappears, and the :guilabel:`Payslip State` changes from :guilabel:`To defer to next payslip` to :guilabel:`Computed in Current Payslip`." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:89 -msgid "Conflicts" +#: ../../content/applications/hr/payroll/time_off_to_report.rst:-1 +msgid "The time off details for an individual request that needs to be deferred." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:91 -msgid "A conflict appears for any request that has not been approved, such as sick time or vacation, or if there are any errors on the work entry, such as required fields being left blank. Conflicts are required to be resolved before payslips can be generated." +#: ../../content/applications/hr/payroll/work_entries.rst:5 +msgid "The **Payroll** app automatically creates work entries based on the employee's :ref:`salary structure type `, and from the **Planning**, **Attendances**, and **Time Off** applications." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:95 -msgid "Any work entry that has a conflict to be resolved is indicated on the main :guilabel:`Work Entry` dashboard, which can be accessed by navigating to :menuselection:`Payroll app --> Work Entries --> Work Entries`. Only conflicts needing resolution are shown by default." +#: ../../content/applications/hr/payroll/work_entries.rst:9 +msgid "Work entries provide the **Payroll** app with the worked hours used to compute employee paychecks, if the employee's salary is based on work entries, as opposed to a salaried position." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:99 -msgid "Conflicts are indicated with an orange triangle in the top-left corner of each individual work entry. Click on an individual work entry to see the date and time for the specific work entry, then click :guilabel:`Edit` to view the conflict details in a pop-up window." +#: ../../content/applications/hr/payroll/work_entries.rst:15 +msgid "Work entry dashboard" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:-1 -msgid "A row of conflicts, with one entry showing details for the conflict." +#: ../../content/applications/hr/payroll/work_entries.rst:17 +msgid "The *Work Entries* dashboard of the **Payroll** app provides a visual overview of the individual work entries for every employee." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:107 -msgid "The conflict is briefly explained in an orange text box in the :guilabel:`Open` pop-up window that appears." +#: ../../content/applications/hr/payroll/work_entries.rst:20 +msgid "To open the dashboard, navigate to :menuselection:`Payroll app --> Work Entries --> Work Entries`." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:110 -msgid "The :guilabel:`Description`, :guilabel:`Employee`, and :guilabel:`Work Entry Type` are listed on the left side of the pop-up window. The :guilabel:`From` and :guilabel:`To` date and time range, as well as the total time (in hours) in the :guilabel:`Duration` field, appears on the right side." +#: ../../content/applications/hr/payroll/work_entries.rst:22 +msgid "On the :guilabel:`Work Entry` dashboard, work entries appear in alphabetical order, based on the first name of the employees. The entire month is displayed, with the current day highlighted in pale yellow." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:114 -msgid "If the conflict is due to a time off request that has not been approved yet, a :guilabel:`Time Off` field appears on the left side, with the type of time off requested in the description." +#: ../../content/applications/hr/payroll/work_entries.rst:26 +msgid "The :guilabel:`Work Entry` dashboard has a default :guilabel:`Conflicting` filter, which displays only work entries with :ref:`conflicts ` to be resolved." msgstr "" #: ../../content/applications/hr/payroll/work_entries.rst:-1 -msgid "The detailed conflict pop-up window that appears when Edit is clicked." -msgstr "" - -#: ../../content/applications/hr/payroll/work_entries.rst:122 -msgid "Time off conflicts" -msgstr "" - -#: ../../content/applications/hr/payroll/work_entries.rst:124 -msgid "The most common work entry conflicts are for time off requests that have been submitted, but not yet approved, which results in duplicate work entries for that employee (one for time off and another for regular work)." -msgstr "" - -#: ../../content/applications/hr/payroll/work_entries.rst:128 -msgid "If there is a conflict because a time off request is in the system for the same time that a regular work entry already exists, the time off request is entered in the :guilabel:`Time Off` field." -msgstr "" - -#: ../../content/applications/hr/payroll/work_entries.rst:131 -msgid "The time off conflict can be resolved either on the work entry pop-up window, or on a detailed time off request pop-up window." +msgid "Conflicts dashboard view showing all employee's conflicts in work entries." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:135 -msgid "Resolve on work entry" +#: ../../content/applications/hr/payroll/work_entries.rst:33 +msgid "Remove the default :guilabel:`Conflicting` filter from the search bar to view *all* work entries." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:137 -msgid "To resolve the time off conflict on this work entry pop-up window, click the :guilabel:`Approve Time Off` button to approve the time off request, and resolve the work entry conflict." +#: ../../content/applications/hr/payroll/work_entries.rst:38 +msgid "Adjust view" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:140 -msgid "The :guilabel:`Approve Time Off` and :guilabel:`Refuse Time Off` buttons disappear. Click the :guilabel:`Save & Close` button to close the pop-up window. The conflict disappears from the :guilabel:`Work Entry` dashboard, since the conflict is resolved." +#: ../../content/applications/hr/payroll/work_entries.rst:40 +msgid "To change the view so that only the entries for a single day, week, month, quarter, or year are shown, click the :icon:`fa-calendar` :guilabel:`(Month)(Year)` button. A drop-down menu appears with the options of :guilabel:`Today`, :guilabel:`This week`, :guilabel:`This month`, :guilabel:`This quarter`, or :guilabel:`This year`. Click on one of the options to only display data for that specific selection." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:145 -msgid "Resolve on time off request" +#: ../../content/applications/hr/payroll/work_entries.rst:46 +msgid "Use the :icon:`oi-arrow-left` :guilabel:`(left arrow)` and :icon:`oi-arrow-right` :guilabel:`(right arrow)` buttons to adjust the displayed dates. The arrows adjust the date based on the type of time selected." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:147 -msgid "To resolve the time off conflict on the detailed time off request pop-up window, click the :guilabel:`Internal Link` button at the end of the :guilabel:`Time Off` entry line, and the time off request details appear in a new pop-up window. The request can be modified, if needed." +#: ../../content/applications/hr/payroll/work_entries.rst:50 +msgid "For example, if :guilabel:`Month` is selected, the arrows move one month with each click of the arrow. If :guilabel:`Week` or :guilabel:`Day` is selected, the time moves by either a week or a day for each click of the arrow, respectively." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:151 -msgid "Click the :guilabel:`Approve` button to approve the request, then click the :guilabel:`Save & Close` button to save the changes, and go back to the work entry conflict pop-up window." +#: ../../content/applications/hr/payroll/work_entries.rst:54 +msgid "At any point, to return to a view containing the current day, click the :icon:`fa-crosshairs` :guilabel:`(Focus Today)` button." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:-1 -msgid "The detailed time off request form." +#: ../../content/applications/hr/payroll/work_entries.rst:60 +msgid "Add a new work entry" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:158 -msgid "Now, the :guilabel:`Approve Time Off` button is hidden, only the :guilabel:`Refuse Time Off` button is visible." +#: ../../content/applications/hr/payroll/work_entries.rst:62 +msgid "If a work entry is missing, such as sick time, or if an employee forgot to clock in and out for a shift, a new work entry must be created for the missing shift." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:161 -msgid "If the approval was a mistake, the request can be refused here, by clicking the :guilabel:`Refuse Time Off` button." +#: ../../content/applications/hr/payroll/work_entries.rst:65 +msgid "Click :guilabel:`New` on the :ref:`work entry dashboard `, and a blank :guilabel:`Create` work entry pop-up form appears. Enter the following information on the form:" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:164 -msgid "Since the time off was approved in the time off window, click the :guilabel:`X` in the top-right corner to close the window. The conflict disappears from the :guilabel:`Work Entry` dashboard, since it has been resolved." +#: ../../content/applications/hr/payroll/work_entries.rst:68 +msgid ":guilabel:`Description`: Enter a short description for the work entry, such as `Sick Time`. The default entry is `Attendance: (Employee)`." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:171 -msgid "Regenerate work entries" +#: ../../content/applications/hr/payroll/work_entries.rst:70 +msgid ":guilabel:`Employee`: Select the employee the work entry is for, using the drop-down menu." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:173 -msgid "When regenerating work entries, any manual changes, such as resolved conflicts, are overwritten, and work entries are regenerated (or recreated) from the applications that created them." +#: ../../content/applications/hr/payroll/work_entries.rst:71 +msgid ":guilabel:`Work Entry Type`: Select the :ref:`work entry type ` using the drop-down menu." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:176 -msgid "This method for correcting a large amount of conflicts is recommended to keep all records correct. While :ref:`conflicts ` *can* be resolved individually, if the conflicts are caused from another application, it is best practice to ensure the records in the other applications are also correct. That is why it is recommended to resolve these conflicts in the applications that created the conflict." +#: ../../content/applications/hr/payroll/work_entries.rst:73 +msgid ":guilabel:`From` and :guilabel:`To`: Enter the start (:guilabel:`From`) and end (:guilabel:`To`) dates and times for the work entry." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:182 -msgid "Another reason this method is recommended is because, when work entries are regenerated, the conflicts reappear, if the issue in the related application is **not** resolved." +#: ../../content/applications/hr/payroll/work_entries.rst:76 +msgid "First, click on either the :guilabel:`From` or :guilabel:`To` line to reveal a calendar pop-up window. Select the date by navigating to the correct month, then click on the specific day to select it." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:185 -msgid "First, ensure the issues are resolved in the specific applications that caused the work entry conflicts." +#: ../../content/applications/hr/payroll/work_entries.rst:80 +msgid "Next, select the time, by clicking on either the hour or minute fields at the bottom of the calendar, and set the desired time." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:188 -msgid "Next, click the :guilabel:`Regenerate Work Entries` button at the top of the :guilabel:`Work Entries` dashboard, and a :guilabel:`Work Entry Regeneration` pop-up window appears." +#: ../../content/applications/hr/payroll/work_entries.rst:83 +msgid "When the date and time for the entry are correct, click the :guilabel:`Apply` button." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:191 -msgid "Select the :guilabel:`Employees` to regenerate work entries for from the drop-down menu, and adjust the :guilabel:`From` and :guilabel:`To` fields, so the correct date range is displayed." +#: ../../content/applications/hr/payroll/work_entries.rst:84 +msgid ":guilabel:`Duration`: This field displays the hours based on the :guilabel:`To` and :guilabel:`From` entries. Modifying this field modifies the :guilabel:`To` field (the :guilabel:`From` field does not change)." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:194 -msgid "Click the :guilabel:`Regenerate Work Entries` button, and the work entries are recreated. Once finished, the pop-up window closes." +#: ../../content/applications/hr/payroll/work_entries.rst:88 +msgid "Once the desired information is entered, click :guilabel:`Save & Close` to save the entry, and close the pop-up form." msgstr "" #: ../../content/applications/hr/payroll/work_entries.rst:-1 -msgid "Regenerate a work entry for a particular employee." -msgstr "" - -#: ../../content/applications/hr/payroll/work_entries.rst:202 -msgid "An employee has incorrect work entries generated from the *Planning* app because they were incorrectly assigned to two work stations simultaneously. This should be fixed in the *Planning* app, instead of the *Payroll* app." +msgid "Filling in the work entry Create form in Odoo." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:206 -msgid "To correct this issue, modify the employee's schedule in the *Planning* app, so they are correctly assigned to only one work station. Then, in the *Payroll* app, regenerate work entries for that employee, for that specific time period." +#: ../../content/applications/hr/payroll/work_entries.rst:97 +msgid "Conflicts" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:210 -msgid "The *Payroll* app then pulls the new, corrected data form the *Planning* app, and recreates the correct work entries for that employee. All conflicts for that employee are now resolved." +#: ../../content/applications/hr/payroll/work_entries.rst:99 +msgid "A conflict occurs when a request has not been approved, such as sick time or vacation, or if there are any errors on the work entry. Conflicts that span the current pay period being processed **must** be resolved before payslips can be generated." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:214 -msgid "Generating payslips" +#: ../../content/applications/hr/payroll/work_entries.rst:103 +msgid "Any work entry that has a conflict to be resolved is indicated on the main :guilabel:`Work Entry` dashboard, which can be accessed by navigating to :menuselection:`Payroll app --> Work Entries --> Work Entries`. Only conflicts needing resolution are shown by default." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:216 -msgid "To generate payslips, :ref:`navigate to the time period ` the payslips should be generated for. Ensure the :guilabel:`Conflicting` filter is removed. When the desired pay period is displayed, click the :guilabel:`Generate Payslips` button." +#: ../../content/applications/hr/payroll/work_entries.rst:107 +msgid "Conflicts are indicated with an orange triangle in the top-left corner of each individual work entry. Click on an individual work entry to see the date and time for the specific work entry, then click :guilabel:`Edit` to view the conflict details in a pop-up window." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:221 -msgid "If the :guilabel:`Generate Payslips` button is not active (appears pale purple, instead of dark purple), that indicates there are conflicts, or the date selected includes dates in the future. Resolve all conflicts before generating payslips." +#: ../../content/applications/hr/payroll/work_entries.rst:-1 +msgid "A row of conflicts, with one entry showing details for the conflict." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:225 -msgid "When the :guilabel:`Generate Payslips` button is clicked, a batch entry appears on a separate page for the time period selected." +#: ../../content/applications/hr/payroll/work_entries.rst:114 +msgid "The conflict is briefly explained in an orange text box in the :guilabel:`Open` pop-up window that appears." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:228 -msgid "The batch name populates the :guilabel:`Batch Name` field in a default `From (date) to (date)` format." +#: ../../content/applications/hr/payroll/work_entries.rst:117 +msgid "The :guilabel:`Description`, :guilabel:`Employee`, and :guilabel:`Work Entry Type` are listed on the left side of the pop-up window. The :guilabel:`From` and :guilabel:`To` date and time range, as well as the total time (in hours) in the :guilabel:`Duration` field, appears on the right side." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:231 -msgid "The date range to which the payslips apply appears in the :guilabel:`Period` field, and the company appears in the :guilabel:`Company` field. It is **not** possible to make changes to this form." +#: ../../content/applications/hr/payroll/work_entries.rst:122 +msgid "Time off conflicts" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:234 -msgid "Click the :guilabel:`Create Draft Entry` button to create the payslips for the batch." +#: ../../content/applications/hr/payroll/work_entries.rst:124 +msgid "The most common work entry conflicts are for time off requests. Odoo automatically generates work entries for specific time periods. When time off is requested after these work entries are generated, it results in duplicate work entries for that employee (one for time off and another for regular work)." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:236 -msgid "Click the :guilabel:`Payslips` smart button at the top of the page to view all the payslips for the batch." +#: ../../content/applications/hr/payroll/work_entries.rst:129 +msgid "If there is a conflict because a time off request is in the system for the same time that a regular work entry already exists, the time off request is entered in a :guilabel:`Time Off` field." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:-1 -msgid "Information that appears when generating payslips." +#: ../../content/applications/hr/payroll/work_entries.rst:132 +msgid "Conflicts can be resolved either directly on the work entry or in the detailed time off request form." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:244 -msgid "Printing payslips" +#: ../../content/applications/hr/payroll/work_entries.rst:138 +msgid "Resolve on work entry" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:246 -msgid "To print payslips, first view the individual payslips by clicking the :guilabel:`Payslips` smart button on the batch form." +#: ../../content/applications/hr/payroll/work_entries.rst:140 +msgid "If no additional details are needed to determine if a time off request should be approved or refused, the time off conflict can be resolved directly from the work entry pop-up window." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:249 -msgid "Next, select the payslips to print from the :guilabel:`Payslips` list. Click the box next to each payslip to print, or click the box to the left of the :guilabel:`Reference` column title, to select all the payslips in the list at once." +#: ../../content/applications/hr/payroll/work_entries.rst:143 +msgid "Click either the :guilabel:`Refuse Time Off` or :guilabel:`Approve Time Off` buttons to refuse or approve the time off request, then the two buttons disappear. Click the :guilabel:`Save & Close` button to close the pop-up window." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:253 -msgid "Click the :guilabel:`Print` button, and a PDF file is created with all the specified payslips." +#: ../../content/applications/hr/payroll/work_entries.rst:147 +msgid "The conflict disappears from the :guilabel:`Work Entry` dashboard, since the conflict is now resolved." msgstr "" #: ../../content/applications/hr/payroll/work_entries.rst:-1 -msgid "Print button for printing the payslips." +msgid "The detailed conflict pop-up window that appears when the Edit button is clicked." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:260 -msgid "The :guilabel:`Print` button does **not** appear until at least one payslip is selected in the list." +#: ../../content/applications/hr/payroll/work_entries.rst:154 +msgid "If the time off is approved, the status of the work entry conflict changes to :guilabel:`Cancelled`. If the time off is refused, the status changes to :guilabel:`Draft`." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:264 -msgid "Time off to report" +#: ../../content/applications/hr/payroll/work_entries.rst:160 +msgid "Resolve on time off request" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:266 -msgid "If a time off request is submitted for a time period that was already processed on a payslip, the time off request appears in the *Time Off* page in the *Payroll* app, which is accessible by navigating to :menuselection:`Payroll app --> Work Entries --> Time Off to Report`." +#: ../../content/applications/hr/payroll/work_entries.rst:162 +msgid "If more details are needed to make a decision about the time off request, hover over the entry in the :guilabel:`Time Off` field, and click the :icon:`fa-external-link` :guilabel:`(Internal Link)` icon that appears at the end of the line. This causes an :guilabel:`Open: Time Off` pop-up window to load, with all the time off request details. Click either the :guilabel:`Approve` or :guilabel:`Refuse` buttons to approve or refuse the request." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:270 -msgid "On the :guilabel:`Time Off` page, the request appears with a status of :guilabel:`To defer to next payslip`. This is because the employee was already paid for that day, and it was logged as time spent at work, as a typical work day." +#: ../../content/applications/hr/payroll/work_entries.rst:168 +msgid "To resolve the time off conflict on the detailed time off request pop-up window, click the :guilabel:`Internal Link` button at the end of the :guilabel:`Time Off` entry line, and the time off request details appear in a new pop-up window. The request can be modified, if needed." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:274 -msgid "In order to keep the employee's time off balances correct, the time off request **must** be applied to the following pay period. This not only ensures time off request balances are current, it also eliminates the need to redo work entries, cancel paychecks, and reissue paychecks." +#: ../../content/applications/hr/payroll/work_entries.rst:172 +msgid "Click the :guilabel:`Approve` button to approve the request, then click the :guilabel:`Save & Close` button to save the changes, and go back to the work entry conflict pop-up window." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:278 -msgid "The most common scenario when this situation occurs, is when payslips are processed a day or two before the pay period ends, and an employee is unexpectedly sick on one of the last days of the pay period. The employee puts in a time off request for a day that was already processed on a payslip as a regular work day. Instead of cancelling the payslip, modifying the work entries, and reissuing the paycheck, Odoo allows for those time off requests to be applied to the following pay period, instead." +#: ../../content/applications/hr/payroll/work_entries.rst:-1 +msgid "The detailed time off request information." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:285 -msgid "To view all the time off requests that need to be deferred to the next payslip, navigate to :menuselection:`Payroll app --> Work Entries --> Time Off to Report`. The default filter for this report is :guilabel:`To Defer`." +#: ../../content/applications/hr/payroll/work_entries.rst:178 +msgid "Now, the :guilabel:`Approve Time Off` button is hidden, only the :guilabel:`Refuse Time Off` button is visible." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:289 -msgid "All time off requests that need to be applied to the following pay period appear with a :guilabel:`Payslip State` of :guilabel:`To defer to next payslip`." +#: ../../content/applications/hr/payroll/work_entries.rst:181 +msgid "If the approval was a mistake, the request can be refused here, by clicking the :guilabel:`Refuse Time Off` button." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:-1 -msgid "A list of all time off requests that were not approved before payslips were generated." +#: ../../content/applications/hr/payroll/work_entries.rst:184 +msgid "Since the time off was approved in the time off window, click the :guilabel:`X` in the top-right corner to close the window. The conflict disappears from the :guilabel:`Work Entry` dashboard, since it has been resolved." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:297 -msgid "Defer multiple time off entries" +#: ../../content/applications/hr/payroll/work_entries.rst:191 +msgid "Regenerate work entries" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:299 -msgid "To select the work entries to defer, click the box to the left of the work entry line. To select all work entries in the list, click the box to the left of the :guilabel:`Employees` column title, at the top of the list." +#: ../../content/applications/hr/payroll/work_entries.rst:193 +msgid "After conflicts are resolved, the affected work entries must be regenerated. This recreates the specified work entries, and overwrites the previously conflicting work entries." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:303 -msgid "Once any work entry is selected, two buttons appear at the top of the report: a :guilabel:`(#) Selected` button, and an :guilabel:`Actions` button. The :guilabel:`(#) Selected` button indicates how many entries are currently selected." +#: ../../content/applications/hr/payroll/work_entries.rst:196 +msgid "While :ref:`conflicts ` *can* be resolved individually, if the conflicts are caused from another application, such as **Planning** or **Attendances**, it is best practice to correct the record in the application causing the conflict. The reason this method is recommended is because, if the issue in the related application is **not** resolved, when work entries are regenerated, the conflicts reappear." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:307 -msgid "When all the desired work entries are selected, click the :guilabel:`Actions` button, and a menu appears with several choices. Click :guilabel:`Defer to Next Month` in the list, and all selected entries are deferred to the following month." +#: ../../content/applications/hr/payroll/work_entries.rst:202 +msgid "First, ensure the issues are resolved in the specific applications that caused the work entry conflicts. Once the conflicts have been resolved in the corresponding apps, open the work entry dashboard by navigating to :menuselection:`Payroll app --> Work Entries --> Work Entries`." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:-1 -msgid "The actions button and # Selected buttons that appear after any selections are made." +#: ../../content/applications/hr/payroll/work_entries.rst:206 +msgid "Click the :guilabel:`Regenerate Work Entries` button at the top of the :guilabel:`Work Entries` dashboard, and a :guilabel:`Work Entry Regeneration` pop-up window appears." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:316 -msgid "Defer individual time off entries" +#: ../../content/applications/hr/payroll/work_entries.rst:209 +msgid "Select the :guilabel:`Employees` to regenerate work entries for, using the drop-down menu. Adjust the :guilabel:`From` and :guilabel:`To` fields, so the correct date range is displayed." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:318 -msgid "Time off requests appearing on the :guilabel:`Time Off to Report` list can be deferred individually." +#: ../../content/applications/hr/payroll/work_entries.rst:212 +msgid "Click the :guilabel:`Regenerate Work Entries` button, and the work entries are recreated. Once finished, the pop-up window closes." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:320 -msgid "Click on an individual time off request, and the details for that request load." +#: ../../content/applications/hr/payroll/work_entries.rst:-1 +msgid "Regenerate a work entry for a particular employee." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:322 -msgid "The specific details for the time off request appear on the left-hand side, and all of the employee's submitted time off requests appear on the right-hand side (including the request in the details on the left-hand side)." +#: ../../content/applications/hr/payroll/work_entries.rst:219 +msgid "An employee has incorrect work entries generated from the **Planning** app because they were incorrectly assigned to two work stations simultaneously. This should be fixed in the **Planning** app, instead of the **Payroll** app." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:326 -msgid "To defer the time off request to the next payslip, click the :guilabel:`Report to Next Month` button at the top. Once processed, the :guilabel:`Report to Next Month` button disappears, and the :guilabel:`Payslip State` changes from :guilabel:`To defer to next payslip` to :guilabel:`Computed in Current Payslip`." +#: ../../content/applications/hr/payroll/work_entries.rst:223 +msgid "To correct this issue, modify the employee's schedule in the **Planning** app, so they are correctly assigned to only one work station. Then, in the **Payroll** app, regenerate work entries for that employee, for that specific time period." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:331 -msgid "To go back to the :guilabel:`Time Off to Report` list, click on :guilabel:`Time Off` in the breadcrumb menu." +#: ../../content/applications/hr/payroll/work_entries.rst:227 +msgid "The **Payroll** app then pulls the new, corrected data form the **Planning** app, and recreates the correct work entries for that employee. All conflicts for that employee are now resolved." msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:-1 -msgid "The time off details for an individual request that needs to be deferred." +#: ../../content/applications/hr/payroll/work_entries.rst:231 +msgid ":doc:`payslips`" msgstr "" -#: ../../content/applications/hr/payroll/work_entries.rst:339 -msgid ":ref:`Configure work entries `" +#: ../../content/applications/hr/payroll/work_entries.rst:233 +msgid ":doc:`batches`" msgstr "" #: ../../content/applications/hr/payroll/work_entry_analysis.rst:3 @@ -18495,90 +19472,62 @@ msgid "Before creating a job position in Odoo, configure the necessary settings msgstr "" #: ../../content/applications/hr/recruitment.rst:39 -msgid "Job posting" -msgstr "" - -#: ../../content/applications/hr/recruitment.rst:41 -msgid "The :guilabel:`Job Posting` section of the **Recruitment** app settings has two configurations, enabling posting jobs on the company website, and on external job boards." -msgstr "" - -#: ../../content/applications/hr/recruitment.rst:44 -msgid "If job positions are to be posted to the company's website, enable the :guilabel:`Online Posting` option." -msgstr "" - -#: ../../content/applications/hr/recruitment.rst:48 -msgid "The :guilabel:`Online Posting` is only available if the :doc:`Website <../websites/website>` application is also installed." -msgstr "" - -#: ../../content/applications/hr/recruitment.rst:51 -msgid "The **Recruitment** app can post job positions directly to a job board. To enable this, click :icon:`oi-arrow-right` :guilabel:`Choose a Job Board`, and the required module is presented, if not already installed. Click :guilabel:`Install` on the corresponding module, then the main Odoo dashboard loads after a successful installation." -msgstr "" - -#: ../../content/applications/hr/recruitment.rst:56 -msgid "Open the **Recruitment** app, and navigate to :menuselection:`Recruitment app --> Configuration --> Settings`. The corresponding job board credentials are listed. Enter the :guilabel:`Username` and :guilabel:`Password` for the job board. Click the :guilabel:`Save` button after making any changes." -msgstr "" - -#: ../../content/applications/hr/recruitment.rst:61 -msgid "Currently, the only job board integration with Odoo is Monster.com." -msgstr "" - -#: ../../content/applications/hr/recruitment.rst:64 msgid "Process" msgstr "" -#: ../../content/applications/hr/recruitment.rst:66 +#: ../../content/applications/hr/recruitment.rst:41 msgid "The :guilabel:`Process` section of the settings page specifies what the database can and cannot do during the recruitment process." msgstr "" -#: ../../content/applications/hr/recruitment.rst:70 +#: ../../content/applications/hr/recruitment.rst:45 msgid "Send interview survey" msgstr "" -#: ../../content/applications/hr/recruitment.rst:72 +#: ../../content/applications/hr/recruitment.rst:47 msgid "Odoo is capable of having a survey sent to an applicant to gather more information about them. Surveys can be thought of as exams, or questionnaires, and can be customized in various ways to provide the recruitment team with valuable insights into the applicant" msgstr "" -#: ../../content/applications/hr/recruitment.rst:76 +#: ../../content/applications/hr/recruitment.rst:51 msgid "Enable the :guilabel:`Send Interview Survey` option to send surveys to applicants. Once enabled, an :icon:`fa-arrow-right` :guilabel:`Interview Survey` internal link appears. Click the :icon:`fa-arrow-right` :guilabel:`Interview Survey` link to navigate to a list of all created surveys." msgstr "" -#: ../../content/applications/hr/recruitment.rst:81 +#: ../../content/applications/hr/recruitment.rst:56 msgid "This list includes all surveys that were created in the database, not only surveys used in the **Recruitment** app. If no surveys have been created, the surveys list displays a :guilabel:`No Survey Found` message, and presents options to create a survey from several preconfigured survey templates." msgstr "" -#: ../../content/applications/hr/recruitment.rst:87 +#: ../../content/applications/hr/recruitment.rst:62 msgid ":doc:`create/edit surveys <../marketing/surveys/create>`" msgstr "" -#: ../../content/applications/hr/recruitment.rst:90 +#: ../../content/applications/hr/recruitment.rst:65 msgid "Enabling the :guilabel:`Send Interview Survey` option will install the **Surveys** application once the settings are saved, if not already installed." msgstr "" -#: ../../content/applications/hr/recruitment.rst:96 +#: ../../content/applications/hr/recruitment.rst:71 msgid "When sending an offer to an applicant, an expiration date can be set on the offer. Enter the number of days an offer is valid for in the :guilabel:`days` field. After the set amount of days has passed, if the applicant has not accepted the offer, the offer is no longer available." msgstr "" -#: ../../content/applications/hr/recruitment.rst:103 +#: ../../content/applications/hr/recruitment.rst:78 msgid "Résumé display" msgstr "" -#: ../../content/applications/hr/recruitment.rst:105 +#: ../../content/applications/hr/recruitment.rst:80 msgid "When applicants submit an application, one of the default required fields is a résumé, or :abbr:`CV (curriculum vitae)`. All résumés are stored in the **Documents** application, and are accessible on the applicant's card." msgstr "" -#: ../../content/applications/hr/recruitment.rst:109 +#: ../../content/applications/hr/recruitment.rst:84 msgid "A résumé has the option to appear on the applicant's form, which can be viewed by clicking on the applicant's card. The résumé appears on the right-side of the screen. If this is not enabled, the résumé is accessed via a link in the chatter, where it needs to be clicked to expand and view it, or downloaded." msgstr "" -#: ../../content/applications/hr/recruitment.rst:114 +#: ../../content/applications/hr/recruitment.rst:89 msgid "Enable the :guilabel:`Résumé Display` option to show the résumé on the applicant's card by default, and in addition to the document link. When enabled, the résumé appears on the right side of the applicant's card." msgstr "" -#: ../../content/applications/hr/recruitment.rst:119 +#: ../../content/applications/hr/recruitment.rst:94 msgid "For the résumé to appear on the right-side, the browser window must be in full-screen mode (where the browser spans the entire screen)." msgstr "" -#: ../../content/applications/hr/recruitment.rst:122 +#: ../../content/applications/hr/recruitment.rst:97 msgid "If the browser window is set to a size smaller than the entire width of the screen (not full-screen), then the résumé does not appear on the right-side. Instead, the résumé appears in the :guilabel:`Files` section of the chatter, below the applicant's card." msgstr "" @@ -18586,64 +19535,64 @@ msgstr "" msgid "The résumé on an applicant's card, appearing on the right side." msgstr "" -#: ../../content/applications/hr/recruitment.rst:130 +#: ../../content/applications/hr/recruitment.rst:105 msgid "In-App Purchases" msgstr "" -#: ../../content/applications/hr/recruitment.rst:132 +#: ../../content/applications/hr/recruitment.rst:107 msgid "The :guilabel:`In-App Purchases` section of the :guilabel:`Settings` menu deals with items that required credits to use, such as :abbr:`SMS (Short Message Service)` text messages, and digitizing résumés." msgstr "" -#: ../../content/applications/hr/recruitment.rst:137 +#: ../../content/applications/hr/recruitment.rst:112 msgid ":doc:`SMS pricing and FAQs <../marketing/sms_marketing/pricing_and_faq>`" msgstr "" -#: ../../content/applications/hr/recruitment.rst:140 +#: ../../content/applications/hr/recruitment.rst:115 #: ../../content/applications/hr/referrals/share_jobs.rst:82 msgid "Send SMS" msgstr "" -#: ../../content/applications/hr/recruitment.rst:142 +#: ../../content/applications/hr/recruitment.rst:117 msgid "It is possible to send text messages to applicants directly through the **Recruitment** app. This feature requires credits to use. Click the :icon:`fa-arrow-right` :guilabel:`Manage Service & Buy Credits` internal link, and follow the steps to :doc:`purchase credits <../marketing/sms_marketing/pricing_and_faq>`." msgstr "" -#: ../../content/applications/hr/recruitment.rst:150 +#: ../../content/applications/hr/recruitment.rst:125 msgid "Résumé digitization (OCR)" msgstr "" -#: ../../content/applications/hr/recruitment.rst:152 +#: ../../content/applications/hr/recruitment.rst:127 msgid "When an application is submitted using any of the available methods, such as an online application submission, emailing a resume to the job position alias, or creating an applicant record directly from the database, it is possible to have Odoo extract the applicant's name, phone number, and email address from the résumé and populate the applicant's form. To do so, enable the :guilabel:`Résumé Digitization (OCR)` option." msgstr "" -#: ../../content/applications/hr/recruitment.rst:158 +#: ../../content/applications/hr/recruitment.rst:133 msgid "When enabled, additional options appear. Click on the corresponding radio button to select one of the following options:" msgstr "" -#: ../../content/applications/hr/recruitment.rst:161 +#: ../../content/applications/hr/recruitment.rst:136 msgid ":guilabel:`Do not digitize`: this option turns off résumé digitization." msgstr "" -#: ../../content/applications/hr/recruitment.rst:162 +#: ../../content/applications/hr/recruitment.rst:137 msgid ":guilabel:`Digitize on demand only`: this option only digitizes resumes when requested. A :guilabel:`Digitize document` buttons appears on applicant cards. When clicked, the résumé is scanned and the applicant's card is updated." msgstr "" -#: ../../content/applications/hr/recruitment.rst:165 +#: ../../content/applications/hr/recruitment.rst:140 msgid ":guilabel:`Digitize automatically`: this option automatically digitizes all résumés when they are submitted." msgstr "" -#: ../../content/applications/hr/recruitment.rst:168 +#: ../../content/applications/hr/recruitment.rst:143 msgid "Beneath these options are two additional links. Click the :icon:`fa-arrow-right` :guilabel:`Manage Service & Buy Credits` internal link to purchase credits for résumé digitization. Click the :icon:`fa-arrow-right` :guilabel:`View My Services` internal link to view a list of all current services, and their remaining credit balances." msgstr "" -#: ../../content/applications/hr/recruitment.rst:173 +#: ../../content/applications/hr/recruitment.rst:148 msgid "For more information on document digitization and :abbr:`IAP's (in-app purchases)`, refer to the :doc:`In-app purchase (IAP) <../essentials/in_app_purchase>` documentation." msgstr "" -#: ../../content/applications/hr/recruitment.rst:177 +#: ../../content/applications/hr/recruitment.rst:152 msgid "The :guilabel:`Do not digitize` option may appear redundant but serves a distinct purpose. Disabling the :guilabel:`Résumé Digitization (OCR)` option uninstalls the module, while :guilabel:`Do not digitize` keeps the module installed but inactive—allowing the user to re-enable digitization later without reinstalling the module." msgstr "" -#: ../../content/applications/hr/recruitment.rst:185 +#: ../../content/applications/hr/recruitment.rst:160 msgid "To access the Kanban view for a job position, navigate to the main :menuselection:`Recruitment` app dashboard, which is the default view when opening the application. All job positions appear on the main dashboard. Click the :guilabel:`(#) New Applications` smart button on a job position card to navigate to the Kanban view for all the applicants for that particular job position." msgstr "" @@ -18651,35 +19600,35 @@ msgstr "" msgid "Main dashboard view of job position card, showing new applications button." msgstr "" -#: ../../content/applications/hr/recruitment.rst:193 +#: ../../content/applications/hr/recruitment.rst:168 msgid "Inside the job application, the Kanban stages appear, with all the applicants populated in their respective columns, indicating what stage they are currently in. In Odoo, six default stages are configured:" msgstr "" -#: ../../content/applications/hr/recruitment.rst:197 +#: ../../content/applications/hr/recruitment.rst:172 msgid ":ref:`New `" msgstr "" -#: ../../content/applications/hr/recruitment.rst:198 +#: ../../content/applications/hr/recruitment.rst:173 msgid ":ref:`Initial Qualification `" msgstr "" -#: ../../content/applications/hr/recruitment.rst:199 +#: ../../content/applications/hr/recruitment.rst:174 msgid ":ref:`First Interview `" msgstr "" -#: ../../content/applications/hr/recruitment.rst:200 +#: ../../content/applications/hr/recruitment.rst:175 msgid ":ref:`Second Interview `" msgstr "" -#: ../../content/applications/hr/recruitment.rst:201 +#: ../../content/applications/hr/recruitment.rst:176 msgid ":doc:`Contract Proposal `" msgstr "" -#: ../../content/applications/hr/recruitment.rst:202 +#: ../../content/applications/hr/recruitment.rst:177 msgid ":ref:`Contract Signed `" msgstr "" -#: ../../content/applications/hr/recruitment.rst:204 +#: ../../content/applications/hr/recruitment.rst:179 msgid "The last column, :guilabel:`Contract Signed`, is folded by default. Folded columns appear gray, and the applicants in it are hidden from view. To expand the folded stage and view the applicant cards for that column, click anywhere on the thin gray column that says the stage name and the column expands, revealing the applicants." msgstr "" @@ -18687,23 +19636,23 @@ msgstr "" msgid "Expand a folded column by clicking on it in the Kanban view." msgstr "" -#: ../../content/applications/hr/recruitment.rst:212 +#: ../../content/applications/hr/recruitment.rst:187 msgid "Each stage has a color-coded bar beneath the stage name, providing status information for the applicant's in that specific stage. The status colors are:" msgstr "" -#: ../../content/applications/hr/recruitment.rst:215 +#: ../../content/applications/hr/recruitment.rst:190 msgid ":guilabel:`Green`: the applicant is ready to move to the next stage." msgstr "" -#: ../../content/applications/hr/recruitment.rst:216 +#: ../../content/applications/hr/recruitment.rst:191 msgid ":guilabel:`Red`: the applicant is blocked from moving to the next stage." msgstr "" -#: ../../content/applications/hr/recruitment.rst:217 +#: ../../content/applications/hr/recruitment.rst:192 msgid ":guilabel:`Gray`: the applicant is still in progress in the current stage and is neither ready nor blocked from the next stage." msgstr "" -#: ../../content/applications/hr/recruitment.rst:220 +#: ../../content/applications/hr/recruitment.rst:195 msgid "The status for each card is set manually. To set the status, click on the small circle in the lower-left of the applicant card. A status pop-up window appears. Click on the desired status for the applicant. The status dot on the applicant card as well as the status bar updates." msgstr "" @@ -18711,23 +19660,23 @@ msgstr "" msgid "The applicant card statuses, and status bar." msgstr "" -#: ../../content/applications/hr/recruitment.rst:228 +#: ../../content/applications/hr/recruitment.rst:203 msgid "The names for the three status colors (`In Progress`, `Ready for Next Stage`, and `Blocked`) :ref:`can be modified `, if desired." msgstr "" -#: ../../content/applications/hr/recruitment.rst:234 +#: ../../content/applications/hr/recruitment.rst:209 msgid "Customize stages" msgstr "" -#: ../../content/applications/hr/recruitment.rst:236 +#: ../../content/applications/hr/recruitment.rst:211 msgid "Stages can be modified, added, or deleted to match the particular hiring steps of a business." msgstr "" -#: ../../content/applications/hr/recruitment.rst:239 +#: ../../content/applications/hr/recruitment.rst:214 msgid "New stage" msgstr "" -#: ../../content/applications/hr/recruitment.rst:241 +#: ../../content/applications/hr/recruitment.rst:216 msgid "To create a new stage, click on :icon:`fa-plus` :guilabel:`Stage` and a new column appears. Enter the title for the new stage in the :guilabel:`Stage title` field, then click :guilabel:`Add`. The new column appears, and another new stage is available to create. If no new stages are needed, click anywhere on the screen to exit the new stage creation." msgstr "" @@ -18735,12 +19684,12 @@ msgstr "" msgid "The plus sign to click to add a new column to the Kanban stages." msgstr "" -#: ../../content/applications/hr/recruitment.rst:252 +#: ../../content/applications/hr/recruitment.rst:227 #: ../../content/applications/hr/recruitment/schedule_interviews.rst:215 msgid "Modify stage" msgstr "" -#: ../../content/applications/hr/recruitment.rst:254 +#: ../../content/applications/hr/recruitment.rst:229 msgid "To modify the settings of a stage, hover over the name of the stage, and a :icon:`fa-cog` :guilabel:`(Settings)` icon appears in the upper right hand side of the stage. Click on the :icon:`fa-cog` :guilabel:`(Settings)` icon and a menu appears. Then click on the :guilabel:`Edit` option. An :guilabel:`Edit: (Stage)` form appears. Make any desired modifications to the form, then click :guilabel:`Save & Close` when done." msgstr "" @@ -18749,99 +19698,99 @@ msgid "The gear icon that appears when a column name is moused over, and the dro "displays when clicked." msgstr "" -#: ../../content/applications/hr/recruitment.rst:267 +#: ../../content/applications/hr/recruitment.rst:242 msgid "Edit stage form" msgstr "" -#: ../../content/applications/hr/recruitment.rst:269 +#: ../../content/applications/hr/recruitment.rst:244 msgid "The :guilabel:`Edit: (Stage)` form is where the stage's settings are configured. The only required field is the :guilabel:`Stage Name`." msgstr "" -#: ../../content/applications/hr/recruitment.rst:272 +#: ../../content/applications/hr/recruitment.rst:247 msgid "The fields to be populated or modified are:" msgstr "" -#: ../../content/applications/hr/recruitment.rst:274 +#: ../../content/applications/hr/recruitment.rst:249 msgid ":guilabel:`Stage Name`: Type in a name for the stage." msgstr "" -#: ../../content/applications/hr/recruitment.rst:275 +#: ../../content/applications/hr/recruitment.rst:250 msgid ":guilabel:`Email Template`: Select an email template to be used from the drop-down menu. If a template is selected, when the applicant card enters the stage, an email is automatically sent to the applicant using the selected template." msgstr "" -#: ../../content/applications/hr/recruitment.rst:278 +#: ../../content/applications/hr/recruitment.rst:253 msgid ":guilabel:`Folded in Kanban`: Check the box to have the stage appear folded (hidden) at all times in the default view." msgstr "" -#: ../../content/applications/hr/recruitment.rst:280 +#: ../../content/applications/hr/recruitment.rst:255 msgid ":guilabel:`Hired Stage`: Check the box if this stage indicates that the applicant is hired. When an applicant's card enters this stage, the card displays a :guilabel:`Hired` banner in the upper right corner. If this box is checked, this stage is used to determine the hire date of an applicant." msgstr "" -#: ../../content/applications/hr/recruitment.rst:284 +#: ../../content/applications/hr/recruitment.rst:259 msgid ":guilabel:`Job Specific`: If the stage only applies to specific job positions, select the job positions from the drop-down menu. Multiple job positions can be selected." msgstr "" -#: ../../content/applications/hr/recruitment.rst:286 +#: ../../content/applications/hr/recruitment.rst:261 msgid ":guilabel:`Show in Referrals`: Check the box if this stage should be seen in the *Referrals* application, and allow the referrer to accrue points when a referral of theirs reaches this stage. If this is active, a :guilabel:`Points` field appears. Enter the amount of referral points the employee receives when an applicant enters this stage. The **Referrals** app must be installed in order to use this option." msgstr "" -#: ../../content/applications/hr/recruitment.rst:291 +#: ../../content/applications/hr/recruitment.rst:266 msgid ":guilabel:`Points`: If :guilabel:`Show in Referrals` is enabled, this field appears. Enter the number of points the employee earns when an applicant moves to this stage." msgstr "" -#: ../../content/applications/hr/recruitment.rst:293 +#: ../../content/applications/hr/recruitment.rst:268 msgid ":guilabel:`Tooltips` section: There are three preconfigured status labels (colored circles) for each applicant's card, indicating its status. These colors are displayed at the top of each stage to reflect the statuses of the applicants in the stage. The *names* for the label can be modified, but the label itself (the color) cannot. The default names and labels are: :guilabel:`In Progress` (gray), :guilabel:`Blocked` (red), and :guilabel:`Ready for Next Stage` (green)." msgstr "" -#: ../../content/applications/hr/recruitment.rst:298 +#: ../../content/applications/hr/recruitment.rst:273 msgid ":guilabel:`Requirements`: Enter any internal notes for this stage explaining any requirements of the stage." msgstr "" -#: ../../content/applications/hr/recruitment.rst:302 +#: ../../content/applications/hr/recruitment.rst:277 msgid "Delete stage" msgstr "" -#: ../../content/applications/hr/recruitment.rst:304 +#: ../../content/applications/hr/recruitment.rst:279 msgid "If a stage is no longer needed, the stage can be deleted. To delete a stage, hover over the name of the stage, and a :icon:`fa-cog` :guilabel:`(Settings)` icon appears. First, click on the :icon:`fa-cog` :guilabel:`(Settings)` icon to reveal a drop-down menu, then click :guilabel:`Delete`. A :guilabel:`Confirmation` pop-up warning appears, asking :guilabel:`Are you sure you want to delete this column?` Click :guilabel:`Delete` to delete the column." msgstr "" -#: ../../content/applications/hr/recruitment.rst:311 +#: ../../content/applications/hr/recruitment.rst:286 msgid "If there are applicants currently in the stage being deleted, an error pops up when attempting to delete the stage. The records currently in the stage to need to be either deleted, archived, or moved to a different stage before the stage can be deleted." msgstr "" -#: ../../content/applications/hr/recruitment.rst:316 +#: ../../content/applications/hr/recruitment.rst:291 msgid "Email templates" msgstr "" -#: ../../content/applications/hr/recruitment.rst:318 +#: ../../content/applications/hr/recruitment.rst:293 msgid "To communicate with the applicant, Odoo has several preconfigured email templates that can be used. The preconfigured email templates and when to use them are as follows:" msgstr "" -#: ../../content/applications/hr/recruitment.rst:321 +#: ../../content/applications/hr/recruitment.rst:296 msgid ":guilabel:`Recruitment: Applicant Acknowledgement`: this template is used to let the applicant know that their application was received. This email is automatically sent out once the applicant is in the :guilabel:`New` stage." msgstr "" -#: ../../content/applications/hr/recruitment.rst:324 +#: ../../content/applications/hr/recruitment.rst:299 msgid ":guilabel:`Recruitment: Interest`: this template is used to let the applicant know that their application caught the recruiter's attention, and they have been shortlisted for either a phone call or an interview." msgstr "" -#: ../../content/applications/hr/recruitment.rst:327 +#: ../../content/applications/hr/recruitment.rst:302 msgid ":guilabel:`Recruitment: Not interested anymore`: this template is used when an applicant communicates that they are no longer interested in the position, and thanks them for their time and consideration." msgstr "" -#: ../../content/applications/hr/recruitment.rst:330 +#: ../../content/applications/hr/recruitment.rst:305 msgid ":guilabel:`Recruitment: Refuse`: this template is used when an applicant is no longer being considered for the position." msgstr "" -#: ../../content/applications/hr/recruitment.rst:332 +#: ../../content/applications/hr/recruitment.rst:307 msgid ":guilabel:`Recruitment: Schedule Interview`: this template is used to let the applicant know that they have passed the :guilabel:`Initial Qualification` stage, and they will soon be contacted to set up an interview with the recruiter. This email is automatically sent out once the applicant is in the :guilabel:`Initial Qualification` stage." msgstr "" -#: ../../content/applications/hr/recruitment.rst:338 +#: ../../content/applications/hr/recruitment.rst:313 msgid "Email templates can be created, modified, and deleted to suit the needs of a business. For more information on email templates, refer to the :doc:`../general/companies/email_template` document." msgstr "" -#: ../../content/applications/hr/recruitment.rst:341 +#: ../../content/applications/hr/recruitment.rst:316 msgid "To manually send an email, click :guilabel:`Send message` in the chatter. A text box appears, as well as the applicant's email address." msgstr "" @@ -18849,31 +19798,31 @@ msgstr "" msgid "Send an email from the chatter." msgstr "" -#: ../../content/applications/hr/recruitment.rst:347 +#: ../../content/applications/hr/recruitment.rst:322 msgid "Click the :icon:`fa-expand` :guilabel:`(Full composer)` icon in the bottom right corner of the :guilabel:`Send Message` tab in the chatter. A :guilabel:`Compose Email` pop-up window loads, with the :guilabel:`To` and :guilabel:`Subject` pre-populated. The applicant's email address is entered in the :guilabel:`To` field, and the :guilabel:`Subject` is `(Job Position)`. The email body is empty by default." msgstr "" -#: ../../content/applications/hr/recruitment.rst:353 +#: ../../content/applications/hr/recruitment.rst:328 msgid "To use a preconfigured email template, click the :icon:`fa-ellipsis-v` :guilabel:`(vertical elipsis)` button in the bottom of the window. Select the email template to use from the drop-down menu." msgstr "" -#: ../../content/applications/hr/recruitment.rst:357 +#: ../../content/applications/hr/recruitment.rst:332 msgid "Preconfigured email templates may contain dynamic placeholders so unique information can be populated in the email for a more personalized message to the applicant. Several preconfigured email templates are available to choose from. Depending on the template selected, the email subject or body may change." msgstr "" -#: ../../content/applications/hr/recruitment.rst:363 +#: ../../content/applications/hr/recruitment.rst:338 msgid "Only the email templates that are configured for the model load. Other email templates come preconfigured in Odoo, but if they are not configured for the recruitment application, they do not appear in the list of available templates." msgstr "" -#: ../../content/applications/hr/recruitment.rst:367 +#: ../../content/applications/hr/recruitment.rst:342 msgid "If any attachments need to be added, click the :icon:`fa-paperclip` :guilabel:`(paperclip)` button at the bottom of the window. Navigate to the file to be attached, then click :guilabel:`Open` to attach it. To delete an attachment, click the :icon:`fa-close` :guilabel:`(delete)` icon to the right of the attachment." msgstr "" -#: ../../content/applications/hr/recruitment.rst:372 +#: ../../content/applications/hr/recruitment.rst:347 msgid "If any changes need to be made to the email, edit the body of the email. If the edits should be saved to be used in the future, the email can be saved as a new template. Click the :icon:`fa-ellipsis-v` :guilabel:`(vertical elipsis)` button in the bottom of the window, and select :guilabel:`Save as Template`. Options are presented to either overwrite an existing template, or save a new template. Click on an existing template name to overwrite that template, or click :guilabel:`Save as Template` to save a new template. A :guilabel:`Create a Mail Template` pop-up window loads. Enter a name for the template in the :guilabel:`Template Name` field, then click :guilabel:`Save`." msgstr "" -#: ../../content/applications/hr/recruitment.rst:381 +#: ../../content/applications/hr/recruitment.rst:356 msgid "To send the email, click :guilabel:`Send` and the email is sent to the applicant. The email then appears in the chatter." msgstr "" @@ -18883,39 +19832,43 @@ msgid "Send a custom survey, also referred to as an interview form, to an applic "preconfigured template." msgstr "" -#: ../../content/applications/hr/recruitment.rst:389 +#: ../../content/applications/hr/recruitment.rst:364 msgid ":doc:`recruitment/new_job`" msgstr "" -#: ../../content/applications/hr/recruitment.rst:390 +#: ../../content/applications/hr/recruitment.rst:365 +msgid ":doc:`recruitment/post_job`" +msgstr "" + +#: ../../content/applications/hr/recruitment.rst:366 msgid ":doc:`recruitment/add-new-applicants`" msgstr "" -#: ../../content/applications/hr/recruitment.rst:391 +#: ../../content/applications/hr/recruitment.rst:367 msgid ":doc:`recruitment/schedule_interviews`" msgstr "" -#: ../../content/applications/hr/recruitment.rst:392 +#: ../../content/applications/hr/recruitment.rst:368 msgid ":doc:`recruitment/offer_job_positions`" msgstr "" -#: ../../content/applications/hr/recruitment.rst:393 +#: ../../content/applications/hr/recruitment.rst:369 msgid ":doc:`recruitment/refuse_applicant`" msgstr "" -#: ../../content/applications/hr/recruitment.rst:394 +#: ../../content/applications/hr/recruitment.rst:370 msgid ":doc:`recruitment/applicant_analysis`" msgstr "" -#: ../../content/applications/hr/recruitment.rst:395 +#: ../../content/applications/hr/recruitment.rst:371 msgid ":doc:`recruitment/source_analysis`" msgstr "" -#: ../../content/applications/hr/recruitment.rst:396 -msgid ":doc:`recruitment/time_in_stage`" +#: ../../content/applications/hr/recruitment.rst:372 +msgid ":doc:`recruitment/velocity_analysis`" msgstr "" -#: ../../content/applications/hr/recruitment.rst:397 +#: ../../content/applications/hr/recruitment.rst:373 msgid ":doc:`recruitment/team_performance`" msgstr "" @@ -19047,10 +20000,6 @@ msgstr "" msgid "Enter any notes regarding the applicant in this tab. These notes are only visible internally, with users that have the proper access rights." msgstr "" -#: ../../content/applications/hr/recruitment/add-new-applicants.rst:109 -msgid "Details tab" -msgstr "" - #: ../../content/applications/hr/recruitment/add-new-applicants.rst:111 msgid "The :guilabel:`Details` tab houses various information regarding the applicant and the job position." msgstr "" @@ -19310,90 +20259,86 @@ msgid "Edit the job position card." msgstr "" #: ../../content/applications/hr/recruitment/new_job.rst:55 -msgid "The top-right corner of the card has a toggle to publish the job position to the website. If the job position is published, a green :guilabel:`Published` toggle is visible. If the job position is *not* published a gray :guilabel:`Not Published` toggle appears. Click the toggle to publish or unpublish the job position." -msgstr "" - -#: ../../content/applications/hr/recruitment/new_job.rst:61 msgid "Recruitment tab" msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:63 +#: ../../content/applications/hr/recruitment/new_job.rst:57 msgid "All the basic information about the job position is listed under the :guilabel:`Recruitment` tab." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:65 +#: ../../content/applications/hr/recruitment/new_job.rst:59 msgid "None of the fields are required, but it is important to configure and populate the :guilabel:`Department`, :guilabel:`Job Location`, :guilabel:`Employment Type` fields, and the :guilabel:`Job Summary` tab, as they are all visible to prospective applicants on the website." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:70 +#: ../../content/applications/hr/recruitment/new_job.rst:64 msgid "Some fields listed below may not appear depending on the database configuration and other installed applications." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:73 +#: ../../content/applications/hr/recruitment/new_job.rst:67 msgid "The fields can be filled out as follows:" msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:75 +#: ../../content/applications/hr/recruitment/new_job.rst:69 msgid ":guilabel:`Department`: Select the relevant department for the job position. This is visible on the website." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:77 +#: ../../content/applications/hr/recruitment/new_job.rst:71 msgid ":guilabel:`Job Location`: Select the physical address for the job. If the job position is remote, leave this field blank. This is visible on the website." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:79 +#: ../../content/applications/hr/recruitment/new_job.rst:73 msgid ":guilabel:`Industry`: Select the relevant industry the job position falls under. This field corresponds to the industries on job boards. Odoo comes with 86 preconfigured industries. It is *not* recommended to add a new industry, as it may hide the job position during some searched on the various job boards." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:83 +#: ../../content/applications/hr/recruitment/new_job.rst:77 msgid ":guilabel:`Email Alias`: Enter an email address to which applicants can send a resumé. Once emailed, Odoo automatically creates an application for them. If an email was entered when creating the job position, this field is populated." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:86 +#: ../../content/applications/hr/recruitment/new_job.rst:80 msgid ":guilabel:`Employment Type`: select what type of position the job is, using the drop-down menu. The default options are :guilabel:`Permanent`, :guilabel:`Temporary`, :guilabel:`Seasonal`, :guilabel:`Full-Time`, :guilabel:`Intern`, :guilabel:`Student`, :guilabel:`Apprenticeship`, :guilabel:`Thesis`, :guilabel:`Statutory`, and :guilabel:`Employee`. Depending on the installed localization, other options may be available. This is visible on the website." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:91 +#: ../../content/applications/hr/recruitment/new_job.rst:85 msgid ":guilabel:`Working Schedule`: Select the working schedule for the job position. Odoo provides one working schedule by default, :guilabel:`Standard 40 hours/week`, but all working schedules in the database are available." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:94 +#: ../../content/applications/hr/recruitment/new_job.rst:88 msgid ":guilabel:`Salary Range`: Enter both the minimum and maximum salaries offered for the position in the two fields. Then, set the last field to the time-frame for the salary range. The default options are :guilabel:`Hour`, :guilabel:`Day`, :guilabel:`Week`, :guilabel:`Bi-Week`, :guilabel:`Month`, and :guilabel:`Year`." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:98 +#: ../../content/applications/hr/recruitment/new_job.rst:92 msgid ":guilabel:`Expected Skills`: Select all the desired skills for the job position, using the drop-down menu. The skills presented are :ref:`configured in the Employees app `." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:101 +#: ../../content/applications/hr/recruitment/new_job.rst:95 msgid ":guilabel:`Company`: Select the company the job is for. This field only appears if using a multi-company database." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:103 +#: ../../content/applications/hr/recruitment/new_job.rst:97 msgid ":guilabel:`Mission Dates`: Using the calendar selector, set the start date for the job position. If the job is temporary and has a specific end date, set the end date in the second field." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:105 +#: ../../content/applications/hr/recruitment/new_job.rst:99 msgid ":guilabel:`Target`: Enter the number of employees to be hired for this position." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:106 +#: ../../content/applications/hr/recruitment/new_job.rst:100 msgid ":guilabel:`Website`: Select the website the job is published on." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:107 +#: ../../content/applications/hr/recruitment/new_job.rst:101 msgid ":guilabel:`Recruiter`: Select the person responsible for recruiting this role." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:108 +#: ../../content/applications/hr/recruitment/new_job.rst:102 msgid ":guilabel:`Interviewers`: Select who should perform the interviews. Multiple people can be selected." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:110 +#: ../../content/applications/hr/recruitment/new_job.rst:104 msgid ":guilabel:`Interview Form`: select an :ref:`Interview form ` that applicants fill out prior to their interview." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:112 +#: ../../content/applications/hr/recruitment/new_job.rst:106 msgid ":guilabel:`Contract Template`: Select a contract template to be used when offering the job to a candidate." msgstr "" @@ -19401,11 +20346,11 @@ msgstr "" msgid "The job information details in the Recruitment tab." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:119 +#: ../../content/applications/hr/recruitment/new_job.rst:113 msgid "Job summary tab" msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:121 +#: ../../content/applications/hr/recruitment/new_job.rst:115 msgid "Enter the job description in the :guilabel:`Job Summary` tab. This description is visible on the website." msgstr "" @@ -19413,27 +20358,27 @@ msgstr "" msgid "The summary of the position in the Job Summary tab." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:128 +#: ../../content/applications/hr/recruitment/new_job.rst:122 msgid "Application info tab" msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:130 +#: ../../content/applications/hr/recruitment/new_job.rst:124 msgid "The :guilabel:`Process Details` section of the :guilabel:`Application Info` tab contains information that is displayed online for the job position. This informs the applicants of the timeline and steps for the recruitment process, so they know when to expect a reply." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:134 +#: ../../content/applications/hr/recruitment/new_job.rst:128 msgid "The following fields are populated by default, but can be modified to suit the recruitment timeline of the business:" msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:137 +#: ../../content/applications/hr/recruitment/new_job.rst:131 msgid ":guilabel:`Time to Answer`: Enter the number of days before the applicant is contacted. :guilabel:`2 open days` populates this field by default." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:139 +#: ../../content/applications/hr/recruitment/new_job.rst:133 msgid ":guilabel:`Process`: Enter the various stages the candidate goes through during the recruitment process. By default, two process steps are visible: :guilabel:`1 Phone Call` and :guilabel:`1 Onsite Interview`." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:142 +#: ../../content/applications/hr/recruitment/new_job.rst:136 msgid ":guilabel:`Days to get an Offer`: Enter the number of days before the applicant should expect an offer after the recruitment process has ended. The default is :guilabel:`4 Days after Interview`." msgstr "" @@ -19441,23 +20386,23 @@ msgstr "" msgid "Enter job information details in the recruitment tab." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:149 +#: ../../content/applications/hr/recruitment/new_job.rst:143 msgid "The :guilabel:`Process Details` section is a text field. All answers are typed in rather than selected from a drop-down menu. The text is displayed on the website exactly as it appears in this tab." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:156 +#: ../../content/applications/hr/recruitment/new_job.rst:150 msgid "Create interview form" msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:158 +#: ../../content/applications/hr/recruitment/new_job.rst:152 msgid "An *Interview Form* is used to determine if a candidate is a good fit for a job position. Interview forms can be as specific or general as desired, and can take the form of a certification, an exam, or a general questionnaire. Interview forms are determined by the recruitment team." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:162 +#: ../../content/applications/hr/recruitment/new_job.rst:156 msgid "Before creating an interview form, ensure the proper settings are enabled. Navigate to :menuselection:`Recruitment app --> Configuration --> Settings`, and under the :guilabel:`Recruitment Process` section, ensure the :guilabel:`Send Interview Survey` option is enabled." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:167 +#: ../../content/applications/hr/recruitment/new_job.rst:161 msgid "Since there are no preconfigured forms in Odoo, all interview forms must be created. To create an interview form, start from the :guilabel:`Recruitment` tab of the :guilabel:`Job Position` form. In the :guilabel:`Interview Form` field, enter a name for the new interview form. As the name is typed, several options populate beneath the entry: :guilabel:`Create (interview form name)`, :guilabel:`Search More...`, and :guilabel:`Create and edit...`. Click :guilabel:`Create and edit...` and a :guilabel:`Create Interview Form` pop-up window appears." msgstr "" @@ -19465,11 +20410,11 @@ msgstr "" msgid "The blank interview form pop-up window." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:178 +#: ../../content/applications/hr/recruitment/new_job.rst:172 msgid "The option :guilabel:`Search More...` only appears if there are any interview forms already created. If no interview forms exist, the only options available are :guilabel:`Create (interview form name)`, and :guilabel:`Create and edit...`." msgstr "" -#: ../../content/applications/hr/recruitment/new_job.rst:182 +#: ../../content/applications/hr/recruitment/new_job.rst:176 msgid "Proceed to fill out the interview form pop-up window as a typical survey. For specific directions on how to create a survey, refer to the :doc:`survey essentials <../../marketing/surveys/create>` document, which provides step-by-step instructions on how to create and configure a survey." msgstr "" @@ -19569,120 +20514,328 @@ msgstr "" msgid ":guilabel:`Department`: The department the job position falls under." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:84 -msgid ":guilabel:`Contract Start Date`: The date the proposed contract takes effect. The default date is the current date. To modify the date, click on the displayed date to reveal a calendar popover window. Navigate to the desired month, then click the day to select the date." +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:84 +msgid ":guilabel:`Contract Start Date`: The date the proposed contract takes effect. The default date is the current date. To modify the date, click on the displayed date to reveal a calendar popover window. Navigate to the desired month, then click the day to select the date." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:87 +msgid ":guilabel:`Offer Create Date`: The day the offer is created, By default, the current date populates this field and *cannot* be modified." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:89 +msgid ":guilabel:`Offer Validity Date`: The last day the offer is valid. After this date the contract cannot be signed." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:91 +msgid ":guilabel:`Link`: The link to the contract being sent to the candidate." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:92 +msgid ":guilabel:`Validity Days Count`: The number of days the contract is valid. The default expiration date is `30` days. Modify the expiration date, if desired." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:94 +msgid ":guilabel:`Applicant`: The name of the applicant appears in this field, and cannot be modified." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:97 +msgid "Send offer" +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:99 +msgid "Once all desired modifications have been made to the :guilabel:`Offer for (applicant's email)` page, click the :guilabel:`Send By Email` button to reveal an email pop-up window." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:102 +msgid "The default `Recruitment: Your Salary Package` email template is used, and the :guilabel:`To`, :guilabel:`Subject`, and email body are pre-populated based on the email template." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:105 +msgid "If any attachments need to be added, click the :icon:`fa-paperclip` :guilabel:`(paperclip)` button, and a file explorer window appears. Navigate to the desired file, then click :guilabel:`Open` to attach it to the email. The attachment loads, and is listed at the bottom of the email body." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:109 +msgid "Once the email is ready to send, click :guilabel:`Send`. The email pop-up window closes, and an :icon:`fa-handshake-o` :guilabel:`Offers` smart button appears at the top of the applicant's card." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:113 +msgid "To send an offer, ensure the **Sign** application is installed. This is necessary, so the offer can be sent to the applicant by the recruiter, and they can actually sign the offer. The applicant does **not** need any software installed to sign the offer." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:-1 +msgid "Send an email to the applicant with a link to the offered salary." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:121 +msgid "Configure your package" +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:123 +msgid "If applicable, the applicant can modify their salary package. This option is not available for all localizations. Depending on where the company is located, this option may not be available." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:126 +msgid "The email template includes a :guilabel:`Configure your package` button. This link takes the applicant to a webpage, where they can modify the proposed salary package, and enter their personal information." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:130 +msgid "Once the applicant is hired, the personal information entered on the webpage is imported to their employee record, when created." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:133 +msgid "Once all the information is completed, the applicant can then accept the offer by clicking the :guilabel:`Review Contract & Sign` button to accept the contract, and sign it using the **Sign** application." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:138 +msgid "Management signatures" +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:140 +msgid "Once the applicant has signed the contract, the next step is for the person responsible within the company (the :guilabel:`HR Responsible`) must then sign the contract." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:143 +msgid "The person responsible for signing the contract receives an activity alert that their signature is requested of them in the **Sign** app." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:149 +msgid "Contract signed" +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:151 +msgid "Once all parties have fully signed the contract, the applicant is automatically moved to the :guilabel:`Contract Signed` stage, and a green :guilabel:`HIRED` banner appears in the top-right of both the applicant's card and form." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:-1 +msgid "Hired banner in the top-right corner of applicant card." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:161 +msgid "Create employee" +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:163 +msgid "Once the applicant has been hired, the next step is to create their employee record. Click the :guilabel:`Create Employee` button in the top-left corner of the hired applicant's form." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:166 +msgid "An employee form appears, with information from the applicant's card, and the employee contract." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:168 +msgid "Fill out the rest of the employee form. For detailed information on the fields, refer to the :doc:`../employees/new_employee` documentation." +msgstr "" + +#: ../../content/applications/hr/recruitment/offer_job_positions.rst:171 +msgid "Once completed, the employee record is saved in the **Employees** app." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:3 +msgid "Post job positions" +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:5 +msgid "After a job position has been :doc:`created and configured `, the next step is to share it, so that prospective applicants can apply." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:8 +msgid "Job positions can be shared on the :ref:`company website ` or on :ref:`job boards `." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:14 +msgid "Publish to website" +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:16 +msgid "To publish a job listing on the company's website, first a setting must be enabled in the **Recruitment** app. Navigate to :menuselection:`Recruitment app --> Configuration --> Settings`, and enable the :guilabel:`Online Posting` option. Click the :guilabel:`Save` button after making any changes." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:22 +msgid "The :guilabel:`Online Posting` is only available if the :doc:`Website <../../websites/website>` application is also installed." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:25 +msgid "Once the setting has been enabled, open the main **Recruitment** dashboard by navigating to :menuselection:`Recruitment app --> Applications --> By Job Position`. A toggle appears in the lower-left corner of every job position card, and indicates whether the role is :guilabel:`Not Published` or :guilabel:`Published`." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:30 +msgid "Click on the toggle to change the current state of the job position. When a job position is published, a green :guilabel:`PUBLISHED` banner appears in the top-right corner of the card." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:33 +msgid "To view the listing on the website, click the :icon:`oi-launch` :guilabel:`Job Page` in the lower-right corner of the job card." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:39 +msgid "Post on job boards" +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:41 +msgid "Posting a job on a job board is an effective way to reach a wider audience, and attract more candidates." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:45 +msgid "Check back frequently for more updates, as more job boards are added." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:48 +msgid "Job board settings" +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:50 +msgid "To publish a job listing onto a job board outside of Odoo, first a setting must be configured in the **Recruitment** app. Navigate to :menuselection:`Recruitment app --> Configuration --> Settings`, and click :icon:`oi-arrow-right` :guilabel:`Choose a Job Board`." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:54 +msgid "This loads a page displaying the :guilabel:`Recruitment Integration Monster` module. Click :guilabel:`Activate` to install the module." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:58 +msgid "If the :guilabel:`Recruitment Integration Monster` module is already installed, no :guilabel:`Activate` button appears, only a :guilabel:`Module Info` button." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:61 +msgid "After the module is installed, the database reloads to the main dashboard. Open the **Recruitment** app, and navigate to :menuselection:`Configuration --> Settings`. A :guilabel:`Monster Credentials` section appears in the :guilabel:`Job Posting` section." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:65 +msgid "Enter the :guilabel:`Username` and :guilabel:`Password` for Monster in the corresponding fields, then click the :guilabel:`Save` button." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:69 +msgid "Publish on job board" +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:71 +msgid "Once the credentials have been configured for the job board, it is possible to post a job position. Navigate to the **Recruitment** app dashboard, and click :guilabel:`# To Recruit` on the desired job card." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:75 +msgid "Click the :guilabel:`Publish on Job Board` button, and a :guilabel:`Publish on Job Board` form loads in a pop-up window. Fill out the following information on the form:" +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:78 +msgid ":guilabel:`Job`: The name of the job position appears here by default, and cannot be modified." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:79 +msgid ":guilabel:`Job Board`: Using the drop-down menu, select the job board being posted to." +msgstr "" + +#: ../../content/applications/hr/recruitment/post_job.rst:80 +msgid ":guilabel:`Apply Method`: Click the desired radio button to determine how applicants apply for the position." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:87 -msgid ":guilabel:`Offer Create Date`: The day the offer is created, By default, the current date populates this field and *cannot* be modified." +#: ../../content/applications/hr/recruitment/post_job.rst:83 +msgid ":guilabel:`Send an Email`: Select this for applicants to apply for the job via email." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:89 -msgid ":guilabel:`Offer Validity Date`: The last day the offer is valid. After this date the contract cannot be signed." +#: ../../content/applications/hr/recruitment/post_job.rst:84 +msgid ":guilabel:`Redirect to company's website`: Select this for applicants to apply for the job via the company website." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:91 -msgid ":guilabel:`Link`: The link to the contract being sent to the candidate." +#: ../../content/applications/hr/recruitment/post_job.rst:87 +msgid ":guilabel:`Email` or :guilabel:`Job url`: The selected :guilabel:`Apply Method` determines which field appears. The field is populated with the information from the job card, if available. Make any desired modifications to this field, for example enter a tracking url for the job board listing." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:92 -msgid ":guilabel:`Validity Days Count`: The number of days the contract is valid. The default expiration date is `30` days. Modify the expiration date, if desired." +#: ../../content/applications/hr/recruitment/post_job.rst:91 +msgid ":guilabel:`From` and :guilabel:`to`: Using the calendar selector, select the date the list should be posted to the job board, in the :guilabel:`From` field. The :guilabel:`to` field says :guilabel:`No Limit`, by default. If the job position should be removed from the job board on a specific date, enter it in the second field." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:94 -msgid ":guilabel:`Applicant`: The name of the applicant appears in this field, and cannot be modified." +#: ../../content/applications/hr/recruitment/post_job.rst:95 +msgid ":guilabel:`Description` tab: The description from the job card populates this tab, by default. Make any desired changes to it in this section. This is what appears on the job board." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:97 -msgid "Send offer" +#: ../../content/applications/hr/recruitment/post_job.rst:99 +msgid "Click the :guilabel:`Generate Description` (:icon:`fa-magic` :guilabel:`AI`) to use AI to edit or create the job description." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:99 -msgid "Once all desired modifications have been made to the :guilabel:`Offer for (applicant's email)` page, click the :guilabel:`Send By Email` button to reveal an email pop-up window." +#: ../../content/applications/hr/recruitment/post_job.rst:102 +msgid "Once the listing is ready, click the :guilabel:`Post` button. After the post has been published to a job board, the page reloads to the :guilabel:`Job Boards Posts` page, and the new post appears in a Kanban card." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:102 -msgid "The default `Recruitment: Your Salary Package` email template is used, and the :guilabel:`To`, :guilabel:`Subject`, and email body are pre-populated based on the email template." +#: ../../content/applications/hr/recruitment/post_job.rst:-1 +msgid "A job board listing form filled out." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:105 -msgid "If any attachments need to be added, click the :icon:`fa-paperclip` :guilabel:`(paperclip)` button, and a file explorer window appears. Navigate to the desired file, then click :guilabel:`Open` to attach it to the email. The attachment loads, and is listed at the bottom of the email body." +#: ../../content/applications/hr/recruitment/post_job.rst:110 +msgid "Job board emails" msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:109 -msgid "Once the email is ready to send, click :guilabel:`Send`. The email pop-up window closes, and an :icon:`fa-handshake-o` :guilabel:`Offers` smart button appears at the top of the applicant's card." +#: ../../content/applications/hr/recruitment/post_job.rst:112 +msgid "When posting job positions on a job board, like Indeed or LinkedIn, the job board posts the job position, and typically allows the website visitor to apply to the job directly from the job board." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:113 -msgid "To send an offer, ensure the **Sign** application is installed. This is necessary, so the offer can be sent to the applicant by the recruiter, and they can actually sign the offer. The applicant does **not** need any software installed to sign the offer." +#: ../../content/applications/hr/recruitment/post_job.rst:115 +msgid "When someone applies to a job directly from a job board, an email is sent to Odoo from a specific email address, such as `jobs-listings@linkedin.com`. The email uses regular expression (regex) rules, which are instructions to match text in the email, and map it to specific fields in Odoo." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:-1 -msgid "Send an email to the applicant with a link to the offered salary." +#: ../../content/applications/hr/recruitment/post_job.rst:119 +msgid "When Odoo receives an email from the job board's corresponding email address, it runs the regex rule, and pulls applicant information from the email, when creating an applicant record." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:121 -msgid "Configure your package" +#: ../../content/applications/hr/recruitment/post_job.rst:123 +msgid "The regex rule for :guilabel:`LinkedIn` (emails received from: `jobs-listings@linkedin.com`) is :guilabel:`New application:.*from (.*)`. This rule tells Odoo to capture everything after the word `from` when creating the applicant record." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:123 -msgid "If applicable, the applicant can modify their salary package. This option is not available for all localizations. Depending on where the company is located, this option may not be available." +#: ../../content/applications/hr/recruitment/post_job.rst:127 +msgid "An email subject of `New application: Job ID 123 from John Doe` will capture `John Doe` and create an applicant record for `John Doe`." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:126 -msgid "The email template includes a :guilabel:`Configure your package` button. This link takes the applicant to a webpage, where they can modify the proposed salary package, and enter their personal information." +#: ../../content/applications/hr/recruitment/post_job.rst:130 +msgid "To view the currently configured job board emails, navigate to :menuselection:`Recruitment app --> Configuration --> Emails`. Three emails come preconfigured in the database; for :guilabel:`LinkedIn`, :guilabel:`Jobsdb`, and :guilabel:`Indeed`." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:130 -msgid "Once the applicant is hired, the personal information entered on the webpage is imported to their employee record, when created." +#: ../../content/applications/hr/recruitment/post_job.rst:135 +msgid "Create job board emails" msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:133 -msgid "Once all the information is completed, the applicant can then accept the offer by clicking the :guilabel:`Review Contract & Sign` button to accept the contract, and sign it using the **Sign** application." +#: ../../content/applications/hr/recruitment/post_job.rst:137 +msgid "To create a new job board email, navigate to :menuselection:`Recruitment app --> Configuration --> Emails`. Click the :guilabel:`New` button, and a blank :guilabel:`Emails` form loads." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:138 -msgid "Management signatures" +#: ../../content/applications/hr/recruitment/post_job.rst:140 +msgid "Enter the :guilabel:`Name` for the platform, such as `Glassdoor`, in the corresponding field. Next, enter the email address the applications will come from, in the :guilabel:`Email` field. Last, enter the :guilabel:`regex` rules in the corresponding field." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:140 -msgid "Once the applicant has signed the contract, the next step is for the person responsible within the company (the :guilabel:`HR Responsible`) must then sign the contract." +#: ../../content/applications/hr/recruitment/post_job.rst:145 +msgid "View job board listings" msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:143 -msgid "The person responsible for signing the contract receives an activity alert that their signature is requested of them in the **Sign** app." +#: ../../content/applications/hr/recruitment/post_job.rst:147 +msgid "To view all the job positions that have been posted to a job board, navigate to :menuselection:`Recruitment --> Applications --> Job Boards Posts`. This presents the :guilabel:`Job Boards Posts` dashboard and all job board postings." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:149 -msgid "Contract signed" +#: ../../content/applications/hr/recruitment/post_job.rst:151 +msgid "Each listing is displayed in an individual Kanban card, with the following information:" msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:151 -msgid "Once all parties have fully signed the contract, the applicant is automatically moved to the :guilabel:`Contract Signed` stage, and a green :guilabel:`HIRED` banner appears in the top-right of both the applicant's card and form." +#: ../../content/applications/hr/recruitment/post_job.rst:153 +msgid ":guilabel:`Job Board Icon`: the icon for the job board where the listing is posted." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:-1 -msgid "Hired banner in the top-right corner of applicant card." +#: ../../content/applications/hr/recruitment/post_job.rst:154 +msgid ":guilabel:`Job Board Listing Title`: the job position title and job board name." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:161 -msgid "Create employee" +#: ../../content/applications/hr/recruitment/post_job.rst:155 +msgid ":guilabel:`From`: the date the listing was published." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:163 -msgid "Once the applicant has been hired, the next step is to create their employee record. Click the :guilabel:`Create Employee` button in the top-left corner of the hired applicant's form." +#: ../../content/applications/hr/recruitment/post_job.rst:156 +msgid ":guilabel:`To`: the date the listing will be removed from the job board." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:166 -msgid "An employee form appears, with information from the applicant's card, and the employee contract." +#: ../../content/applications/hr/recruitment/post_job.rst:157 +msgid ":guilabel:`User Icon`: the icon of the user who posted the listing." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:168 -msgid "Fill out the rest of the employee form. For detailed information on the fields, refer to the :doc:`../employees/new_employee` documentation." +#: ../../content/applications/hr/recruitment/post_job.rst:159 +msgid "Click on any Kanban card to view the details for the specific job board listing." msgstr "" -#: ../../content/applications/hr/recruitment/offer_job_positions.rst:171 -msgid "Once completed, the employee record is saved in the **Employees** app." +#: ../../content/applications/hr/recruitment/post_job.rst:-1 +msgid "All job positions posted to a job board." msgstr "" #: ../../content/applications/hr/recruitment/recruitment-flow.rst:3 @@ -20569,87 +21722,87 @@ msgstr "" msgid "Additionally, :guilabel:`Maggie Davidsons` had the highest increase in number of hired applicants during the third quarter, while their number of refused applicants went down." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:3 -msgid "Time in stage analysis" +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:3 +msgid "Velocity analysis" msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:5 -msgid "The *Time In Stage Analysis* report provides information on how long applicants stay in each stage of the recruitment process. This is important, as every job position has specific :ref:`process details ` that state the length of time applicants should expect to wait between specific stages." +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:5 +msgid "The *Velocity Analysis* report provides information on how long applicants stay in each stage of the recruitment process. This is important, as every job position has specific :ref:`process details ` that state the length of time applicants should expect to wait between specific stages." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:10 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:10 msgid "Knowing how long applicants remain in each stage can help highlight possible bottlenecks. Analyzing this data allows the recruitment team to assess each stage, identify any issues, and pivot their strategies to move applicants through each stage, within the expected time interval." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:15 -msgid "Time in stage analysis report" +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:15 +msgid "Velocity analysis report" msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:17 -msgid "To access the report, navigate to :menuselection:`Recruitment app --> Reporting --> Time in Stage Analysis`. By default, the report displays data from all job positions, with the stages populating the x-axis, and the number of days populating the y-axis, in a :icon:`fa-line-chart` :guilabel:`(Line Chart)`." +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:17 +msgid "To access the report, navigate to :menuselection:`Recruitment app --> Reporting --> Velocity Analysis`. By default, the report displays data for all job positions, with the stages populating the x-axis, and the number of days populating the y-axis, in a :icon:`fa-line-chart` :guilabel:`(Line Chart)`." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:22 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:22 msgid "The default filter is :guilabel:`Last 365 Days Applicant`, showing information for the last 365 days." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:25 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:25 msgid "Hover over a stage in the line chart to reveal a popover window listing all the job positions within it, and the average number of days each job position sits in each stage." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:28 -msgid "For a more visually digestible view of the information in the :guilabel:`Time In Stage Analysis` report, click the :icon:`fa-bar-chart` :guilabel:`(Bar Chart)` icon in the upper-left corner. This displays all the information in a bar chart." +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:28 +msgid "For a more visually digestible view of the information in the :guilabel:`Velocity Analysis` report, click the :icon:`fa-bar-chart` :guilabel:`(Bar Chart)` icon in the upper-left corner. This displays all the information in a bar chart." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:32 -msgid "In this view, it is easier to visualize the differences between the job positions, regarding how long applicants stay in each stage. From this view, recruiters can more easily determine which job positions have delays or bottlenecks at certain stages." +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:32 +msgid "In this view, it is easier to visualize the differences between the job positions, regarding how long applicants stay in each stage. From this view, recruiters can determine which job positions have delays or bottlenecks at certain stages." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:-1 -msgid "The bar chart view of the Time In Stage Analysis report." +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:-1 +msgid "The bar chart view of the Velocity Analysis report." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:41 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:40 msgid "Use case: comparing times by month" msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:43 -msgid "With the :guilabel:`Time In Stage Analysis` report, it is possible to see if there are certain months where applicants take longer to be moved through the pipeline. To view this data, switch to the :icon:`oi-view-pivot` :guilabel:`(Pivot)` view in the upper-right corner." +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:42 +msgid "With the :guilabel:`Velocity Analysis` report, it is possible to see if there are certain months where applicants take longer to be moved through the pipeline. To view this data, switch to the :icon:`oi-view-pivot` :guilabel:`(Pivot)` view in the upper-right corner." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:47 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:46 msgid "This presents the data in a detailed pivot table, with the rows representing the different job positions, and the columns representing the stages. The average :guilabel:`Days in Stage` populates the various boxes." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:52 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:51 msgid "If a field is empty, it indicates no applicant has been in that stage. Instead, all applicants moved from a previous stage without being placed in the stage with an empty field." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:-1 -msgid "The pivot table view of the Time In Stage Analysis report." +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:-1 +msgid "The pivot table view of the Velocity Analysis report." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:59 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:57 msgid "Click :icon:`fa-minus-square-o` :guilabel:`Total` above the job position rows to collapse the information. Next, click :icon:`fa-plus-square` :guilabel:`Total` again, revealing a drop-down menu. Click :guilabel:`Add Custom Group` :icon:`fa-caret-down` at the bottom of the list, revealing further grouping options. Click :guilabel:`Start Date` from the expanded list." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:64 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:62 msgid "After doing so, the data presented is grouped with the various months from the previous 365 days for the rows, leaving the :guilabel:`Days In Stage` as the columns." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:-1 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:-1 msgid "The pivot table showing the months averages for times in stage." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:71 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:68 msgid "In this example, :guilabel:`July 2024` had the longest time that applicants spent in each stage, on average. In addition, the :guilabel:`Contract Proposal` stage had the longest wait time in July, with an average of :guilabel:`31.62` days in that stage." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:75 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:72 msgid "While this report does not display the reasons applicants stayed in the various stages for these lengths of time, it can be helpful to know when delays occur." msgstr "" -#: ../../content/applications/hr/recruitment/time_in_stage.rst:79 +#: ../../content/applications/hr/recruitment/velocity_analysis.rst:76 msgid ":doc:`Essentials reporting documentation <../../essentials/reporting>`" msgstr "" @@ -21512,7 +22665,7 @@ msgid "Users can :doc:`request time off <../hr/time_off/request_time_off>`, and msgstr "" #: ../../content/applications/hr/time_off.rst:15 -msgid "Detailed :ref:`reports ` can be run to see how much time off (and what kinds of time off) are being used, :ref:`accrual plans ` can be created, and :ref:`public holidays ` can be set." +msgid "Detailed :doc:`reports ` can be run to see how much time off (and what kinds of time off) are being used, :ref:`accrual plans ` can be created, and :ref:`public holidays ` can be set." msgstr "" #: ../../content/applications/hr/time_off.rst:20 @@ -21559,159 +22712,159 @@ msgstr "" msgid "The only **required** fields on the time off type form are the name of the :guilabel:`Time Off Type`, the :guilabel:`Take Time Off In`, and the :guilabel:`Kind of Time Off`. In addition, the :guilabel:`Time Off Requests` and :guilabel:`Allocation Requests` sections **must** be configured." msgstr "" -#: ../../content/applications/hr/time_off.rst:67 +#: ../../content/applications/hr/time_off.rst:69 msgid "Time off requests section" msgstr "" -#: ../../content/applications/hr/time_off.rst:69 +#: ../../content/applications/hr/time_off.rst:71 msgid "This section determines how approvals are handled for time off requests for this time off type." msgstr "" -#: ../../content/applications/hr/time_off.rst:71 +#: ../../content/applications/hr/time_off.rst:73 msgid ":guilabel:`Approval`: select what specific kind of approval is required for the time off type. The options are:" msgstr "" -#: ../../content/applications/hr/time_off.rst:74 +#: ../../content/applications/hr/time_off.rst:76 msgid ":guilabel:`No Validation`: No approvals are required when requesting this type of time off. The time off request is automatically approved." msgstr "" -#: ../../content/applications/hr/time_off.rst:76 +#: ../../content/applications/hr/time_off.rst:78 msgid ":guilabel:`By Time Off Officer`: Only the specified :ref:`Time Off Officer `, set on this form in the :guilabel:`Notified Time Off Officer` field, is required to approve the time off request. This option is selected, by default." msgstr "" -#: ../../content/applications/hr/time_off.rst:79 +#: ../../content/applications/hr/time_off.rst:81 msgid ":guilabel:`By Employee's Approver`: Only the employee's specified approver for time off, which is set on the *Work Information* tab on the :ref:`employee's form `, is required to approve the time off request." msgstr "" -#: ../../content/applications/hr/time_off.rst:82 +#: ../../content/applications/hr/time_off.rst:84 msgid ":guilabel:`By Employee's Approver and Time Off Officer`: Both the employee's :ref:`specified time off approver ` and the :ref:`Time Off Officer ` are required to approve the time off request." msgstr "" -#: ../../content/applications/hr/time_off.rst:87 +#: ../../content/applications/hr/time_off.rst:89 msgid "Allocation requests section" msgstr "" -#: ../../content/applications/hr/time_off.rst:89 +#: ../../content/applications/hr/time_off.rst:91 msgid "This section determines how allocation requests are handled for this time off type." msgstr "" -#: ../../content/applications/hr/time_off.rst:91 +#: ../../content/applications/hr/time_off.rst:93 msgid ":guilabel:`Requires allocation`: If the time off must be allocated to employees, select :guilabel:`Yes`. If the time off can be requested without time off being previously allocated, select :guilabel:`No Limit`. If :guilabel:`No Limit` is selected, the following options do not appear on the form." msgstr "" -#: ../../content/applications/hr/time_off.rst:95 +#: ../../content/applications/hr/time_off.rst:97 msgid ":guilabel:`Employee Requests`: Select :guilabel:`Extra Days Requests Allowed` if the employee is able to request more time off than was allocated." msgstr "" -#: ../../content/applications/hr/time_off.rst:98 +#: ../../content/applications/hr/time_off.rst:100 msgid "If employees should **not** be able to make requests for more time off than what was allocated, select the :guilabel:`Not Allowed` option." msgstr "" -#: ../../content/applications/hr/time_off.rst:102 +#: ../../content/applications/hr/time_off.rst:104 msgid "Ten days are allocated to the employee for this particular type of time off, and the :guilabel:`Extra Days Requests Allowed` option is enabled. The employee wants to take a vacation for twelve days. They may submit a request for two additional days, since the :guilabel:`Extra Days Requests Allowed` option is enabled." msgstr "" -#: ../../content/applications/hr/time_off.rst:108 +#: ../../content/applications/hr/time_off.rst:110 msgid "It is important to note that requesting additional time off does **not** guarantee that time off is granted." msgstr "" -#: ../../content/applications/hr/time_off.rst:111 +#: ../../content/applications/hr/time_off.rst:113 msgid ":guilabel:`Approval`: Select the type of approvals required for the allocation of this particular time off type." msgstr "" -#: ../../content/applications/hr/time_off.rst:114 +#: ../../content/applications/hr/time_off.rst:116 msgid ":guilabel:`No Validation`: No approvals are required when requesting additional allocations for the time off type. The allocation request is automatically approved." msgstr "" -#: ../../content/applications/hr/time_off.rst:116 +#: ../../content/applications/hr/time_off.rst:118 msgid ":guilabel:`By Time Off Officer`: Only the specified :ref:`Time Off Officer `, set on this form in the :guilabel:`Notified Time Off Officer` field, is required to approve the allocation request. This option is selected, by default." msgstr "" -#: ../../content/applications/hr/time_off.rst:119 +#: ../../content/applications/hr/time_off.rst:121 msgid ":guilabel:`By Employee's Approver`: Only the employee's specified approver for time off, which is set on the *Work Information* tab on the :ref:`employee's form `, is required to approve the allocation request." msgstr "" -#: ../../content/applications/hr/time_off.rst:122 +#: ../../content/applications/hr/time_off.rst:124 msgid ":guilabel:`By Employee's Approver and Time Off Officer`: Both the employee's :ref:`specified time off approver ` and the :ref:`Time Off Officer ` are required to approve the allocation request." msgstr "" -#: ../../content/applications/hr/time_off.rst:128 +#: ../../content/applications/hr/time_off.rst:129 msgid "Configuration section" msgstr "" -#: ../../content/applications/hr/time_off.rst:130 +#: ../../content/applications/hr/time_off.rst:131 msgid "This section determines all other details regarding the time off type, aside from approvals and allocations. This includes how the time off must be taken (hours, half days, or days), if the time off is visible to other users, and how the time off affects the **Payroll** app." msgstr "" -#: ../../content/applications/hr/time_off.rst:136 +#: ../../content/applications/hr/time_off.rst:137 msgid ":guilabel:`Notified Time Off Officer`: Select the user who is notified and responsible for approving requests and allocations for this specific type of time off." msgstr "" -#: ../../content/applications/hr/time_off.rst:138 +#: ../../content/applications/hr/time_off.rst:139 msgid ":guilabel:`Take Time Off in`: Select the format the time off is requested in from the drop-down menu. The options are:" msgstr "" -#: ../../content/applications/hr/time_off.rst:141 +#: ../../content/applications/hr/time_off.rst:142 msgid ":guilabel:`Day`: if time off can only be requested in full day increments (8 hours)." msgstr "" -#: ../../content/applications/hr/time_off.rst:142 +#: ../../content/applications/hr/time_off.rst:143 msgid ":guilabel:`Half Day`: if time off can only be requested in half day increments (4 hours)." msgstr "" -#: ../../content/applications/hr/time_off.rst:143 +#: ../../content/applications/hr/time_off.rst:144 msgid ":guilabel:`Hours`: if the time off can be taken in hourly increments." msgstr "" -#: ../../content/applications/hr/time_off.rst:147 +#: ../../content/applications/hr/time_off.rst:148 msgid ":guilabel:`Deduct Extra Hours`: Enable this option if the time off request should factor in any extra time accrued by the employee." msgstr "" -#: ../../content/applications/hr/time_off.rst:151 +#: ../../content/applications/hr/time_off.rst:152 msgid "If an employee works two extra hours for the week, and requests five hours of time off, the request would be for three hours, since the two extra worked hours are used first, and deducted from the request." msgstr "" -#: ../../content/applications/hr/time_off.rst:155 +#: ../../content/applications/hr/time_off.rst:156 msgid ":guilabel:`Public Holiday Included`: Enable this option if public holidays should be excluded from a time off request." msgstr "" -#: ../../content/applications/hr/time_off.rst:159 +#: ../../content/applications/hr/time_off.rst:160 msgid "An employee in the United States requests time off for the week of July 4th, for a total of five days. Since the 4th of July is a holiday in the United States, the time off request is automatically modified for four days off instead of five. That is because the holiday is included, and the user does not need to use their own vacation time for a public holiday." msgstr "" -#: ../../content/applications/hr/time_off.rst:164 +#: ../../content/applications/hr/time_off.rst:165 msgid "This option reduces extra work for users, enabling them to make only one time off request for the entire week, instead of making two separate requests, one for the days *before* the holiday, and another one for the days *after* the holiday." msgstr "" -#: ../../content/applications/hr/time_off.rst:168 +#: ../../content/applications/hr/time_off.rst:169 msgid ":guilabel:`Allow To Attach Supporting Document`: Enable this option to allow the employee to attach documents to the time off request. This is useful in situations where documentation is required, such as long-term medical leave." msgstr "" -#: ../../content/applications/hr/time_off.rst:171 +#: ../../content/applications/hr/time_off.rst:172 msgid ":guilabel:`Kind of Time Off`: From the drop-down menu, select the type of time off, either :guilabel:`Worked Time` or :guilabel:`Absence`. :guilabel:`Worked Time` indicates the time off taken counts toward worked time for any type of accrual the employee is working towards, whereas :guilabel:`Absence` does not count toward any type of accrual." msgstr "" -#: ../../content/applications/hr/time_off.rst:175 +#: ../../content/applications/hr/time_off.rst:176 msgid ":guilabel:`Company`: If multiple companies are created in the database, and this time off type only applies to one company, select the company from the drop-down menu. If this field is left blank, the time off type applies to all companies in the database. This field **only** appears in a multi-company database." msgstr "" -#: ../../content/applications/hr/time_off.rst:181 +#: ../../content/applications/hr/time_off.rst:182 msgid "Negative cap section" msgstr "" -#: ../../content/applications/hr/time_off.rst:183 +#: ../../content/applications/hr/time_off.rst:184 msgid "Enable the :guilabel:`Allow Negative Cap` option if employees are able to request more time off than they currently have, allowing a negative balance. If enabled, an :guilabel:`Maximum Excess Amount` field appears. In this field, enter the maximum amount of negative time allowed, in days." msgstr "" -#: ../../content/applications/hr/time_off.rst:188 +#: ../../content/applications/hr/time_off.rst:189 msgid "Sara currently has three days of the time off type `Vacation`. She is planning a trip that requires five days of time off." msgstr "" -#: ../../content/applications/hr/time_off.rst:191 +#: ../../content/applications/hr/time_off.rst:192 msgid "The `Vacation` time off type has the :guilabel:`Allow Negative Cap` option enabled, and the :guilabel:`Maximum Excess Amount` is set to five." msgstr "" -#: ../../content/applications/hr/time_off.rst:194 +#: ../../content/applications/hr/time_off.rst:195 msgid "These settings allow Sara to submit a request for five days of the `Vacation` time off type. If approved, her `Vacation` time off balance will be negative two (-2) days." msgstr "" @@ -21720,43 +22873,43 @@ msgid "The top half of the time off type form, with all the information filled o "off." msgstr "" -#: ../../content/applications/hr/time_off.rst:202 +#: ../../content/applications/hr/time_off.rst:203 msgid "Payroll section" msgstr "" -#: ../../content/applications/hr/time_off.rst:204 +#: ../../content/applications/hr/time_off.rst:205 msgid "If the time off type should create :doc:`../hr/payroll/work_entries` in the **Payroll** app, select the :guilabel:`Work Entry Type` from the drop-down list." msgstr "" -#: ../../content/applications/hr/time_off.rst:208 +#: ../../content/applications/hr/time_off.rst:209 msgid "Timesheets section" msgstr "" -#: ../../content/applications/hr/time_off.rst:211 +#: ../../content/applications/hr/time_off.rst:212 msgid "The :guilabel:`Timesheets` section only appears if the user is in developer mode. Refer to the :ref:`developer-mode` document for details on how to access the developer mode." msgstr "" -#: ../../content/applications/hr/time_off.rst:214 +#: ../../content/applications/hr/time_off.rst:215 msgid "When an employee takes time off, and is also using timesheets, Odoo creates entries in the **Timesheets** app for the time off. This section defines how they are entered." msgstr "" -#: ../../content/applications/hr/time_off.rst:217 +#: ../../content/applications/hr/time_off.rst:218 msgid ":guilabel:`Project`: Select the project the time off type entries appear in." msgstr "" -#: ../../content/applications/hr/time_off.rst:218 +#: ../../content/applications/hr/time_off.rst:219 msgid ":guilabel:`Task`: Select the task that appears in the timesheet for this time off type. The default options are: :guilabel:`Time Off`, :guilabel:`Meeting`, or :guilabel:`Training`." msgstr "" -#: ../../content/applications/hr/time_off.rst:222 +#: ../../content/applications/hr/time_off.rst:223 msgid "Display option section" msgstr "" -#: ../../content/applications/hr/time_off.rst:224 +#: ../../content/applications/hr/time_off.rst:225 msgid ":guilabel:`Color`: Select a color to be used in the **Time Off** app dashboard." msgstr "" -#: ../../content/applications/hr/time_off.rst:225 +#: ../../content/applications/hr/time_off.rst:226 msgid ":guilabel:`Cover Image`: Select an icon to be used in the **Time Off** app dashboard." msgstr "" @@ -21765,75 +22918,75 @@ msgid "The lower half of the time off type form, with all the information filled "off." msgstr "" -#: ../../content/applications/hr/time_off.rst:234 +#: ../../content/applications/hr/time_off.rst:235 msgid "Accrual plans" msgstr "" -#: ../../content/applications/hr/time_off.rst:236 +#: ../../content/applications/hr/time_off.rst:237 msgid "Some time off is earned through an accrual plan, meaning that for every specified amount of time an employee works (hour, day, week, etc), they earn or *accrue* a specified amount of time off." msgstr "" -#: ../../content/applications/hr/time_off.rst:240 +#: ../../content/applications/hr/time_off.rst:241 msgid "If an employee accrues a vacation day for every week they work, they would earn 0.2 vacation days for each hour they work. At the end of a forty hour work week, they would earn one whole vacation day (8 hours)." msgstr "" -#: ../../content/applications/hr/time_off.rst:245 +#: ../../content/applications/hr/time_off.rst:246 msgid "Create accrual plan" msgstr "" -#: ../../content/applications/hr/time_off.rst:247 +#: ../../content/applications/hr/time_off.rst:248 msgid "To create a new accrual plan, navigate to :menuselection:`Time Off app --> Configuration --> Accrual Plans`. Then, click the :guilabel:`New` button, which reveals a blank accrual plan form." msgstr "" -#: ../../content/applications/hr/time_off.rst:252 +#: ../../content/applications/hr/time_off.rst:253 msgid ":guilabel:`Name`: Enter the accrual plan name." msgstr "" -#: ../../content/applications/hr/time_off.rst:253 +#: ../../content/applications/hr/time_off.rst:254 msgid ":guilabel:`Accrued Gain Time`: Select when the employee begins to accrue time off, either :guilabel:`At the start of the accrual period` or :guilabel:`At the end of the accrual period`." msgstr "" -#: ../../content/applications/hr/time_off.rst:255 +#: ../../content/applications/hr/time_off.rst:256 msgid ":guilabel:`Carry-Over Time`: Select when the employee received previously earned time. The options are:" msgstr "" -#: ../../content/applications/hr/time_off.rst:258 +#: ../../content/applications/hr/time_off.rst:259 msgid ":guilabel:`At the start of the year`: Select this if the accrual rolls over on January 1 of the upcoming year." msgstr "" -#: ../../content/applications/hr/time_off.rst:260 +#: ../../content/applications/hr/time_off.rst:261 msgid ":guilabel:`At the allocation date`: Select this if the accrual rolls over as soon as time is allocated to the employee." msgstr "" -#: ../../content/applications/hr/time_off.rst:262 +#: ../../content/applications/hr/time_off.rst:263 msgid ":guilabel:`Other`: Select this option if neither of the other two options are applicable. When selected, a :guilabel:`Carry-Over Date` field appears. Select the date using the two drop-down menus, one for the day and one for the month." msgstr "" -#: ../../content/applications/hr/time_off.rst:266 +#: ../../content/applications/hr/time_off.rst:267 msgid ":guilabel:`Based on worked time`: Enable this option if time off accrual is determined by the employee's worked hours. Days **not** considered as worked time do **not** contribute to the accrual plan in Odoo." msgstr "" -#: ../../content/applications/hr/time_off.rst:271 +#: ../../content/applications/hr/time_off.rst:272 msgid "An employee is granted time off from an accrual plan configured to accrue one day of vacation for every five days worked. The accrual plan is based on the employee's worked time (the :guilabel:`Based on worked time` checkbox is ticked), which means they **only** earn vacation time for the five weekdays they work, *not* the entire seven day week period." msgstr "" -#: ../../content/applications/hr/time_off.rst:276 +#: ../../content/applications/hr/time_off.rst:277 msgid "The employee works standard 40-hour weeks. According to the accrual plan, they should earn four vacation days per month." msgstr "" -#: ../../content/applications/hr/time_off.rst:279 +#: ../../content/applications/hr/time_off.rst:280 msgid "The employee takes five days off using a :ref:`time off type ` with the :guilabel:`Kind of Time Off` set as an :guilabel:`Absence`. Because the plan grants vacation only for worked time, those five days do not count toward accrual." msgstr "" -#: ../../content/applications/hr/time_off.rst:283 +#: ../../content/applications/hr/time_off.rst:284 msgid "As a result, the employee accrues only three vacation days that month instead of four." msgstr "" -#: ../../content/applications/hr/time_off.rst:285 +#: ../../content/applications/hr/time_off.rst:286 msgid ":guilabel:`Milestone Transition`: This field is **only** visible after a minimum of two :ref:`rules ` have been configured on the accrual plan. This selection determines when employees move up to a new milestone. If they qualify to change milestones in the middle of a pay period, decide whether the employee changes milestones :guilabel:`Immediately` or :guilabel:`After this accrual's period` (after the current pay period)." msgstr "" -#: ../../content/applications/hr/time_off.rst:290 +#: ../../content/applications/hr/time_off.rst:291 msgid ":guilabel:`Company`: This field **only** appears in a multi-company database. Using the drop-down menu, select the company the accrual plan applies to. If left blank, the accrual plan is available for all companies." msgstr "" @@ -21841,135 +22994,135 @@ msgstr "" msgid "An accrual plan form with all the entries filled out." msgstr "" -#: ../../content/applications/hr/time_off.rst:302 +#: ../../content/applications/hr/time_off.rst:303 msgid "Rules must be created in order for employees to accrue time off from the accrual plan." msgstr "" -#: ../../content/applications/hr/time_off.rst:304 +#: ../../content/applications/hr/time_off.rst:305 msgid "To create a new rule, click the :guilabel:`New Milestone` button in the gray :guilabel:`Rules` section, and a :guilabel:`Create Milestone` modal form appears." msgstr "" -#: ../../content/applications/hr/time_off.rst:311 +#: ../../content/applications/hr/time_off.rst:312 msgid ":guilabel:`Employee accrue`: Select the parameters for earned time off in this section." msgstr "" -#: ../../content/applications/hr/time_off.rst:313 +#: ../../content/applications/hr/time_off.rst:314 msgid "First, select either :guilabel:`Days` or :guilabel:`Hours` for the increment of accrued time using the drop-down menu." msgstr "" -#: ../../content/applications/hr/time_off.rst:316 +#: ../../content/applications/hr/time_off.rst:317 msgid "Next, enter the numerical amount of the selected parameter that is accrued. The numerical format is `X.XXXX`, so that partial days or hours can also be configured." msgstr "" -#: ../../content/applications/hr/time_off.rst:319 +#: ../../content/applications/hr/time_off.rst:320 msgid "Last, select how often the time is accrued using the drop-down menu. The default options are :guilabel:`Hourly`, :guilabel:`Daily`, :guilabel:`Weekly`, :guilabel:`Twice a month`, :guilabel:`Monthly`, :guilabel:`Twice a year`, and :guilabel:`Yearly`." msgstr "" -#: ../../content/applications/hr/time_off.rst:323 +#: ../../content/applications/hr/time_off.rst:324 msgid "Depending on which option is selected, additional fields may appear. For example, if :guilabel:`Twice a month` is selected, two additional fields appear, to specify the two days of each month the milestone occurs." msgstr "" -#: ../../content/applications/hr/time_off.rst:326 +#: ../../content/applications/hr/time_off.rst:327 msgid ":guilabel:`Cap accrued time`: If there is a maximum amount of time the employee can accrue with this plan, enable this option." msgstr "" -#: ../../content/applications/hr/time_off.rst:329 +#: ../../content/applications/hr/time_off.rst:330 msgid "When enabled, two additional fields appear to the right of the checkbox. The second field is populated with either :guilabel:`Days` or :guilabel:`Hours`, matching the selection made in the :ref:`Employee Accrue ` section." msgstr "" -#: ../../content/applications/hr/time_off.rst:333 +#: ../../content/applications/hr/time_off.rst:334 msgid "Enter a numerical value in the first field to specify the maximum amount of time that can be accrued, in the specified increments." msgstr "" -#: ../../content/applications/hr/time_off.rst:335 +#: ../../content/applications/hr/time_off.rst:336 msgid ":guilabel:`Start Accruing`: Enter the number and value of the time period that must pass before the employee starts to accumulate time off." msgstr "" -#: ../../content/applications/hr/time_off.rst:338 +#: ../../content/applications/hr/time_off.rst:339 msgid "Use the first field to enter a numerical value, then set the second field to the desired time increment (either :guilabel:`Days`, :guilabel:`Months`, or :guilabel:`Years`)." msgstr "" -#: ../../content/applications/hr/time_off.rst:340 +#: ../../content/applications/hr/time_off.rst:341 msgid ":guilabel:`Carry over`: select how any unused time off is handled. The options are either:" msgstr "" -#: ../../content/applications/hr/time_off.rst:342 +#: ../../content/applications/hr/time_off.rst:343 msgid ":guilabel:`None. Accrued time reset to 0`: Any unused time off is lost." msgstr "" -#: ../../content/applications/hr/time_off.rst:343 +#: ../../content/applications/hr/time_off.rst:344 msgid ":guilabel:`All accrued time carried over`: All unused time off is rolled over to the next calendar year." msgstr "" -#: ../../content/applications/hr/time_off.rst:345 +#: ../../content/applications/hr/time_off.rst:346 msgid ":guilabel:`Carry over with a maximum`: Unused time off is rolled over to the next calendar year, but there is a cap. An :guilabel:`Up to` field appears if this is selected." msgstr "" -#: ../../content/applications/hr/time_off.rst:348 +#: ../../content/applications/hr/time_off.rst:349 msgid "Enter the maximum number of :guilabel:`Hours` or :guilabel:`Days` that can roll over to the following year. The presented time increment is determined by how the :ref:`Employee Accrue ` section is configured." msgstr "" -#: ../../content/applications/hr/time_off.rst:352 +#: ../../content/applications/hr/time_off.rst:353 msgid "Any time off beyond this parameter is lost." msgstr "" -#: ../../content/applications/hr/time_off.rst:355 +#: ../../content/applications/hr/time_off.rst:356 msgid "If the :guilabel:`Carry over` field is set to :guilabel:`None. Accrued time reset to 0`, that rule *overrides* the :guilabel:`Carry-Over Time` set on the accrual plan." msgstr "" -#: ../../content/applications/hr/time_off.rst:358 +#: ../../content/applications/hr/time_off.rst:359 msgid "If a company creates an accrual plan, granting employees time off :guilabel:`At the start of the accrual period` (i.e., the beginning of the year), and sets the :guilabel:`Carry-Over Time` on the *accrual plan* to :guilabel:`At the start of the year`, it allows unused vacation time to rollover to the following year." msgstr "" -#: ../../content/applications/hr/time_off.rst:363 +#: ../../content/applications/hr/time_off.rst:364 msgid "Then, the company adds rules to the accrual plan, allocating five days of vacation, annually, on the first of the year (one week of vacation allocated on January 1st)." msgstr "" -#: ../../content/applications/hr/time_off.rst:366 +#: ../../content/applications/hr/time_off.rst:367 msgid "If the :guilabel:`Carry over` field is set to :guilabel:`None. Accrual time reset to 0` on the :guilabel:`Create Milestone` pop-up for, any unused vacation time *does not* carry over, even though on the :guilabel:`Accrual Plan` form, the :guilabel:`Carry-Over Time` is set to :guilabel:`At the start of the year`." msgstr "" -#: ../../content/applications/hr/time_off.rst:371 +#: ../../content/applications/hr/time_off.rst:372 msgid "The carry over set on the *rule* takes precedence over the carry over set on the *accrual plan form*." msgstr "" -#: ../../content/applications/hr/time_off.rst:374 +#: ../../content/applications/hr/time_off.rst:375 msgid ":guilabel:`Milestone cap`: Tick this checkbox to set a limit on the total amount of time that can be accrued every calendar year. Enter the total maximum number of :guilabel:`Hours` or :guilabel:`Days` the employee can accrue during a year. The presented time increment is determined by how the :ref:`Employee Accrue ` section is configured." msgstr "" -#: ../../content/applications/hr/time_off.rst:379 +#: ../../content/applications/hr/time_off.rst:380 msgid "If the :guilabel:`Carry over` field is set to :guilabel:`None. Accrued time reset to 0`, the :guilabel:`Milestone cap` field does not appear." msgstr "" -#: ../../content/applications/hr/time_off.rst:381 +#: ../../content/applications/hr/time_off.rst:382 msgid ":guilabel:`Carry Over Validity`: Tick this checkbox to set a time-limit on how long the employee has to use any rolled over time off. First, set the second field to the desired time-period using the drop-down menu, either :guilabel:`Days` or :guilabel:`Months`." msgstr "" -#: ../../content/applications/hr/time_off.rst:385 +#: ../../content/applications/hr/time_off.rst:386 msgid "Next, enter the maximum number of :guilabel:`Days` or :guilabel:`Months` the employee has to use their rolled over time off. After that time period passes, any unused rolled over time will expire." msgstr "" -#: ../../content/applications/hr/time_off.rst:389 +#: ../../content/applications/hr/time_off.rst:390 msgid "If the :guilabel:`Carry over` field is set to :guilabel:`None. Accrued time reset to 0`, the :guilabel:`Carry Over Validity` field does not appear." msgstr "" -#: ../../content/applications/hr/time_off.rst:392 +#: ../../content/applications/hr/time_off.rst:393 msgid "Once the form is completed, click :guilabel:`Save & Close` to save the :guilabel:`Create Milestone` form, and close the modal, or click :guilabel:`Save & New` to save the form and create another milestone. Add as many milestones as desired." msgstr "" -#: ../../content/applications/hr/time_off.rst:397 +#: ../../content/applications/hr/time_off.rst:398 msgid "This milestone form is configured so the employee earns five days a year. They start to earn this time yearly, on January 1st." msgstr "" -#: ../../content/applications/hr/time_off.rst:400 +#: ../../content/applications/hr/time_off.rst:401 msgid "The employee can never accrue more than 120 days of time off with this accrual plan. Anytime they have 120 days banked, they will stop accruing more time off." msgstr "" -#: ../../content/applications/hr/time_off.rst:403 +#: ../../content/applications/hr/time_off.rst:404 msgid "Additionally, they can roll over up to 100 days of time off to the next year, and they have three months to use that rollover time." msgstr "" -#: ../../content/applications/hr/time_off.rst:406 +#: ../../content/applications/hr/time_off.rst:407 msgid "Note that due to the :guilabel:`Capped accrued time` of 120 days, the employee cannot carry over any time off that exceeds 120 days in total." msgstr "" @@ -21977,80 +23130,80 @@ msgstr "" msgid "A milestone form with all the entries filled out." msgstr "" -#: ../../content/applications/hr/time_off.rst:415 +#: ../../content/applications/hr/time_off.rst:416 msgid "Public holidays" msgstr "" -#: ../../content/applications/hr/time_off.rst:417 +#: ../../content/applications/hr/time_off.rst:418 msgid "Since holidays vary from country to country, or even city to city, there are no public holidays preconfigured in Odoo. To observe public or national holidays, and provide extra days off as holidays to employees, configure the observed public holidays in Odoo." msgstr "" -#: ../../content/applications/hr/time_off.rst:421 +#: ../../content/applications/hr/time_off.rst:422 msgid "It is important to configure public holidays in Odoo, so employees are aware of the days they have off, and do not request time off on days that are already set as a public holiday (non-working days)." msgstr "" -#: ../../content/applications/hr/time_off.rst:425 +#: ../../content/applications/hr/time_off.rst:426 msgid "Additionally, all public holidays configured in the **Time Off** app are also reflected in any app that uses working schedules, such as **Calendar**, **Planning**, **Manufacturing**, and more." msgstr "" -#: ../../content/applications/hr/time_off.rst:428 +#: ../../content/applications/hr/time_off.rst:429 msgid "Due to Odoo's integration with other apps that use working schedules, it is considered best practice to ensure *all* public holidays are configured." msgstr "" -#: ../../content/applications/hr/time_off.rst:432 +#: ../../content/applications/hr/time_off.rst:433 msgid "Create public holidays" msgstr "" -#: ../../content/applications/hr/time_off.rst:434 +#: ../../content/applications/hr/time_off.rst:435 msgid "To create a public holiday, navigate to :menuselection:`Time Off app --> Configuration --> Public Holidays`. All currently configured public holidays appear in a default list view." msgstr "" -#: ../../content/applications/hr/time_off.rst:437 +#: ../../content/applications/hr/time_off.rst:438 msgid "Click the :guilabel:`New` button, and a new line appears at the bottom of the list." msgstr "" -#: ../../content/applications/hr/time_off.rst:439 -#: ../../content/applications/hr/time_off.rst:501 +#: ../../content/applications/hr/time_off.rst:440 +#: ../../content/applications/hr/time_off.rst:502 msgid "Enter the following information on that new line:" msgstr "" -#: ../../content/applications/hr/time_off.rst:441 +#: ../../content/applications/hr/time_off.rst:442 msgid ":guilabel:`Name`: Enter the name of the holiday." msgstr "" -#: ../../content/applications/hr/time_off.rst:442 +#: ../../content/applications/hr/time_off.rst:443 msgid ":guilabel:`Company`: If in a multi-company database, the current company populates this field by default. It is **not** possible to edit this field." msgstr "" -#: ../../content/applications/hr/time_off.rst:446 +#: ../../content/applications/hr/time_off.rst:447 msgid "The :guilabel:`Company` field is hidden, by default. To view this field, click the :icon:`oi-settings-adjust` :guilabel:`(settings adjusts)` icon in the top-right corner of the list, to the far-right of the column titles, and activate the :guilabel:`Company` selection from the drop-down menu that appears." msgstr "" -#: ../../content/applications/hr/time_off.rst:451 +#: ../../content/applications/hr/time_off.rst:452 msgid ":guilabel:`Start Date`: Using the date and time picker, select the date and time the holiday starts, then click :icon:`fa-check` :guilabel:`Apply`. By default, this field is configured for the current date. The start time is set according to the start time for the company (according to the :ref:`working schedules `). If the user's computer is set to a different time zone, the start time is adjusted accordingly, compared to the company's time zone." msgstr "" -#: ../../content/applications/hr/time_off.rst:456 +#: ../../content/applications/hr/time_off.rst:457 msgid ":guilabel:`End Date`: Using the date and time picker, select the date and time the holiday ends, then click :icon:`fa-check` :guilabel:`Apply`. By default, this field is configured for the current date, and the time is set to the end time for the company (according to the :ref:`working schedules `). If the user's computer is set to a different time zone, the start time is adjusted accordingly, compared to the company's time zone." msgstr "" -#: ../../content/applications/hr/time_off.rst:463 +#: ../../content/applications/hr/time_off.rst:464 msgid "A company located in San Francisco operates from 9:00 AM - 6:00 PM, with an eight hour work day and one hour lunch break." msgstr "" -#: ../../content/applications/hr/time_off.rst:466 +#: ../../content/applications/hr/time_off.rst:467 msgid "For a user in New York, with a computer time zone set to Eastern Standard Time, a created public holiday displays a start time of 12:00 PM - 9:00 PM, accounting for the three hour time zone difference." msgstr "" -#: ../../content/applications/hr/time_off.rst:470 +#: ../../content/applications/hr/time_off.rst:471 msgid "Similarly, a user located in Los Angeles, with a computer time zone set to Pacific Standard Time, sees a public holiday time as 9:00 AM - 6:00 PM." msgstr "" -#: ../../content/applications/hr/time_off.rst:473 +#: ../../content/applications/hr/time_off.rst:474 msgid ":guilabel:`Working Hours`: If the holiday should only apply to employees who have a specific set of working hours, select the working hours from the drop-down menu. If left blank, the holiday applies to all employees." msgstr "" -#: ../../content/applications/hr/time_off.rst:476 +#: ../../content/applications/hr/time_off.rst:477 msgid ":guilabel:`Work Entry Type`: If using the **Payroll** app, this field defines how the :ref:`work entries ` for the holiday appear. Select the work entry type from the drop-down menu." msgstr "" @@ -22058,59 +23211,59 @@ msgstr "" msgid "The list of public holidays in the configuration menu." msgstr "" -#: ../../content/applications/hr/time_off.rst:484 +#: ../../content/applications/hr/time_off.rst:485 msgid "Mandatory days" msgstr "" -#: ../../content/applications/hr/time_off.rst:486 +#: ../../content/applications/hr/time_off.rst:487 msgid "Some companies have special days where specific departments, or the entire staff, is required to be present, and time off is not allowed on those specific days." msgstr "" -#: ../../content/applications/hr/time_off.rst:489 +#: ../../content/applications/hr/time_off.rst:490 msgid "These types of days are called *mandatory days* in Odoo. These can be configured to be company-wide, or department specific. When configured, employees in the specified department or company are unable to submit time off requests for these mandatory days." msgstr "" -#: ../../content/applications/hr/time_off.rst:494 +#: ../../content/applications/hr/time_off.rst:495 msgid "Create mandatory days" msgstr "" -#: ../../content/applications/hr/time_off.rst:496 +#: ../../content/applications/hr/time_off.rst:497 msgid "No mandatory days are configured in Odoo by default. To create a mandatory day, navigate to :menuselection:`Time Off app --> Configuration --> Mandatory Days`." msgstr "" -#: ../../content/applications/hr/time_off.rst:499 +#: ../../content/applications/hr/time_off.rst:500 msgid "Click the :guilabel:`New` button in the top-left corner, and a blank line appears in the list." msgstr "" -#: ../../content/applications/hr/time_off.rst:503 +#: ../../content/applications/hr/time_off.rst:504 msgid ":guilabel:`Name`: Enter the name of the mandatory day." msgstr "" -#: ../../content/applications/hr/time_off.rst:504 +#: ../../content/applications/hr/time_off.rst:505 msgid ":guilabel:`Company`: If in a multi-company database, this field is visible, and the current company populates this field, by default. Using the drop-down menu, select the company the mandatory day is for." msgstr "" -#: ../../content/applications/hr/time_off.rst:507 +#: ../../content/applications/hr/time_off.rst:508 msgid ":guilabel:`Departments`: This column is hidden by default. First, click the :icon:`oi-settings-adjust` :guilabel:`(additional options)` icon in the top-right corner, next to :guilabel:`Color`, and then tick the checkbox next to :guilabel:`Departments` to reveal that column." msgstr "" -#: ../../content/applications/hr/time_off.rst:512 +#: ../../content/applications/hr/time_off.rst:513 msgid "Next, select the desired departments from the drop-down menu. Multiple departments can be selected, and there is no limit to the amount of departments that can be added." msgstr "" -#: ../../content/applications/hr/time_off.rst:515 +#: ../../content/applications/hr/time_off.rst:516 msgid "If this field is left blank, the mandatory day applies to the entire company." msgstr "" -#: ../../content/applications/hr/time_off.rst:516 +#: ../../content/applications/hr/time_off.rst:517 msgid ":guilabel:`Start Date`: Using the calendar picker, select the date the mandatory day starts." msgstr "" -#: ../../content/applications/hr/time_off.rst:517 +#: ../../content/applications/hr/time_off.rst:518 msgid ":guilabel:`End Date`: Using the calendar picker, select the date the mandatory day ends. If creating a single mandatory day, the end date should be the same as the start date." msgstr "" -#: ../../content/applications/hr/time_off.rst:519 +#: ../../content/applications/hr/time_off.rst:520 msgid ":guilabel:`Color`: If desired, select a color from the available presented options. If no color is desired, select the `No color` option, represented by a white box with. The selected color appears on the main **Time Off** app dashboard, in both the calendar and in the legend." msgstr "" @@ -22118,43 +23271,43 @@ msgstr "" msgid "The Mandatory Days section with three configured days." msgstr "" -#: ../../content/applications/hr/time_off.rst:529 +#: ../../content/applications/hr/time_off.rst:530 msgid "To view a color-coded schedule of the user's time off, and/or of the team managed by them, navigate to :menuselection:`Time Off app --> Overview`. This presents a calendar with the default filter of `My Team`, in a quarterly (three month) view." msgstr "" -#: ../../content/applications/hr/time_off.rst:533 +#: ../../content/applications/hr/time_off.rst:534 msgid "To change the time period displayed, click on the :icon:`fa-calendar` :guilabel:`(time period)` button to reveal a drop-down menu. Then, select either :guilabel:`Today`, :guilabel:`This week`, :guilabel:`This month`, :guilabel:`This year`, or a custom time period, to present the calendar in that corresponding view." msgstr "" -#: ../../content/applications/hr/time_off.rst:538 +#: ../../content/applications/hr/time_off.rst:539 msgid "To navigate forward or backward in time, in the selected increment (:guilabel:`Month`, :guilabel:`Week`, etc.), click the :icon:`oi-arrow-left` :guilabel:`(left arrow)` or :icon:`oi-arrow-right` :guilabel:`(right arrow)` buttons to move either forward or backward in that specified amount of time. For example, if :guilabel:`Month` is selected, the arrows adjust the view by one month." msgstr "" -#: ../../content/applications/hr/time_off.rst:544 +#: ../../content/applications/hr/time_off.rst:545 msgid "To return to a view containing the current day, click the :icon:`fa-crosshairs` :guilabel:`(Focus Today)` button at any time." msgstr "" -#: ../../content/applications/hr/time_off.rst:547 +#: ../../content/applications/hr/time_off.rst:548 msgid "Team members are listed alphabetically on individual lines, and their requested time off, regardless of the status (*validated* or *to approve*), is visible on the calendar." msgstr "" -#: ../../content/applications/hr/time_off.rst:550 +#: ../../content/applications/hr/time_off.rst:551 msgid "Each employee is color-coded. The employee's color is selected at random, and does *not* correspond to the type of time off they requested." msgstr "" -#: ../../content/applications/hr/time_off.rst:553 +#: ../../content/applications/hr/time_off.rst:554 msgid "The status of the time off is represented by the color detail of the request, either appearing solid (*validated*) or striped (*to approve*)." msgstr "" -#: ../../content/applications/hr/time_off.rst:556 +#: ../../content/applications/hr/time_off.rst:557 msgid "The number of days or hours requested is written on the request (if there is enough space)." msgstr "" -#: ../../content/applications/hr/time_off.rst:558 +#: ../../content/applications/hr/time_off.rst:559 msgid "At the bottom of the calendar, in the :guilabel:`Total` line, a bar graph shows how many people are projected to be out on any given day. The number on each individual bar represents the number of employees out for those highlighted days." msgstr "" -#: ../../content/applications/hr/time_off.rst:562 +#: ../../content/applications/hr/time_off.rst:563 msgid "Click on a time off entry to view the details for the specific time off entry. The total number of hours or days are listed, along with the start and end time of the time off. To view the details of the time off request in a modal, click the :guilabel:`View` button." msgstr "" @@ -22162,115 +23315,26 @@ msgstr "" msgid "Overview of the user's team, with time off requests shown." msgstr "" -#: ../../content/applications/hr/time_off.rst:574 -msgid "The reporting feature allows users to view time off for their team, either by employee or type of time off. This allows users to see which employees are taking time off, how much time off they are taking, and what time off types are being used." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:578 -msgid "Any report can be added to a spreadsheet, when in either the :icon:`fa-area-chart` :guilabel:`(Graph)` or :icon:`oi-view-pivot` :guilabel:`(Pivot)` view, through the *Insert in Spreadsheet* button that appears in the top-left of a report." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:583 -msgid "If the **Documents** app is installed, an option to add the report to a spreadsheet appears. If not, the report can be added to a *Dashboard*." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:587 -msgid "By employee" -msgstr "" - -#: ../../content/applications/hr/time_off.rst:589 -msgid "To view a list of employee time off requests, navigate to :menuselection:`Time Off app --> Reporting --> by Employee`." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:592 -msgid "The default report presents the current year's data in a list view, displaying all the employees in alphabetical order. Each employee's line is collapsed by default. To expand a line, click anywhere on the line." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:596 -msgid "The view expands, and has the time off requests organized by time off type. Click anywhere on a time off type line to expand it, and view all the individual time off requests that fall under that type." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:599 -msgid "The information shown in the list includes: the :guilabel:`Employee` name, :guilabel:`Number of Days` off requested, the :guilabel:`Start Date`, :guilabel:`End Date`, :guilabel:`Status`, and :guilabel:`Description`." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:-1 -msgid "Report of time off, shown by each employee in a list view." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:606 -msgid "The report can be displayed in other ways, as well. Click the corresponding button option in the top-right corner of the page to view the data in that specific way. The various options are a :icon:`oi-view-list` :guilabel:`(List)`, or default view, :icon:`fa-area-chart` :guilabel:`(Graph)`, :icon:`oi-view-pivot` :guilabel:`(Pivot)` table, or :icon:`fa-calendar` :guilabel:`(Calendar)` view." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:611 -msgid "When a selection has been made, additional options appear for that particular selection. For more detailed information on the reports and their various options, refer to the :doc:`reporting <../essentials/reporting>` documentation." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:616 -msgid "By type" -msgstr "" - -#: ../../content/applications/hr/time_off.rst:618 -msgid "To view a graph of all time off, organized by time off type, navigate to :menuselection:`Time Off app --> Reporting --> by Type`. This shows all time off requests in a default bar chart." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:621 -msgid "Hover over a bar to view the :guilabel:`Duration (Days)` of that specific time off type." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:-1 -msgid "The various time off types, and how many days requested, in a bar chart. Details are\n" -"highlighted in a red box." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:627 -msgid "Click on a bar to go to a detailed list view of all the time off requests for that time off type." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:629 -msgid "Each request is listed, with the following information displayed: the :guilabel:`Employee`, :guilabel:`Number of Days`, :guilabel:`Request Type`, :guilabel:`Start Date`, :guilabel:`End Date`, :guilabel:`Status`, and the :guilabel:`Description`." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:633 -msgid "The report can be displayed in other ways, as well. Click the corresponding button option in the top-right corner of the page to view the data in that way. The various options are a :icon:`fa-area-chart` :guilabel:`(Graph)` (the default view), :icon:`oi-view-list` :guilabel:`(List)`, or :icon:`oi-view-pivot` :guilabel:`(Pivot)` table." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:638 -msgid "When a selection has been made, additional options appear for that particular selection. For more detailed information on the reports, and their various options, refer to the :doc:`reporting <../essentials/reporting>` documentation." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:643 -msgid "Balance" -msgstr "" - -#: ../../content/applications/hr/time_off.rst:645 -msgid "To view a pivot table of all time off balances, organized by time off type, then further organized by how many days and hours are :guilabel:`Left` and :guilabel:`Planned`, navigate to :menuselection:`Time Off app --> Reporting --> Balance`." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:649 -msgid "This shows all time off balances in a default pivot table. The employees populate the rows, while the various time off types and balances populate the columns." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:-1 -msgid "The various time off balances, in a pivot table." -msgstr "" - -#: ../../content/applications/hr/time_off.rst:656 +#: ../../content/applications/hr/time_off.rst:571 msgid ":doc:`time_off/allocations`" msgstr "" -#: ../../content/applications/hr/time_off.rst:657 +#: ../../content/applications/hr/time_off.rst:572 msgid ":doc:`time_off/request_time_off`" msgstr "" -#: ../../content/applications/hr/time_off.rst:658 +#: ../../content/applications/hr/time_off.rst:573 msgid ":doc:`time_off/my_time`" msgstr "" -#: ../../content/applications/hr/time_off.rst:659 +#: ../../content/applications/hr/time_off.rst:574 msgid ":doc:`time_off/management`" msgstr "" +#: ../../content/applications/hr/time_off.rst:575 +msgid ":doc:`time_off/reporting`" +msgstr "" + #: ../../content/applications/hr/time_off/allocations.rst:3 msgid "Allocations" msgstr "" @@ -22793,90 +23857,199 @@ msgstr "" msgid "My Allocations list view with all requests." msgstr "" +#: ../../content/applications/hr/time_off/reporting.rst:5 +msgid "The **Time Off** app's reporting feature lets managers view team time off by employee, type, or remaining balances. This allows managers to see :ref:`who is taking time off, how much they have used `, :ref:`which types are more commonly used `, and :ref:`how much each employee still has available `." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:10 +msgid "Any report can be added to a spreadsheet, when in either the :icon:`fa-area-chart` :guilabel:`(Graph)` or :icon:`oi-view-pivot` :guilabel:`(Pivot)` view, through the *Insert in Spreadsheet* button that appears in the top-left of a report." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:15 +msgid "If the **Documents** app is installed, an option to add the report to a spreadsheet appears. If not, the report can be added to a *Dashboard*." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:21 +msgid "By employee" +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:23 +msgid "Viewing time off by employee helps managers track usage patterns, monitor remaining balances, ensure policy compliance, and plan coverage for upcoming absences. To view a list of employee time off requests, navigate to :menuselection:`Time Off app --> Reporting --> by Employee`." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:27 +msgid "The default report presents the current year's data in a list view, displaying all the employees in alphabetical order. Each employee's line is collapsed by default. To expand a line, click anywhere on the line." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:31 +msgid "The view expands, and has the time off requests organized by time off type. Click anywhere on a time off type line to expand it, and view all the individual time off requests that fall under that type." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:34 +msgid "The information shown in the list includes: the :guilabel:`Employee` name, :guilabel:`Number of Days` off requested, the :guilabel:`Start Date`, :guilabel:`End Date`, :guilabel:`Status`, and :guilabel:`Description`." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:-1 +msgid "Report of time off, shown by each employee in a list view." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:41 +msgid "The report can be displayed in other ways, as well. Click the corresponding button option in the top-right corner of the page to view the data in that specific way. The various options are a :icon:`oi-view-list` :guilabel:`(List)`, or default view, :icon:`fa-area-chart` :guilabel:`(Graph)`, :icon:`oi-view-pivot` :guilabel:`(Pivot)` table, or :icon:`fa-calendar` :guilabel:`(Calendar)` view." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:46 +msgid "When a selection has been made, additional options appear for that particular selection. For more detailed information on the reports and their various options, refer to the :doc:`reporting <../../essentials/reporting>` documentation." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:53 +msgid "By type" +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:55 +msgid "Viewing company-wide time off by type can help managers determine if employees are using their time off, which types are used more than others, and can spot any trends. High totals in certain time off types, like sick time off, can indicate health or morale concerns." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:59 +msgid "To view a graph of all time off, organized by time off type, navigate to :menuselection:`Time Off app --> Reporting --> by Type`. This shows all time off requests in a default bar chart." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:62 +msgid "Hover over a bar to view the :guilabel:`Duration (Days)` of that specific time off type." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:-1 +msgid "The various time off types, and how many days requested, in a bar chart. Details are\n" +"highlighted in a red box." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:68 +msgid "Click on a bar to go to a detailed list view of all the time off requests for that time off type." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:70 +msgid "Each request is listed, with the following information displayed: the :guilabel:`Employee`, :guilabel:`Number of Days`, :guilabel:`Request Type`, :guilabel:`Start Date`, :guilabel:`End Date`, :guilabel:`Status`, and the :guilabel:`Description`." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:74 +msgid "The report can be displayed in other ways, as well. Click the corresponding button option in the top-right corner of the page to view the data in that way. The various options are a :icon:`fa-area-chart` :guilabel:`(Graph)` (the default view), :icon:`oi-view-list` :guilabel:`(List)`, or :icon:`oi-view-pivot` :guilabel:`(Pivot)` table." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:79 +msgid "When a selection has been made, additional options appear for that particular selection. For more detailed information on the reports, and their various options, refer to the :doc:`reporting <../../essentials/reporting>` documentation." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:86 +msgid "Balance" +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:88 +msgid "When some time off types have restrictions, such as rollover rules and balance limits, viewing time off balances can help managers see a high-level overview of time off. If certain employees have a lot of time that will expire soon, they can inform their employees and adjust scheduled accordingly to be prepared for their absences." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:93 +msgid "To view a pivot table of all time off balances, organized by time off type, then further organized by how many days and hours are :guilabel:`Left` and :guilabel:`Planned`, navigate to :menuselection:`Time Off app --> Reporting --> Balance`." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:97 +msgid "This shows all time off balances in a default pivot table. The employees populate the rows, while the various time off types and balances populate the columns." +msgstr "" + +#: ../../content/applications/hr/time_off/reporting.rst:-1 +msgid "The various time off balances, in a pivot table." +msgstr "" + #: ../../content/applications/hr/time_off/request_time_off.rst:3 msgid "Request time off" msgstr "" #: ../../content/applications/hr/time_off/request_time_off.rst:5 -msgid "Once time off has been allocated to an employee, a request to use it can be submitted." +msgid "When employees wish to take time off, they first submit a time off request through the **Time Off** application. Once their request has been submitted, it is then reviewed by either the employee's manager or their time off officer (depending on who the employee's :ref:`time off approver is `)." +msgstr "" + +#: ../../content/applications/hr/time_off/request_time_off.rst:11 +msgid "If the time off type the employee is requesting :ref:`does not require approval `, the time off is automatically approved, and does not need to be reviewed." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:7 -msgid "Time off can be requested in one of two ways: either from the main *Time Off* application :guilabel:`Dashboard` (:menuselection:`Time Off app --> My Time --> Dashboard`), or from the :guilabel:`My Time Off` dashboard view (:menuselection:`Time Off app --> My Time --> My Time Off`)." +#: ../../content/applications/hr/time_off/request_time_off.rst:16 +msgid "Submit time off request" msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:11 -msgid "To create a new request for time off, click the :guilabel:`New` button on either the main *Time Off* :guilabel:`Dashboard` or the :guilabel:`My Time Off` dashboard, in the default list view." +#: ../../content/applications/hr/time_off/request_time_off.rst:18 +msgid "To request time off, click the :guilabel:`New` button in the top-left corner of the **Time Off** app dashboard, and a :guilabel:`New Time Off` pop-up form loads." +msgstr "" + +#: ../../content/applications/hr/time_off/request_time_off.rst:21 +msgid "Fill out the :ref:`fields on the form `, and then click :guilabel:`Save & Close` to submit the request." +msgstr "" + +#: ../../content/applications/hr/time_off/request_time_off.rst:25 +msgid "Requesting time off can be done either form the main **Time Off** app dashboard, or by navigating to :menuselection:`Time Off --> My Time --> My Time Off`, and clicking :guilabel:`New`." +msgstr "" + +#: ../../content/applications/hr/time_off/request_time_off.rst:-1 +msgid "A time off request for three hours of vacation time off." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:15 -msgid "Both :guilabel:`New` buttons allow the user to request time off, but when requested from the :guilabel:`Dashboard`, a :guilabel:`New Time Off` request form appears in a pop-up window. When requested from the :guilabel:`My Time Off` list view, the screen navigates to a new time off request page, instead." +#: ../../content/applications/hr/time_off/request_time_off.rst:34 +msgid "Time off fields" msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:20 +#: ../../content/applications/hr/time_off/request_time_off.rst:36 msgid "Enter the following information on the :guilabel:`New Time Off` request form:" msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:22 -msgid ":guilabel:`Time Off Type`: select the type of time off being requested from the drop-down menu." +#: ../../content/applications/hr/time_off/request_time_off.rst:38 +msgid ":guilabel:`Time Off Type`: Using the drop-down menu, select the type of time off being requested." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:23 -msgid ":guilabel:`Dates`: enter the dates that the time off falls under. There are two fields to populate: the start and end dates. Click on either date field and a popover calendar appears." +#: ../../content/applications/hr/time_off/request_time_off.rst:39 +msgid ":guilabel:`Dates`: Enter the dates that the time off falls under. There are two fields to populate: the start and end dates. Click on either date field and a popover calendar appears." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:26 +#: ../../content/applications/hr/time_off/request_time_off.rst:42 msgid "Click on the start date, then click on the end date. The selected start and end dates are circled, and the dates between them are highlighted (if applicable)." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:29 +#: ../../content/applications/hr/time_off/request_time_off.rst:45 msgid "If only requesting time off for a single day, click on the start date, then click the same date again for the end date." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:32 +#: ../../content/applications/hr/time_off/request_time_off.rst:48 msgid "When the correct dates are selected, click the :guilabel:`Apply` button." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:34 +#: ../../content/applications/hr/time_off/request_time_off.rst:50 msgid "The selected dates now populate the two portions of the :guilabel:`Dates` field." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:36 +#: ../../content/applications/hr/time_off/request_time_off.rst:52 msgid "If the selected :guilabel:`Time Off Type` is configured to have the time off taken in hours, the following two fields also appear:" msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:39 -msgid ":guilabel:`Half Day`: if the time off request is for a half day, tick this checkbox. When this is selected, the second date field disappears, and is replaced with a drop-down menu. From that drop-down menu, select either :guilabel:`Morning` or :guilabel:`Afternoon` to indicate which half of the day is being requested." +#: ../../content/applications/hr/time_off/request_time_off.rst:55 +msgid ":guilabel:`Half Day`: If the time off request is for a half day, tick this checkbox. When this is selected, the second date field disappears, and is replaced with a drop-down menu. From that drop-down menu, select either :guilabel:`Morning` or :guilabel:`Afternoon` to indicate which half of the day is being requested off." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:43 -msgid ":guilabel:`Custom Hours`: if the time off requested is not a whole or half day, tick this checkbox. If selected, a :guilabel:`From` and :guilabel:`To` field appears beneath this option. Using the drop-down menu, select the start and end time for the time off request." +#: ../../content/applications/hr/time_off/request_time_off.rst:59 +msgid ":guilabel:`Custom Hours`: If the time off requested is not a whole or half day, tick this checkbox. If selected, a :guilabel:`From` and :guilabel:`To` field appears beneath this option. Using the drop-down menu, select the start and end time for the time off request." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:47 -msgid ":guilabel:`Duration`: this field updates automatically once the :guilabel:`Date` section is completed. If the :guilabel:`Date` section is modified, this section automatically updates to reflect the total time off requested. This field is in either hours or days, depending on how the selected :guilabel:`Time Off Type` is configured." +#: ../../content/applications/hr/time_off/request_time_off.rst:63 +msgid ":guilabel:`Requested (Days/Hours)`: This field updates automatically once the :guilabel:`Date` section is completed. If the :guilabel:`Date` section is modified, this section automatically updates to reflect the total time off requested. This field is in either hours or days, depending on how the selected :ref:`Time Off Type ` is configured." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:51 -msgid ":guilabel:`Description`: enter a description for the time off request. This should include any details that managers and approvers may need to approve the request." +#: ../../content/applications/hr/time_off/request_time_off.rst:67 +msgid ":guilabel:`Description`: Enter a description for the time off request. This should include any details that managers and approvers may need to approve the request." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:53 -msgid ":guilabel:`Supporting Document`: this field only appears if the :guilabel:`Time Off Type` selected allows for the attachment of documents. Click the :guilabel:`Attach File` button, and a file explorer window appears." +#: ../../content/applications/hr/time_off/request_time_off.rst:69 +msgid ":guilabel:`Supporting Document`: This field **only** appears if the :ref:`Time Off Type ` selected allows for the attachment of documents. Click the :icon:`fa-paperclip` :guilabel:`Attach File` button, and a file explorer window appears." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:57 +#: ../../content/applications/hr/time_off/request_time_off.rst:73 msgid "Navigate to the desired files that should be attached, select them, then click The :guilabel:`Open` button. The files then appear on the time off request form. Multiple documents can be attached, if necessary." msgstr "" -#: ../../content/applications/hr/time_off/request_time_off.rst:61 -msgid "If the request was created from the :guilabel:`Dashboard`, click the :guilabel:`Save & Close` button to save the information, and submit the request." -msgstr "" - -#: ../../content/applications/hr/time_off/request_time_off.rst:64 -msgid "If the form was completed from the :guilabel:`My Time Off` list view, the information is automatically saved as it is entered. However, the form can be saved manually at any time by clicking the :icon:`fa-cloud-upload` :guilabel:`(cloud upload)` icon." -msgstr "" - #: ../../content/applications/hr/time_off/request_time_off.rst:-1 -msgid "A time off request form filled out for an employee home sick for two days with the flu." +msgid "A time off request form filled out for an employee home sick with the flu." msgstr "" diff --git a/locale/sources/inventory_and_mrp.pot b/locale/sources/inventory_and_mrp.pot index 52382157ac..c867452dab 100644 --- a/locale/sources/inventory_and_mrp.pot +++ b/locale/sources/inventory_and_mrp.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -98,7 +98,6 @@ msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config.rst:44 #: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/landed_costs.rst:18 #: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:20 -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:18 #: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/delivery_three_steps.rst:16 #: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/putaway.rst:21 #: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/receipts_delivery_one_step.rst:20 @@ -1027,7 +1026,7 @@ msgstr "" #: ../../content/applications/inventory_and_mrp/barcode/operations/gs1_nomenclature.rst:221 #: ../../content/applications/inventory_and_mrp/barcode/operations/gs1_nomenclature.rst:223 #: ../../content/applications/inventory_and_mrp/barcode/operations/gs1_usage.rst:43 -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:80 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:81 #: ../../content/applications/inventory_and_mrp/purchase/products/pricelist.rst:144 msgid "Quantity" msgstr "" @@ -4446,7 +4445,7 @@ msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config.rst:149 #: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config.rst:175 #: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config.rst:246 -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:93 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:94 msgid "$10" msgstr "" @@ -4461,7 +4460,7 @@ msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config.rst:173 #: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config.rst:241 #: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config.rst:244 -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:88 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:89 msgid "$0" msgstr "" @@ -5294,155 +5293,155 @@ msgid "Please read this :doc:`introduction to inventory valuation `. After that, go to :menuselection:`Inventory app --> Products --> Products`, and select the desired product, or create a new product, by clicking :guilabel:`New`." +msgid "To enable valuation by lots or serial numbers, begin by enabling the :ref:`Lots and Serial Numbers feature `. After that, go to :menuselection:`Inventory app --> Products --> Products`, and select the desired product, or create a new product, by clicking :guilabel:`New`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:26 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:27 msgid "On the product form, in the :guilabel:`Category` field, choose a product category. Ensure the product category's :ref:`Costing Method ` is set to *First In First Out (FIFO)* or *Average Cost (AVCO)*." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:31 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:32 msgid "To check the costing method set on the product category, hover over the :guilabel:`Category` field, and click the :icon:`oi-arrow-right` :guilabel:`(Internal Link)` icon." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:35 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:36 msgid ":ref:`Costing methods `" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:37 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:38 msgid "Next, activate the product to be tracked by lots or serial numbers by ticking the :guilabel:`Track Inventory` checkbox. Then, click the adjacent field that appears, and choose either :guilabel:`By Lots` or :guilabel:`By Unique Serial Number` from the resulting drop-down menu." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:41 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:42 msgid "Doing so makes the :guilabel:`Valuation by Lot/Serial number` checkbox appear below it. Tick that checkbox, and the configuration to track valuation by lot or serial numbers is complete." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:47 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:48 msgid "Product form showing the Valuation by Lot or Serial Number feature." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:47 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:48 msgid "Product form showing the Valuation by Lot or Serial Number feature" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:50 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:51 msgid "Valuation layers" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:52 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:53 msgid "To understand how valuation by lots and serial numbers works, consider these scenarios:" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:54 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:55 msgid ":ref:`Purchase and sell products `: cost is calculated based on the *product category's* costing method." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:56 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:57 msgid ":ref:`Create new lot/serial numbers ` using an inventory adjustment: value of the new lot/serial number is assigned to the cost from the product form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:59 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:60 msgid "Inventory adjustment to update quantities for an :ref:`existing lot/serial number `: value is assigned based on the most recent cost for that lot/serial number." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:63 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:64 msgid "For both :abbr:`AVCO (Average Cost)` and :abbr:`FIFO (First In First Out)` methods, the *Cost* field on the product form is calculated using this formula:" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:66 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:67 msgid ":math:`Avg~Cost = \\frac{Total~Value}{Total~Qty}`" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:71 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:72 msgid "Purchase products" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:73 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:74 msgid "Consider how purchasing products affect the inventory valuation, in the table below." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:81 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:82 msgid "Lot number" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:82 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:83 msgid "Math" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:83 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:84 msgid "Average cost on product form" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:84 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:85 msgid "Empty stock" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:85 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:86 msgid "0.00" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:89 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:90 msgid "Day 1: Receive one product at $10/unit" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:90 -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:95 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:91 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:96 msgid "1.00" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:91 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:92 msgid "LOT 1" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:92 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:93 msgid ":math:`\\frac{10}{1}`" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:94 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:95 msgid "Day 2: Receive another product at $20/unit" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:96 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:97 msgid "LOT 2" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:97 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:98 msgid ":math:`\\frac{10+20}{2}`" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:98 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:99 msgid "$15" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:103 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:104 msgid "Show Cost on the product form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:103 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:104 msgid "As a result, the product form displays an average cost of $15 in the **Cost** field." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:108 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:109 msgid "Create new lot/serial number" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:110 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:111 msgid "Creating a new lot/serial number through an :doc:`inventory adjustment <../../warehouses_storage/inventory_management/count_products>` assigns the same value as the cost on the product form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:114 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:115 msgid "To make an inventory adjustment, and assign a lot number, go to :menuselection:`Inventory app --> Operations --> Physical Inventory`. Then, click :guilabel:`New`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:117 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:118 msgid "In the new inventory adjustment line that appears, set the :guilabel:`Product`, create the :guilabel:`Lot/Serial Number`, set the :guilabel:`Counted Quantity`, and click :icon:`fa-floppy-o` :guilabel:`Apply`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:121 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:122 msgid "To view the valuation layer, go to :menuselection:`Inventory app --> Reporting --> Valuation`. The :guilabel:`Total Value` per unit matches the *Cost* on the product form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:125 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:126 msgid "Continuing the example in the table above, when the product cost is `$15`, the valuation for a newly-created `LOT3` is also be `$15`." msgstr "" @@ -5450,19 +5449,19 @@ msgstr "" msgid "Show inventory adjustment valuation." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:134 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:135 msgid "Existing lot/serial number" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:136 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:137 msgid "When adjusting the quantity of an existing lot/serial number, the value is based on the most recent valuation layer for that specific lot/serial number." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:140 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:141 msgid "Continuing the example in the table above, the value for `LOT 1` is `$10`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:142 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:143 msgid "So, when the quantity is updated from `1.00` to `2.00`, the additional quantity is also valued at `$10`, reflecting the latest valuation layer for `LOT 1`." msgstr "" @@ -5470,55 +5469,55 @@ msgstr "" msgid "Show valuation of LOT 1 getting updated." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:148 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:149 msgid "The inventory adjustment (top line) is valued the same as LOT 1 (bottom line)." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:153 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:154 msgid "View valuation" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:155 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:156 msgid "To find the average cost of a specific lot/serial number, go to :menuselection:`Inventory app --> Products --> Lots/Serial Numbers`, and select the desired record." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:158 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:159 msgid "Both the :guilabel:`Cost` and :guilabel:`Average Cost` fields show a unit's average cost. The :guilabel:`Total Value` reflects the total on-hand value for that lot/serial number." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:162 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:163 msgid "Ensure the costing method is set to *First In First Out (FIFO)* or *Average Cost (AVCO)* to display the cost on this page." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:168 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:169 msgid "Show cost of the lot/serial number." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:168 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:169 msgid "Lot form, displaying **Cost** field. The **Valuation** smart button is in the top-right." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:170 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:171 msgid "Valuation layers of a lot/serial number can be viewed through the :ref:`valuation report `, or by clicking the lot/serial number's :guilabel:`Valuation` smart button. These detailed, line-by-line records can help determine how each inventory move of the specific lot/serial number affects its valuation." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:178 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:179 msgid "Valuation report" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:180 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:181 msgid "Display the valuation of lots and serial numbers in the database by going to :menuselection:`Inventory app --> Reporting --> Valuation`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:183 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:184 msgid "On the resulting :guilabel:`Stock Valuation` report, click the search bar, and in the :icon:`oi-group` :guilabel:`Group By` section of the resulting drop-down menu, select :guilabel:`Lot/Serial number`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:188 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:189 msgid "Click the :icon:`fa-plus` :guilabel:`(plus)` icon to the right of a collapsed lot number line to :ref:`manually modify the cost `." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:191 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:192 msgid "This is useful for adjusting individual lot prices when a purchase order or bill includes multiple lots/serial numbers, as initial prices are identical upon reception." msgstr "" @@ -5526,23 +5525,23 @@ msgstr "" msgid "Show valuation report, by lots." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:198 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:199 msgid "Valuation smart button" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:200 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:201 msgid "To access a filtered part of the *Stock Valuation* report, specific to a lot or serial number, go to :menuselection:`Inventory app --> Products --> Lots/Serial Numbers`, and select the desired item." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:203 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:204 msgid "On the :guilabel:`Lot/Serial Numbers` page, click the :guilabel:`Valuation` smart button." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:208 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:209 msgid "All stock moves relating to `LOT 1`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:208 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/inventory_valuation/valuation_by_lots.rst:209 msgid "All stock moves that affect the valuation of `LOT 1`." msgstr "" @@ -5570,17 +5569,17 @@ msgstr "" msgid ":doc:`product_tracking/serial_numbers`" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:24 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:26 #: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:24 #: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/serial_numbers.rst:21 msgid "Enable lots & serial numbers" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:26 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:28 msgid "To track products using lots and serial numbers, the *Lots & Serial Numbers* feature must be enabled." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:29 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:31 msgid "To do that, go to the :menuselection:`Inventory app --> Configuration --> Settings`, scroll down to the :guilabel:`Traceability` section, and click the box next to :guilabel:`Lots & Serial Numbers`. Then, click the :guilabel:`Save` button to save changes." msgstr "" @@ -5589,11 +5588,11 @@ msgstr "" msgid "Enabled lots and serial numbers feature in inventory settings." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:38 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:40 msgid "When to use lots" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:40 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:42 msgid "Lots are useful for products that are manufactured or received in large quantities, such as clothes or food. Lots and can be used to trace a product back to a group, which is especially useful when managing product recalls or expiration dates." msgstr "" @@ -5601,15 +5600,15 @@ msgstr "" msgid "Created lot with quantity of products in it." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:49 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:51 msgid "Manufacturers assign lot numbers to groups of products that have common properties; this can lead to multiple goods sharing the same lot number. This helps identify a number of products in a single group, and allows for end-to-end traceability of these products through each step in their life cycles." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:55 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:57 msgid "When to use serial numbers" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:57 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:59 msgid "The goal of assigning serial numbers to individual products is to make sure every item's history is identifiable when it travels through the supply chain. This can be especially useful for manufacturers that provide after-sales services related to products they sell and deliver." msgstr "" @@ -5617,32 +5616,32 @@ msgstr "" msgid "List of serial numbers for product." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:66 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:68 msgid "Serial numbers can contain many different types of characters: numbers, letters, typographical symbols, or a mixture of all three types." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:70 -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:379 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:72 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:353 msgid "Traceability" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:72 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:74 msgid "Manufacturers and companies can refer to traceability reports to see the entire life cycle of a product. These reports include vital information, like where it came from (and when), where it was stored, and to whom it was sent." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:76 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:78 msgid "To see the full traceability of a product, or group products by lots and/or serial numbers, go to :menuselection:`Inventory app --> Products --> Lots/Serial Numbers`. Doing so reveals the :guilabel:`Lots/Serial Numbers` dashboard." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:80 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:82 msgid "From here, products with lots or serial numbers assigned to them are listed by default. They can also be expanded to show what lots or serial numbers have been specifically assigned to them." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:83 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:85 msgid "To group by lots or serial numbers, first remove any default filters from the search bar in the upper-right corner. Then, click :guilabel:`Group By`, and select :guilabel:`Add Custom Group`, which reveals a mini drop-down menu. From this mini drop-down menu, select :guilabel:`Lot/Serial Number`, and click :guilabel:`Apply`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:88 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:90 msgid "Doing so reveals all existing lots and serial numbers, and each can be expanded to show all product quantities with that assigned number. For unique serial numbers that are *not* reused, there should *only* be one product per serial number." msgstr "" @@ -5650,7 +5649,7 @@ msgstr "" msgid "Reporting page with drop-down lists of lots and serial numbers." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:97 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking.rst:99 msgid "For additional information regarding an individual lot number or serial number, click the line item for the lot or serial number to reveal that specific number's :guilabel:`Lot` or :guilabel:`Serial Number` form. From this form, click the :guilabel:`Location` and :guilabel:`Traceability` smart buttons to see all stock on-hand using that serial number. Any operations made using that lot or serial number can be found here, as well." msgstr "" @@ -5863,7 +5862,7 @@ msgid "To sell perishable products with expiration dates, the :guilabel:`Removal msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/expiration_dates.rst:194 -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:189 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:178 #: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/inventory_management/use_locations.rst:133 msgid ":doc:`../../shipping_receiving/removal_strategies`" msgstr "" @@ -5944,18 +5943,6 @@ msgstr "" msgid "When the expiation date passes for a lot/serial number for this product, a notification is sent to the user in this field." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/expiration_dates.rst:261 -msgid "Once the expiration date is due, expiration alerts are created on the form view of the lot/serial number of the product." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/expiration_dates.rst:264 -msgid "To customize these alerts, turn on :ref:`developer mode `, go to :menuselection:`Settings app --> Technical --> Activity Types`, and select the :guilabel:`Alert Date Reached` alert." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/expiration_dates.rst:268 -msgid "The :guilabel:`Default User` assigned will be notified once the expiration date is reached. If no default user is configured, the activity will be assigned to the :guilabel:`Responsible` user selected on the product's :guilabel:`Inventory` tab." -msgstr "" - #: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:3 msgid "Lot numbers" msgstr "" @@ -5988,16 +5975,16 @@ msgstr "" msgid ":ref:`Print GS1 barcodes for lots and serial numbers `" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:42 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:41 msgid "Track by lots" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:44 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:43 msgid "Once the :guilabel:`Lots & Serial Numbers` feature is activated, configure individual products to be tracked using lots. To do this, go to :menuselection:`Inventory app --> Products --> Products`, and choose a product to configure." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:48 -msgid "On the product form, go to the :guilabel:`Inventory` tab. In the :guilabel:`Traceability` section, select the :guilabel:`By Lots` option in the :guilabel:`Tracking` field. Now, new or existing lot numbers can be assigned to newly-received or manufactured batches of this product." +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:47 +msgid "On the product form, click into the :guilabel:`General Information` tab. In the :guilabel:`Track Inventory` field, tick the checkbox, then select :guilabel:`By Lots` from the drop-down menu. Now, new or existing lot numbers can be assigned to newly-received or manufactured batches of this product." msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:53 @@ -6013,31 +6000,31 @@ msgstr "" msgid "Enabled tracking by lots feature on product form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:65 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:64 msgid "Assign lots for shipping and receiving" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:67 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:66 msgid "Assign new lot numbers to :ref:`incoming goods ` on the receipt form. When shipping :ref:`outgoing goods `, select products with specific lot numbers on the delivery order form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:75 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:74 msgid "On receipts" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:77 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:76 msgid "Assigning new or existing lot numbers to incoming goods can be done directly on receipts." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:79 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:78 msgid "To begin, go to the :menuselection:`Purchase` app to `create and confirm `_ a |PO| for products tracked by lot numbers. Then, click the :guilabel:`Receipt` smart button that appears at the top of the page to navigate to the warehouse receipt form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:85 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:84 msgid "Alternatively, navigate to an existing receipt by going to the :menuselection:`Inventory` app, clicking the :guilabel:`Receipts` Kanban card, and choosing the desired receipt." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:89 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:88 msgid "Clicking :guilabel:`Validate` before assigning a lot number triggers an error, indicating that a lot number **must** be assigned before validating the receipt." msgstr "" @@ -6045,7 +6032,7 @@ msgstr "" msgid "Add lot/serial number user error popup." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:96 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:94 msgid "On the receipt form, on the product line in the :guilabel:`Operations` tab, select the |list| icon to the right of the product that is tracked by lot numbers." msgstr "" @@ -6053,23 +6040,23 @@ msgstr "" msgid "Show the bulleted list icon on the product line." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:103 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:100 msgid "Doing so opens the :guilabel:`Open: Stock move` pop-up window, where the :guilabel:`Lot/Serial Number` and :guilabel:`Quantity` are assigned." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:106 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:103 msgid "The two ways to assign lot numbers: **manually** and **importing**." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:109 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:106 msgid "Manual assignment" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:111 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:108 msgid "To manually assign lot numbers, click :guilabel:`Add a line`. Input the :guilabel:`Lot/Serial Number`, :guilabel:`Store To` location for the lot, :guilabel:`Quantity`, and :guilabel:`Destination Package`, if any." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:116 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:113 msgid "To assign multiple lot numbers, or store to multiple locations, click :guilabel:`Add a line`, and type a new :guilabel:`Lot/Serial Number` for additional quantities. Repeat until the total in the :guilabel:`Quantity` column matches the :guilabel:`Demand` at the top." msgstr "" @@ -6077,81 +6064,73 @@ msgstr "" msgid "Assign lot number detailed operations popup." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:125 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:121 msgid "Import lots" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:127 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:123 msgid "In the :guilabel:`Open: Stock move` pop-up window, click :guilabel:`Import Serials/Lots`, then paste the bulk lot numbers, in the :guilabel:`Lots/Serial numbers` field." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:134 -msgid "List of lot numbers copied on excel spreadsheet." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:134 -msgid "List of lot numbers copied on *Google* spreadsheets." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:140 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:129 msgid "Lot numbers copied to the lot number line." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:140 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:129 msgid "Lot numbers pasted to the \"Lots/Serial numbers\" field, in the **Import Lots** pop-up window." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:142 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:131 msgid "Tick the :guilabel:`Keep current lines` checkbox to generate *additional* lot numbers in the :guilabel:`Open: Stock move` pop-up window. To replace the lot numbers in the list, leave the :guilabel:`Keep current lines` option unticked." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:146 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:135 #: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/serial_numbers.rst:253 msgid "Finally, click :guilabel:`Generate`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:148 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:137 msgid "Once all product quantities have been assigned a lot number, click :guilabel:`Save` to close the pop-up window. Then, click :guilabel:`Validate` on the receipt form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:152 -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:200 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:141 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:188 msgid ":ref:`Traceability report for lot numbers `" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:157 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:146 msgid "On delivery orders" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:159 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:148 msgid "Odoo makes it possible to specify which lot numbers for a product are chosen for outgoing shipment on a delivery order form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:162 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:151 msgid "To begin, create or select an existing quotation from the :menuselection:`Sales` app. After confirming the |SO|, the :guilabel:`Delivery` smart button becomes available. Click the :guilabel:`Delivery` smart button to view the warehouse receipt form for that specific |SO|." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:167 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:156 msgid "Alternatively, navigate to delivery orders by going to the :menuselection:`Inventory` app, and clicking the :guilabel:`Delivery Orders` kanban card." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:170 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:159 msgid "Clicking the :guilabel:`Delivery` smart button opens the the delivery order form, where lot numbers are picked for delivery. In the :guilabel:`Operations` tab, click the |list| icon to the right of the product that is tracked by lot numbers. Clicking that icon reveals a :guilabel:`Open: Stock move` pop-up window." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:175 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:164 msgid "In the pop-up window, the chosen lot number and its storage location is displayed in the :guilabel:`Pick From` column, with the with the full :guilabel:`Quantity` taken from that specific lot (if there is enough stock in that particular lot)." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:179 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:168 msgid "If there is insufficient stock in that lot, or if partial quantities of the :guilabel:`Demand` should be taken from multiple lots, change the :guilabel:`Quantity` directly." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:183 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:172 msgid "The lot automatically chosen for delivery orders varies, depending on the selected removal strategy (:abbr:`FIFO (First In, First Out)`, :abbr:`LIFO (Last In, First Out)`, or :abbr:`FEFO (First Expiry, First Out)`). It also depends on the ordered quantity, and whether the lot's on-hand quantity is enough to fulfill the order." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:191 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:180 msgid "Repeat the above steps to select enough lots to fulfill the :guilabel:`Demand`, and click :guilabel:`Save` to close the pop-up window. Lastly, click the :guilabel:`Validate` button on the |DO| to deliver the products." msgstr "" @@ -6159,59 +6138,59 @@ msgstr "" msgid "Popup for source lot number on sales order." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:203 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:191 msgid "Lot management" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:205 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:193 msgid "Manage and view existing lot numbers for products in the :guilabel:`Lot/Serial Numbers` dashboard by going to :menuselection:`Inventory app --> Products --> Lots/Serial Numbers`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:208 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:196 msgid "By default, lot numbers are grouped by product, and selecting the drop-down menu for each product displays the existing lot numbers. Select a lot number to :ref:`modify or add details ` linked to the lot. Lot numbers can also be :ref:`created ` from this page, by clicking the :guilabel:`New` button." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:218 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:205 msgid "Show the \"Lot/Serial Number\" dashboard." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:218 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:205 msgid "Display lot numbers, grouped by products, on the **Lot/Serial Number** dashboard." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:223 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:210 msgid "Modify lot" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:225 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:212 msgid "Clicking a lot from the :guilabel:`Lot/Serial Number` dashboard reveals a separate page where additional information can be provided about the lot." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:229 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:216 msgid "Odoo automatically generates a new :guilabel:`Lot/Serial Number` to follow the most recent number. However, it can be edited, by clicking the line under the :guilabel:`Lot/Serial Number` field, and changing the generated number to any desired one." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:233 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:220 msgid "On the lot number form, the following fields can be modified:" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:235 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:222 msgid ":guilabel:`Lot/Serial Number`: change the lot number linked to the :guilabel:`Product`" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:236 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:223 msgid ":guilabel:`Internal Reference`: records an alternative lot/serial number used within the warehouse that differs from the one used by the supplier manufacturer." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:238 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:225 msgid ":guilabel:`Company`: specify the company where the lot number is available." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:239 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:226 msgid ":guilabel:`Description`: add extra details about the lot or serial number in this text field." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:242 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:229 msgid "On existing lots, the :guilabel:`Product` and :guilabel:`On Hand Quantity` fields **cannot** be modified, as the lot numbers are linked with existing stock moves." msgstr "" @@ -6219,31 +6198,31 @@ msgstr "" msgid "Show the lot number form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:250 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:236 msgid ":doc:`Set expiration dates for lots `" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:253 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:239 msgid "Add property" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:255 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:241 msgid "To add custom fields to lots for enhanced traceability, there are two methods of adding properties on a lot number form:" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:258 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:244 msgid "Click the :icon:`fa-cog` :guilabel:`(cog)` icon at the top-left of the page, then select :icon:`fa-cogs` :guilabel:`Add Properties` from the drop-down menu." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:260 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:246 msgid "Click the :icon:`fa-plus` :guilabel:`Add a Property` button, located below the existing fields." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:262 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:248 msgid "Name and :doc:`configure the new field `. Once finished, enter the property value in the new field." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:266 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:252 msgid "The new property, `Wood type`, is added. The value is recorded as `Cherry wood`." msgstr "" @@ -6251,31 +6230,31 @@ msgstr "" msgid "Show the \"Add Properties\" button on a lot number form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:273 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:258 msgid ":doc:`Configuring custom properties `" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:278 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:263 msgid "Reserve lot number for a product" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:280 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:265 msgid "To create a lot number for a product, begin by going to :menuselection:`Inventory app --> Products --> Lot/Serial Numbers`, and click :guilabel:`New`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:284 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:269 msgid "Creating a lot number reserves it for a product but **does not** assign it. To assign lot numbers, refer to the section on :ref:`assigning lot numbers on receipts `." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:289 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:274 msgid "While Odoo automatically generates a new :guilabel:`Lot/Serial Number` to follow the most recent number, it can be edited and changed to any desired number, by clicking the line under the :guilabel:`Lot/Serial Number` field on the lot form, and changing the generated number." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:293 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:278 msgid "Once the new :guilabel:`Lot/Serial Number` is generated, click the blank field next to :guilabel:`Product` to reveal a drop-down menu. From this menu, select the product to which this new number will be assigned." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:298 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:283 msgid "The lot number, `000001`, is created for the product, `Drawer Black`." msgstr "" @@ -6283,31 +6262,23 @@ msgstr "" msgid "New lot number creation form with assigned product." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:304 -msgid "After a new lot number has been created, saved, and assigned to the desired product, the lot number is saved as an existing lot number linked to the product, and can be selected when :ref:`assigning lot numbers to products on a receipt `, or when making an inventory adjustment." +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:288 +msgid "After a new lot number has been created, saved, and assigned to the desired product, the lot number is saved as an existing lot number linked to the product, and can be selected when :ref:`assigning lot numbers to products on a receipt `." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:310 -msgid "After creating the lot number, `000001` appears as an option for `Drawer Black` when assigning lot numbers on the :guilabel:`Inventory Adjustment` page." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:0 -msgid "Show how to assign lot numbers on the Inventory Adjustment page." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:318 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:293 msgid "Manage lots for different operations types" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:320 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:295 msgid "By default, new lots can only be created when receiving products, and existing lot numbers cannot be used. For sales orders, only existing lot numbers can be utilized, and new ones cannot be created on the delivery order." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:324 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:299 msgid "To change the ability to use new (or existing) lot numbers on any operation type, go to the :menuselection:`Inventory app --> Configuration --> Operations Types`, and select the desired operation type." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:328 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:303 msgid "On the operation type form, under the :guilabel:`Lots/Serial Numbers` section, tick the :guilabel:`Create New` checkbox to enable new lot numbers to be created during this operation type. Choose :guilabel:`Use Existing ones` if only existing lot numbers can be selected." msgstr "" @@ -6315,40 +6286,40 @@ msgstr "" msgid "Enabled traceability setting on operations type form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:337 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:311 msgid "For inter-warehouse transfers involving products tracked by lots, it can be useful to enable the :guilabel:`Use Existing Lots/Serial Numbers` option for warehouse receipts." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:343 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:317 msgid "Display lots on delivery slips" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:345 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:319 msgid "When selling products tracked with lots, it is possible to include the lot numbers on the delivery slips sent to customers. This can be helpful to customers in cases where lot numbers are needed, such as filing an RMA or repair request, or registering the product." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:349 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:323 msgid "To include lot numbers on delivery slips, open the :menuselection:`Inventory` app, and navigate to :menuselection:`Configuration --> Settings`. Scroll down to the :guilabel:`Traceability` section, tick the :guilabel:`Display Lots & Serial Numbers on Delivery Slips` checkbox, and click :guilabel:`Save`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:354 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:328 msgid "After enabling the :guilabel:`Display Lots & Serial Numbers on Delivery Slips` setting, lot numbers are listed on delivery slips for products tracked by lots, once the delivery order is validated." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:357 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:331 msgid "To view lot numbers on delivery orders and delivery slips, navigate to the :menuselection:`Inventory` app, click on :guilabel:`Delivery Orders`, and select an order containing a product tracked using lots." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:361 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:335 msgid "To view the lot numbers of products included in the order, make sure the :guilabel:`Operations` tab is selected, then click the :icon:`oi-settings-adjust` :guilabel:`(adjust)` button to the right of the tab. Ensure that the :guilabel:`Serial Numbers` checkbox is ticked, which causes a :guilabel:`Serial Numbers` column to appear. The lot number(s) for each product included in the order are displayed in this column." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:367 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:341 #: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/serial_numbers.rst:326 msgid "When the order is ready to be processed, click :guilabel:`Validate` to confirm the delivery and add product information to the delivery slip." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:370 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:344 msgid "At the top of the order's form, click the :icon:`fa-cog` :guilabel:`(Actions)` button, and select :guilabel:`Print --> Delivery Slip`. The delivery slip is then downloaded. Open the delivery slip using the device's browser or file manager. Lot numbers are listed next to their respective products in the :guilabel:`Lot/Serial Number` column." msgstr "" @@ -6357,23 +6328,23 @@ msgstr "" msgid "The order lines section of a delivery slip, showing a product and its serial number." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:381 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:355 msgid "Manufacturers and companies can refer to traceability reports to see the entire lifecycle of a product: where it came from, when it arrived, where it was stored, who it went to (and when)." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:384 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:358 msgid "To see the full traceability of a product, or group by lots, go to the :menuselection:`Inventory app --> Products --> Lots/Serial Numbers`. Doing so reveals the :menuselection:`Lots/Serial Numbers` dashboard." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:388 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:362 msgid "From here, products with lot numbers assigned to them will be listed by default, and can be expanded to show the lot numbers those products have assigned to them." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:391 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:365 msgid "To group by lots, begin by removing any filters in the :guilabel:`Search...` bar. Then, click the :icon:`fa-caret-down` :guilabel:`(caret down)` icon to open a drop-down menu of :guilabel:`Filters`, :guilabel:`Group By` options, and :guilabel:`Favorites`. Under the :guilabel:`Group By` section, click the :guilabel:`Add Custom Group` option, and select :guilabel:`Lot/Serial Number` from the drop-down menu." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:397 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:371 msgid "Doing so reorganizes all the records on the page to display all existing lots and serial numbers, and can be expanded to show all quantities of products with that assigned number." msgstr "" @@ -6381,11 +6352,11 @@ msgstr "" msgid "Lots and serial numbers traceability report." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:405 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:378 msgid "Traceability report" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:407 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:380 msgid "To view a full stock moves report for a lot number, select the lot number line from the :guilabel:`Lots/Serial Number` dashboard. On the lot number form, click the :guilabel:`Traceability` smart button." msgstr "" @@ -6393,7 +6364,7 @@ msgstr "" msgid "Show the Traceability Report for a lot, that displays the stock moves." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:416 +#: ../../content/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots.rst:388 msgid ":doc:`../product_tracking`" msgstr "" @@ -7017,69 +6988,17 @@ msgid "Delivery" msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations.rst:113 -msgid "Tailor the outgoing shipment process to fit the business needs. Picking methods and removal strategies control how products are reserved for orders, while cross-docking and dropshipping determine how they move. Configuring these options in Odoo ensures visibility into product movement and confirms that items reach customers efficiently." +msgid "Tailor the outgoing shipment process to fit the business needs. Picking methods and removal strategies control how products are reserved for orders, while dropshipping determines how they move. Configuring these options in Odoo ensures visibility into product movement and confirms that items reach customers efficiently." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations.rst:141 +#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations.rst:136 msgid "Customization" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations.rst:143 +#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations.rst:138 msgid "Odoo's flexible framework enables businesses to tailor workflows to match specific operational needs." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:3 -msgid "Organize a cross-dock in a warehouse" -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:5 -msgid "Cross-docking is the process of sending products that are received directly to the customers, without making them enter the stock. The trucks are simply unloaded in a *Cross-Dock* area in order to reorganize products and load another truck." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:13 -msgid "For more information on how to organize your warehouse, read our blog: `What is cross-docking and is it for me? `_" -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:20 -msgid "In the *Inventory* app, open :menuselection:`Configuration --> Settings` and activate the *Multi-Step Routes*." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:27 -msgid "Doing so will also enable the *Storage Locations* feature." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:29 -msgid "Now, both *Incoming* and *Outgoing* shipments should be configured to work with 2 steps. To adapt the configuration, go to :menuselection:`Inventory --> Configuration --> Warehouses` and edit your warehouse." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:36 -msgid "This modification will lead to the creation of a *Cross-Docking* route that can be found in :menuselection:`Inventory --> Configuration --> Routes`." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:43 -msgid "Configure products with Cross-Dock Route" -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:45 -msgid "Create the product that uses the *Cross-Dock Route* and then, in the inventory tab, select the routes *Buy* and *Cross-Dock*. Now, in the purchase tab, specify the vendor to who you buy the product and set a price for it." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:55 -msgid "Once done, create a sale order for the product and confirm it. Odoo will automatically create two transfers which will be linked to the sale order. The first one is the transfer from the *Input Location* to the *Output Location*, corresponding to the move of the product in the *Cross-Dock* area. The second one is the delivery order from the *Output Location* to your *Customer Location. Both are in state *Waiting Another Operation* because we still need to order the product to our supplier." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:68 -msgid "Now, go to the *Purchase* app. There, you will find the purchase order that has been automatically triggered by the system. Validate it and receive the products in the *Input Location*." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:77 -msgid "When the products have been received from the supplier, you can go back to your initial sale order and validate the internal transfer from *Input* to *Output*." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/cross_dock.rst:86 -msgid "The delivery order is now ready to be processed and can be validated too." -msgstr "" - #: ../../content/applications/inventory_and_mrp/inventory/shipping_receiving/daily_operations/delivery_three_steps.rst:3 msgid "Three-step delivery" msgstr "" @@ -16190,7 +16109,7 @@ msgid ":guilabel:`Short Name` (*required field*): the abbreviated code for the w msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/inventory_management/warehouses.rst:26 -msgid "The :guilabel:`Short Name` appears on warehouse documents, so it is recommended to use an memorable one, like \"WH[first letters of location]\" (e.g. `WHA`, `WHB`, etc.)." +msgid "The :guilabel:`Short Name` appears on warehouse documents, so it is recommended to use a memorable one, like \"WH[first letters of location]\" (e.g. `WHA`, `WHB`, etc.)." msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/inventory_management/warehouses.rst:29 @@ -16257,88 +16176,88 @@ msgstr "" msgid "Each replenishment mechanism triggers the creation or suggestion of a purchase order (PO) or manufacturing order (MO), with the best choice depending on the business process." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:42 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:48 msgid "Replenishment strategies" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:45 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:51 msgid "Replenishment report and reordering rules" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:47 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:53 msgid "Reordering rules are rules that can be set up to maintain a minimum stock level. They are often configured to support manufacturing or sales requirements. When a product's stock falls at or below the minimum level, Odoo generates (or suggests) a purchase or manufacturing order to replenish stock to the maximum level." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:52 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:58 msgid "When using automatic reordering rules, Odoo generates a new order. When using manual, Odoo suggests orders on the replenishment report. For detailed guidance, refer to the :doc:`replenishment report ` and :doc:`reordering rules `." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:56 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:62 msgid "Key points include:" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:58 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:64 msgid ":ref:`Automatic reordering rules `: Automatically create |POs| or |MOs| when stock falls below the minimum level. While this is convenient, it is less flexible." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:61 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:67 msgid ":ref:`Manual reordering rules `: Generate suggestions in the replenishment report for user review, allowing adjustments and batch orders while meeting deadlines." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:64 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:70 msgid ":ref:`Just-in-time logic `: A strategy to replenish only what is needed to prevent overstocking." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:68 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:74 msgid ":doc:`replenishment/reordering_rules`" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:69 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:75 msgid ":doc:`replenishment/report`" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:74 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:80 msgid "Make to order" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:76 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:82 msgid "An |MTO| strategy means that procurement or production is triggered only after a sales order has been confirmed. This strategy is recommended when products are customizable, demand is unpredictable, there is limited storage capacity, and when products are high in value and low in demand. In such cases, it does not make sense to keep on-hand inventory." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:81 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:87 msgid "Unlike products replenished using reordering rules, Odoo automatically links the sales order to the |PO| or |MO| generated by the |MTO| route." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:84 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:90 msgid "Another difference between reordering rules and |MTO| is, with |MTO|, Odoo generates a draft |PO| or |MO| immediately after the |SO| is confirmed. With reordering rules, Odoo generates a draft |PO| or |MO| when the product's forecasted stock falls below the set minimum quantity." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:88 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:94 msgid "In addition, Odoo automatically adds quantities to the |PO| or |MO| as the forecast changes, so long as the |PO| or |MO| is not confirmed." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:91 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:97 msgid "The |MTO| route is the best replenishment strategy for products that are customized, and/or for products that have no stock kept on-hand." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:95 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:101 msgid ":doc:`replenishment/mto`" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:98 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:104 #: ../../content/applications/inventory_and_mrp/manufacturing/workflows/use_mps.rst:3 msgid "Master production schedule" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:100 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:106 msgid "The :abbr:`MPS (Master Production Schedule)` is a dashboard where products and their forecasted quantities are entered. Based on confirmed manufacturing and purchase orders, the dashboard recommends amounts to order or produce." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:104 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:110 msgid "This a useful **manual** tool for keeping track of quantities. The :abbr:`MPS (Master Production Schedule)` **should absolutely not** be used alongside reordering rules, as the automated workflow disrupts its manual replenishment method." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:109 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment.rst:115 msgid ":doc:`../../manufacturing/workflows/use_mps`" msgstr "" @@ -16852,30 +16771,50 @@ msgid "Replenish on order (MTO)" msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:13 -msgid "*Replenish on order*, also known as *MTO* (make to order), is a replenishment strategy that creates a draft order for a product every time it is required to fulfill a sales order (SO), or when it is needed as a component in a manufacturing order (MO)." +msgid "*Replenish on order*, also known as *MTO* (make to order), is a replenishment strategy that creates a draft order every time a product is needed to fulfill a sales order (SO) or as a component in a manufacturing order (MO)." msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:17 -msgid "For products that are purchased from a vendor, a request for quotation (RFQ) is created to replenish the product, while an |MO| is created for products that are manufactured. The creation of an |RFQ| or |MO| occurs every time an |SO| or |MO| that requires the product is confirmed, regardless of the current stock level of the product being ordered." +msgid "For :doc:`purchased products <../../../purchase/manage_deals/rfq>`, Odoo creates a |RFQ|" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:23 -msgid "In order to use the |MTO| route, the :guilabel:`Multi-Step Routes` feature must be enabled. To do so, navigate to :menuselection:`Inventory app --> Configuration --> Settings`, and tick the checkbox next to :guilabel:`Multi-Step Routes`, under the :guilabel:`Warehouse` heading." +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:18 +msgid "For :doc:`manufactured products <../../../manufacturing/basic_setup/configure_manufacturing_product>`, it creates a |MO|" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:21 +msgid "If stock is available, no |RFQ| or |MO| is generated and the sale proceeds normally. Otherwise, the |RFQ| or |MO| is generated and directly linked to the originating |SO| through a smart button." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:24 +msgid "This approach offers clear traceability, since each |RFQ| or |MO| is tied back to its demand." msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:27 -msgid "Finally, click :guilabel:`Save` to save the change." +msgid "The |RFQ| or |MO| generated by |MTO| is designed to fulfill the originating |SO|. These documents should normally be confirmed or adjusted rather than cancelled. If the demand changes, update the document instead of cancelling it." msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:32 +msgid "If an |RFQ| or |MO| is cancelled, Odoo does not automatically generate a replacement. A new replenishment document must be created manually, but it **cannot** be linked back to the original |SO| through the smart button." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:36 +msgid "Finally, click :guilabel:`Save` to save the change." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:41 msgid "Unarchive MTO route" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:34 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:43 +msgid "In order to use the |MTO| route, the :guilabel:`Multi-Step Routes` feature must be enabled. To do so, navigate to :menuselection:`Inventory app --> Configuration --> Settings`, and tick the checkbox next to :guilabel:`Multi-Step Routes`, under the :guilabel:`Warehouse` heading." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:47 msgid "By default, Odoo sets the |MTO| route as *archived*. This is because |MTO| is a somewhat niche workflow that is only used by certain companies. However, it is easy to unarchive the route in just a few simple steps." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:38 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:51 msgid "To do so, begin by navigating to :menuselection:`Inventory app --> Configuration --> Routes`. On the :guilabel:`Routes` page, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon on the right side of the search bar, and click the :guilabel:`Archived` filter to enable it." msgstr "" @@ -16883,7 +16822,7 @@ msgstr "" msgid "The archived filter on the Routes page." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:46 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:59 msgid "After enabling the :guilabel:`Archived` filter, the :guilabel:`Routes` page shows all routes which are currently archived. Tick the checkbox next to :guilabel:`Replenish on Order (MTO)`, then click the :icon:`fa-cog` :guilabel:`Actions` button to reveal a drop-down menu. From the drop-down menu, select :guilabel:`Unarchive`." msgstr "" @@ -16891,23 +16830,23 @@ msgstr "" msgid "The unarchive action on the Routes page." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:55 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:68 msgid "Finally, remove the :guilabel:`Archived` filter from the search bar. The :guilabel:`Routes` page now shows all unarchived routes, including :guilabel:`Replenish on Order (MTO)`, which is selectable on the *Inventory* tab of each product page." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:60 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:73 msgid "Configure product for MTO" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:62 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:75 msgid "With the |MTO| route unarchived, products can now be properly configured to use replenish on order. To do so, begin by going to :menuselection:`Inventory app --> Products --> Products`, then select an existing product, or click :guilabel:`New` to configure a new one." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:66 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:79 msgid "On the product page, select the :guilabel:`Inventory` tab and enable the :guilabel:`Replenish on Order (MTO)` route in the :guilabel:`Routes` section, along with the :guilabel:`Buy` or :guilabel:`Manufacture` route." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:71 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:84 msgid "The :guilabel:`Replenish on Order (MTO)` route **does not** work unless another route is selected as well. This is because Odoo needs to know how to replenish the product when an order is placed for it (buy or manufacture it)." msgstr "" @@ -16915,79 +16854,87 @@ msgstr "" msgid "Select the MTO route and a second route on the Inventory tab." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:79 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:92 msgid "If the product is purchased from a vendor to fulfill |SOs|, enable the :guilabel:`Can be Purchased` checkbox under the product name. Doing so makes the :guilabel:`Purchase` tab appear alongside the other tabs below." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:83 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:96 msgid "Click the :guilabel:`Purchase` tab and specify a :guilabel:`Vendor` and the :guilabel:`Price` they sell the product for." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:87 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:100 msgid "Specifying a vendor is essential for this workflow, because Odoo cannot generate an |RFQ| without knowing who the product is purchased from." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:90 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:103 msgid "If the product is manufactured, make sure it has a bill of materials (BOM) configured for it. To do so, click the :guilabel:`Bill of Materials` smart button at the top of the screen, then click :guilabel:`New` on the :guilabel:`Bill of Materials` page to configure a new |BOM| for the product." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:95 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:108 msgid "For a full overview of |BOM| creation, see the documentation on :doc:`bills of materials <../../../manufacturing/basic_setup/bill_configuration>`." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:99 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:112 msgid "Replenish using MTO" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:101 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:114 msgid "After configuring a product to use the |MTO| route, a replenishment order is created for it every time an |SO| or |MO| including the product is confirmed. The type of order created depends on the second route selected in addition to |MTO|." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:105 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:118 msgid "For example, if *Buy* was the second route selected, then a |PO| is created upon confirmation of an |SO|." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:109 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:122 msgid "When the |MTO| route is enabled for a product, a replenishment order is always created upon confirmation of an |SO| or |MO|. This is the case, even if there is enough stock of the product on-hand to fulfill the |SO|, without buying or manufacturing additional units of it." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:113 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:126 msgid "While the |MTO| route can be used in unison with the *Buy* or *Manufacture* routes, the *Buy* route is used as the example for this workflow. Begin by navigating to the :menuselection:`Sales` app, then click :guilabel:`New`, which opens a blank quotation form." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:117 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:130 msgid "On the blank quotation form, add a :guilabel:`Customer`. Then, click :guilabel:`Add a product` under the :guilabel:`Order Lines` tab, and enter a product configured to use the *MTO* and *Buy* routes. Click :guilabel:`Confirm`, and the quotation is turned into an |SO|." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:121 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:134 msgid "A :guilabel:`Purchase` smart button now appears at the top of the page. Clicking it opens the |RFQ| associated with the |SO|." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:124 -msgid "Click :guilabel:`Confirm Order` to confirm the |RFQ|, and turn it into a |PO|. A purple :guilabel:`Receive Products` button now appears above the |PO|. Once the products are received, click :guilabel:`Receive Products` to open the receipt order, and click :guilabel:`Validate` to enter the products into inventory." +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:137 +msgid "After receiving approval from the vendor that they can meet the demand by the :guilabel:`Expected Arrival` date, click :guilabel:`Confirm Order` to turn it into a |PO|. A purple :guilabel:`Receive Products` button now appears above the |PO|. Once the products are received, click :guilabel:`Receive Products` to open the receipt order, and click :guilabel:`Validate` to enter the products into inventory." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:129 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:143 msgid "Return to the |SO| by clicking the :guilabel:`SO` breadcrumb, or by navigating to :menuselection:`Sales app --> Orders --> Orders`, and selecting the|SO|." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:132 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:146 msgid "Finally, click the :guilabel:`Delivery` smart button at the top of the order to open the delivery order. Once the products have been shipped to the customer, click :guilabel:`Validate` to confirm the delivery." msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:137 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:151 +msgid "Cancelling an SO with an MTO product" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:153 +msgid "When a |SO| is cancelled, and it had created an |RFQ| or |MO|, the related delivery order is cancelled automatically. However, the |RFQ| or |MO| themselves are **not** cancelled. Instead, a warning appears in their chatter noting the |SO| cancellation. These documents remain active, so the user can either cancel them manually or repurpose the replenishment for another order." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:159 msgid "For information on workflows that include the |MTO| route, see the following documentation:" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:139 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:161 msgid ":doc:`resupply_warehouses`" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:140 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:162 msgid ":doc:`../../../manufacturing/subcontracting/subcontracting_basic`" msgstr "" -#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:141 +#: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/mto.rst:163 msgid ":doc:`../../../manufacturing/advanced_configuration/sub_assemblies`" msgstr "" @@ -18774,6 +18721,7 @@ msgstr "" #: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/moves_history.rst:49 #: ../../content/applications/inventory_and_mrp/inventory/warehouses_storage/reporting/stock.rst:70 +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:38 msgid "Filters" msgstr "" @@ -22176,6 +22124,102 @@ msgstr "" msgid "The assignment labels generated by clicking Print Labels or Print Label." msgstr "" +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:3 +msgid "Delays" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:11 +msgid "Odoo's *Manufacturing* app displays *delays* in manufacturing orders through the :guilabel:`Delayed Productions` filter. If the |MO|'s end date exceeds its deadline, the deadline is highlighted in red to draw attention to the delay." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:-1 +msgid "The delayed production filter in Odoo." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:19 +msgid "Deadline calculation" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:21 +msgid "The |MO| deadline depends on how the |MO| was created, and is calculated as follows:" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:23 +msgid "**Make To Order**: the |MO| deadline is the *Sales Order Delivery Date*." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:24 +msgid "**Replenishment**: the |MO| deadline is *today + Manufacturing Lead Time*." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:25 +msgid "**Manually created MO**: the deadline field remains empty." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:28 +msgid "The |MO| *deadline* is not the same as the |MO| *end date*." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:30 +msgid "The end date is computed as:" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:32 +msgid "\\text{End date} =\n" +" \\text{Scheduled start date}\n" +" +\\text{Total duration of all operations}\n" +"\n" +"" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:40 +msgid "Several additional filters are available to help track delays:" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:42 +msgid ":guilabel:`Delayed Productions`: the |MO|'s *scheduled start date* is later than the deadline." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:43 +msgid ":guilabel:`Late`: the |MO|'s *scheduled end date* exceeds the deadline, highlighted in red." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:44 +msgid ":guilabel:`Late Availability`: one or more required components are not available before the deadline. For example, a confirmed purchase order or manufacturing order for components is scheduled to end *after* the |MO| deadline." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:47 +msgid ":guilabel:`Components Available`: all components are available to begin production." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:50 +msgid "Use case" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:52 +msgid "Consider an |MO| with a deadline of **September 17th**:" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:54 +msgid "If production on the |MO| starts after September 17th, it appears in the :guilabel:`Delayed Productions` filter." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:56 +msgid "If required components are scheduled to arrive after September 17th, the |MO| appears in the :guilabel:`Late Availability` filter." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:58 +msgid "If the |MO| has a scheduled end date after September 17th, it appears in the :guilabel:`Late` filter." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:-1 +msgid "An MO with the deadline emphasized." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/manufacturing/reporting/delayed.rst:64 +msgid "By combining these indicators, planners can quickly identify where production is at risk of missing delivery commitments." +msgstr "" + #: ../../content/applications/inventory_and_mrp/manufacturing/reporting/oee.rst:3 msgid "Overall equipment effectiveness" msgstr "" @@ -24720,14 +24764,14 @@ msgstr "" #: ../../content/applications/inventory_and_mrp/manufacturing/workflows/manufacturing_backorders.rst:82 #: ../../content/applications/inventory_and_mrp/quality/quality_check_types/pass_fail_check.rst:121 #: ../../content/applications/inventory_and_mrp/quality/quality_check_types/picture_check.rst:133 -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:129 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:131 msgid "On the |MO|, select the :guilabel:`Work Orders` tab, and then click the :guilabel:`Open Work Order (external link icon)` button on the line of the work order to be processed. On the resulting :guilabel:`Work Orders` pop-up window, click the :guilabel:`Open Shop Floor` button to open the *Shop Floor* module." msgstr "" #: ../../content/applications/inventory_and_mrp/manufacturing/workflows/manufacturing_backorders.rst:87 #: ../../content/applications/inventory_and_mrp/quality/quality_check_types/instructions_check.rst:80 #: ../../content/applications/inventory_and_mrp/quality/quality_check_types/pass_fail_check.rst:126 -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:138 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:140 msgid "When accessed from a specific work order, the *Shop Floor* module opens to the page for the work center where the order is configured to be processed, and isolates the work order's card so that no other cards are shown." msgstr "" @@ -26769,6 +26813,328 @@ msgstr "" msgid "To save this report as a *favorite*, see :ref:`search/favorites`." msgstr "" +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:3 +msgid "Suggest quantities based on historical demand" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:7 +msgid "For a straightforward push-based replenishment strategy, the *Suggest* feature recommends quantities to order on requests for quotations (RFQs) based on historical demand." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:11 +msgid "Key parameters" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:13 +msgid "*Replenish for*: future coverage window (days)." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:14 +msgid "*Based on*: period that defines historical demand: last 7 days, 30 days, 3 months, 12 months, or the same month or quarter the previous year." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:16 +msgid "*Factor*: growth or decline factor (default 100%). After obtaining the total from the period, multiply the historical demand by this percentage to determine how much of the demand should be replenished. (e.g., input `120%` if sales are projected to grow 20% more than the previous period)" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:21 +msgid "Demand calculation" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:23 +msgid "To find the *average daily demand*, Odoo sums all :ref:`validated deliveries `, :ref:`components consumed in manufacturing orders ` (MOs), or used to :doc:`resupply subcontractors <../../manufacturing/subcontracting/subcontracting_resupply>` in the *Based on* period and divides that total by the number of days in the *Based on* period. Lastly, that value is multiplied by the *Factor* to determine volume." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:31 +msgid "In a :ref:`multi-warehouse ` setup, an *In* field appears. Choose a specific warehouse or leave blank to use all warehouses to calculate demand accordingly." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:35 +msgid "Average~Daily~Demand = \\frac{Delivered~or~Consumed~Items}{Based~on~Days} \\times Factor" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:41 +msgid "Recommended quantity" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:43 +msgid "To find the suggested quantity, Odoo multiplies the average by *Replenish for* days to get the recommended quantity." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:46 +msgid "Recommended~Quantity = Average~Daily~Demand \\times Replenish~for~Days" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:52 +msgid "In :ref:`example 1 `, Odoo recommends `19` units to *Replenish for* `14` days *Based on* the past month's `40` delivered units." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:56 +msgid "Prerequisite setup" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:58 +msgid "**Purchase** and **Inventory** apps must be :ref:`installed `." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:59 +msgid ":ref:`Validate at least one delivery order ` for each product." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:61 +msgid "Ensures there is a past delivery record so the system can calculate average daily demand." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:63 +msgid ":ref:`Add a vendor to the vendor pricelist ` with a purchase price for each product." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:66 +msgid "The *Suggest* feature is vendor-specific, so each product needs a matching vendor for accurate purchase quantity and price calculations." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:69 +msgid "Set the *Product Type* to *Goods* and ensure the product is :ref:`Tracked by quantity `." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:72 +msgid "Ensures the system can manage stock levels and calculate recommended replenishment quantities for tangible items." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:76 +msgid "Suggest quantities to order" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:78 +msgid "To suggest quantities based on past sales, navigate to the :menuselection:`Purchase` app. Create a :guilabel:`New` |RFQ| or select an existing one." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:81 +msgid "In the |RFQ|, set the :guilabel:`Vendor` field to the chosen supplier." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:83 +msgid "In the :guilabel:`Products` tab, click the :guilabel:`Catalog` button to view that vendor's items." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:86 +msgid "Verify that each product in the catalog is configured with the chosen vendor." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:89 +msgid "By default, products listed in the product catalog are filtered by vendor." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:91 +msgid "Remove the filter in the search bar to view all items or use the built-in :icon:`oi-group` :guilabel:`Group By` for :guilabel:`Product Category`." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:94 +msgid "Inside the :guilabel:`Catalog`, click :guilabel:`Suggest` in the upper-left corner to open the :guilabel:`Suggest Quantities based on Sales & Demands` pop-up window. Complete its fields as follows:" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:98 +msgid ":guilabel:`Replenish for`: Number of days intended to stock products." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:99 +msgid ":guilabel:`Based on`: There are two inputs:" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:101 +msgid "Period: select the time frame that represents historical demand (e.g., :guilabel:`Last 30 Days`, :guilabel:`April 2024`)." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:104 +msgid "Growth factor %: scale the demand up or down (e.g., 120% for 20% growth, 30% for 70% drop)." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:106 +msgid "The total in the lower-right corner shows the order value. Odoo multiplies the vendor's *Unit Price* by the suggested quantity." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:109 +msgid "Once the parameters are confirmed, click :guilabel:`Compute` to calculate recommended quantities, which are auto-filled in each product's quantities in the catalog. Adjust amounts if needed, then click :guilabel:`Back to Quotation` to confirm the final numbers on the |RFQ|." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:116 +msgid "Recommend at 100% growth" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:118 +msgid "A company needs to replenish orchids for 14 days, referencing the last 30 days of historical data, assuming the revenue growth is the same this month, at 100%." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:-1 +msgid "Compute suggestion for example 1." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:124 +msgid "Delivered/consumed within the period:" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:126 +msgid "20 units delivered 15 days ago in a `WH/OUT` operation." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:127 +msgid "20 units delivered 1 day ago" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:128 +msgid "Total: 40 units in the last 30 days" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:131 +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:168 +msgid "Variables" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:133 +msgid "Replenish for: 14 days" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:134 +msgid "Based on: 30 days" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:136 +msgid "total delivered/consumed in the period: 40 units" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:138 +msgid "Factor: 100%" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:140 +msgid "Average~Daily~Demand = \\frac{40}{30} \\approx 1.33 \\text{ units/day}" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:145 +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:182 +msgid "Suggested quantity" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:147 +msgid "Suggested~Quantity = 1.33 \\times 14 \\approx 18.67 \\text{ (rounded to 19 units)}" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:154 +msgid "Suggestion to purchase 19 units." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:154 +msgid "Suggestion to purchase 19 orchids. Since the *Unit Price* is $3, :math:`$3 \\times 19 = $57`, which is the total amount displayed in the :guilabel:`Suggest Quantities based on Sales & Demands` pop-up window." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:159 +msgid "Recommend at 120% growth" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:161 +msgid "To plan for ordering roses this month, the company reviews the previous week's sales. Since a local event is coming up, the company expects 120% growth." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:-1 +msgid "Compute suggestion for example 2." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:170 +msgid "Replenish for 30 days" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:171 +msgid "Based on: 7 days" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:173 +msgid "total delivered/consumed in the past week: 166 units" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:175 +msgid "Factor: 120%" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:177 +msgid "Average~Daily~Demand = \\frac{166}{7} \\times 1.20 \\approx 28.46 \\text{ units/day}" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:184 +msgid "Suggested~Quantity = 28.46 \\times 30 \\approx 853.8 \\text{ (rounded to 854 units)}" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:191 +msgid "Suggestion to purchase 854 roses." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:191 +msgid "Suggestion to purchase 854 roses. Each rose costs $4.58 with the chosen vendor, so :math:`$4.58 \\times 854 = $3911.32`." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:197 +msgid "Recommend from specific warehouse" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:199 +msgid "When there are multiple warehouses in a company, analyze delivered or consumed quantities in a specific warehouse to narrow the results. This is particularly helpful when multiple warehouses serve different communities, franchises, or branch stores." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:203 +msgid "To do that, ensure :doc:`multiple warehouses are set up <../../inventory/warehouses_storage/inventory_management/warehouses>` and deliveries or :abbr:`MOs (manufacturing orders)` are validated in each warehouse." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:207 +msgid "Navigate to the suggestion window by going to the :menuselection:`Purchase` app, clicking the desired |RFQ|, clicking the :guilabel:`Catalog` button in the product line, and then clicking :guilabel:`Suggest` in the upper-left corner." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:211 +msgid "With multiple warehouses set up, the :guilabel:`In` field becomes available, where the specific warehouse can be selected to analyze quantities consumed only in the specific warehouse, or leave the field blank to observe quantities across all warehouses." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:-1 +msgid "Show In field in the popup, displaying different warehouses to choose from." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:219 +msgid "Best practices" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:221 +msgid "Validate historical data" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:223 +msgid "Forecasts are based on validated delivery orders, manufacturing orders, and other inventory actions that consume quantities. For delivery orders, the *Effective Date* field is considered the date the quantities were consumed." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:0 +msgid "Example of effective date field." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:230 +msgid "Maintain accurate vendor pricelists" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:232 +msgid "Review and update vendor pricelists to reflect the latest pricing and supplier information to ensure correct suggestions." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:235 +msgid "Test sales projections based on seasonality" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:237 +msgid "Reference prior months or quarters to capture seasonal fluctuations and experiment with growth and decline factors to project sales." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:240 +msgid "Review suggestions critically" +msgstr "" + +#: ../../content/applications/inventory_and_mrp/purchase/advanced/suggest.rst:242 +msgid "Although the tool provides a baseline recommendation, always apply business judgment. Market changes, promotions, and upcoming events can affect actual demand." +msgstr "" + #: ../../content/applications/inventory_and_mrp/purchase/advanced/vendor_costs_report.rst:3 msgid "Vendor costs report" msgstr "" @@ -27300,56 +27666,50 @@ msgid ":doc:`blanket_orders`" msgstr "" #: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:3 -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/manage.rst:20 -msgid "Bill control policies" +msgid "Control policies" msgstr "" #: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:10 -msgid "In Odoo's *Purchase* app, the *bill control* policy determines the quantities billed by vendors on every purchase order (PO), for either ordered or received quantities." +msgid "In Odoo's **Purchase** app, the *Control Policy* determines the quantities billed by vendors on every purchase order (PO). For example, choosing *On ordered quantities* means the bill is based on ordered items, even if they have not been received yet." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:13 -msgid "The policy selected in the *Purchase* app settings acts as the default value, and is applied to any new product created." +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:14 +msgid "The control policy is selected on the *Product* record." msgstr "" #: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:19 -msgid "To configure the *bill control* policy, navigate to :menuselection:`Purchase app --> Configuration --> Settings`, and scroll down to the :guilabel:`Invoicing` section. Under :guilabel:`Bill Control`, select either :guilabel:`Ordered quantities` or :guilabel:`Received quantities`. Then, click :guilabel:`Save`." +msgid "To configure the control policy for a product, navigate to :menuselection:`Purchse app --> Prodcuts --> Products`, then click on a product record to open it. Click to the :guilabel:`Purchase` tab. Scroll to the :guilabel:`Vendor Bills` section. Under :guilabel:`Control Policy`, tick the radio button for either :guilabel:`On ordered quantities` or :guilabel:`On recieved quantities`." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:-1 -msgid "Selected bill control policy in Purchase app settings." +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:24 +msgid ":guilabel:`On ordered quantities`: Creates a vendor bill as soon as a |PO| is confirmed. The products and quantities in the |PO| are used to generate a draft bill." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:28 -msgid ":guilabel:`Ordered quantities`: creates a vendor bill as soon as a |PO| is confirmed. The products and quantities in the |PO| are used to generate a draft bill." +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:26 +msgid ":guilabel:`On received quantities`: A bill is created only *after* part of the total order has been received. The products and quantities received are used to generate a draft bill. An error message appears if creation of a vendor bill is attempted without receiving anything." msgstr "" #: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:30 -msgid ":guilabel:`Received quantities`: a bill is created only *after* part of the total order has been received. The products and quantities received are used to generate a draft bill. An error message appears if creation of a vendor bill is attempted without receiving anything." +msgid "The default control policy for a product is determined by the :guilabel:`Product Type`:" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:0 -msgid "Bill control policy draft bill error message." +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:32 +msgid "**Services**: The default control policy is *On ordered quantities*." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:39 -msgid "If a specific product should use a different control policy than selected in the *Purchase* app settings, the :guilabel:`Bill Control` policy for that product can be changed from its product form." +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:33 +msgid "**Goods**: The default control policy is *On delivered quantities*" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:43 -msgid "To do that, navigate to :menuselection:`Purchase app --> Products --> Products`, and select a product. From the product form, click the :guilabel:`Purchase` tab. Under the :guilabel:`Vendor Bills` section, modify the selection in the :guilabel:`Control Policy` field." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:48 -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/manage.rst:51 -msgid "3-way matching" +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:36 +msgid "Pay vendor bills with 3-way matching" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:50 -msgid "The *3-way matching* feature ensures vendor bills are only paid once some (or all) of the products included in the |PO| have been received." +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:38 +msgid "The *3-way matching* feature ensures vendor bills are only paid once some, or all, of the products included in the |PO| have been received." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:53 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:41 msgid "To activate *3-way matching*, navigate to :menuselection:`Purchase app --> Configuration --> Settings`, and scroll down to the :guilabel:`Invoicing` section. Then, tick the checkbox for :guilabel:`3-way matching` to enable the feature, and click :guilabel:`Save`." msgstr "" @@ -27357,31 +27717,23 @@ msgstr "" msgid "Enabled 3-way matching feature in Purchase app settings." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:62 -msgid "The :guilabel:`3-way matching` feature **only** works with the :guilabel:`Bill Control` policy set to :guilabel:`Received quantities`." -msgstr "" - -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:66 -msgid "Pay vendor bills with 3-way matching" -msgstr "" - -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:68 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:48 msgid "When *3-way matching* is enabled, vendor bills display a :guilabel:`Should Be Paid` field under the :guilabel:`Other Info` tab. When a new vendor bill is created, the field is set to :guilabel:`Yes`, since a bill **cannot** be created until at least some of the products included in a |PO| have been received." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:73 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:53 msgid "To create a vendor bill from a |PO|, navigate to :menuselection:`Purchase app --> Orders --> Purchase Orders`. From the :guilabel:`Purchase Orders` page, select the desired |PO| from the list. Then, click :guilabel:`Create Bill`. Doing so opens a new draft :guilabel:`Vendor Bill` form, in the :guilabel:`Draft` stage. Click the :guilabel:`Other Info` tab, and locate the :guilabel:`Should Be Paid` field." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:80 -msgid "The |PO| selected from the list **must not** be billed yet, or an :guilabel:`Invalid Operation` pop-up window appears. This occurs for |POs| with a :guilabel:`Received quantities` policy, and a :guilabel:`Fully Billed` :guilabel:`Billing Status`." +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:60 +msgid "The |PO| selected from the list **must not** be billed yet, or an :guilabel:`Invalid Operation` pop-up window appears." msgstr "" #: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:0 msgid "Invalid Operation pop-up window for billed Purchase Order." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:88 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:66 msgid "Click the drop-down menu next to :guilabel:`Should Be Paid` to view the available options: :guilabel:`Yes`, :guilabel:`No`, and :guilabel:`Exception`." msgstr "" @@ -27389,47 +27741,47 @@ msgstr "" msgid "Should Be Paid field status on draft vendor bill." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:96 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:73 msgid "If the total quantity of products from a |PO| has not been received, Odoo only includes the products that *have* been received in the draft vendor bill." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:99 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:76 msgid "Draft vendor bills can be edited to increase the billed quantity, change the price of the products in the bill, and add additional products to the bill." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:102 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:79 msgid "If the draft bill's information is changed, the :guilabel:`Should Be Paid` field status is set to :guilabel:`Exception`. This means that Odoo notices the discrepancy, but does not block the changes or display an error message, since there might be a valid reason for making changes to the draft bill." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:107 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:84 msgid "To process the vendor bill, select a date in the :guilabel:`Bill Date` field, and click :guilabel:`Confirm`, followed by :guilabel:`Register Payment`." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:110 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:87 msgid "This opens a :guilabel:`Register Payment` pop-up window. From this window, accounting information is pre-populated based on the database's accounting settings. Click :guilabel:`Create Payment` to process the vendor bill." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:114 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:91 msgid "Once payment has been registered for a vendor bill, and the bill displays the green :guilabel:`Paid` banner, the :guilabel:`Should Be Paid` field status is set to :guilabel:`No`." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:118 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:95 msgid "The :guilabel:`Should Be Paid` status on bills is automatically set by Odoo. However, the status can be manually changed by clicking the field's drop-down menu inside the :guilabel:`Other Info` tab." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:123 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:100 msgid "View a purchase order's billing status" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:125 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:102 msgid "Once a |PO| is confirmed, its :guilabel:`Billing Status` can be viewed under the :guilabel:`Other Information` tab on the |PO| form." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:128 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:105 msgid "To view the :guilabel:`Billing Status` of a |PO|, navigate to :menuselection:`Purchase app --> Orders --> Purchase Orders`, and select a |PO| to view." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:131 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:108 msgid "Click the :guilabel:`Other Information` tab, and locate the :guilabel:`Billing Status` field." msgstr "" @@ -27437,60 +27789,60 @@ msgstr "" msgid "Billing status field on a purchase order form." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:137 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:113 msgid "The table below details the different values the :guilabel:`Billing Status` field could read, and when they are displayed, depending on the *Bill Control* policy used." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:144 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:120 msgid "Billing Status" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:145 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:121 msgid "On received quantities" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:146 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:122 msgid "On ordered quantities" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:147 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:123 msgid "Nothing to Bill" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:148 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:124 msgid "PO confirmed; no products received" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:149 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:125 msgid "*Not applicable*" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:150 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:126 msgid "Waiting Bills" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:151 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:127 msgid "All/some products received; bill not created" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:152 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:128 msgid "PO confirmed" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:153 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:129 msgid "Fully Billed" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:154 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:130 msgid "All/some products received; draft bill created" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:155 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:131 msgid "Draft bill created" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:158 -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:218 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst:134 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:220 msgid ":doc:`manage`" msgstr "" @@ -27506,6 +27858,10 @@ msgstr "" msgid "In Odoo, a vendor bill can be created at different points in the purchasing process, depending on the *bill control* policy chosen in the *Purchase* app's settings." msgstr "" +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/manage.rst:20 +msgid "Bill control policies" +msgstr "" + #: ../../content/applications/inventory_and_mrp/purchase/manage_deals/manage.rst:22 msgid "To configure the default bill control policy, navigate to :menuselection:`Purchase app --> Configuration --> Settings`, and scroll to the :guilabel:`Invoicing` section." msgstr "" @@ -27542,6 +27898,10 @@ msgstr "" msgid "Control policy field on product form." msgstr "" +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/manage.rst:51 +msgid "3-way matching" +msgstr "" + #: ../../content/applications/inventory_and_mrp/purchase/manage_deals/manage.rst:53 msgid "The *3-way matching* policy ensures vendor bills are only paid once all (or some) products in a purchase order (PO) have been received." msgstr "" @@ -28044,35 +28404,35 @@ msgstr "" msgid ":doc:`../../../essentials/contacts`" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:191 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:193 msgid "Confirm order" msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:193 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:195 msgid "Clicking :guilabel:`Confirm Order` directly transforms the |RFQ| into an active |PO|." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:196 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:198 msgid "Odoo tracks communications on each order through the chatter of the |PO| form. This shows the emails sent between the user and the contact, as well as any internal notes and activities. Messages, notes, and activities can also be logged on the chatter." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:200 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:202 msgid "Once an |RFQ| is confirmed, it creates a |PO|." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:202 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:204 msgid "On the new |PO|, the :guilabel:`Order Deadline` field changes to :guilabel:`Confirmation Date`, which displays the date and time the user confirmed the order." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:205 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:207 msgid "Depending on the user's chosen configuration in the **Purchase** app settings, a *vendor bill* is created once products have been ordered or received. For more information, refer to the documentation on :doc:`managing vendor bills `." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:210 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:212 msgid "After an order is placed, clicking :guilabel:`Receive Products` records the reception of new products into the database." msgstr "" -#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:214 +#: ../../content/applications/inventory_and_mrp/purchase/manage_deals/rfq.rst:216 msgid "With the **Inventory** app installed, confirming a |PO| automatically creates a receipt document, with the product information and expected arrival dates automatically populated." msgstr "" @@ -29649,26 +30009,30 @@ msgid ":guilabel:`Take a Picture` requires a picture to be attached to the check msgstr "" #: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:53 -msgid ":guilabel:`Pass - Fail` is used when the product being checked must meet a certain criteria to pass the check." +msgid ":guilabel:`Print label` opens a pop-up from which labels can be printed. This step can be customized to provide instructions about where to add the labels on a product." msgstr "" #: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:55 -msgid "Selecting :guilabel:`Measure` causes a :guilabel:`Measure` input field to appear, in which a measurement must be entered before the check can be completed." +msgid ":guilabel:`Pass - Fail` is used when the product being checked must meet a certain criteria to pass the check." msgstr "" #: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:57 +msgid "Selecting :guilabel:`Measure` causes a :guilabel:`Measure` input field to appear, in which a measurement must be entered before the check can be completed." +msgstr "" + +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:59 msgid "Selecting :guilabel:`Worksheet` causes a :guilabel:`Quality Template` drop-down field to appear. Use it to select a quality worksheet that must be filled out to complete the check." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:60 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:62 msgid "In the :guilabel:`Team` field, select the quality team that is responsible for the quality check. In the :guilabel:`Company` field, select the company that owns the product being inspected." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:63 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:65 msgid "On the :guilabel:`Notes` tab at the bottom of the form, enter any relevant instructions in the :guilabel:`Instructions` text entry box (ex. 'Attach a picture of the product'). In the :guilabel:`Notes` text entry box, enter any relevant information about the quality check (who created it, why it was created, etc.)." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:68 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:70 msgid "Finally, if the check is being processed immediately, click the :guilabel:`Pass` button at the top left of the screen if the check passes, or the :guilabel:`Fail` button if the check fails." msgstr "" @@ -29676,43 +30040,43 @@ msgstr "" msgid "A quality check form filled out for a Pass - Fail check." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:76 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:78 msgid "Process quality check" msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:78 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:80 msgid "Quality checks can be processed directly on the quality check's page, or from a manufacturing or inventory order for which a check is required. Alternatively, if a quality check is created for a specific work order operation, the check is processed in the *Shop Floor* module." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:83 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:85 msgid "It is not possible to manually create a single quality check that is assigned to a specific work order operation. Quality checks for work order operations can only be created by a |QCP|. See the documentation on :ref:`Quality Control Points ` for information about how to configure a |QCP| that will create quality checks for a specific work order operation." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:90 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:92 msgid "Quality check page" msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:92 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:94 msgid "To process a quality check from the check's page, begin by navigating to :menuselection:`Quality --> Quality Control --> Quality Checks`, then select the check to process. Follow the instructions for how to complete the check, listed in the :guilabel:`Instructions` field of the :guilabel:`Notes` tab at the bottom of the page." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:97 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:99 msgid "If the quality check passes, click the :guilabel:`Pass` button at the top of the page. If the check fails, click the :guilabel:`Fail` button, instead." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:101 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:103 msgid "Quality check on order" msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:103 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:105 msgid "To process a quality check on an order, select a manufacturing or inventory order (receipt, delivery, return, etc.), for which a check is required. Manufacturing orders can be selected by navigating to :menuselection:`Manufacturing --> Operations --> Manufacturing Orders`, and clicking on an order. Inventory orders can be selected by navigating to :menuselection:`Inventory`, clicking the :guilabel:`# To Process` button on an operation card, and selecting an order." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:109 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:111 msgid "On the selected inventory or manufacturing order, a purple :guilabel:`Quality Checks` button appears at the top of the order. Click the button to open the :guilabel:`Quality Check` pop-up window, which shows all of the quality checks required for that order." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:113 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:115 msgid "Follow the instructions that appear on the :guilabel:`Quality Check` pop-up window. If a Pass - Fail check is being processed, complete the check by clicking :guilabel:`Pass` or :guilabel:`Fail` at the bottom of the pop-up window. For all other quality check types, a :guilabel:`Validate` button appears instead. Click it to complete the check." msgstr "" @@ -29720,43 +30084,43 @@ msgstr "" msgid "The \"Quality Check\" pop-up window on a manufacturing order." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:123 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:125 msgid "Quality check on work order" msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:125 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:127 msgid "To process a quality check for a work order, begin by navigating to :menuselection:`Manufacturing --> Operations --> Manufacturing Orders`. Select an |MO| that includes a work order for which a quality check is required." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:135 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:137 msgid "For a full guide to the Shop Floor module, see the :doc:`Shop Floor overview <../../manufacturing/shop_floor/shop_floor_overview>` documentation." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:142 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:144 msgid "Process the work order's steps until the quality check step is reached. Click on the step to open a pop-up window that details how the check should be completed. After following the instructions, click :guilabel:`Validate` to complete the check. Alternatively, if a *Pass - Fail* check is being processed, click either the :guilabel:`Pass` or :guilabel:`Fail` button." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:147 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:149 msgid "It is also possible to complete a quality check by clicking the checkbox on the right side of the step. Doing so automatically marks the check as *Passed*." msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:151 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:153 msgid "The specific steps for processing a quality check depend upon the type of check being conducted. For information about processing each type of quality check, see the associated documentation:" msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:154 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:156 msgid ":doc:`../quality_check_types/instructions_check`" msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:155 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:157 msgid ":doc:`../quality_check_types/pass_fail_check`" msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:156 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:158 msgid ":doc:`../quality_check_types/measure_check`" msgstr "" -#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:157 +#: ../../content/applications/inventory_and_mrp/quality/quality_management/quality_checks.rst:159 msgid ":doc:`../quality_check_types/picture_check`" msgstr "" diff --git a/locale/sources/marketing.pot b/locale/sources/marketing.pot index f1bc3f6920..3a5c8e2fcf 100644 --- a/locale/sources/marketing.pot +++ b/locale/sources/marketing.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1683,13 +1683,13 @@ msgid "Throughout the campaign, the marketing team continuously refers to the sm msgstr "" #: ../../content/applications/marketing/email_marketing/lost_leads_email.rst:355 -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:223 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:225 #: ../../content/applications/marketing/email_marketing/unsubscriptions.rst:129 msgid ":doc:`../email_marketing`" msgstr "" #: ../../content/applications/marketing/email_marketing/lost_leads_email.rst:356 -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:224 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:226 msgid ":doc:`unsubscriptions`" msgstr "" @@ -1782,31 +1782,31 @@ msgstr "" msgid "Once all the configurations on the mailing list form are complete, Odoo automatically adds the new mailing list to the :guilabel:`Mailing List` page in the *Email Marketing* app (:menuselection:`Email Marketing app --> Mailing Lists --> Mailing Lists`)." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:64 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:66 msgid "Add contacts to mailing list" msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:66 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:68 msgid "In Odoo *Email Marketing*, there are a few different ways to add contacts to a mailing list." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:68 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:70 msgid "From the :guilabel:`Mailing Lists` page (:menuselection:`Email Marketing --> Mailing Lists --> Mailing Lists`), click the :guilabel:`Total Contacts` link on the line of the desired mailing list to which contacts should be added." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:72 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:74 msgid "Doing so reveals a separate :guilabel:`Mailing List Contacts` page for that specific mailing list, where contacts can be created or imported, and then added to the specific mailing list." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:75 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:77 msgid "This same page can also be accessed by clicking the desired mailing list from the :guilabel:`Mailing Lists` page, and then clicking the :guilabel:`Recipients` smart button on the mailing list form." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:78 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:80 msgid "Doing so *also* reveals a separate :guilabel:`Mailing List Contacts` page for that specific mailing list, where contacts can be created or imported, and then added to the specific mailing list." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:81 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:83 msgid "Contacts can also be directly imported to a specific mailing list from the :guilabel:`Mailing Lists` page, by clicking :guilabel:`Import Contacts` to the far-right of the desired mailing list." msgstr "" @@ -1814,7 +1814,7 @@ msgstr "" msgid "The import contacts button of a mailing list line in Odoo Email Marketing." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:88 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:90 msgid "Doing so reveals an :guilabel:`Import Mailing Contacts` pop-up form." msgstr "" @@ -1822,19 +1822,19 @@ msgstr "" msgid "The import mailing contacts pop-up form that appears in Odoo Email Marketing." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:94 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:96 msgid "Here, the desired mailing list is auto-populated in the :guilabel:`Import contacts in` field. Beneath that, write or paste email addresses in the :guilabel:`Contact List` field." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:97 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:99 msgid "The option to import a country, company name, and more is available, via the :guilabel:`Upload a file` link at the bottom of the pop-up form." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:100 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:102 msgid "When all contacts and configurations are complete, click :guilabel:`Import`." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:102 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:104 msgid "To add contacts to a specific mailing list from a master list of all mailing list contacts in the database, navigate to :menuselection:`Email Marketing app --> Mailing Lists --> Mailing List Contacts`. Doing so reveals the :guilabel:`Mailing List Contacts` page, featuring a list of all contacts associated with every mailing list." msgstr "" @@ -1842,19 +1842,19 @@ msgstr "" msgid "The Mailing List page in the Odoo Email Marketing application." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:111 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:113 msgid "The default :guilabel:`Exclude Blacklisted Emails` filter appears in the search bar." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:113 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:115 msgid "From the :guilabel:`Mailing List Contacts` page, contacts can be created and/or imported, and then added to a mailing list." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:116 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:118 msgid "To add an existing contact to a mailing list, select the desired contact from the list on the :guilabel:`Mailing List Contacts` page to reveal their contact form." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:119 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:121 msgid "At the bottom of their contact form, click :guilabel:`Add a line` under the :guilabel:`Mailing List` column, locate the desired mailing list from the drop-down menu, and select it." msgstr "" @@ -1862,55 +1862,55 @@ msgstr "" msgid "The Add a line for mailing lists on a standard contact form in Odoo Email Marketing." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:127 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:129 msgid "A mailing list can be created directly from a contact form, by typing the name of the new mailing list in the :guilabel:`Mailing List` field. Then, after a new mailing list name has been entered, two options appear on the drop-down menu beneath the new mailing list name." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:131 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:133 msgid "From this drop-down menu, select :guilabel:`Create` to create the mailing list and edit it later, or select :guilabel:`Create and edit...` to create and edit the new mailing list right away." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:134 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:136 msgid "To remove a contact from a mailing list that the contact has been added to, enable the :guilabel:`Opt Out` checkbox. If the :guilabel:`Opt Out` checkbox is ticked, the ability to add a :guilabel:`Reason` why the contact opted-out is also available." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:138 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:140 msgid "When/if a contact *has* opted-out of a mailing list, the date they activated their opt-out appears in the :guilabel:`Unsubscription Date` column on their contact form." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:141 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:143 msgid "Lastly, the initial :guilabel:`Subscription Date` can be seen, as well. This field is auto-populated with the date and time their subscription to the mailing list has been saved." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:144 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:146 msgid "Multiple mailing lists can be added to a single contact form." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:146 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:148 msgid "To delete any mailing list from a contact form, simply click the :guilabel:`🗑️ (trash can)` icon." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:149 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:151 msgid "Link mailing list to website" msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:151 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:153 msgid "When a mailing list is created in the database, Odoo provides the option to directly link the mailing list to the Odoo-built website (created via the Odoo *Website* application)." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:154 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:156 msgid "To link a mailing list to a website, navigate to the front-end of the website, which can be accomplished in a variety of ways throughout the database. The most direct way to get to the front-end of the website is to simply open the :menuselection:`Website` application from the main Odoo dashboard." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:159 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:161 msgid "Doing so reveals the designated homepage of the Odoo-built website for the database." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:161 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:163 msgid "From the front-end of the website, click the :guilabel:`Edit` button in the upper-right corner. When clicked, Odoo reveals a right-sidebar, filled with drag-and-drop *building blocks*, packed with various features, options, and design elements." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:165 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:167 msgid "Next, in the search bar of the right-sidebar, search for `Newsletter`. The :guilabel:`Newsletter` selection of building blocks is used to add subscription fields for any mailing list onto the website." msgstr "" @@ -1918,11 +1918,11 @@ msgstr "" msgid "View of how to quickly search for Newsletter blocks in the Odoo Website application." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:173 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:175 msgid "Doing so reveals the following building block options: :guilabel:`Newsletter Block`, :guilabel:`Newsletter Popup`, and :guilabel:`Newsletter`. Any of these options can be used to add subscription fields for a mailing list onto the website." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:177 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:179 msgid "The :guilabel:`Newsletter Block` option places a customizable block onto the body of the website where a visitor to enter their email and click a button to subscribe to a designated mailing list." msgstr "" @@ -1931,7 +1931,7 @@ msgstr "" msgid "Sample of how a newsletter block appears on an Odoo Website." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:184 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:186 msgid "The :guilabel:`Newsletter Popup` option reveals a customizable pop-up window that appears when a visitor scrolls to the specific section of the webpage on which the building block is placed. When the visitor reaches the designated section, a pop-up window appears, in which a visitor can enter their email address, click a button, and subscribe to that predetermined mailing list." msgstr "" @@ -1939,19 +1939,19 @@ msgstr "" msgid "Sample of how a newsletter popup block appears on an Odoo Website." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:193 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:195 msgid "The :guilabel:`Newsletter` option provides the same functionality as the other options. However, it only consists of a field for the visitor to enter their email address, and a button to subscribe to the mailing list." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:197 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:199 msgid "It is covertly designed in this fashion to be cleanly implemented into the content of the webpage and/or footer." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:204 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:206 msgid "Once the desired newsletter building block is chosen, drag-and-drop it onto the body of the website. Then, select the newly-placed newsletter building block to reveal its configuration options on the right-sidebar." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:208 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:210 msgid "From there, open the :guilabel:`Newsletter` drop-down menu, and select the specific mailing list that should be applied to the block." msgstr "" @@ -1959,11 +1959,11 @@ msgstr "" msgid "The newsletter drop-down menu in the customize sidebar that appears in Odoo Website." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:215 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:217 msgid "Once the desired configurations and customizations are complete, be sure to click the :guilabel:`Save` button in the upper-right corner." msgstr "" -#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:218 +#: ../../content/applications/marketing/email_marketing/mailing_lists.rst:220 msgid "Now, when a visitor enters their email address, and clicks the button to subscribe, they are instantly subscribed to that pre-configured mailing list. They are also added as a contact for that mailing list in Odoo *Email Marketing*." msgstr "" @@ -4839,7 +4839,7 @@ msgid "The default confirmation button, in the body of the template, links direc msgstr "" #: ../../content/applications/marketing/marketing_automation/campaign_templates/double_optin.rst:84 -msgid "To provide a streamlined experience for the contact, consider :doc:`creating a page on the website <../../../websites/website/pages>` that expresses gratitude to the contact for confirming their subscription to the mailing list. Add the link to that page in the URL of the confirmation button." +msgid "To provide a streamlined experience for the contact, consider :doc:`creating a page on the website <../../../websites/website/structure/pages>` that expresses gratitude to the contact for confirming their subscription to the mailing list. Add the link to that page in the URL of the confirmation button." msgstr "" #: ../../content/applications/marketing/marketing_automation/campaign_templates/double_optin.rst:90 @@ -5800,35 +5800,35 @@ msgstr "" msgid "Odoo's *SMS Marketing* application can also help boost conversion rates around valuable actions, such as event registrations, free trials, purchases, etc., since text and mobile-based marketing channels typically yield higher :abbr:`CTOR (click-to-open rate)` and :abbr:`CTR (click-through rate)` outcomes." msgstr "" -#: ../../content/applications/marketing/sms_marketing.rst:49 +#: ../../content/applications/marketing/sms_marketing.rst:55 msgid "SMS marketing dashboard" msgstr "" -#: ../../content/applications/marketing/sms_marketing.rst:51 +#: ../../content/applications/marketing/sms_marketing.rst:57 msgid "When the application is opened, Odoo displays the main :guilabel:`SMS Marketing` dashboard, which showcases the various SMS mailings that have been created, along with pertinent information and data related to that specific message." msgstr "" -#: ../../content/applications/marketing/sms_marketing.rst:55 +#: ../../content/applications/marketing/sms_marketing.rst:61 msgid "The :icon:`oi-view-kanban` :guilabel:`Kanban` view is the default Odoo uses when the application is opened, which provides an organized display of the SMS mailings that have been created, and what their current status is at the moment." msgstr "" -#: ../../content/applications/marketing/sms_marketing.rst:60 +#: ../../content/applications/marketing/sms_marketing.rst:66 msgid "An :abbr:`SMS (Short Message Service)` mailing can have one of the following statuses: :guilabel:`Draft`, :guilabel:`In Queue`, :guilabel:`Sending`, or :guilabel:`Sent`." msgstr "" -#: ../../content/applications/marketing/sms_marketing.rst:63 +#: ../../content/applications/marketing/sms_marketing.rst:69 msgid "In the upper right corner of the main :guilabel:`SMS Marketing` dashboard, there are a few different view options to choose from. Each one provides a unique take on the same SMS information." msgstr "" -#: ../../content/applications/marketing/sms_marketing.rst:66 +#: ../../content/applications/marketing/sms_marketing.rst:72 msgid "The :icon:`oi-view-list` :guilabel:`List` view provides the same useful data related to SMS mailings, but in a more traditional list layout." msgstr "" -#: ../../content/applications/marketing/sms_marketing.rst:69 +#: ../../content/applications/marketing/sms_marketing.rst:75 msgid "The :icon:`fa-calendar` :guilabel:`Calendar` view shows when SMS mailings are scheduled or have been sent. Clicking a future date opens a blank SMS template to be scheduled for that date." msgstr "" -#: ../../content/applications/marketing/sms_marketing.rst:72 +#: ../../content/applications/marketing/sms_marketing.rst:78 msgid "Lastly, the :icon:`fa-area-chart` :guilabel:`Graph` view visualizes that same SMS-related data in series of graphs and charts. Odoo also provides various ways to sort and group the data for more detailed analysis." msgstr "" @@ -6607,6 +6607,142 @@ msgstr "" msgid "Add any necessary notes under the :guilabel:`Notes` tab. Finally, navigate away from the completed automation rule, or manually save (by clicking the :guilabel:`☁️ (cloud)` icon), to implement the change." msgstr "" +#: ../../content/applications/marketing/sms_marketing/twilio.rst:4 +msgid "SMS via Twilio" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:7 +msgid "What is Twilio" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:9 +msgid "Twilio is a third-party provider that enables you to send SMS messages to your clients. Odoo provides an easy way to use this service within your Odoo apps." +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:13 +msgid "Why would I need it?" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:15 +msgid "Although Odoo already comes with an out-of-the-box (IAP) solution for SMS messages, it might not work in some countries with stricter legal requirements. Currently, Odoo registers itself when possible to avoid extra setup for its customers, however in some countries that is not enough and the client itself must do it. This can be done through Twilio." +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:21 +msgid "Setup your Twilio account" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:23 +msgid "By creating a Twilio account, you will be able to create a virtual phone number from which you will be able to send SMS messages. These cost credits that are to be bought on Twilio, not Odoo." +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:26 +msgid "Go to `Twilio `_" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:27 +msgid "Sign up and create a Twilio account" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:28 +msgid "Within your Twilio account, you can create multiple accounts (e.g. one for testing, one for each sub-company, etc.)" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:30 +msgid "Create a new account" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:32 +msgid "Enter the name, and select :guilabel:`Twilio` for the type" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:33 +msgid "Select your :guilabel:`Billing Country` and click :guilabel:`Create new account`" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:34 +msgid "Select the different options that match your needs" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:36 +msgid "For the :guilabel:`Twilio product`, select :guilabel:`SMS`" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:37 +msgid "For :guilabel:`How to build with Twilio`, select :guilabel:`With no code at all`" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:38 +msgid "For your :guilabel:`goal`, select :guilabel:`3rd party integrations`" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:39 +msgid "Click on :guilabel:`Get Started with Twilio`" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:40 +msgid "You account is now created, and you should arrive on your :guilabel:`Dashboard`" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:41 +msgid "Go to :menuselection:`Phone Numbers --> Manage --> Buy a number`" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:42 +msgid "Buy a number (it is a paying service, but you should have received some credits to start with)" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:43 +msgid "Go back to bottom of the :guilabel:`Dashboard` page" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:44 +msgid "Copy the :guilabel:`Account SID` and :guilabel:`Auth Token`" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:47 +msgid "In case of a testing account, you will only be able to send SMS to phones that you have verified within `Twilio's console `_." +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:51 +msgid "Sending SMS to some countries (such as the US or Canada) might require a registration. This can only be done by you, and not by Odoo. Please check out `Twilio's Help Center `_." +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:57 +msgid "Setup Odoo to use Twilio" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:59 +msgid ":ref:`Install ` the :guilabel:`Twilio SMS` module (`sms_twilio`)" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:60 +msgid "In Odoo, go to :menuselection:`Settings --> General Settings --> Contacts --> Send SMS`, select :guilabel:`Send via Twilio` option, and save your change." +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:62 +msgid "Go back to that option, and click :guilabel:`Configure Twilio Account`" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:63 +msgid "Paste the copied credentials accordingly" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:64 +msgid "Click on :guilabel:`Reload numbers`" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:65 +msgid "Your newly bought phone number should appear in the list" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:66 +msgid "You can use the :guilabel:`Test Number` field to send an SMS" +msgstr "" + +#: ../../content/applications/marketing/sms_marketing/twilio.rst:68 +msgid "You can have multiple numbers (for instance once per country, or one per campaign), in that case, you can reorder the numbers. By default, when sending an SMS to a client, Odoo will select the number whose country is the same as the client. If none matches, Odoo will use the first number available from the list respecting the order you have chosen." +msgstr "" + #: ../../content/applications/marketing/social_marketing.rst:5 msgid "Social Marketing" msgstr "" diff --git a/locale/sources/productivity.pot b/locale/sources/productivity.pot index 207156c723..7cbc10aea6 100644 --- a/locale/sources/productivity.pot +++ b/locale/sources/productivity.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -31,7 +31,7 @@ msgstr "" #: ../../content/applications/productivity/appointments.rst:16 #: ../../content/applications/productivity/appointments/create-opps.rst:13 #: ../../content/applications/productivity/documents.rst:39 -#: ../../content/applications/productivity/spreadsheet/insert.rst:580 +#: ../../content/applications/productivity/spreadsheet/insert.rst:590 #: ../../content/applications/productivity/voip/axivox/axivox_config.rst:17 #: ../../content/applications/productivity/voip/onsip.rst:33 msgid "Configuration" @@ -1322,7 +1322,7 @@ msgstr "" #: ../../content/applications/productivity/data_cleaning.rst:0 #: ../../content/applications/productivity/whatsapp.rst:275 -#: ../../content/applications/productivity/whatsapp.rst:679 +#: ../../content/applications/productivity/whatsapp.rst:680 msgid "Name" msgstr "" @@ -2201,9 +2201,9 @@ msgid "Icon" msgstr "" #: ../../content/applications/productivity/discuss.rst:114 -#: ../../content/applications/productivity/knowledge.rst:93 -#: ../../content/applications/productivity/knowledge.rst:275 -#: ../../content/applications/productivity/knowledge.rst:297 +#: ../../content/applications/productivity/knowledge.rst:94 +#: ../../content/applications/productivity/knowledge.rst:279 +#: ../../content/applications/productivity/knowledge.rst:301 msgid "Use" msgstr "" @@ -2308,7 +2308,7 @@ msgid ":doc:`discuss/team_communication`" msgstr "" #: ../../content/applications/productivity/discuss.rst:164 -#: ../../content/applications/productivity/discuss/team_communication.rst:114 +#: ../../content/applications/productivity/discuss/team_communication.rst:100 msgid ":doc:`/applications/essentials/activities`" msgstr "" @@ -2337,7 +2337,7 @@ msgid "A live chat conversation using a canned response." msgstr "" #: ../../content/applications/productivity/discuss/canned_responses.rst:18 -msgid "Canned responses are available :ref:`to use ` in **Live Chat** conversations, the **Discuss** app, and the *Chatter* composer. This includes direct message conversations, channel conversations, and **WhatsApp** messages." +msgid "Canned responses are available :ref:`to use ` in **Live Chat** conversations, the **Discuss** app, and the *Chatter*. Canned responses are also available in direct message conversations, channel conversations, and *WhatsApp* messages." msgstr "" #: ../../content/applications/productivity/discuss/canned_responses.rst:25 @@ -2369,95 +2369,87 @@ msgid "Try to connect the shortcut to the topic of the substitution. Not only do msgstr "" #: ../../content/applications/productivity/discuss/canned_responses.rst:48 -msgid "In the :guilabel:`Description` field, add any information that provides context for this response, such as guidelines for when it should or should not be used." -msgstr "" - -#: ../../content/applications/productivity/discuss/canned_responses.rst:51 msgid "The :guilabel:`Created by` field automatically populates with the name of the user that creates a new response. This field cannot be edited." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:54 +#: ../../content/applications/productivity/discuss/canned_responses.rst:51 msgid "To :ref:`share ` this response with other users, select one or more groups in the :guilabel:`Authorized Group` field that should have access." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:58 +#: ../../content/applications/productivity/discuss/canned_responses.rst:55 msgid "If the :guilabel:`Authorized Group` field is left blank, the response can **only** be used by the user that created it." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:61 -msgid "Canned responses created by the database are automatically credited as created by *OdooBot*. They must be assigned to an *authorized group* before they can be used by **any** users. To view the responses created by *OdooBot*, navigate to :menuselection:`Discuss app --> Configuration --> Canned Responses`. Click into the search bar, and remove any filters." +#: ../../content/applications/productivity/discuss/canned_responses.rst:58 +msgid "Canned responses created by the database are automatically credited as created by *OdooBot*. They must be assigned to an *authorized group* before they can be used by **any** users. To view the responses created by *OdooBot*, navigate to :menuselection:`Discuss app --> Configuration --> Canned Responses`." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:66 +#: ../../content/applications/productivity/discuss/canned_responses.rst:63 msgid "Lastly, the :guilabel:`Last Used` field keeps track of the date and time each response was most recently used. This field cannot be edited." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:72 +#: ../../content/applications/productivity/discuss/canned_responses.rst:69 msgid "Share responses" msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:74 +#: ../../content/applications/productivity/discuss/canned_responses.rst:71 msgid "Canned responses, by default, are made available **only** to the user who creates them. To make a canned response available for others to use, they need to be shared." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:78 +#: ../../content/applications/productivity/discuss/canned_responses.rst:75 msgid "Users with *Administrator* access rights can view and edit canned responses created by other users through the **Discuss** app. However, they are **only** able to use them if they are included in an authorized group that has been designated on that canned responses item line, located on the :guilabel:`Canned Responses` page." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:83 +#: ../../content/applications/productivity/discuss/canned_responses.rst:80 msgid "Access to shared responses is granted on the :ref:`groups ` level." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:85 +#: ../../content/applications/productivity/discuss/canned_responses.rst:82 msgid "To view the *Groups* a user is a member of, first enable :ref:`Developer mode `, then navigate to :menuselection:`Settings app --> Users & Companies --> Users`. Select a user from the list, and click to open their :guilabel:`User Record`. Then, click the :guilabel:`Groups` smart button at the top of the page." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:91 +#: ../../content/applications/productivity/discuss/canned_responses.rst:88 msgid "To view a list of users in a specific group, first enable :doc:`Developer mode <../../general/developer_mode/>`. Next, navigate to :menuselection:`Settings app --> Users & Companies --> Groups`. Select a group from the list, then click to open the :guilabel:`Group Record`. A list of users is included on the :guilabel:`Users` tab." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:96 +#: ../../content/applications/productivity/discuss/canned_responses.rst:93 msgid "After determining what groups should have access to a response, they **must** :ref:`be added ` to the :guilabel:`Authorized Groups` field for each canned response." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:101 +#: ../../content/applications/productivity/discuss/canned_responses.rst:98 msgid "The user who created the response can use it, even if they are not a member of one of the *Authorized Groups*." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:107 +#: ../../content/applications/productivity/discuss/canned_responses.rst:104 msgid "Use a canned response" msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:109 -msgid "Canned responses can be used in the **Discuss** app, in a **Live Chat** conversation, or on any record that contains a *Chatter* composer. This includes direct message conversations, channel conversations, and *WhatsApp* messages." -msgstr "" - -#: ../../content/applications/productivity/discuss/canned_responses.rst:113 -msgid "To use a canned response, type a colon (`:`) into a *Chatter* composer or chat window, followed by the shortcut. Then press :kbd:`Enter`. This replaces the shortcut with the substitution, though the response can still be edited before it is sent." +#: ../../content/applications/productivity/discuss/canned_responses.rst:106 +msgid "To use a canned response in a conversation, click the :icon:`fa-plus-circle` :guilabel:`(plus)` icon in the message window. Then, click :guilabel:`Insert a Canned Response`. This opens a list of available canned responses. Either select a response from the list, or type the appropriate shortcut, then click the :icon:`fa-paper-plane` :guilabel:`(send)` icon or hit :kbd:`Enter`." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:118 -msgid "Typing `:` in the *Chatter* composer, or chat window, on its own generates a drop-down list of available canned responses. A response can be selected from the list, in addition to the use of shortcuts." +#: ../../content/applications/productivity/discuss/canned_responses.rst:112 +msgid "Typing `::` in the *Chatter* composer, or chat window, on its own generates a drop-down list of available canned responses. A response can be selected from the list, in addition to the use of shortcuts." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:122 -msgid "To search through the list of available responses, type `:`, followed by the first few letters of the shortcut." +#: ../../content/applications/productivity/discuss/canned_responses.rst:116 +msgid "To search through the list of available responses, type `::`, followed by the first few letters of the shortcut." msgstr "" #: ../../content/applications/productivity/discuss/canned_responses.rst:0 msgid "A live chat window with a list of all available canned responses." msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:129 +#: ../../content/applications/productivity/discuss/canned_responses.rst:123 msgid ":doc:`Chatter `" msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:130 -#: ../../content/applications/productivity/discuss/chatter.rst:421 +#: ../../content/applications/productivity/discuss/canned_responses.rst:124 +#: ../../content/applications/productivity/discuss/chatter.rst:430 msgid ":doc:`Discuss <../discuss>`" msgstr "" -#: ../../content/applications/productivity/discuss/canned_responses.rst:131 +#: ../../content/applications/productivity/discuss/canned_responses.rst:125 msgid ":ref:`Commands and Canned Responses `" msgstr "" @@ -2465,35 +2457,35 @@ msgstr "" msgid "Chatter" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:8 +#: ../../content/applications/productivity/discuss/chatter.rst:9 msgid "The *Chatter* feature is integrated throughout Odoo to streamline communication, maintain traceability, and provide accountability among team members. Chatter windows, known as *composers*, are located on almost every record within the database, and allow users to communicate with both internal users and external contacts." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:13 +#: ../../content/applications/productivity/discuss/chatter.rst:14 msgid "Chatter composers also enable users to log notes, upload files, and schedule activities." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:16 +#: ../../content/applications/productivity/discuss/chatter.rst:17 msgid "Chatter thread" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:18 -msgid "A *chatter thread* can be found on most pages in the database, and serves as a record of the updates and edits made to a record. A note is logged in the chatter thread when a change is made. The note includes details of the change, and a time stamp." +#: ../../content/applications/productivity/discuss/chatter.rst:19 +msgid "A *chatter thread* can be found on most pages in the database, and serves as a record of the updates and edits made to a record. A note is logged in the chatter thread when a change is made to the record. The note includes details of the change, and a time stamp." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:23 +#: ../../content/applications/productivity/discuss/chatter.rst:24 msgid "A user, Mitchell Admin, needs to update the email address of a contact. After they save the changes to the contact record, a note is logged in the chatter of the contact record with the following information:" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:27 +#: ../../content/applications/productivity/discuss/chatter.rst:28 msgid "The date when the change occurred." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:28 +#: ../../content/applications/productivity/discuss/chatter.rst:29 msgid "The email address as it was previously listed." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:29 +#: ../../content/applications/productivity/discuss/chatter.rst:30 msgid "The updated email address." msgstr "" @@ -2509,111 +2501,111 @@ msgstr "" msgid "A close up of a chatter thread of an OdooBot created contact record." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:46 +#: ../../content/applications/productivity/discuss/chatter.rst:45 msgid "Add followers" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:48 +#: ../../content/applications/productivity/discuss/chatter.rst:47 msgid "A *follower* is a user or contact that is added to a record and is notified when the record is updated, based on specific :ref:`follower subscription settings `. Followers can add themselves, or can be added by another user." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:53 +#: ../../content/applications/productivity/discuss/chatter.rst:52 msgid "If a user creates, or is assigned to a record, they are automatically added as a follower." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:55 +#: ../../content/applications/productivity/discuss/chatter.rst:54 msgid "To follow a record, navigate to any record with a chatter thread. For example, to open a *Helpdesk* ticket, navigate to :menuselection:`Helpdesk app --> Tickets --> All Tickets`, and select a ticket from the list to open it." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:59 +#: ../../content/applications/productivity/discuss/chatter.rst:58 msgid "At the top-right, above the chatter composer, click :guilabel:`Follow`. Doing this changes the button to read :guilabel:`Following`. Click it again to :guilabel:`Unfollow`." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:63 +#: ../../content/applications/productivity/discuss/chatter.rst:62 msgid "Manage followers" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:65 +#: ../../content/applications/productivity/discuss/chatter.rst:64 msgid "To add another user, or contact, as a follower, click the |user|. This opens a drop-down list of the current followers. Click :guilabel:`Add Followers` to open an :guilabel:`Invite Follower` pop-up window." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:69 +#: ../../content/applications/productivity/discuss/chatter.rst:68 msgid "Select one or more contacts from the :guilabel:`Recipients` drop-down list. To notify the contacts, tick the :guilabel:`Send Notification` checkbox. Edit the message template as desired, then click :guilabel:`Add Followers`." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:73 +#: ../../content/applications/productivity/discuss/chatter.rst:72 msgid "To remove followers, click the |user| to open the current followers list. Find the name of the follower to be removed, and click the :icon:`fa-remove` :guilabel:`(remove)` icon." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:79 +#: ../../content/applications/productivity/discuss/chatter.rst:78 msgid "Edit follower subscription" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:81 +#: ../../content/applications/productivity/discuss/chatter.rst:80 msgid "The updates a follower receives can vary based on their subscription settings. To see the type of updates a follower is subscribed to, and to edit the list, click the |user|. Find the appropriate follower in the list, then click the :icon:`fa-pencil` :guilabel:`(pencil)` icon. This opens the :guilabel:`Edit Subscription` pop-up window for the follower." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:86 +#: ../../content/applications/productivity/discuss/chatter.rst:85 msgid "The list of available subscription settings varies depending on the record type. For example, a follower of a *Helpdesk* ticket may be informed when the ticket is rated. This option would not be available for the followers of a *CRM* opportunity." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:90 +#: ../../content/applications/productivity/discuss/chatter.rst:89 msgid "Tick the checkbox for any updates the follower should receive, and clear the checkbox for any updates they should **not** receive. Click :guilabel:`Apply` when finished." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:97 +#: ../../content/applications/productivity/discuss/chatter.rst:95 msgid "The Edit Subscription window on a Helpdesk ticket." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:97 +#: ../../content/applications/productivity/discuss/chatter.rst:95 msgid "The Edit Subscription options vary depending on the record type. These are the options for a Helpdesk ticket." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:103 +#: ../../content/applications/productivity/discuss/chatter.rst:101 msgid "Log notes" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:105 +#: ../../content/applications/productivity/discuss/chatter.rst:103 msgid "The chatter function includes the ability to log internal notes on individual records. These notes are only accessible to internal users, and are available on any records that feature a chatter thread." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:109 +#: ../../content/applications/productivity/discuss/chatter.rst:107 msgid "To log an internal note, first navigate to a record. For example, to open a *CRM* opportunity, navigate to :menuselection:`CRM app --> Sales --> My Pipeline`, and click on the Kanban card of an opportunity to open it. Then, at the top-right, above the chatter composer, click :guilabel:`Log note`." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:114 +#: ../../content/applications/productivity/discuss/chatter.rst:112 msgid "Enter the note in the chatter composer. To tag an internal user, type `@`, and begin typing the name of the person to tag. Then, select a name from the drop-down menu. Depending on their notification settings, the user is notified by email, or through Odoo." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:119 +#: ../../content/applications/productivity/discuss/chatter.rst:117 msgid "Outside contacts can also be tagged in an internal log note. The contact then receives an email with the contents of the note they were tagged in, including any attachments added directly to the note. If they respond to the email, their response is logged in the chatter, and they are added to the record as a follower." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:124 +#: ../../content/applications/productivity/discuss/chatter.rst:122 msgid "Outside contacts are **not** able to log in to view the entire chatter thread, and are only notified of specific updates, based on their :ref:`follower subscription settings `, or when they are tagged directly." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:131 +#: ../../content/applications/productivity/discuss/chatter.rst:129 msgid "Send messages" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:133 +#: ../../content/applications/productivity/discuss/chatter.rst:131 msgid "Chatter composers can send messages to outside contacts, without having to leave the database, or open a different application. This makes it easy to communicate with potential customers in the *Sales* and *CRM* applications, or vendors in the *Purchase* app." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:137 +#: ../../content/applications/productivity/discuss/chatter.rst:135 msgid "To send a message, first navigate to a record. For example, to send a message from a *CRM* opportunity, navigate to :menuselection:`CRM app --> Sales --> My Pipeline`, and click on the Kanban card of an opportunity to open it. Then, at the top-right, above the chatter composer, click :guilabel:`Send message`." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:143 +#: ../../content/applications/productivity/discuss/chatter.rst:141 msgid "Press :command:`Ctrl + Enter` to send a message, instead of using the :guilabel:`Send` button." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:145 +#: ../../content/applications/productivity/discuss/chatter.rst:143 msgid "If any :ref:`followers ` have been added to the record, they are added as recipients of the message." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:149 +#: ../../content/applications/productivity/discuss/chatter.rst:147 msgid ":ref:`Followers ` of a record are added as recipients of a message automatically. If a follower should **not** receive a message, they must be removed as a follower before the message is sent, or a note is logged." msgstr "" @@ -2622,39 +2614,39 @@ msgid "A chatter composer preparing to send a message to the followers of a CRM "the customer listed on the opportunity record." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:159 +#: ../../content/applications/productivity/discuss/chatter.rst:156 msgid "Expand full composer" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:161 +#: ../../content/applications/productivity/discuss/chatter.rst:158 msgid "The chatter composer can be expanded to a larger pop-up window, allowing for additional customizations." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:164 +#: ../../content/applications/productivity/discuss/chatter.rst:161 msgid "To open the full composer, click the :icon:`fa-expand` :guilabel:`(expand)` icon in the bottom-right corner of the composer window." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:171 +#: ../../content/applications/productivity/discuss/chatter.rst:167 msgid "A chatter composer with emphasis on the expand icon." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:171 +#: ../../content/applications/productivity/discuss/chatter.rst:167 msgid "The expand icon in a chatter composer." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:173 +#: ../../content/applications/productivity/discuss/chatter.rst:169 msgid "Doing this opens a :guilabel:`Compose Email` pop-up window. Confirm or edit the intended :guilabel:`Recipients` of the message, or add additional recipients. The :guilabel:`Subject` field auto-populates based on the title of the record, though it can be edited, if desired." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:177 -msgid "To use an :doc:`email template <../../general/companies/email_template/>` for the message, select it from the drop-down menu in the :guilabel:`Load template` field." +#: ../../content/applications/productivity/discuss/chatter.rst:173 +msgid "To use an :doc:`email template <../../general/companies/email_template/>` for the message, click the |ve| icon, then select a template from the list. Existing templates can also be overwritten or deleted from this menu." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:181 +#: ../../content/applications/productivity/discuss/chatter.rst:178 msgid "The number and type of templates available vary, based on the record the message is created from." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:183 +#: ../../content/applications/productivity/discuss/chatter.rst:180 msgid "Click :icon:`fa-paperclip` :guilabel:`(paperclip)` icon to add any files to the message, then click :guilabel:`Send`." msgstr "" @@ -2662,127 +2654,155 @@ msgstr "" msgid "The expanded full chatter composer in the CRM application." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:191 +#: ../../content/applications/productivity/discuss/chatter.rst:187 +msgid "Generate text with AI" +msgstr "" + +#: ../../content/applications/productivity/discuss/chatter.rst:189 +msgid "To generate message text using AI, click the AI icon from the expanded chatter composer. This opens a :guilabel:`Generate Text with AI` pop-up." +msgstr "" + +#: ../../content/applications/productivity/discuss/chatter.rst:192 +msgid "Enter a prompt in the :guilabel:`Send a message` field to instruct the AI on the type of content needed, then press enter, or click the :icon:`fa-paper-plane` :guilabel:`(paper plane)` icon." +msgstr "" + +#: ../../content/applications/productivity/discuss/chatter.rst:-1 +msgid "The generate text with AI popup." +msgstr "" + +#: ../../content/applications/productivity/discuss/chatter.rst:198 +msgid "After the text is generated, click :guilabel:`Insert` to insert the text into the message composer." +msgstr "" + +#: ../../content/applications/productivity/discuss/chatter.rst:201 +msgid "Before sending the final message, be sure to edit any commentary from the AI, or any text in brackets." +msgstr "" + +#: ../../content/applications/productivity/discuss/chatter.rst:0 +msgid "A draft of an email with text generated by AI." +msgstr "" + +#: ../../content/applications/productivity/discuss/chatter.rst:208 msgid "Edit sent messages" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:193 +#: ../../content/applications/productivity/discuss/chatter.rst:210 msgid "Messages can be edited after they are sent, to fix typos, correct mistakes, or add missing information." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:197 +#: ../../content/applications/productivity/discuss/chatter.rst:214 msgid "When messages are edited after they have been sent, an updated message is **not** sent to the recipient." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:200 -msgid "To edit a sent message, click the :icon:`fa-ellipsis-h` :guilabel:`(ellipsis)` icon menu to the right of the message. Then, select :guilabel:`Edit`. Make any necessary adjustments to the message." +#: ../../content/applications/productivity/discuss/chatter.rst:217 +msgid "To edit a sent message, click the |ve| menu to the right of the message. Then, select :guilabel:`Edit`. Make any necessary adjustments to the message." msgstr "" #: ../../content/applications/productivity/discuss/chatter.rst:-1 msgid "The edit message option in a chatter thread." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:207 +#: ../../content/applications/productivity/discuss/chatter.rst:223 msgid "To save the changes, press :command:`Ctrl + Enter`. To discard the changes, press :command:`Escape`." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:210 +#: ../../content/applications/productivity/discuss/chatter.rst:226 msgid "Users with Admin-level access rights can edit any sent messages. Users without Admin rights can **only** edit messages they created." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:216 +#: ../../content/applications/productivity/discuss/chatter.rst:232 msgid "Search messages" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:218 +#: ../../content/applications/productivity/discuss/chatter.rst:234 msgid "Chatter threads can become long after a while, because of all the information they contain. To make it easier to find a specific entry, users can search the text of messages and notes for specific keywords." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:222 +#: ../../content/applications/productivity/discuss/chatter.rst:238 msgid "First, select a record with a chatter thread. For example, to search a *CRM* opportunity, navigate to :menuselection:`CRM app --> Sales --> My Pipeline`, and click on the Kanban card of an opportunity to open it. Then, at the top-right, above the chatter composer, click the :icon:`oi-search` :guilabel:`(search)` icon to open the search bar." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:227 +#: ../../content/applications/productivity/discuss/chatter.rst:243 msgid "Enter a keyword or phrase into the search bar, then hit :command:`Enter`, or click the :icon:`oi-search` :guilabel:`(search)` icon to the right of the search bar. Any messages or notes containing the keyword or phrase entered are listed below the search bar, with the keyword highlighted." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:232 +#: ../../content/applications/productivity/discuss/chatter.rst:248 msgid "To be taken directly to a particular message in the chatter thread, hover over the upper-right corner of the result to reveal a :guilabel:`Jump` button. Click this button to be directed to that message's location in the thread." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:240 +#: ../../content/applications/productivity/discuss/chatter.rst:255 msgid "Search results in a chatter thread emphasising the search icon and the jump button." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:240 +#: ../../content/applications/productivity/discuss/chatter.rst:255 msgid "Search results in a chatter thread. Hover over the upper-right corner of a result to see the **Jump** option. Click it to be taken directly to that message in the chatter thread." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:246 +#: ../../content/applications/productivity/discuss/chatter.rst:261 msgid "Schedule activities" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:248 +#: ../../content/applications/productivity/discuss/chatter.rst:263 msgid "*Activities* are follow-up tasks tied to a record in an Odoo database. Activities can be scheduled on any database page that contains a chatter thread, Kanban view, list view, or activities view of an application." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:252 +#: ../../content/applications/productivity/discuss/chatter.rst:267 msgid "To schedule an activity through a chatter thread, click the :guilabel:`Activities` button, located at the top of the chatter on any record. On the :guilabel:`Schedule Activity` pop-up window that appears, select an :guilabel:`Activity Type` from the drop-down menu." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:257 +#: ../../content/applications/productivity/discuss/chatter.rst:272 msgid "Individual applications have a list of *Activity Types* dedicated to that application. For example, to view and edit the activities available for the *CRM* application, go to :menuselection:`CRM app --> Configuration --> Activity Types`." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:261 +#: ../../content/applications/productivity/discuss/chatter.rst:276 msgid "Enter a title for the activity in the :guilabel:`Summary` field, located in the :guilabel:`Schedule Activity` pop-up window." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:264 +#: ../../content/applications/productivity/discuss/chatter.rst:279 msgid "Select a name from the :guilabel:`Assigned to` drop-down menu to assign the activity to a different user. Otherwise, the user creating the activity is automatically assigned." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:267 +#: ../../content/applications/productivity/discuss/chatter.rst:282 msgid "Add any additional information in the optional :guilabel:`Log a note...` field." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:270 +#: ../../content/applications/productivity/discuss/chatter.rst:285 msgid "The :guilabel:`Due Date` field on the :guilabel:`Schedule Activity` pop-up window auto-populates based on the configuration settings for the selected :guilabel:`Activity Type`. However, this date can be changed by selecting a day on the calendar in the :guilabel:`Due Date` field." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:274 +#: ../../content/applications/productivity/discuss/chatter.rst:289 msgid "Lastly, click one of the following buttons:" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:276 +#: ../../content/applications/productivity/discuss/chatter.rst:291 msgid ":guilabel:`Schedule`: adds the activity to the chatter under :guilabel:`Planned activities`." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:277 -msgid ":guilabel:`Mark as Done`: adds the details of the activity to the chatter under :guilabel:`Today`. The activity is not scheduled, it is automatically marked as completed." +#: ../../content/applications/productivity/discuss/chatter.rst:292 +msgid ":guilabel:`Schedule & Mark as Done`: adds the details of the activity to the chatter under :guilabel:`Today`. The activity is added to :guilabel:`Today`, and is automatically marked as done." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:279 +#: ../../content/applications/productivity/discuss/chatter.rst:295 msgid ":guilabel:`Done \\& Schedule Next`: adds the task under :guilabel:`Today` marked as done, and opens a new activity window." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:281 -msgid ":guilabel:`Discard`: discards any changes made on the pop-up window." +#: ../../content/applications/productivity/discuss/chatter.rst:297 +msgid ":guilabel:`Cancel`: discards any changes made on the pop-up window." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:283 +#: ../../content/applications/productivity/discuss/chatter.rst:299 msgid "Scheduled activities are added to the chatter for the record under :guilabel:`Planned activities`, and are color-coded based on their due date." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:286 +#: ../../content/applications/productivity/discuss/chatter.rst:302 msgid "**Red** icons indicate an overdue activity." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:287 +#: ../../content/applications/productivity/discuss/chatter.rst:303 msgid "**Yellow** icons indicate an activity with a due date scheduled for the current date." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:288 +#: ../../content/applications/productivity/discuss/chatter.rst:304 msgid "**Green** icons indicate an activity with a due date scheduled in the future." msgstr "" @@ -2790,7 +2810,7 @@ msgstr "" msgid "A chatter thread with planned activities with varying due dates." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:295 +#: ../../content/applications/productivity/discuss/chatter.rst:310 msgid "Click the :icon:`fa-info-circle` :guilabel:`(info)` icon next to a planned activity to see additional details." msgstr "" @@ -2798,11 +2818,11 @@ msgstr "" msgid "A detailed view of a planned activity." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:302 +#: ../../content/applications/productivity/discuss/chatter.rst:316 msgid "After completing an activity, click :guilabel:`Mark Done` under the activity entry in the chatter. This opens a :guilabel:`Mark Done` pop-up window, where additional notes about the activity can be entered. After adding any comments to the pop-up window, click: :guilabel:`Done \\& Schedule Next`, :guilabel:`Done`, or :guilabel:`Discard`." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:307 +#: ../../content/applications/productivity/discuss/chatter.rst:321 msgid "After the activity is marked complete, an entry with the activity type, title, and any other details that were included in the pop-up window are listed in the chatter." msgstr "" @@ -2810,35 +2830,35 @@ msgstr "" msgid "A chatter thread with a completed activity, included additional details." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:317 +#: ../../content/applications/productivity/discuss/chatter.rst:330 msgid "Attach files" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:319 +#: ../../content/applications/productivity/discuss/chatter.rst:332 msgid "Files can be added as attachments in the chatter, either to send with messages, or to include with a record." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:323 +#: ../../content/applications/productivity/discuss/chatter.rst:336 msgid "After a file has been added to a chatter thread, it can be downloaded by any user with access to the thread. Click the |paperclip| to make the files header visible, if necessary. Then, click the :icon:`fa-download` :guilabel:`(download)` icon the file to download it." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:327 +#: ../../content/applications/productivity/discuss/chatter.rst:340 msgid "To attach a file, click the |paperclip| located at the top of the chatter composer of any record that contains a chatter thread." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:330 +#: ../../content/applications/productivity/discuss/chatter.rst:343 msgid "This opens a file explorer pop-up window. Navigate to the desired file, select it, then click :guilabel:`Open` to add it to the record. Alternatively, files can be dragged and dropped directly onto a chatter thread." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:334 +#: ../../content/applications/productivity/discuss/chatter.rst:347 msgid "After files have been added, they are listed in the chatter thread, under a :guilabel:`Files` heading." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:338 +#: ../../content/applications/productivity/discuss/chatter.rst:351 msgid "After at least one file has been added to a chatter record, a new button labeled :guilabel:`Attach files` appears below the :guilabel:`Files` heading. To attach any additional files, this is the button that **must** be used, instead of the |paperclip| at the top of the chatter thread." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:343 +#: ../../content/applications/productivity/discuss/chatter.rst:356 msgid "After the :guilabel:`Files` section heading appears in the thread, clicking the |paperclip| no longer opens a file explorer pop-up window. Instead, clicking the |paperclip| toggles the :guilabel:`Files` section from visible to invisible in the chatter thread." msgstr "" @@ -2846,45 +2866,45 @@ msgstr "" msgid "A chatter thread with a file attached and the Attach files button added." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:354 +#: ../../content/applications/productivity/discuss/chatter.rst:366 msgid "Integrations" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:356 +#: ../../content/applications/productivity/discuss/chatter.rst:368 msgid "Beyond the standard features, additional integrations can be enabled to work with the chatter feature, specifically *WhatsApp* and *Google Translate*." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:360 +#: ../../content/applications/productivity/discuss/chatter.rst:372 msgid "Before the *WhatsApp* and *Google Translate* integrations can be used with the chatter, they **must** be configured. Step-by-step instructions on how to set-up each of these features can be found in the documentation below:" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:364 -#: ../../content/applications/productivity/discuss/chatter.rst:424 +#: ../../content/applications/productivity/discuss/chatter.rst:376 +#: ../../content/applications/productivity/discuss/chatter.rst:433 msgid ":doc:`WhatsApp <../whatsapp>`" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:365 +#: ../../content/applications/productivity/discuss/chatter.rst:377 msgid ":doc:`Google Translate <../../general/integrations/google_translate>`" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:368 +#: ../../content/applications/productivity/discuss/chatter.rst:380 #: ../../content/applications/productivity/whatsapp.rst:3 msgid "WhatsApp" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:370 +#: ../../content/applications/productivity/discuss/chatter.rst:382 msgid "*WhatsApp* is an instant messaging and voice-over-IP app that allows users to send and receive messages, as well as share content." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:374 +#: ../../content/applications/productivity/discuss/chatter.rst:386 msgid "*WhatsApp* is an Odoo Enterprise-only application that does **not** work in the Odoo Community edition. To sign up for an Odoo Enterprise edition, click here: `Odoo Free Trial `_." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:378 +#: ../../content/applications/productivity/discuss/chatter.rst:390 msgid "After *WhatsApp* has been configured and enabled within a database, a :guilabel:`WhatsApp` button is added above the chatter composer on any applicable record. If one or more approved *WhatsApp* templates are found for that model, clicking this button opens a :guilabel:`Send WhatsApp Message` pop-up window." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:384 +#: ../../content/applications/productivity/discuss/chatter.rst:396 msgid "*WhatsApp* templates **must** be approved before they can be used. See :ref:`WhatsApp templates ` for more information." msgstr "" @@ -2892,43 +2912,43 @@ msgstr "" msgid "A send WhatsApp message pop-up window." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:392 +#: ../../content/applications/productivity/discuss/chatter.rst:403 msgid "Google Translate" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:394 +#: ../../content/applications/productivity/discuss/chatter.rst:405 msgid "*Google Translate* can be used to translate user-generated text in the Odoo chatter." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:396 +#: ../../content/applications/productivity/discuss/chatter.rst:407 msgid "To enable *Google Translate* on a database, an *API key* must first :doc:`be created <../../general/integrations/google_translate>` through the `Google API Console `_." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:400 +#: ../../content/applications/productivity/discuss/chatter.rst:411 msgid "After creating the API key, navigate to the :menuselection:`Settings app --> Discuss section` and paste the key in the :guilabel:`Message Translation` field. Click :guilabel:`Save` to save the changes." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:405 +#: ../../content/applications/productivity/discuss/chatter.rst:416 msgid "Translate a chatter message" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:407 -msgid "To translate a user's text from another language, click the :icon:`fa-ellipsis-h` :guilabel:`(ellipsis)` menu to the right of the chatter. Then, select :guilabel:`Translate`. The content translates to the language set in the :doc:`user's preferences <../../general/users/language/>`." +#: ../../content/applications/productivity/discuss/chatter.rst:418 +msgid "To translate a user's text from another language, click the |ve| menu to the right of the chatter. Then, select :guilabel:`Translate`. The content translates to the language set in the :doc:`user's preferences <../../general/users/language/>`." msgstr "" #: ../../content/applications/productivity/discuss/chatter.rst:-1 msgid "alt text" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:417 +#: ../../content/applications/productivity/discuss/chatter.rst:426 msgid "Using the *Google Translate* API **requires** a current billing account with `Google `_." msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:422 +#: ../../content/applications/productivity/discuss/chatter.rst:431 msgid ":doc:`Discuss Channels <../discuss/team_communication/>`" msgstr "" -#: ../../content/applications/productivity/discuss/chatter.rst:423 +#: ../../content/applications/productivity/discuss/chatter.rst:432 msgid ":doc:`Activities <../../essentials/activities>`" msgstr "" @@ -3037,110 +3057,110 @@ msgid "Use channels for team communication" msgstr "" #: ../../content/applications/productivity/discuss/team_communication.rst:5 -msgid "Use channels in the Odoo *Discuss* app to organize discussions between individual teams, departments, projects, or any other group that requires regular communication. With channels, employees can communicate inside dedicated spaces within the Odoo database around specific topics, updates, and latest developments having to do with the organization." +msgid "Use channels in the Odoo **Discuss** app to organize discussions between individual teams, departments, projects, or any other group that requires regular communication. With channels, employees can communicate inside dedicated spaces within the Odoo database around specific topics, updates, and latest developments having to do with the organization." msgstr "" #: ../../content/applications/productivity/discuss/team_communication.rst:11 -msgid "Public and private channels" +msgid "Create a new channel" msgstr "" #: ../../content/applications/productivity/discuss/team_communication.rst:13 -msgid "A *Public* channel can be seen by everyone, while a *Private* one is only visible to users invited to it. To create a new channel, navigate to the :menuselection:`Discuss` app, and then click on the :guilabel:`➕ (plus)` icon next to the :guilabel:`Channels` heading in the left-side menu. After typing the name of the channel, two selectable options will appear: The first is a channel with a hashtag (`#`) to indicate that it is a public channel; the second option is a channel with a lock icon (`🔒`) next to it, to indicate that it is a private channel. Select the channel type that best fits the communication needs." +msgid "To create a new channel, navigate to the :menuselection:`Discuss` app, and then click on the :icon:`fa-plus` :guilabel:`(plus)` icon next to the :guilabel:`Channels` heading in the left-side menu." msgstr "" #: ../../content/applications/productivity/discuss/team_communication.rst:-1 msgid "View of discuss's sidebar and a channel being created in Odoo Discuss." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:26 -msgid "A public channel is best used when many employees need to access information (such as company announcements), whereas a private channel could be used whenever information should be limited to specific groups (such as a specific department)." +#: ../../content/applications/productivity/discuss/team_communication.rst:20 +msgid "The channel's :guilabel:`Group Name`, :guilabel:`Description`, and :guilabel:`Privacy` settings can be modified by clicking on the channel's settings, represented by a :icon:`fa-cog` :guilabel:`(gear)` icon in the left sidebar menu, next to the channel's name." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:31 -msgid "Configuration options" +#: ../../content/applications/productivity/discuss/team_communication.rst:25 +msgid "Privacy tab" msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:33 -msgid "The channel's :guilabel:`Group Name`, :guilabel:`Description`, and :guilabel:`Privacy` settings can be modified by clicking on the channel's settings, represented by a :guilabel:`⚙️ (gear)` icon in the left sidebar menu, next to the channel's name." +#: ../../content/applications/productivity/discuss/team_communication.rst:27 +msgid "To control which users can join a channel, open the channel's setting page and navigate to the :guilabel:`Privacy` tab." msgstr "" #: ../../content/applications/productivity/discuss/team_communication.rst:-1 msgid "View of a channel's settings form in Odoo Discuss." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:42 -msgid "Privacy and Members tabs" +#: ../../content/applications/productivity/discuss/team_communication.rst:33 +msgid "To limit access of the channel to a specific group, select an option from the :guilabel:`Authorized Group` drop-down menu." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:44 -msgid "Changing :guilabel:`Who can follow the group's activities?` controls which groups can have access to the channel." +#: ../../content/applications/productivity/discuss/team_communication.rst:36 +msgid "To automatically add members of a group as followers of the channel, click the :guilabel:`Auto Subscribe Groups` field, and select one or more groups from the list." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:48 -msgid "Allowing :guilabel:`Everyone` to follow a private channel lets other users view and join it, as they would a public one." +#: ../../content/applications/productivity/discuss/team_communication.rst:40 +msgid "Users who are automatically added as followers can manually edit their subscription to the channel, if necessary." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:51 -msgid "When choosing :guilabel:`Invited people only`, specify in the :guilabel:`Members` tab which members should be invited. Inviting members can also be done from the *Discuss* app's main dashboard, by selecting the channel, clicking the *add user* icon in the top-right corner of the dashboard, and finally clicking :guilabel:`Invite to Channel` once all the users have been added." +#: ../../content/applications/productivity/discuss/team_communication.rst:43 +msgid "The option to :guilabel:`Auto Subscribe Groups` automatically adds users of that particular user group as followers. In other words, while :guilabel:`Authorized Groups` limits which users can access the channel, :guilabel:`Auto Subscribe Groups` automatically adds users as members as long as they are part of a specific user group. The same is true for :guilabel:`Auto Subscribe Departments`." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:-1 -msgid "View of Discuss' option to invite members in Odoo Discuss." +#: ../../content/applications/productivity/discuss/team_communication.rst:49 +msgid "Invite members to a channel" +msgstr "" + +#: ../../content/applications/productivity/discuss/team_communication.rst:51 +msgid "To invite members to a channel, click on the :guilabel:`Members` tab. Click :guilabel:`Add a line`, then select either a :guilabel:`Partner` or :guilabel:`Guest` from the drop-down menu." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:60 -msgid "When the :guilabel:`Selected group of users` option is selected, it reveals the ability to add an :guilabel:`Authorized Group`, along with the options to :guilabel:`Auto Subscribe Groups` and :guilabel:`Auto Subscribe Departments`." +#: ../../content/applications/productivity/discuss/team_communication.rst:54 +msgid "Inviting members can also be done from the **Discuss** app's main dashboard, by selecting the channel, clicking the :icon:`fa-user-plus` :guilabel:`(add user)` icon in the top-right corner of the dashboard, and finally clicking :guilabel:`Invite to Channel` once all the users have been added." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:64 -msgid "The option to :guilabel:`Auto Subscribe Groups` automatically adds users of that particular user group as followers. In other words, while :guilabel:`Authorized Groups` limits which users can access the channel, :guilabel:`Auto Subscribe Groups` automatically adds users as members as long as they are part of a specific user group. The same is true for :guilabel:`Auto Subscribe Departments`." +#: ../../content/applications/productivity/discuss/team_communication.rst:-1 +msgid "View of Discuss' option to invite members in Odoo Discuss." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:70 +#: ../../content/applications/productivity/discuss/team_communication.rst:63 msgid "Quick search bar" msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:72 -msgid "Once at least 20 channels, direct messages, or live chat conversations (if *Live Chat* module is installed on the database) are pinned in the sidebar, a :guilabel:`Quick search…` bar is displayed. This feature is a convenient way to filter conversations and quickly find relevant communications." +#: ../../content/applications/productivity/discuss/team_communication.rst:65 +msgid "Once at least 20 channels, direct messages, or live chat conversations are pinned in the sidebar, a :guilabel:`Quick search…` bar is displayed. This feature is a convenient way to filter conversations and find relevant communications." msgstr "" #: ../../content/applications/productivity/discuss/team_communication.rst:-1 msgid "View of the Discuss' sidebar emphasizing the quick search bar in Odoo Discuss." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:81 +#: ../../content/applications/productivity/discuss/team_communication.rst:73 msgid "Finding channels" msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:83 -msgid "Click on the settings :guilabel:`⚙️ (gear)` icon, located in the left sidebar, to the right of the :guilabel:`CHANNELS` collapsible menu item. Doing so will lead to a mosaic view containing all the public channels available. Users can join or leave channels on this screen by clicking the :guilabel:`JOIN` or :guilabel:`LEAVE` buttons that appear in the channel boxes." +#: ../../content/applications/productivity/discuss/team_communication.rst:75 +msgid "To view all available channels, click on the :icon:`fa-cog` :guilabel:`(gear)` icon to the right of the :guilabel:`CHANNELS` menu. Users can join or leave channels on this screen by clicking the :guilabel:`Join` or :guilabel:`Leave` buttons that appear in the channel boxes." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:88 +#: ../../content/applications/productivity/discuss/team_communication.rst:79 msgid "There is also the ability to apply filtering criteria and save them for later use. The :guilabel:`Search...` function accepts wildcards by using the underscore character [ `_` ], and specific searches can be saved by using the :menuselection:`Favorites --> Save Current Search` drop-down menu." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:-1 -msgid "View of a channel being searched through filters in Odoo Discuss" -msgstr "" - -#: ../../content/applications/productivity/discuss/team_communication.rst:98 +#: ../../content/applications/productivity/discuss/team_communication.rst:85 msgid "Linking channel in chatter" msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:100 -msgid "Channels can be linked in the chatter (log note) of a record in Odoo. To do so, simply type: `#` and the channel name. Click or press enter on the *channel* name. Upon logging the note a link to the channel will appear. After clicking on the link a chat window with the channel conversation will pop up in the lower right corner of the screen." +#: ../../content/applications/productivity/discuss/team_communication.rst:87 +msgid "Channels can be linked in the *chatter* of a record to share relvant discussions. To do so, type: `#` and the channel name. Click or press enter on the *Channel* name. Upon logging the note a link to the channel appears. After clicking on the link a chat window with the channel conversation pops up in the lower right corner of the screen." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:105 -msgid "Users are able to contribute to this group channel (either public or member based) by typing messages in window and pressing *enter*." +#: ../../content/applications/productivity/discuss/team_communication.rst:92 +msgid "Users are able to contribute to this group channel by typing messages in window and pressing *enter*." msgstr "" #: ../../content/applications/productivity/discuss/team_communication.rst:-1 -msgid "Channel linked in chatter with the channel open on the lower right quadrant." +msgid "Channel linked in chatter." msgstr "" -#: ../../content/applications/productivity/discuss/team_communication.rst:113 +#: ../../content/applications/productivity/discuss/team_communication.rst:99 msgid ":doc:`../discuss`" msgstr "" @@ -3300,7 +3320,7 @@ msgid ":icon:`fa-cog` :guilabel:`Automations`: Create :doc:`automation rules `_." +msgid "Setting up automation rules requires activating :doc:`/applications/studio`, which may impact your `pricing plan `_." msgstr "" #: ../../content/applications/productivity/documents.rst:124 @@ -3308,7 +3328,7 @@ msgid "Files" msgstr "" #: ../../content/applications/productivity/documents.rst:126 -msgid "To upload a file, select the desired folder in the tree, click :guilabel:`New` and select :guilabel:`Upload`." +msgid "To upload a file, select the desired folder in the tree, click :guilabel:`New`, and select :guilabel:`Upload`." msgstr "" #: ../../content/applications/productivity/documents.rst:130 @@ -3348,7 +3368,7 @@ msgid "Several buttons are available in the top bar when opening a file:" msgstr "" #: ../../content/applications/productivity/documents.rst:156 -msgid "the :icon:`fa-cog` :guilabel:`Action` menu, which includes the options described below" +msgid "the :icon:`fa-cog` :guilabel:`Actions` menu, which includes the options described below" msgstr "" #: ../../content/applications/productivity/documents.rst:157 @@ -3364,7 +3384,7 @@ msgid "any :ref:`buttons defined for the folder `" msgstr "" #: ../../content/applications/productivity/documents.rst:161 -msgid "The following options are available in the :icon:`fa-cog` :guilabel:`Action` menu:" +msgid "The following options are available in the :icon:`fa-cog` :guilabel:`Actions` menu:" msgstr "" #: ../../content/applications/productivity/documents.rst:163 @@ -3412,7 +3432,7 @@ msgid "Splitting and merging PDFs" msgstr "" #: ../../content/applications/productivity/documents.rst:193 -msgid "To divide a PDF into individual or groups of pages, open the PDF and click :icon:`fa-scissors` :guilabel:`Split PDF` in the upper-right part of the document preview. Click the :icon:`fa-scissors` (:guilabel:`scissors`) icon between pages to remove a split if needed, then click :guilabel:`Split` to confirm." +msgid "To divide a PDF into individual or groups of pages, open the PDF, click the :icon:`fa-cog` :guilabel:`Actions` button, and select :icon:`fa-scissors` :guilabel:`Split PDF`. Click the :icon:`fa-scissors` (:guilabel:`scissors`) icon between pages to remove a split if needed, then click :guilabel:`Split` to confirm." msgstr "" #: ../../content/applications/productivity/documents.rst:-1 @@ -3424,11 +3444,15 @@ msgid "To merge PDF files, follow these steps:" msgstr "" #: ../../content/applications/productivity/documents.rst:203 -msgid "Navigate to the folder containing the files you want to merge, then switch to the list view and select the relevant files." +msgid "Navigate to the folder containing the files you want to merge." +msgstr "" + +#: ../../content/applications/productivity/documents.rst:204 +msgid "Hold down **Ctrl** and click the relevant files." msgstr "" #: ../../content/applications/productivity/documents.rst:205 -msgid "Click the :icon:`fa-cog` :guilabel:`Action` button and select :icon:`fa-scissors` :guilabel:`Merge PDFs`." +msgid "Click the :icon:`fa-cog` :guilabel:`Actions` button and select :icon:`fa-scissors` :guilabel:`Merge PDFs`." msgstr "" #: ../../content/applications/productivity/documents.rst:207 @@ -3472,7 +3496,7 @@ msgid "Enter a :guilabel:`Document Name` and select the person you're requesting msgstr "" #: ../../content/applications/productivity/documents.rst:229 -msgid "If needed, set a :guilabel:`Due Date In`, choose the :guilabel:`Folder` where the file should be added, add :guilabel:`Tags`, and write a :guilabel:`Message`." +msgid "If needed, set a :guilabel:`Due Date In`, edit the :guilabel:`Folder` where the file should be added, add :guilabel:`Tags`, and write a :guilabel:`Message`." msgstr "" #: ../../content/applications/productivity/documents.rst:231 @@ -3520,103 +3544,127 @@ msgid "Details panel" msgstr "" #: ../../content/applications/productivity/documents.rst:261 -msgid "To view a folder's or file's information and tags, select the folder or file, then click the :icon:`fa-info-circle` (:guilabel:`Info & Tags`) button in the upper-right corner next to the view icons." +msgid "To view a folder's or file's information and tags, select the folder or file, then click the :icon:`fa-cog` icon (for folders) or :icon:`fa-cog` :guilabel:`Actions` button (for files) and select :icon:`fa-info-circle` :guilabel:`Info & Tags`." +msgstr "" + +#: ../../content/applications/productivity/documents.rst:266 +msgid "Alternatively, for folders, you can also click the :icon:`fa-info-circle` (:guilabel:`Info & Tags`) button in the upper-right corner next to the view icons." msgstr "" -#: ../../content/applications/productivity/documents.rst:265 +#: ../../content/applications/productivity/documents.rst:269 msgid "The details panel allows the following:" msgstr "" -#: ../../content/applications/productivity/documents.rst:267 +#: ../../content/applications/productivity/documents.rst:271 msgid "Change the file's folder or the folder's name." msgstr "" -#: ../../content/applications/productivity/documents.rst:268 +#: ../../content/applications/productivity/documents.rst:272 msgid "View the file's or folder's size and the folder's item count." msgstr "" -#: ../../content/applications/productivity/documents.rst:269 -msgid "Change the file's or folder's :guilabel:`Owner` and :guilabel:`Contact`. By default, the person who creates a file or folder is set as its :guilabel:`Owner` and granted full access rights to it. To change it, select the required user from the dropdown list. The :guilabel:`Contact` is a person who only has :guilabel:`Viewer` :ref:`access rights ` to the file or folder, e.g., an existing supplier in the database." +#: ../../content/applications/productivity/documents.rst:273 +msgid "Change the file's or folder's owner and contact. By default, the person who creates a file or folder is set as its owner and granted full access rights to it. To change it, select the required user from the dropdown list. The contact is a person who only has :guilabel:`Viewer` :ref:`access rights ` to the file or folder, e.g., an existing supplier in the database." +msgstr "" + +#: ../../content/applications/productivity/documents.rst:279 +msgid "To close the details panel, click the :icon:`fa-remove` (:guilabel:`remove`) button in the upper-right corner." msgstr "" -#: ../../content/applications/productivity/documents.rst:276 -msgid "To view a file from their user profile, a user must be set as the :guilabel:`Contact` and have at least :guilabel:`Viewer` :ref:`access `." +#: ../../content/applications/productivity/documents.rst:283 +msgid "To view a file from their user profile, a user must be set as the contact and have at least :guilabel:`Viewer` :ref:`access `." msgstr "" -#: ../../content/applications/productivity/documents.rst:282 +#: ../../content/applications/productivity/documents.rst:289 msgid "Email aliases" msgstr "" -#: ../../content/applications/productivity/documents.rst:284 +#: ../../content/applications/productivity/documents.rst:291 msgid "You can use an email alias to automatically save files sent to the email alias into a specific folder. To set up an email alias for a folder, follow these steps:" msgstr "" -#: ../../content/applications/productivity/documents.rst:287 +#: ../../content/applications/productivity/documents.rst:294 +msgid "Make sure a :ref:`custom alias domain ` is configured in the :guilabel:`General Settings`." +msgstr "" + +#: ../../content/applications/productivity/documents.rst:296 msgid "Select the folder where files should be saved." msgstr "" -#: ../../content/applications/productivity/documents.rst:288 +#: ../../content/applications/productivity/documents.rst:297 msgid "Click the :icon:`fa-info-circle` (:guilabel:`Info & Tags`) in the upper-right corner next to the view icons." msgstr "" -#: ../../content/applications/productivity/documents.rst:290 -msgid "In the details panel, enter the desired :guilabel:`Email` alias and select or create the domain." +#: ../../content/applications/productivity/documents.rst:299 +msgid "In the details panel, enter the desired email alias." msgstr "" -#: ../../content/applications/productivity/documents.rst:291 +#: ../../content/applications/productivity/documents.rst:300 msgid "Optionally, specify an :guilabel:`Activity type` and assignee to create an :doc:`activity ` when a file is received via the alias." msgstr "" -#: ../../content/applications/productivity/documents.rst:293 +#: ../../content/applications/productivity/documents.rst:302 msgid "Optionally, select the :ref:`Tags ` to automatically apply to the files created through the alias." msgstr "" -#: ../../content/applications/productivity/documents.rst:297 +#: ../../content/applications/productivity/documents.rst:306 msgid ":doc:`/applications/general/email_communication/email_servers_inbound`" msgstr "" -#: ../../content/applications/productivity/documents.rst:302 +#: ../../content/applications/productivity/documents.rst:311 #: ../../content/applications/productivity/sign.rst:297 msgid "Tags" msgstr "" -#: ../../content/applications/productivity/documents.rst:304 +#: ../../content/applications/productivity/documents.rst:313 msgid "Tags help organize and categorize files, making it easier to search and filter them. To configure tags for files, go to :menuselection:`Documents --> Configuration --> Tags`. Click :guilabel:`New` to create a new tag. Enter the :guilabel:`Tag Name`, select a :guilabel:`Color`, and optionally add a :guilabel:`Tooltip` that appears when hovering over the tag." msgstr "" -#: ../../content/applications/productivity/documents.rst:309 -msgid "To add tags to a file, open the file, click the :icon:`fa-info-circle` (:guilabel:`Info & Tags`) in the upper-right corner next to the view icons, and then, in the details panel, select a tag from the dropdown list." +#: ../../content/applications/productivity/documents.rst:318 +msgid "To add tags to a file, open the file, click the :icon:`fa-cog` :guilabel:`Actions`, select :icon:`fa-info-circle` :guilabel:`Info & Tags`, and then, in the details panel, select a tag from the :guilabel:`Tags` dropdown menu (identifiable by its placeholder :guilabel:`Add tags`)." msgstr "" -#: ../../content/applications/productivity/documents.rst:314 +#: ../../content/applications/productivity/documents.rst:323 msgid ":ref:`Alias tags ` can also be used to automatically apply tags to files created through the alias." msgstr "" -#: ../../content/applications/productivity/documents.rst:320 +#: ../../content/applications/productivity/documents.rst:327 +msgid "Linked records" +msgstr "" + +#: ../../content/applications/productivity/documents.rst:329 +msgid "To link the file to a specific record, select the appropriate model from the :guilabel:`Linked to` dropdown menu (identifiable by its placeholder :guilabel:`No linked model`), then select the desired record." +msgstr "" + +#: ../../content/applications/productivity/documents.rst:334 +msgid "If :ref:`file centralization ` is enabled for a specific app, adding a file to the Documents app by uploading an attachment automatically adds the corresponding record in the :guilabel:`Linked to field` of the file." +msgstr "" + +#: ../../content/applications/productivity/documents.rst:341 msgid "Share and access rights" msgstr "" -#: ../../content/applications/productivity/documents.rst:323 +#: ../../content/applications/productivity/documents.rst:344 msgid "You can only share folders and files and edit their access rights if you have editing rights." msgstr "" -#: ../../content/applications/productivity/documents.rst:325 +#: ../../content/applications/productivity/documents.rst:346 msgid "Access rights can be set on:" msgstr "" -#: ../../content/applications/productivity/documents.rst:327 +#: ../../content/applications/productivity/documents.rst:348 msgid "folders: Select the folder, click the :icon:`fa-cog` (:guilabel:`gear`) icon, and select :guilabel:`Share`." msgstr "" -#: ../../content/applications/productivity/documents.rst:329 +#: ../../content/applications/productivity/documents.rst:350 msgid "files: Open the file and click :guilabel:`Share` in the top bar." msgstr "" -#: ../../content/applications/productivity/documents.rst:331 -msgid "In the :guilabel:`Share` pop-up, grant access to specific users or contacts by selecting their name from the dropdown menu or by adding their email address manually, then select :guilabel:`Viewer` or :guilabel:`Editor`." +#: ../../content/applications/productivity/documents.rst:352 +msgid "In the :guilabel:`Share` pop-up, click :guilabel:`Invite people` to grant access to specific users or contacts. Select their name from the dropdown menu or enter their email address in the :guilabel:`People` field, then set the :guilabel:`Role` field to :guilabel:`Viewer` or :guilabel:`Editor`." msgstr "" -#: ../../content/applications/productivity/documents.rst:336 +#: ../../content/applications/productivity/documents.rst:358 msgid "To remove a permission or set an expiration date for it, hover the mouse over the relevant contact and click the :icon:`fa-remove` (:guilabel:`remove`) or :icon:`fa-calendar` (:guilabel:`calendar`) button, respectively." msgstr "" @@ -3624,31 +3672,31 @@ msgstr "" msgid "Hover the mouse over a permission to reveal the buttons." msgstr "" -#: ../../content/applications/productivity/documents.rst:343 +#: ../../content/applications/productivity/documents.rst:365 msgid "To set :guilabel:`General access` for :guilabel:`Internal users` or :guilabel:`Anyone with the link`, select :guilabel:`Viewer`, :guilabel:`Editor`, or :guilabel:`None` (to restrict access completely). For :guilabel:`Anyone with the link`, you can further specify whether the folder or file should be :guilabel:`Discoverable` (accessible through browsing) or require that users :guilabel:`Must have the link to access` it." msgstr "" -#: ../../content/applications/productivity/documents.rst:350 +#: ../../content/applications/productivity/documents.rst:372 msgid "Public users :guilabel:`Must have the link to access` a folder or file on the portal when connecting for the first time." msgstr "" -#: ../../content/applications/productivity/documents.rst:352 +#: ../../content/applications/productivity/documents.rst:374 msgid "Each folder and file URL includes the access rights that have been set for it. When you share a folder, the person you share it with is directed to a dedicated portal where they can view the files in that folder, excluding any with restricted access." msgstr "" -#: ../../content/applications/productivity/documents.rst:357 +#: ../../content/applications/productivity/documents.rst:379 msgid ":doc:`Portal users ` can access folders and files they have permission to view or edit through the customer portal by clicking the :guilabel:`Documents` card." msgstr "" -#: ../../content/applications/productivity/documents.rst:362 +#: ../../content/applications/productivity/documents.rst:386 msgid "File digitization with AI" msgstr "" -#: ../../content/applications/productivity/documents.rst:364 +#: ../../content/applications/productivity/documents.rst:388 msgid "Files available in the Finance folder can be digitized. Select the file, click :guilabel:`Create Vendor Bill`, :guilabel:`Create Customer Invoice`, or :guilabel:`Create Customer Credit Note`, then click :guilabel:`Send for Digitization`." msgstr "" -#: ../../content/applications/productivity/documents.rst:369 +#: ../../content/applications/productivity/documents.rst:393 msgid ":doc:`AI-powered document digitization <../finance/accounting/vendor_bills/invoice_digitization>`" msgstr "" @@ -3685,544 +3733,553 @@ msgid "From scratch" msgstr "" #: ../../content/applications/productivity/knowledge.rst:31 -msgid "To create an article from scratch, click :guilabel:`New` in the top right corner or hover over the :guilabel:`Private` or :guilabel:`Workspace` category in the sidebar tree, then click the :icon:`fa-plus` :guilabel:`(plus)` icon. Start typing text or select one of the suggested options:" +msgid "To create an article from scratch, click :icon:`fa-plus` :guilabel:`New Article` in the top-left corner or hover over the :guilabel:`Private` or :guilabel:`Workspace` category in the sidebar tree, then click the :icon:`fa-plus` :guilabel:`(plus)` icon. Start typing text or select one of the suggested options:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:35 +#: ../../content/applications/productivity/knowledge.rst:36 msgid ":guilabel:`Load a Template`: Select a preconfigured template and click :guilabel:`Load Template`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:36 +#: ../../content/applications/productivity/knowledge.rst:37 msgid ":guilabel:`Build an Item Kanban`: Create items to visualize and manage them in a Kanban view." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:37 +#: ../../content/applications/productivity/knowledge.rst:38 msgid ":guilabel:`Build an Item List`: Create a structured list of items to centralize them in a single article." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:39 +#: ../../content/applications/productivity/knowledge.rst:40 msgid ":guilabel:`Build an Item Calendar`: Create a calendar view to manage and track items by date." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:40 +#: ../../content/applications/productivity/knowledge.rst:41 msgid ":guilabel:`Generate an Article with AI`: Generate content based on a prompt." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:43 +#: ../../content/applications/productivity/knowledge.rst:44 msgid "After writing the header, click or hover over :guilabel:`Untitled` in the top bar to automatically name the article after the header. This action does not apply if the article is already titled." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:48 +#: ../../content/applications/productivity/knowledge.rst:49 msgid "From a template" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:50 +#: ../../content/applications/productivity/knowledge.rst:51 msgid "To create an article from a template, follow these steps:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:52 +#: ../../content/applications/productivity/knowledge.rst:53 msgid "Click :icon:`fa-paint-brush` :guilabel:`Browse Templates` at the bottom of the sidebar tree." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:53 +#: ../../content/applications/productivity/knowledge.rst:54 msgid "Select a preferred template." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:54 +#: ../../content/applications/productivity/knowledge.rst:55 msgid "Click :guilabel:`Load Template`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:59 +#: ../../content/applications/productivity/knowledge.rst:60 msgid "Article editing" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:61 +#: ../../content/applications/productivity/knowledge.rst:62 msgid "To edit an article, select it in the sidebar tree, then edit its content and format it using the :ref:`text editor toolbar `, typing :ref:`powerbox commands `, and adding a :ref:`cover picture ` with a :ref:`title emoji `." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:69 +#: ../../content/applications/productivity/knowledge.rst:70 msgid "Text editor toolbar" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:71 +#: ../../content/applications/productivity/knowledge.rst:72 msgid "To edit a word, sentence, or paragraph, select or double-click it to display the text editor toolbar and apply the desired :doc:`formatting options `." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:75 -msgid "Click :icon:`fa-commenting` :guilabel:`Comment` to add a comment to the selected text." +#: ../../content/applications/productivity/knowledge.rst:76 +msgid "Click :icon:`fa-commenting-o` :guilabel:`Comment` to add a comment to the selected text." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:80 +#: ../../content/applications/productivity/knowledge.rst:81 msgid "Commands" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:82 +#: ../../content/applications/productivity/knowledge.rst:83 msgid "Type `/` to open the :ref:`powerbox ` and use a command. The following commands are exclusive to the Knowledge app:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:92 +#: ../../content/applications/productivity/knowledge.rst:93 msgid "Command" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:94 +#: ../../content/applications/productivity/knowledge.rst:95 msgid ":guilabel:`Index`" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:95 +#: ../../content/applications/productivity/knowledge.rst:96 msgid "Show :ref:`nested articles `: Display the child pages of the parent article." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:97 +#: ../../content/applications/productivity/knowledge.rst:98 msgid ":guilabel:`Item Kanban`" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:98 +#: ../../content/applications/productivity/knowledge.rst:99 msgid "Insert a Kanban view and create :ref:`article items `." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:100 +#: ../../content/applications/productivity/knowledge.rst:101 msgid ":guilabel:`Item Cards`" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:101 +#: ../../content/applications/productivity/knowledge.rst:102 msgid "Insert a Card view and create :ref:`article items `." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:102 +#: ../../content/applications/productivity/knowledge.rst:103 msgid ":guilabel:`Item List`" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:103 +#: ../../content/applications/productivity/knowledge.rst:104 msgid "Insert a List view and create :ref:`article items `." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:104 +#: ../../content/applications/productivity/knowledge.rst:105 msgid ":guilabel:`Item Calendar`" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:105 +#: ../../content/applications/productivity/knowledge.rst:106 msgid "Insert a Calendar view and create :ref:`article items `." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:111 +#: ../../content/applications/productivity/knowledge.rst:112 msgid "Article items" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:113 +#: ../../content/applications/productivity/knowledge.rst:114 msgid "Article items are active building blocks within an article, allowing the addition, management, and viewing of various organized content and data." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:116 +#: ../../content/applications/productivity/knowledge.rst:117 msgid "Article items within a parent article can contain :ref:`properties `, which are shared data fields from the parent, ensuring consistent information across related items and articles." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:123 +#: ../../content/applications/productivity/knowledge.rst:124 msgid "Cover pictures" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:125 +#: ../../content/applications/productivity/knowledge.rst:126 msgid "To add a cover picture, click the :icon:`fa-ellipsis-v` :guilabel:`(ellipsis)` icon, then :guilabel:`Add Cover`. The following options enable selecting and inserting pictures from different sources:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:129 +#: ../../content/applications/productivity/knowledge.rst:130 msgid "Search the :doc:`Unsplash ` database to find a suitable picture. If the database and **Unsplash** account are associated, the cover picture is automatically selected based on the article's name." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:132 +#: ../../content/applications/productivity/knowledge.rst:133 msgid ":guilabel:`Add URL`: Copy-paste the **image address**." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:133 +#: ../../content/applications/productivity/knowledge.rst:134 msgid ":guilabel:`Upload an image`: Upload the file into the image library." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:135 +#: ../../content/applications/productivity/knowledge.rst:136 msgid "To manage the cover picture, hover the mouse over it and select the preferred option:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:137 +#: ../../content/applications/productivity/knowledge.rst:138 msgid ":guilabel:`Replace Cover` and search from the database or library, or add a different URL." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:139 +#: ../../content/applications/productivity/knowledge.rst:140 msgid ":guilabel:`Reposition` and adjust the picture before clicking :guilabel:`Save Position`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:141 -msgid ":guilabel:`Remove Cover`." +#: ../../content/applications/productivity/knowledge.rst:142 +msgid ":guilabel:`Remove`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:146 +#: ../../content/applications/productivity/knowledge.rst:147 msgid "Title emoji" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:148 +#: ../../content/applications/productivity/knowledge.rst:149 msgid "To add a title emoji to the article's name and header:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:150 +#: ../../content/applications/productivity/knowledge.rst:151 msgid "Click the :icon:`fa-ellipsis-v` :guilabel:`(ellipsis)` icon, then :guilabel:`Add Icon` to generate a random emoji. Click the emoji to select a different one." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:153 +#: ../../content/applications/productivity/knowledge.rst:154 msgid "Alternatively, click the :icon:`fa-file-text-o` :guilabel:`(page)` icon next to the article's name in the sidebar or the top bar and select the preferred emoji." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:159 +#: ../../content/applications/productivity/knowledge.rst:160 msgid "Views and links from other apps" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:161 +#: ../../content/applications/productivity/knowledge.rst:162 msgid "To insert a view or a view link into an article, follow these steps:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:163 +#: ../../content/applications/productivity/knowledge.rst:164 msgid "Go to the desired app and select the preferred view." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:164 +#: ../../content/applications/productivity/knowledge.rst:165 msgid "Click the :icon:`fa-cog` :guilabel:`(cog)` icon, then select :menuselection:`Knowledge --> Insert view in article` or :guilabel:`Insert link in article`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:166 +#: ../../content/applications/productivity/knowledge.rst:167 msgid "Choose the article to insert the view or link to." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:169 +#: ../../content/applications/productivity/knowledge.rst:170 msgid "Once the view or link is inserted:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:171 +#: ../../content/applications/productivity/knowledge.rst:172 msgid "Users without access to the view cannot see it in Knowledge, even if they can access the article." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:173 -msgid "Clicking the inserted link opens a pop-up with the view's name next to the :icon:`fa-clipboard` (:guilabel:`copy`), :icon:`fa-pencil-square-o` (:guilabel:`edit`), and :icon:`fa-chain-broken` (:guilabel:`remove`) icons. Click the name inside the pop-up to open the linked view." +#: ../../content/applications/productivity/knowledge.rst:174 +msgid "Clicking the inserted link opens a pop-up with the view's name next to the :icon:`fa-clipboard` (:guilabel:`Copy Link`), :icon:`fa-pencil-square-o` (:guilabel:`Edit Link`), and :icon:`fa-chain-broken` (:guilabel:`Remove Link`) icons. Click the name inside the pop-up to open the linked view." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:179 +#: ../../content/applications/productivity/knowledge.rst:180 msgid "Article management" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:181 +#: ../../content/applications/productivity/knowledge.rst:182 msgid "Knowledge allows for managing articles, which consists of :ref:`structuring `, :ref:`sharing `, :ref:`removing `, and :ref:`retrieving ` them." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:187 +#: ../../content/applications/productivity/knowledge.rst:188 msgid "Basic management" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:189 +#: ../../content/applications/productivity/knowledge.rst:190 msgid "Click the :icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) icon and select one of the following actions for basic article management:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:192 +#: ../../content/applications/productivity/knowledge.rst:193 msgid ":guilabel:`Move To`: Select the article to move under a category or another article, then click :guilabel:`Move Article`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:194 +#: ../../content/applications/productivity/knowledge.rst:195 msgid ":guilabel:`Lock Content`: Lock the article to stop edits. Click :guilabel:`Unlock` to edit again." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:195 +#: ../../content/applications/productivity/knowledge.rst:196 msgid ":guilabel:`Create a Copy`: Copy the article under the :guilabel:`Private` section." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:196 +#: ../../content/applications/productivity/knowledge.rst:197 +msgid ":guilabel:`Open Version History`: Restore a previous version of the article." +msgstr "" + +#: ../../content/applications/productivity/knowledge.rst:198 msgid ":guilabel:`Export`: Open the browser's print function." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:197 -msgid ":guilabel:`Send to Trash`: Move the article to the trash." +#: ../../content/applications/productivity/knowledge.rst:199 +msgid ":guilabel:`Add to Templates`: Add the article to the list of templates." msgstr "" #: ../../content/applications/productivity/knowledge.rst:200 +msgid ":guilabel:`Send to Trash`: Move the article to the trash." +msgstr "" + +#: ../../content/applications/productivity/knowledge.rst:203 msgid "The following actions only apply to :ref:`nested articles ` and :ref:`article items `:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:204 +#: ../../content/applications/productivity/knowledge.rst:207 msgid ":guilabel:`Convert into Article Item`: Convert the nested article into an :ref:`article item `." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:206 +#: ../../content/applications/productivity/knowledge.rst:209 msgid ":guilabel:`Convert into Article`: Convert the article item into a :ref:`nested article `." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:210 +#: ../../content/applications/productivity/knowledge.rst:213 msgid "Move an article directly from the sidebar tree by dragging and dropping it under another article or category." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:212 -msgid "Press `CTRL` / `CMD` + `K` to open the command palette, then type `?` to search for visible articles or `$` for :ref:`hidden articles `. Alternatively, hover over the :guilabel:`Workspace` category and click the :icon:`fa-eye` (:guilabel:`eye`) icon to find hidden articles." +#: ../../content/applications/productivity/knowledge.rst:215 +msgid "Click the :icon:`fa-search` (:guilabel:`serch`) icon in the top-left corner or press `CTRL` / `CMD` + `K` to open the command palette, then type `?` to search for visible articles or `$` for :ref:`hidden articles `. Alternatively, hover over the :guilabel:`Workspace` category and click the :icon:`fa-eye` (:guilabel:`eye`) icon to find hidden articles." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:220 +#: ../../content/applications/productivity/knowledge.rst:224 msgid "Structuring" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:223 +#: ../../content/applications/productivity/knowledge.rst:227 msgid "Sidebar structure" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:225 +#: ../../content/applications/productivity/knowledge.rst:229 msgid "The sidebar structure follows a hierarchy with parent and nested articles organized within the following categories:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:228 +#: ../../content/applications/productivity/knowledge.rst:232 msgid "The :guilabel:`Favorites` category displays all articles marked as favorites." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:229 +#: ../../content/applications/productivity/knowledge.rst:233 msgid "The :guilabel:`Workspace` category displays articles accessible to all internal users." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:230 +#: ../../content/applications/productivity/knowledge.rst:234 msgid "The :guilabel:`Shared` category displays articles shared with specific users." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:231 +#: ../../content/applications/productivity/knowledge.rst:235 msgid "The :guilabel:`Private` category displays personal articles." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:234 +#: ../../content/applications/productivity/knowledge.rst:238 msgid "To mark an article as a favorite and display the :guilabel:`Favorites` category, click the :icon:`fa-star-o` (:guilabel:`star`) icon in the top-right menu." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:238 +#: ../../content/applications/productivity/knowledge.rst:242 msgid "Article structure" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:240 +#: ../../content/applications/productivity/knowledge.rst:244 msgid "Nested articles inherit their parent's :ref:`access rights `, and :ref:`properties ` are applied to a group of nested articles under the same parent." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:247 +#: ../../content/applications/productivity/knowledge.rst:251 msgid "Sharing" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:249 +#: ../../content/applications/productivity/knowledge.rst:253 msgid "Sharing an article involves configuring :ref:`access rights `, inviting :ref:`users `, providing :ref:`online access `, and determining its visibility in the :ref:`sidebar tree `." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:254 +#: ../../content/applications/productivity/knowledge.rst:258 msgid "Articles listed under a category in the sidebar tree are **visible**. Articles that certain users must search for through the command palette due to restricted access rights are **hidden**." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:260 +#: ../../content/applications/productivity/knowledge.rst:264 msgid "Configure access rights" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:262 +#: ../../content/applications/productivity/knowledge.rst:266 msgid "Click :guilabel:`Share` in the top-right menu to configure access rights." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:265 +#: ../../content/applications/productivity/knowledge.rst:269 msgid "Default access rights" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:274 -#: ../../content/applications/productivity/knowledge.rst:296 +#: ../../content/applications/productivity/knowledge.rst:278 +#: ../../content/applications/productivity/knowledge.rst:300 msgid "Setting" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:276 +#: ../../content/applications/productivity/knowledge.rst:280 msgid ":guilabel:`Can edit`" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:277 +#: ../../content/applications/productivity/knowledge.rst:281 msgid "Allow all internal users to edit the article." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:278 +#: ../../content/applications/productivity/knowledge.rst:282 msgid ":guilabel:`Can read`" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:279 +#: ../../content/applications/productivity/knowledge.rst:283 msgid "Allow all internal users to read the article only." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:280 +#: ../../content/applications/productivity/knowledge.rst:284 msgid ":guilabel:`No access`" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:281 +#: ../../content/applications/productivity/knowledge.rst:285 msgid "Prevent all users from accessing the article in the sidebar tree or searching in the command palette." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:287 +#: ../../content/applications/productivity/knowledge.rst:291 msgid "Visibility" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:298 +#: ../../content/applications/productivity/knowledge.rst:302 msgid ":guilabel:`Everyone`" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:299 +#: ../../content/applications/productivity/knowledge.rst:303 msgid "The article is visible in the sidebar tree to all internal users." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:300 +#: ../../content/applications/productivity/knowledge.rst:304 msgid ":guilabel:`Members`" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:301 +#: ../../content/applications/productivity/knowledge.rst:305 msgid "The article is only visible in the sidebar tree to :ref:`invited users `, while other users can find it using the hidden article search by pressing `CTRL` / `CMD` + `K` and typing `$`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:306 +#: ../../content/applications/productivity/knowledge.rst:310 msgid "The :guilabel:`Default Access Rights` apply to all internal users except invited users; specific access rights override default access rights." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:308 +#: ../../content/applications/productivity/knowledge.rst:312 msgid "Selecting `Can edit` or `Can read` in the :guilabel:`Default Access Rights` moves the article to the :guilabel:`Workspace` category while selecting `No access` moves it to the :guilabel:`Private` category if it is not shared with an invited user." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:311 +#: ../../content/applications/productivity/knowledge.rst:315 msgid "The :guilabel:`Visibility` setting only applies to :guilabel:`Workspace` articles." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:316 +#: ../../content/applications/productivity/knowledge.rst:320 msgid "Invite specific users" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:318 +#: ../../content/applications/productivity/knowledge.rst:322 msgid "To grant specific internal or portal users access to a private article or to share a :guilabel:`Workspace` article with a portal user, follow these steps:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:321 +#: ../../content/applications/productivity/knowledge.rst:325 msgid "Click :guilabel:`Share` in the top-right menu." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:322 -#: ../../content/applications/productivity/knowledge.rst:324 +#: ../../content/applications/productivity/knowledge.rst:326 +#: ../../content/applications/productivity/knowledge.rst:328 msgid "Click :guilabel:`Invite`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:323 +#: ../../content/applications/productivity/knowledge.rst:327 msgid "Select the preferred :guilabel:`Permission` and add users in the :guilabel:`Recipients` field." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:329 +#: ../../content/applications/productivity/knowledge.rst:333 msgid "Generate article URL" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:331 -msgid "Click :guilabel:`Share` and activate the :guilabel:`Share to web` toggle to generate a URL. Click the :icon:`fa-clone` (:guilabel:`copy`) icon to copy the article's URL." +#: ../../content/applications/productivity/knowledge.rst:335 +msgid "Click :guilabel:`Share` and activate the :guilabel:`Share to web` toggle to generate a URL. Click :guilabel:`Copy Link` to copy the article's URL." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:335 +#: ../../content/applications/productivity/knowledge.rst:339 msgid "If an article contains :ref:`inserted views `, users with the URL do not see them unless they can access the inserted content." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:337 +#: ../../content/applications/productivity/knowledge.rst:341 msgid "Having the Website app is necessary to share an article's URL." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:342 +#: ../../content/applications/productivity/knowledge.rst:346 msgid "Removal" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:344 +#: ../../content/applications/productivity/knowledge.rst:348 msgid "Removing an article involves deleting or archiving it." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:347 +#: ../../content/applications/productivity/knowledge.rst:351 msgid "Delete an article" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:349 -msgid "Select an article in the sidebar tree and click the :icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) icon, then :guilabel:`Send to Trash`. The article is moved to the trash for 30 days before being permanently deleted." +#: ../../content/applications/productivity/knowledge.rst:353 +msgid "Select an article in the sidebar tree and click the :icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) icon, then :guilabel:`Send to Trash`. Alternatively, hold click the article and drag it to the :guilabel:`Drop here to delete this article` at the bottom left corner. The article is moved to the trash for 30 days before being permanently deleted." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:353 -msgid "To permanently delete an article, click :guilabel:`Search` in the top-left menu, select an article, and click :menuselection:`Actions --> Delete --> Delete`." +#: ../../content/applications/productivity/knowledge.rst:358 +msgid "To permanently delete an article, click :guilabel:`Articles` in the top-left menu, select an article, and click :menuselection:`Actions --> Delete --> Delete`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:357 -msgid "To restore a trashed article, click :guilabel:`Open the Trash` at the bottom of the sidebar tree, select an article, and click :guilabel:`Restore`. Alternatively, click :guilabel:`Search` in the top-left menu. In the search bar, click :menuselection:`Filters --> Trashed`. Click the article, then :guilabel:`Restore`." +#: ../../content/applications/productivity/knowledge.rst:362 +msgid "To restore a trashed article, click :guilabel:`Open the Trash` at the bottom of the sidebar tree, select an article, and click :guilabel:`Restore`. Alternatively, click :guilabel:`Articles` in the top-left menu. In the search bar, click :menuselection:`Filters --> Trashed`. Click the article, then :guilabel:`Restore`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:363 +#: ../../content/applications/productivity/knowledge.rst:368 msgid "Archive an article" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:365 -msgid "Click :guilabel:`Search`, select an article, and click :menuselection:`Actions --> Archive --> Archive`." +#: ../../content/applications/productivity/knowledge.rst:370 +msgid "Click :guilabel:`Articles`, select an article, and click :menuselection:`Actions --> Archive --> Archive`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:369 -msgid "To restore an archived article, click :guilabel:`Search`. In the search bar, click :menuselection:`Filters --> Archived`. Select the article and go to :menuselection:`Actions --> Unarchive`." +#: ../../content/applications/productivity/knowledge.rst:374 +msgid "To restore an archived article, click :guilabel:`Articles`. In the search bar, click :menuselection:`Filters --> Archived`. Select the article and go to :menuselection:`Actions --> Unarchive`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:376 +#: ../../content/applications/productivity/knowledge.rst:381 msgid "Retrieval" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:378 +#: ../../content/applications/productivity/knowledge.rst:383 msgid "Retrieving Knowledge articles consists of accessing them from various Odoo apps or restoring previous versions." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:382 +#: ../../content/applications/productivity/knowledge.rst:387 msgid "Access articles from various apps" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:384 +#: ../../content/applications/productivity/knowledge.rst:389 msgid "Knowledge articles are accessible from the :ref:`form view ` of various apps. Click the :icon:`fa-bookmark` :guilabel:`(Knowledge)` icon in the top right corner to open the command palette, then choose one of the following search methods:" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:388 +#: ../../content/applications/productivity/knowledge.rst:393 msgid ":guilabel:`Search for an article`: start typing the text to execute a semantic search that identifies relevant article information." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:390 +#: ../../content/applications/productivity/knowledge.rst:395 msgid ":guilabel:`Advanced Search`: after typing the text in the search bar, click :guilabel:`Advanced Search` to perform a parametric search with options to filter, group, or save articles." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:394 +#: ../../content/applications/productivity/knowledge.rst:399 +#: ../../content/applications/productivity/spreadsheet.rst:143 msgid "Version history" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:396 -msgid "To retrieve a previous version of an article, select it in the sidebar tree and click the :icon:`fa-history` (:guilabel:`history`) icon in the top-right menu to open the version history. Select a version and click :guilabel:`Restore history`." +#: ../../content/applications/productivity/knowledge.rst:401 +msgid "To retrieve a previous version of an article, select it in the sidebar tree and click the :icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) icon, then the :icon:`fa-history` (:guilabel:`history`) icon to open the version history. Select a version and click :guilabel:`Restore history`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:401 +#: ../../content/applications/productivity/knowledge.rst:406 msgid "In the version history, the :guilabel:`Content` tab shows the selected version, while the :guilabel:`Comparison` tab displays the differences between the article's previous and current versions." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:408 +#: ../../content/applications/productivity/knowledge.rst:413 msgid "Properties" msgstr "" -#: ../../content/applications/productivity/knowledge.rst:410 +#: ../../content/applications/productivity/knowledge.rst:415 msgid "Properties are custom fields for storing and managing information that users with `Can edit` :ref:`access rights ` can add to :ref:`nested articles ` or :ref:`article items `." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:415 +#: ../../content/applications/productivity/knowledge.rst:420 msgid "To add a property, click the :icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) icon, then :menuselection:`Add Properties --> Add a Property`, enter a :guilabel:`Label`, and select a :guilabel:`Field Type`." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:419 +#: ../../content/applications/productivity/knowledge.rst:424 msgid "To learn more about properties and field types, go to :doc:`Property fields `." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:423 +#: ../../content/applications/productivity/knowledge.rst:428 msgid "Click outside the property field window to save a property." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:424 +#: ../../content/applications/productivity/knowledge.rst:429 msgid "To remove a property, hover over its name, click the :icon:`fa-pencil` (:guilabel:`pencil`) icon, then click :menuselection:`Delete --> Delete`. Deleting a property is permanent, and deleting all properties removes the property sidebar panel." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:429 +#: ../../content/applications/productivity/knowledge.rst:434 msgid "Hover over the property name and click the :icon:`fa-pencil` (:guilabel:`pencil`) icon to edit it or the :icon:`oi-draggable` (:guilabel:`drag handle`) icon to move it above or below another property." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:432 +#: ../../content/applications/productivity/knowledge.rst:437 msgid "Tick :guilabel:`Display in Cards` to show the properties in an :ref:`article item's view ` that is visible from a parent article." msgstr "" -#: ../../content/applications/productivity/knowledge.rst:434 +#: ../../content/applications/productivity/knowledge.rst:439 msgid "Click the :icon:`fa-cogs` (:guilabel:`cogs`) icon to hide the property sidebar panel. Exiting and returning to the article causes the panel to reappear." msgstr "" @@ -7627,24 +7684,24 @@ msgstr "" msgid "The information provided on this page is for general informational purposes only and does not constitute legal advice. While Odoo Sign complies with the Electronic Signature Law of Vietnam, users should consult with legal professionals to ensure specific document types and use cases meet all legal requirements. Compliance with additional industry-specific regulations may also be necessary." msgstr "" -#: ../../content/applications/productivity/spreadsheet.rst:6 +#: ../../content/applications/productivity/spreadsheet.rst:5 msgid "Spreadsheet" msgstr "" -#: ../../content/applications/productivity/spreadsheet.rst:17 +#: ../../content/applications/productivity/spreadsheet.rst:16 msgid "**Odoo Spreadsheet** allows you to organize, manipulate, analyze, and visualize data. It offers similar functionality to other spreadsheet solutions with the added benefit of integrating directly with your Odoo database." msgstr "" -#: ../../content/applications/productivity/spreadsheet.rst:21 -msgid "With **Odoo Spreadsheet**, you can:" +#: ../../content/applications/productivity/spreadsheet.rst:20 +msgid "With Odoo Spreadsheet, you can:" msgstr "" -#: ../../content/applications/productivity/spreadsheet.rst:23 -msgid "create spreadsheets or upload existing `.xlsx` files and edit them" +#: ../../content/applications/productivity/spreadsheet.rst:22 +msgid ":ref:`create spreadsheets ` or :ref:`upload files ` and open them with Odoo Spreadsheet" msgstr "" #: ../../content/applications/productivity/spreadsheet.rst:24 -msgid "create :doc:`templates `" +msgid ":doc:`create templates `" msgstr "" #: ../../content/applications/productivity/spreadsheet.rst:25 @@ -7671,118 +7728,346 @@ msgstr "" msgid "share files internally and externally" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:3 -msgid "Dynamic pivot tables" +#: ../../content/applications/productivity/spreadsheet.rst:33 +msgid "The Spreadsheet module is part of **Odoo Documents**." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:5 -msgid "When a pivot view from an Odoo database is inserted in a spreadsheet, it is by default a static pivot table. Each cell in a static pivot table contains an :ref:`Odoo-specific function ` that retrieves data from your database." +#: ../../content/applications/productivity/spreadsheet.rst:36 +msgid "Within a spreadsheet, opening the command palette, using the :doc:`keyboard shortcut <../../applications/essentials/keyboard_shortcuts>` `Ctrl` + `K` or `Command` + `K`, allows you to browse and execute spreadsheet commands via the keyboard, without having to navigate menus." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:-1 -msgid "Function of static pivot table cell" +#: ../../content/applications/productivity/spreadsheet.rst:41 +msgid "Odoo spreadsheets serve as the foundation for the dashboards available in **Odoo Dashboards**. On a dashboard, charts and data tables are used to display dynamic Odoo data and provide an overview of key business metrics." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:12 -msgid "When the corresponding data in your database changes, e.g., the sales related to a given quarter or an individual salesperson, the cells of your static pivot table are updated." +#: ../../content/applications/productivity/spreadsheet.rst:45 +msgid "Standard, pre-configured dashboards can be customized by editing the dashboard's underlying spreadsheet via Dashboards. Custom dashboards can also be created from scratch, starting from an Odoo spreadsheet; any subsequent modifications are performed via Dashboards." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:15 -msgid "However, a static pivot table does not expand automatically to accommodate new data, e.g., sales data for a new quarter or for a newly hired salesperson. Neither is it possible to add or manipulate dimensions (i.e., columns or rows) or measures via the pivot table properties." +#: ../../content/applications/productivity/spreadsheet.rst:52 +msgid "Create a new spreadsheet" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:20 -msgid "If you attempt to update or manipulate the properties of a pivot table that has just been inserted into a spreadsheet, an error message appears in the top right corner of the screen:" +#: ../../content/applications/productivity/spreadsheet.rst:54 +msgid "To create a new spreadsheet:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:0 -#: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Error message when trying to manipulate static pivot table" +#: ../../content/applications/productivity/spreadsheet.rst:56 +msgid "Open Odoo Documents and navigate to the section or folder in which the spreadsheet should be created." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:26 -msgid "To have more flexibility in how you can manipulate your pivot table, you can :ref:`create a dynamic pivot table ` from a static pivot table." +#: ../../content/applications/productivity/spreadsheet.rst:58 +msgid "Click :guilabel:`New` and select :guilabel:`Spreadsheet`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:32 -msgid "Create a dynamic pivot table" +#: ../../content/applications/productivity/spreadsheet.rst:61 +msgid "Alternatively, from the :icon:`fa-folder-o` :guilabel:`All` folder, click :guilabel:`New` and select :guilabel:`Spreadsheet`, then select in which :guilabel:`Folder` the spreadsheet should be created." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:34 -msgid "There are two main ways to create a dynamic pivot table from a static pivot table:" +#: ../../content/applications/productivity/spreadsheet.rst:65 +msgid "Click :guilabel:`Blank spreadsheet` or, to create a new spreadsheet using an existing :doc:`template `, select the relevant template." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:36 -msgid "**Duplicate the static pivot table from the pivot table properties**: :ref:`Open the pivot table properties `, click the :icon:`fa-cog` (:guilabel:`gear`) icon at the top right of the pane, then click :icon:`fa-clone` :guilabel:`Duplicate`." +#: ../../content/applications/productivity/spreadsheet.rst:67 +msgid "Click :guilabel:`Create`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:41 -msgid "A new data source is created and a dynamic version of the pivot table is inserted into a new sheet. The dynamic pivot table has the same styling as the original pivot table." +#: ../../content/applications/productivity/spreadsheet.rst:68 +msgid "Click on `Untitled spreadsheet` at the top of the screen to edit the name of the spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:45 -msgid "When you use this method, your new dynamic pivot table gets the next available pivot ID. This means you can create multiple pivot views associated with the same model, but with distinct settings, groupings, or calculations." +#: ../../content/applications/productivity/spreadsheet.rst:71 +msgid "It is also possible to create a new spreadsheet by:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:49 -msgid "**Re-insert the dynamic pivot table from the Data menu**: On the sheet that contains your static pivot table, position your cursor in an empty cell. Click :menuselection:`Data -->` :icon:`os-insert-pivot` :menuselection:`Re-insert dynamic pivot` from the menu bar, then select the relevant pivot table." +#: ../../content/applications/productivity/spreadsheet.rst:73 +msgid "clicking :menuselection:`File -->` :icon:`os-clear-and-reload` :menuselection:`New` from the menu bar of an open spreadsheet; or" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:54 -msgid "A new, dynamic pivot table appears, with the same styling as the original pivot table." +#: ../../content/applications/productivity/spreadsheet.rst:75 +msgid ":doc:`inserting a list, pivot table, or chart from another Odoo app ` into a new spreadsheet directly from the app in question." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:57 -msgid "When you use this method, your static and dynamic pivot share the same data source, and, consequently, the same pivot ID. To avoid confusion, delete the original static pivot table." +#: ../../content/applications/productivity/spreadsheet.rst:78 +msgid "In these cases, the new spreadsheet is saved in Odoo Documents in the :icon:`fa-hdd-o` :guilabel:`My Drive` personal folder." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:61 -msgid "It is also possible to directly enter the :ref:`function ` of the dynamic pivot table in an empty cell. However, with this method, the table styling needs to be re-applied manually." +#: ../../content/applications/productivity/spreadsheet.rst:84 +msgid "Upload files" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:68 -msgid "Dynamic pivot table functions" +#: ../../content/applications/productivity/spreadsheet.rst:86 +msgid "Files in `.xlsx` or `.csv` format can be uploaded into Odoo Documents and opened with Odoo Spreadsheet. To do so:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:70 -msgid "Instead of each cell containing a unique function that retrieves data from your database, as in a :ref:`static pivot table `, a dynamic pivot table has a single function:" +#: ../../content/applications/productivity/spreadsheet.rst:89 +msgid "Open Odoo Documents and navigate to the section or folder where the spreadsheet should be saved." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:78 -#: ../../content/applications/productivity/spreadsheet/insert.rst:177 -msgid "The arguments of the function are as follows:" +#: ../../content/applications/productivity/spreadsheet.rst:90 +msgid "Click :guilabel:`New` and select :guilabel:`Upload`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:80 -#: ../../content/applications/productivity/spreadsheet/insert.rst:411 -msgid "`pivot_id`: the ID assigned when the pivot table is inserted. The first pivot table inserted in a spreadsheet is assigned pivot ID `1`, the second, pivot ID `2`, etc." +#: ../../content/applications/productivity/spreadsheet.rst:91 +msgid "Select the relevant `.xlsx` or `.csv` file and click :guilabel:`Open`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:82 -msgid "`row_count` and `column count`: the number of rows and columns respectively." +#: ../../content/applications/productivity/spreadsheet.rst:92 +msgid "Click on the uploaded file." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:83 -msgid "`include_total` and `include_column_titles`: values of `0` remove the total and column titles respectively." +#: ../../content/applications/productivity/spreadsheet.rst:93 +msgid "By default, the original file is deleted when it is opened with Odoo Spreadsheet. To preserve the original file in the same folder in Odoo Documents, disable :guilabel:`Send source file to trash`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:86 -msgid "This is an array function, which allows the pivot table to expand automatically to accommodate the results of the function." +#: ../../content/applications/productivity/spreadsheet.rst:96 +msgid "Click :guilabel:`Open with Odoo Spreadsheet`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:89 -msgid "The top-left cell contains the editable function, while clicking on any other cell reveals this formula greyed out." +#: ../../content/applications/productivity/spreadsheet.rst:98 +msgid "The file can now be fully edited in Odoo Spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:-1 -msgid "Array function of a dynamic pivot table" +#: ../../content/applications/productivity/spreadsheet.rst:103 +msgid "Manage spreadsheets" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:96 -msgid "If necessary, you can update the function of a dynamic pivot table to remove elements like the total or column titles." +#: ../../content/applications/productivity/spreadsheet.rst:105 +msgid "Users with :guilabel:`Editor` rights to a specific spreadsheet have various options for managing the spreadsheet via the :guilabel:`File` menu:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:99 +#: ../../content/applications/productivity/spreadsheet.rst:108 +msgid ":icon:`os-copy-file` :guilabel:`Make a copy`: creates a duplicate of the current spreadsheet with the same :ref:`regional settings ` (or locale)." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:110 +msgid ":icon:`os-save` :guilabel:`Save as template`: allows the current spreadsheet to be used as a :doc:`template ` for future spreadsheets." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:112 +msgid ":icon:`os-download` :guilabel:`Download`: downloads the spreadsheet in `.xlsx` format." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:115 +msgid "When you download a spreadsheet in `.xlsx` format, any spreadsheet formulas that retrieve Odoo data from your database, e.g., via an :doc:`inserted list ` or via other :doc:`Odoo-specific functions `, are converted to the values they would have returned at the moment the spreadsheet was downloaded." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:121 +msgid "Users with :guilabel:`Viewer` rights can also download a spreadsheet in `.xlsx` format." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:123 +msgid ":icon:`os-version-history` :guilabel:`See version history`: provides read-only :ref:`access to previous versions ` of the current spreadsheet, which can be named and restored if needed." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:126 +msgid ":icon:`fa-print` :guilabel:`Print`: prints a copy of the spreadsheet on a connected printer." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:127 +msgid ":icon:`os-cog` :guilabel:`Settings`: allows you to view and change the :ref:`locale ` of the current spreadsheet." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:129 +msgid ":icon:`os-add-to-dashboard` :guilabel:`Add to dashboard`: allows you to turn the current spreadsheet into a new dashboard that is accessible via Odoo Dashboards. The following fields must be completed: :guilabel:`Dashboard Name`, the :guilabel:`Dashboard Section` in which the new dashboard will be saved, and :guilabel:`Access Groups` to determine which user groups can access the dashboard." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:136 +msgid "When a spreadsheet is converted into a dashboard, the original spreadsheet is deleted from Odoo Spreadsheet. However, it is still possible to edit the dashboards's underlying spreadsheet via Odoo Dashboards." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:145 +msgid "Odoo Spreadsheet automatically saves versions of spreadsheets as changes are made, allowing users with :guilabel:`Editor` rights to browse and restore previous versions." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:148 +msgid "To access the version history of a spreadsheet, click :menuselection:`File -->` :icon:`os-version-history` :menuselection:`See version history` from the menu bar. Saved versions appear in a panel on the right of the spreadsheet. The name of the user who made the change is shown, as well as the date and time of the change." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:153 +msgid "The following actions are possible:" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:155 +msgid "**View an earlier version** in read-only format by clicking on the relevant version." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:156 +msgid "**Restore an earlier version** by clicking :icon:`fa-ellipsis-v` :guilabel:`(vertical ellipsis)` then :guilabel:`Restore this version`." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:158 +msgid "**Copy an earlier version** by clicking :icon:`fa-ellipsis-v` :guilabel:`(vertical ellipsis)` then :menuselection:`Make a copy`. A copy of the version opens as a new spreadsheet." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:160 +msgid "**Create named versions** by clicking on the date and time of the relevant version and entering the desired name. The date and time of the version are then displayed below the new name." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:164 +msgid "When viewing an earlier, read-only version of a spreadsheet, the following actions are still possible:" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:167 +msgid "Search the spreadsheet by clicking :menuselection:`Edit -->` :icon:`fa-search` :menuselection:`Find and replace` or using the shortcut `Ctrl` + `H`." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:169 +msgid "Copy an individual cell or selected area by clicking :menuselection:`Edit -->` :icon:`fa-clipboard` :menuselection:`Copy` or using the shortcut `Ctrl` + `C`." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:175 +msgid "Regional settings" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:177 +msgid "To ensure data is displayed consistently for all users, the regional settings (or locale) of a spreadsheet, are managed at spreadsheet level. This locale affects the following settings and formats:" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:181 +msgid "thousand and decimal separators" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:182 +msgid "date and time formats" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:183 +msgid "first day of the week" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:185 +msgid "By default, a new spreadsheet inherits the regional settings of the user who created it. For example, any spreadsheets created by a user whose language is set to :guilabel:`French (BE) / Français (BE)` will follow Belgian French conventions." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:189 +msgid "A spreadsheet's locale can be viewed and changed at any time by a user with :guilabel:`Editor` rights. To view the locale of a spreadsheet, click :menuselection:`File -->` :icon:`os-cog` :menuselection:`Settings` from the menu bar. The :guilabel:`Spreadsheet settings` panel opens on the right of the spreadsheet. To change the locale, select the appropriate locale from the dropdown." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:195 +msgid "When you open a spreadsheet that has a different locale to that of your user profile, a blue :icon:`fa-globe` :guilabel:`(globe)` icon appears at the top right of the spreadsheet. Hovering over the icon reveals a warning message that indicates the spreadsheet locale and highlights formats that differ." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:-1 +msgid "Warning about difference between user and spreadsheet locale" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet.rst:203 +msgid "If no :icon:`fa-globe` :guilabel:`(globe)` icon is shown, this means the spreadsheet's locale is the same as that of your user profile." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:3 +msgid "Dynamic pivot tables" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:5 +msgid "When a pivot view from an Odoo database is inserted in a spreadsheet, it is by default a static pivot table. Each cell in a static pivot table contains an :ref:`Odoo-specific function ` that retrieves data from your database." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:-1 +msgid "Function of static pivot table cell" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:12 +msgid "When the corresponding data in your database changes, e.g., the sales related to a given quarter or an individual salesperson, the cells of your static pivot table are updated." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:15 +msgid "However, a static pivot table does not expand automatically to accommodate new data, e.g., sales data for a new quarter or for a newly hired salesperson. Neither is it possible to add or manipulate dimensions (i.e., columns or rows) or measures via the pivot table properties." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:20 +msgid "If you attempt to update or manipulate the properties of a pivot table that has just been inserted into a spreadsheet, an error message appears in the top right corner of the screen:" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:0 +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Error message when trying to manipulate static pivot table" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:26 +msgid "To have more flexibility in how you can manipulate your pivot table, you can :ref:`create a dynamic pivot table ` from a static pivot table." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:32 +msgid "Create a dynamic pivot table" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:34 +msgid "There are two main ways to create a dynamic pivot table from a static pivot table:" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:36 +msgid "**Duplicate the static pivot table from the pivot table properties**: :ref:`Open the pivot table properties `, click the :icon:`fa-cog` (:guilabel:`gear`) icon at the top right of the pane, then click :icon:`fa-clone` :guilabel:`Duplicate`." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:41 +msgid "A new data source is created and a dynamic version of the pivot table is inserted into a new sheet. The dynamic pivot table has the same styling as the original pivot table." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:45 +msgid "When you use this method, your new dynamic pivot table gets the next available pivot ID. This means you can create multiple pivot views associated with the same model, but with distinct settings, groupings, or calculations." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:49 +msgid "**Re-insert the dynamic pivot table from the Data menu**: On the sheet that contains your static pivot table, position your cursor in an empty cell. Click :menuselection:`Data -->` :icon:`os-insert-pivot` :menuselection:`Re-insert dynamic pivot` from the menu bar, then select the relevant pivot table." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:54 +msgid "A new, dynamic pivot table appears, with the same styling as the original pivot table." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:57 +msgid "When you use this method, your static and dynamic pivot share the same data source, and, consequently, the same pivot ID. To avoid confusion, delete the original static pivot table." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:61 +msgid "It is also possible to directly enter the :ref:`function ` of the dynamic pivot table in an empty cell. However, with this method, the table styling needs to be re-applied manually." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:68 +msgid "Dynamic pivot table functions" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:70 +msgid "Instead of each cell containing a unique function that retrieves data from your database, as in a :ref:`static pivot table `, a dynamic pivot table has a single function:" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:78 +#: ../../content/applications/productivity/spreadsheet/insert.rst:194 +msgid "The arguments of the function are as follows:" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:80 +#: ../../content/applications/productivity/spreadsheet/insert.rst:423 +msgid "`pivot_id`: the ID assigned when the pivot table is inserted. The first pivot table inserted in a spreadsheet is assigned pivot ID `1`, the second, pivot ID `2`, etc." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:82 +msgid "`row_count` and `column count`: the number of rows and columns respectively." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:83 +msgid "`include_total` and `include_column_titles`: values of `0` remove the total and column titles respectively." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:86 +msgid "This is an array function, which allows the pivot table to expand automatically to accommodate the results of the function." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:89 +msgid "The top-left cell contains the editable function, while clicking on any other cell reveals this formula greyed out." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:-1 +msgid "Array function of a dynamic pivot table" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:96 +msgid "If necessary, you can update the function of a dynamic pivot table to remove elements like the total or column titles." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:99 msgid "With the function open in the formula bar or the top-left cell of the pivot table, position your cursor after the pivot ID then type `,` to advance to the optional field you want to modify. In the example below, adding the value `0` for `[include_total]` removes both the row total and column total from the pivot table." msgstr "" @@ -7895,35 +8180,39 @@ msgstr "" msgid "choose how measures are aggregated, e.g., by :guilabel:`Sum`, :guilabel:`Average`, :guilabel:`Minimum`" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:188 +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:186 +msgid "To sort the values of a dynamic pivot table by measure for a specific dimension, right-click any pivot table value, then click :icon:`os-sort-range` :guilabel:`Sort pivot` and select :guilabel:`Ascending` or :guilabel:`Descending` from the dropdown. To return to the default order, follow the same steps then select :guilabel:`No sorting` from the dropdown." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:194 msgid "Calculated measures" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:190 +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:196 msgid "It is possible to add calculated measures if the desired measure did not exist in the original pivot view. For example, a calculated measure could be added to show the average revenue per order or the profit margin per product." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:194 +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:200 msgid "To add a calculated measure:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:196 +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:202 msgid "From the :guilabel:`Measures` section of the pivot table properties, click :guilabel:`Add`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:197 +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:203 msgid "Below the scrollable list, click :icon:`os-formula` :guilabel:`Add calculated measure`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:198 +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:204 msgid "Rename the calculated measure by clicking on the name and typing." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:199 +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:205 msgid "Click on the line starting with `=` and enter the formula." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:202 +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:208 msgid "In the below example, the average revenue per order is added by dividing the sum of the sales by the number of orders." msgstr "" @@ -7931,11 +8220,11 @@ msgstr "" msgid "Formula for a calculated measure" msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:208 +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:214 msgid "Choose how the measure should be aggregated by selecting a value from the dropdown." msgstr "" -#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:211 +#: ../../content/applications/productivity/spreadsheet/dynamic_pivot_tables.rst:217 msgid "There are advantages to using a static pivot table, for example, being able to see the functions behind individual cells. To have this possibility, select the relevant portion of your dynamic pivot table, copy it, then paste it into an empty part of the sheet. Click on any pasted cell to see the :ref:`Odoo function ` used to retrieve the data." msgstr "" @@ -8016,7 +8305,7 @@ msgid "Formulas containing functions that are not compatible with Excel are repl msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:33 -#: ../../content/applications/productivity/spreadsheet/functions.rst:840 +#: ../../content/applications/productivity/spreadsheet/functions.rst:842 msgid "Array" msgstr "" @@ -8028,22 +8317,22 @@ msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:237 #: ../../content/applications/productivity/spreadsheet/functions.rst:361 #: ../../content/applications/productivity/spreadsheet/functions.rst:393 -#: ../../content/applications/productivity/spreadsheet/functions.rst:425 -#: ../../content/applications/productivity/spreadsheet/functions.rst:469 -#: ../../content/applications/productivity/spreadsheet/functions.rst:597 -#: ../../content/applications/productivity/spreadsheet/functions.rst:639 -#: ../../content/applications/productivity/spreadsheet/functions.rst:653 -#: ../../content/applications/productivity/spreadsheet/functions.rst:773 -#: ../../content/applications/productivity/spreadsheet/functions.rst:827 -#: ../../content/applications/productivity/spreadsheet/functions.rst:846 -#: ../../content/applications/productivity/spreadsheet/functions.rst:860 -#: ../../content/applications/productivity/spreadsheet/functions.rst:886 -#: ../../content/applications/productivity/spreadsheet/functions.rst:914 -#: ../../content/applications/productivity/spreadsheet/functions.rst:930 -#: ../../content/applications/productivity/spreadsheet/functions.rst:944 -#: ../../content/applications/productivity/spreadsheet/functions.rst:960 -#: ../../content/applications/productivity/spreadsheet/functions.rst:998 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1022 +#: ../../content/applications/productivity/spreadsheet/functions.rst:427 +#: ../../content/applications/productivity/spreadsheet/functions.rst:471 +#: ../../content/applications/productivity/spreadsheet/functions.rst:599 +#: ../../content/applications/productivity/spreadsheet/functions.rst:641 +#: ../../content/applications/productivity/spreadsheet/functions.rst:655 +#: ../../content/applications/productivity/spreadsheet/functions.rst:775 +#: ../../content/applications/productivity/spreadsheet/functions.rst:829 +#: ../../content/applications/productivity/spreadsheet/functions.rst:848 +#: ../../content/applications/productivity/spreadsheet/functions.rst:862 +#: ../../content/applications/productivity/spreadsheet/functions.rst:888 +#: ../../content/applications/productivity/spreadsheet/functions.rst:916 +#: ../../content/applications/productivity/spreadsheet/functions.rst:932 +#: ../../content/applications/productivity/spreadsheet/functions.rst:946 +#: ../../content/applications/productivity/spreadsheet/functions.rst:962 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1000 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1024 msgid "Name and arguments" msgstr "" @@ -8055,32 +8344,32 @@ msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:238 #: ../../content/applications/productivity/spreadsheet/functions.rst:362 #: ../../content/applications/productivity/spreadsheet/functions.rst:394 -#: ../../content/applications/productivity/spreadsheet/functions.rst:426 -#: ../../content/applications/productivity/spreadsheet/functions.rst:470 -#: ../../content/applications/productivity/spreadsheet/functions.rst:598 -#: ../../content/applications/productivity/spreadsheet/functions.rst:640 -#: ../../content/applications/productivity/spreadsheet/functions.rst:654 -#: ../../content/applications/productivity/spreadsheet/functions.rst:774 -#: ../../content/applications/productivity/spreadsheet/functions.rst:828 -#: ../../content/applications/productivity/spreadsheet/functions.rst:847 -#: ../../content/applications/productivity/spreadsheet/functions.rst:861 -#: ../../content/applications/productivity/spreadsheet/functions.rst:887 -#: ../../content/applications/productivity/spreadsheet/functions.rst:915 -#: ../../content/applications/productivity/spreadsheet/functions.rst:931 -#: ../../content/applications/productivity/spreadsheet/functions.rst:945 -#: ../../content/applications/productivity/spreadsheet/functions.rst:961 -#: ../../content/applications/productivity/spreadsheet/functions.rst:999 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1023 +#: ../../content/applications/productivity/spreadsheet/functions.rst:428 +#: ../../content/applications/productivity/spreadsheet/functions.rst:472 +#: ../../content/applications/productivity/spreadsheet/functions.rst:600 +#: ../../content/applications/productivity/spreadsheet/functions.rst:642 +#: ../../content/applications/productivity/spreadsheet/functions.rst:656 +#: ../../content/applications/productivity/spreadsheet/functions.rst:776 +#: ../../content/applications/productivity/spreadsheet/functions.rst:830 +#: ../../content/applications/productivity/spreadsheet/functions.rst:849 +#: ../../content/applications/productivity/spreadsheet/functions.rst:863 +#: ../../content/applications/productivity/spreadsheet/functions.rst:889 +#: ../../content/applications/productivity/spreadsheet/functions.rst:917 +#: ../../content/applications/productivity/spreadsheet/functions.rst:933 +#: ../../content/applications/productivity/spreadsheet/functions.rst:947 +#: ../../content/applications/productivity/spreadsheet/functions.rst:963 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1001 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1025 msgid "Description or link" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:41 -#: ../../content/applications/productivity/spreadsheet/functions.rst:848 +#: ../../content/applications/productivity/spreadsheet/functions.rst:850 msgid "ARRAY.CONSTRAIN(input_range, rows, columns)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:42 -#: ../../content/applications/productivity/spreadsheet/functions.rst:849 +#: ../../content/applications/productivity/spreadsheet/functions.rst:851 msgid "Returns a result array constrained to a specific width and height (not compatible with Excel)" msgstr "" @@ -8109,12 +8398,12 @@ msgid "`Excel EXPAND article `_" +msgid "`Excel SORT article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:225 @@ -8665,7 +8954,7 @@ msgid "`Excel UNIQUE article `_" +msgid "`Excel SWITCH article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:413 -msgid "XOR(logical_expression1, [logical_expression2, ...])" +msgid "TRUE()" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:414 -msgid "`Excel XOR article `_" +msgid "`Excel TRUE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:419 -#: ../../content/applications/productivity/spreadsheet/functions.rst:908 -msgid "Lookup" +#: ../../content/applications/productivity/spreadsheet/functions.rst:415 +msgid "XOR(logical_expression1, [logical_expression2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:427 -msgid "ADDRESS(row, column, [absolute_relative_mode], [use_a1_notation], [sheet])" +#: ../../content/applications/productivity/spreadsheet/functions.rst:416 +msgid "`Excel XOR article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:428 -msgid "`Excel ADDRESS article `_" +#: ../../content/applications/productivity/spreadsheet/functions.rst:421 +#: ../../content/applications/productivity/spreadsheet/functions.rst:910 +msgid "Lookup" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:429 -msgid "COLUMN([cell_reference])" +msgid "ADDRESS(row, column, [absolute_relative_mode], [use_a1_notation], [sheet])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:430 -msgid "`Excel COLUMN article `_" +msgid "`Excel ADDRESS article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:431 -msgid "COLUMNS(range)" +msgid "COLUMN([cell_reference])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:432 -msgid "`Excel COLUMNS article `_" +msgid "`Excel COLUMN article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:433 -msgid "HLOOKUP(search_key, range, index, [is_sorted])" +msgid "COLUMNS(range)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:434 -msgid "`Excel HLOOKUP article `_" +msgid "`Excel COLUMNS article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:435 -msgid "INDEX(reference, row, column)" +msgid "HLOOKUP(search_key, range, index, [is_sorted])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:436 -msgid "`Excel INDEX article `_" +msgid "`Excel HLOOKUP article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:437 -msgid "INDIRECT(reference, [use_a1_notation])" +msgid "INDEX(reference, row, column)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:438 -msgid "`Excel INDIRECT article `_" +msgid "`Excel INDEX article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:439 -msgid "LOOKUP(search_key, search_array, [result_range])" +msgid "INDIRECT(reference, [use_a1_notation])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:440 -msgid "`Excel LOOKUP article `_" +msgid "`Excel INDIRECT article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:441 -msgid "MATCH(search_key, range, [search_type])" +msgid "LOOKUP(search_key, search_array, [result_range])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:442 -msgid "`Excel MATCH article `_" +msgid "`Excel LOOKUP article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:443 -msgid "OFFSET(reference, rows, cols, [height], [width])" +msgid "MATCH(search_key, range, [search_type])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:444 -msgid "`Excel OFFSET article `_" +msgid "`Excel MATCH article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:445 -#: ../../content/applications/productivity/spreadsheet/functions.rst:916 -msgid "PIVOT(pivot_id, [row_count], [include_total], [include_column_titles], [column_count])" +msgid "OFFSET(reference, rows, cols, [height], [width])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:446 -#: ../../content/applications/productivity/spreadsheet/functions.rst:917 -msgid "Get a pivot table (not compatible with Excel)" +msgid "`Excel OFFSET article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:447 #: ../../content/applications/productivity/spreadsheet/functions.rst:918 -msgid "PIVOT.HEADER(pivot_id, [domain_field_name, ...], [domain_value, ...])" +msgid "PIVOT(pivot_id, [row_count], [include_total], [include_column_titles], [column_count])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:448 #: ../../content/applications/productivity/spreadsheet/functions.rst:919 -msgid "Get the header of a pivot table (not compatible with Excel)" +msgid "Get a pivot table (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:449 #: ../../content/applications/productivity/spreadsheet/functions.rst:920 -msgid "PIVOT.VALUE(pivot_id, measure_name, [domain_field_name, ...], [domain_value, ...])" +msgid "PIVOT.HEADER(pivot_id, [domain_field_name, ...], [domain_value, ...])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:450 #: ../../content/applications/productivity/spreadsheet/functions.rst:921 -msgid "Get the value from a pivot table (not compatible with Excel)" +msgid "Get the header of a pivot table (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:451 -msgid "ROW([cell_reference])" +#: ../../content/applications/productivity/spreadsheet/functions.rst:922 +msgid "PIVOT.VALUE(pivot_id, measure_name, [domain_field_name, ...], [domain_value, ...])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:452 -msgid "`Excel ROW article `_" +#: ../../content/applications/productivity/spreadsheet/functions.rst:923 +msgid "Get the value from a pivot table (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:453 -msgid "ROWS(range)" +msgid "ROW([cell_reference])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:454 -msgid "`Excel ROWS article `_" +msgid "`Excel ROW article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:455 -msgid "VLOOKUP(search_key, range, index, [is_sorted])" +msgid "ROWS(range)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:456 -msgid "`Excel VLOOKUP article `_" +msgid "`Excel ROWS article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:457 -msgid "XLOOKUP(search_key, lookup_range, return_range, [if_not_found], [match_mode], [search_mode])" +msgid "VLOOKUP(search_key, range, index, [is_sorted])" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:458 +msgid "`Excel VLOOKUP article `_" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/functions.rst:459 +msgid "XLOOKUP(search_key, lookup_range, return_range, [if_not_found], [match_mode], [search_mode])" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/functions.rst:460 msgid "`Excel XLOOKUP article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:463 -#: ../../content/applications/productivity/spreadsheet/functions.rst:924 +#: ../../content/applications/productivity/spreadsheet/functions.rst:465 +#: ../../content/applications/productivity/spreadsheet/functions.rst:926 msgid "Math" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:471 +#: ../../content/applications/productivity/spreadsheet/functions.rst:473 msgid "ABS(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:472 +#: ../../content/applications/productivity/spreadsheet/functions.rst:474 msgid "`Excel ABS article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:473 +#: ../../content/applications/productivity/spreadsheet/functions.rst:475 msgid "ACOS(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:474 +#: ../../content/applications/productivity/spreadsheet/functions.rst:476 msgid "`Excel ACOS article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:475 +#: ../../content/applications/productivity/spreadsheet/functions.rst:477 msgid "ACOSH(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:476 +#: ../../content/applications/productivity/spreadsheet/functions.rst:478 msgid "`Excel ACOSH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:477 +#: ../../content/applications/productivity/spreadsheet/functions.rst:479 msgid "ACOT(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:478 +#: ../../content/applications/productivity/spreadsheet/functions.rst:480 msgid "`Excel ACOT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:479 +#: ../../content/applications/productivity/spreadsheet/functions.rst:481 msgid "ACOTH(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:480 +#: ../../content/applications/productivity/spreadsheet/functions.rst:482 msgid "`Excel ACOTH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:481 +#: ../../content/applications/productivity/spreadsheet/functions.rst:483 msgid "ASIN(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:482 +#: ../../content/applications/productivity/spreadsheet/functions.rst:484 msgid "`Excel ASIN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:483 +#: ../../content/applications/productivity/spreadsheet/functions.rst:485 msgid "ASINH(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:484 +#: ../../content/applications/productivity/spreadsheet/functions.rst:486 msgid "`Excel ASINH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:485 +#: ../../content/applications/productivity/spreadsheet/functions.rst:487 msgid "ATAN(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:486 +#: ../../content/applications/productivity/spreadsheet/functions.rst:488 msgid "`Excel ATAN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:487 +#: ../../content/applications/productivity/spreadsheet/functions.rst:489 msgid "ATAN2(x, y)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:488 +#: ../../content/applications/productivity/spreadsheet/functions.rst:490 msgid "`Excel ATAN2 article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:489 +#: ../../content/applications/productivity/spreadsheet/functions.rst:491 msgid "ATANH(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:490 +#: ../../content/applications/productivity/spreadsheet/functions.rst:492 msgid "`Excel ATANH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:491 +#: ../../content/applications/productivity/spreadsheet/functions.rst:493 msgid "CEILING(value, [factor])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:492 +#: ../../content/applications/productivity/spreadsheet/functions.rst:494 msgid "`Excel CEILING article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:493 +#: ../../content/applications/productivity/spreadsheet/functions.rst:495 msgid "CEILING.MATH(number, [significance], [mode])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:494 +#: ../../content/applications/productivity/spreadsheet/functions.rst:496 msgid "`Excel CEILING.MATH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:495 +#: ../../content/applications/productivity/spreadsheet/functions.rst:497 msgid "CEILING.PRECISE(number, [significance])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:496 +#: ../../content/applications/productivity/spreadsheet/functions.rst:498 msgid "`Excel CEILING.PRECISE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:497 +#: ../../content/applications/productivity/spreadsheet/functions.rst:499 msgid "COS(angle)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:498 +#: ../../content/applications/productivity/spreadsheet/functions.rst:500 msgid "`Excel COS article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:499 +#: ../../content/applications/productivity/spreadsheet/functions.rst:501 msgid "COSH(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:500 +#: ../../content/applications/productivity/spreadsheet/functions.rst:502 msgid "`Excel COSH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:501 +#: ../../content/applications/productivity/spreadsheet/functions.rst:503 msgid "COT(angle)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:502 +#: ../../content/applications/productivity/spreadsheet/functions.rst:504 msgid "`Excel COT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:503 +#: ../../content/applications/productivity/spreadsheet/functions.rst:505 msgid "COTH(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:504 +#: ../../content/applications/productivity/spreadsheet/functions.rst:506 msgid "`Excel COTH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:505 +#: ../../content/applications/productivity/spreadsheet/functions.rst:507 msgid "COUNTBLANK(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:506 +#: ../../content/applications/productivity/spreadsheet/functions.rst:508 msgid "`Excel COUNTBLANK article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:507 +#: ../../content/applications/productivity/spreadsheet/functions.rst:509 msgid "COUNTIF(range, criterion)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:508 +#: ../../content/applications/productivity/spreadsheet/functions.rst:510 msgid "`Excel COUNTIF article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:509 +#: ../../content/applications/productivity/spreadsheet/functions.rst:511 msgid "COUNTIFS(criteria_range1, criterion1, [criteria_range2, ...], [criterion2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:510 +#: ../../content/applications/productivity/spreadsheet/functions.rst:512 msgid "`Excel COUNTIFS article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:511 +#: ../../content/applications/productivity/spreadsheet/functions.rst:513 msgid "CSC(angle)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:512 +#: ../../content/applications/productivity/spreadsheet/functions.rst:514 msgid "`Excel CSC article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:513 +#: ../../content/applications/productivity/spreadsheet/functions.rst:515 msgid "CSCH(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:514 +#: ../../content/applications/productivity/spreadsheet/functions.rst:516 msgid "`Excel CSCH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:515 +#: ../../content/applications/productivity/spreadsheet/functions.rst:517 msgid "DECIMAL(value, base)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:516 +#: ../../content/applications/productivity/spreadsheet/functions.rst:518 msgid "`Excel DECIMAL article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:517 +#: ../../content/applications/productivity/spreadsheet/functions.rst:519 msgid "DEGREES(angle)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:518 +#: ../../content/applications/productivity/spreadsheet/functions.rst:520 msgid "`Excel DEGREES article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:519 +#: ../../content/applications/productivity/spreadsheet/functions.rst:521 msgid "EXP(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:520 +#: ../../content/applications/productivity/spreadsheet/functions.rst:522 msgid "`Excel EXP article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:521 +#: ../../content/applications/productivity/spreadsheet/functions.rst:523 msgid "FLOOR(value, [factor])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:522 +#: ../../content/applications/productivity/spreadsheet/functions.rst:524 msgid "`Excel FLOOR article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:523 +#: ../../content/applications/productivity/spreadsheet/functions.rst:525 msgid "FLOOR.MATH(number, [significance], [mode])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:524 +#: ../../content/applications/productivity/spreadsheet/functions.rst:526 msgid "`Excel FLOOR.MATH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:525 +#: ../../content/applications/productivity/spreadsheet/functions.rst:527 msgid "FLOOR.PRECISE(number, [significance])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:526 +#: ../../content/applications/productivity/spreadsheet/functions.rst:528 msgid "`Excel FLOOR.PRECISE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:527 +#: ../../content/applications/productivity/spreadsheet/functions.rst:529 msgid "INT(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:528 +#: ../../content/applications/productivity/spreadsheet/functions.rst:530 msgid "`Excel INT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:529 +#: ../../content/applications/productivity/spreadsheet/functions.rst:531 msgid "ISEVEN(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:530 +#: ../../content/applications/productivity/spreadsheet/functions.rst:532 msgid "`Excel ISEVEN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:531 +#: ../../content/applications/productivity/spreadsheet/functions.rst:533 msgid "ISO.CEILING(number, [significance])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:532 +#: ../../content/applications/productivity/spreadsheet/functions.rst:534 msgid "`Excel ISO.CEILING article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:533 +#: ../../content/applications/productivity/spreadsheet/functions.rst:535 msgid "ISODD(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:534 +#: ../../content/applications/productivity/spreadsheet/functions.rst:536 msgid "`Excel ISODD article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:535 +#: ../../content/applications/productivity/spreadsheet/functions.rst:537 msgid "LN(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:536 +#: ../../content/applications/productivity/spreadsheet/functions.rst:538 msgid "`Excel LN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:537 +#: ../../content/applications/productivity/spreadsheet/functions.rst:539 msgid "LOG(value, [base])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:538 +#: ../../content/applications/productivity/spreadsheet/functions.rst:540 msgid "Get the logarithm of a number for a given base (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:539 +#: ../../content/applications/productivity/spreadsheet/functions.rst:541 msgid "MOD(dividend, divisor)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:540 +#: ../../content/applications/productivity/spreadsheet/functions.rst:542 msgid "`Excel MOD article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:541 +#: ../../content/applications/productivity/spreadsheet/functions.rst:543 msgid "MUNIT(dimension)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:542 +#: ../../content/applications/productivity/spreadsheet/functions.rst:544 msgid "`Excel MUNIT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:543 +#: ../../content/applications/productivity/spreadsheet/functions.rst:545 msgid "ODD(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:544 +#: ../../content/applications/productivity/spreadsheet/functions.rst:546 msgid "`Excel ODD article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:545 +#: ../../content/applications/productivity/spreadsheet/functions.rst:547 msgid "PI()" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:546 +#: ../../content/applications/productivity/spreadsheet/functions.rst:548 msgid "`Excel PI article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:547 +#: ../../content/applications/productivity/spreadsheet/functions.rst:549 msgid "POWER(base, exponent)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:548 +#: ../../content/applications/productivity/spreadsheet/functions.rst:550 msgid "`Excel POWER article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:549 +#: ../../content/applications/productivity/spreadsheet/functions.rst:551 msgid "PRODUCT(factor1, [factor2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:550 +#: ../../content/applications/productivity/spreadsheet/functions.rst:552 msgid "`Excel PRODUCT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:551 +#: ../../content/applications/productivity/spreadsheet/functions.rst:553 msgid "RAND()" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:552 +#: ../../content/applications/productivity/spreadsheet/functions.rst:554 msgid "`Excel RAND article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:553 +#: ../../content/applications/productivity/spreadsheet/functions.rst:555 msgid "RANDARRAY([rows], [columns], [min], [max], [whole_number])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:554 +#: ../../content/applications/productivity/spreadsheet/functions.rst:556 msgid "`Excel RANDARRAY article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:555 +#: ../../content/applications/productivity/spreadsheet/functions.rst:557 msgid "RANDBETWEEN(low, high)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:556 +#: ../../content/applications/productivity/spreadsheet/functions.rst:558 msgid "`Excel RANDBETWEEN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:557 +#: ../../content/applications/productivity/spreadsheet/functions.rst:559 msgid "ROUND(value, [places])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:558 +#: ../../content/applications/productivity/spreadsheet/functions.rst:560 msgid "`Excel ROUND article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:559 +#: ../../content/applications/productivity/spreadsheet/functions.rst:561 msgid "ROUNDDOWN(value, [places])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:560 +#: ../../content/applications/productivity/spreadsheet/functions.rst:562 msgid "`Excel ROUNDDOWN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:561 +#: ../../content/applications/productivity/spreadsheet/functions.rst:563 msgid "ROUNDUP(value, [places])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:562 +#: ../../content/applications/productivity/spreadsheet/functions.rst:564 msgid "`Excel ROUNDUP article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:563 +#: ../../content/applications/productivity/spreadsheet/functions.rst:565 msgid "SEC(angle)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:564 +#: ../../content/applications/productivity/spreadsheet/functions.rst:566 msgid "`Excel SEC article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:565 +#: ../../content/applications/productivity/spreadsheet/functions.rst:567 msgid "SECH(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:566 +#: ../../content/applications/productivity/spreadsheet/functions.rst:568 msgid "`Excel SECH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:567 +#: ../../content/applications/productivity/spreadsheet/functions.rst:569 msgid "SEQUENCE(rows, [columns], [start], ][step])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:568 -msgid "`Excel SEQUENCE article `_" +#: ../../content/applications/productivity/spreadsheet/functions.rst:570 +msgid "`Excel SEQUENCE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:569 +#: ../../content/applications/productivity/spreadsheet/functions.rst:571 msgid "SIN(angle)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:570 +#: ../../content/applications/productivity/spreadsheet/functions.rst:572 msgid "`Excel SIN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:571 +#: ../../content/applications/productivity/spreadsheet/functions.rst:573 msgid "SINH(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:572 +#: ../../content/applications/productivity/spreadsheet/functions.rst:574 msgid "`Excel SINH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:573 +#: ../../content/applications/productivity/spreadsheet/functions.rst:575 msgid "SQRT(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:574 +#: ../../content/applications/productivity/spreadsheet/functions.rst:576 msgid "`Excel SQRT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:575 +#: ../../content/applications/productivity/spreadsheet/functions.rst:577 msgid "SUM(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:576 +#: ../../content/applications/productivity/spreadsheet/functions.rst:578 msgid "`Excel SUM article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:577 +#: ../../content/applications/productivity/spreadsheet/functions.rst:579 msgid "SUMIF(criteria_range, criterion, [sum_range])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:578 +#: ../../content/applications/productivity/spreadsheet/functions.rst:580 msgid "`Excel SUMIF article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:579 +#: ../../content/applications/productivity/spreadsheet/functions.rst:581 msgid "SUMIFS(sum_range, criteria_range1, criterion1, [criteria_range2, ...], [criterion2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:580 +#: ../../content/applications/productivity/spreadsheet/functions.rst:582 msgid "`Excel SUMIFS article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:581 +#: ../../content/applications/productivity/spreadsheet/functions.rst:583 msgid "TAN(angle)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:582 +#: ../../content/applications/productivity/spreadsheet/functions.rst:584 msgid "`Excel TAN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:583 +#: ../../content/applications/productivity/spreadsheet/functions.rst:585 msgid "TANH(value)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:584 +#: ../../content/applications/productivity/spreadsheet/functions.rst:586 msgid "`Excel TANH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:585 +#: ../../content/applications/productivity/spreadsheet/functions.rst:587 msgid "TRUNC(value, [places])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:586 +#: ../../content/applications/productivity/spreadsheet/functions.rst:588 msgid "`Excel TRUNC article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:591 -#: ../../content/applications/productivity/spreadsheet/functions.rst:954 +#: ../../content/applications/productivity/spreadsheet/functions.rst:593 +#: ../../content/applications/productivity/spreadsheet/functions.rst:956 msgid "Operators" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:599 -#: ../../content/applications/productivity/spreadsheet/functions.rst:962 -msgid "ADD(value1, value2)" -msgstr "" - -#: ../../content/applications/productivity/spreadsheet/functions.rst:600 -#: ../../content/applications/productivity/spreadsheet/functions.rst:963 -msgid "Sum of two numbers (not compatible with Excel)" -msgstr "" - #: ../../content/applications/productivity/spreadsheet/functions.rst:601 -msgid "CONCAT(value1, value2)" +#: ../../content/applications/productivity/spreadsheet/functions.rst:964 +msgid "ADD(value1, value2)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:602 -msgid "`Excel CONCAT article `_" +#: ../../content/applications/productivity/spreadsheet/functions.rst:965 +msgid "Sum of two numbers (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:603 -#: ../../content/applications/productivity/spreadsheet/functions.rst:964 -msgid "DIVIDE(dividend, divisor)" +msgid "CONCAT(value1, value2)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:604 -#: ../../content/applications/productivity/spreadsheet/functions.rst:965 -msgid "One number divided by another (not compatible with Excel)" +msgid "`Excel CONCAT article `_" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:605 #: ../../content/applications/productivity/spreadsheet/functions.rst:966 -msgid "EQ(value1, value2)" +msgid "DIVIDE(dividend, divisor)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:606 #: ../../content/applications/productivity/spreadsheet/functions.rst:967 -msgid "Equal (not compatible with Excel)" +msgid "One number divided by another (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:607 #: ../../content/applications/productivity/spreadsheet/functions.rst:968 -msgid "GT(value1, value2)" +msgid "EQ(value1, value2)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:608 #: ../../content/applications/productivity/spreadsheet/functions.rst:969 -msgid "Strictly greater than (not compatible with Excel)" +msgid "Equal (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:609 #: ../../content/applications/productivity/spreadsheet/functions.rst:970 -msgid "GTE(value1, value2)" +msgid "GT(value1, value2)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:610 #: ../../content/applications/productivity/spreadsheet/functions.rst:971 -msgid "Greater than or equal to (not compatible with Excel)" +msgid "Strictly greater than (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:611 #: ../../content/applications/productivity/spreadsheet/functions.rst:972 -msgid "LT(value1, value2)" +msgid "GTE(value1, value2)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:612 #: ../../content/applications/productivity/spreadsheet/functions.rst:973 -msgid "Less than (not compatible with Excel)" +msgid "Greater than or equal to (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:613 #: ../../content/applications/productivity/spreadsheet/functions.rst:974 -msgid "LTE(value1, value2)" +msgid "LT(value1, value2)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:614 #: ../../content/applications/productivity/spreadsheet/functions.rst:975 -msgid "Less than or equal to (not compatible with Excel)" +msgid "Less than (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:615 #: ../../content/applications/productivity/spreadsheet/functions.rst:976 -msgid "MINUS(value1, value2)" +msgid "LTE(value1, value2)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:616 #: ../../content/applications/productivity/spreadsheet/functions.rst:977 -msgid "Difference of two numbers (not compatible with Excel)" +msgid "Less than or equal to (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:617 #: ../../content/applications/productivity/spreadsheet/functions.rst:978 -msgid "MULTIPLY(factor1, factor2)" +msgid "MINUS(value1, value2)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:618 #: ../../content/applications/productivity/spreadsheet/functions.rst:979 -msgid "Product of two numbers (not compatible with Excel)" +msgid "Difference of two numbers (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:619 #: ../../content/applications/productivity/spreadsheet/functions.rst:980 -msgid "NE(value1, value2)" +msgid "MULTIPLY(factor1, factor2)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:620 #: ../../content/applications/productivity/spreadsheet/functions.rst:981 -msgid "Not equal (not compatible with Excel)" +msgid "Product of two numbers (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:621 #: ../../content/applications/productivity/spreadsheet/functions.rst:982 -msgid "POW(base, exponent)" +msgid "NE(value1, value2)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:622 #: ../../content/applications/productivity/spreadsheet/functions.rst:983 -msgid "A number raised to a power (not compatible with Excel)" +msgid "Not equal (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:623 #: ../../content/applications/productivity/spreadsheet/functions.rst:984 -msgid "UMINUS(value)" +msgid "POW(base, exponent)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:624 #: ../../content/applications/productivity/spreadsheet/functions.rst:985 -msgid "A number with the sign reversed (not compatible with Excel)" +msgid "A number raised to a power (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:625 #: ../../content/applications/productivity/spreadsheet/functions.rst:986 -msgid "UNARY.PERCENT(percentage)" +msgid "UMINUS(value)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:626 #: ../../content/applications/productivity/spreadsheet/functions.rst:987 -msgid "Value interpreted as a percentage (not compatible with Excel)" +msgid "A number with the sign reversed (not compatible with Excel)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:627 #: ../../content/applications/productivity/spreadsheet/functions.rst:988 -msgid "UPLUS(value)" +msgid "UNARY.PERCENT(percentage)" msgstr "" #: ../../content/applications/productivity/spreadsheet/functions.rst:628 #: ../../content/applications/productivity/spreadsheet/functions.rst:989 +msgid "Value interpreted as a percentage (not compatible with Excel)" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/functions.rst:629 +#: ../../content/applications/productivity/spreadsheet/functions.rst:990 +msgid "UPLUS(value)" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/functions.rst:630 +#: ../../content/applications/productivity/spreadsheet/functions.rst:991 msgid "A specified number, unchanged (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:633 +#: ../../content/applications/productivity/spreadsheet/functions.rst:635 msgid "Parser" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:641 +#: ../../content/applications/productivity/spreadsheet/functions.rst:643 msgid "CONVERT(number, from_unit, to_unit)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:642 -msgid "`Excel CONVERT article `_" +#: ../../content/applications/productivity/spreadsheet/functions.rst:644 +msgid "`Excel CONVERT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:647 -#: ../../content/applications/productivity/spreadsheet/functions.rst:992 +#: ../../content/applications/productivity/spreadsheet/functions.rst:649 +#: ../../content/applications/productivity/spreadsheet/functions.rst:994 msgid "Statistical" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:655 +#: ../../content/applications/productivity/spreadsheet/functions.rst:657 msgid "AVEDEV(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:656 +#: ../../content/applications/productivity/spreadsheet/functions.rst:658 msgid "`Excel AVEDEV article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:657 +#: ../../content/applications/productivity/spreadsheet/functions.rst:659 msgid "AVERAGE(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:658 +#: ../../content/applications/productivity/spreadsheet/functions.rst:660 msgid "`Excel AVERAGE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:659 +#: ../../content/applications/productivity/spreadsheet/functions.rst:661 msgid "AVERAGEA(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:660 +#: ../../content/applications/productivity/spreadsheet/functions.rst:662 msgid "`Excel AVERAGEA article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:661 +#: ../../content/applications/productivity/spreadsheet/functions.rst:663 msgid "AVERAGEIF(criteria_range, criterion, [average_range])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:662 +#: ../../content/applications/productivity/spreadsheet/functions.rst:664 msgid "`Excel AVERAGEIF article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:663 +#: ../../content/applications/productivity/spreadsheet/functions.rst:665 msgid "AVERAGEIFS(average_range, criteria_range1, criterion1, [criteria_range2, ...], [criterion2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:664 +#: ../../content/applications/productivity/spreadsheet/functions.rst:666 msgid "`Excel AVERAGEIFS article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:665 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1000 +#: ../../content/applications/productivity/spreadsheet/functions.rst:667 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1002 msgid "AVERAGE.WEIGHTED(values, weights, [additional_values, ...], [additional_weights, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:666 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1001 +#: ../../content/applications/productivity/spreadsheet/functions.rst:668 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1003 msgid "Weighted average (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:667 +#: ../../content/applications/productivity/spreadsheet/functions.rst:669 msgid "CORREL(data_y, data_x)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:668 +#: ../../content/applications/productivity/spreadsheet/functions.rst:670 msgid "`Excel CORREL article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:669 +#: ../../content/applications/productivity/spreadsheet/functions.rst:671 msgid "COUNT(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:670 +#: ../../content/applications/productivity/spreadsheet/functions.rst:672 msgid "`Excel COUNT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:671 +#: ../../content/applications/productivity/spreadsheet/functions.rst:673 msgid "COUNTA(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:672 +#: ../../content/applications/productivity/spreadsheet/functions.rst:674 msgid "`Excel COUNTA article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:673 +#: ../../content/applications/productivity/spreadsheet/functions.rst:675 msgid "COVAR(data_y, data_x)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:674 +#: ../../content/applications/productivity/spreadsheet/functions.rst:676 msgid "`Excel COVAR article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:675 +#: ../../content/applications/productivity/spreadsheet/functions.rst:677 msgid "COVARIANCE.P(data_y, data_x)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:676 +#: ../../content/applications/productivity/spreadsheet/functions.rst:678 msgid "`Excel COVARIANCE.P article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:677 +#: ../../content/applications/productivity/spreadsheet/functions.rst:679 msgid "COVARIANCE.S(data_y, data_x)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:678 +#: ../../content/applications/productivity/spreadsheet/functions.rst:680 msgid "`Excel COVARIANCE.S article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:679 +#: ../../content/applications/productivity/spreadsheet/functions.rst:681 msgid "FORECAST(x, data_y, data_x)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:680 +#: ../../content/applications/productivity/spreadsheet/functions.rst:682 msgid "`Excel FORECAST article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:681 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1002 +#: ../../content/applications/productivity/spreadsheet/functions.rst:683 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1004 msgid "GROWTH(known_data_y, [known_data_x], [new_data_x], [b])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:682 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1003 +#: ../../content/applications/productivity/spreadsheet/functions.rst:684 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1005 msgid "Fits points to exponential growth trend (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:683 +#: ../../content/applications/productivity/spreadsheet/functions.rst:685 msgid "INTERCEPT(data_y, data_x)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:684 +#: ../../content/applications/productivity/spreadsheet/functions.rst:686 msgid "`Excel INTERCEPT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:685 +#: ../../content/applications/productivity/spreadsheet/functions.rst:687 msgid "LARGE(data, n)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:686 +#: ../../content/applications/productivity/spreadsheet/functions.rst:688 msgid "`Excel LARGE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:687 +#: ../../content/applications/productivity/spreadsheet/functions.rst:689 msgid "LINEST(data_y, [data_x], [calculate_b], [verbose])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:688 +#: ../../content/applications/productivity/spreadsheet/functions.rst:690 msgid "`Excel LINEST article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:689 +#: ../../content/applications/productivity/spreadsheet/functions.rst:691 msgid "LOGEST(data_y, [data_x], [calculate_b], [verbose])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:690 +#: ../../content/applications/productivity/spreadsheet/functions.rst:692 msgid "`Excel LOGEST article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:691 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1004 +#: ../../content/applications/productivity/spreadsheet/functions.rst:693 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1006 msgid "MATTHEWS(data_x, data_y)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:692 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1005 +#: ../../content/applications/productivity/spreadsheet/functions.rst:694 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1007 msgid "Compute the Matthews correlation coefficient of a dataset (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:693 +#: ../../content/applications/productivity/spreadsheet/functions.rst:695 msgid "MAX(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:694 +#: ../../content/applications/productivity/spreadsheet/functions.rst:696 msgid "`Excel MAX article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:695 +#: ../../content/applications/productivity/spreadsheet/functions.rst:697 msgid "MAXA(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:696 +#: ../../content/applications/productivity/spreadsheet/functions.rst:698 msgid "`Excel MAXA article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:697 +#: ../../content/applications/productivity/spreadsheet/functions.rst:699 msgid "MAXIFS(range, criteria_range1, criterion1, [criteria_range2, ...], [criterion2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:698 +#: ../../content/applications/productivity/spreadsheet/functions.rst:700 msgid "`Excel MAXIFS article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:699 +#: ../../content/applications/productivity/spreadsheet/functions.rst:701 msgid "MEDIAN(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:700 +#: ../../content/applications/productivity/spreadsheet/functions.rst:702 msgid "`Excel MEDIAN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:701 +#: ../../content/applications/productivity/spreadsheet/functions.rst:703 msgid "MIN(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:702 +#: ../../content/applications/productivity/spreadsheet/functions.rst:704 msgid "`Excel MIN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:703 +#: ../../content/applications/productivity/spreadsheet/functions.rst:705 msgid "MINA(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:704 +#: ../../content/applications/productivity/spreadsheet/functions.rst:706 msgid "`Excel MINA article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:705 +#: ../../content/applications/productivity/spreadsheet/functions.rst:707 msgid "MINIFS(range, criteria_range1, criterion1, [criteria_range2, ...], [criterion2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:706 +#: ../../content/applications/productivity/spreadsheet/functions.rst:708 msgid "`Excel MINIFS article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:707 +#: ../../content/applications/productivity/spreadsheet/functions.rst:709 msgid "PEARSON(data_y, data_x)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:708 +#: ../../content/applications/productivity/spreadsheet/functions.rst:710 msgid "`Excel PEARSON article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:709 +#: ../../content/applications/productivity/spreadsheet/functions.rst:711 msgid "PERCENTILE(data, percentile)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:710 +#: ../../content/applications/productivity/spreadsheet/functions.rst:712 msgid "`Excel PERCENTILE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:711 +#: ../../content/applications/productivity/spreadsheet/functions.rst:713 msgid "PERCENTILE.EXC(data, percentile)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:712 +#: ../../content/applications/productivity/spreadsheet/functions.rst:714 msgid "`Excel PERCENTILE.EXC article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:713 +#: ../../content/applications/productivity/spreadsheet/functions.rst:715 msgid "PERCENTILE.INC(data, percentile)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:714 +#: ../../content/applications/productivity/spreadsheet/functions.rst:716 msgid "`Excel PERCENTILE.INC article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:715 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1006 +#: ../../content/applications/productivity/spreadsheet/functions.rst:717 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1008 msgid "POLYFIT.COEFFS(data_y, data_x, order, [intercept])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:716 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1007 +#: ../../content/applications/productivity/spreadsheet/functions.rst:718 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1009 msgid "Compute the coefficients of polynomial regression of the dataset (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:717 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1008 +#: ../../content/applications/productivity/spreadsheet/functions.rst:719 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1010 msgid "POLYFIT.FORECAST(x, data_y, data_x, order, [intercept])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:718 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1009 +#: ../../content/applications/productivity/spreadsheet/functions.rst:720 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1011 msgid "Predict value by computing a polynomial regression of the dataset (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:719 +#: ../../content/applications/productivity/spreadsheet/functions.rst:721 msgid "QUARTILE(data, quartile_number)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:720 +#: ../../content/applications/productivity/spreadsheet/functions.rst:722 msgid "`Excel QUARTILE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:721 +#: ../../content/applications/productivity/spreadsheet/functions.rst:723 msgid "QUARTILE.EXC(data, quartile_number)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:722 +#: ../../content/applications/productivity/spreadsheet/functions.rst:724 msgid "`Excel QUARTILE.EXC article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:723 +#: ../../content/applications/productivity/spreadsheet/functions.rst:725 msgid "QUARTILE.INC(data, quartile_number)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:724 +#: ../../content/applications/productivity/spreadsheet/functions.rst:726 msgid "`Excel QUARTILE.INC article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:725 +#: ../../content/applications/productivity/spreadsheet/functions.rst:727 msgid "RANK(value, data, [is_ascending])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:726 +#: ../../content/applications/productivity/spreadsheet/functions.rst:728 msgid "`Excel RANK article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:727 +#: ../../content/applications/productivity/spreadsheet/functions.rst:729 msgid "RSQ(data_y, data_x)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:728 +#: ../../content/applications/productivity/spreadsheet/functions.rst:730 msgid "`Excel RSQ article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:729 +#: ../../content/applications/productivity/spreadsheet/functions.rst:731 msgid "SLOPE(data_y, data_x)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:730 +#: ../../content/applications/productivity/spreadsheet/functions.rst:732 msgid "`Excel SLOPE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:731 +#: ../../content/applications/productivity/spreadsheet/functions.rst:733 msgid "SMALL(data, n)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:732 +#: ../../content/applications/productivity/spreadsheet/functions.rst:734 msgid "`Excel SMALL article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:733 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1010 +#: ../../content/applications/productivity/spreadsheet/functions.rst:735 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1012 msgid "SPEARMAN(data_y, data_x)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:734 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1011 +#: ../../content/applications/productivity/spreadsheet/functions.rst:736 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1013 msgid "Compute the Spearman rank correlation coefficient of a dataset (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:735 +#: ../../content/applications/productivity/spreadsheet/functions.rst:737 msgid "STDEV(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:736 +#: ../../content/applications/productivity/spreadsheet/functions.rst:738 msgid "`Excel STDEV article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:737 +#: ../../content/applications/productivity/spreadsheet/functions.rst:739 msgid "STDEV.P(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:738 +#: ../../content/applications/productivity/spreadsheet/functions.rst:740 msgid "`Excel STDEV.P article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:739 +#: ../../content/applications/productivity/spreadsheet/functions.rst:741 msgid "STDEV.S(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:740 +#: ../../content/applications/productivity/spreadsheet/functions.rst:742 msgid "`Excel STDEV.S article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:741 +#: ../../content/applications/productivity/spreadsheet/functions.rst:743 msgid "STDEVA(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:742 +#: ../../content/applications/productivity/spreadsheet/functions.rst:744 msgid "`Excel STDEVA article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:743 +#: ../../content/applications/productivity/spreadsheet/functions.rst:745 msgid "STDEVP(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:744 +#: ../../content/applications/productivity/spreadsheet/functions.rst:746 msgid "`Excel STDEVP article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:745 +#: ../../content/applications/productivity/spreadsheet/functions.rst:747 msgid "STDEVPA(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:746 +#: ../../content/applications/productivity/spreadsheet/functions.rst:748 msgid "`Excel STDEVPA article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:747 +#: ../../content/applications/productivity/spreadsheet/functions.rst:749 msgid "STEYX(data_y, data_x)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:748 +#: ../../content/applications/productivity/spreadsheet/functions.rst:750 msgid "`Excel STEYX article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:749 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1012 +#: ../../content/applications/productivity/spreadsheet/functions.rst:751 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1014 msgid "TREND(known_data_y, [known_data_x], [new_data_x], [b])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:750 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1013 +#: ../../content/applications/productivity/spreadsheet/functions.rst:752 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1015 msgid "Fits points to linear trend derived via least-squares (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:751 +#: ../../content/applications/productivity/spreadsheet/functions.rst:753 msgid "VAR(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:752 +#: ../../content/applications/productivity/spreadsheet/functions.rst:754 msgid "`Excel VAR article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:753 +#: ../../content/applications/productivity/spreadsheet/functions.rst:755 msgid "VAR.P(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:754 +#: ../../content/applications/productivity/spreadsheet/functions.rst:756 msgid "`Excel VAR.P article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:755 +#: ../../content/applications/productivity/spreadsheet/functions.rst:757 msgid "VAR.S(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:756 +#: ../../content/applications/productivity/spreadsheet/functions.rst:758 msgid "`Excel VAR.S article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:757 +#: ../../content/applications/productivity/spreadsheet/functions.rst:759 msgid "VARA(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:758 +#: ../../content/applications/productivity/spreadsheet/functions.rst:760 msgid "`Excel VARA article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:759 +#: ../../content/applications/productivity/spreadsheet/functions.rst:761 msgid "VARP(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:760 +#: ../../content/applications/productivity/spreadsheet/functions.rst:762 msgid "`Excel VARP article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:761 +#: ../../content/applications/productivity/spreadsheet/functions.rst:763 msgid "VARPA(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:762 +#: ../../content/applications/productivity/spreadsheet/functions.rst:764 msgid "`Excel VARPA article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:767 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1016 -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:213 -#: ../../content/applications/productivity/whatsapp.rst:587 +#: ../../content/applications/productivity/spreadsheet/functions.rst:769 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1018 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:203 +#: ../../content/applications/productivity/whatsapp.rst:588 msgid "Text" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:775 +#: ../../content/applications/productivity/spreadsheet/functions.rst:777 msgid "CHAR(table_number)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:776 +#: ../../content/applications/productivity/spreadsheet/functions.rst:778 msgid "`Excel CHAR article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:777 +#: ../../content/applications/productivity/spreadsheet/functions.rst:779 msgid "CLEAN(text)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:778 +#: ../../content/applications/productivity/spreadsheet/functions.rst:780 msgid "`Excel CLEAN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:779 +#: ../../content/applications/productivity/spreadsheet/functions.rst:781 msgid "CONCATENATE(string1, [string2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:780 +#: ../../content/applications/productivity/spreadsheet/functions.rst:782 msgid "`Excel CONCATENATE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:781 +#: ../../content/applications/productivity/spreadsheet/functions.rst:783 msgid "EXACT(string1, string2)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:782 +#: ../../content/applications/productivity/spreadsheet/functions.rst:784 msgid "`Excel EXACT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:783 +#: ../../content/applications/productivity/spreadsheet/functions.rst:785 msgid "FIND(search_for, text_to_search, [starting_at])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:784 +#: ../../content/applications/productivity/spreadsheet/functions.rst:786 msgid "`Excel FIND article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:785 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1024 +#: ../../content/applications/productivity/spreadsheet/functions.rst:787 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1026 msgid "JOIN(delimiter, value_or_array1, [value_or_array2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:786 -#: ../../content/applications/productivity/spreadsheet/functions.rst:1025 +#: ../../content/applications/productivity/spreadsheet/functions.rst:788 +#: ../../content/applications/productivity/spreadsheet/functions.rst:1027 msgid "Concatenates elements of arrays with delimiter (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:787 +#: ../../content/applications/productivity/spreadsheet/functions.rst:789 msgid "LEFT(text, [number_of_characters])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:788 +#: ../../content/applications/productivity/spreadsheet/functions.rst:790 msgid "`Excel LEFT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:789 +#: ../../content/applications/productivity/spreadsheet/functions.rst:791 msgid "LEN(text)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:790 +#: ../../content/applications/productivity/spreadsheet/functions.rst:792 msgid "`Excel LEN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:791 +#: ../../content/applications/productivity/spreadsheet/functions.rst:793 msgid "LOWER(text)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:792 +#: ../../content/applications/productivity/spreadsheet/functions.rst:794 msgid "`Excel LOWER article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:793 +#: ../../content/applications/productivity/spreadsheet/functions.rst:795 msgid "MID(text, starting_at, extract_length)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:794 +#: ../../content/applications/productivity/spreadsheet/functions.rst:796 msgid "`Excel MID article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:795 +#: ../../content/applications/productivity/spreadsheet/functions.rst:797 msgid "PROPER(text_to_capitalize)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:796 +#: ../../content/applications/productivity/spreadsheet/functions.rst:798 msgid "`Excel PROPER article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:797 +#: ../../content/applications/productivity/spreadsheet/functions.rst:799 msgid "REPLACE(text, position, length, new_text)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:798 +#: ../../content/applications/productivity/spreadsheet/functions.rst:800 msgid "`Excel REPLACE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:799 +#: ../../content/applications/productivity/spreadsheet/functions.rst:801 msgid "RIGHT(text, [number_of_characters])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:800 +#: ../../content/applications/productivity/spreadsheet/functions.rst:802 msgid "`Excel RIGHT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:801 +#: ../../content/applications/productivity/spreadsheet/functions.rst:803 msgid "SEARCH(search_for, text_to_search, [starting_at])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:802 +#: ../../content/applications/productivity/spreadsheet/functions.rst:804 msgid "`Excel SEARCH article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:803 +#: ../../content/applications/productivity/spreadsheet/functions.rst:805 msgid "SPLIT(text, delimiter, [split_by_each], [remove_empty_text])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:804 +#: ../../content/applications/productivity/spreadsheet/functions.rst:806 msgid "`Excel TEXTSPLIT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:805 +#: ../../content/applications/productivity/spreadsheet/functions.rst:807 msgid "SUBSTITUTE(text_to_search, search_for, replace_with, [occurrence_number])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:806 +#: ../../content/applications/productivity/spreadsheet/functions.rst:808 msgid "`Excel SUBSTITUTE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:807 +#: ../../content/applications/productivity/spreadsheet/functions.rst:809 msgid "TEXT(number, format)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:808 +#: ../../content/applications/productivity/spreadsheet/functions.rst:810 msgid "`Excel TEXT article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:809 +#: ../../content/applications/productivity/spreadsheet/functions.rst:811 msgid "TEXTJOIN(delimiter, ignore_empty, text1, [text2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:810 +#: ../../content/applications/productivity/spreadsheet/functions.rst:812 msgid "`Excel TEXTJOIN article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:811 +#: ../../content/applications/productivity/spreadsheet/functions.rst:813 msgid "TRIM(text)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:812 +#: ../../content/applications/productivity/spreadsheet/functions.rst:814 msgid "`Excel TRIM article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:813 +#: ../../content/applications/productivity/spreadsheet/functions.rst:815 msgid "UPPER(text)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:814 +#: ../../content/applications/productivity/spreadsheet/functions.rst:816 msgid "`Excel UPPER article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:815 +#: ../../content/applications/productivity/spreadsheet/functions.rst:817 msgid "VALUE(text)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:816 -msgid "`Excel VALUE article `_" +#: ../../content/applications/productivity/spreadsheet/functions.rst:818 +msgid "`Excel VALUE article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:821 +#: ../../content/applications/productivity/spreadsheet/functions.rst:823 msgid "Web" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:829 +#: ../../content/applications/productivity/spreadsheet/functions.rst:831 msgid "HYPERLINK(url, [link_label])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:830 +#: ../../content/applications/productivity/spreadsheet/functions.rst:832 msgid "`Excel HYPERLINK article `_" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:835 +#: ../../content/applications/productivity/spreadsheet/functions.rst:837 msgid "Odoo-specific functions" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:837 +#: ../../content/applications/productivity/spreadsheet/functions.rst:839 msgid "This section contains functions that interact directly with your Odoo database." msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:893 +#: ../../content/applications/productivity/spreadsheet/functions.rst:895 msgid "This function takes in two currency codes as arguments, and returns the exchange rate from -the first currency to the second as float (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:902 +#: ../../content/applications/productivity/spreadsheet/functions.rst:904 msgid "ODOO.PARTNER.BALANCE(partner_ids, [account_codes], [date_range], [offset], [company_id], [include_unposted])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:903 +#: ../../content/applications/productivity/spreadsheet/functions.rst:905 msgid "Get the partner balance for the specified account(s) and period (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:904 +#: ../../content/applications/productivity/spreadsheet/functions.rst:906 msgid "ODOO.RESIDUAL([account_codes], [date_range], [offset], [company_id], [include_unposted])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:905 +#: ../../content/applications/productivity/spreadsheet/functions.rst:907 msgid "Get the residual amount for the specified account(s) and period (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:932 +#: ../../content/applications/productivity/spreadsheet/functions.rst:934 msgid "COUNTUNIQUE(value1, [value2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:933 +#: ../../content/applications/productivity/spreadsheet/functions.rst:935 msgid "Counts number of unique values in a range (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:934 +#: ../../content/applications/productivity/spreadsheet/functions.rst:936 msgid "COUNTUNIQUEIFS(range, criteria_range1, criterion1, [criteria_range2, ...], [criterion2, ...])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:935 +#: ../../content/applications/productivity/spreadsheet/functions.rst:937 msgid "Counts number of unique values in a range, filtered by a set of criteria (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:938 +#: ../../content/applications/productivity/spreadsheet/functions.rst:940 msgid "Misc" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:946 +#: ../../content/applications/productivity/spreadsheet/functions.rst:948 msgid "FORMAT.LARGE.NUMBER(value, [unit])" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:947 +#: ../../content/applications/productivity/spreadsheet/functions.rst:949 msgid "Apply a large number format (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:948 +#: ../../content/applications/productivity/spreadsheet/functions.rst:950 msgid "ODOO.LIST(list_id, index, field_name)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:949 +#: ../../content/applications/productivity/spreadsheet/functions.rst:951 msgid "Get the value from a list (not compatible with Excel)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:950 +#: ../../content/applications/productivity/spreadsheet/functions.rst:952 msgid "ODOO.LIST.HEADER(list_id, field_name)" msgstr "" -#: ../../content/applications/productivity/spreadsheet/functions.rst:951 +#: ../../content/applications/productivity/spreadsheet/functions.rst:953 msgid "Get the header of a list (not compatible with Excel)" msgstr "" @@ -10775,282 +11072,308 @@ msgid "These filters are particularly useful for reports and dashboards as users msgstr "" #: ../../content/applications/productivity/spreadsheet/global_filters.rst:13 -msgid "When a spreadsheet with global filters is added to a dashboard, the filters appear as dropdown menus at the top of the dashboard. In a spreadsheet, they appear in a pane to the right of the spreadsheet." +msgid "On a dashboard, global filters that have been :ref:`created in the underlying spreadsheet ` are applied via the search bar at the top of the dashboard." msgstr "" #: ../../content/applications/productivity/spreadsheet/global_filters.rst:0 msgid "Global filters at the top of a dashboard" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:20 -msgid "Three types of global filters are available:" +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:19 +msgid "Four types of global filters are available:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:22 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:21 msgid ":ref:`Date `: filters data based on a specific time range, with the options :guilabel:`Month / Quarter`, :guilabel:`Relative Period`, or :guilabel:`From / To`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:25 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:24 msgid ":ref:`Relation `: filters data based on a relational field in a related model, e.g., by :guilabel:`Salesperson` with the *User* model set as the related model." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:28 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:27 msgid ":ref:`Text `: filters data based on a string of text or a range of predefined values, e.g., a product reference or barcode." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:31 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:29 +msgid ":ref:`Yes/No `: filters data based on whether or not a checkbox, or boolean, field is set, e.g., lead is active." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:32 msgid "Unlike the standard :icon:`fa-filter` :guilabel:`(Add filters)` spreadsheet function, which lets you sort and temporarily hide data, global filters act on the underlying :ref:`data sources `, filtering data *before* it is loaded into the spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:35 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:36 msgid "When a global filter is created, :ref:`field matching ` for each data source ensures the filter acts on the correct database :doc:`fields `." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:40 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:41 msgid "Global filters work by adding extra conditions to the domains of all the data sources in the spreadsheet. Therefore, if you intend to use global filters, do not use the same conditions when configuring the initial list, pivot table, or chart in your database." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:43 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:44 msgid "Setting default values, where relevant, ensures that the spreadsheet or dashboard loads quickly and provides a useful initial view that can be further customized if needed. For example, a :guilabel:`Date` filter could be set to show data from the last 30 days by default." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:50 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:51 msgid "Field matching" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:53 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:54 msgid "This process is crucial, as matching the wrong fields, or not setting matching fields at all, results in global filters that do not show the desired results." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:56 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:57 msgid "To function as intended, a global filter needs to act on the correct database fields. Consider a :guilabel:`Date` filter applied to sales data. As the *Sales Order* model contains several date fields, it is crucial to determine which field is relevant for the filter, e.g., the order date, the delivery date, the expected date, or the expiration date." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:61 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:62 msgid "When :ref:`creating a global filter `, the :guilabel:`Field matching` section of the :guilabel:`Filter properties` allows you to determine, for each :ref:`data source ` in the spreadsheet, which database field the filter should act on, or match with." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:66 -msgid "Field matching is further explained in the relevant sections on creating :ref:`Date `, :ref:`Relation `, and :ref:`Text ` global filters." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:67 +msgid "Field matching is further explained in the relevant sections on creating :ref:`Date `, :ref:`Relation `, :ref:`Text `, and :ref:`Yes/No ` global filters." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:74 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:76 msgid "Create global filters" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:76 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:78 msgid "Open the desired spreadsheet from the **Odoo Documents** app or via the **Odoo Dashboards** app if you are adding filters to a dashboard." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:80 -msgid "To access the underlying spreadsheet of a dashboard, with the **Dashboards** app open, :ref:`activate developer mode `, then click the :icon:`fa-pencil` :guilabel:`(Edit)` icon that appears when hovering over the dashboard name." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:81 +msgid "To add a new filter, click :icon:`os-global-filters` :guilabel:`Filters` to open the :guilabel:`Filters` panel. Under :guilabel:`Create filter`, click :icon:`fa-calendar` :guilabel:`Date`, :icon:`fa-link` :guilabel:`Relation`, :icon:`fa-font` :guilabel:`Text`, or :icon:`fa-toggle-off` :guilabel:`Yes/No` as appropriate." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:84 -msgid "To add a new filter, click :icon:`os-global-filters` :guilabel:`Filters`, then, under :guilabel:`Add a new filter...` click :guilabel:`Date`, :guilabel:`Relation`, or :guilabel:`Text` as appropriate. The :guilabel:`Filter properties` pane opens." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:87 +msgid "Depending on the data source(s) present in the spreadsheet, suggested :ref:`relation filters ` may be shown. Clicking on a suggested filter opens the :guilabel:`Filter properties` panel with certain values preconfigured." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:88 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:91 msgid "When saving a global filter, if any required information is missing or if any information provided in the :ref:`Field matching ` section is not appropriate, an error is shown stating :guilabel:`Some required fields are not valid`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:98 -msgid "A :guilabel:`Date` filter can only match with a :ref:`Date ` or :ref:`Date & Time ` field." -msgstr "" - -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:101 -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:171 -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:220 -msgid "With the :guilabel:`Filter properties` pane open:" +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:96 +msgid "To access the underlying spreadsheet of a dashboard, :ref:`activate developer mode `, then click the :icon:`fa-pencil` :guilabel:`(Edit)` icon that appears when hovering over the dashboard name in the left panel." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:103 -msgid "Enter a name for the new date filter in the :guilabel:`Label` field." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:99 +msgid "Click :icon:`fa-thumb-tack` :guilabel:`(pin)` at the top of the :guilabel:`Filters` panel to allow another panel, such as the :guilabel:`Filter properties` panel, to open beside it." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:104 -msgid "From the :guilabel:`Time range` dropdown menu, select one of the following:" +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:108 +msgid "A :guilabel:`Date` filter can only match with a :ref:`Date ` or :ref:`Date & Time ` field." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:106 -msgid ":guilabel:`Month / Quarter`: enables a dropdown menu of specific months and/or quarters and a year selector for the year. The values :guilabel:`Months` and :guilabel:`Quarters` are enabled by default. Disabling both of these values allows filtering by year only." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:111 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:163 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:210 +msgid "With the :guilabel:`Filter properties` panel open:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:110 -msgid "To set a :guilabel:`Default value`, enable :guilabel:`Automatically filter on the current period` and choose whether to filter on the current :guilabel:`Month`, :guilabel:`Quarter` or :guilabel:`Year`." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:113 +msgid "Enter a name for the new date filter in the :guilabel:`Label` field." msgstr "" #: ../../content/applications/productivity/spreadsheet/global_filters.rst:114 -msgid ":guilabel:`Relative Period`: enables a dropdown menu of specific time ranges relative to the current date (e.g., :guilabel:`Year to Date`, :guilabel:`Last 7 Days`, :guilabel:`Last 30 Days`, etc.)." -msgstr "" - -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:118 -msgid "To set a :guilabel:`Default value`, select one of the available values." +msgid "To set a :guilabel:`Default value`, select one of the available values, e.g, `Last 30 Days` or `Month to Date`. When applying the global filter, any of the available values can be selected." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:120 -msgid ":guilabel:`From / To`: enables :guilabel:`Date from...` and :guilabel:`Date to...` date selection fields to define a specific time range (e.g., `06/05/2024` to `06/27/2024`)." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:116 +msgid "In the :guilabel:`Field matching` section, for each data source, click beside :guilabel:`Date field` and select the field the filter should match with." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:123 -msgid "In the :guilabel:`Field matching` section, for each data source, click below :guilabel:`Date field` and select the field the filter should match with." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:119 +msgid "The :guilabel:`Period offset` option, which appears when a date field is chosen, enables comparisons to be made by shifting the time range by one or more periods in the past or future. By default, no period offset is defined. To define a period offset, select :guilabel:`Previous` or :guilabel:`Next`, then select the desired number of periods in the past or future." msgstr "" #: ../../content/applications/productivity/spreadsheet/global_filters.rst:126 -msgid "The :guilabel:`Period offset` feature enables comparisons to be made by shifting the time range by one or two periods in the past or future. By default, no period offset is set. The offsets available are: :guilabel:`Previous`, :guilabel:`Before previous`, :guilabel:`Next`, and :guilabel:`After next`." -msgstr "" - -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:133 msgid "To compare data effectively using the :guilabel:`Period offset` feature, :ref:`duplicate the relevant inserted list ` or :ref:`pivot table `, then, when setting up field matching, set a period offset for the second data source but not the first." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:138 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:131 msgid "When applying the filter, the original list or pivot table shows data for the time range selected, while the second shows data for a period before or after that time range, as defined." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:142 -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:191 -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:229 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:135 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:183 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:220 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:256 msgid "Click :guilabel:`Save`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:145 -msgid "In the example below, a :guilabel:`Date` global filter has been created to allow the pivot table and chart to show sales data per quarter. If only a year is selected, data is shown for the entire year." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:138 +msgid "In the example below, a :guilabel:`Date` global filter allows the pivot table and chart to show sales data for any defined time period, in this case, `July 2025`. The :guilabel:`Custom Range` always shows the actual dates corresponding to the chosen period; it can also be updated directly." msgstr "" #: ../../content/applications/productivity/spreadsheet/global_filters.rst:0 -msgid "A date filter to filter on quarter and year" +msgid "A date filter filters data for July 2025" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:152 -msgid "In the :guilabel:`Field matching` section of the :guilabel:`Filter properties`, the field :guilabel:`Order Date` has been selected as the matching date field. A matching date field is not needed for *List #1* as we will not use this filter on the data source in question." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:146 +msgid "In the :guilabel:`Field matching` section of the :guilabel:`Filter properties`, the field :guilabel:`Order Date` has been selected as the matching date field." msgstr "" #: ../../content/applications/productivity/spreadsheet/global_filters.rst:0 msgid "A date filter with the Order Date selected as the matching field" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:163 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:155 msgid "Relation" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:166 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:158 msgid "A :guilabel:`Relation` filter can only match with a :ref:`Many2One `, :ref:`One2Many `, or :ref:`Many2Many ` field." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:173 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:165 msgid "Enter a name for the new relation filter in the :guilabel:`Label` field." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:175 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:167 msgid "In the :guilabel:`Related model` field, start typing the model name to reveal a list of all models, then select the appropriate one. Once a model is selected, the :guilabel:`Default value` and :guilabel:`Possible values` fields appear, as well as the :guilabel:`Field matching` section." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:180 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:172 msgid "To set a :guilabel:`Default value`, select one of the available values; these are records from the model. If the related model is the *User* model, the option :guilabel:`Automatically filter on the current user` can be enabled." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:184 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:176 msgid "To limit the values that can be shown, enable :guilabel:`Restrict values with a domain`, then click :ref:`Edit domain ` to add or edit rules." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:187 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:179 msgid "In the :guilabel:`Field matching` section, check if the correct matching field has been assigned for each data source. If this is not the case, click below the data source name to select the correct field." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:194 -msgid "In the example below, a :guilabel:`Relation` filter has been created to allow the pivot table and chart to show sales data related to selected salespeople only. The *User* model was set as the :guilabel:`Related model`." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:186 +msgid "In the example below, a :guilabel:`Relation` filter allows the pivot table and chart to show sales data related to selected salespeople only. The *User* model is set as the :guilabel:`Related model`." msgstr "" #: ../../content/applications/productivity/spreadsheet/global_filters.rst:0 msgid "Relation filter set on a pivot table" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:201 -msgid "In the :guilabel:`Field matching` section of the :guilabel:`Filter properties`, the field :guilabel:`Salesperson` was automatically assigned as the matching field for both the pivot table and the chart. A matching field is not needed for *List #1* as we will not use this filter on the data source in question." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:193 +msgid "In the :guilabel:`Field matching` section of the :guilabel:`Filter properties`, the field :guilabel:`Salesperson` was automatically assigned as the matching field for both the pivot table and the chart." msgstr "" #: ../../content/applications/productivity/spreadsheet/global_filters.rst:0 msgid "A relation filter with the User model configured" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:216 -msgid "A :guilabel:`Text` filter can only match with a :ref:`Text (char) `, :ref:`Integer ` or :ref:`Decimal (float) ` field." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:206 +msgid "A :guilabel:`Text` filter can only match with a :ref:`Text ` (char), :ref:`Integer `, or :ref:`Decimal ` (float) field." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:222 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:212 msgid "Enter a name for the new text filter in the :guilabel:`Label` field." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:223 -msgid "Optionally, enable :guilabel:`Restrict values to a range`. Doing so allows you to input a spreadsheet range either by typing the range or selecting it from within the spreadsheet." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:213 +msgid "Optionally, enable :guilabel:`Restrict values to a range`. Doing so allows you to input a spreadsheet range either by typing the range or selecting it from the relevant sheet. The referenced range must be in the same spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:225 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:216 msgid "Optionally, enter a :guilabel:`Default value`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:226 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:217 msgid "In the :guilabel:`Field matching` section, for each data source click below the data source name and select the field the :guilabel:`Text` filter should match with." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:232 -msgid "In the example below, a :guilabel:`Text` global filter was created to allow the user to select a product from the :guilabel:`Product` filter and have both the pivot table and chart only show sales data related to that specific product." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:223 +msgid "In the example below, a :guilabel:`Text` global filter allows the pivot table and chart to show sales data only for products whose internal reference matches or contains the entered value, in this case, `FURN`. Multiple values can be entered if desired." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:-1 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:0 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:0 msgid "Global filters set on a pivot table" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:239 -msgid "In the :guilabel:`Filter properties`, the :guilabel:`Possible values` of the filter were restricted to the range :guilabel:`'Products (List #1)'!A2:A34`. This corresponds to the range containing the :guilabel:`Display name` of the product on a list inserted in the spreadsheet." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:230 +msgid "In the :guilabel:`Field matching` section of the :guilabel:`Filter properties`, the :guilabel:`Internal Reference` of the :guilabel:`Product Variant` was selected as the matching field for both the pivot table and the chart." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:0 +msgid "A text filter matched to the product's internal reference" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:238 +msgid "If you selected :guilabel:`Restrict values to range` when configuring the text filter and defined a range, you select the value of the text field from a dropdown." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:-1 -msgid "A text filter with a restricted range" +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:244 +msgid "Yes/No" msgstr "" #: ../../content/applications/productivity/spreadsheet/global_filters.rst:247 -msgid "With this configuration, the pivot table and chart can be filtered by product name by selecting one of the predefined values available in the text filter. In this case, :guilabel:`Furniture` has already been selected as the :guilabel:`Product category`, meaning that only products of this category can be selected as possible values." +msgid "A :guilabel:`Yes/No` filter can only match with a :ref:`Checkbox ` (boolean) field." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:250 +msgid "With the :guilabel:`Filter properties` pane open:" msgstr "" #: ../../content/applications/productivity/spreadsheet/global_filters.rst:252 -msgid "Furthermore, if the values in the range have been retrieved dynamically from the database, as in this case, the text filter is also dynamic, i.e., will reflect changes made to those values." +msgid "Enter a name for the new :guilabel:`Yes/No` filter in the :guilabel:`Label` field." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:256 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:253 +msgid "Optionally, select :guilabel:`Is set` or :guilabel:`Is not set` as the :guilabel:`Default value`." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:254 +msgid "In the :guilabel:`Field matching` section, for each data source, click below the data source name and select the field the :guilabel:`Yes/No` filter should match with." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:259 +msgid "In the example below, a :guilabel:`Yes/No` global filter was created to allow the user to see all active opportunities, i.e., for which the :guilabel:`Active` checkbox is enabled on the record, or all inactive opportunities, i.e., for which the :guilabel:`Active` checkbox is disabled. Leaving the filter empty shows both active and inactive opportunities." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:267 +msgid "In the :guilabel:`Field matching` section of the :guilabel:`Filter properties`, the field :guilabel:`Active` was assigned as the matching field for the pivot table." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:0 +msgid "A yes/no filter with the Active field set as matching field" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:274 msgid "Manage and use global filters" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:258 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:276 msgid "Click the :icon:`os-global-filters` :guilabel:`Filters` icon at the top right of an Odoo spreadsheet to access the global filters that have been created for that spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:261 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:279 msgid "It is possible to:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:263 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:281 msgid "**Apply one or more global filters** by selecting appropriate values per filter, as relevant." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:266 -msgid "Reloading the browser will cause any global filters to reset to their initial state or default value, as relevant. To refresh data in an inserted list, pivot table, or chart without losing global filters that have been applied, click :menuselection:`Data --> Refresh all data` from the menu bar." +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:284 +msgid "Reloading the browser will cause any global filters to reset to their initial state or default value, as relevant. To refresh data in an inserted list, pivot table, or chart without losing global filters that have been applied, click :menuselection:`Data -->` :icon:`os-refresh-data` :menuselection:`Refresh all data` from the menu bar." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:271 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:289 msgid "**Change the order** of existing filters by hovering over a filter and using the :icon:`os-thin-drag-handle` :guilabel:`(drag handle)` icon to change the position." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:273 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:291 msgid "**Clear filter values** (whether default or selected values) by clicking the :icon:`fa-times` :guilabel:`(Clear)` icon next to the value in the filter." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:275 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:293 msgid "**Edit an existing filter** by selecting the :icon:`fa-cog` :guilabel:`(Edit)` icon to open the filter's :guilabel:`Filter properties` then editing as needed." msgstr "" -#: ../../content/applications/productivity/spreadsheet/global_filters.rst:277 +#: ../../content/applications/productivity/spreadsheet/global_filters.rst:295 msgid "**Delete an existing filter** by selecting the :icon:`fa-cog` :guilabel:`(Edit)` icon to open the filter's :guilabel:`Filter properties` then clicking :guilabel:`Remove`." msgstr "" @@ -11074,16 +11397,16 @@ msgstr "" msgid "charts, i.e., data from a :ref:`graph view `" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:11 -msgid "Each time a list, pivot table, or chart is inserted, a :ref:`data source ` is created. This data source connects the spreadsheet to your Odoo database, retrieving up-to-date information every time the spreadsheet is opened, the browser page is reloaded, or data is manually refreshed by clicking :menuselection:`Data --> Refresh all data` from the menu bar." +#: ../../content/applications/productivity/spreadsheet/insert.rst:12 +msgid "Lists, pivot tables, and charts from different apps and models can be inserted into the same spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:17 -msgid ":ref:`Inserted lists ` and :ref:`inserted pivot tables ` use formulas with Odoo-specific :ref:`list functions ` and :ref:`pivot table functions ` to retrieve data from your database and can be further manipulated in the spreadsheet. Certain elements of :ref:`inserted charts ` can be modified, but no data manipulation or computation is possible." +#: ../../content/applications/productivity/spreadsheet/insert.rst:15 +msgid "Each time a list, pivot table, or chart is inserted, a :ref:`data source ` is created. This data source connects the spreadsheet to your Odoo database, retrieving up-to-date information every time the spreadsheet is opened, the browser page is reloaded, or data is manually refreshed by clicking :menuselection:`Data -->` :icon:`os-refresh-data` :menuselection:`Refresh all data` from the menu bar." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:25 -msgid "Lists, pivot tables, and charts from different apps and models can be inserted into the same spreadsheet." +#: ../../content/applications/productivity/spreadsheet/insert.rst:21 +msgid ":ref:`Inserted lists ` and :ref:`inserted pivot tables ` use formulas with Odoo-specific :ref:`list functions ` and :ref:`pivot table functions ` to retrieve data from your database and can be further manipulated in the spreadsheet. Certain elements of :ref:`inserted charts ` can be modified, but no data manipulation or computation is possible." msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:29 @@ -11111,7 +11434,7 @@ msgid "Data sources" msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:47 -msgid "Data sources, which are created each time a :ref:`list `, :ref:`pivot table ` or :ref:`graph ` is inserted into an Odoo spreadsheet, connect the spreadsheet and the relevant :doc:`model <../../studio/models_modules_apps>` in your database, keeping the data in the spreadsheet up-to-date." +msgid "Data sources, which are created each time a :ref:`list `, :ref:`pivot table `, or :ref:`chart ` is inserted into an Odoo spreadsheet, connect the spreadsheet and the relevant :doc:`model <../../studio/models_modules_apps>` in your database, ensuring the data stays up-to-date and allowing you to :ref:`access the underlying data `." msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:53 @@ -11123,22 +11446,26 @@ msgid "Data sources listed in Data menu" msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:61 -msgid "Clicking on a data source opens the related properties in a pane on the right of the spreadsheet." +msgid "Clicking on a data source opens the related properties in a panel on the right of the spreadsheet." msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:64 -msgid "The properties pane can also be opened by right-clicking any cell of an inserted list or pivot table, then clicking :icon:`oi-view-list` :guilabel:`See list properties` or :icon:`oi-view-pivot` :guilabel:`See pivot properties`, or by clicking the :icon:`fa-bars` :guilabel:`(menu)` icon at the top right of an inserted chart, then clicking :icon:`fa-pencil-square-o` :guilabel:`Edit`." +msgid "The properties panel can also be opened by right-clicking any cell of an inserted list or pivot table, then clicking :icon:`oi-view-list` :guilabel:`See list properties` or :icon:`oi-view-pivot` :guilabel:`See pivot properties`, or by clicking the :icon:`fa-bars` :guilabel:`(menu)` icon at the top right of an inserted chart, then clicking :icon:`fa-pencil-square-o` :guilabel:`Edit`." msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:69 -msgid "Once the properties of a specific data source are open, they remain open even when navigating between spreadsheet tabs. To close the properties pane, click the :icon:`fa-times` :guilabel:`(close)` icon at the top right of the pane." +msgid "Once the properties of a specific data source are open, they remain open even when navigating between spreadsheet tabs. To close the properties panel, click the :icon:`fa-times` :guilabel:`(close)` icon at the top right of the panel." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:72 +msgid "Click :icon:`fa-thumb-tack` :guilabel:`(pin)` at the top of the properties panel to allow another panel, such as the :doc:`global filters ` panel, to open beside it." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:74 +#: ../../content/applications/productivity/spreadsheet/insert.rst:76 msgid "Deleting an inserted list or pivot table, or deleting the sheet into which it was inserted, does not delete the underlying data source. The data source of an inserted list or pivot table can only be deleted via the data source's properties." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:78 +#: ../../content/applications/productivity/spreadsheet/insert.rst:80 msgid "A warning in the :guilabel:`Data` menu identifies any data sources for which the corresponding list or pivot table no longer appears in the spreadsheet." msgstr "" @@ -11146,35 +11473,63 @@ msgstr "" msgid "Warning message about unused list" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:84 +#: ../../content/applications/productivity/spreadsheet/insert.rst:86 msgid "Deleting an inserted chart, on the other hand, also deletes the underlying data source." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:89 +#: ../../content/applications/productivity/spreadsheet/insert.rst:91 +msgid "Accessing underlying data" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:93 +msgid "The underlying data of an inserted list, pivot table, or chart can be accessed at any time. To view:" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:95 +msgid "an individual record of an **inserted list**, right-click any cell of the relevant row, then select :icon:`fa-eye` :guilabel:`See record`" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:97 +msgid "a list of records referenced by an individual cell of an **inserted pivot table**, right-click the cell, then select :icon:`fa-eye` :guilabel:`See records`" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:99 +msgid "a list of records represented by a data point of an **inserted chart**, click the data point." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:102 +msgid "Use the middle mouse button or `Ctrl` + left-click (Microsoft/Linux), or `Command` + left-click (Mac OS) to open the results in a new browser tab." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:105 +msgid "To return to the spreadsheet after viewing the underlying data, click the name of the spreadsheet in the breadcrumbs at the top of the page." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:111 msgid "Insert a list" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:92 +#: ../../content/applications/productivity/spreadsheet/insert.rst:114 msgid "Before inserting a list in a spreadsheet, ensure the list is tailored to your needs. Consider which fields should be visible as well as how the records are filtered and/or sorted. This can impact both the loading time and the user-friendliness of your spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:96 +#: ../../content/applications/productivity/spreadsheet/insert.rst:118 msgid "To insert a list:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:98 +#: ../../content/applications/productivity/spreadsheet/insert.rst:120 msgid "With the relevant list view open in your database, click the :icon:`fa-cog` :guilabel:`(Actions)` icon beside the name of the view, then :menuselection:`Spreadsheet -->` :icon:`oi-view-list` :menuselection:`Insert list in spreadsheet`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:103 +#: ../../content/applications/productivity/spreadsheet/insert.rst:125 msgid "To insert only specific records, select the relevant records, click the :icon:`fa-cog` :guilabel:`Actions` button that appears at the top center of the screen, then :icon:`oi-view-list` :guilabel:`Insert in spreadsheet`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:107 +#: ../../content/applications/productivity/spreadsheet/insert.rst:129 msgid "In the window that opens, edit the :guilabel:`Name of the list` if needed." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:109 +#: ../../content/applications/productivity/spreadsheet/insert.rst:131 msgid "The list name is used in the sheet name and in the :ref:`list properties `." msgstr "" @@ -11182,84 +11537,78 @@ msgstr "" msgid "Inserting a list in a spreadsheet" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:115 +#: ../../content/applications/productivity/spreadsheet/insert.rst:137 msgid "Edit the number of records, i.e., rows, to be inserted if needed." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:117 +#: ../../content/applications/productivity/spreadsheet/insert.rst:139 msgid "By default, the number shown is the number of records visible on the first page of the list. For example, if the list contains 150 records but only 80 are visible, this field will show 80." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:121 +#: ../../content/applications/productivity/spreadsheet/insert.rst:143 msgid "While the data in your list is kept up to date thanks to the connection to your database, an inserted list will not automatically expand to accommodate new records, e.g., a new product category or a new salesperson." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:125 +#: ../../content/applications/productivity/spreadsheet/insert.rst:147 msgid "If you anticipate new records being added, consider adding extra rows when inserting the list. Records/rows can also be :ref:`added manually ` after the spreadsheet has been inserted." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:130 +#: ../../content/applications/productivity/spreadsheet/insert.rst:152 msgid "Your company currently has ten product categories and you insert this list in a spreadsheet. If an 11th product category is created and your inserted list only had ten rows, the new category will be inserted in the appropriate position in the spreadsheet, thereby removing an existing category." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:135 +#: ../../content/applications/productivity/spreadsheet/insert.rst:157 msgid "One way to avoid this is to :ref:`add extra rows ` when inserting the list." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:138 -msgid "Click :guilabel:`Blank spreadsheet` or select in which existing spreadsheet the list should be inserted." +#: ../../content/applications/productivity/spreadsheet/insert.rst:160 +msgid "Click :guilabel:`Blank spreadsheet` to create a new spreadsheet, or select in which existing spreadsheet the list should be inserted." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:142 -#: ../../content/applications/productivity/spreadsheet/insert.rst:371 -#: ../../content/applications/productivity/spreadsheet/insert.rst:548 -msgid "New spreadsheets are saved in the **Odoo Documents** app in either the :icon:`fa-hdd-o` :guilabel:`My Drive` personal workspace or, if :ref:`file centralization ` has been enabled for spreadsheets, in the :guilabel:`Spreadsheet` workspace." +#: ../../content/applications/productivity/spreadsheet/insert.rst:164 +msgid "When inserting a list into a new spreadsheet, the spreadsheet is saved in the **Odoo Documents** app in the :icon:`fa-hdd-o` :guilabel:`My Drive` personal folder." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:147 -#: ../../content/applications/productivity/spreadsheet/insert.rst:376 -#: ../../content/applications/productivity/spreadsheet/insert.rst:553 -#: ../../content/applications/productivity/spreadsheet/insert.rst:776 +#: ../../content/applications/productivity/spreadsheet/insert.rst:167 +#: ../../content/applications/productivity/spreadsheet/insert.rst:391 +#: ../../content/applications/productivity/spreadsheet/insert.rst:563 +#: ../../content/applications/productivity/spreadsheet/insert.rst:889 msgid "Click :guilabel:`Confirm`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:149 -msgid "The list is inserted into a new sheet in the spreadsheet. The sheet tab in the bottom bar shows the name of the list followed by the list ID, e.g., *Quotations by Total (List #1)*. A pane on the right side of the screen shows the :ref:`list properties `." -msgstr "" - -#: ../../content/applications/productivity/spreadsheet/insert.rst:154 -msgid "To view an individual record of an inserted list, right-click on any cell of the relevant row, then click :icon:`fa-eye` :guilabel:`See record`. To return to the spreadsheet, click the name of the spreadsheet in the breadcrumbs at the top of the page." +#: ../../content/applications/productivity/spreadsheet/insert.rst:169 +msgid "The list is inserted into a new sheet in the spreadsheet. The sheet tab in the bottom bar shows the name of the list followed by the list ID, e.g., *Quotations by Total (List #1)*. A panel on the right side of the screen shows the :ref:`list properties `." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:157 -msgid "To sever the link between an inserted list and your database, select the entire list, right-click and select :icon:`fa-clone` :guilabel:`Copy` then right-click again and select :menuselection:`Paste special --> Paste as value`." +#: ../../content/applications/productivity/spreadsheet/insert.rst:174 +msgid "To sever the link between an inserted list and your database, select the entire list, right-click and select :icon:`fa-clipboard` :guilabel:`Copy` then right-click again and select :menuselection:`Paste special --> Paste as value`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:160 +#: ../../content/applications/productivity/spreadsheet/insert.rst:177 msgid "Do not modify the list ID in the sheet name, as the inserted list retains this ID for the lifetime of the spreadsheet. This list ID is used in the :ref:`spreadsheet functions ` that retrieve data from your database." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:167 +#: ../../content/applications/productivity/spreadsheet/insert.rst:184 msgid "List functions" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:169 +#: ../../content/applications/productivity/spreadsheet/insert.rst:186 msgid "When a list is inserted into a spreadsheet, the following :doc:`functions ` are used to retrieve the header and field values, respectively:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:179 +#: ../../content/applications/productivity/spreadsheet/insert.rst:196 msgid "`list_id`: the ID assigned when the list is inserted. The first list inserted into a spreadsheet is assigned list ID `1`, the second, list ID `2`, etc." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:181 +#: ../../content/applications/productivity/spreadsheet/insert.rst:198 msgid "`index`: identifies the line on which the record appeared in the list before insertion. The first line has an index of `1`, the second an index of `2`, etc." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:183 +#: ../../content/applications/productivity/spreadsheet/insert.rst:200 msgid "`field_name`: the technical name of the field." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:186 +#: ../../content/applications/productivity/spreadsheet/insert.rst:203 msgid "Clicking on an individual cell displays the related formula, if relevant, in the formula bar. To display all the formulas of a spreadsheet at the same time, click :menuselection:`View -->` :icon:`fa-eye` :menuselection:`Show --> Formulas` on the menu bar. The example below shows the functions used to retrieve list headers and values." msgstr "" @@ -11267,87 +11616,87 @@ msgstr "" msgid "Viewing formulas of spreadsheet cells" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:197 +#: ../../content/applications/productivity/spreadsheet/insert.rst:214 msgid "List properties" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:199 +#: ../../content/applications/productivity/spreadsheet/insert.rst:216 msgid "The list properties appear on the right side of the screen when a list is inserted. They can be accessed at any time via the :guilabel:`Data` menu by clicking the relevant list, as prefaced by the :icon:`oi-view-list` :guilabel:`(list)` icon, or by right-clicking anywhere on the list and clicking :icon:`oi-view-list` :guilabel:`See list properties`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:204 +#: ../../content/applications/productivity/spreadsheet/insert.rst:221 msgid "The following list properties are shown, some of which can be edited:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:206 +#: ../../content/applications/productivity/spreadsheet/insert.rst:223 msgid ":guilabel:`List #`: the list ID. List IDs are assigned sequentially as additional lists are inserted into the spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:208 +#: ../../content/applications/productivity/spreadsheet/insert.rst:225 msgid ":guilabel:`List Name`: the name of the list. Edit this if needed. Note that editing the list name in the list properties does not modify the list name shown in the sheet name, and vice versa." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:210 -#: ../../content/applications/productivity/spreadsheet/insert.rst:446 +#: ../../content/applications/productivity/spreadsheet/insert.rst:227 +#: ../../content/applications/productivity/spreadsheet/insert.rst:458 msgid ":guilabel:`Model`: the model from which the data has been extracted." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:211 +#: ../../content/applications/productivity/spreadsheet/insert.rst:228 msgid ":guilabel:`Columns`: the fields of the model that were visible when the list was inserted." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:212 -#: ../../content/applications/productivity/spreadsheet/insert.rst:462 -#: ../../content/applications/productivity/spreadsheet/insert.rst:702 +#: ../../content/applications/productivity/spreadsheet/insert.rst:229 +#: ../../content/applications/productivity/spreadsheet/insert.rst:474 +#: ../../content/applications/productivity/spreadsheet/insert.rst:760 msgid ":guilabel:`Domain`: the rules used to determine which records are shown. Click :ref:`Edit domain ` to add or edit rules." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:216 -#: ../../content/applications/productivity/spreadsheet/insert.rst:466 +#: ../../content/applications/productivity/spreadsheet/insert.rst:233 +#: ../../content/applications/productivity/spreadsheet/insert.rst:478 msgid "When :doc:`global filters ` are used, this domain is combined with the selected values of the global filter before the data is loaded into the spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:219 +#: ../../content/applications/productivity/spreadsheet/insert.rst:236 msgid ":guilabel:`Sorting`: how the data is sorted, if applicable. To add a sorting rule, click :guilabel:`Add`, select the field, then choose whether sorting should be :guilabel:`Ascending` or :guilabel:`Descending`. Delete a sorting rule by clicking the :icon:`fa-times` :guilabel:`(delete)` icon." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:224 +#: ../../content/applications/productivity/spreadsheet/insert.rst:241 msgid "To :ref:`duplicate ` or :ref:`delete ` a list's data source, click the :icon:`fa-cog` :guilabel:`(gear)` icon, then click :icon:`fa-clone` :guilabel:`Duplicate` or :icon:`fa-trash` :guilabel:`Delete` as relevant." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:232 +#: ../../content/applications/productivity/spreadsheet/insert.rst:249 msgid "Manage an inserted list" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:234 -msgid "Once a list from an Odoo database has been inserted into an Odoo spreadsheet, you can:" +#: ../../content/applications/productivity/spreadsheet/insert.rst:251 +msgid "After a list from an Odoo database has been inserted into an Odoo spreadsheet, you can:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:236 +#: ../../content/applications/productivity/spreadsheet/insert.rst:253 msgid ":ref:`add records `, i.e., rows" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:237 +#: ../../content/applications/productivity/spreadsheet/insert.rst:254 msgid ":ref:`add fields `, i.e., columns" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:238 +#: ../../content/applications/productivity/spreadsheet/insert.rst:255 msgid ":ref:`duplicate the list ` to create a new, identical data source" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:240 +#: ../../content/applications/productivity/spreadsheet/insert.rst:257 msgid ":ref:`delete the list and its underlying data source `" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:245 +#: ../../content/applications/productivity/spreadsheet/insert.rst:262 msgid "Add records/rows to a list" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:247 +#: ../../content/applications/productivity/spreadsheet/insert.rst:264 msgid "To add records to a list, use one of the following methods:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:249 +#: ../../content/applications/productivity/spreadsheet/insert.rst:266 msgid "Select the last row of the table, then hover over the blue square until the plus icon appears. Click and drag down to add the desired number of rows. The cells of the new rows are populated with the :ref:`appropriate formula ` to retrieve the list values. If there is corresponding data in your database, the cells are populated." msgstr "" @@ -11355,35 +11704,35 @@ msgstr "" msgid "Add records by dragging the cell down" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:257 +#: ../../content/applications/productivity/spreadsheet/insert.rst:274 msgid "Position your cursor in the top left cell of the sheet, click :menuselection:`Data --> Re-insert list` from the menu bar, then select the appropriate list. In the pop-up window, indicate the number of records to insert and click :guilabel:`Confirm`. An updated list is inserted, overwriting the previous list." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:263 +#: ../../content/applications/productivity/spreadsheet/insert.rst:280 msgid "The above methods can also be used to add additional blank rows to your spreadsheet table. This may be useful for lists where you expect additional records to be generated in your database, e.g., new product categories or new salespersons." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:270 +#: ../../content/applications/productivity/spreadsheet/insert.rst:287 msgid "Add fields/columns to a list" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:272 +#: ../../content/applications/productivity/spreadsheet/insert.rst:289 msgid "To add fields/columns to a list:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:274 +#: ../../content/applications/productivity/spreadsheet/insert.rst:291 msgid "Select the column to the right or left of where the new column should be inserted." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:275 +#: ../../content/applications/productivity/spreadsheet/insert.rst:292 msgid "Click :menuselection:`Insert -->` :icon:`os-insert-col` :menuselection:`Insert column` then :icon:`os-insert-col-before` :menuselection:`Column left` or :icon:`os-insert-col-after` :menuselection:`Column right` from the menu bar, or right-click then :icon:`os-insert-col-before` :guilabel:`Insert column left` or :icon:`os-insert-col-after` :guilabel:`Insert column right` as appropriate." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:280 +#: ../../content/applications/productivity/spreadsheet/insert.rst:297 msgid "Copy the header cell of any column, paste it into the header cell of the new column, and press `Enter`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:282 +#: ../../content/applications/productivity/spreadsheet/insert.rst:299 msgid "Double-click the new header cell then click on the field name that appears in quotation marks at the end of the formula; a list of all the technical names of the fields of the related model appears." msgstr "" @@ -11391,100 +11740,100 @@ msgstr "" msgid "Add fields/columns by editing the formula" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:289 +#: ../../content/applications/productivity/spreadsheet/insert.rst:306 msgid "Select the appropriate field name and press `Enter`. The field's label appears in the header." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:292 +#: ../../content/applications/productivity/spreadsheet/insert.rst:309 msgid "To know a field's technical name, navigate to the relevant view, :ref:`activate developer mode `, then check the field name by hovering over the question mark beside a field's label." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:296 +#: ../../content/applications/productivity/spreadsheet/insert.rst:313 msgid "With the header cell selected, double-click on the blue square in the bottom-right corner. The cells of the column are populated with the appropriate formula to retrieve the list values. If there is corresponding data in your database, the cells are populated." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:303 +#: ../../content/applications/productivity/spreadsheet/insert.rst:320 msgid "Duplicate a list" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:305 +#: ../../content/applications/productivity/spreadsheet/insert.rst:322 msgid "Duplicating a list via the list's properties creates an additional data source. This allows for different manipulations to be performed on the same data within one spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:308 +#: ../../content/applications/productivity/spreadsheet/insert.rst:325 msgid "With the :ref:`list properties ` open, click the :icon:`fa-cog` :guilabel:`(gear)` icon then :icon:`fa-clone` :guilabel:`Duplicate`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:311 +#: ../../content/applications/productivity/spreadsheet/insert.rst:328 msgid "The new data source is assigned the next available list ID. For example, if no other lists have been inserted in the meantime, duplicating *List #1* results in the creation of *List #2*." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:314 +#: ../../content/applications/productivity/spreadsheet/insert.rst:331 msgid "Unlike when you insert a list, a duplicated list is not automatically inserted into the spreadsheet. To insert it, perform the following steps:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:317 +#: ../../content/applications/productivity/spreadsheet/insert.rst:334 msgid "Add a new sheet by clicking the :icon:`os-plus` :guilabel:`(add sheet)` icon at the bottom left of the spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:319 +#: ../../content/applications/productivity/spreadsheet/insert.rst:336 msgid "Click :menuselection:`Data --> Re-insert list` from the menu bar, then select the appropriate list." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:321 +#: ../../content/applications/productivity/spreadsheet/insert.rst:338 msgid "Define the number of records to insert and click :guilabel:`Confirm`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:322 -msgid "Edit the :guilabel:`List Name` in the properties pane if needed." +#: ../../content/applications/productivity/spreadsheet/insert.rst:339 +msgid "Edit the :guilabel:`List Name` in the properties panel if needed." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:323 +#: ../../content/applications/productivity/spreadsheet/insert.rst:340 msgid "Rename the sheet by right-clicking on the sheet tab, selecting :guilabel:`Rename`, and entering the new sheet name." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:327 +#: ../../content/applications/productivity/spreadsheet/insert.rst:344 msgid "Duplicating an inserted list by copying and pasting it or by duplicating the sheet into which it has been inserted does not create a new data source. Any changes made to the list's properties would therefore impact any copies of the list." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:334 +#: ../../content/applications/productivity/spreadsheet/insert.rst:351 msgid "Delete a list" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:336 +#: ../../content/applications/productivity/spreadsheet/insert.rst:353 msgid "To fully delete a list and the underlying data source from a spreadsheet, perform the following steps in any order:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:339 -#: ../../content/applications/productivity/spreadsheet/insert.rst:528 +#: ../../content/applications/productivity/spreadsheet/insert.rst:356 +#: ../../content/applications/productivity/spreadsheet/insert.rst:540 msgid "Delete the spreadsheet table using your preferred means, e.g., via keyboard commands, spreadsheet menus, or by deleting the sheet. This deletes the visual representation of the data." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:341 -msgid "From the :ref:`properties pane ` of the relevant list, click the :icon:`fa-cog` :guilabel:`(gear)` icon then :icon:`fa-trash` :guilabel:`Delete`. This deletes the data source of the list from the spreadsheet." +#: ../../content/applications/productivity/spreadsheet/insert.rst:358 +msgid "From the :ref:`properties panel ` of the relevant list, click the :icon:`fa-cog` :guilabel:`(gear)` icon then :icon:`fa-trash` :guilabel:`Delete`. This deletes the data source of the list from the spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:348 +#: ../../content/applications/productivity/spreadsheet/insert.rst:365 msgid "Insert a pivot table" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:351 +#: ../../content/applications/productivity/spreadsheet/insert.rst:368 msgid "Converting an inserted pivot table to a :doc:`dynamic pivot table ` allows you to add, remove, and manipulate dimensions (i.e., columns and rows) and measures. It is therefore possible to insert a basic pivot table with minimal configuration, convert it to a dynamic pivot table, then refine it directly in the spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:356 +#: ../../content/applications/productivity/spreadsheet/insert.rst:373 msgid "To insert a pivot table:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:358 +#: ../../content/applications/productivity/spreadsheet/insert.rst:375 msgid "With the relevant pivot view open in your database, click :guilabel:`Insert in Spreadsheet`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:359 +#: ../../content/applications/productivity/spreadsheet/insert.rst:376 msgid "In the window that opens, edit the :guilabel:`Name of the pivot` if needed." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:361 +#: ../../content/applications/productivity/spreadsheet/insert.rst:378 msgid "This name is used in the sheet name and in the :ref:`pivot table properties `." msgstr "" @@ -11492,51 +11841,51 @@ msgstr "" msgid "Inserting a pivot table in a spreadsheet" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:367 -msgid "Click :guilabel:`Blank spreadsheet` or select in which existing spreadsheet the pivot table should be inserted." +#: ../../content/applications/productivity/spreadsheet/insert.rst:384 +msgid "Click :guilabel:`Blank spreadsheet` to create a new spreadsheet, or select in which existing spreadsheet the pivot table should be inserted." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:378 -msgid "The pivot table is inserted into a new sheet in the spreadsheet. The sheet tab in the bottom bar shows the name of the pivot table followed by the pivot table ID, e.g., *Sales Analysis by Sales Team (Pivot #1)*. A pane on the right side of the screen shows the :ref:`pivot table properties `." +#: ../../content/applications/productivity/spreadsheet/insert.rst:388 +msgid "When inserting a pivot table into a new spreadsheet, the spreadsheet is saved in the **Odoo Documents** app in the :icon:`fa-hdd-o` :guilabel:`My Drive` personal folder." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:384 -msgid "To view the records referenced by an individual cell of a pivot table, right-click on the cell, then click :icon:`fa-eye` :guilabel:`See record`. To return to the spreadsheet, click the name of the spreadsheet in the breadcrumbs at the top of the page." +#: ../../content/applications/productivity/spreadsheet/insert.rst:393 +msgid "The pivot table is inserted into a new sheet in the spreadsheet. The sheet tab in the bottom bar shows the name of the pivot table followed by the pivot table ID, e.g., *Sales Analysis by Sales Team (Pivot #1)*. A panel on the right side of the screen shows the :ref:`pivot table properties `." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:387 +#: ../../content/applications/productivity/spreadsheet/insert.rst:399 msgid "To sever the link between an inserted pivot table and your database, select the entire pivot table, right-click and select :icon:`fa-clone` :guilabel:`Copy`, then right-click again and select :menuselection:`Paste special --> Paste as value`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:390 +#: ../../content/applications/productivity/spreadsheet/insert.rst:402 msgid "Do not modify the pivot table ID in the sheet name, as the inserted pivot table retains this ID for the lifetime of the spreadsheet. This pivot table ID is used in the :ref:`spreadsheet functions ` that retrieve data from your database." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:398 +#: ../../content/applications/productivity/spreadsheet/insert.rst:410 msgid "Pivot table functions" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:400 +#: ../../content/applications/productivity/spreadsheet/insert.rst:412 msgid "An inserted pivot table that has not been converted to a :doc:`dynamic pivot table ` uses the following :doc:`functions ` to retrieve the header and field values, respectively:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:409 +#: ../../content/applications/productivity/spreadsheet/insert.rst:421 msgid "The arguments of the functions are as follows:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:413 +#: ../../content/applications/productivity/spreadsheet/insert.rst:425 msgid "`measure_name`: the technical name of what is being measured, followed by the type of aggregation, e.g., `product_uom_qty:sum`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:415 +#: ../../content/applications/productivity/spreadsheet/insert.rst:427 msgid "`domain_field_name`: the technical name of the field used as a dimension, e.g., `user_id`, or, if the dimension is a time period, the technical name of the date field, followed by the time period, e.g., `date_order:month`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:418 +#: ../../content/applications/productivity/spreadsheet/insert.rst:430 msgid "`domain_value`: the ID of the record, or, if the dimension is a time period, the date or time period targeted." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:422 +#: ../../content/applications/productivity/spreadsheet/insert.rst:434 msgid "Clicking on an individual cell displays the related formula, if relevant, in the formula bar. To display all the formulas of a spreadsheet at the same time, click :menuselection:`View -->` :icon:`fa-eye` :menuselection:`Show --> Formulas` on the menu bar. The example below shows the functions used to retrieve headers and values of a static pivot table." msgstr "" @@ -11544,143 +11893,147 @@ msgstr "" msgid "Functions of a static pivot table" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:433 +#: ../../content/applications/productivity/spreadsheet/insert.rst:445 msgid "Pivot table properties" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:435 +#: ../../content/applications/productivity/spreadsheet/insert.rst:447 msgid "The pivot table properties appear on the right side of the screen when a pivot table is inserted. They can be accessed at any time via the :guilabel:`Data` menu by clicking the relevant pivot table, as prefaced by the :icon:`oi-view-pivot` :guilabel:`(pivot)` icon, or by right-clicking anywhere on the pivot table and clicking :icon:`oi-view-pivot` :guilabel:`See pivot properties`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:440 +#: ../../content/applications/productivity/spreadsheet/insert.rst:452 msgid "The following pivot table properties are shown, some of which can be edited:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:442 +#: ../../content/applications/productivity/spreadsheet/insert.rst:454 msgid ":guilabel:`Pivot #`: the pivot table ID. Pivot table IDs are assigned sequentially as additional pivot tables are inserted in the spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:444 +#: ../../content/applications/productivity/spreadsheet/insert.rst:456 msgid ":guilabel:`Name`: the name of the pivot table. Edit this if needed. Note that editing the name in the pivot table properties does not modify the name shown in the sheet name, and vice versa." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:447 +#: ../../content/applications/productivity/spreadsheet/insert.rst:459 msgid ":guilabel:`Columns` and :guilabel:`Rows`: dimensions you are using to categorize or group data from the model." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:449 +#: ../../content/applications/productivity/spreadsheet/insert.rst:461 msgid ":guilabel:`Measures`: what you are measuring, or analyzing, based on the dimensions you have chosen." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:453 +#: ../../content/applications/productivity/spreadsheet/insert.rst:465 msgid "If you attempt to make changes to the columns, rows, or measures of a pivot table that has just been inserted into a spreadsheet, an error appears at the top right of the screen." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:459 +#: ../../content/applications/productivity/spreadsheet/insert.rst:471 msgid "To be able to manipulate a pivot table's properties, convert a static pivot table to a :ref:`dynamic pivot table `." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:469 -msgid "To :ref:`duplicate ` or :ref:`delete ` a pivot table's data source, click the :icon:`fa-cog` :guilabel:`(gear)` icon then :icon:`fa-copy` :guilabel:`Duplicate` or :icon:`fa-trash` :guilabel:`Delete`." +#: ../../content/applications/productivity/spreadsheet/insert.rst:481 +msgid "To :ref:`duplicate ` or :ref:`delete ` a pivot table's data source, click the :icon:`fa-cog` :guilabel:`(gear)` icon then :icon:`fa-clone` :guilabel:`Duplicate` or :icon:`fa-trash` :guilabel:`Delete`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:477 +#: ../../content/applications/productivity/spreadsheet/insert.rst:489 msgid "Manage an inserted pivot table" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:479 -msgid "Once a pivot table from an Odoo database has been inserted into an Odoo spreadsheet, you can:" +#: ../../content/applications/productivity/spreadsheet/insert.rst:491 +msgid "After a pivot table from an Odoo database has been inserted into an Odoo spreadsheet, you can:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:481 +#: ../../content/applications/productivity/spreadsheet/insert.rst:493 msgid ":ref:`convert it to a dynamic pivot table ` to be able to manipulate the dimensions and measures" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:483 +#: ../../content/applications/productivity/spreadsheet/insert.rst:495 msgid ":ref:`duplicate the pivot table ` to create a new, identical data source" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:485 +#: ../../content/applications/productivity/spreadsheet/insert.rst:497 msgid ":ref:`delete the pivot table and its underlying data source `" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:491 +#: ../../content/applications/productivity/spreadsheet/insert.rst:503 msgid "Duplicate a pivot table" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:493 +#: ../../content/applications/productivity/spreadsheet/insert.rst:505 msgid "Duplicating a pivot table via the pivot table's properties creates an additional data source. This allows for different manipulations to be performed on the same data within one spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:496 +#: ../../content/applications/productivity/spreadsheet/insert.rst:508 msgid "For example, you can see the same data aggregated by different dimensions or use :doc:`global filters ` to offset the date and create pivot tables that compare the current period's data with a previous period." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:500 +#: ../../content/applications/productivity/spreadsheet/insert.rst:512 msgid "To duplicate a pivot table, perform the following steps:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:502 +#: ../../content/applications/productivity/spreadsheet/insert.rst:514 msgid "With the :ref:`pivot table properties ` open, click the :icon:`fa-cog` :guilabel:`(gear)` icon then :icon:`fa-clone` :guilabel:`Duplicate`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:505 -msgid "The duplicated pivot table is automatically inserted into a new sheet in the spreadsheet, with the pivot table properties open in the right pane." +#: ../../content/applications/productivity/spreadsheet/insert.rst:517 +msgid "The duplicated pivot table is automatically inserted into a new sheet in the spreadsheet, with the pivot table properties open in the right panel." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:507 -msgid "Edit the :guilabel:`Name` in the properties pane and the sheet tab if needed." +#: ../../content/applications/productivity/spreadsheet/insert.rst:519 +msgid "Edit the :guilabel:`Name` in the properties panel and the sheet tab if needed." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:509 +#: ../../content/applications/productivity/spreadsheet/insert.rst:521 msgid "The new data source is assigned the next available pivot table ID. For example, if no other pivot tables have been inserted in the meantime, duplicating *Pivot #1* results in the creation of *Pivot #2*." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:514 +#: ../../content/applications/productivity/spreadsheet/insert.rst:526 msgid "Duplicating an inserted pivot table by copying and pasting it or by duplicating the sheet does not create a new data source. Any changes made to the pivot table's properties would therefore impact any copies of the pivot table." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:517 +#: ../../content/applications/productivity/spreadsheet/insert.rst:529 msgid "When a pivot table is duplicated, the new pivot table is by default a :doc:`dynamic pivot table `." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:523 +#: ../../content/applications/productivity/spreadsheet/insert.rst:535 msgid "Delete a pivot table" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:525 +#: ../../content/applications/productivity/spreadsheet/insert.rst:537 msgid "To fully delete a pivot table and the underlying data source from a spreadsheet, perform the following steps in any order:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:530 -msgid "From the :ref:`properties pane ` of the relevant pivot table, click the :icon:`fa-cog` :guilabel:`(gear)` icon then :icon:`fa-trash` :guilabel:`Delete`. This deletes the data source of the pivot table." +#: ../../content/applications/productivity/spreadsheet/insert.rst:542 +msgid "From the :ref:`properties panel ` of the relevant pivot table, click the :icon:`fa-cog` :guilabel:`(gear)` icon then :icon:`fa-trash` :guilabel:`Delete`. This deletes the data source of the pivot table." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:537 +#: ../../content/applications/productivity/spreadsheet/insert.rst:549 msgid "Insert a chart" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:539 +#: ../../content/applications/productivity/spreadsheet/insert.rst:551 msgid "To insert a chart from an Odoo database into an Odoo spreadsheet:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:541 +#: ../../content/applications/productivity/spreadsheet/insert.rst:553 msgid "With the relevant graph view open in your database, click :guilabel:`Insert in Spreadsheet`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:542 +#: ../../content/applications/productivity/spreadsheet/insert.rst:554 msgid "In the window that opens, edit the :guilabel:`Name of the graph` if needed." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:544 -msgid "Click :guilabel:`Blank spreadsheet` or select in which existing spreadsheet the chart should be inserted." +#: ../../content/applications/productivity/spreadsheet/insert.rst:556 +msgid "Click :guilabel:`Blank spreadsheet` to create a new spreadsheet, or select in which existing spreadsheet the chart should be inserted." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:560 +msgid "When inserting a chart into a new spreadsheet, the spreadsheet is saved in the **Odoo Documents** app in the :icon:`fa-hdd-o` :guilabel:`My Drive` personal folder." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:555 +#: ../../content/applications/productivity/spreadsheet/insert.rst:565 msgid "Charts are inserted on the first sheet of the spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:558 +#: ../../content/applications/productivity/spreadsheet/insert.rst:568 msgid "Clicking on a data point in a chart opens the relevant list view in the database. In the example, clicking on :guilabel:`Jessica Childs` opens the list view of all sales by this salesperson that match the domain of the chart." msgstr "" @@ -11688,319 +12041,447 @@ msgstr "" msgid "A clickable link to an Odoo menu plus clickable data point" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:568 +#: ../../content/applications/productivity/spreadsheet/insert.rst:578 msgid "Chart properties" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:570 -msgid "When you insert a chart into a spreadsheet, the chart properties appear on the right side of the screen. Access these at any time via the :guilabel:`Data` menu by clicking the relevant chart, as prefaced by the :icon:`fa-bar-chart` :guilabel:`(chart)` icon. Alternatively, hover over the chart then click the :icon:`fa-bars` :guilabel:`(menu)` icon and click :icon:`fa-pencil-square-o` :guilabel:`Edit`." +#: ../../content/applications/productivity/spreadsheet/insert.rst:580 +msgid "When you insert a chart into a spreadsheet, the chart properties appear on the right side of the screen. Access these at any time via the :guilabel:`Data` menu by clicking the relevant chart, as prefaced by the :icon:`fa-bar-chart` :guilabel:`(chart)` icon. Alternatively, hover over the chart then click the :icon:`fa-bars` :guilabel:`(menu)` icon and click :icon:`fa-pencil-square-o` :guilabel:`Edit`." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:586 +msgid "In the chart properties, the :icon:`fa-sliders` :guilabel:`Configuration` and :icon:`fa-paint-brush` :guilabel:`Design` tabs let you modify various elements of the chart." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:592 +msgid "The :icon:`fa-sliders` :guilabel:`Configuration` tab includes the following sections:" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:594 +msgid ":guilabel:`Chart type`: the type of chart. By default, this indicates the type of chart you selected in the graph view in the database before inserting the chart in the spreadsheet." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:597 +msgid "After a chart has been inserted, more chart types are available. Click the dropdown menu to select the most appropriate chart type for the data." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:601 +msgid "The chart types in the :guilabel:`Other` tab below are only available when creating a chart from spreadsheet data; an inserted chart cannot be converted to a chart type shown in that tab. All other chart types are available for both inserted charts and when creating a chart directly from spreadsheet data." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:608 +msgid "Line" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Line chart icon" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:613 +msgid ":guilabel:`Line`: best for showing trends or changes over time, such as sales growth across months or temperature variations." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Stacked line chart icon" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:619 +msgid ":guilabel:`Stacked Line`: useful for visualizing cumulative trends where multiple series contribute to a total, like revenue by department over time." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Combo chart icon" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:625 +msgid ":guilabel:`Combo`: combines multiple chart types (e.g., bars and lines) to compare different data types or highlight key metrics alongside trends." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:628 +msgid "Column" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Column chart icon" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:633 +msgid ":guilabel:`Column`: ideal for comparing values across discrete categories, such as sales per product or revenue by region." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Stacked column chart icon" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:639 +msgid ":guilabel:`Stacked Column`: displays part-to-whole relationships within categories, such as regional contributions to total sales." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:642 +msgid "Bar" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Bar chart icon" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:647 +msgid ":guilabel:`Bar`: similar to a column chart but horizontal, making it better for comparing long category names or datasets." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Stacked bar chart icon" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:653 +msgid ":guilabel:`Stacked Bar`: highlights cumulative contributions across categories, often used in demographic or resource allocation analysis." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:656 +msgid "Area" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Area chart icon" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:661 +msgid ":guilabel:`Area`: similar to a line chart but fills the area beneath the lines to emphasize magnitude, perfect for cumulative metrics over time." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Stacked area chart icon" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:667 +msgid ":guilabel:`Stacked Area`: visualizes the composition of changes over time, such as market share by product category." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:670 +msgid "Pie" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:576 -msgid "In the chart properties, the :icon:`fa-sliders` :guilabel:`Configuration` and :icon:`fa-paint-brush` :guilabel:`Design` tabs let you modify various elements of the chart." +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Pie chart icon" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:582 -msgid "The :icon:`fa-sliders` :guilabel:`Configuration` tab includes the following sections:" +#: ../../content/applications/productivity/spreadsheet/insert.rst:675 +msgid ":guilabel:`Pie`: best for showing proportions or percentages of a whole, such as market share or budget allocation." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:584 -msgid ":guilabel:`Chart type`: the type of chart. By default, this indicates the type of chart you selected in the graph view in the database before inserting the chart in the spreadsheet." +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Doughnut chart icon" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:587 -msgid "After a chart has been inserted, more chart types are available. Click the dropdown menu to select the most appropriate chart type for the data." +#: ../../content/applications/productivity/spreadsheet/insert.rst:681 +msgid ":guilabel:`Doughnut`: a variation of the pie chart with a hollow center, offering similar use cases but with a modern aesthetic." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:592 -msgid "Line" +#: ../../content/applications/productivity/spreadsheet/insert.rst:684 +msgid "Hierarchical" msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Line chart icon" +msgid "Sunburst chart icon" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:597 -msgid ":guilabel:`Line`: best for showing trends or changes over time, such as sales growth across months or temperature variations." +#: ../../content/applications/productivity/spreadsheet/insert.rst:689 +msgid ":guilabel:`Sunburst`: a variation of the doughnut chart with hierarchical rings, showcasing part-to-whole relationships across multiple levels." msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Stacked line chart icon" +msgid "Treemap chart icon" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:603 -msgid ":guilabel:`Stacked Line`: useful for visualizing cumulative trends where multiple series contribute to a total, like revenue by department over time." +#: ../../content/applications/productivity/spreadsheet/insert.rst:695 +msgid ":guilabel:`Treemap`: a multi-level rectangular chart that displays hierarchical data through nested rectangles, ideal for illustrating proportions and categories." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:606 -msgid "Column" +#: ../../content/applications/productivity/spreadsheet/insert.rst:698 +msgid "Miscellaneous" msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Column chart icon" +msgid "Scatter chart icon" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:611 -msgid ":guilabel:`Column`: ideal for comparing values across discrete categories, such as sales per product or revenue by region." +#: ../../content/applications/productivity/spreadsheet/insert.rst:703 +msgid ":guilabel:`Scatter`: ideal for analyzing relationships or correlations between two numerical variables, such as price vs. quantity sold." msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Stacked column chart icon" +msgid "Waterfall chart icon" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:617 -msgid ":guilabel:`Stacked Column`: displays part-to-whole relationships within categories, such as regional contributions to total sales." +#: ../../content/applications/productivity/spreadsheet/insert.rst:709 +msgid ":guilabel:`Waterfall`: ideal for visualizing cumulative effects of sequential positive and negative values, such as profit/loss analysis." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:620 -msgid "Area" +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Population pyramid chart icon" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:715 +msgid ":guilabel:`Population Pyramid`: a specialized chart for comparing distributions, often used in demographics, such as age and gender group analysis." msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Area chart icon" +msgid "Radar chart icon" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:625 -msgid ":guilabel:`Area`: similar to a line chart but fills the area beneath the lines to emphasize magnitude, perfect for cumulative metrics over time." +#: ../../content/applications/productivity/spreadsheet/insert.rst:721 +msgid ":guilabel:`Radar`: displays multivariate data as a polygon on axes radiating from a center, allowing for profile comparisons across multiple variables." msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Stacked area chart icon" +msgid "Filled radar chart icon" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:631 -msgid ":guilabel:`Stacked Area`: visualizes the composition of changes over time, such as market share by product category." +#: ../../content/applications/productivity/spreadsheet/insert.rst:727 +msgid ":guilabel:`Filled radar`: fills the area within the radar chart's polygon, emphasizing the overall magnitude of values across different attributes for comparison." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:634 -msgid "Pie" +#: ../../content/applications/productivity/spreadsheet/insert.rst:0 +msgid "Geo chart icon" +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:733 +msgid ":guilabel:`Geo`: visualizes data on a map using color variations to represent values or categories across different geographical regions." msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Pie chart icon" +msgid "Funnel chart icon" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:639 -msgid ":guilabel:`Pie`: best for showing proportions or percentages of a whole, such as market share or budget allocation." +#: ../../content/applications/productivity/spreadsheet/insert.rst:739 +msgid ":guilabel:`Funnel`: visualizes data that progressively decreases over stages of a process, with the option to display cumulative data for each stage." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:642 +#: ../../content/applications/productivity/spreadsheet/insert.rst:742 msgid "Other" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:644 +#: ../../content/applications/productivity/spreadsheet/insert.rst:744 msgid "When creating a chart from spreadsheet data, rather than inserting one from a graph view, the following chart types are also available:" msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Combo chart icon" +msgid "Gauge chart icon" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:650 -msgid ":guilabel:`Combo`: combines multiple chart types (e.g., bars and lines) to compare different data types or highlight key metrics alongside trends." +#: ../../content/applications/productivity/spreadsheet/insert.rst:750 +msgid ":guilabel:`Gauge`: displays progress toward a goal or a single key metric, such as performance against a target." msgstr "" #: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Bar chart icon" +msgid "Scorecard icon" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:656 -msgid ":guilabel:`Bar`: similar to a column chart but horizontal, making it better for comparing long category names or datasets." +#: ../../content/applications/productivity/spreadsheet/insert.rst:756 +msgid ":guilabel:`Scorecard`: used to summarize key performance indicators (KPIs) in a compact format, such as total sales or conversion rates, and compare to a baseline or a previous value." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Stacked bar chart icon" +#: ../../content/applications/productivity/spreadsheet/insert.rst:762 +msgid ":guilabel:`Link to Odoo menu`: to add a :ref:`clickable link ` from a chart to an Odoo menu item, i.e., a specific view of a model." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:662 -msgid ":guilabel:`Stacked Bar`: highlights cumulative contributions across categories, often used in demographic or resource allocation analysis." +#: ../../content/applications/productivity/spreadsheet/insert.rst:766 +msgid "Design" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Doughnut chart icon" +#: ../../content/applications/productivity/spreadsheet/insert.rst:768 +msgid "Depending on the chart type, the :icon:`fa-paint-brush` :guilabel:`Design` tab has one or more sections." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:668 -msgid ":guilabel:`Doughnut`: A variation of the pie chart with a hollow center, offering similar use cases but with a modern aesthetic." +#: ../../content/applications/productivity/spreadsheet/insert.rst:771 +msgid "The :guilabel:`General` section allows you to modify the following elements:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Scatter chart icon" +#: ../../content/applications/productivity/spreadsheet/insert.rst:773 +msgid ":guilabel:`Background color`: Add or change the background color by clicking on the color dot. Choose one of the standard colors or click the :icon:`fa-plus` icon to manually select a custom color." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:674 -msgid ":guilabel:`Scatter`: ideal for analyzing relationships or correlations between two numerical variables, such as price vs. quantity sold." +#: ../../content/applications/productivity/spreadsheet/insert.rst:776 +msgid ":guilabel:`Chart title`: Edit the chart title, if needed. The font formatting, horizontal alignment, font size, and color of the title can be modified using the editor." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Gauge chart icon" +#: ../../content/applications/productivity/spreadsheet/insert.rst:778 +msgid ":guilabel:`Legend position`: Change the position of the legend or opt to have no legend." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:680 -msgid ":guilabel:`Gauge`: displays progress toward a goal or a single key metric, such as performance against a target." +#: ../../content/applications/productivity/spreadsheet/insert.rst:779 +msgid "Enable :guilabel:`Show values` to add numeric values to the data points on the chart." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Scorecard icon" +#: ../../content/applications/productivity/spreadsheet/insert.rst:782 +msgid "The :guilabel:`Data Series` section allows you to modify the following elements:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:686 -msgid ":guilabel:`Scorecard`: used to summarize key performance indicators (KPIs) in a compact format, such as total sales or conversion rates, and compare to a baseline or a previous value." +#: ../../content/applications/productivity/spreadsheet/insert.rst:784 +msgid ":guilabel:`Series color`: With the relevant data series selected, change the color of the related data points on the chart by clicking on the color dot circle. Choose one of the standard colors or click the :icon:`fa-plus` icon to manually select a custom color." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Waterfall chart icon" +#: ../../content/applications/productivity/spreadsheet/insert.rst:787 +msgid ":guilabel:`Series name`: Edit the name of a data series, if needed." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:693 -msgid ":guilabel:`Waterfall`: ideal for visualizing cumulative effects of sequential positive and negative values, such as profit/loss analysis." +#: ../../content/applications/productivity/spreadsheet/insert.rst:788 +msgid ":guilabel:`Serie type`: For each data series of a :guilabel:`Combo` chart, determine whether the series is shown as a :guilabel:`Bar` or :guilabel:`Line`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:0 -msgid "Population pyramid chart icon" +#: ../../content/applications/productivity/spreadsheet/insert.rst:790 +msgid ":guilabel:`Vertical axis`: For the selected data series of a :guilabel:`Line`, :guilabel:`Area`, or :guilabel:`Column` chart, select whether it should be displayed on the :guilabel:`Left` (primary) or :guilabel:`Right` (secondary) vertical axis." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:699 -msgid ":guilabel:`Population Pyramid`: a specialized chart for comparing distributions, often used in demographics, such as age and gender group analysis." +#: ../../content/applications/productivity/spreadsheet/insert.rst:793 +msgid ":guilabel:`Trend line`: With the relevant data series selected, enable :guilabel:`Show trend line` then select the type of trend line from the dropdown; the options are :guilabel:`Linear`, :guilabel:`Exponential`, :guilabel:`Polynomial`, :guilabel:`Logarithmic`, and :guilabel:`Trailing moving average`. The color of the trend line can be changed by clicking on the color circle." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:704 -msgid ":guilabel:`Link to Odoo menu`: to add a :ref:`clickable link ` from a chart to an Odoo menu item, i.e., a specific view of a model." +#: ../../content/applications/productivity/spreadsheet/insert.rst:798 +msgid "The :guilabel:`Axes` section allows you add a title to one or both axes of a chart. The font formatting, horizontal alignment, font size, and color of the title can be modified using the editor." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:708 -msgid "Design" +#: ../../content/applications/productivity/spreadsheet/insert.rst:802 +msgid "Waterfall charts have a dedicated :guilabel:`Waterfall design` section." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:710 -msgid "Depending on the chart type, the :icon:`fa-paint-brush` :guilabel:`Design` tab has one or more sections." +#: ../../content/applications/productivity/spreadsheet/insert.rst:805 +msgid "Manage an inserted chart" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:713 -msgid "The :guilabel:`General` section lets you modify the following elements:" +#: ../../content/applications/productivity/spreadsheet/insert.rst:807 +msgid "After a chart from an Odoo database has been inserted into an Odoo spreadsheet, you can:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:715 -msgid ":guilabel:`Background color`: Add or change the background color by clicking on the color dot. Choose one of the standard colors or click the :icon:`fa-plus` icon to manually select a custom color." +#: ../../content/applications/productivity/spreadsheet/insert.rst:809 +msgid "move the chart within the same sheet by selecting it, then dragging the chart to the desired position" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:718 -msgid ":guilabel:`Chart title`: Edit the chart title, if needed. The font formatting, horizontal alignment and color of the title can be modified using the editor." +#: ../../content/applications/productivity/spreadsheet/insert.rst:811 +msgid "resize the chart by selecting it, then clicking and dragging the blue markers until the chart is the desired size" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:720 -msgid ":guilabel:`Vertical axis position`: Choose whether the vertical axis is placed on the left or right in line, column, and area charts." +#: ../../content/applications/productivity/spreadsheet/insert.rst:813 +msgid "hover over the chart, then click the :icon:`fa-bars` :guilabel:`(menu)` icon to reveal the following options:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:722 -msgid ":guilabel:`Legend position`: Change the position of the legend or opt to have no legend." +#: ../../content/applications/productivity/spreadsheet/insert.rst:816 +msgid ":icon:`fa-clipboard` :guilabel:`Copy` or :icon:`os-cut` :guilabel:`Cut`: to copy or cut a chart with the intention of pasting it *within the same spreadsheet*, click the relevant icon or use the relevant keyboard shortcut. Paste the chart in the desired location by clicking :menuselection:`Edit -->` :icon:`os-paste` :menuselection:`Paste` from the menu bar or use the relevant keyboard shortcut." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:723 -msgid "Enable :guilabel:`Show values` to add numeric values to the data points on the chart." +#: ../../content/applications/productivity/spreadsheet/insert.rst:823 +msgid "Copying/cutting and pasting a chart in this way maintains the link between the chart and your database. The data in the pasted chart remains up-to-date, and clicking on a data point opens the related list view in the database." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:725 -msgid "Enable :guilabel:`Show trend line` to add a trend line to line, column, and area charts." +#: ../../content/applications/productivity/spreadsheet/insert.rst:827 +msgid ":guilabel:`Copy as image`: to copy an image of a chart to your clipboard with the intention of pasting it *in any location within or outside your spreadsheet*, click :guilabel:`Copy as image`. Paste the image in the desired location using the paste function of the destination program or the relevant keyboard shortcut." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:727 -msgid "For line, column, and area charts, the :guilabel:`Axis` section lets you add a title to one or both axes. The font formatting, horizontal alignment, and color of the title can be modified using the editor." +#: ../../content/applications/productivity/spreadsheet/insert.rst:833 +msgid "Copying and pasting a static image of a chart implies there is no longer any link between the chart and your database." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:836 +msgid ":icon:`fa-trash-o` :guilabel:`Delete`: delete a chart and its underlying :ref:`data source ` by clicking :icon:`fa-trash-o` :guilabel:`Delete`. Alternatively, use your preferred keyboard command to delete a chart and its data source." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:734 +#: ../../content/applications/productivity/spreadsheet/insert.rst:843 msgid "Insert clickable links" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:736 +#: ../../content/applications/productivity/spreadsheet/insert.rst:845 msgid "Adding links to related or supporting information can make your report or dashboard more user-friendly and effective." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:739 +#: ../../content/applications/productivity/spreadsheet/insert.rst:848 msgid "You can :ref:`insert a clickable link from any spreadsheet cell ` to:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:742 +#: ../../content/applications/productivity/spreadsheet/insert.rst:851 msgid "an Odoo menu item" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:743 +#: ../../content/applications/productivity/spreadsheet/insert.rst:852 msgid "another sheet inside the same spreadsheet" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:744 +#: ../../content/applications/productivity/spreadsheet/insert.rst:853 msgid "an external URL" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:747 +#: ../../content/applications/productivity/spreadsheet/insert.rst:855 +msgid "You can :ref:`insert a clickable link from any chart ` to an Odoo menu item." +msgstr "" + +#: ../../content/applications/productivity/spreadsheet/insert.rst:859 msgid "Clicking a link to a menu item provides the same result as navigating via the Odoo menu within an app, e.g., the menu item :guilabel:`Sales/Orders/Quotations` corresponds to the default view when navigating to :menuselection:`Sales --> Orders --> Quotations`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:750 +#: ../../content/applications/productivity/spreadsheet/insert.rst:862 msgid "It is also possible to insert a clickable link to a specific view of a model in a spreadsheet starting from the view itself. However, as this method inserts each new link in a new sheet, it is more efficient to create links to specific views starting from the spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:754 -msgid "You can :ref:`insert a clickable link from any chart ` to an Odoo menu item." +#: ../../content/applications/productivity/spreadsheet/insert.rst:867 +msgid "Use the middle mouse button or `Ctrl` + left-click (Microsoft/Linux), or `Command` + left-click (Mac OS) to open clickable links in a new browser tab." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:760 +#: ../../content/applications/productivity/spreadsheet/insert.rst:873 msgid "Insert a clickable link from a cell" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:762 +#: ../../content/applications/productivity/spreadsheet/insert.rst:875 msgid "To insert a clickable link from a cell:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:764 +#: ../../content/applications/productivity/spreadsheet/insert.rst:877 msgid "Click :menuselection:`Insert -->` :icon:`fa-link` :menuselection:`Link` from the menu bar or right-click on the cell, then click :icon:`fa-link` :guilabel:`Insert link`. Next, depending on the desired outcome, perform one of the following actions:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:768 +#: ../../content/applications/productivity/spreadsheet/insert.rst:881 msgid "Click the :icon:`fa-bars` :guilabel:`(menu)` icon, then :guilabel:`Link an Odoo menu`. Select the relevant menu item from the list or click :guilabel:`Search more` to choose from a list of all menu items. Click :guilabel:`Confirm`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:771 +#: ../../content/applications/productivity/spreadsheet/insert.rst:884 msgid "Click the :icon:`fa-bars` :guilabel:`(menu)` icon, then :guilabel:`Link sheet`, then choose the relevant sheet from the current spreadsheet." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:773 +#: ../../content/applications/productivity/spreadsheet/insert.rst:886 msgid "Under :guilabel:`Link`, type a URL." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:775 +#: ../../content/applications/productivity/spreadsheet/insert.rst:888 msgid "Enter or edit the label for the link in the :guilabel:`Text` field." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:781 +#: ../../content/applications/productivity/spreadsheet/insert.rst:894 msgid "Insert a clickable link from a chart" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:783 +#: ../../content/applications/productivity/spreadsheet/insert.rst:896 msgid "To insert a clickable link from a chart to an Odoo menu item:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:785 +#: ../../content/applications/productivity/spreadsheet/insert.rst:898 msgid "Hover over the top right of the chart's box, then click the :icon:`fa-bars` :guilabel:`(menu)` icon, then :icon:`fa-pencil-square-o` :guilabel:`Edit`. The chart properties appear at the right of the screen." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:788 -msgid "At the bottom of the :icon:`fa-sliders` :guilabel:`Configuration` tab of the chart properties pane, click under :guilabel:`Link to Odoo menu`, then select a menu." +#: ../../content/applications/productivity/spreadsheet/insert.rst:901 +msgid "At the bottom of the :icon:`fa-sliders` :guilabel:`Configuration` tab of the chart properties panel, click under :guilabel:`Link to Odoo menu`, then select a menu." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:791 +#: ../../content/applications/productivity/spreadsheet/insert.rst:904 msgid "Hover over the top right of the chart's box to see that a new :icon:`fa-external-link` :guilabel:`(external link)` icon has been added." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:797 +#: ../../content/applications/productivity/spreadsheet/insert.rst:910 msgid "Insert financial data" msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:799 +#: ../../content/applications/productivity/spreadsheet/insert.rst:912 msgid "When building reports and dashboards, it may be useful to include certain accounting-related data, such as account IDs, credits and debits for specific accounts, and dates of the start and end of the tax year." msgstr "" -#: ../../content/applications/productivity/spreadsheet/insert.rst:803 +#: ../../content/applications/productivity/spreadsheet/insert.rst:916 msgid ":ref:`Odoo-specific spreadsheet functions ` allow you to retrieve such accounting data from your database and insert it into a spreadsheet." msgstr "" @@ -12017,61 +12498,57 @@ msgid "Create a template" msgstr "" #: ../../content/applications/productivity/spreadsheet/templates.rst:17 -msgid "Any spreadsheet can be saved as a template. Open the relevant spreadsheet or :ref:`create a new one `. From the menu bar, click :menuselection:`File --> Save as template`. Modify the default :guilabel:`Template Name` if needed and click :guilabel:`Confirm`." +msgid "Any spreadsheet can be saved as a template. Open the relevant spreadsheet or :ref:`create a new one `. From the menu bar, click :menuselection:`File -->` :icon:`os-save` :menuselection:`Save as template`. Modify the default :guilabel:`Template Name` if needed and click :guilabel:`Confirm`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:22 +#: ../../content/applications/productivity/spreadsheet/templates.rst:23 msgid "Once a spreadsheet is saved as a template, any further changes to the open spreadsheet are saved only in that spreadsheet. To make changes to the template, you need to :ref:`edit the template `." msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:26 +#: ../../content/applications/productivity/spreadsheet/templates.rst:27 msgid "You can also create a template by :ref:`making a copy of an existing template and editing it `." msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:32 +#: ../../content/applications/productivity/spreadsheet/templates.rst:33 msgid "Use templates" msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:34 +#: ../../content/applications/productivity/spreadsheet/templates.rst:35 msgid "To create a new spreadsheet using a template, open the Documents app and click :menuselection:`New --> Spreadsheet`. Select the relevant template and click :guilabel:`Create`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:37 +#: ../../content/applications/productivity/spreadsheet/templates.rst:38 msgid "Alternatively, go to :menuselection:`Documents --> Configuration --> Spreadsheet Templates` then, on the line of the relevant template, click :icon:`fa-plus` :guilabel:`New spreadsheet`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:41 +#: ../../content/applications/productivity/spreadsheet/templates.rst:42 msgid "By default, the new spreadsheet inherits the name of the template, which is shown at the top of the screen. To rename the spreadsheet, click the name and edit it." msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:47 +#: ../../content/applications/productivity/spreadsheet/templates.rst:48 msgid "Manage and edit templates" msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:49 +#: ../../content/applications/productivity/spreadsheet/templates.rst:50 msgid "Manage templates by going to :menuselection:`Documents --> Configuration --> Spreadsheet Templates`. Remove the :guilabel:`My Templates` :ref:`filter ` to view all templates in the database." msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:53 +#: ../../content/applications/productivity/spreadsheet/templates.rst:54 msgid "Various actions are possible:" msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:55 +#: ../../content/applications/productivity/spreadsheet/templates.rst:56 msgid "Copy an existing template by clicking :icon:`fa-clone` :guilabel:`Make a copy` at the right of the screen. The new template appears at the bottom of the list. Click the :guilabel:`Name` to edit it." msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:59 +#: ../../content/applications/productivity/spreadsheet/templates.rst:60 msgid "Edit an existing template (including one you just copied) by clicking :icon:`fa-pencil` :guilabel:`Edit`, then making the required changes. Modifications are automatically saved." msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:63 +#: ../../content/applications/productivity/spreadsheet/templates.rst:64 msgid "Delete a template by ticking the checkbox next to it, clicking :icon:`fa-cog` :guilabel:`Actions`, then :guilabel:`Delete`." msgstr "" -#: ../../content/applications/productivity/spreadsheet/templates.rst:67 -msgid "Use the download button under the :guilabel:`Spreadsheet file` column to export a template in JSON format. The file can be imported into another database." -msgstr "" - #: ../../content/applications/productivity/to_do.rst:3 msgid "To-do" msgstr "" @@ -12318,18 +12795,22 @@ msgid "To configure Axivox in Odoo, go to the :menuselection:`Apps` application, msgstr "" #: ../../content/applications/productivity/voip/axivox/axivox_config.rst:22 -msgid "Next, go to :menuselection:`Settings app --> General Settings --> Integrations section`, and fill out the :guilabel:`VoIP` field:" +msgid "Next, go to :menuselection:`Settings app --> General Settings --> Integrations section --> VoIP`. Click :guilabel:`Manage Providers`, then :guilabel:`New`. Fill in the following information:" msgstr "" #: ../../content/applications/productivity/voip/axivox/axivox_config.rst:25 -msgid ":guilabel:`OnSIP Domain`: set the domain created by Axivox for the account (e.g., `yourcompany.axivox.com`)" +msgid ":guilabel:`Name`: type `Axivox`" msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:27 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:26 msgid ":guilabel:`WebSocket`: type in `wss://pabx.axivox.com:3443`" msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:28 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:27 +msgid ":guilabel:`OnSIP Domain`: set the domain created by Axivox for the account (e.g., `yourcompany.axivox.com`)" +msgstr "" + +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:29 msgid ":guilabel:`VoIP Environment`: set as :guilabel:`Production`" msgstr "" @@ -12337,47 +12818,47 @@ msgstr "" msgid "Integration of Axivox as VoIP provider in an Odoo database." msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:35 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:36 msgid "Access the domain on the Axivox administrative panel by navigating to `https://manage.axivox.com/ `_. After logging into the portal, go to :menuselection:`Users --> Edit (next to any user) --> SIP Identifiers tab --> Domain`." msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:40 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:41 msgid "Configure VoIP user in Odoo" msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:42 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:43 msgid "Next, the user is configured in Odoo, which **must** take place for every Axivox/Odoo user using VoIP." msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:45 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:46 msgid "In Odoo, go to :menuselection:`Settings app --> Users & Companies --> Users`, then open the desired user's form to configure :abbr:`VoIP (Voice over Internet Protocol)`. Under the :guilabel:`Preferences` tab, fill out the :guilabel:`VOIP Configuration` section:" msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:49 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:50 msgid ":guilabel:`VoIP username` / :guilabel:`Extension number`: (Axivox) :guilabel:`SIP username`" msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:50 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:51 msgid ":guilabel:`OnSip Auth Username`: (Axivox) :guilabel:`SIP username`" msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:51 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:52 msgid ":guilabel:`VoIP Secret`: (Axivox) :guilabel:`SIP Password`" msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:52 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:53 msgid ":guilabel:`Call from another device`: option to always transfer phone calls to handset" msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:53 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:54 msgid ":guilabel:`External device number`: SIP external phone extension" msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:54 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:55 msgid ":guilabel:`Reject incoming calls`: option to reject all incoming calls" msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:55 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:56 msgid ":guilabel:`How to place calls on mobile`: method to make calls on a mobile device" msgstr "" @@ -12385,7 +12866,7 @@ msgstr "" msgid "Integration of Axivox user in the Odoo user preference." msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:62 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:63 msgid "Access the domain on the Axivox administrative panel by navigating to `https://manage.axivox.com/ `_. After logging into the portal, go to :menuselection:`Users --> Edit (next to the user) --> SIP Identifiers tab --> SIP username / SIP password`." msgstr "" @@ -12393,7 +12874,7 @@ msgstr "" msgid "SIP credentials in the Axivox manager." msgstr "" -#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:71 +#: ../../content/applications/productivity/voip/axivox/axivox_config.rst:72 msgid "When entering the :guilabel:`SIP Password` into the user's :guilabel:`Preferences` tab, this value **must** be typed out manually and **not** pasted in. Pasting in causes a `401 server rejection error`." msgstr "" @@ -14754,6 +15235,122 @@ msgstr "" msgid "See `Linphone's wiki-documentation page `_." msgstr "" +#: ../../content/applications/productivity/voip/didww.rst:3 +msgid "VoIP services in Odoo with DIDWW" +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:5 +msgid "*DIDWW* is a global *VoIP* and SIP trunking provider. An active account with DIDWW is required to use this service." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:8 +msgid "Before creating an account with DIDWW, make sure that the company's location and the applicable regions are supported by DIDWW's services." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:12 +msgid "DIDWW setup" +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:14 +msgid "After verifying country coverage and availability, create an account with `DIDWW `_. Then navigate to the `DIDWW Dashboard `_." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:18 +msgid "To transfer existing numbers from an existing telephone network service provider, follow the steps outlined on the `DIDWW website `_." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:22 +msgid "Purchase new numbers" +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:24 +msgid "To puchase new phone numbers, click :guilabel:`Buy Numbers` in the dashboard, then follow the instructions to complete the purchase." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:27 +msgid "When buying a new number, it **must** support both inbound calls and Local CLI." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:-1 +msgid "The purchase dashboard in DIDWW." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:33 +msgid "Enable phone.systems" +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:35 +msgid "Next, click :guilabel:`Cloud Phone System` in the dashboard sidebar. Then, click :guilabel:`Launch admin UI`." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:39 +msgid "The *phone.systems PBX* feature is an extra paid service in DIDWW, and may require additional fees." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:42 +msgid "To create a new user, click :guilabel:`Users`, click the plus sign, then enter the necessary information." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:-1 +msgid "The add a new user screen in DIDWW." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:48 +msgid "Click :guilabel:`Contact Methods`, then click the plus sign to add a new *SIP Device Route*." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:50 +msgid "Configure or add the following parameters:" +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:52 +msgid ":guilabel:`Allowed Codecs`: `OPUS`, `PCMU`, `PCMA`, `telephone-event`, `g722`, `g729`." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:53 +msgid ":guilabel:`Allowed media types`: `SRTP-DTLS`" +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:54 +msgid ":guilabel:`Default media type`: `SRTP-DTLS`" +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:55 +msgid ":guilabel:`Transport protocol`: `UDP`, `TCP`, `WSS`, `TLS`" +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:-1 +msgid "The settings for a new contact method in DIDWW." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:61 +msgid "If no phone number available from drop-down selection in *Inbound and Outbound DID/Caller ID* selection, the :guilabel:`Inbound voice trunk` needs to be modified. Navigate to the dashboard, then click :guilabel:`My Numbers`. Scroll to :guilabel:`Configuration`. In the :guilabel:`Inbound voice trunk` field, select :guilabel:`phone.systems`." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:67 +msgid "Odoo setup" +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:69 +msgid "In *Odoo*, navigate to :menuselection:`Settings app --> Integrations --> VoIP --> Manage Providers`. Click :guilabel:`New`." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:72 +msgid "Enter the name, `DIDWW`, then update the :guilabel:`WebSocket` field with `wss://sip.phone.systems`. Under :guilabel:`PBX Server IP`, enter `sip.phone.systems`." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:-1 +msgid "The VoIP providers page in Odoo." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:78 +msgid "To configure a user's VoIP provider, click the user avatar icon in the top-right corner of the database, and then choose :guilabel:`My Preferences` from the sub-menu. Then click into the :guilabel:`VoIP` tab, and under the :guilabel:`Voip Provider` field, select :guilabel:`DIDWW`. Finally, enter the :guilabel:`Voip Username` and :guilabel:`Voip Secret`, then save." +msgstr "" + +#: ../../content/applications/productivity/voip/didww.rst:-1 +msgid "DIDWW provider, username, and secret credentials entered." +msgstr "" + #: ../../content/applications/productivity/voip/onsip.rst:3 msgid "Use VoIP services in Odoo with OnSIP" msgstr "" @@ -15529,7 +16126,7 @@ msgid "`Magic Sheet - WhatsApp configuration [PDF] Configuration --> WhatsApp Business Accounts`." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:472 +#: ../../content/applications/productivity/whatsapp.rst:473 msgid "Go live with the Meta app" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:474 +#: ../../content/applications/productivity/whatsapp.rst:475 msgid "Finally, to launch the app, the Meta app must be set to :guilabel:`Live` in the Meta developer console. Navigate to ``_ and click on the app that is being configured. In the top menu, toggle the :guilabel:`App Mode` field from :guilabel:`Development` to :guilabel:`Live`." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:480 +#: ../../content/applications/productivity/whatsapp.rst:481 msgid "If the app status is not set to *live*, then the database will only be able to contact the test numbers specified in the developer console." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:484 +#: ../../content/applications/productivity/whatsapp.rst:485 msgid "A privacy policy URL must be set in order for the app to be set to live. Go to the Meta developer console, ``_ and select the app that Odoo is being configured in. Then, using the menu on the left side of the screen, go to :menuselection:`App Settings --> Basic`. Then, enter the privacy policy hyperlink address under the :guilabel:`Privacy Policy URL` field of the form. Click :guilabel:`Save changes` to apply the privacy policy to the app." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:491 +#: ../../content/applications/productivity/whatsapp.rst:492 msgid "Once the app has gone live in the Meta developer console, a confirmation email is sent to the administrator." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:497 +#: ../../content/applications/productivity/whatsapp.rst:498 msgid "WhatsApp templates" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:499 +#: ../../content/applications/productivity/whatsapp.rst:500 msgid "WhatsApp templates are saved messages that are used repeatedly to send messages from the database. They allow users to send quality communications, without having to compose the same text repeatedly." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:502 +#: ../../content/applications/productivity/whatsapp.rst:503 msgid "Creating different templates that are tailored to specific situations lets users choose the right message for the right audience. This increases the quality of the message and the overall engagement rate with the customer." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:506 +#: ../../content/applications/productivity/whatsapp.rst:507 msgid "WhatsApp templates can be created on both the Odoo and Meta consoles. The following process will overview the process for creating templates in Odoo and then afterward in Meta." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:510 +#: ../../content/applications/productivity/whatsapp.rst:511 msgid "WhatsApp has an approval process that must be completed before the template can be used. :ref:`productivity/whatsapp/approval`." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:516 +#: ../../content/applications/productivity/whatsapp.rst:517 msgid "Creating templates in Odoo" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:518 +#: ../../content/applications/productivity/whatsapp.rst:519 msgid "To access and create WhatsApp templates, begin by navigating to the :menuselection:`WhatsApp app --> Templates` dashboard." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:521 +#: ../../content/applications/productivity/whatsapp.rst:522 msgid "At the bottom of an individual template's form, there are three tabs: :guilabel:`Body`, :guilabel:`Buttons`, and :guilabel:`Variables`; these three tabs combined create the WhatsApp template." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:525 +#: ../../content/applications/productivity/whatsapp.rst:526 msgid "The text is entered into the :guilabel:`Body` tab, and dynamic content that is called out in the :guilabel:`Body` tab is specified in the :guilabel:`Variables` tab. Every piece of dynamic content (e.g., placeholders) in the message (body) is specifically called out and specified in the :guilabel:`Variables` tab." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:530 +#: ../../content/applications/productivity/whatsapp.rst:531 msgid "Templates are prefabricated layouts that allow users to send professional looking messages to customers. These templates are capable of containing dynamic data that will populate in the end message using variables that are set in the template configuration. For example, messages can contain the end user's name, call out specific products, or reference a sales order, to name a few convenient and impactful variables." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:536 +#: ../../content/applications/productivity/whatsapp.rst:537 msgid "To create a WhatsApp template, go to the :menuselection:`WhatsApp app --> Templates` dashboard and click :guilabel:`New`. On the form, enter a :guilabel:`Name` for the template, and select a :guilabel:`Language`." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:541 +#: ../../content/applications/productivity/whatsapp.rst:542 msgid "In order to complete this next task, administrator access rights are needed to edit the :guilabel:`Applies to` field. See this :doc:`access rights documentation <../general/users/access_rights>` for more information." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:545 +#: ../../content/applications/productivity/whatsapp.rst:546 msgid "In the :guilabel:`Account` drop-down menu, select the *WhatsApp business account* in Odoo that this template should link to. Next, under the :guilabel:`Applies to` field select the *model* the server action will apply to for this template." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:550 -msgid "These models can also be accessed in :ref:`developer mode `. On a contact form (or similar relevant form in Odoo), navigate to the model that is referenced, and hover over any field name. A box of backend information will reveal itself with the specific Odoo :guilabel:`Model` name in the backend. Search (using the front-end name) for this model in the :guilabel:`Applies to` drop-down menu in the WhatsApp template." +#: ../../content/applications/productivity/whatsapp.rst:551 +msgid "These models can also be accessed in :ref:`developer mode `. On a contact form (or similar relevant form in Odoo), navigate to the model that is referenced, and hover over any field name. The backend information box displays the Odoo :guilabel:`Model` name. Search (using the front-end name) for this model in the :guilabel:`Applies to` drop-down menu in the WhatsApp template." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:557 +#: ../../content/applications/productivity/whatsapp.rst:558 msgid "Often when changing the model or :guilabel:`Applies to` field, the :guilabel:`Phone Field` may produce an error The :guilabel:`Phone Field` should always be set to the `Phone` or `Mobile` model." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:561 +#: ../../content/applications/productivity/whatsapp.rst:562 msgid "To search available fields, type in the front-end name in the search box. This finds a result from all of the available fields for the model (:guilabel:`Applies to`) that the template is created for." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:565 +#: ../../content/applications/productivity/whatsapp.rst:566 msgid "In order to find specific fields, multiple levels may need to be navigated in the search results box. Use the :guilabel:`> (right chevron)` and :guilabel:`⬅️ (left arrow)` icons to navigate between the menu levels." msgstr "" @@ -16129,83 +16730,83 @@ msgstr "" msgid "Searching for the phone field in the search bar." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:572 +#: ../../content/applications/productivity/whatsapp.rst:573 msgid "Change the :guilabel:`Category` to fit either a :guilabel:`Marketing`, :guilabel:`Utility`, or :guilabel:`Authentication` category. In most instances the first two options are used, unless the user would like to send a password reset or something security related. Set to :guilabel:`Marketing` should there be anything promotional being sent and set to :guilabel:`Utility` should there be general transactional messages being sent (i.e., sales order, event ticket, etc)." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:579 +#: ../../content/applications/productivity/whatsapp.rst:580 msgid "Specifying an incorrect category can cause a flag/rejected status from Meta during the approval process." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:582 +#: ../../content/applications/productivity/whatsapp.rst:583 msgid "Add any :guilabel:`Users` that are allowed to use this template. In the right-side column, a :guilabel:`Header type` can be configured along with a :guilabel:`Header message`, as well." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:585 +#: ../../content/applications/productivity/whatsapp.rst:586 msgid "The available :guilabel:`Header types` are as follows:" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:588 +#: ../../content/applications/productivity/whatsapp.rst:589 msgid "Image" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:589 +#: ../../content/applications/productivity/whatsapp.rst:590 msgid "Video" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:590 +#: ../../content/applications/productivity/whatsapp.rst:591 msgid "Document" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:591 +#: ../../content/applications/productivity/whatsapp.rst:592 msgid "Location (variables need to be set)" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:593 +#: ../../content/applications/productivity/whatsapp.rst:594 msgid "Navigate to the :guilabel:`Body` tab to configure the main message of the template." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:595 +#: ../../content/applications/productivity/whatsapp.rst:596 msgid "When all the necessary changes are made to the template, click on the :guilabel:`Submit for approval` button in the upper-left corner. This will cause the status of the template to change to :guilabel:`Pending`." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:599 +#: ../../content/applications/productivity/whatsapp.rst:600 msgid "The status will remain in :guilabel:`Pending` until a decision has been made by Meta, whereby a confirmation email will then be sent indicating that the template has been approved (or rejected). The templates will then need to be synced from the Odoo database." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:603 +#: ../../content/applications/productivity/whatsapp.rst:604 msgid "See this section for more information on :ref:`syncing templates `." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:606 +#: ../../content/applications/productivity/whatsapp.rst:607 msgid "Consider the preconfigured demo data templates available in Odoo to use or modify. These templates can be used as-is or modified to suit a specific business need." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:609 +#: ../../content/applications/productivity/whatsapp.rst:610 msgid "To use these templates, navigate to :menuselection:`WhatsApp app --> Templates` and select a preconfigured template. Click :guilabel:`Submit for Approval` to start the approval process. An email gets sent to the administrator of the Meta account when the template has been approved." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:614 +#: ../../content/applications/productivity/whatsapp.rst:615 msgid "Buttons" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:616 +#: ../../content/applications/productivity/whatsapp.rst:617 msgid "Buttons can be added into the message from the :guilabel:`Buttons` tab. Enter the :guilabel:`Type` (either :guilabel:`Visit Website`, :guilabel:`Call Number`, or :guilabel:`Quick Reply`), and then specify the :guilabel:`Button Text`, :guilabel:`Call Number` or :guilabel:`Website URL` (including :guilabel:`Url Type`), depending on the :guilabel:`Type` of button." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:622 +#: ../../content/applications/productivity/whatsapp.rst:623 msgid "Buttons can also be added on the Meta business console. See Meta's WhatsApp template dashboard by navigating to ``_. Then go to :menuselection:`Account tools --> Message templates`." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:627 +#: ../../content/applications/productivity/whatsapp.rst:628 msgid "Using placeholders and variables" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:629 +#: ../../content/applications/productivity/whatsapp.rst:630 msgid "Dynamic variables reference certain fields within the Odoo database to produce unique data in the WhatsApp message when using a template. Dynamic variables are encoded to display fields from within the database, referencing fields from within a model." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:634 +#: ../../content/applications/productivity/whatsapp.rst:635 msgid "Many companies like to customize their WhatsApp messages with a personalized piece of customer information to grab attention. This can be accomplished in Odoo by referencing a field within a model by setting a dynamic variable. For example, a customer's name can be referenced in the email from the :guilabel:`Customer` field on the :guilabel:`Sales Order` model." msgstr "" @@ -16213,15 +16814,15 @@ msgstr "" msgid "WhatsApp message with dynamic variables highlighted." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:642 +#: ../../content/applications/productivity/whatsapp.rst:643 msgid "Dynamic variables can be added in to the :guilabel:`Body` by adding :guilabel:`placeholders` in the *text*. To add a placeholder in the *message body* enter the following text `{{1}}`. For the second placeholder enter `{{2}}` and increase incrementally as more placeholders are added to the text." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:647 +#: ../../content/applications/productivity/whatsapp.rst:648 msgid "*The following is the text from payment receipt template body:*" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:649 +#: ../../content/applications/productivity/whatsapp.rst:650 msgid "Dear {{1}}," msgstr "" @@ -16233,151 +16834,151 @@ msgstr "" msgid "To review your invoice or pay online: {{6}}" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:654 +#: ../../content/applications/productivity/whatsapp.rst:655 msgid "Thank you" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:657 +#: ../../content/applications/productivity/whatsapp.rst:658 msgid ":ref:`productivity/whatsapp/templates`." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:659 +#: ../../content/applications/productivity/whatsapp.rst:660 msgid "These placeholders must be configured on the :guilabel:`Variables` tab of the template before submitting for approval from Meta. To edit the dynamic variables on a template, first change the :guilabel:`Type` to :guilabel:`Field of Model`. This allows Odoo to reference a field within a model to produce unique data in the message being sent." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:664 +#: ../../content/applications/productivity/whatsapp.rst:665 msgid "Next, edit the :guilabel:`Field` of the dynamic variables. The :guilabel:`Applies to` field in the template should be edited prior to ensure the correct model and field are referenced." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:667 +#: ../../content/applications/productivity/whatsapp.rst:668 msgid "To search the available fields, type in the front-end name of the field in the search box. This will find a result from all of the available fields for the model (:guilabel:`Applies to`) that the template is created for. There may be multiple levels that need to be configured." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:672 +#: ../../content/applications/productivity/whatsapp.rst:673 msgid "The following is an example of the variables set for the above placeholders in the payment receipt noted above:" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:680 +#: ../../content/applications/productivity/whatsapp.rst:681 msgid "Sample Value" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:681 +#: ../../content/applications/productivity/whatsapp.rst:682 msgid "Type" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:682 +#: ../../content/applications/productivity/whatsapp.rst:683 msgid "Field" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:683 +#: ../../content/applications/productivity/whatsapp.rst:684 msgid "body - {{1}}" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:684 +#: ../../content/applications/productivity/whatsapp.rst:685 msgid "Azure Interior" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:685 -#: ../../content/applications/productivity/whatsapp.rst:689 -#: ../../content/applications/productivity/whatsapp.rst:693 -#: ../../content/applications/productivity/whatsapp.rst:697 -#: ../../content/applications/productivity/whatsapp.rst:701 +#: ../../content/applications/productivity/whatsapp.rst:686 +#: ../../content/applications/productivity/whatsapp.rst:690 +#: ../../content/applications/productivity/whatsapp.rst:694 +#: ../../content/applications/productivity/whatsapp.rst:698 +#: ../../content/applications/productivity/whatsapp.rst:702 msgid "Field of Model" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:686 +#: ../../content/applications/productivity/whatsapp.rst:687 msgid "`Partner`" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:687 +#: ../../content/applications/productivity/whatsapp.rst:688 msgid "body - {{2}}" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:688 +#: ../../content/applications/productivity/whatsapp.rst:689 msgid "INV/2022/00001" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:690 +#: ../../content/applications/productivity/whatsapp.rst:691 msgid "`Number`" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:691 +#: ../../content/applications/productivity/whatsapp.rst:692 msgid "body - {{3}}" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:692 +#: ../../content/applications/productivity/whatsapp.rst:693 msgid "My Company" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:694 +#: ../../content/applications/productivity/whatsapp.rst:695 msgid "`Company`" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:695 +#: ../../content/applications/productivity/whatsapp.rst:696 msgid "body - {{4}}" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:696 +#: ../../content/applications/productivity/whatsapp.rst:697 msgid "$" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:698 +#: ../../content/applications/productivity/whatsapp.rst:699 msgid "`Currency > Symbol`" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:699 +#: ../../content/applications/productivity/whatsapp.rst:700 msgid "body - {{5}}" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:700 +#: ../../content/applications/productivity/whatsapp.rst:701 msgid "4000" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:702 +#: ../../content/applications/productivity/whatsapp.rst:703 msgid "`Amount`" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:703 +#: ../../content/applications/productivity/whatsapp.rst:704 msgid "body - {{6}}" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:704 +#: ../../content/applications/productivity/whatsapp.rst:705 msgid "\\https://.." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:705 +#: ../../content/applications/productivity/whatsapp.rst:706 msgid "Portal link" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:709 +#: ../../content/applications/productivity/whatsapp.rst:710 msgid "For example, in the :guilabel:`Body` tab, if the following is typed, \"Hello {{1}},\", then `{{1}}` must be set in the :guilabel:`Variables` tab. For this specific case, the message should greet the customer by name, so the `{{1}}` should be configured to populate the `{{1}}` :guilabel:`Field` with the :guilabel:`Customer` name." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:715 +#: ../../content/applications/productivity/whatsapp.rst:716 msgid "Customizing WhatsApp templates is out of the scope of Odoo Support." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:720 +#: ../../content/applications/productivity/whatsapp.rst:721 msgid "Meta template approval" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:722 +#: ../../content/applications/productivity/whatsapp.rst:723 msgid "After updating the dynamic variables on the template, the template needs to be submitted to Meta for approval again. Click :guilabel:`Submit for Approval` to start the approval process. An email will be sent to the administrator of the Meta account when the template has been approved." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:726 +#: ../../content/applications/productivity/whatsapp.rst:727 msgid "Following the approval from Meta, sync the templates again in the Odoo database. See this documentation: :ref:`productivity/whatsapp/sync`." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:730 +#: ../../content/applications/productivity/whatsapp.rst:731 msgid "To see the status to Meta's WhatsApp template dashboard by navigating to ``_. Then go to :menuselection:`Account tools --> Message templates`." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:737 +#: ../../content/applications/productivity/whatsapp.rst:738 msgid "Syncing templates" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:739 +#: ../../content/applications/productivity/whatsapp.rst:740 msgid "Templates must be synced on the Odoo database once they are approved by the Meta team. To do so, begin by navigating to :menuselection:`WhatsApp app --> Configuration --> WhatsApp Business Accounts` and select the configuration that should be synced. Under the section marked :menuselection:`Sending messages`, towards the bottom, click on :guilabel:`Sync Templates`. Meta will update the templates that are approved so that they can be utilized with various apps in the database." msgstr "" @@ -16386,19 +16987,19 @@ msgid "Syncing Meta WhatsApp templates to the Odoo database, with the 'Sync Temp "highlighted." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:750 +#: ../../content/applications/productivity/whatsapp.rst:751 msgid "A successful message in green appears in the upper-right corner with the number of templates updated." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:754 +#: ../../content/applications/productivity/whatsapp.rst:755 msgid "Templates can also be synced individually from the template itself. Navigate to the :menuselection:`WhatsApp app --> Templates` dashboard and select the template to sync. Then, click on the :guilabel:`Sync Template` button located in the top menu of the template's form." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:759 +#: ../../content/applications/productivity/whatsapp.rst:760 msgid "Creating templates in Meta" msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:761 +#: ../../content/applications/productivity/whatsapp.rst:762 msgid "First, navigate to `Meta's WhatsApp template dashboard `_, and then go to :menuselection:`Account tools --> Message templates`." msgstr "" @@ -16406,16 +17007,16 @@ msgstr "" msgid "Account tools highlighted in business manager with the manage templates link highlighted." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:768 +#: ../../content/applications/productivity/whatsapp.rst:769 msgid "To create a WhatsApp template, click on the blue :guilabel:`Create template` button, and then select the :guilabel:`Category`. The options listed include: :guilabel:`Marketing`, :guilabel:`Utility`, and :guilabel:`Authentication`. In most instances the first two options are used, unless the user would like to send a password reset or something security related." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:773 +#: ../../content/applications/productivity/whatsapp.rst:774 msgid "Enter the :guilabel:`Name` of the template and then select the :guilabel:`Language` for the template." msgstr "" -#: ../../content/applications/productivity/whatsapp.rst:777 -msgid "Multiple languages can be selected by typing the language names and selecting the other languages as needed." +#: ../../content/applications/productivity/whatsapp.rst:778 +msgid "Multiple languages can be selected." msgstr "" #: ../../content/applications/productivity/whatsapp.rst:-1 diff --git a/locale/sources/sales.pot b/locale/sources/sales.pot index 5ad18e8f30..58d31c8e87 100644 --- a/locale/sources/sales.pot +++ b/locale/sources/sales.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -55,7 +55,7 @@ msgstr "" #: ../../content/applications/sales/point_of_sale/configuration.rst:6 #: ../../content/applications/sales/point_of_sale/configuration.rst:54 #: ../../content/applications/sales/point_of_sale/configuration/epos_printers.rst:10 -#: ../../content/applications/sales/point_of_sale/employee_login.rst:16 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:17 #: ../../content/applications/sales/point_of_sale/online_food_delivery.rst:35 #: ../../content/applications/sales/point_of_sale/payment_methods/qr_code_payment.rst:9 #: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:13 @@ -66,9 +66,9 @@ msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/six.rst:14 #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/stripe.rst:19 #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/tyro.rst:14 -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:16 #: ../../content/applications/sales/point_of_sale/pos_based_marketing.rst:72 -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:31 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:30 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:97 #: ../../content/applications/sales/point_of_sale/preparation.rst:12 #: ../../content/applications/sales/point_of_sale/pricing/cash_rounding.rst:17 #: ../../content/applications/sales/point_of_sale/pricing/electronic_labels.rst:16 @@ -76,14 +76,11 @@ msgstr "" #: ../../content/applications/sales/point_of_sale/pricing/loyalty.rst:9 #: ../../content/applications/sales/point_of_sale/pricing/pricelists.rst:12 #: ../../content/applications/sales/point_of_sale/receipts_invoices.rst:54 -#: ../../content/applications/sales/point_of_sale/restaurant.rst:22 -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:10 -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:19 -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:10 -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:11 +#: ../../content/applications/sales/point_of_sale/restaurant.rst:58 +#: ../../content/applications/sales/point_of_sale/restaurant.rst:173 +#: ../../content/applications/sales/point_of_sale/restaurant.rst:284 #: ../../content/applications/sales/point_of_sale/self_order.rst:9 #: ../../content/applications/sales/point_of_sale/shop/barcode.rst:10 -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:12 #: ../../content/applications/sales/point_of_sale/shop/ship_later.rst:10 #: ../../content/applications/sales/rental/manage_deposits.rst:14 #: ../../content/applications/sales/sales/commissions.rst:14 @@ -1780,7 +1777,6 @@ msgstr "" #: ../../content/applications/sales/crm/performance/expected_revenue_report.rst:118 #: ../../content/applications/sales/crm/performance/forecast_report.rst:85 #: ../../content/applications/sales/crm/track_leads/unattended_leads_report.rst:145 -#: ../../content/applications/sales/members/members_analysis.rst:39 msgid "View results" msgstr "" @@ -2007,7 +2003,6 @@ msgid "Click the |pivot| to change to the pivot view, or the |list| to change to msgstr "" #: ../../content/applications/sales/crm/performance/forecast_report.rst:99 -#: ../../content/applications/sales/members/members_analysis.rst:49 msgid "The :ref:`pivot view ` can be used to view and analyze data in a more in-depth manner. Multiple measures can be selected, and data can be viewed by month, and by opportunity stage." msgstr "" @@ -4710,190 +4705,6 @@ msgstr "" msgid ":doc:`Activities <../../../essentials/activities>`" msgstr "" -#: ../../content/applications/sales/members.rst:5 -msgid "Members" -msgstr "" - -#: ../../content/applications/sales/members.rst:7 -msgid "The *Members* application is where all operations related to memberships can be configured and managed. The *Members* app integrates with the *Sales* and *Accounting* applications to sell and invoice memberships directly to customers." -msgstr "" - -#: ../../content/applications/sales/members.rst:12 -msgid "Membership products" -msgstr "" - -#: ../../content/applications/sales/members.rst:14 -msgid "To create a new membership product, navigate to :menuselection:`Members app --> Configuration --> Membership Products`, and click :guilabel:`New` to open a blank product record." -msgstr "" - -#: ../../content/applications/sales/members.rst:17 -msgid "Complete the blank form with the necessary information, including the :guilabel:`Membership Duration`." -msgstr "" - -#: ../../content/applications/sales/members.rst:21 -msgid "Membership products require a start and end date, as they are used to determine :ref:`membership status `. Membership products can be sold *before* their active start date." -msgstr "" - -#: ../../content/applications/sales/members.rst:-1 -msgid "A new membership product in the members app." -msgstr "" - -#: ../../content/applications/sales/members.rst:29 -msgid "Membership products can be added to a sales order, and invoiced as regular products or subscriptions." -msgstr "" - -#: ../../content/applications/sales/members.rst:33 -msgid "Activate a membership" -msgstr "" - -#: ../../content/applications/sales/members.rst:35 -msgid "To activate a membership from the *Contacts* application, navigate to :menuselection:`Contacts app`, and click on a contact to open that specific contact's detail form." -msgstr "" - -#: ../../content/applications/sales/members.rst:38 -msgid "From the resulting contact form, open the :guilabel:`Membership` tab, and click :guilabel:`Buy Membership`." -msgstr "" - -#: ../../content/applications/sales/members.rst:41 -msgid "On the :guilabel:`Join Membership` pop-up window that appears, select a :guilabel:`Membership` from the drop-down menu. Then, configure a :guilabel:`Member Price`." -msgstr "" - -#: ../../content/applications/sales/members.rst:44 -msgid "Click :guilabel:`Invoice Membership` when both fields are filled in. Doing so reveals a :guilabel:`Membership Invoices` page, wherein invoices can be confirmed and completed." -msgstr "" - -#: ../../content/applications/sales/members.rst:47 -msgid "Alternatively, to offer a free membership, tick the :guilabel:`Free Member` checkbox, in the :guilabel:`Membership` tab of a contact form." -msgstr "" - -#: ../../content/applications/sales/members.rst:53 -msgid "Membership status" -msgstr "" - -#: ../../content/applications/sales/members.rst:55 -msgid "The :guilabel:`Current Membership Status` is listed on the :guilabel:`Membership` tab of each contact record:" -msgstr "" - -#: ../../content/applications/sales/members.rst:58 -msgid ":guilabel:`Non Member`: a partner who has **not** applied for membership." -msgstr "" - -#: ../../content/applications/sales/members.rst:59 -msgid ":guilabel:`Cancelled Member`: a member who has cancelled their membership." -msgstr "" - -#: ../../content/applications/sales/members.rst:60 -msgid ":guilabel:`Old Member`: a member whose membership end date has passed." -msgstr "" - -#: ../../content/applications/sales/members.rst:61 -msgid ":guilabel:`Waiting Member`: a member who has applied for membership, but whose invoice has not yet been created." -msgstr "" - -#: ../../content/applications/sales/members.rst:63 -msgid ":guilabel:`Invoiced Member`: a member whose invoice has been created, but has not been paid." -msgstr "" - -#: ../../content/applications/sales/members.rst:64 -msgid ":guilabel:`Paid Member`: a member who has paid the membership fee." -msgstr "" - -#: ../../content/applications/sales/members.rst:67 -msgid "Publish members directory" -msgstr "" - -#: ../../content/applications/sales/members.rst:69 -msgid "To publish a list of active members on the website, the *Online Members Directory* application must first be :ref:`installed `. After installing the module, add the `/members` page to the website's menu by :doc:`editing the website menu <../websites/website/pages/header_footer>`." -msgstr "" - -#: ../../content/applications/sales/members.rst:-1 -msgid "The Online Members directory module in Odoo." -msgstr "" - -#: ../../content/applications/sales/members.rst:78 -msgid "Publish individual members" -msgstr "" - -#: ../../content/applications/sales/members.rst:80 -msgid "Return to :menuselection:`CRM app --> Sales --> Customers`, and click the Kanban card for a member. From the resulting customer form that appears, click the :guilabel:`Go to Website` smart button at the top of the page to open the member's webpage." -msgstr "" - -#: ../../content/applications/sales/members.rst:84 -msgid "Click the :icon:`fa-pencil` :guilabel:`Edit` button to reveal a sidebar of editing tools. After making any necessary changes to the page, click :guilabel:`Save`. At the top of the page, slide the :guilabel:`Unpublished` toggle to the active, :guilabel:`Published` position." -msgstr "" - -#: ../../content/applications/sales/members.rst:88 -msgid "Repeat these steps for all desired members." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:3 -msgid "Members analysis" -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:9 -msgid "The *Members Analysis* report provides a detailed overview of all memberships sold and managed within the *Members* application." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:12 -msgid "To access the *Memberships Analysis* report, navigate to :menuselection:`Members app --> Reporting`." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:15 -msgid "Navigate the report" -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:17 -msgid "The default *Members Analysis* report displays a bar chart, measuring the :guilabel:`Quantity` of memberships against the amount of :guilabel:`Revenue Done`. The data is grouped by the assigned salesperson, then by the month the membership begins." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:-1 -msgid "A sample of the members analysis report." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:25 -msgid "Additional :ref:`Group By ` options include the following:" -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:27 -msgid ":guilabel:`Salesperson`: the internal user in charge of the contact. This information is managed in the *Salesperson* field on the *Sales & Purchase* tab on the contact's record." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:29 -msgid ":guilabel:`Associated Partner`: the contact listed as the *Associated Member* on the *Membership* tab on the contact's record." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:31 -msgid ":guilabel:`Membership Product`: the type of membership assigned to a contact. This includes both purchased memberships and free memberships." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:33 -msgid ":guilabel:`Current Membership State`: the status of the membership." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:34 -msgid ":guilabel:`Company`: the company the membership is purchased through. This option only appears in multi-company databases." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:36 -msgid ":guilabel:`Month`: the month the membership began." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:41 -msgid "Click the :icon:`fa-area-chart` :guilabel:`(graph)` icon to change to graph view. Then, click the corresponding icon at the top of the report to switch to a :icon:`fa-bar-chart` :guilabel:`(bar chart)`, :icon:`fa-line-chart` :guilabel:`(line chart)`, or :icon:`fa-pie-chart` :guilabel:`(pie chart)`." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:46 -msgid "Click the |pivot| to change to the pivot view." -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:54 -msgid ":ref:`search/custom-filters`" -msgstr "" - -#: ../../content/applications/sales/members/members_analysis.rst:55 -msgid ":ref:`search/favorites`" -msgstr "" - #: ../../content/applications/sales/point_of_sale.rst:6 #: ../../content/applications/sales/point_of_sale/online_food_delivery.rst:77 msgid "Point of Sale" @@ -5008,7 +4819,7 @@ msgid ":ref:`Start a session ` from the **POS dashboard**." msgstr "" #: ../../content/applications/sales/point_of_sale.rst:105 -msgid "Click :guilabel:`Actions`, then :icon:`fa-undo` :guilabel:`Refund`, and select the corresponding order." +msgid "Click the :icon:`fa-ellipsis-v` :guilabel:`(vertical ellipsis)` icon, then :icon:`fa-undo` :guilabel:`Refund`, and select the corresponding order." msgstr "" #: ../../content/applications/sales/point_of_sale.rst:107 @@ -5028,7 +4839,7 @@ msgid "Click :guilabel:`New Order` to proceed to the next customer." msgstr "" #: ../../content/applications/sales/point_of_sale.rst:113 -msgid "To filter the **orders list** by :guilabel:`Order number`, :guilabel:`Receipt Number`, :guilabel:`Date`, or :guilabel:`Customer`, enter a value in the search bar and choose the relevant filter from the dropdown menu." +msgid "To filter the **orders list** by :guilabel:`Reference`, :guilabel:`Receipt Number`, :guilabel:`Date`, or :guilabel:`Customer`, enter a value in the search bar and choose the relevant filter from the dropdown menu." msgstr "" #: ../../content/applications/sales/point_of_sale.rst:116 @@ -5370,7 +5181,7 @@ msgid "To use an ePos printer in Point of Sale:" msgstr "" #: ../../content/applications/sales/point_of_sale/configuration/epos_printers.rst:14 -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:36 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:102 msgid ":ref:`Access the POS settings `." msgstr "" @@ -5924,73 +5735,73 @@ msgid "Printer" msgstr "" #: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:20 -msgid "Connect a supported receipt printer to a :abbr:`USB (Universal Serial Bus)` port or to the network, and power it on. Refer to :doc:`../restaurant/kitchen_printing`." +msgid "Connect a supported receipt printer to a :abbr:`USB (Universal Serial Bus)` port or to the network, and power it on. Refer to :ref:`Order printing `." msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:22 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:23 msgid "Cash drawer" msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:23 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:24 msgid "The cash drawer should be connected to the printer with an RJ25 cable." msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:24 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:25 msgid "Barcode scanner" msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:25 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:26 msgid "The barcode scanner must end barcodes with an `ENTER` character (keycode 28) in order for the barcode scanner to be compatible. This is most likely the barcode scanner's default configuration." msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:28 -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:14 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:29 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:80 msgid "Scale" msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:29 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:30 msgid "Connect the scale and power it on. Refer to :doc:`/applications/general/iot/devices/scale`." msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:30 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:31 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:14 #: ../../content/applications/sales/point_of_sale/preparation.rst:100 -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:3 msgid "Customer display" msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:31 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:32 msgid "Connect a screen to the :abbr:`IoT (Internet of Things)` box to display the :abbr:`PoS (Point of Sale)` order. Refer to :doc:`/applications/general/iot/devices/screen`." msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:33 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:34 msgid "Payment terminal" msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:34 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:35 msgid "The connection process depends on the terminal. Refer to the :doc:`payment terminals documentation `." msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:37 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:38 msgid ":doc:`Connect the IoT system to your Odoo database `." msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:38 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:39 msgid ":ref:`Access the POS settings ` and select your POS, or click the vertical ellipsis button (:guilabel:`⋮`) on a POS card and click :guilabel:`Edit`. Scroll down to the :guilabel:`Connected Devices` section, enable :guilabel:`IoT Box`, then select the devices to be used for the POS. Click :guilabel:`Save`." msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:44 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:45 msgid "Click :guilabel:`IoT Devices` to access the list of :doc:`/applications/general/iot/devices` for your POS and view their connection status. Click a card to access the device's form." msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:48 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:49 msgid "`List of supported hardware `_." msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:49 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:50 msgid ":doc:`IoT documentation `" msgstr "" -#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:54 +#: ../../content/applications/sales/point_of_sale/configuration/pos_iot.rst:55 msgid "Setup example" msgstr "" @@ -6011,153 +5822,186 @@ msgid "Select specific users who can :ref:`log into the POS ` to these users." +msgid ":ref:`Assign minimal, basic or advanced permissions ` to these users." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:11 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:12 msgid ":ref:`Track the employees involved in each order for enhanced analytics `." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:18 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:19 msgid "Access the multi-employee setting from the :guilabel:`PoS Interface` section of the :ref:`POS settings `. Then," msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:21 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:22 msgid "Activate the :guilabel:`Log in with Employees` feature." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:22 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:23 msgid "Add the employees with **basic POS functionality** access in the :guilabel:`Basic rights` field." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:23 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:24 msgid "Add the employees with **extended POS functionalities** in the :guilabel:`Advanced rights` field." msgstr "" +#: ../../content/applications/sales/point_of_sale/employee_login.rst:25 +msgid "Add the employees with **minimal POS functionality** access in the :guilabel:`Minimal rights` field." +msgstr "" + #: ../../content/applications/sales/point_of_sale/employee_login.rst:-1 msgid "setting to enable multiple cashiers in POS" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:29 -msgid "Leaving the :guilabel:`Basic rights` field empty allows all employees to log in." +#: ../../content/applications/sales/point_of_sale/employee_login.rst:32 +msgid "Leaving the :guilabel:`Minimal rights` and :guilabel:`Basic rights` field empty allows all employees to log in." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:30 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:34 msgid "Leaving the :guilabel:`Advanced rights` field empty grants extended rights to Odoo users only." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:33 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:37 msgid "Click the :icon:`fa-ellipsis-v` (:guilabel:`vertical ellipsis`) button on the top right corner of a POS card and :guilabel:`Edit` to access the setting from the main POS dashboard." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:37 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:41 msgid ":doc:`../../general/users/access_rights`" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:40 -msgid "Basic rights" -msgstr "" - -#: ../../content/applications/sales/point_of_sale/employee_login.rst:42 -msgid "Employees with basic rights can perform the following actions within the POS:" -msgstr "" - #: ../../content/applications/sales/point_of_sale/employee_login.rst:44 -msgid "**Session management:**" +msgid "Minimal rights" msgstr "" #: ../../content/applications/sales/point_of_sale/employee_login.rst:46 -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:97 -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:31 -msgid ":ref:`Open a POS session `." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/employee_login.rst:47 -msgid ":ref:`Perform cash-in and cash-out operations `." +msgid "Employees with minimal rights can perform the following actions within the POS:" msgstr "" #: ../../content/applications/sales/point_of_sale/employee_login.rst:48 -msgid "Lock the current POS session." +#: ../../content/applications/sales/point_of_sale/employee_login.rst:67 +msgid "**Session management:**" msgstr "" #: ../../content/applications/sales/point_of_sale/employee_login.rst:50 -msgid "**Sales transactions:**" +msgid "Lock and unlock an open POS session." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:52 -msgid ":ref:`Process standard sales transactions `." +#: ../../content/applications/sales/point_of_sale/employee_login.rst:51 +msgid "Reload data." msgstr "" #: ../../content/applications/sales/point_of_sale/employee_login.rst:53 -msgid ":ref:`Process refunds `." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/employee_login.rst:54 -msgid ":doc:`Access and handle sales orders `." +#: ../../content/applications/sales/point_of_sale/employee_login.rst:72 +msgid "**Sales transactions:**" msgstr "" #: ../../content/applications/sales/point_of_sale/employee_login.rst:55 -msgid ":ref:`Set customers `." +msgid ":ref:`Process standard sales transactions `." msgstr "" #: ../../content/applications/sales/point_of_sale/employee_login.rst:56 -msgid "Access past and current order history." +msgid ":ref:`Set customers `." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:58 -msgid "**Pricing and discounts:**" +#: ../../content/applications/sales/point_of_sale/employee_login.rst:57 +msgid ":ref:`Add notes to orders `." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:60 -msgid "Manually select another :doc:`pricelist `." +#: ../../content/applications/sales/point_of_sale/employee_login.rst:59 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:80 +msgid "**Pricing and discounts:**" msgstr "" #: ../../content/applications/sales/point_of_sale/employee_login.rst:61 msgid "Enter promotional codes." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:62 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:63 +msgid "Basic rights" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/employee_login.rst:65 +msgid "In addition to the minimal rights, employees with basic rights can also:" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/employee_login.rst:69 +msgid ":ref:`Open a POS session `." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/employee_login.rst:70 +msgid ":ref:`Perform cash-in and cash-out operations `." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/employee_login.rst:74 +msgid ":ref:`Create customers `." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/employee_login.rst:75 +msgid ":ref:`Process refunds `." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/employee_login.rst:76 +msgid ":doc:`Access and handle sales orders `." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/employee_login.rst:77 +msgid "Access past and current order history." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/employee_login.rst:78 +msgid "Cancel orders." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/employee_login.rst:82 +msgid "Manually select another :doc:`pricelist `." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/employee_login.rst:83 msgid ":doc:`Manually apply discounts `." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:63 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:84 msgid "Manually :ref:`change a product's price `." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:64 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:85 +msgid "Give loyalty program's rewards." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/employee_login.rst:86 msgid "Switch between :doc:`fiscal positions `." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:66 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:88 msgid "Advanced rights" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:68 -msgid "In addition to the basic rights, employees with advanced rights can also:" +#: ../../content/applications/sales/point_of_sale/employee_login.rst:90 +msgid "In addition to the minimal and basic rights, employees with advanced rights can also:" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:70 -msgid "Access the Odoo backend interface." +#: ../../content/applications/sales/point_of_sale/employee_login.rst:92 +msgid "Create products." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:71 -msgid "Create products." +#: ../../content/applications/sales/point_of_sale/employee_login.rst:93 +msgid "Access the Odoo backend interface." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:72 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:94 msgid ":ref:`Close the current POS session `." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:77 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:99 #: ../../content/applications/sales/point_of_sale/self_order.rst:169 msgid "Usage guidelines" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:80 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:102 msgid "Logging in" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:82 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:104 msgid "Once the **Log in with Employees** feature is enabled, employees must log in to :ref:`open a POS session ` and access the POS interface. They can :ref:`scan their employee badge `, click the :icon:`fa-users` icon (:guilabel:`users`) to select their name from the list of authorized users, or by entering :ref:`their PIN code ` in the :guilabel:`Enter your PIN` field." msgstr "" @@ -6165,73 +6009,73 @@ msgstr "" msgid "Login window to open a session when the multiple cashiers feature is active" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:91 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:113 msgid "To switch between users during an :ref:`active session `, click on the currently logged-in employee's name at the top right of the POS screen and select the user to switch to." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:95 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:117 msgid "In the absence of a scanner, click the :icon:`fa-barcode` icon (:guilabel:`barcode`) to scan barcodes using the webcam." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:101 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:123 msgid "Logging in with badges" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:103 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:125 msgid "Employees can log in using their badge. To configure badge-based login, assign a unique badge ID to the employee's profile in the **Employees** module:" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:106 -#: ../../content/applications/sales/point_of_sale/employee_login.rst:127 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:128 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:149 msgid "Navigate to the **Employees** module." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:107 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:129 msgid "Open the form view of the specific employee." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:108 -#: ../../content/applications/sales/point_of_sale/employee_login.rst:129 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:130 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:151 msgid "Go to the :guilabel:`Settings` tab." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:109 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:131 msgid "The :guilabel:`Attendance/Point of Sale/Manufacturing` category offers two options:" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:111 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:133 msgid "Manually enter any badge ID in the :guilabel:`Badge ID` field." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:112 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:134 msgid "Click :guilabel:`Generate` to create a unique badge ID automatically." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:113 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:135 msgid "Click :guilabel:`Print Badge` to generate a barcode representation of the assigned badge ID." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:115 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:137 msgid "To switch users within an open POS session using a badge, you must first lock the session. To do so, click the :icon:`fa-lg fa-lock` icon (:guilabel:`lock`) to return to the login screen. Then, the new employee can scan their badge to log in." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:122 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:144 msgid "Adding a PIN Code" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:124 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:146 msgid "For enhanced security, employees may be forced to enter a PIN code each time they log into a POS session. To set up a PIN code for an employee:" msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:128 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:150 msgid "Open the form view of the relevant employee." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:130 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:152 msgid "Enter a desired numerical code in the :guilabel:`PIN Code` field of the :guilabel:`Attendance/Point of Sale/Manufacturing` category." msgstr "" -#: ../../content/applications/sales/point_of_sale/employee_login.rst:134 +#: ../../content/applications/sales/point_of_sale/employee_login.rst:156 msgid "The PIN code must consist of a sequence of digits only." msgstr "" @@ -6710,7 +6554,6 @@ msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods.rst:25 #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/adyen.rst:84 #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/ingenico.rst:51 -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:81 msgid "Once the payment method is created, you can select it in your POS settings. To do so, go to the :ref:`POS' settings `, click :guilabel:`Edit`, and add the payment method under the :guilabel:`Payments` section." msgstr "" @@ -6959,79 +6802,100 @@ msgid "Payment terminals" msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:7 -msgid "Connecting and integrating a payment terminal with your POS system allows you to accept multiple payment options, including credit and debit cards, making the payment process more efficient." +msgid "Connect and integrate a payment terminal to a :ref:`POS system ` to accept multiple payment options, including credit and debit cards." msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:15 -msgid "Go to the :ref:`application settings `, scroll down to the :guilabel:`Payment Terminals` section, and tick your terminal's checkbox." +msgid "To activate a payment terminal and allow processing payments with it, follow these steps:" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:-1 -msgid "checkbox in the settings to enable a payment terminal" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:17 +msgid "Go to :menuselection:`Point of Sale --> Configuration --> Settings` and scroll down to the :guilabel:`Payment Terminals` section." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:21 -msgid "Then, follow the corresponding documentation to configure your device:" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:19 +msgid "Enable the relevant terminal." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:23 -msgid ":doc:`Adyen configuration `" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:20 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:80 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:73 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:105 +#: ../../content/applications/sales/point_of_sale/restaurant.rst:126 +#: ../../content/applications/sales/sales/products_prices/products/product_images.rst:115 +msgid "Click :guilabel:`Save`." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:24 -msgid ":doc:`Ingenico configuration `" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:21 +msgid "Go to :menuselection:`Point of Sale --> Configuration --> Payment Methods` and :doc:`create the corresponding payment method <../payment_methods>`." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:25 -msgid ":doc:`Mercado Pago configuration `" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:23 +msgid "Set the :guilabel:`Integration` field to :guilabel:`Terminal`, select the relevant terminal, and complete the terminal-specific configuration:" msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:26 -msgid ":doc:`Razorpay configuration `" +msgid ":doc:`Adyen `" msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:27 -msgid ":doc:`SIX configuration `" +msgid ":doc:`Ingenico `" msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:28 -msgid ":doc:`Stripe configuration `" +msgid ":doc:`Mercado Pago `" msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:29 -msgid ":doc:`Tyro configuration `" +msgid ":doc:`QFPay configuration `" msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:30 -msgid ":doc:`Viva.com configuration `" +msgid ":doc:`Razorpay `" msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:31 -msgid ":doc:`Worldline configuration `" +msgid ":doc:`SIX `" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:32 +msgid ":doc:`Stripe `" msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:33 -msgid "Once the terminal is configured, you can :doc:`create the corresponding payment method and add it to the POS <../payment_methods>`." +msgid ":doc:`Tyro `" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:34 +msgid ":doc:`Viva.com `" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:35 +msgid ":doc:`Worldline `" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:36 +msgid "Go to :menuselection:`Point of Sale --> Configuration --> Settings` and add the payment method to the :guilabel:`Payment Methods` list to make it available in the POS interface." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:37 -msgid "Pay with a payment terminal" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:42 +msgid "Terminal use" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:39 -msgid "When processing a payment, select the terminal's payment method. Check the amount and click on :guilabel:`Send`. Once the payment is successful, the status changes to :guilabel:`Payment Successful`." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:44 +msgid "To process a :ref:`payment ` with a :ref:`configured terminal ` for an order, select the terminal's :doc:`payment method <../payment_methods>` on the :guilabel:`Payment` screen, then follow the instructions on the terminal device." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:0 -msgid "In case of connection issues between Odoo and the payment terminal, force the payment by clicking on :guilabel:`Force Done`, which allows you to validate the order." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:49 +msgid "Once the transaction is successful, the payment is automatically validated in Point of Sale." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:0 -msgid "This option is only available after receiving an error message informing you that the connection failed." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:52 +msgid "Connection issues between Odoo and the payment terminal result in transaction cancellation." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:48 -msgid "To cancel the payment request, click on :guilabel:`Cancel`." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals.rst:53 +msgid "To cancel the payment request, click :guilabel:`Cancel`." msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/adyen.rst:3 @@ -7132,7 +6996,6 @@ msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/six.rst:30 #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/stripe.rst:22 #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/tyro.rst:34 -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:72 msgid "Configure the payment method" msgstr "" @@ -7144,6 +7007,39 @@ msgstr "" msgid "Finally, fill in the mandatory fields with your :ref:`Adyen API key `, :ref:`Adyen Terminal Identifier `, and :guilabel:`Adyen Merchant Account`." msgstr "" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/adyen.rst:91 +#: ../../content/applications/sales/point_of_sale/restaurant.rst:281 +msgid "Tips" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/adyen.rst:93 +msgid "Odoo Point of Sale allows tipping with an Adyen terminal. To configure this option, go to the :ref:`POS settings `, enable the :ref:`Tips ` and the :guilabel:`Add tip through payment terminal (Adyen)` settings, then click :guilabel:`Save`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/adyen.rst:97 +msgid "To process tips with an Adyen terminal, follow these steps:" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/adyen.rst:99 +msgid "Go to the relevant POS and :ref:`process an order `." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/adyen.rst:100 +msgid "Click :ref:`Payment ` and select the :ref:`relevant payment method `. The :guilabel:`Adyen` terminal displays the transaction and suggests adding tips." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/adyen.rst:103 +msgid "Add a tip amount on the terminal and validate." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/adyen.rst:104 +msgid "In Odoo POS, click :icon:`fa-heart` :guilabel:`Tip`, enter the tip amount, and click :guilabel:`Ok`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/adyen.rst:106 +msgid "Click :guilabel:`Close Tab` to validate the payment and the tip." +msgstr "" + #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/ingenico.rst:3 msgid "Ingenico" msgstr "" @@ -7151,7 +7047,6 @@ msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/ingenico.rst:5 #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/mercado_pago.rst:5 #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/stripe.rst:5 -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:5 msgid "Connecting a payment terminal allows you to offer a fluid payment flow to your customers and ease the work of your cashiers." msgstr "" @@ -7168,7 +7063,6 @@ msgid "Odoo works with the Ingenico Lane/, Desk/, and Move/ payment terminals as msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/ingenico.rst:18 -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:19 msgid "Connect an IoT system" msgstr "" @@ -7350,6 +7244,130 @@ msgstr "" msgid "Any action made on the terminal should trigger a notification on the POS interface. Ensure the :ref:`webhook secret key ` is correctly configured if you are not notified." msgstr "" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:3 +msgid "QFPay" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:5 +msgid "QFPay is a payment service that offers payment solutions through the `HaoJin App `_ for customer transactions with a physical terminal." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:9 +msgid "QFPay payment terminals do not require an :doc:`IoT Box ` to operate." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:11 +msgid "QFPay terminals are exclusively for Hong Kong." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:16 +msgid "QFPay configuration" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:18 +msgid "To configure a QFPay payment terminal, follow these steps:" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:20 +msgid "Create a QFPay account on the `QFPay website `_." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:21 +msgid "Request activation of `Asynchronous Notifications `_ from the application email." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:23 +msgid "Provide the Odoo server address on the QFPay portal, followed by `/qfpay/notify`, and copy the notification key provided by QFPay." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:25 +msgid "Set up the QFPay terminal by connecting the HaoJin App to the QFPay account as instructed by QFPay, then copy the terminal's IP address." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:27 +msgid "Request a self-signed certificate from QFPay linked to the terminal's IP address, and import it into the relevant POS in Odoo." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:29 +msgid "Generate a :guilabel:`POS-KEY` from the HaoJin App: go to :menuselection:`Haojin App --> My --> Settings --> Pos Call Up Key --> Reset Key`. Then, copy the generated :guilabel:`POS-KEY`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:33 +msgid "The **Asynchronous Notifications** are automated messages confirming successful payments or refunds by QFPay." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:35 +msgid "Write the server address as follows: `https://yourdomain.odoo.com/qfpay/notify`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:36 +msgid "If the terminal's IP address changes, update it in the :ref:`Odoo POS settings ` and request a new self-signed certificate from QFPay." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:38 +msgid "If a QFPay account already exists, contact `technical.support@qfpay.com` with the merchant information and server address." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:42 +msgid "Alternatively, retrieve the POS-KEY from the `MMS (Merchant Management System) portal `_: go to :menuselection:`MMS portal --> Settings --> Device Settings`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:49 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:53 +msgid "Odoo POS configuration" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:51 +msgid "To connect the QFPay terminal with Odoo Point of Sale, follow these steps:" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:53 +msgid "Go to :menuselection:`Point of Sale --> Configuration --> Settings`, scroll down to the :guilabel:`Payment Terminals` section, enable the :guilabel:`QFPay` terminal, and click :guilabel:`Save`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:56 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:60 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:65 +msgid "Go to :menuselection:`Point of Sale --> Configuration --> Payment Methods` and :doc:`create a payment method <../../payment_methods>`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:58 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:62 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:67 +msgid "Set the :guilabel:`Journal` field to :guilabel:`Bank`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:59 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:63 +msgid "Select the desired point of sale in the :guilabel:`Point of Sale` field." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:60 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:64 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:68 +msgid "Set the :guilabel:`Integration` field to :guilabel:`Terminal`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:61 +msgid "Set the :guilabel:`Integrate with` field to :guilabel:`QFPay`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:62 +msgid "Paste the copied information from :ref:`QFPay ` into the corresponding fields:" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:65 +msgid ":guilabel:`Terminal IP`" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:66 +msgid ":guilabel:`POS Key`" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/qfpay.rst:67 +msgid ":guilabel:`Notification Key`" +msgstr "" + #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/razorpay.rst:3 msgid "Razorpay" msgstr "" @@ -7832,174 +7850,159 @@ msgstr "" msgid "The POS API credentials are for APIs that use Basic Authentication, including those for Android and iOS POS activation and the `Cloud Terminal API `_." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:53 -msgid "Odoo POS configuration" -msgstr "" - #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:55 msgid "To connect the viva.com terminal with Odoo Point of Sale, follow these steps:" msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:57 -msgid "Go to :menuselection:`Point of Sale --> Configuration --> Settings`, scroll down to the :guilabel:`Payment Terminals` section, enable the :guilabel:`Viva Wallet` terminal, and click :guilabel:`Save`." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:60 -msgid "Go to :menuselection:`Point of Sale --> Configuration --> Payment Methods` and :doc:`create a payment method <../../payment_methods>`." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:62 -msgid "Set the :guilabel:`Journal` field to :guilabel:`Bank`." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:63 -msgid "Set the :guilabel:`Integration` field to :guilabel:`Terminal`." +msgid "Go to :menuselection:`Point of Sale --> Configuration --> Settings`, scroll down to the :guilabel:`Payment Terminals` section, enable the :guilabel:`Viva.com` terminal, and click :guilabel:`Save`." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:64 -msgid "Set the :guilabel:`Integrate with` field to :guilabel:`Viva Wallet`." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:65 +msgid "Set the :guilabel:`Integrate with` field to :guilabel:`Viva.com`." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:65 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:66 msgid "Paste the copied information from :ref:`viva.com ` into the corresponding fields:" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:68 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:69 msgid ":guilabel:`Merchant ID`" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:69 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:70 msgid ":guilabel:`API Key`" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:70 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:71 msgid ":guilabel:`Client ID`" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:71 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:72 msgid ":guilabel:`Client secret`" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:72 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:73 msgid ":guilabel:`Terminal ID`" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:74 -msgid "Save the form and copy the generated webhook URL from the :guilabel:`Viva Wallet Webhook Endpoint` field." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:75 +msgid "Save the form and copy the generated webhook URL from the :guilabel:`Viva Com Webhook Endpoint` field." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:76 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:77 msgid "Go to the :ref:`viva.com ` account and paste the webhook URL into the `corresponding field `_." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:79 -msgid "In Odoo, access the :ref:`relevant point of sale settings `, scroll down to the :guilabel:`Payment` section, and add the created payment method in the :guilabel:`Payment Methods` field." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:3 +msgid "Worldline" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/viva_com.rst:82 -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:39 -#: ../../content/applications/sales/sales/products_prices/products/product_images.rst:115 -msgid "Click :guilabel:`Save`." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:5 +msgid "`Worldline `_ offers payment solutions through :doc:`payment terminals <../terminals>` to handle customer transactions." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:3 -msgid "Worldline" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:9 +msgid "Connecting a Worldline payment terminal to Odoo requires an :doc:`IoT system `." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:9 -msgid "Worldline payment terminals require an :doc:`IoT Box `." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:11 +msgid "Worldline is only available in **Belgium**, **the Netherlands**, and **Luxembourg** with Odoo." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:10 -msgid "Worldline is currently only available in Belgium, the Netherlands and Luxembourg." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:12 +msgid "Odoo is compatible with Worldline terminals that use the CTEP protocol (e.g., the **Yomani XR** and **Yoximo** terminals). Contact the payment provider to confirm the terminal's compatibility if necessary." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:11 -msgid "Odoo is compatible with Worldline terminals that use the CTEP protocol (e.g., the Yomani XR and Yoximo terminals). If you have any doubts, contact your payment provider to ensure your terminal's compatibility." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:19 +msgid "Worldline configuration" msgstr "" #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:21 -msgid "Connecting a Worldline Payment Terminal to Odoo is a feature that requires an IoT system. For more information on how to connect one to your database, please refer to the :doc:`IoT documentation `." +msgid "First, enable the Worldline payment terminal in the :ref:`POS settings ` under :guilabel:`Payment Terminals`. Then :doc:`connect the IoT system to Odoo ` and follow these steps on the terminal:" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:26 -msgid "Configure the protocol" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:25 +msgid "**Configure the ECR protocol**:" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:28 -msgid "From your terminal, click on :menuselection:`\".\" --> 3 --> stop --> 3 --> 0 --> 9`. Enter the technician password **\"1235789\"** and click on :menuselection:`OK --> 4 --> 2`. Then, click on :menuselection:`Change --> CTEP (as Protocole ECR) --> OK`. Click on **OK** thrice on the subsequent screens (*CTEP ticket ECR*, *ECR ticket width*, and *Character set*). Finally, press **Stop** three times; the terminal automatically restarts." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:27 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:34 +msgid "Press :menuselection:`\".\" --> 3 --> Stop --> 3 --> 0 --> 9`." msgstr "" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:28 #: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:35 -msgid "Set the IP address" +msgid "Enter the technician password **1235789** and press **OK**." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:37 -msgid "From your terminal, click on :menuselection:`\".\" --> 3 --> stop --> 3 --> 0 --> 9`. Enter the technician password **\"1235789\"** and click on :menuselection:`OK --> 4 --> 9`. Then, click on :menuselection:`Change --> TCP/IP` (*TCP physical configuration* screen) :menuselection:`--> OK --> OK` (*TCP Configuration client* screen)." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:29 +msgid "Press :menuselection:`4 --> 2 --> CTEP (ECR protocol)`. Press **OK** to confirm each of the following checks: **CTEP ticket ECR**, **ECR ticket width**, and **Character set**." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:42 -msgid "Finally, set up the hostname and port number." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:31 +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:46 +msgid "Press **Stop** three times; the terminal restarts automatically." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:45 -msgid "Hostname" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:32 +msgid "**Set the hostname**:" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:48 -msgid "To set up the hostname, enter your IoT system's IP address' sequence numbers and press **OK** at each \".\" until you reach the colon symbol." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:36 +msgid "Press :menuselection:`4 --> 9 --> TCP/IP (ECR physical conf.)` and **OK** twice." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:49 -msgid "Then, press **OK** twice." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:37 +msgid "Enter the :ref:`IoT's IP address ` on the **Hostname** screen by confirming each number with **OK** until the colon symbol, then confirm the step with **OK**. For example, if the IP address is `10.30.19.4:8069`, press :menuselection:`10 --> OK --> 30 --> OK --> 19 --> OK --> 4 --> OK --> OK`." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:0 -msgid "Here's an IP address sequence: `10.30.19.4:8069`." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:41 +msgid "**Set the port number**:" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:0 -msgid "On the *Hostname screen*, type :menuselection:`10 --> OK --> 30 --> OK --> 19 --> OK --> 4 --> OK --> OK`." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:43 +msgid "Enter **9001** (if using an :doc:`IoT box `) or **9050** (if using a :doc:`Windows virtual IoT `) on the **Network domain name** screen and press **OK** twice." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:57 -msgid "Your IoT system's IP address is available on the :ref:`IoT system's card in the IoT app `." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:48 +msgid "The terminal is now active and displays the **Read card** screen." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:61 -msgid "Port number" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:51 +msgid "The `9050` port must be added as a :ref:`Windows Firewall exception ` for the :doc:`Windows virtual IoT `." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:63 -msgid "On the *Port number* screen, enter **9001** (or **9050** for Windows) and click on :menuselection:`OK` (*ECR protocol SSL no*) :menuselection:`--> OK`. Click on **Stop** three times; the terminal automatically restarts." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:55 +msgid "To check the terminal's connection status, open the IoT app and click the :ref:`IoT system's card `." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:68 -msgid "For the :doc:`Windows virtual IoT `, the `9050` port must be added as a :ref:`Windows Firewall exception `." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:61 +msgid "Odoo configuration" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:74 -msgid "Enable the payment terminal :ref:`in the application settings ` and :doc:`create the related payment method <../../payment_methods>`. Set the journal type as :guilabel:`Bank` and select :guilabel:`Worldline` in the :guilabel:`Use a Payment Terminal` field. Then, select your terminal device in the :guilabel:`Payment Terminal Device` field." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:63 +msgid "To connect the Worldline terminal with Odoo Point of Sale, follow these steps:" msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:88 -msgid "Technician password: `1235789`" +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:69 +msgid "Set the :guilabel:`Integrate with` field to :guilabel:`Worldline`." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:89 -msgid "To reach Wordline's technical assistance, call `02 727 61 11` and choose \"merchant\". Your call is automatically transferred to the desired service." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:70 +msgid "Select the configured device in the :guilabel:`Payment Terminal Device` field and save." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:91 -msgid "Configure the cashier terminal if you have both a customer and a cashier terminal." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:71 +msgid "Go to :menuselection:`Point of Sale --> Configuration --> Settings` and add the created payment method to the :guilabel:`Payment Methods` list to make it available in the POS interface." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:92 -msgid "To avoid blocking the terminal, check the initial configuration beforehand." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:78 +msgid "If a setup uses separate cashier and customer payment terminals, :ref:`configure ` the cashier terminal first." msgstr "" -#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:93 -msgid "Set a fixed IP to your IoT Box’s router to prevent losing the connexion." +#: ../../content/applications/sales/point_of_sale/payment_methods/terminals/worldline.rst:80 +msgid "To prevent connection loss, set a fixed IP address on the IoT Box’s router or :ref:`restart the virtual IoT server `." msgstr "" #: ../../content/applications/sales/point_of_sale/pos_based_marketing.rst:3 @@ -8180,132 +8183,223 @@ msgstr "" msgid ":doc:`../../productivity/whatsapp`" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:3 -msgid "Hardware" +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:3 +msgid "Hardware" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:5 +msgid "Odoo Point of Sale supports integration with a variety of hardware, including :doc:`payment terminals ` and cash drawers, as well as :ref:`customer displays `, :ref:`scales `, :doc:`barcode scanners `, :doc:`ePOS printers `, and in-store :doc:`electronic shelf labels `." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:16 +msgid "The **customer display** feature provides real-time updates on a secondary screen for customers during the checkout process. This screen shows the :ref:`items in the cart `, the subtotal as items are added, and details throughout the payment process. It also displays the total amount, the selected :doc:`payment method `, and any change to be returned." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:-1 +msgid "customer screen" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:26 +msgid "Both the customer and POS displays must have a minimum diagonal size of 6 inches. For optimal readability, larger screens are recommended." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:32 +msgid "Depending on the POS setup, the feature can be displayed directly on a secondary screen connected via USB-C or HDMI or on a screen connected through an IoT system." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:35 +msgid "The feature is activated by default, but its background image can still be configured. To do so, navigate to the :ref:`POS settings ` and scroll down to the :guilabel:`Connected Devices` section. Then, click :guilabel:`Upload your file` to set a background image." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:40 +msgid "For displays connected using an :doc:`IoT system <../../general/iot>`:" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:42 +msgid "Navigate to the :ref:`POS settings `." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:43 +msgid "Enable the :guilabel:`IoT Box` option to activate the IoT system in POS." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:44 +msgid "Click :guilabel:`Save`, which activates the IoT app in Odoo." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:45 +msgid ":doc:`Connect and configure an IoT system <../../general/iot/connect>` for a :doc:`display <../../general/iot/devices/screen>`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:47 +msgid "Return to the :ref:`POS settings ` and select an IoT-connected screen using the :guilabel:`Customer Display` field." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:51 +msgid "Opening the customer display" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:53 +msgid "To open the customer display, follow these steps:" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:55 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:72 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:163 +msgid ":ref:`Open the POS register `." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:56 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:73 +msgid "Click the :icon:`fa-bars` (:guilabel:`hamburger menu`) icon." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:57 +msgid "Click the :icon:`fa-desktop` (:guilabel:`Customer Display`) icon, which opens the customer display either in a new window to drag onto the second screen or directly onto the IoT-connected screen." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:62 +msgid "For IoT-connected screens, both devices need to be connected to the same local network." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:65 +msgid ":doc:`configuration/pos_iot`" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:66 +msgid ":doc:`../../general/iot`" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:68 +msgid "For POS terminals running the Odoo Android app with dual-screen support," +msgstr "" + +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:70 +msgid ":doc:`Activate the Point of Sale Mobile module <../../general/apps_modules>` to enable the customer display." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:5 -msgid "Odoo Point of Sale supports integration with a variety of hardware, including :doc:`payment terminals ` and cash drawers, as well as :doc:`customer displays `, :ref:`scales `, :doc:`barcode scanners `, :doc:`ePOS printers `, and in-store :doc:`electronic shelf labels `." +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:74 +msgid "Click the :icon:`fa-desktop` (:guilabel:`Customer Display`) icon, which opens the customer display on the terminal's secondary screen." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:17 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:83 msgid "In EU member states, `certification is legally required `_ to use a scale as an integrated device." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:22 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:88 msgid "Prerequisite" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:24 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:90 msgid "Connecting a scale requires the use of an **IoT System**." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:27 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:93 msgid ":doc:`../../general/iot/connect`" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:28 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:94 msgid ":doc:`../../general/iot/devices/scale`" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:34 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:100 msgid "Scale connection" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:37 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:103 msgid "Scroll down to the :guilabel:`Connected Devices` section and enable :guilabel:`IoT Box`." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:38 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:104 msgid "Select the scale in the :guilabel:`Electronic Scale` field." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:42 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:108 msgid "Alternatively, click the :icon:`fa-ellipsis-v` (:guilabel:`Dropdown menu`) icon on a POS card and click :guilabel:`Edit` to access this setting." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:46 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:112 #: ../../content/applications/sales/sales/sales_quotations/orders_and_variants.rst:37 msgid "Product configuration" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:48 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:114 msgid "In order to weigh products using an integrated scale, go to :menuselection:`Point of Sale --> Products --> Products`, create a product or open an existing product form, and configure it as follows:" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:52 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:118 msgid "Ensure the :guilabel:`Point of Sale` checkbox is activated for the product to be available in POS." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:54 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:120 msgid "On the :guilabel:`General Information` tab, define a :guilabel:`Sales Price` per :guilabel:`kg`." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:57 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:123 msgid "This step requires to enable the :doc:`Units of Measure <../../inventory_and_mrp/inventory/product_management/configure/uom>` feature. To activate it:" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:60 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:126 msgid "Go to :menuselection:`Inventory --> Configuration --> Settings`." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:61 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:127 msgid "Scroll down to the :guilabel:`Products` section and activate :guilabel:`Units of Measure`." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:62 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:128 msgid "Go to the :guilabel:`Point of Sale` tab and activate :guilabel:`To Weigh With Scale`. This enables the product to be weighed directly on the connected scale at the POS." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:66 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:132 msgid "The selected unit of measure for weighable products must be :guilabel:`kg` to ensure compliance with **European regulations**." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:70 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:136 msgid ":doc:`../../inventory_and_mrp/inventory/product_management/configure/uom`" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:73 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:139 msgid "European regulations" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:75 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:141 msgid "When using scales in commercial transactions, the database integrated with a scale must be configured to meet specific European requirements. This includes supporting at least three decimal places for accuracy and using proper rounding for units of measure, such as `kg` instead of generic `units`." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:80 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:146 msgid "If the database is not compliant, a red :icon:`fa-balance-scale` (:guilabel:`scale`) icon displays as a warning. Click this icon to view the reasons for non-compliance and then select :guilabel:`Apply changes` to automatically apply the necessary changes to the settings. Once the database meets all regulatory requirements, the :icon:`fa-balance-scale` (:guilabel:`scale`) icon turns green." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:89 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:155 msgid "Additional guidelines" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:91 -msgid "Both the :doc:`customer ` and POS displays must have a minimum diagonal size of 6 inches. For optimal readability, larger screens are recommended." +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:157 +msgid "Both the :ref:`customer ` and POS displays must have a minimum diagonal size of 6 inches. For optimal readability, larger screens are recommended." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:95 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:161 msgid "Using a scale in PoS" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:98 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:164 msgid "Select the product to weigh on the order screen or scan its barcode." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:99 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:165 msgid "Place the product on the scale and wait for the weight to be displayed in the popup window." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:100 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:166 msgid "Once the weight is determined, the price is automatically computed." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:101 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:167 msgid "Click :guilabel:`Order` :icon:`fa-angle-double-right` to add the product to the cart." msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:102 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:168 msgid "Remove the previous product from the scale." msgstr "" @@ -8313,7 +8407,7 @@ msgstr "" msgid "weighing window" msgstr "" -#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:109 +#: ../../content/applications/sales/point_of_sale/pos_hardware.rst:175 msgid "Make sure the scale returns to `zero` before weighing a new product. If it does not, the :guilabel:`Order` :icon:`fa-angle-double-right` button remains unclickable until it is reset." msgstr "" @@ -9284,7 +9378,7 @@ msgid "POS receipt" msgstr "" #: ../../content/applications/sales/point_of_sale/receipts_invoices.rst:22 -msgid ":doc:`restaurant/bill_printing`" +msgid ":ref:`pos/restaurant/bills`" msgstr "" #: ../../content/applications/sales/point_of_sale/receipts_invoices.rst:23 @@ -9403,458 +9497,513 @@ msgstr "" msgid "These statistics are available in a graph or pivot view that you can filter or group depending on your needs." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:5 +#: ../../content/applications/sales/point_of_sale/restaurant.rst:3 msgid "Restaurant features" msgstr "" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:5 +msgid "Odoo Point of Sale provides various features to manage a restaurant or a bar:" +msgstr "" + #: ../../content/applications/sales/point_of_sale/restaurant.rst:7 -msgid "Managing a restaurant or a bar comes with specific needs. The Point of Sale application provides various features that allow performing all the required tasks in such businesses." +msgid ":ref:`Organizing the floors and tables `;" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:10 -msgid "Once the POS is set to be used in a restaurant or a bar, you can:" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:8 +msgid ":ref:`Taking orders `;" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:12 -msgid ":doc:`organize your floors and tables to reflect your interior `;" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:9 +msgid ":ref:`Communicating with the kitchen or bar through the POS `;" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:13 -msgid ":ref:`take orders `;" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:10 +msgid ":ref:`Printing and splitting bills `;" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:14 -msgid ":doc:`communicate with the kitchen or the bar through the POS `;" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:11 +msgid ":ref:`Collecting tips `;" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:15 -msgid ":doc:`print bills in advance and split them `;" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:12 +msgid ":doc:`Setting different taxes for takeaway food `." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:16 -msgid ":doc:`collect tips `; and" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:14 +msgid "Three main buttons in the POS register allow for navigating between the :ref:`Floor plan ` view, tables, and :ref:`orders `:" msgstr "" #: ../../content/applications/sales/point_of_sale/restaurant.rst:17 -msgid ":doc:`set different taxes for takeaway food `." +msgid ":guilabel:`Plan`: Access the :ref:`Floor plan ` view." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:18 +msgid ":guilabel:`Table`: Enter a table or order number, then click :guilabel:`Jump` to access them. The button's label updates to display the selected number. When applicable, click :guilabel:`Book table` to confirm the table's occupancy." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:24 -msgid "To enable the restaurant and bar-specific features, go to :menuselection:`Point of Sale --> Configuration --> Settings`, select the POS, and activate :guilabel:`Is a Bar/Restaurant`." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:21 +msgid ":icon:`fa-plus-circle` (:guilabel:`order`): :ref:`Create a direct sales order ` that is not linked to any table. Each click generates the next order in the sequence. Click :guilabel:`Release Order` to cancel the order (if no products have been added) and return to the :ref:`Floor plan ` view." msgstr "" #: ../../content/applications/sales/point_of_sale/restaurant.rst:27 -msgid "These features are displayed in the :guilabel:`Restaurant & Bar` section." +msgid "When :guilabel:`Table Booking` is enabled in the :ref:`POS settings `, a :guilabel:`Booking` button appears on the main interface for viewing and managing bookings." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:-1 -msgid "restaurant and bar-specific features" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:29 +msgid "Entering a number through the :guilabel:`Table` button that does not match an existing table number creates a direct sales order." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:36 -msgid "Take orders" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:33 +msgid "To configure restaurant-specific settings, the :guilabel:`Is a Bar/Restaurant` setting under the :guilabel:`Restaurant Mode` section must be enabled in the :ref:`POS settings `." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:38 -msgid "Click a table to access the POS interface and start taking your customer's order. The system automatically associates the orders and the table, allowing you to add more items later and generate a bill specifically for that table's orders." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:40 +msgid "Floors and tables" msgstr "" #: ../../content/applications/sales/point_of_sale/restaurant.rst:42 -msgid "Once you have taken an order, click :guilabel:`Change table` to return to the floor plan view." +msgid "The :guilabel:`Floor plan` view is the first screen displayed when :ref:`accessing the POS register `. It enables managing restaurant floors and tables, and monitoring table status in real time (occupancy, reservations, and kitchen orders)." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant.rst:45 -msgid "As soon as you click a table, the number of guests is automatically set to one. If you mistakenly select a table, click :guilabel:`Release table` to free it or :ref:`transfer the customer ` to another table." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:0 +msgid "example of a floor plan view with visual keys to understand it." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:3 -msgid "Bills" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:51 +msgid "Table 101: The table is currently available but booked for 15:00." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:5 -msgid "Typical practices in restaurants or bars are to request the bill before proceeding to payment or splitting it based on the items ordered. Odoo POS provides two features to perform these tasks seamlessly: **Bill Printing** and **Bill Splitting**." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:52 +msgid "Table 102: The table is booked, and an order is sent to the kitchen." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:12 -msgid "To activate the features, go to :menuselection:`Point of Sale --> Configuration --> Settings`, select the POS, and activate :guilabel:`Early Receipt Printing` and :guilabel:`Allow Bill Splitting` in the :guilabel:`Restaurant & Bar` section." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:53 +msgid "Table 103: The 12:00 table is running late." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:-1 -msgid "activate the bill printing and bill splitting features in the POS settings" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:54 +msgid "Table 104: The table has a pending order." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:21 -msgid "Bill printing" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:55 +msgid "Table 105: The table is available." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:23 -msgid "From an open session, click :menuselection:`Bill --> Print` at any moment to generate and print a bill." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:60 +msgid "Creating floors and tables allows managing table selection and :ref:`orders `." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:27 -msgid "The printed bill is **not** final and will be updated to reflect any changes to the order." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:66 +msgid "From the POS backend" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:30 -msgid "Bill splitting" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:68 +msgid "To create floors and tables from the backend, go to :menuselection:`Point of Sale --> Configuration --> Floor Plans`, and click :guilabel:`New`. Follow the next steps to configure the :guilabel:`Floor plan`:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:32 -msgid "From an open session, click :guilabel:`Split` to select the items to regroup. Once everything is selected, click :guilabel:`Payment` and proceed to checkout for these items. Repeat for each guest." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:72 +msgid "Enter a :guilabel:`Floor Name`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:36 -msgid "Once you return to the table, the selected items are no longer on order, as they have been paid for." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:73 +msgid "Select the related :guilabel:`Point of Sales`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:38 -msgid "The feature is available as soon as at least two items are ordered." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:74 +msgid "Optionally, hover the mouse over the placeholder image and click the :icon:`fa-pencil` (:guilabel:`Edit`) icon to add a background image to the restaurant layout." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/bill_printing.rst:41 -msgid ":doc:`floors_tables`" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:76 +msgid "Click :guilabel:`Add a line` to create and configure a table:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:3 -msgid "Floors and tables" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:78 +msgid "Enter a :guilabel:`Table Number`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:5 -msgid "The **Floor plan view** enables you to manage restaurant floors and table arrangements and monitor table status in real time — including occupancy, reservations, and kitchen orders." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:79 +msgid "Fill in the number of :guilabel:`Seats`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:-1 -msgid "example of a floor plan view with visual keys to understand it." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:80 +msgid "Set the table's :guilabel:`Shape`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:12 -msgid "Table 101: The table is available now but booked at 15:00." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:81 +msgid "Optionally, activate additional settings by clicking the :icon:`oi-settings-adjust` (:guilabel:`settings`) icon:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:13 -msgid "Table 102: An order has been placed and sent to the kitchen." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:84 +msgid "Adjust the :guilabel:`Height`, :guilabel:`Width`, and :guilabel:`Color`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:14 -msgid "Table 103: The table was booked at 12:00, but customers are late." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:85 +msgid "Tick the :guilabel:`Active` checkbox to make a table available or not." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:15 -msgid "Table 104: Two items are waiting to be sent to the kitchen." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:86 +msgid "Save." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:16 -msgid "Table 105: The table is available." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:89 +msgid "Enable the :guilabel:`Table Booking` setting to assign an :guilabel:`Appointment resource` and make a table bookable." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:22 -msgid "From the POS backend" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:91 +msgid "Click the :icon:`fa-trash-o` (:guilabel:`trash`) icon to delete a table." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:24 -msgid "To create floors and tables from the backend, go to :menuselection:`Point of Sale --> Configuration --> Floor Plans`, and click :guilabel:`New` to create a floor. Optionally, activate additional settings by clicking the :icon:`oi-settings-adjust` (:guilabel:`adjust settings`) icon. Then," +#: ../../content/applications/sales/point_of_sale/restaurant.rst:94 +msgid "To create a :guilabel:`Floor plan` quickly, go to the :guilabel:`Restaurant Mode` section of the :ref:`POS settings `. Under :guilabel:`Floors & Tables Map`, type the floor name in the :guilabel:`Floors` field, and press `Enter`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:28 -msgid "Enter a :guilabel:`Floor Name`." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:101 +msgid "From the POS frontend" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:29 -msgid "Select the related :guilabel:`Point of Sales`." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:103 +msgid "To create floors and tables from the frontend, :ref:`open the POS register `, click the :icon:`fa-bars` (:guilabel:`hamburger menu`) icon in the top right corner of the :guilabel:`Floor plan` view, then :guilabel:`Edit Plan`. To configure the :guilabel:`Floor plan`, follow the next steps:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:30 -msgid "Hover over the placeholder image and click the :icon:`fa-pencil` (:guilabel:`pencil`) icon to add a background image (e.g., your restaurant layout)." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:108 +msgid "Click the :icon:`fa-plus` (:guilabel:`Add Floor`) icon to add a floor." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:32 -msgid "Click :guilabel:`Add a line` to create a table and set it up:" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:109 +msgid "Enter a :guilabel:`Floor name` and click :guilabel:`Apply`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:34 -msgid "Enter a :guilabel:`Table Number`." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:110 +msgid "Click the :icon:`fa-paint-brush` (:guilabel:`Change Floor Background`) icon to select a background color, or click :icon:`fa-camera` :guilabel:`File` to upload an image." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:35 -msgid "Fill in the number of :guilabel:`Seats`." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:112 +msgid "Optionally, click the :icon:`fa-pencil-square-o` (:guilabel:`Rename`) icon to rename the :guilabel:`Floor plan`, the :icon:`fa-files-o` (:guilabel:`Clone`) icon to create a copy, or the :icon:`fa-trash` (:guilabel:`Delete`) icon to delete it." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:36 -msgid "Select a :guilabel:`Square` or :guilabel:`Round` :guilabel:`Shape`." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:115 +msgid "Click :icon:`fa-plus-circle` :guilabel:`Table` to add a new table. To edit a table, select it and click one of the following icons:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:37 -msgid "Assign an :guilabel:`Appointment resource` to make the table bookable." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:118 +msgid ":icon:`fa-user` (:guilabel:`Seats`): Add or change the number of seats." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:38 -msgid "Adjust the :guilabel:`Height`, :guilabel:`Width`, and :guilabel:`Color`." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:119 +msgid ":icon:`fa-square-o` (:guilabel:`Square`) or :icon:`fa-circle-o` (:guilabel:`Round`): Change the table's shape." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:39 -msgid "Click the :icon:`fa-trash-o` (:guilabel:`delete`) icon to delete a table." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:121 +msgid ":icon:`fa-paint-brush` (:guilabel:`Change Floor Background`): Change the table's color." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:-1 -msgid "window to create a table in the POS backend" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:122 +msgid ":icon:`fa-pencil-square-o` (:guilabel:`Rename`): Change the table number." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:45 -msgid "Create floors on the spot: :ref:`access your POS settings `, type your floor name in the :guilabel:`Floors` field of the :guilabel:`Floors & Tables Map` section, and press *enter* or click :guilabel:`Create and edit...` to set it up." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:123 +msgid ":icon:`fa-copy` (:guilabel:`Clone`): Clone the table's attributes using the following table number." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:52 -msgid "From the POS front end" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:125 +msgid ":icon:`fa-trash` (:guilabel:`Delete`): Remove the table." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:54 -msgid "To create floors and tables from the front end, :ref:`open a POS session `, click the :icon:`fa-bars` (:guilabel:`hamburger menu`) icon in the upper right corner, then :guilabel:`Edit Plan`." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:129 +msgid "Removing a table or a floor is permanent." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:58 -msgid "Add a floor by clicking the :icon:`fa-plus` (:guilabel:`plus`) icon, then enter a name in the modal window." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:134 +msgid "Order management" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:60 -msgid "Click the :icon:`fa-paint-brush` (:guilabel:`paintbrush`) icon to change the background color or image." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:136 +msgid "To take an order, :ref:`open the POS register ` and follow these steps:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:62 -msgid "Click :icon:`fa-plus-circle` :guilabel:`Table` to add a new table." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:138 +msgid "Select a :ref:`floor plan ` and click a table or click the :icon:`fa-plus-circle` (:guilabel:`order`) button at the top to create a direct sales order." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:64 -msgid "To adjust a specific table, select it and click:" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:140 +msgid "Add products to the order." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:66 -msgid "The :icon:`fa-user` (:guilabel:`user`) icon to change the number of seats." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:141 +msgid "Click :guilabel:`Order` to validate the order." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:67 -msgid "The :icon:`fa-square` (:guilabel:`square`) or :icon:`fa-circle` (:guilabel:`round`) icon to switch the shape from round to square, and vice versa." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:143 +msgid "When ready, :ref:`process the order payment `." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:69 -msgid "The :icon:`fa-paint-brush` (:guilabel:`paintbrush`) icon to change the table's color." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:146 +msgid "To cancel a processed order, click :guilabel:`Actions`, then :guilabel:`Cancel Order`. If an :ref:`order printer is configured `, a cancellation ticket is automatically printed." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:70 -msgid "The :icon:`fa-pencil-square-o` (:guilabel:`rename`) icon to change the table number." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:149 +msgid "To switch to another table order, click the button with the table number at the top of the POS interface, enter a table number, and click :guilabel:`Jump`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:71 -msgid "The :icon:`fa-copy` (:guilabel:`clone`) icon to duplicate the table." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:151 +msgid "Click :guilabel:`Release table` to cancel a table's occupancy." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:72 -msgid "The :icon:`fa-trash` (:guilabel:`bin`) icon to remove the table." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:152 +msgid ":ref:`Configure a printer ` to send an order to the kitchen printer when clicking :guilabel:`Order`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:74 -msgid "After making all the necessary modifications, click :guilabel:`Save` or the :icon:`fa-floppy-o` (:guilabel:`floppy disk`) icon to save." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:158 +msgid "Order transfer" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:-1 -msgid "the floor plan view in edit mode." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:160 +msgid "To transfer an order to another table from the :ref:`POS interface `, click :guilabel:`Actions`, then :guilabel:`Transfer/Merge`, and choose the target table in the :ref:`Floor plan ` view:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:82 -msgid "Removing a table or a floor cannot be undone." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:164 +msgid "Select an available table to transfer customers and their orders." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:87 -msgid "Table transfer" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:165 +msgid "Select an occupied table to merge customers and their orders." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:89 -msgid "Select a table to move customers to another table, then click :guilabel:`Actions` and :icon:`oi-arrow-right` :guilabel:`Transfer/Merge`." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:170 +msgid "Order printing" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:92 -msgid "In the floor plan view, choose the target table:" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:175 +msgid "To enable sending orders to a kitchen or a bar printer, :doc:`connect a printer ` to Odoo, go to the :ref:`POS settings `, and follow these steps:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:94 -msgid "Select a free table to transfer customers and their orders." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:179 +msgid "Scroll down to the :guilabel:`Preparation` section and enable the :guilabel:`Preparation Printers` setting." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:95 -msgid "Select an occupied table to merge customers and their orders." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:181 +msgid "Type the printer's name in the :guilabel:`Printers` field and click :guilabel:`Create and edit`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/floors_tables.rst:98 -msgid ":doc:`../restaurant`" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:182 +msgid "On the printer setup form, select the :guilabel:`Printer Type`:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:3 -msgid "Orders printing" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:184 +msgid "If the printer is connected to an :doc:`IoT system `, select :guilabel:`Use a printer connected to the IoT`, and choose the relevant :doc:`device `. This process requires the IoT app and an IoT system." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:5 -msgid "Integrating printers in a restaurant or bar's workflow can enhance communication and collaboration between the front-of-house and back-of-house teams, leading to a more streamlined and efficient service." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:188 +msgid "If using an :doc:`Epson printer that does not require an IoT system connection `, select :guilabel:`Use an Epson printer` and enter the :guilabel:`Epson Printer IP Address`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:15 -msgid "Enable and create printers" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:191 +msgid "Define the product categories to be printed by clicking :guilabel:`Add a line` in the :guilabel:`Printed Product Categories` field and selecting the preferred category from the popover." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:17 -msgid "To enable sending orders to a kitchen or bar printer, go to :menuselection:`Point of Sale --> Configuration --> Settings`, scroll down to the :guilabel:`Restaurant & Bar` section, and enable :guilabel:`Kitchen Printers`. Type in a name for the printer in the :guilabel:`Printers` field and click :guilabel:`Create and edit...` to open a setup form." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:194 +msgid "Click :guilabel:`Save & Close`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:22 -msgid "To get a list of all the printers already created or to modify an already created printer, click :guilabel:`--> Printers` and select the desired printer to open the setup form." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:195 +msgid "In the :ref:`POS settings `, click :guilabel:`Save`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:-1 -msgid "settings to enable the kitchen printers" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:197 +msgid "The printer is then connected to the point of sale and can print kitchen orders and order receipts." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:32 -msgid "Setup form" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:200 +msgid "Printing kitchen orders requires assigning a :guilabel:`PoS Product Category`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:34 -msgid "From the :ref:`setup form `, select the :guilabel:`Printer Type` according to your installation:" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:201 +msgid "To create a :guilabel:`Printed Product Category` on the :guilabel:`Add: Printed Product Categories` popover, click :guilabel:`New`. Enter a name, select a :guilabel:`Parent Category`, choose a :guilabel:`Color`, click the :icon:`fa-pencil` (:guilabel:`Edit`) icon to add an image, determine the product availability, then click :guilabel:`Save & Close`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:37 -msgid "If your printer is connected to an IoT system, select :guilabel:`Use a printer connected to the IoT Box` and select the device in the :guilabel:`IoT Device` field." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:207 +msgid "To access all preparation printers from the :ref:`POS settings `, scroll down to the :guilabel:`Preparation` section, and click :icon:`oi-arrow-right` :guilabel:`Printers`. Alternatively, go to :menuselection:`Point of Sale --> Orders --> Preparations Printers`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:39 -msgid "If you use an Epson printer that does not require an IoT system, select :guilabel:`Use an Epson printer` and enter the printer's IP address in the :guilabel:`Epson Printer IP Address` field." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:213 +msgid ":doc:`Connect an IoT system to a POS `" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:43 +#: ../../content/applications/sales/point_of_sale/restaurant.rst:214 +msgid ":doc:`/applications/general/iot/devices/printer`" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:215 msgid ":doc:`/applications/general/iot/connect`" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:44 -msgid ":doc:`/applications/general/iot/devices/printer`" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:216 +msgid ":doc:`/applications/sales/point_of_sale/preparation`" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:45 -msgid ":doc:`../configuration/epos_ssc`" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:221 +msgid "Bills and payment" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:47 -msgid "Set your printer to print specific products based on their POS category. To do so, click :guilabel:`Add a line` in the :guilabel:`Printed Product Categories` field." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:226 +msgid "Bill splitting" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:-1 -msgid "setup form to configure a kitchen printer" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:228 +msgid "To allow bill splitting, go to :menuselection:`Point of Sale --> Configuration --> Settings`, and enable :guilabel:`Allow Bill Splitting` under the :guilabel:`Restaurant Mode` section." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:55 -msgid "Print orders" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:231 +msgid "To split a bill from the :ref:`POS interface `, follow these steps:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:57 -msgid "From an open session, start taking an order and click :guilabel:`Order` to send it to the bar or the kitchen." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:233 +msgid "Click :guilabel:`Actions`, then :guilabel:`Split`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:-1 -msgid "order button from the POS UI to send orders to a kitchen or a bar" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:234 +msgid "Select at least one product and click :guilabel:`Split Order`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/kitchen_printing.rst:65 -msgid "When products can be printed, they appear in green in the cart, and the order button turns green." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:235 +msgid "Proceed with the :ref:`payment `." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:3 -msgid "Tips" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:236 +msgid "Click :icon:`fa-chevron-right` :guilabel:`Continue` and repeat the process for each guest." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:239 +msgid "Splitting a bill requires ordering at least two products and creates a sub-order, which must be paid before returning to the main order." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:241 +msgid "Clicking :guilabel:`Split Order` without selecting any product creates an empty sub-order." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:246 +msgid "Order payment" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:248 +msgid "To proceed with the order payment from the :ref:`POS interface `, follow these steps:" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:251 +msgid "Click :guilabel:`Payment`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:5 -msgid "Tipping is customary in multiple countries. Point of Sale allows tipping in :ref:`shops `, :doc:`bars <../restaurant>`, or :doc:`restaurants <../restaurant>`." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:252 +msgid "Select a :doc:`payment method `." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:13 -msgid "To allow tipping in your POS, activate the :guilabel:`Tips` feature in :menuselection:`Point of Sale --> Configuration --> Settings`. At the top of the page, select the POS in which you wish to allow **tipping**, scroll down to the :guilabel:`Payment` section and check :guilabel:`Tips`. Once enabled, add a :guilabel:`Tip Product` in the corresponding field, and save. The designated product will be used as a reference on customers' receipts." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:253 +msgid "Optionally, select a customer and send an invoice to them:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:-1 -msgid "enable tips in a POS" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:255 +msgid "Click :icon:`fa-user` :guilabel:`Customer` to select or create a customer account." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:25 -msgid "Tip products" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:256 +msgid "Enable :icon:`fa-file-text-o` :guilabel:`Invoice` to allow sending an invoice to the customer." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:27 -msgid "**Tip products** can be created on the spot. To do so, enter a product's name in the :ref:`Tip Product ` field and click :guilabel:`Create` or press **enter**. The product is automatically configured to be used as a tip at the payment screen." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:258 +#: ../../content/applications/sales/point_of_sale/restaurant.rst:312 +msgid "Click :guilabel:`Validate`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:31 -msgid "However, if you wish to be able to select the tip product in a POS session, you must activate the **Available in POS** setting. To do so, click :guilabel:`Create and edit...` to open the product configuration form. Then, go to the :guilabel:`Sales` tab, tick the :guilabel:`Available in POS` checkbox, and click :guilabel:`Save & Close`." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:263 +msgid "Receipt printing" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:37 -msgid "When you create a product to use as a tip, leave the **product type** as :guilabel:`Consumable` to avoid unnecessary inventory movements." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:265 +msgid "To allow receipt printing, go to :menuselection:`Point of Sale --> Configuration --> Settings`, and enable :guilabel:`Early Receipt Printing` under the :guilabel:`Restaurant Mode` section." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:39 -msgid "You can only select one tip product per POS, but you can choose a different one for each." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:268 +msgid "After a successful :ref:`order payment `, click :icon:`fa-print` :guilabel:`Print Full Receipt` to generate and print a bill." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:42 -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:72 -msgid "Tip using an Adyen terminal" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:272 +msgid "If a printer is :doc:`configured and linked ` to a point of sale, the receipt is automatically printed upon payment confirmation." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:44 -msgid "If you use an :doc:`Adyen <../payment_methods/terminals/adyen>` payment terminal and wish to enable **tips** using the terminal, check :guilabel:`Add tip through payment terminal (Adyen)` below the :ref:`tip settings `." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:276 +msgid ":doc:`/applications/sales/point_of_sale/receipts_invoices`" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:49 -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:79 -msgid "Tip after payment" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:286 +msgid "To allow tipping in a POS, go to the :ref:`POS settings `, scroll down to the :guilabel:`Payment` section, enable :guilabel:`Tips`, and click :guilabel:`Save`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:51 -msgid "If you use a POS system in a bar or a restaurant, you can enable :guilabel:`Add tip after payment (North America specific)`. Doing so generates a bill to print and complete manually by the customer and the waiter. That bill indicates the tip value the customer chooses to give after the payment." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:290 +msgid "The :guilabel:`Add tip after payment` setting only works for a POS in the United States of America with an :doc:`Adyen ` or a :doc:`Stripe ` :ref:`payment terminal `." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:56 -msgid "To use this feature, the selected payment method must have a bank journal attributed." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:293 +msgid "The :guilabel:`Add tip through payment terminal (Adyen)` setting only works with an :ref:`Adyen ` terminal." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:59 -msgid "Add tips" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:297 +msgid "Saving the :guilabel:`Tips` setting automatically fills the :guilabel:`Tip product` field with the preconfigured :guilabel:`[TIPS] Tips` product, which is only used for tips. When selecting another product in the :guilabel:`Tip product` field, the chosen product is no longer available on the :ref:`POS interface `." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:61 -msgid "To add tips to an order, :ref:`access the payment screen ` and click :guilabel:`♥ Tip`. Then, enter the tipping amount, click :guilabel:`Confirm` to validate, and process the payment." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:301 +msgid "Choose only one tip product per POS." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:-1 -msgid "tip popup window" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:306 +msgid "Tip and payment" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:67 -msgid "Alternatively, you can select the :ref:`tip product ` on the POS interface to add it to the cart. When selected, the product is automatically set as a tip, and its default value equals its **Sales Price**." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:308 +msgid "To process a tip during :ref:`payment `, follow these steps:" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:74 -msgid "During checkout, select **Adyen** as the payment terminal, and send the payment request to the device by clicking :guilabel:`Send`. The customers are asked to enter the desired tipping amount on the terminal's screen before proceeding to the payment." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:310 +msgid "Click :icon:`fa-heart` :guilabel:`Tip`, add the amount, then click :guilabel:`Ok`." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:81 -msgid "At checkout, select a card payment method and click :guilabel:`Close Tab`. Doing so generates a bill to complete by the customer." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:311 +msgid "Select a :doc:`payment method ` for the order and the tip." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:-1 -msgid "tipping bill after payment to complete by customers" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:315 +msgid "If the order and the tip are paid using different payment methods, select a :doc:`payment method ` for the order, click :icon:`fa-heart` :guilabel:`Tip`, add the tip amount, and click :guilabel:`Ok`. Then, select a payment method for the tip and :guilabel:`Validate` the payment." msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:87 -msgid "On the following screen, click the percentage (:guilabel:`15%`, :guilabel:`20%`, :guilabel:`25%`), :guilabel:`No Tip`, or enter the tipping amount the customer chose to give. Then, click :guilabel:`Settle` to move to the following order." +#: ../../content/applications/sales/point_of_sale/restaurant.rst:321 +msgid "Tip after payment (US only)" msgstr "" -#: ../../content/applications/sales/point_of_sale/restaurant/tips.rst:-1 -msgid "screen to select a tip amount to collect after payment" +#: ../../content/applications/sales/point_of_sale/restaurant.rst:323 +msgid "To allow tipping after payment for a POS in the United States of America, ensure the :guilabel:`Add tip after payment` setting is enabled in the :ref:`POS settings `. To process tips after payment, follow these steps:" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:327 +msgid "On the :guilabel:`Payment` screen, select a :guilabel:`Card` payment method linked to a :doc:`Stripe ` or :doc:`Adyen ` terminal." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:330 +msgid "Click :guilabel:`Close Tab` and select the relevant option in the :guilabel:`Add a tip` screen:" +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:332 +msgid ":guilabel:`15%`, :guilabel:`20%`, or :guilabel:`25%`: Tip rates based on order total." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:333 +msgid ":guilabel:`No Tip`." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:334 +msgid ":guilabel:`Tip Amount`: Enter the relevant amount in the field." +msgstr "" + +#: ../../content/applications/sales/point_of_sale/restaurant.rst:335 +msgid "Click :guilabel:`Settle` to validate." msgstr "" #: ../../content/applications/sales/point_of_sale/self_order.rst:3 @@ -10275,87 +10424,6 @@ msgstr "" msgid "You can also use a barcode scanner to log your employees. To do so, :ref:`restrict access ` to the POS and :ref:`use barcodes to log your employees in ` your POS." msgstr "" -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:5 -msgid "The **customer display** feature provides customers with real-time checkout updates on a secondary display." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:-1 -msgid "customer screen" -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:14 -msgid "Depending on your POS setup, the feature can be displayed :ref:`locally on a secondary screen `, :ref:`remotely on another device `, or :ref:`another monitor connected to an IoT Box `." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:18 -msgid "To activate the feature, go to the POS settings, scroll down to the :guilabel:`Connected Devices` section, and tick the :guilabel:`Customer Display` checkbox." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:-1 -msgid "customer display setting checkbox" -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:27 -msgid "Local" -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:29 -msgid "Connect a second screen to your POS using an HDMI or USB-C cable, then," -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:32 -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:40 -msgid "Click the :icon:`fa-bars` icon (:guilabel:`hamburger menu`)." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:33 -msgid "Click the :icon:`fa-desktop` icon (:guilabel:`customer screen`) to open a new window to drag and drop onto the second screen." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:36 -msgid "For POS terminals running the Odoo Android app with dual-screen support," -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:38 -msgid ":doc:`Activate the Point of Sale Mobile module <../../../general/apps_modules>` to enable the customer display." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:41 -msgid "Once installed, click the :icon:`fa-desktop` icon (:guilabel:`customer screen`) to open the customer display on the terminal's secondary screen." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:47 -msgid "Remote" -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:49 -msgid "Access your database from another device (any computer, tablet, or smartphone), go to the POS application, click the vertical ellipsis button (:guilabel:`⋮`) on a POS card, and then :guilabel:`Customer Display` to open the display remotely." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:54 -msgid "The two devices are not required to share the same network." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:59 -msgid "IoT system" -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:61 -msgid "Connect an IoT box to your database and the second screen to the IoT box. Then, go to :menuselection:`Point of Sale --> Configuration --> Settings`, scroll down to the :guilabel:`Connected Devices` section, tick the :guilabel:`IoT Box` checkbox, and select the second monitor in the :guilabel:`Customer Display` field." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:-1 -msgid "iot setting to connect a customer display" -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:70 -msgid "Both devices need to be connected to the same local network." -msgstr "" - -#: ../../content/applications/sales/point_of_sale/shop/customer_display.rst:73 -msgid ":doc:`../configuration/pos_iot`" -msgstr "" - #: ../../content/applications/sales/point_of_sale/shop/sales_order.rst:3 msgid "Sales orders" msgstr "" @@ -11819,6 +11887,10 @@ msgstr "" msgid "After a plan is approved, Odoo automatically tracks performance and calculates commissions based on the established parameters." msgstr "" +#: ../../content/applications/sales/sales/commissions.rst:157 +msgid ":doc:`Commissions <../../hr/payroll/commissions>`" +msgstr "" + #: ../../content/applications/sales/sales/gelato.rst:3 msgid "Gelato" msgstr "" @@ -18384,251 +18456,6 @@ msgstr "" msgid ":doc:`Payment providers and payment methods `" msgstr "" -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:3 -msgid "Automation rules" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:5 -msgid "With subscriptions up-and-running, it is important to stay up-to-date with customers. It is efficient to use automation to avoid having to manually go through the list of subscribers to see how things are going. That is where Odoo's *automation rules* feature comes into play." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:9 -msgid "The Odoo *Subscriptions* application allows users to set up automatic emails, create tasks for salespeople, and even send satisfaction surveys for subscribers to evaluate their experience." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:13 -msgid "Create automation rules" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:15 -msgid "To create an automated rule, start by navigating to :menuselection:`Subscriptions app --> Configuration --> Automation Rules`. This is where all the automation rules for subscriptions can be found." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:19 -msgid "The :guilabel:`Automation Rules` page shows each rule's :guilabel:`Name`, :guilabel:`Action To Do`, what the automated rule will :guilabel:`Trigger On`, and the :guilabel:`Company` to which the rule applies." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:23 -msgid "To view or modify any existing automation rule, simply click the desired rule from this page." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:26 -msgid "When modifying an existing automation rule, Odoo \"grays-out\" the :guilabel:`Action` section of the form, and provides the following warning: *Action data can not be updated to avoid unexpected behaviors. Create a new action instead.*" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:30 -msgid "To create a new automation rule, click :guilabel:`New`." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:-1 -msgid "The Automation Rules page in the Odoo Subscriptions application." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:36 -msgid "Clicking :guilabel:`New` reveals a blank :guilabel:`Automation Rules` form with numerous fields to configure." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:-1 -msgid "A sample Automation Rules form in the Odoo Subscriptions application." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:44 -msgid "Automation rule form fields" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:46 -msgid ":guilabel:`Action Name`: title of the automated action rule." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:49 -msgid "Apply On section" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:51 -msgid "The :guilabel:`Apply On` section dictates which subscription orders/customers this automated action applies to." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:54 -msgid ":guilabel:`MRR Between`: designate a range of monthly recurring revenue to target." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:55 -msgid ":guilabel:`MRR Change More`: designate a change of monthly recurring revenue to target, in either percentage or unit of currency." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:57 -msgid ":guilabel:`Over`: choose a period of time over which the designated KPIs (Key Performance Indicators) are calculated." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:59 -msgid ":guilabel:`Rating Satisfaction`: designate satisfaction as :guilabel:`greater than` or :guilabel:`less than` a percentage." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:61 -msgid ":guilabel:`Status`: select the status of the subscriptions to be included in this automation rule. The options are: :guilabel:`Quotation`, :guilabel:`Quotation Sent`, :guilabel:`Sales Order`, and :guilabel:`Cancelled`." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:64 -msgid ":guilabel:`Stage goes from`: designate when the automation rule should be activated using two fields that represent two different stages of the subscription." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:66 -msgid ":guilabel:`Subscription Plans`: choose specific subscription plans to target with the automation rule." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:68 -msgid ":guilabel:`Products`: select specific product(s) to target with the automation rule." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:69 -msgid ":guilabel:`Customers`: select specific customer(s) to target with the automation rule." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:70 -msgid ":guilabel:`Company`: in a multi-company environment, select a specific company's subscription data to target with the automation rule." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:72 -msgid ":guilabel:`Sales Team`: select the data of specific sales team(s) to target with the automation rule." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:76 -msgid "If any field is left blank, the rule applies to every subscription without that specific designation." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:80 -msgid "The number of subscriptions that match the configured criteria of the customized automation rule are displayed at the bottom of the :guilabel:`Apply On` field." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:83 -msgid "If that green subscriptions link is clicked, Odoo reveals a separate page showcasing all the subscriptions that meet that automation rule's criteria." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:87 -msgid "Action section" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:89 -msgid "The :guilabel:`Action` section dictates what action occurs when an automated rule is triggered." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:91 -msgid "In the :guilabel:`Action To Do` field, choose the action that will occur once the automated rule is triggered. When clicked, the following options become available on a drop-down menu:" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:94 -msgid ":guilabel:`Create next activity`: creates the next activity to occur, which is configured in the :guilabel:`Activity` section that appears at the bottom of the automation rule form." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:96 -msgid ":guilabel:`Send an email to the customer`: sends an email to the customer(s) who fit the specified criteria of the automation rule." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:98 -msgid ":guilabel:`Send an SMS Text Message to the customer`: sends an SMS message to the customer(s) who fit the specified criteria of the automation rule." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:100 -msgid ":guilabel:`Set Contract Health value`: set the health value of the subscription contract." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:102 -msgid "If :guilabel:`Send an email to the customer` is selected in the :guilabel:`Action To Do` field, the following field appears:" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:105 -msgid ":guilabel:`Email Template`: create (and edit) a new email template *or* select from a list of pre-configured email templates to send to the customer(s)." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:108 -msgid "If :guilabel:`Send an SMS Text Message to the customer` is selected in the :guilabel:`Action To Do` field, the following field appears:" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:111 -msgid ":guilabel:`SMS Template`: create (and edit) a new SMS template *or* select from a list of pre-configured SMS templates to send to the customer(s)." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:114 -msgid "If :guilabel:`Set Contract Health value` is selected in the :guilabel:`Action To Do` field, the following field appears:" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:117 -msgid ":guilabel:`Health`: designate the health of the subscription by choosing one of the following options: :guilabel:`Neutral`, :guilabel:`Good`, or :guilabel:`Bad`." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:120 -msgid "In the :guilabel:`Trigger On` field, decide whether the automated rule should be triggered on a :guilabel:`Modification` or :guilabel:`Timed Condition`." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:124 -msgid "A :guilabel:`Trigger Now` button appears at the top of the automation rule form *only* when a trigger has been configured for the rule." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:128 -msgid "When the :guilabel:`Trigger Now` button is clicked, Odoo will trigger the action on *all* linked subscriptions, regardless of possible timed conditions." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:132 -msgid "Sending a SMS text message in Odoo requires In-App Purchase (IAP) credit or tokens. For more information on :abbr:`IAP (In-App Purchase)`, visit :doc:`../../essentials/in_app_purchase`. For more information on sending SMS messages, visit :doc:`../../marketing/sms_marketing`." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:137 -msgid "If :guilabel:`Timed Condition` is selected in the :guilabel:`Trigger On` field, the following fields appear:" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:140 -msgid ":guilabel:`Trigger Date`: represents when the condition should be triggered. If left blank, the action is created upon subscription creation *and* updates." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:142 -msgid ":guilabel:`Delay After Trigger`: select a delayed amount of time (:guilabel:`Minutes`, :guilabel:`Hours`, :guilabel:`Days`, or :guilabel:`Months`) for Odoo to wait before triggering the configured action. If a negative number is entered, the \"delay\" will occur *before* the :guilabel:`Trigger Date`." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:148 -msgid "Activity section" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:150 -msgid "If :guilabel:`Create next activity` is selected in the :guilabel:`Action To Do` field, an :guilabel:`Activity` section appears at the bottom of the :guilabel:`Automation Rules` form." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:153 -msgid ":guilabel:`Activity Type`: select an pre-configured activity type from the drop-down menu." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:154 -msgid ":guilabel:`Title`: enter a custom title for the chosen activity." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:155 -msgid ":guilabel:`Note`: leave a note for the employee to whom the activity is assigned." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:156 -msgid ":guilabel:`Due Date In`: enter an amount of days within which the activity should be completed." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:157 -msgid ":guilabel:`Assign To`: choose to assign the specified activity to either: :guilabel:`Subscription Salesperson`, :guilabel:`Sales Team Leader`, or :guilabel:`Specific Users`." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:161 -msgid "If :guilabel:`Specific Users` is selected as the :guilabel:`Assign To` option, a new :guilabel:`Specific Users` field appears beneath it, where a specific employee(s) can be chosen as the assignee(s) for the configured activity." -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:166 -#: ../../content/applications/sales/subscriptions/closing.rst:103 -#: ../../content/applications/sales/subscriptions/renewals.rst:128 -#: ../../content/applications/sales/subscriptions/reports.rst:403 -#: ../../content/applications/sales/subscriptions/scheduled_actions.rst:195 -#: ../../content/applications/sales/subscriptions/upselling.rst:107 -msgid ":doc:`../subscriptions`" -msgstr "" - -#: ../../content/applications/sales/subscriptions/automatic_alerts.rst:167 -msgid ":doc:`../../essentials/in_app_purchase`" -msgstr "" - #: ../../content/applications/sales/subscriptions/closing.rst:3 msgid "Close subscriptions" msgstr "" @@ -18737,6 +18564,14 @@ msgstr "" msgid "In addition, the specified :guilabel:`Close Reason` appears on the subscription order in the *Subscriptions* app in the backend (Administrator's view)." msgstr "" +#: ../../content/applications/sales/subscriptions/closing.rst:103 +#: ../../content/applications/sales/subscriptions/renewals.rst:128 +#: ../../content/applications/sales/subscriptions/reports.rst:403 +#: ../../content/applications/sales/subscriptions/scheduled_actions.rst:195 +#: ../../content/applications/sales/subscriptions/upselling.rst:107 +msgid ":doc:`../subscriptions`" +msgstr "" + #: ../../content/applications/sales/subscriptions/ecommerce.rst:3 msgid "Subscriptions in the eCommerce shop" msgstr "" @@ -19698,10 +19533,6 @@ msgstr "" msgid "For example, if the next invoice date is July 1st, and the :guilabel:`Automatic Closing` is set to '30 Days', the scheduled action would close the subscription on August 1st." msgstr "" -#: ../../content/applications/sales/subscriptions/scheduled_actions.rst:196 -msgid ":doc:`automatic_alerts`" -msgstr "" - #: ../../content/applications/sales/subscriptions/upselling.rst:3 #: ../../content/applications/sales/subscriptions/upselling.rst:44 msgid "Upsell subscriptions" diff --git a/locale/sources/services.pot b/locale/sources/services.pot index 8e9deda939..493ddec3aa 100644 --- a/locale/sources/services.pot +++ b/locale/sources/services.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -321,7 +321,7 @@ msgid "Helpdesk" msgstr "" #: ../../content/applications/services/helpdesk.rst:8 -msgid "Odoo **Helpdesk** is a ticket-based customer support application. Multiple teams can be configured and managed in one dashboard, each with their own pipeline for tickets submitted by customers. Pipelines are organized in customizable stages that enable teams to track, prioritize, and solve customer issues quickly and efficiently." +msgid "Odoo **Helpdesk** is a ticket-based customer support application. Multiple teams can be configured and managed in one dashboard, each with their own pipeline for tickets submitted by customers. Pipelines are organized in customizable stages that enable teams to track, prioritize, and solve customer issues efficiently." msgstr "" #: ../../content/applications/services/helpdesk.rst:16 @@ -408,96 +408,116 @@ msgstr "" msgid "When tickets are received, they need to be assigned to a member of the team. This is done either manually on each individual ticket, or through :guilabel:`Automatic Assignment`. Check the :guilabel:`Automatic Assignment` checkbox to enable this feature for the team." msgstr "" +#: ../../content/applications/services/helpdesk.rst:94 +msgid "If an employee has time off scheduled in the **Time Off** application, they are **not** assigned tickets during that time. If no employees are currently available, the system looks ahead on the calendar until there is a match." +msgstr "" + #: ../../content/applications/services/helpdesk.rst:-1 msgid "View of a Helpdesk team settings page emphasizing the automatic assignment features in Odoo\n" "Helpdesk." msgstr "" -#: ../../content/applications/services/helpdesk.rst:97 +#: ../../content/applications/services/helpdesk.rst:103 +msgid "Assign tickets based on workload" +msgstr "" + +#: ../../content/applications/services/helpdesk.rst:105 msgid "Select one of the following assignment methods, based on how the workload should be allocated across the team:" msgstr "" -#: ../../content/applications/services/helpdesk.rst:100 -msgid ":guilabel:`Each user is assigned an equal number of tickets`: Tickets are assigned to team members based on total ticket count, regardless of the number of open or closed tickets they are currently assigned." +#: ../../content/applications/services/helpdesk.rst:108 +msgid ":guilabel:`Each user is assigned an equal number of tickets`: Tickets are assigned to team members based on total unassigned ticket count, regardless of the number of open or closed tickets they are currently assigned." msgstr "" -#: ../../content/applications/services/helpdesk.rst:103 +#: ../../content/applications/services/helpdesk.rst:111 msgid ":guilabel:`Each user has an equal number of open tickets`: Tickets are assigned to team members based on how many open tickets they are currently assigned." msgstr "" -#: ../../content/applications/services/helpdesk.rst:107 +#: ../../content/applications/services/helpdesk.rst:115 msgid "When :guilabel:`Each user is assigned an equal number of tickets` is selected, the overall number of tickets assigned to team members is the same, but it does **not** consider the current workload." msgstr "" -#: ../../content/applications/services/helpdesk.rst:111 +#: ../../content/applications/services/helpdesk.rst:119 msgid "When :guilabel:`Each user has an equal number of open tickets` is selected, it ensures a balanced workload among team members, as it takes the current number of active tickets into account." msgstr "" -#: ../../content/applications/services/helpdesk.rst:114 -msgid "Finally, add the :guilabel:`Team Members` who are to be assigned tickets for this team. Leave the field empty to include all employees who have the proper assignments and access rights configured in their user account settings." +#: ../../content/applications/services/helpdesk.rst:122 +msgid "Add the :guilabel:`Team Members` who are to be assigned tickets for this team. Leave the field empty to include all employees who have the proper assignments and access rights configured in their user account settings." msgstr "" -#: ../../content/applications/services/helpdesk.rst:119 -msgid "If an employee has time off scheduled in the **Time Off** application, they are **not** assigned tickets during that time. If no employees are available, the system looks ahead until there is a match." +#: ../../content/applications/services/helpdesk.rst:127 +msgid "Assign tickets based on expertise" +msgstr "" + +#: ../../content/applications/services/helpdesk.rst:129 +msgid "To assign tickets to team members based on their expertise, and the associated tag on the tickets, select :guilabel:`Dispatch tickets based on tags` under :guilabel:`Automatic Assignment`. Then, click :guilabel:`Configure tags handled by team members`." msgstr "" -#: ../../content/applications/services/helpdesk.rst:124 +#: ../../content/applications/services/helpdesk.rst:133 +msgid "Click :guilabel:`New` to create a new :guilabel:`Ticket Tag`, such as `Pricing` or `IT`. Select one or more :guilabel:`Team Members` from the drop-down list. Click :guilabel:`Save` when finished." +msgstr "" + +#: ../../content/applications/services/helpdesk.rst:137 +msgid "If a ticket has no tag set, the ticket remains unassigned." +msgstr "" + +#: ../../content/applications/services/helpdesk.rst:140 msgid ":ref:`Manage users `" msgstr "" -#: ../../content/applications/services/helpdesk.rst:125 +#: ../../content/applications/services/helpdesk.rst:141 msgid ":doc:`Access rights <../general/users/access_rights>`" msgstr "" -#: ../../content/applications/services/helpdesk.rst:128 +#: ../../content/applications/services/helpdesk.rst:144 msgid "Merge tickets" msgstr "" -#: ../../content/applications/services/helpdesk.rst:130 +#: ../../content/applications/services/helpdesk.rst:146 msgid "If duplicate tickets are found in **Helpdesk**, they can be combined into a single ticket using the *merge* feature." msgstr "" -#: ../../content/applications/services/helpdesk.rst:134 +#: ../../content/applications/services/helpdesk.rst:150 msgid "The *merge* feature is **only** accessible if the :doc:`Data Cleaning <../productivity/data_cleaning>` application is installed on the database." msgstr "" -#: ../../content/applications/services/helpdesk.rst:137 +#: ../../content/applications/services/helpdesk.rst:153 msgid "To merge two or more tickets, navigate to :menuselection:`Helpdesk app --> Tickets --> All Tickets`. Identify the tickets to be merged, and tick the checkbox at the far-left of each ticket to select them. Then, click the :icon:`fa-cog` :guilabel:`Actions` icon, and select :guilabel:`Merge` from the drop-down menu. Doing so opens a new page where the selected tickets are listed with their :guilabel:`Similarity` rating. From here, click either :ref:`Merge ` to combine the tickets, or :guilabel:`DISCARD`." msgstr "" -#: ../../content/applications/services/helpdesk.rst:145 +#: ../../content/applications/services/helpdesk.rst:161 msgid "Convert tickets to opportunities" msgstr "" -#: ../../content/applications/services/helpdesk.rst:147 +#: ../../content/applications/services/helpdesk.rst:163 msgid "Some tickets may be better handled by the sales team, rather than the support team. In this case, tickets can be converted to *opportunities* and assigned to a sales team for follow-up." msgstr "" -#: ../../content/applications/services/helpdesk.rst:151 +#: ../../content/applications/services/helpdesk.rst:167 msgid "This feature is **only** available if the :doc:`CRM <../sales/crm>` app is installed." msgstr "" -#: ../../content/applications/services/helpdesk.rst:153 +#: ../../content/applications/services/helpdesk.rst:169 msgid "To convert a ticket to an opportunity, first navigate to a ticket, either from a team's pipeline, or by navigating to :menuselection:`Helpdesk app --> Tickets` and clicking a ticket to open it." msgstr "" -#: ../../content/applications/services/helpdesk.rst:156 +#: ../../content/applications/services/helpdesk.rst:172 msgid "At the top of the ticket, click the :guilabel:`Convert to Opportunity` button." msgstr "" -#: ../../content/applications/services/helpdesk.rst:159 +#: ../../content/applications/services/helpdesk.rst:175 msgid "If :doc:`leads <../sales/crm/acquire_leads/convert>` are enabled on the **CRM** app, tickets are converted to *leads*, and the button reads :guilabel:`Convert to Lead`." msgstr "" -#: ../../content/applications/services/helpdesk.rst:162 +#: ../../content/applications/services/helpdesk.rst:178 msgid "This opens the :guilabel:`Convert to Opportunity` pop-up. Fill in or select the following information on the pop-up:" msgstr "" -#: ../../content/applications/services/helpdesk.rst:165 +#: ../../content/applications/services/helpdesk.rst:181 msgid ":guilabel:`Customer`: Select whether to :guilabel:`Create a new customer`, :guilabel:`Link to an existing customer`, or :guilabel:`Do not link to a customer`. If :guilabel:`Link to a customer` is chosen, select the appropriate customer name from the :guilabel:`Customer` drop-down." msgstr "" -#: ../../content/applications/services/helpdesk.rst:169 +#: ../../content/applications/services/helpdesk.rst:185 msgid ":guilabel:`Sales Team`: Specify which :guilabel:`Sales Team` and :guilabel:`Salesperson` this created opportunity is assigned to." msgstr "" @@ -505,15 +525,15 @@ msgstr "" msgid "The convert to opportunity pop-up window." msgstr "" -#: ../../content/applications/services/helpdesk.rst:175 +#: ../../content/applications/services/helpdesk.rst:191 msgid "After completing the form, click :guilabel:`Convert to Opportunity`. Doing so creates a new opportunity in the **CRM** app. The original ticket is linked in the chatter of the new opportunity for traceability." msgstr "" -#: ../../content/applications/services/helpdesk.rst:180 +#: ../../content/applications/services/helpdesk.rst:196 msgid "After the ticket is converted to an opportunity, the ticket is archived." msgstr "" -#: ../../content/applications/services/helpdesk.rst:183 +#: ../../content/applications/services/helpdesk.rst:199 msgid "`Odoo Tutorials: Helpdesk `_" msgstr "" diff --git a/locale/sources/studio.pot b/locale/sources/studio.pot index d60cbe7fca..ccfbdc2330 100644 --- a/locale/sources/studio.pot +++ b/locale/sources/studio.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,7 +21,7 @@ msgid "Studio" msgstr "" #: ../../content/applications/studio.rst:18 -msgid "**Odoo Studio** is a toolbox used to customize Odoo without coding knowledge. For example, in any app, add or modify:" +msgid "**Studio** is a toolbox used to customize Odoo without coding knowledge. For example, in any app, add or modify:" msgstr "" #: ../../content/applications/studio.rst:21 @@ -61,30 +61,14 @@ msgid "Learn how to :doc:`build an app from scratch msgstr "" #: ../../content/applications/studio.rst:34 -msgid "To access **Studio**, navigate to the app and model you want to modify, then click the :icon:`oi-studio` (:guilabel:`Toggle Studio`) icon. Alternatively, with any app open, click the :icon:`oi-studio` (:guilabel:`Toggle Studio`) icon and navigate to the relevant app and model." +msgid "To access Studio, navigate to the app and model you want to modify, then click the :icon:`oi-studio` (:guilabel:`Toggle Studio`) icon, or vice versa." msgstr "" -#: ../../content/applications/studio.rst:38 +#: ../../content/applications/studio.rst:37 msgid "To close **Studio**, click :guilabel:`Close` in the upper-right corner." msgstr "" -#: ../../content/applications/studio.rst:41 -msgid "Installing **Studio** in an Odoo database on the *Standard* pricing plan automatically triggers an upsell to the *Custom* pricing plan." -msgstr "" - -#: ../../content/applications/studio.rst:44 -msgid "**For yearly or multi-year contracts**: An upsell order is created with a 30-day limit." -msgstr "" - -#: ../../content/applications/studio.rst:45 -msgid "**For monthly contracts**: The subscription automatically switches to the *Custom* plan and the new rate is applied when the next bill is generated." -msgstr "" - -#: ../../content/applications/studio.rst:48 -msgid "For more information, refer to `Odoo's pricing page `_ or contact your account manager." -msgstr "" - -#: ../../content/applications/studio.rst:52 +#: ../../content/applications/studio.rst:40 msgid "`Odoo Tutorials: Studio `_" msgstr "" @@ -225,340 +209,262 @@ msgid "Automation rules" msgstr "" #: ../../content/applications/studio/automated_actions.rst:7 -msgid "Automation rules allow the execution of one or more predefined actions in response to a specific trigger, e.g., create an activity when a field is set to a specific value, or archive a record 7 days after its last update." +msgid "Automation rules are used to trigger automatic changes based on user actions (e.g., apply a modification when a field is set to a specific value), email events, time conditions (e.g., archive a record 7 days after its last update), or external events." msgstr "" #: ../../content/applications/studio/automated_actions.rst:11 -msgid "When creating an automation rule, :ref:`domain filters ` allow you to add conditions that must be met for the automation rule to run, e.g., the opportunity must be assigned to a specific salesperson, or the state of the record must not be :guilabel:`Draft`." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:16 -msgid "To create an automation rule with **Odoo Studio**, proceed as follows:" +msgid "To create an automation rule with Studio, proceed as follows:" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:18 +#: ../../content/applications/studio/automated_actions.rst:13 msgid ":ref:`Open Studio ` and click :guilabel:`Automations`, then :guilabel:`New`." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:19 -msgid "Give the automation rule a clear, meaningful name that identifies its purpose." +#: ../../content/applications/studio/automated_actions.rst:14 +msgid "Select the :ref:`studio/automated-actions/trigger` and, if necessary, fill in the fields that appear on the screen based on the chosen trigger." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:20 -msgid "Select the :ref:`trigger ` and, if necessary, fill in the fields that appear on the screen based on the chosen trigger." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:22 +#: ../../content/applications/studio/automated_actions.rst:16 msgid "Click :guilabel:`Add an action`, then select the :guilabel:`Type` of :ref:`action ` and fill in the fields that appear on the screen based on your selected action." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:25 +#: ../../content/applications/studio/automated_actions.rst:19 msgid "Click :guilabel:`Save & Close` or :guilabel:`Save & New`." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:29 -msgid "To ensure follow-up on less satisfied clients, this automation rule creates an activity 3 months after a sales order is created for clients with a satisfaction percentage lower than 30%." -msgstr "" - #: ../../content/applications/studio/automated_actions.rst:0 -msgid "Example of an automation rule on the Subscription model" +msgid "Example of an automated action on the Subscription model" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:37 -msgid "Use the :guilabel:`Notes` tab to document the purpose and functioning of automation rules. This makes rules easier to maintain and facilitates collaboration between users." +#: ../../content/applications/studio/automated_actions.rst:27 +msgid "To modify the :doc:`model ` of the automation rule, switch models before clicking :guilabel:`Automations` in Studio, or :ref:`activate the developer mode `, create or edit an automation rule, and select the :guilabel:`Model` in the :guilabel:`Automation Rules` form." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:39 -msgid "To modify the :doc:`model ` targeted by the automation rule, switch models before clicking :guilabel:`Automations` in Studio, or :ref:`activate developer mode `, create or edit an automation rule, and select the :guilabel:`Model` in the :guilabel:`Automation Rules` form." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:43 -msgid "Automation rules can be created from any kanban stage by clicking the :icon:`fa-cog` :guilabel:`(Settings)` icon that appears when hovering over the kanban stage name, then selecting :guilabel:`Automations`. In this case, the :guilabel:`Trigger` is set to :guilabel:`Stage is set to` by default, but it can be changed if necessary." +#: ../../content/applications/studio/automated_actions.rst:31 +msgid "You can also create automation rules from any kanban stage by clicking the gear icon (:guilabel:`⚙` ) next to the kanban stage name, then selecting :guilabel:`Automations`. In this case, the :guilabel:`Trigger` is set to :guilabel:`Stage is set to` by default, but you can change it if necessary." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Create automations from a kanban stage" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:54 +#: ../../content/applications/studio/automated_actions.rst:42 msgid "Trigger" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:56 -msgid "The :guilabel:`Trigger` is used to define what kind of event needs to occur for the automation rule to run. The available triggers depend on the :doc:`model `. Five trigger categories are available overall:" +#: ../../content/applications/studio/automated_actions.rst:44 +msgid "The :guilabel:`Trigger` is used to define when the automation rule should be applied. The available triggers depend on the :doc:`model `. Five trigger categories are available overall:" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:60 -msgid ":ref:`studio/automated-actions/trigger-values-updated`" -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:61 -msgid ":ref:`studio/automated-actions/trigger-email-events`" +#: ../../content/applications/studio/automated_actions.rst:48 +msgid ":ref:`studio/automated-actions/trigger/values-updated`" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:62 -msgid ":ref:`studio/automated-actions/trigger-timing-conditions`" +#: ../../content/applications/studio/automated_actions.rst:49 +msgid ":ref:`studio/automated-actions/trigger/email-events`" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:63 -msgid ":ref:`studio/automated-actions/trigger-custom`" +#: ../../content/applications/studio/automated_actions.rst:50 +msgid ":ref:`studio/automated-actions/trigger/values-timing-conditions`" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:64 -msgid ":ref:`studio/automated-actions/trigger-external`" +#: ../../content/applications/studio/automated_actions.rst:51 +msgid ":ref:`studio/automated-actions/trigger/custom`" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:69 -msgid "Adding conditions" +#: ../../content/applications/studio/automated_actions.rst:52 +msgid ":ref:`studio/automated-actions/trigger/external`" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:71 -msgid "Domain filters allow you to determine the records an automation rule should target or exclude. Efficient filtering enhances overall performance as it avoids unnecessary processing on records that are not impacted by the rule." +#: ../../content/applications/studio/automated_actions.rst:55 +msgid "You can also define a :guilabel:`Before Update Domain` to specify the conditions that must be met *before* the automation rule is triggered. In contrast, the conditions defined using the :ref:`Extra Conditions ` and :ref:`Apply on ` filters are checked *during* the execution of the automation rule." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:76 -msgid ":ref:`Activate developer mode ` before creating an automation rule to have the most flexibility in adding domain filters." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:79 -msgid "Depending on the trigger chosen, it is possible to define one or more conditions a record must meet *before* and/or *after* a trigger occurs." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:82 -msgid "The :guilabel:`Before Update Domain` defines the conditions a record must meet *before* the trigger event occurs, e.g., the record must have `Type = Customer Invoice` and `Status = Posted`." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:85 -msgid "With :ref:`developer mode activated `, click :guilabel:`Edit Domain`, if available, then :guilabel:`New Rule`." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:88 -msgid ":guilabel:`Extra Conditions`, or in some cases :guilabel:`Apply on` filters, define the conditions a record must meet *after* the trigger event occurs, e.g., the customer invoice must have `Payment Status = Partially Paid`." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:92 -msgid "With :ref:`developer mode activated ` if needed, click :guilabel:`Add conditions` or :guilabel:`Edit Domain`, as relevant, then :guilabel:`New Rule`." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:95 -msgid "When a :ref:`trigger ` occurs, e.g., the payment status of a posted customer invoice is updated, the automation rule checks the defined conditions and only executes the :ref:`action ` if the record matches those conditions." +#: ../../content/applications/studio/automated_actions.rst:61 +msgid "To define a :guilabel:`Before Update Domain`, :ref:`activate the developer mode `, create or edit an automation rule, click :guilabel:`Edit Domain`, then click :guilabel:`New Rule`." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:100 -msgid "If the automated action should be executed when an email address is set for the first time (in contrast to modifying an email address) on an existing contact that is an individual rather than a company, use `Email is not set` and `Is a Company is not set` as the :guilabel:`Before Update Domain` and `Email is set` as the :guilabel:`Apply on` domain." +#: ../../content/applications/studio/automated_actions.rst:65 +msgid "For example, if you want the automated action to happen when an email address is set on a contact that did not have an address before (in contrast to modifying their existing address), define the :guilabel:`Before Update Domain` to :guilabel:`Email is not set`, and the :guilabel:`Apply on` domain to :guilabel:`Email is set`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Example of a trigger with a Before Update Domain" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:109 -msgid "The :guilabel:`Before Update Domain` is not checked upon the creation of a record." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:114 +#: ../../content/applications/studio/automated_actions.rst:76 msgid "Values Updated" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:116 -msgid "Trigger automated actions when specific changes happen in the database. The triggers available in this category depend on the model and are based on common changes, such as adding a specific tag (e.g., to a task) or setting a field's value (e.g., setting the :guilabel:`User` field)." +#: ../../content/applications/studio/automated_actions.rst:78 +msgid "The triggers available in this category depend on the model and are based on common field changes, such as adding a specific tag (e.g., to a task) or setting the :guilabel:`User` field. Select the trigger, then select a value if required." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:120 -msgid "Select the trigger, then select a value if required." +#: ../../content/applications/studio/automated_actions.rst:-1 +msgid "Example of a Values Updated trigger" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:125 +#: ../../content/applications/studio/automated_actions.rst:88 msgid "Email Events" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:127 +#: ../../content/applications/studio/automated_actions.rst:90 msgid "Trigger automated actions upon receiving or sending emails." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:132 +#: ../../content/applications/studio/automated_actions.rst:95 msgid "Timing Conditions" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:134 -msgid "Trigger automated actions at a point in time relative to a date field or to the creation or update of a record. The following triggers are available:" +#: ../../content/applications/studio/automated_actions.rst:97 +msgid "Trigger automated actions based on a date field. The following triggers are available:" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:137 -msgid ":guilabel:`Based on date field`: The action is triggered a defined period of time before or after the date of the selected date field." +#: ../../content/applications/studio/automated_actions.rst:99 +msgid ":guilabel:`Based on date field`: Select the field to be used next to the :guilabel:`Delay` field." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:139 -msgid ":guilabel:`After creation`: The action is triggered a defined period of time after a record is created and saved." +#: ../../content/applications/studio/automated_actions.rst:100 +msgid ":guilabel:`After creation`: The action is triggered when a record is created and saved." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:141 -msgid ":guilabel:`After last update`: The action is triggered a defined period of time after an existing record is edited and saved." +#: ../../content/applications/studio/automated_actions.rst:101 +msgid ":guilabel:`After last update`: The action is triggered when an existing record is edited and saved." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:144 +#: ../../content/applications/studio/automated_actions.rst:104 msgid "You can then define:" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:146 -msgid "a :guilabel:`Delay`: Specify the number of minutes, hours, days, or months. To have an action executed before the trigger date, specify a negative number. If you selected the :guilabel:`Based on date field` trigger, you must also select the date field to be used to determine the delay." +#: ../../content/applications/studio/automated_actions.rst:106 +msgid "a :guilabel:`Delay`: Specify the number of minutes, hours, days, or months. To trigger the action before the trigger date, specify a negative number. If you selected the :guilabel:`Based on date field` trigger, you must also select the date field to be used to determine the delay." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:151 -msgid "By default, the scheduler checks for time-triggered automation rules every 240 minutes, or 4 hours. This frequency is generally sufficient for delays such as 3 months after the order date or 7 days after the last update." +#: ../../content/applications/studio/automated_actions.rst:109 +msgid ":guilabel:`Extra Conditions`: Click :guilabel:`Add condition`, then specify the conditions to be met to trigger the automation rule. Click :guilabel:`New Rule` to add another condition." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:155 -msgid "For delays of less than the equivalent of 2400 minutes, or 40 hours, the system recalculates the frequency of this check to ensure that more granular delays, e.g., 1 hour before the event start date and time, or 30 minutes after creation, can be respected as closely as possible." +#: ../../content/applications/studio/automated_actions.rst:112 +msgid "The action is triggered when the delay is reached and the conditions are met." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:159 -msgid "An on-screen message indicates the possible delay after the scheduled triggering of the rule." +#: ../../content/applications/studio/automated_actions.rst:115 +msgid "If you want to send a reminder email 30 minutes before the start of a calendar event, select the :guilabel:`Start (Calendar Event)` under :guilabel:`Trigger Date` and set the :guilabel:`Delay` to **-30** :guilabel:`Minutes`." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 -msgid "Message about possible delay after scheduled execution" -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:164 -msgid "To view or manually edit the frequency of the scheduler, with :ref:`developer mode activated `, go to :menuselection:`Settings --> Technical --> Scheduled Actions` to see all scheduled actions for your database." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:168 -msgid "Enter `Automation` in the search bar, then, in the list of results, click :guilabel:`Automation Rules: check and execute`. If desired, update the value of the :guilabel:`Execute Every` field. Click :guilabel:`Run Manually` at any time to manually trigger this scheduled action." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:172 -msgid ":guilabel:`Extra Conditions`: Click :guilabel:`Add condition`, then specify the conditions to be met for the automation rule to run. Click :guilabel:`New Rule` to add another condition." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:175 -msgid "The action is executed when the delay is reached and the conditions are met." +msgid "Example of a Based on date field trigger" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:178 -msgid "To send a reminder email 30 minutes *before* the start of a calendar event, select :guilabel:`Start (Calendar Event)` as the date field for the :guilabel:`Trigger` and set the :guilabel:`Delay` to `-30` :guilabel:`Minutes`." +#: ../../content/applications/studio/automated_actions.rst:123 +msgid "By default, the scheduler checks for trigger dates every 4 hours, meaning lower granularity in time-based automations may not always be honored." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:0 -#: ../../content/applications/studio/automated_actions.rst:-1 -msgid "Example of a Based on date field trigger" -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:188 +#: ../../content/applications/studio/automated_actions.rst:129 msgid "Custom" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:190 +#: ../../content/applications/studio/automated_actions.rst:131 msgid "Trigger automated actions:" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:192 -msgid ":guilabel:`On save`: when a record is saved." +#: ../../content/applications/studio/automated_actions.rst:133 +msgid ":guilabel:`On save`: When the record is saved;" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:193 -msgid ":guilabel:`On deletion`: when a record is deleted." +#: ../../content/applications/studio/automated_actions.rst:134 +msgid ":guilabel:`On deletion`: When a record is deleted;" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:194 -msgid ":guilabel:`On UI change`: when a field's value is changed on the :ref:`Form view `, even before the record is saved." +#: ../../content/applications/studio/automated_actions.rst:135 +msgid ":guilabel:`On UI change`: When a field's value is changed on the :ref:`Form view `, even before saving the record." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:197 +#: ../../content/applications/studio/automated_actions.rst:138 msgid "For the :guilabel:`On save` and :guilabel:`On UI change` triggers, you **must** then select the field(s) to be used to trigger the automation rule in the :guilabel:`When updating` field." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:201 +#: ../../content/applications/studio/automated_actions.rst:142 msgid "If no field is selected in the :guilabel:`When updating` field, the automated action may be executed multiple times per record." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:204 +#: ../../content/applications/studio/automated_actions.rst:145 msgid "Optionally, you can also define additional conditions to be met to trigger the automation rule in the :guilabel:`Apply on` field." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:208 -msgid "To trigger an automated action *upon* the creation of a record, e.g., when a new contact is created, select the :ref:`On save ` trigger and use `ID is not set` as the :guilabel:`Before Update Domain` and `ID is set` as the :guilabel:`Apply on` domain. Make sure the correct field is selected in the :guilabel:`When updating` field." +#: ../../content/applications/studio/automated_actions.rst:149 +msgid "The :guilabel:`On UI change` trigger can only be used with the :ref:`studio/automated-actions/action/python-code` action and only works when a modification is made manually. The action is not executed if the field is changed through another automation rule." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:214 -msgid "When a new contact is saved, it is automatically assigned a database ID, thereby triggering the automation rule." +#: ../../content/applications/studio/automated_actions.rst:157 +msgid "External" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:0 -msgid "Example of a triggering an action upon creation of a record" +#: ../../content/applications/studio/automated_actions.rst:159 +msgid "Trigger automated actions based on an external event using a webhook. A webhook is a method of communication between two systems where the source system sends an HTTP(S) request to a destination system based on a specific event. It usually includes a data payload containing information about the event that occurred." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:221 -msgid "The :guilabel:`On UI change` trigger can only be used with the :ref:`Execute Code ` action and only works when a modification is made manually. The action is not executed if the field is changed through another automation rule." +#: ../../content/applications/studio/automated_actions.rst:164 +msgid "To configure the :guilabel:`On webhook` trigger, copy the :guilabel:`URL` generated by Odoo into the destination system (i.e., the system receiving the request). Then, in the :guilabel:`Target Record` field, enter the code to run to define the record(s) to be updated using the automation rule." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:228 -msgid "External" +#: ../../content/applications/studio/automated_actions.rst:169 +msgid "The URL must be treated as **confidential**; sharing it online or without caution could potentially expose your system to malicious parties. Click the :guilabel:`Rotate Secret` button to change the URL's secret if necessary." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:230 -msgid "Trigger automated actions based on a specific event in an external system or application using a :doc:`webhook `." +#: ../../content/applications/studio/automated_actions.rst:174 +msgid "The code defined by default in the :guilabel:`Target Record` field works for webhooks coming from another Odoo database. It is used to determine the record(s) to be updated using the information in the payload." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:233 -msgid "After the webhook is configured in Odoo, where the webhook's URL is generated and the target record defined, it needs to be implemented in the external system." +#: ../../content/applications/studio/automated_actions.rst:177 +msgid "If you wish to use the webhook's content for a purpose other than to find the record(s) (e.g., *create* a record), your only option is to use an :ref:`studio/automated-actions/action/python-code` action. In this case, the :guilabel:`Target record` field must contain any valid code, but its result doesn't have any effect on the automated action itself." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:237 -#: ../../content/applications/studio/automated_actions/webhooks.rst:6 -msgid "It is *highly recommended* to consult with a developer, solution architect, or another technical role when deciding to use webhooks and throughout the implementation process. If not properly configured, webhooks may disrupt the Odoo database and can take time to revert." +#: ../../content/applications/studio/automated_actions.rst:181 +msgid "The webhook content is available in the server action context as a `payload` variable (i.e., a dictionary that contains the GET parameters or POST JSON body of the incoming request)." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:245 -msgid "It is also possible to set up an automated action that :ref:`sends data to a external system's webhook ` when an event occurs in your Odoo database." +#: ../../content/applications/studio/automated_actions.rst:184 +msgid "You can also choose to :guilabel:`Log Calls` to record the payloads received, e.g., to make sure the data sent by the source system matches the expected format and content. This also helps identify and diagnose any issues that may arise. To access the logs, click the :guilabel:`Logs` smart button at the top of the :guilabel:`Automation rules` form." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:249 -msgid ":doc:`Webhook documentation `" +#: ../../content/applications/studio/automated_actions.rst:190 +msgid ":doc:`automated_actions/webhooks`" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:254 +#: ../../content/applications/studio/automated_actions.rst:195 msgid "Actions" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:256 -msgid "Once you have defined the automation rule's :ref:`trigger `, click :guilabel:`Add an action` in the :guilabel:`Actions To Do` tab to define the action to be executed." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:260 -msgid "You can define multiple actions for the same automation rule. By default, actions are executed in the order in which they were defined." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:263 -msgid "This means, for example, that if you define an :guilabel:`Update record` action and then a :guilabel:`Send email` action where the email references the field that was updated, the email uses the updated values. However, if the :guilabel:`Send email` action is defined before the :guilabel:`Update record` action, the email uses the values set *before* the record is updated." +#: ../../content/applications/studio/automated_actions.rst:197 +msgid "Once you have defined the automation rule's :ref:`trigger `, click :guilabel:`Add an action` to define the action to be executed." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:268 -msgid "To change the order of defined actions, click the :icon:`oi-draggable` :guilabel:`(drag handle)` icon beside an action and drag it to the desired position." +#: ../../content/applications/studio/automated_actions.rst:201 +msgid "You can define multiple actions for the same trigger/automation rule. The actions are executed in the order they are defined. This means, for example, that if you define an :guilabel:`Update record` action and then a :guilabel:`Send email` action, the email uses the updated values. However, if the :guilabel:`Send email` action is defined before the :guilabel:`Update record` action, the email uses the values set *before* the update action is run." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:274 +#: ../../content/applications/studio/automated_actions.rst:211 msgid "Update Record" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:276 -msgid "This action updates one of the record's (related) fields. Click the :guilabel:`Update` field and, in the list that opens, select or search for the field to be updated. If needed, click the :icon:`oi-chevron-right` :guilabel:`(right arrow)` next to the field name to access the list of related fields." +#: ../../content/applications/studio/automated_actions.rst:213 +msgid "This action allows to update one of the record's (related) fields. Click the :guilabel:`Update` field and, in the list that opens, select or search for the field to be updated; click the right arrow next to the field name to access the list of related fields if needed." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:281 +#: ../../content/applications/studio/automated_actions.rst:217 msgid "If you selected a :ref:`many2many field `, choose whether the field must be updated by :guilabel:`Adding`, :guilabel:`Removing`, or :guilabel:`Setting it to` the selected value or by :guilabel:`Clearing it`." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:286 -msgid "If you want the automated action to remove a tag from the customer record, set the :guilabel:`Update` field to :guilabel:`Customer > Tags`, select :guilabel:`by Removing`, then select the tag." +#: ../../content/applications/studio/automated_actions.rst:222 +msgid "If you want the automated action to remove a tag from the customer record, set the :guilabel:`Update` field to :guilabel:`Customer > Tags`, select :guilabel:`By Removing`, then select the tag." msgstr "" #: ../../content/applications/studio/automated_actions.rst:0 msgid "Example of an Update Record action" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:294 +#: ../../content/applications/studio/automated_actions.rst:230 msgid "Alternatively, you can also set a record's field dynamically using Python code. To do so, select :guilabel:`Compute` instead of :guilabel:`Update`, then enter the code to be used for computing the field's value. For example, if you want the automation rule to compute a custom :ref:`datetime field ` when a task's priority is set to `High` (by starring the task), you can define the trigger :guilabel:`Priority is set to` to `High` and define the :guilabel:`Update Record` action as follows:" msgstr "" @@ -566,23 +472,23 @@ msgstr "" msgid "Compute a custom datetime field using a Python expression" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:307 +#: ../../content/applications/studio/automated_actions.rst:241 msgid "Create Activity" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:309 +#: ../../content/applications/studio/automated_actions.rst:243 msgid "This action is used to schedule a new activity linked to the record. Select an :guilabel:`Activity Type`, enter a :guilabel:`Title` and description, then specify when you want the activity to be scheduled in the :guilabel:`Due Date In` field, and select a :guilabel:`User type`:" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:313 -msgid "To always assign the activity to the same user, select :guilabel:`Specific User`, then add the user in the :guilabel:`Responsible` field;" +#: ../../content/applications/studio/automated_actions.rst:247 +msgid "To always assign the activity to the same user, select :guilabel:`Specific User` and add the user in the :guilabel:`Responsible` field;" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:315 +#: ../../content/applications/studio/automated_actions.rst:249 msgid "To target a user linked to the record dynamically, select :guilabel:`Dynamic User (based on record)` and change the :guilabel:`User Field` if necessary." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:319 +#: ../../content/applications/studio/automated_actions.rst:253 msgid "After a lead is turned into an opportunity, you want the automated action to set up a call for the user responsible for the lead. To do so, set the :guilabel:`Activity Type` to :guilabel:`Call` and the :guilabel:`User Type` to :guilabel:`Dynamic User (based on record)`." msgstr "" @@ -590,163 +496,151 @@ msgstr "" msgid "Example of a Create Activity action" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:329 +#: ../../content/applications/studio/automated_actions.rst:261 msgid "Send Email and Send SMS" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:331 +#: ../../content/applications/studio/automated_actions.rst:263 msgid "These actions are used to send an email or a text message to a contact linked to a specific record. To do so, select or create an :guilabel:`Email Template` or an :guilabel:`SMS Template`, then, in the :guilabel:`Send Email As` or :guilabel:`Send SMS As` field, choose how you want to send the email or text message:" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:336 +#: ../../content/applications/studio/automated_actions.rst:268 msgid ":guilabel:`Email`: to send the message as an email to the recipients of the :guilabel:`Email Template`." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:338 +#: ../../content/applications/studio/automated_actions.rst:270 msgid ":guilabel:`Message`: to post the message on the record and notify the record's followers." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:339 +#: ../../content/applications/studio/automated_actions.rst:271 msgid ":guilabel:`Note`: to send the message as an internal note visible to internal users in the chatter." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:341 +#: ../../content/applications/studio/automated_actions.rst:273 msgid ":guilabel:`SMS (without note)`: to send the message as a text message to the recipients of the :guilabel:`SMS template`." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:343 +#: ../../content/applications/studio/automated_actions.rst:275 msgid ":guilabel:`SMS (with note)`: to send the message as a text message to the recipients of the :guilabel:`SMS template` and post it as an internal note in the chatter." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:345 +#: ../../content/applications/studio/automated_actions.rst:277 msgid ":guilabel:`Note only`: to only post the message as an internal note in the chatter." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:350 +#: ../../content/applications/studio/automated_actions.rst:282 msgid "Send WhatsApp" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:353 +#: ../../content/applications/studio/automated_actions.rst:285 msgid "To automate the sending of WhatsApp messages, one or more :ref:`WhatsApp templates ` must be created." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:356 -msgid "This action is used to send a WhatsApp message to a contact linked to a specific record. To do so, select the appropriate :guilabel:`WhatsApp Template` from the dropdown menu." +#: ../../content/applications/studio/automated_actions.rst:288 +msgid "This action is used to send a WhatsApp message to a contact linked to a specific record. To do so, select the appropriate :guilabel:`WhatsApp Template` from the drop-down menu." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:362 +#: ../../content/applications/studio/automated_actions.rst:294 msgid "Add Followers and Remove Followers" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:364 -msgid "This action is used to subscribe/unsubscribe existing contacts to/from the record." +#: ../../content/applications/studio/automated_actions.rst:296 +msgid "Use these actions to (un)subscribe existing contacts to/from the record." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:369 +#: ../../content/applications/studio/automated_actions.rst:299 msgid "Create Record" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:371 +#: ../../content/applications/studio/automated_actions.rst:301 msgid "This action is used to create a new record on any model." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:373 +#: ../../content/applications/studio/automated_actions.rst:303 msgid "Select the required model in the :guilabel:`Record to Create` field; it contains the current model by default. Specify a :guilabel:`Name` for the record, and then, if you want to create the record on another model, select a field in the :guilabel:`Link Field` field to link the record that triggered the creation of the new record." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:379 +#: ../../content/applications/studio/automated_actions.rst:309 msgid "The dropdown list related to the :guilabel:`Link Field` field only contains :ref:`one2many fields ` existing on the current model that are linked to a :ref:`many2one field ` on the target model." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:384 -msgid "You can create another automation rule with :ref:`studio/automated-actions/action-update-record` actions to update the fields of the new record if necessary. For example, you can use a :guilabel:`Create Record` action to create a new project task and then assign it to a specific user using an :guilabel:`Update Record` action." +#: ../../content/applications/studio/automated_actions.rst:314 +msgid "You can create another automation rule with :ref:`studio/automated-actions/action/update-record` actions to update the fields of the new record if necessary. For example, you can use a :guilabel:`Create Record` action to create a new project task and then assign it to a specific user using an :guilabel:`Update Record` action." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:392 +#: ../../content/applications/studio/automated_actions.rst:322 msgid "Execute Code" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:395 -msgid "For automation rules that require the execution of :ref:`custom code `, note that maintenance of custom code is not included in the *Standard* or *Custom* pricing plans and incurs :ref:`additional fees `." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:400 +#: ../../content/applications/studio/automated_actions.rst:324 msgid "This action is used to execute Python code. You can write your code into the :guilabel:`Code` tab using the following variables:" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:403 +#: ../../content/applications/studio/automated_actions.rst:327 msgid "`env`: environment on which the action is triggered" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:404 +#: ../../content/applications/studio/automated_actions.rst:328 msgid "`model`: model of the record on which the action is triggered; is a void recordset" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:405 +#: ../../content/applications/studio/automated_actions.rst:329 msgid "`record`: record on which the action is triggered; may be void" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:406 +#: ../../content/applications/studio/automated_actions.rst:330 msgid "`records`: recordset of all records on which the action is triggered in multi-mode; this may be left empty" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:408 +#: ../../content/applications/studio/automated_actions.rst:332 msgid "`time`, `datetime`, `dateutil`, `timezone`: useful Python libraries" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:409 +#: ../../content/applications/studio/automated_actions.rst:333 msgid "`float_compare`: utility function to compare floats based on specific precision" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:410 +#: ../../content/applications/studio/automated_actions.rst:334 msgid "`log(message, level='info')`: logging function to record debug information in ir.logging table" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:412 +#: ../../content/applications/studio/automated_actions.rst:336 msgid "`_logger.info(message)`: logger to emit messages in server logs" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:413 +#: ../../content/applications/studio/automated_actions.rst:337 msgid "`UserError`: exception class for raising user-facing warning messages" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:414 +#: ../../content/applications/studio/automated_actions.rst:338 msgid "`Command`: x2many commands namespace" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:415 +#: ../../content/applications/studio/automated_actions.rst:339 msgid "`action = {...}`: to return an action" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:418 +#: ../../content/applications/studio/automated_actions.rst:342 msgid "The available variables are described both in the :guilabel:`Code` and :guilabel:`Help` tabs." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:421 -msgid ":doc:`Odoo's ORM capabilities <../../developer/reference/backend/orm>`" -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:426 +#: ../../content/applications/studio/automated_actions.rst:347 msgid "Send Webhook Notification" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:428 -msgid "This action is used to send a `POST` API request with the values of the selected :guilabel:`Fields` to the webhook URL specified in the :guilabel:`URL` field." +#: ../../content/applications/studio/automated_actions.rst:349 +msgid "This action allows to send a POST request with the values of the :guilabel:`Fields` to the URL specified in the :guilabel:`URL` field." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:431 +#: ../../content/applications/studio/automated_actions.rst:352 msgid "The :guilabel:`Sample Payload` provides a preview of the data included in the request using a random record's data or dummy data if no record is available." msgstr "" -#: ../../content/applications/studio/automated_actions.rst:435 -msgid "It is also possible to set up an automated action that :doc:`uses a webhook to receive data from an external system ` when a predefined event occurs in that system." -msgstr "" - -#: ../../content/applications/studio/automated_actions.rst:441 +#: ../../content/applications/studio/automated_actions.rst:358 msgid "Execute Existing Actions" msgstr "" -#: ../../content/applications/studio/automated_actions.rst:443 +#: ../../content/applications/studio/automated_actions.rst:360 msgid "The action is used to trigger multiple actions (linked to the current model) at the same time. To do so, click on :guilabel:`Add a line`, then, in the :guilabel:`Add: Child Actions` pop-up, select an existing action or click :guilabel:`New` to create a new one." msgstr "" @@ -754,298 +648,237 @@ msgstr "" msgid "Webhooks" msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:10 -msgid "Webhooks, which can be created in **Odoo Studio**, allow you to automate an action in your Odoo database when a specific event occurs in another, external system." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:13 -msgid "In practice, this works as follows: when the event occurs in the external system, a data file (the \"payload\") is sent to the Odoo webhook's URL via a `POST` API request, and a predefined action is performed in your Odoo database." +#: ../../content/applications/studio/automated_actions/webhooks.rst:6 +msgid "It is *highly recommended* to consult with a developer, solution architect, or another technical role when deciding to use webhooks and throughout the implementation process. If not properly configured, webhooks may disrupt the Odoo database and can take time to revert." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:17 -msgid "Unlike scheduled actions, which run at predefined intervals, or manual API requests, which need to be explicitly invoked, webhooks enable real-time, event-driven communication and automation. For example, you can set up a webhook to have your Odoo inventory data updated automatically when a sales order is confirmed in an external point-of-sale system." +#: ../../content/applications/studio/automated_actions/webhooks.rst:10 +msgid "Webhooks, which can be created in **Studio**, are automation rules triggered by external events via user-defined HTTP callbacks. When an external system sends data to an Odoo webhook's URL (the \"trigger\") with a data file (the \"payload\"), Odoo responds with a predefined action in the database." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:22 -msgid "Setting up a webhook in Odoo requires no coding when connecting two Odoo databases, but :ref:`testing a webhook ` requires an external tool. :ref:`Custom target records or actions ` may require programming skills." +#: ../../content/applications/studio/automated_actions/webhooks.rst:14 +msgid "Unlike scheduled actions or manual API calls, webhooks enable real-time communication and automation. For example, if a sales order is confirmed in an external POS system, a webhook can instantly update Odoo's inventory, ensuring system synchronization." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:28 -msgid "This article covers creating a webhook that *receives* data from an external source. However, it is also possible to create an automated action that :ref:`sends data to an external webhook ` when a change occurs in your Odoo database." +#: ../../content/applications/studio/automated_actions/webhooks.rst:19 +msgid "This article covers creating a webhook that *takes in* data from an external source. However, an automated action that :ref:`sends an API call to an external webhook ` can also be created." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:35 -msgid "Create a webhook in Odoo" +#: ../../content/applications/studio/automated_actions/webhooks.rst:24 +msgid "Create a webhook in Studio" msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:38 -msgid "Before implementing a webhook in a live database, configure and test it using a :ref:`duplicate database ` to ensure the webhook performs as intended." +#: ../../content/applications/studio/automated_actions/webhooks.rst:26 +msgid "Webhooks are configured in **Studio**, and their setup is split between their :ref:`trigger ` and their :ref:`actions `." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:42 -msgid ":ref:`Activating developer mode ` before creating up a webhook gives greater flexibility in selecting the :doc:`model <../models_modules_apps>` the automation rule targets. It also allows you to find the technical name of the model and fields, which may be needed to configure the payload." +#: ../../content/applications/studio/automated_actions/webhooks.rst:30 +msgid "Setting up a webhook in Odoo requires no coding when connecting Odoo databases, but testing requires an external tool like `Postman `_. :ref:`Custom target records or actions ` may require programming skills." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:47 -msgid "To find a model's technical name, with developer mode activated, hover over the model name and then click :icon:`fa-arrow-right` :guilabel:`(Internal link)`. The technical name can be found in the :guilabel:`Model` field. For example, a sales order webhook uses the *Sales Order* model, but the technical name `sale.order` is used in the payload." +#: ../../content/applications/studio/automated_actions/webhooks.rst:33 +msgid ":ref:`Activate developer mode ` to modify the model targeted by the webhook (e.g., sales orders or contact information) and to find the model's technical name (which may be required for proper payload configuration)." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:52 -msgid "To create a webhook in **Studio**, proceed as follows:" +#: ../../content/applications/studio/automated_actions/webhooks.rst:40 +#: ../../content/applications/studio/automated_actions/webhooks.rst:127 +#: ../../content/applications/studio/automated_actions/webhooks.rst:208 +msgid "Set the webhook's trigger" msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:54 -msgid ":ref:`Open Studio ` and click :guilabel:`Webhooks`, then :guilabel:`New`." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:55 -msgid "Give the webhook a clear, meaningful name that identifies its purpose." +#: ../../content/applications/studio/automated_actions/webhooks.rst:42 +msgid "To create a webhook with **Studio**, :ref:`open Studio `, click :guilabel:`Webhooks`, then :guilabel:`New`. From here, name the webhook, modify the webhook's model (the kind of database entry to be targeted) if needed, and toggle whether calls made to the webhook URL should be logged (which would track the webhook's call history for troubleshooting)." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:56 -msgid "If needed, and provided developer mode is activated, select the appropriate :guilabel:`Model` from the dropdown. If developer mode is not activated, the automation rule targets the current model by default." +#: ../../content/applications/studio/automated_actions/webhooks.rst:47 +msgid "The webhook's URL is automatically generated. This is the URL that should be used for testing the webhook and connecting it to the external system that will send updates to the database." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:60 -msgid "The webhook's URL is automatically generated, but can be changed if needed by clicking :guilabel:`Rotate Secret`. This is the URL that should be used when implementing the webhook in the external system that will send updates to the database." +#: ../../content/applications/studio/automated_actions/webhooks.rst:51 +msgid "The webhook's URL is **confidential** and should be treated with care. Sharing it online or without caution can provide unintended access to the Odoo database. Click :guilabel:`Rotate Secret` to change the URL if needed." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:65 -msgid "The URL is **confidential** and should be treated with care. Sharing it online or without caution can provide unintended access to the Odoo database. If the URL is updated after the initial implementation, make sure to update it in the external system." +#: ../../content/applications/studio/automated_actions/webhooks.rst:55 +msgid "Finally, if the system sending the webhook is not Odoo, adjust the :guilabel:`Target Record` actions to look for the JSON record that is included in the API call's payload when the call is made to the webhook's URL. If the system sending the webhook is an Odoo database, then make sure that the `id` and `model` appear in the payload." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:69 -msgid "If desired, enable :guilabel:`Log Calls` to track the history of API requests made to the webhook's URL, e.g., for troubleshooting purposes." +#: ../../content/applications/studio/automated_actions/webhooks.rst:61 +msgid "Although the :guilabel:`Model` is set in Odoo, it is the model's technical name that must be included in the payload. Hover over the model name, then click the :icon:`fa-arrow-right` :guilabel:`(Internal link)` icon to find this technical name in the :guilabel:`Model` field. For example, a sales order webhook uses the *Sales Order* model, but the technical name `sale.order` is used in the payload." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:72 -msgid "If the system sending the webhook is not Odoo, adjust the :guilabel:`Target Record` code to look for the JSON record included in the payload when the API request is made to the webhook's URL. If the system sending the webhook is an Odoo database, ensure that the `id` and `model` appear in the payload." +#: ../../content/applications/studio/automated_actions/webhooks.rst:68 +msgid "When creating a record in the Odoo database, the target record's default format should not be used. Instead, use `model.browse(i)` or `model.search(i)`." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:77 -msgid "If the webhook is used to create records in the Odoo database, use `model.browse(i)` or `model.search(i)` instead of the default :guilabel:`Target Record` format." +#: ../../content/applications/studio/automated_actions/webhooks.rst:74 +#: ../../content/applications/studio/automated_actions/webhooks.rst:149 +#: ../../content/applications/studio/automated_actions/webhooks.rst:220 +msgid "Set the webhook's action" msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:80 -msgid "Click :guilabel:`Add an action` in the :guilabel:`Actions To Do` tab to define the :ref:`actions ` to be executed." +#: ../../content/applications/studio/automated_actions/webhooks.rst:76 +msgid "To set a webhook's action while configuring a webhook, click :guilabel:`Add an action` under the :guilabel:`Actions To Do` tab. Click the action's :guilabel:`Type` and set the fields as needed." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:82 -msgid "Before implementing the webhook in the external system, :ref:`test ` it to ensure it works as intended." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:86 -msgid "Webhooks can also be created via the :guilabel:`Automations` menu in **Studio** by selecting the trigger :guilabel:`On webhook`." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:88 -msgid "To access the history of API requests if :guilabel:`Log Calls` has been enabled, click the :guilabel:`Logs` smart button at the top of the :guilabel:`Automation rules` form." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:90 -msgid "If the purpose of the webhook is anything other than to update an existing record, e.g., to create a new record, the :guilabel:`Execute Code` action must be chosen." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:96 -msgid "Test a webhook" +#: ../../content/applications/studio/automated_actions/webhooks.rst:164 +#: ../../content/applications/studio/automated_actions/webhooks.rst:254 +msgid "Test the webhook" msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:98 -msgid "Testing a webhook requires a test payload and an external tool or system, like `Postman `_, to send the payload via a `POST` API request. This section presents the steps to test a webhook in Postman." +#: ../../content/applications/studio/automated_actions/webhooks.rst:85 +msgid "Testing the webhook requires the webhook to be set up, a test payload to send to the webhook, and an external tool or system to send the payload through a `POST` API request. Consider using a tool like `Postman `_ so less technical skills are required." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:103 -msgid "See the :ref:`webhook use cases section ` for step-by-step explanations of how to test webhooks using test payloads." +#: ../../content/applications/studio/automated_actions/webhooks.rst:89 +msgid "If a message saying `200 OK` or `status: ok` gets returned during testing, then the webhook is functioning properly on Odoo's side. From here, implementation can begin with the other tool to automatically send those webhook calls into Odoo using the webhook's URL." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:105 -msgid "To get specific help with testing a webhook with Postman, contact their support team." +#: ../../content/applications/studio/automated_actions/webhooks.rst:93 +msgid "If any other responses are returned, the number sent in the response helps to identify the problem. For example, a `500 Internal Server Error` means that Odoo could not interpret the call properly. If this gets returned, ensure the fields found in the JSON file are properly mapped in the webhook's configuration and in the system sending the test call. Turning on call logging in the webhook's configuration provides error logs if the webhook is not functioning as intended." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:107 -msgid "In Postman, create a new HTTP request and set its method to :guilabel:`POST`." +#: ../../content/applications/studio/automated_actions/webhooks.rst:100 +msgid "Implement the webhook" msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:108 -msgid "Copy the webhook's URL from your Odoo database using the :icon:`fa-link` :guilabel:`(link)` icon and paste it into the URL field in Postman." +#: ../../content/applications/studio/automated_actions/webhooks.rst:102 +msgid "Once the webhook is fully configured, begin connecting it to the system that sends data to the Odoo database through this webhook. Make sure that the API calls are sent to the webhook's URL when setting that system up." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:110 -#: ../../content/applications/studio/automated_actions/webhooks.rst:192 -#: ../../content/applications/studio/automated_actions/webhooks.rst:267 -msgid "Click the :guilabel:`Body` tab and select :guilabel:`raw`." +#: ../../content/applications/studio/automated_actions/webhooks.rst:109 +msgid "Webhook use cases" msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:111 -msgid "Set the file type to :guilabel:`JSON`, then copy the code from the test payload and paste it into the code editor." +msgid "Below are two examples of how to use webhooks in Odoo. These webhooks require external tools (which are listed with the example)." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:113 -#: ../../content/applications/studio/automated_actions/webhooks.rst:206 -#: ../../content/applications/studio/automated_actions/webhooks.rst:281 -msgid "Click :guilabel:`Send`." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:117 -msgid "In the :guilabel:`Response` viewer at the bottom of the screen in Postman, details, including a HTTP response code, indicate whether or not the webhook is functioning correctly." +#: ../../content/applications/studio/automated_actions/webhooks.rst:115 +msgid "Consult with a developer, solution architect, or another technical role when deciding to implement webhooks. If not properly configured, webhooks may disrupt the Odoo database and can take time to revert." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:120 -msgid "A `200 OK` or `status: ok` message indicates that the webhook is functioning properly on Odoo's side. From here, implementation can begin with the other system to automatically send the API requests to the Odoo webhook's URL." +msgid "Update a sales order's currency" msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:124 -msgid "If any other response is returned, the number associated with it helps to identify the problem. For example, a `500 Internal Server Error` message means that Odoo could not interpret the call properly. In this case, ensure the fields found in the JSON file are properly mapped in the webhook's configuration and in the system sending the test call." +#: ../../content/applications/studio/automated_actions/webhooks.rst:122 +msgid "This webhook updates a sales order in the **Sales** app to USD. It useful for subsidiaries outside the United States with a mother company located inside the United States or during mergers when consolidating data into one Odoo database." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:130 -msgid "Turning on call logging in the webhook's configuration in Odoo provides error logs if the webhook is not functioning as intended." +#: ../../content/applications/studio/automated_actions/webhooks.rst:129 +msgid "To set up this webhook, open the **Sales** app. Then, :ref:`set the trigger ` so the :guilabel:`Model` is set to `Sales Order`. Also, set the :guilabel:`Target Record` to `model.env[payload.get('model')].browse(int(payload.get('id')))`. This is broken down below." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:134 -msgid "Implement a webhook in an external system" +msgid "**model**: what gets updated in Odoo (in this case, sales orders). This matches the :guilabel:`Model` set earlier." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:136 -msgid "When the webhook has been successfully created in Odoo and tested, implement it in the system that sends data to the Odoo database, making sure the `POST` API requests are sent to the webhook's URL." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:142 -msgid "Webhook use cases" +msgid "**env**: where the action takes place. In this case, it is Odoo." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:144 -msgid "Below are two examples of how to use webhooks in Odoo. A test payload is provided for each example, and can be found in the section on testing the webhook. `Postman `_ is used to send the test payload." +#: ../../content/applications/studio/automated_actions/webhooks.rst:137 +msgid "**payload**: what is sent to the webhook's URL. This contains the information that updates the sales order." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:149 -msgid "Update a sales order's currency" +#: ../../content/applications/studio/automated_actions/webhooks.rst:139 +msgid "**get('model')**: tells the webhook what database record to look at. In this case, the webhook retrieves (`get`) the data tied to a specific `model`. In this example, this is the Sales Order model." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:151 -msgid "This webhook updates a sales order in the **Sales** app to `USD` when the external system sends a `POST` API request to the webhook's URL that includes that sales order number (which is identified by the payload's `id` record)." +#: ../../content/applications/studio/automated_actions/webhooks.rst:142 +msgid "**browse**: tells the webhook to look in the `model` (Sales Order) set by the payload for what to update." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:155 -msgid "This could be useful for subsidiaries outside the United States with a mother company located inside the United States or during mergers when consolidating data into one Odoo database." +#: ../../content/applications/studio/automated_actions/webhooks.rst:144 +msgid "**int**: turns the target into an `integer` (a whole number). This is important in case some words (a `string`) or a decimal number is included in the payload's target record." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:159 -#: ../../content/applications/studio/automated_actions/webhooks.rst:221 -msgid "Create the webhook" +#: ../../content/applications/studio/automated_actions/webhooks.rst:146 +msgid "**get('id')**: identifies the sales order number that is being updated in Odoo." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:161 -#: ../../content/applications/studio/automated_actions/webhooks.rst:223 -msgid "To create this webhook, proceed as follows:" +#: ../../content/applications/studio/automated_actions/webhooks.rst:151 +msgid "After setting the trigger, set the webhook's action by clicking :guilabel:`Add an action`. For the :guilabel:`Type`, click :guilabel:`Update Record`. Then, select `Update`, choose the field `Currency`, and select `USD` to have the currency field updated to USD. Finally, click :guilabel:`Save & Close`." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:163 -msgid "Open the **Sales** app, then :ref:`open Studio ` and click :guilabel:`Webhooks`. The *Sales Order* model is selected by default." +#: ../../content/applications/studio/automated_actions/webhooks.rst:157 +#: ../../content/applications/studio/automated_actions/webhooks.rst:248 +msgid "Webhook setup summary" msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:165 -#: ../../content/applications/studio/automated_actions/webhooks.rst:227 -msgid "Click :guilabel:`New`. The :guilabel:`Trigger` is set to :guilabel:`On webhook` by default." +#: ../../content/applications/studio/automated_actions/webhooks.rst:159 +msgid "To summarize what is set up, the webhook targets sales orders, identified by their sales order number, and updates their currency to `USD` when a POST request is sent to the webhook's URL that includes that sales order number (which is identified by the payload's `id` record)." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:166 -msgid "Set the :guilabel:`Target Record` to `model.env[payload.get('model')].browse(int(payload.get('id')))`, where:" +#: ../../content/applications/studio/automated_actions/webhooks.rst:256 +msgid "Test the webhook's setup to make sure everything is correct. This process uses a tool called `Postman `_ to send the simulated trigger." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:169 -msgid "`payload.get('model')` retrieves the value associated with the `model` key in the payload, i.e., `sale.order`, which is the technical name of the *Sales Order* model." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:171 -msgid "`payload.get('id')` retrieves the value associated with the `id` key in the payload, i.e., the number of the target sales order in your Odoo database with the `S` and leading zeros removed." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:174 -msgid "`int` converts the retrieved id to an integer (i.e., a whole number) because the method `browse()` can only be used with an integer." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:177 -#: ../../content/applications/studio/automated_actions/webhooks.rst:231 -msgid "Click :guilabel:`Add an action`." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:178 -msgid "In the :guilabel:`Type` section, click :guilabel:`Update Record`." -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:179 -msgid "In the :guilabel:`Action details` section, select :guilabel:`Update`, choose the field :guilabel:`Currency`, and select :guilabel:`USD`." +#: ../../content/applications/studio/automated_actions/webhooks.rst:259 +msgid "This section walks through the steps to test this webhook in Postman, but does not offer help if there's an issue within that tool. To get specific help with Postman, contact their support team." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:181 -#: ../../content/applications/studio/automated_actions/webhooks.rst:256 -msgid "Click :guilabel:`Save & Close`." +#: ../../content/applications/studio/automated_actions/webhooks.rst:172 +msgid "Once Postman is open, create a new :guilabel:`HTTP` request and set its method to :guilabel:`POST`. Next, copy the webhook's URL that is being tested and paste it into the URL field in Postman. After that, click the :guilabel:`Body` tab and select the :guilabel:`raw` option. Set the file type to :guilabel:`JSON`, then copy this code and paste it into the file." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:184 -#: ../../content/applications/studio/automated_actions/webhooks.rst:259 -msgid "Test the webhook" +msgid "From here, choose a sales order to test the webhook on. If it is not possible to test in a live Odoo database, consider creating a demo database with a sample sales order and the webhook that was configured. Replace `SALES ORDER NUMBER` with the sales order's number without the `S` or any zeros before the number. For example, a sales order with the number `S00007` should be entered as `7` in Postman. Finally, click :guilabel:`Send` in Postman." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:186 -#: ../../content/applications/studio/automated_actions/webhooks.rst:261 -msgid "To test this webhook, proceed as follows:" -msgstr "" - -#: ../../content/applications/studio/automated_actions/webhooks.rst:188 -msgid "With `Postman `_ open, create a new HTTP request and set its method to :guilabel:`POST`." +#: ../../content/applications/studio/automated_actions/webhooks.rst:190 +msgid "If a message saying `200 OK` or `status: ok` gets returned, then the webhook is functioning properly on Odoo's side. The test sales order's currency is updated. From here, implementation can begin with the other tool to automatically send those webhook calls into Odoo using the webhook's URL." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:190 -#: ../../content/applications/studio/automated_actions/webhooks.rst:265 -msgid "Copy the URL of the Odoo webhook using the :icon:`fa-link` :guilabel:`(link)` icon and paste it into the URL field in Postman." +#: ../../content/applications/studio/automated_actions/webhooks.rst:194 +msgid "If any other responses are returned, the number associated with them helps to identify the problem. For example, a `500 Internal Server Error` means that Odoo could not interpret the call properly. If this gets returned, ensure the `model` and `id` fields are properly mapped in the webhook's configuration and in Postman." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:193 -#: ../../content/applications/studio/automated_actions/webhooks.rst:268 -msgid "Set the file type to :guilabel:`JSON`, then copy this code, i.e., the payload, and paste it into the code editor:" +#: ../../content/applications/studio/automated_actions/webhooks.rst:202 +msgid "Create a new contact" msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:203 -msgid "In your Odoo database, choose a sales order to test the webhook on. In the pasted code, replace `SALES ORDER NUMBER` with the sales order's number without the `S` or any zeros before the number. For example, a sales order with the number `S00007` should be entered as `7` in Postman." +#: ../../content/applications/studio/automated_actions/webhooks.rst:204 +msgid "This webhook uses custom code to create a new contact in an Odoo database. This could be helpful for automatically creating new vendors or customers." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:207 -#: ../../content/applications/studio/automated_actions/webhooks.rst:282 -msgid "Consult the :ref:`Response viewer ` in Postman to determine whether or not the webhook is functioning properly. If a message other than `200 OK` or `status: ok` is returned, the number associated with the message helps to identify the problem." +#: ../../content/applications/studio/automated_actions/webhooks.rst:210 +msgid "To set up this webhook, open the **Contacts** app. Then, :ref:`set the trigger ` so the :guilabel:`Model` is set to `Contact`. Also, set the :guilabel:`Target Record` to `model.browse([2])`. This is broken down below." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:214 -msgid "Create a new contact" +msgid "**model**: what gets updated in Odoo (in this case, a contact). This matches the :guilabel:`Model` set earlier." msgstr "" #: ../../content/applications/studio/automated_actions/webhooks.rst:216 -msgid "This webhook uses custom code to create a new contact in an Odoo database when the external system sends a `POST` API request to the webhook's URL that includes the contact's information. This could be helpful for automatically creating new vendors or customers." +msgid "**browse**: tells the webhook to look in the `model` (the contacts) set by the payload for what to create." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:225 -msgid "Open the **Contacts** app, then :ref:`open Studio ` and click :guilabel:`Webhooks`. The *Contact* model is selected by default." +#: ../../content/applications/studio/automated_actions/webhooks.rst:222 +msgid "After setting the trigger, set the webhook's action by clicking :guilabel:`Add an action`. For the :guilabel:`Type`, click :guilabel:`Execute Code`, then set the :guilabel:`code` to the sample code below. Finally, click :guilabel:`Save & Close`." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:228 -msgid "Set the :guilabel:`Target Record` to `model.browse([2])`. This is essentially a placeholder as the code in the automated action tells the webhook what needs to be retrieved from the payload and in which model the record needs to be created." +#: ../../content/applications/studio/automated_actions/webhooks.rst:250 +msgid "To summarize what is set up, the webhook creates a contact when an API call is sent to the webhook's URL that includes the contact's information." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:232 -msgid "In the :guilabel:`Type` section, click :guilabel:`Execute Code`." +#: ../../content/applications/studio/automated_actions/webhooks.rst:262 +msgid "Once Postman is open, create a new request, and set its method to :guilabel:`POST`. Next, copy the webhook's URL that is being tested and paste it into the URL field in Postman. After that, click the :guilabel:`Body` tab and click :guilabel:`raw`. Set the file type to :guilabel:`JSON`, then copy this code and paste it into the file." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:233 -msgid "Copy this code and paste it into the code editor in the :guilabel:`Code` tab of the :guilabel:`Action details` section:" +#: ../../content/applications/studio/automated_actions/webhooks.rst:275 +msgid "Replace the fields above with a new contact's information in Postman, and then click :guilabel:`Send`." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:263 -msgid "In `Postman `_, create a new HTTP request and set its method to :guilabel:`POST`." +#: ../../content/applications/studio/automated_actions/webhooks.rst:278 +msgid "If a message saying `200 OK` or `status: ok` gets returned, then the webhook is functioning properly on Odoo's side. The new test contact appears in the **Contacts** app. From here, implementation can begin with the other tool to automatically send those webhook calls into Odoo using the webhook's URL." msgstr "" -#: ../../content/applications/studio/automated_actions/webhooks.rst:279 -msgid "In the pasted code, replace the `CONTACT NAME`, `CONTACTEMAIL@EMAIL.COM`, and `CONTACT PHONE NUMBER` with a new contact's information." +#: ../../content/applications/studio/automated_actions/webhooks.rst:283 +msgid "If any other responses are returned, the number associated with them helps to identify the problem. For example, a `500 Internal Server Error` means that Odoo could not interpret the call properly. If this gets returned, ensure the fields found in the JSON file are properly mapped in the webhook's configuration and in Postman." msgstr "" #: ../../content/applications/studio/fields.rst:3 @@ -1649,26 +1482,30 @@ msgid ":guilabel:`Warning for future dates`: Enable this property to display a w msgstr "" #: ../../content/applications/studio/fields.rst:553 -msgid ":guilabel:`Condensed display`: Enable this property to show days, months and hours with no leading zeros, e.g., `4/2/2025 8:05:00` instead of `04/02/2025 08:05:00`." +msgid ":guilabel:`Date format`: By default the date will be shown as `Apr 2, 2025, 08:05 AM`. Enable this property to show the date in the format `4/2/2025 08:05:00`. The numeric mode is the format set on the current language. In this mode the seconds are always shown." msgstr "" -#: ../../content/applications/studio/fields.rst:555 +#: ../../content/applications/studio/fields.rst:557 +msgid ":guilabel:`Show date`: This property is enabled by default for :guilabel:`Date & Time` fields. Disable this property to show only the time." +msgstr "" + +#: ../../content/applications/studio/fields.rst:559 msgid ":guilabel:`Show time`: This property is enabled by default for :guilabel:`Date & Time` fields. On a read-only field, disable the property to show only the date. This can keep a list view less cluttered, for example." msgstr "" -#: ../../content/applications/studio/fields.rst:558 -msgid ":guilabel:`Show seconds`: This property is enabled by default for :guilabel:`Date & Time` fields. Disable the property to show only hours and minutes." +#: ../../content/applications/studio/fields.rst:562 +msgid ":guilabel:`Show seconds`: This property is disabled by default for :guilabel:`Date & Time` fields. Enable the property to show the seconds." msgstr "" -#: ../../content/applications/studio/fields.rst:560 +#: ../../content/applications/studio/fields.rst:564 msgid ":guilabel:`Time interval`: Enter a value to determine the minute intervals shown in the time selector. For example, enter 15 to allow quarter-hour intervals. The default value is set to 5 minutes." msgstr "" -#: ../../content/applications/studio/fields.rst:563 +#: ../../content/applications/studio/fields.rst:567 msgid ":guilabel:`Earliest accepted date`: Enter the earliest date that can be selected in the date selector in ISO-format, i.e., `YYYY-MM-DD`. If the current date is always the earliest accepted date, enter `today`. On the date selector, dates prior to the earliest accepted date are grayed out." msgstr "" -#: ../../content/applications/studio/fields.rst:567 +#: ../../content/applications/studio/fields.rst:571 msgid ":guilabel:`Latest accepted date`: Enter the latest date that can be selected in the date selector in ISO-format, i.e., `YYYY-MM-DD`. If the current date is always the latest accepted date, enter `today`. On the date selector, dates later than the latest accepted date are grayed out." msgstr "" @@ -2536,8 +2373,7 @@ msgid "To structure a form, drag and drop the :guilabel:`Tabs and Columns` eleme msgstr "" #: ../../content/applications/studio/views.rst:46 -#: ../../content/applications/studio/views.rst:139 -msgid "To prevent users from creating, editing, or deleting records, untick :guilabel:`Can Create`, :guilabel:`Can Edit`, or :guilabel:`Can Delete`." +msgid "To prevent users from creating, editing, deleting or duplicating records, untick :guilabel:`Can Create`, :guilabel:`Can Edit`, :guilabel:`Can Delete` or :guilabel:`Can Duplicate`." msgstr "" #: ../../content/applications/studio/views.rst:48 @@ -2643,6 +2479,10 @@ msgstr "" msgid "The :guilabel:`List` :icon:`oi-view-list` view is used to overview many records at once, look for records, and edit simple records." msgstr "" +#: ../../content/applications/studio/views.rst:139 +msgid "To prevent users from creating, editing, deleting or duplicating records, untick :guilabel:`Can Create`, :guilabel:`Can Edit`, :guilabel:`Can Delete`, or :guilabel:`Can Duplicate`." +msgstr "" + #: ../../content/applications/studio/views.rst:141 msgid "To create and edit records directly within the view, select either :guilabel:`Add record at the bottom`, :guilabel:`Add record on top` or :guilabel:`Open form view` under :guilabel:`When Creating Record`." msgstr "" diff --git a/locale/sources/websites.pot b/locale/sources/websites.pot index 6c3227bf88..2d54f84429 100644 --- a/locale/sources/websites.pot +++ b/locale/sources/websites.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Odoo 18.0\n" +"Project-Id-Version: Odoo 19.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-18 08:33+0000\n" +"POT-Creation-Date: 2025-09-30 10:33+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -239,6 +239,8 @@ msgstr "" #: ../../content/applications/websites/ecommerce.rst:20 #: ../../content/applications/websites/website.rst:52 +#: ../../content/applications/websites/website/structure.rst:37 +#: ../../content/applications/websites/website/web_design.rst:42 msgid "`Odoo Tutorials: Website `_" msgstr "" @@ -649,6 +651,150 @@ msgstr "" msgid "If you own multiple websites, you can make customer accounts available across **all** websites. Then, the customer only needs one account. To do so, go to :menuselection:`Website --> Configuration --> Settings --> Privacy section`, and enable :guilabel:`Shared Customer Accounts`." msgstr "" +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:3 +msgid "Google Merchant Center" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:5 +msgid "Google Merchant Center is a tool that allows ecommerce retailers to manage and submit product data to Google. It serves as a central hub to upload and maintain product details, such as images, prices, and descriptions so that products can appear across Google's platforms." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:10 +msgid "Google Merchant Center is only available for physical products and does not support services." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:13 +msgid "We recommend using the tool alongside other Google services, such as :doc:`Google Search Console <../website/configuration/google_search_console>`, :ref:`Google Analytics ` or :ref:`Google Tag Manager ` to obtain detailed reports on product listing issues, improve marketing strategies, increase your products' online visibility, and enhance the overall sales performance." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:20 +msgid "Google Merchant Center setup" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:22 +msgid "To connect your ecommerce with the :abbr:`GMC (Google Merchant Center)` platform, proceed as follows:" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:25 +msgid "Create or sign in to a Google account using the following link: ``_." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:27 +msgid "Indicate that you sell products online, and enter :guilabel:`Your store's website`." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:28 +msgid "Click :guilabel:`Continue`, then click :guilabel:`Continue to Merchant Center`." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:29 +msgid "Enter your business details by adding the :guilabel:`Business name` and the :guilabel:`Registered country`, then click the :guilabel:`Continue to Merchant Center` button twice." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:32 +msgid "Add the relevant information and click :guilabel:`Continue`, or click :guilabel:`Do it later` to skip this step for now." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:34 +msgid "Go to the :guilabel:`Business info` tab in the left menu, and click :guilabel:`Confirm online store`." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:36 +msgid "`Verify your website's ownership `_ in one of the following ways:" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:39 +msgid "Via :ref:`HTML tag ` or :ref:`HTML file `" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:41 +msgid "Via :ref:`Google Tag Manager `" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:42 +msgid "Via :ref:`Google Analytics `" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:45 +msgid "You can also verify your website's ownership from Google Merchant Center's dashboard by navigating to :menuselection:`Settings --> Business Info` in the left menu." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:48 +msgid "Return to :abbr:`GMC (Google Merchant Center)`, click :guilabel:`Verify your online store`, and :guilabel:`Continue`." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:52 +msgid "`Google Merchant Center Help `_" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:55 +msgid "Linking Odoo to GMC" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:58 +msgid "To activate the :abbr:`GMC (Google Merchant Center)` integration in your Odoo database, at least one :ref:`pricelist ` must be assigned to your website." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:61 +msgid "Navigate to :menuselection:`Website --> Configuration --> Settings`, scroll to the :guilabel:`SEO - Search Engine Optimization` section, and enable :guilabel:`Google Merchant Center Data Source`." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:64 +msgid "Click the :guilabel:`Copy file link`, then :guilabel:`Save`." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:67 +msgid "By enabling the :guilabel:`Google Merchant Center Data Source` option, your website will generate a dynamic `/gmc.xml` feed containing essential product information and availability. This feed can be :ref:`customized ` to include multiple languages and pricelists, ensuring your products are displayed correctly for different regions and audiences." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:73 +msgid "Go to the :abbr:`GMC (Google Merchant Center)` dashboard, navigate to the :menuselection:`Your business --> Products` tab in the left menu, and click :guilabel:`Add products`." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:76 +msgid "Choose :guilabel:`Add products from a file` and paste the URL of the copied file." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:79 +msgid "Make sure to select all the countries where you intend to sell your products. You are not able to proceed without selecting at least one target country. If necessary, enter a :guilabel:`feed label` as well." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:0 +msgid "Select countries in GMC." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:86 +msgid "Click :guilabel:`Continue`." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:91 +msgid "Localized feeds" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:94 +msgid "Languages/regions" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:96 +msgid "It is helpful to create language-specific feeds for each country/language you sell in. To add a new feed, go to :guilabel:`Products` on the :abbr:`GMC` dashboard, click :guilabel:`Add products`, and select :guilabel:`Add another product source` from the dropdown menu." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:101 +msgid "The selected :doc:`language ` must first be enabled in your website's settings." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:105 +msgid "Currencies" +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:107 +msgid "It is also possible to create different feeds for different currencies, which allows customers to view prices in their local currency. To enable this feature, create a :ref:`pricelist ` with the foreign currency in Odoo. Then, go to the :guilabel:`Products` tab in :abbr:`GMC`, click :guilabel:`Manage product sources`, and choose a :guilabel:`Products source`. Navigate to the :guilabel:`Data source setup` tab, click :guilabel:`Show advanced options`, and choose a :guilabel:`Currency`." +msgstr "" + +#: ../../content/applications/websites/ecommerce/google_merchant_center.rst:116 +msgid "`Google Merchant Center Product Feed Specifications `_." +msgstr "" + #: ../../content/applications/websites/ecommerce/order_handling.rst:3 msgid "Order handling" msgstr "" @@ -931,18 +1077,14 @@ msgid "Enable the :doc:`developer mode `." msgstr "" #: ../../content/applications/websites/ecommerce/performance.rst:52 -msgid "Go to :menuselection:`Apps`, remove the :guilabel:`Apps` filter, and install the :guilabel:`Sales - Async Emails` module." -msgstr "" - -#: ../../content/applications/websites/ecommerce/performance.rst:54 msgid "Go to :menuselection:`Settings --> Technical --> System Parameters` and set the :guilabel:`sale.async_emails` system parameter to `True`." msgstr "" -#: ../../content/applications/websites/ecommerce/performance.rst:56 +#: ../../content/applications/websites/ecommerce/performance.rst:54 msgid "Go to :menuselection:`Settings --> Technical --> Scheduled Actions` and ensure that the :guilabel:`Sales: Send pending emails` scheduled action is enabled." msgstr "" -#: ../../content/applications/websites/ecommerce/performance.rst:60 +#: ../../content/applications/websites/ecommerce/performance.rst:58 msgid "Enabling this feature may delay order confirmation and invoice emails by a few minutes. It is recommended only for high-traffic websites, as it can introduce unnecessary delays for e-commerce websites with moderate traffic." msgstr "" @@ -1294,7 +1436,7 @@ msgid ":guilabel:`Sales Description` (under the :guilabel:`Sales` tab)." msgstr "" #: ../../content/applications/websites/ecommerce/products.rst:300 -msgid "Having untranslated content on a web page may be detrimental to the user experience and :doc:`SEO <../../websites/website/pages/seo>`. You can use the :doc:`Translate <../website/configuration/translate>` feature to translate the page's content." +msgid "Having untranslated content on a web page may be detrimental to the user experience and :doc:`SEO <../../websites/website/structure/seo>`. You can use the :doc:`Translate <../website/configuration/translate>` feature to translate the page's content." msgstr "" #: ../../content/applications/websites/ecommerce/products.rst:303 @@ -1666,7 +1808,7 @@ msgid "Place building block in the header or footer." msgstr "" #: ../../content/applications/websites/ecommerce/products/catalog.rst:248 -msgid "Adding content to an eCommerce category page helps improve the :doc:`SEO <../../website/pages/seo>` strategy. Using keywords linked to the products or the eCommerce categories can also increase organic traffic. Additionally, each category has its own specific URL that can be pointed to and is indexed by search engines." +msgid "Adding content to an eCommerce category page helps improve the :doc:`SEO <../../website/structure/seo>` strategy. Using keywords linked to the products or the eCommerce categories can also increase organic traffic. Additionally, each category has its own specific URL that can be pointed to and is indexed by search engines." msgstr "" #: ../../content/applications/websites/ecommerce/products/catalog.rst:252 @@ -2150,300 +2292,456 @@ msgstr "" msgid "`Odoo Tutorials: eLearning `_" msgstr "" -#: ../../content/applications/websites/elearning.rst:19 +#: ../../content/applications/websites/elearning.rst:21 msgid "Courses" msgstr "" -#: ../../content/applications/websites/elearning.rst:21 -msgid "By going to :menuselection:`eLearning --> Courses --> Courses`, you can get an overview of all your courses." +#: ../../content/applications/websites/elearning.rst:23 +msgid "To get an overview of all courses, go to :menuselection:`eLearning --> Courses --> Courses`." msgstr "" -#: ../../content/applications/websites/elearning.rst:24 -msgid "Click on a course title to edit your course on the back end. Click on :guilabel:`View course` to access your course on the front end." +#: ../../content/applications/websites/elearning.rst:25 +msgid "Click on a course card to edit the course on the back end. Click :guilabel:`View course` to access the course on the front end." msgstr "" -#: ../../content/applications/websites/elearning.rst:28 +#: ../../content/applications/websites/elearning.rst:31 msgid "Course creation" msgstr "" -#: ../../content/applications/websites/elearning.rst:30 -msgid "Click :guilabel:`New` to create a new course. When the page pops up, you can add your :guilabel:`Course Title` and one or more :guilabel:`Tags` to describe your course. You can add an image to illustrate your course by hovering your mouse on the camera placeholder image and clicking on the edit icon. Four tabs allow you to edit your course further: :ref:`Content `, :ref:`Description `, :ref:`Options `, and :ref:`Karma `." +#: ../../content/applications/websites/elearning.rst:33 +msgid "Click :guilabel:`New` to create a new course. In the form that opens, add a :guilabel:`Course Title` and one or more :guilabel:`Tags` to categorize the course and :ref:`allow users to filter courses based on their tags `. To add an image to illustrate the course, hover your mouse on the camera placeholder image and click on :icon:`fa-pencil` :guilabel:`(Edit)`." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:39 +msgid "Four tabs allow you to edit your course further: :ref:`Content `, :ref:`Description `, :ref:`Options `, and :ref:`Karma `." msgstr "" #: ../../content/applications/websites/elearning.rst:-1 msgid "Create your elearning course." msgstr "" -#: ../../content/applications/websites/elearning.rst:44 +#: ../../content/applications/websites/elearning.rst:49 msgid "Content tab" msgstr "" -#: ../../content/applications/websites/elearning.rst:46 -msgid "This tab allows you to manage your course content. Click on :guilabel:`Add Section` to divide your course into different sections. Click on :guilabel:`Add Content` to create :ref:`content `. Click on :guilabel:`Add Certification` to assess the level of understanding of your attendees, certify their skills, and motivate them. **Certification** is part of the :doc:`Surveys <../marketing/surveys/create>` app." +#: ../../content/applications/websites/elearning.rst:51 +msgid "This tab allows you to manage the course content. Click :guilabel:`Add Section` to divide the course into different sections. Click :guilabel:`Add Content` to create :ref:`content items `. Click :guilabel:`Add Certification` to assess the attendees' level of understanding, certify their skills, and motivate them. **Certification** is part of the :doc:`Surveys <../marketing/surveys/create>` app." msgstr "" -#: ../../content/applications/websites/elearning.rst:55 -#: ../../content/applications/websites/elearning.rst:204 +#: ../../content/applications/websites/elearning.rst:60 +#: ../../content/applications/websites/elearning.rst:318 msgid "Description tab" msgstr "" -#: ../../content/applications/websites/elearning.rst:57 -msgid "You can add a short description or information related to your course in the :guilabel:`Description` tab. It appears under your course title on your website." +#: ../../content/applications/websites/elearning.rst:62 +msgid "You can add a short description or information related to the course in the :guilabel:`Description` tab. It appears under the course title on your website." msgstr "" #: ../../content/applications/websites/elearning.rst:-1 msgid "Add a description to your course." msgstr "" -#: ../../content/applications/websites/elearning.rst:67 +#: ../../content/applications/websites/elearning.rst:71 #: ../../content/applications/websites/livechat.rst:91 msgid "Options tab" msgstr "" -#: ../../content/applications/websites/elearning.rst:69 -msgid "In the :guilabel:`Options` tab, different configurations are available: :ref:`Course `, :ref:`Communication `, :ref:`Access rights `, and :ref:`Display `." +#: ../../content/applications/websites/elearning.rst:73 +msgid "In the :guilabel:`Options` tab, different configurations are available: :ref:`Course `, :ref:`Access rights `, :ref:`Communication ` and :ref:`Display `." msgstr "" #: ../../content/applications/websites/elearning.rst:-1 msgid "Overview of the Options tab" msgstr "" -#: ../../content/applications/websites/elearning.rst:80 +#: ../../content/applications/websites/elearning.rst:84 msgid "Course" msgstr "" -#: ../../content/applications/websites/elearning.rst:82 -msgid "Assign a :guilabel:`Responsible` user for your course. If you have multiple websites, use the :guilabel:`Website` field to only display the course on the selected website." +#: ../../content/applications/websites/elearning.rst:86 +msgid "Assign a :guilabel:`Responsible` user for the course. If you have multiple websites, use the :guilabel:`Website` field to display the course only on the selected website." msgstr "" -#: ../../content/applications/websites/elearning.rst:88 -msgid "Communication" +#: ../../content/applications/websites/elearning.rst:92 +msgid "Access rights" msgstr "" -#: ../../content/applications/websites/elearning.rst:90 -msgid ":guilabel:`Allow Reviews`: tick the box to allow attendees to like and comment on your content and to submit reviews on your course;" +#: ../../content/applications/websites/elearning.rst:94 +msgid ":guilabel:`Prerequisites`: Set one or more other courses that users are advised to complete before accessing the course." msgstr "" -#: ../../content/applications/websites/elearning.rst:92 -msgid ":guilabel:`Forum`: add a dedicated forum to your course (only shown if the **Forum** feature is enabled in the app's settings);" +#: ../../content/applications/websites/elearning.rst:96 +msgid ":guilabel:`Prerequisite Of`: If the course has been defined as a prerequisite for one or more courses, this read-only field displays the course name(s)." msgstr "" -#: ../../content/applications/websites/elearning.rst:94 -msgid ":guilabel:`New Content Notification`: select an email template sent to your attendees when you upload new content. Click on the internal link button (:guilabel:`➜`) to have access to the email template editor;" +#: ../../content/applications/websites/elearning.rst:98 +msgid ":guilabel:`Show course to`: Define who can see the course on your website. Select one of the following:" msgstr "" -#: ../../content/applications/websites/elearning.rst:97 -msgid ":guilabel:`Completion Notification`: select an email template sent to your attendees once they reach the end of your course. Click on the internal link button (:guilabel:`➜`) to access the email template editor;" +#: ../../content/applications/websites/elearning.rst:101 +msgid ":guilabel:`Everyone`: The course is publicly visible." msgstr "" -#: ../../content/applications/websites/elearning.rst:104 -msgid "Access rights" +#: ../../content/applications/websites/elearning.rst:102 +msgid ":guilabel:`Signed In`: The course is only visible to users who are logged in." msgstr "" -#: ../../content/applications/websites/elearning.rst:106 -msgid ":guilabel:`Prerequisites`: set one or more courses that users are advised to complete before" +#: ../../content/applications/websites/elearning.rst:103 +msgid ":guilabel:`Course Attendees`: The course is only visible to users who are already enrolled in the course." msgstr "" -#: ../../content/applications/websites/elearning.rst:107 -msgid "accessing your course;" +#: ../../content/applications/websites/elearning.rst:105 +msgid ":guilabel:`Anyone with the link`: The course can only be accessed via a direct link." msgstr "" -#: ../../content/applications/websites/elearning.rst:108 -msgid ":guilabel:`Show course to`: define who can access your course and their content between :guilabel:`Everyone`, :guilabel:`Signed In` or :guilabel:`Course Attendees`;" +#: ../../content/applications/websites/elearning.rst:107 +msgid ":guilabel:`Enroll Policy`: Define how people can enroll in the course. The choice of policy also determines which internal eLearning users can add, i.e., manually enroll, attendees via the :guilabel:`Add attendees` button or invite attendees to enroll via the :guilabel:`Invite` button." msgstr "" -#: ../../content/applications/websites/elearning.rst:110 -msgid ":guilabel:`Enroll Policy`: define how people enroll in your course. Select:" +#: ../../content/applications/websites/elearning.rst:112 +msgid "Internal eLearning users have either `Officer` or `Manager` :doc:`access rights `." msgstr "" -#: ../../content/applications/websites/elearning.rst:112 -msgid ":guilabel:`Open`: if you want your course to be available to anyone;" +#: ../../content/applications/websites/elearning.rst:115 +msgid "Select one of the following:" msgstr "" -#: ../../content/applications/websites/elearning.rst:113 -msgid ":guilabel:`On Invitation`: if only people who received an invitation can enroll to your course. If selected, fill in the :guilabel:`Enroll Message` explaining the course's enrollment process. This message appears on your website under the course title;" +#: ../../content/applications/websites/elearning.rst:117 +msgid ":guilabel:`Open`:" msgstr "" -#: ../../content/applications/websites/elearning.rst:116 -msgid ":guilabel:`On Payment`: if only people who bought your course can attend it. The :guilabel:`Paid Courses` feature must be enabled to get this option. If you select :guilabel:`On Payment`, you must add a :guilabel:`Product` for your course." +#: ../../content/applications/websites/elearning.rst:119 +msgid "Anyone who can see the course can enroll." msgstr "" -#: ../../content/applications/websites/elearning.rst:121 -msgid "Only products set up with :guilabel:`Course` as their :guilabel:`Product Type` are displayed." +#: ../../content/applications/websites/elearning.rst:120 +msgid "Any eLearning Officer or eLearning Manager can add or invite internal or external attendees." msgstr "" -#: ../../content/applications/websites/elearning.rst:127 -msgid "Display" +#: ../../content/applications/websites/elearning.rst:123 +msgid ":guilabel:`On invitation`:" msgstr "" -#: ../../content/applications/websites/elearning.rst:129 -msgid ":guilabel:`Training`: the course content appears as a training program, and the courses must be taken in the proposed order." +#: ../../content/applications/websites/elearning.rst:125 +msgid "Only people who have received an invitation can enroll in the course." msgstr "" -#: ../../content/applications/websites/elearning.rst:131 -msgid ":guilabel:`Documentation`: the content is available in any order. If you choose this option, you can choose which page should be promoted on the course homepage by using the :guilabel:`Featured Content` field." +#: ../../content/applications/websites/elearning.rst:126 +msgid "If the course visibility is set to :guilabel:`Everyone`, :guilabel:`Signed In`, or :guilabel:`Anyone with the link`, any non-invited person who logs in can request access to the course via the course page. Enter an :guilabel:`Enroll Message` to explain how to enroll, e.g., \"Contact Responsible\"." msgstr "" -#: ../../content/applications/websites/elearning.rst:138 -msgid "Karma tab" +#: ../../content/applications/websites/elearning.rst:132 +msgid "The request creates a to-do assigned to the course's :guilabel:`Responsible` user, allowing them to :guilabel:`Grant Access` or :guilabel:`Refuse Access`. The to-do is visible to the :guilabel:`Responsible` user and any eLearning Manager in the course's chatter, and the :guilabel:`Responsible` user is notified via email. Either the :guilabel:`Responsible` user or an eLearning Manager can grant access, in which case the requestor is automatically enrolled in the course, or refuse access." msgstr "" -#: ../../content/applications/websites/elearning.rst:140 -msgid "This tab is about gamification to make eLearning fun and interactive." +#: ../../content/applications/websites/elearning.rst:139 +msgid "Only the :guilabel:`Responsible` user for the course or an eLearning Manager can add or invite internal or external attendees." msgstr "" #: ../../content/applications/websites/elearning.rst:142 -msgid "In the :guilabel:`Rewards` section, choose how many karma points you want to grant your students when they :guilabel:`Review` or :guilabel:`Finish` a course." +msgid ":guilabel:`On payment`:" +msgstr "" + +#: ../../content/applications/websites/elearning.rst:144 +msgid "This option is only shown if the :guilabel:`Paid courses` feature is enabled in the :ref:`eLearning settings `." msgstr "" -#: ../../content/applications/websites/elearning.rst:145 -msgid "In the :guilabel:`Access Rights` section, define the karma needed to :guilabel:`Add Review`, :guilabel:`Add Comment`, or :guilabel:`Vote` on the course." +#: ../../content/applications/websites/elearning.rst:146 +msgid "Anyone who can see the course can enroll in the course upon payment." msgstr "" -#: ../../content/applications/websites/elearning.rst:149 -msgid "From your course, click the :guilabel:`Contact Attendees` button to reach people who are enrolled in the course." +#: ../../content/applications/websites/elearning.rst:147 +msgid "Any eLearning Officer can *invite* internal or external attendees to enroll in the course." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:148 +msgid "Only the :guilabel:`Responsible` user for the course or an eLearning Manager can *add* attendees. Payment is not required when an attendee is added in this way." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:150 +msgid "To set a course as :guilabel:`On payment`, a :guilabel:`Product` must be selected; only products set up with :guilabel:`Course` as their :guilabel:`Product Type` are available for selection." msgstr "" #: ../../content/applications/websites/elearning.rst:155 +msgid "To add or invite an attendee, the attendee must be an existing contact or created as a new contact. A person who creates a customer account on your website is automatically a contact." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:161 +msgid "Communication" +msgstr "" + +#: ../../content/applications/websites/elearning.rst:163 +msgid ":guilabel:`Allow Reviews`: Enable this option to allow attendees to like, comment on, and submit reviews for the course content." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:165 +msgid ":guilabel:`Forum`: Add a dedicated forum to the course. This option is only shown if the :guilabel:`Forum` feature is enabled in the :ref:`eLearning settings `." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:167 +msgid ":guilabel:`New Content Notification`: Select an email template to send emails to attendees when you upload new content items. Click on :icon:`oi-arrow-right` :guilabel:`Internal link` to access the email template editor." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:170 +msgid ":guilabel:`Completion Notification`: Select an email template to send emails to attendees once they reach the end of the course. Click on :icon:`oi-arrow-right` :guilabel:`Internal link` to access the email template editor." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:175 +msgid "If the :guilabel:`Mailing` feature is enabled in the :ref:`eLearning settings `, it is possible to send mass mailings to people enrolled in a course via a :guilabel:`Contact Attendees` button at the top left of the course form. The button is only visible to eLearning Officers who also have `User` :doc:`access rights ` for Email Marketing and to eLearning Managers." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:184 +msgid "Display" +msgstr "" + +#: ../../content/applications/websites/elearning.rst:186 +msgid ":guilabel:`Training`: The course content appears as a training program, and the courses must be taken in the proposed order." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:188 +msgid ":guilabel:`Documentation`: The content is available in any order. Use the :guilabel:`Featured Content` field to define which content items are promoted on the course homepage." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:194 +msgid "Karma tab" +msgstr "" + +#: ../../content/applications/websites/elearning.rst:196 +msgid "This tab is about gamification to make eLearning fun and interactive." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:198 +msgid "In the :guilabel:`Rewards` section, choose how many karma points you want to grant attendees when they :guilabel:`Review` or :guilabel:`Finish` a course." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:201 +msgid "In the :guilabel:`Access Rights` section, define the karma points needed to :guilabel:`Add Review`, :guilabel:`Add Comment`, or :guilabel:`Vote` on the course." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:207 msgid "Course groups" msgstr "" -#: ../../content/applications/websites/elearning.rst:157 -msgid "Use the **Course Groups** to inform users and allow them to filter the courses from the :guilabel:`All Courses` dashboard." +#: ../../content/applications/websites/elearning.rst:209 +msgid "**Course Groups** allow users to filter the :guilabel:`All Courses` dashboard on your website and find the course that meets their interests, needs, level, etc." msgstr "" -#: ../../content/applications/websites/elearning.rst:160 -msgid "You can manage them by going to :menuselection:`Configuration --> Course Groups`. Click :guilabel:`New` to create a new course group. Add the :guilabel:`Course Group Name`, tick the :guilabel:`Menu Entry` box to allow users to search by course group on the website, and add tags in the :guilabel:`Tag Name` column. For each tag, you can select a corresponding color." +#: ../../content/applications/websites/elearning.rst:212 +msgid "To manage them, go to :menuselection:`eLearning --> Configuration --> Course Groups`. Click :guilabel:`New` to create a new course group. Add the :guilabel:`Course Group Name`, enable :guilabel:`Menu Entry` to allow users to search by course group on the website, and add tags in the :guilabel:`Tag Name` column. For each tag, you can select a corresponding color." msgstr "" -#: ../../content/applications/websites/elearning.rst:166 +#: ../../content/applications/websites/elearning.rst:220 msgid "Settings" msgstr "" -#: ../../content/applications/websites/elearning.rst:168 -msgid "You can enable different features to customize your courses by going to :menuselection:`eLearning --> Configuration --> Settings`:" +#: ../../content/applications/websites/elearning.rst:222 +msgid "The following options are available in the eLearning settings. Go to :menuselection:`eLearning --> Configuration --> Settings`, then enable the desired feature:" +msgstr "" + +#: ../../content/applications/websites/elearning.rst:225 +msgid ":guilabel:`Certifications`: Assess attendees' knowledge and provide official certification of their skills." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:227 +msgid ":guilabel:`Paid Courses`: Sell course access directly through your website and track revenue." msgstr "" -#: ../../content/applications/websites/elearning.rst:171 -msgid "**Certifications**: to evaluate the knowledge of your attendees and certify their skills;" +#: ../../content/applications/websites/elearning.rst:230 +msgid "Enabling :guilabel:`Paid Courses` automatically installs the :guilabel:`eCommerce` module, which may impact your `pricing plan `_." msgstr "" -#: ../../content/applications/websites/elearning.rst:172 -msgid "**Paid courses**: to sell access to your courses on your website and track revenues;" +#: ../../content/applications/websites/elearning.rst:234 +msgid ":doc:`eCommerce documentation `" msgstr "" -#: ../../content/applications/websites/elearning.rst:173 -msgid "**Mailing**: to update all your attendees at once through mass mailings;" +#: ../../content/applications/websites/elearning.rst:236 +msgid ":guilabel:`Mailing`: Send mass mailings to keep all attendees informed and up to date." msgstr "" -#: ../../content/applications/websites/elearning.rst:174 -msgid "**Forum**: to create a community and let attendees answer each other's questions." +#: ../../content/applications/websites/elearning.rst:237 +msgid ":guilabel:`Forum`: Build a community space where attendees can ask questions and help each other." msgstr "" -#: ../../content/applications/websites/elearning.rst:179 +#: ../../content/applications/websites/elearning.rst:242 msgid "Content" msgstr "" -#: ../../content/applications/websites/elearning.rst:181 -msgid "Manage your content by going to :menuselection:`eLearning --> Courses --> Contents`. Click :guilabel:`New` to create content. Add your :guilabel:`Content Title`, and if you want :ref:`Tags `, then fill in the related information among the different tabs." +#: ../../content/applications/websites/elearning.rst:244 +msgid "To manage course content, go to :menuselection:`eLearning --> Courses --> Contents`. Click :guilabel:`New` to create a content item. Add the :guilabel:`Content Title` and any desired :ref:`Tags `, then fill in the required information in the different tabs." msgstr "" #: ../../content/applications/websites/elearning.rst:-1 msgid "Create your content." msgstr "" -#: ../../content/applications/websites/elearning.rst:190 +#: ../../content/applications/websites/elearning.rst:252 +msgid "You can also create new content from within a course. Go to :menuselection:`eLearning --> Courses --> Courses`, click the relevant course card, then click :guilabel:`Add content` at the bottom of the :guilabel:`Content` tab." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:259 msgid "Document tab" msgstr "" -#: ../../content/applications/websites/elearning.rst:192 -msgid ":guilabel:`Course`: select the course your content belongs to;" +#: ../../content/applications/websites/elearning.rst:261 +msgid "For each content type, provide the following information:" msgstr "" -#: ../../content/applications/websites/elearning.rst:193 -msgid ":guilabel:`Content Type`: select the type of your content;" +#: ../../content/applications/websites/elearning.rst:263 +msgid ":guilabel:`Course`: Select the course to which the content item belongs." msgstr "" -#: ../../content/applications/websites/elearning.rst:194 -msgid ":guilabel:`Responsible`: add a responsible person for your content;" +#: ../../content/applications/websites/elearning.rst:264 +msgid ":guilabel:`Content Type`: Select the relevant :ref:`content type ` and provide the required information." msgstr "" -#: ../../content/applications/websites/elearning.rst:195 -msgid ":guilabel:`Duration`: indicate the time required to complete the course;" +#: ../../content/applications/websites/elearning.rst:266 +msgid ":guilabel:`Responsible`: Select the user responsible for the content item. By default, this is the user who creates the course, but another user can be selected." msgstr "" -#: ../../content/applications/websites/elearning.rst:196 -msgid ":guilabel:`Allow Download`: allow users to download the content of the slide. This option is only visible when the content is a document;" +#: ../../content/applications/websites/elearning.rst:268 +msgid ":guilabel:`Duration`: Enter the time required to complete the lesson." msgstr "" -#: ../../content/applications/websites/elearning.rst:198 -msgid ":guilabel:`Allow Preview`: the course is accessible by anyone." +#: ../../content/applications/websites/elearning.rst:269 +msgid ":guilabel:`Allow Preview`: Enable this if the content should be accessible to anyone." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:272 +msgid "If the :ref:`Content Type ` is :guilabel:`Document`, enabling :guilabel:`Allow Download` allows users to download the content." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:275 +msgid "Two read-only fields provide data about how often the content item is viewed:" msgstr "" -#: ../../content/applications/websites/elearning.rst:199 -msgid ":guilabel:`# of Public Views`: displays the number of views from non-enrolled participants;" +#: ../../content/applications/websites/elearning.rst:277 +msgid ":guilabel:`# of Public Views`: displays the number of views from non-enrolled participants." msgstr "" -#: ../../content/applications/websites/elearning.rst:200 +#: ../../content/applications/websites/elearning.rst:278 msgid ":guilabel:`# Total Views`: displays the total number of views (non-enrolled and enrolled participants)." msgstr "" -#: ../../content/applications/websites/elearning.rst:206 -msgid "You can add a description of your content that appears front end in the :guilabel:`About` section of your course content." +#: ../../content/applications/websites/elearning.rst:-1 +msgid "Provide information about the content." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:287 +msgid "Content types" +msgstr "" + +#: ../../content/applications/websites/elearning.rst:289 +msgid "You can add the following content types:" +msgstr "" + +#: ../../content/applications/websites/elearning.rst:291 +msgid ":guilabel:`Image`: To upload an image, select :guilabel:`Upload from Device`, click :guilabel:`Upload your file`, then select the relevant file. Supported formats include JPG, JPEG, PNG, SVG, GIF, and WEBP. The maximum file size is 25MB." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:295 +msgid "Alternatively, to add an image saved on Google Drive, select :guilabel:`Retrieve from Google Drive`, then add the Google Drive link to the image." msgstr "" -#: ../../content/applications/websites/elearning.rst:210 +#: ../../content/applications/websites/elearning.rst:298 +msgid ":guilabel:`Article`: Articles are website pages that are customized using the website builder on your website's front end." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:301 +msgid "With the :guilabel:`Course` selected, click the :guilabel:`Go to Website` smart button, then, at the top-right of the screen, click :icon:`fa-pencil` :guilabel:`(Edit)`. Write the article's content and :doc:`customize the page using the website builder `." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:305 +msgid ":guilabel:`Document`: To upload a document, select :guilabel:`Upload from Device`, click :guilabel:`Upload your file`, then select the relevant file. Only PDF documents can be uploaded." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:308 +msgid "Alternatively, to add a Google Slides presentation, Google Doc document, or Google Sheets spreadsheet, click :guilabel:`Retrieve from Google Drive` and add the Google Drive link to the file." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:312 +msgid ":guilabel:`Video`: Add the YouTube, Google Drive, or Vimeo link to the video." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:313 +msgid ":guilabel:`Quiz`: Open the :ref:`Quiz tab ` to create a quiz." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:320 +msgid "Add a description for the content. This text is displayed in the :guilabel:`About` section of the content item on your website." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:326 msgid "Additional Resources tab" msgstr "" -#: ../../content/applications/websites/elearning.rst:212 -msgid "Click :guilabel:`Add a line` to add a link or a file that supports your participants' learning. It appears in the course content on your website." +#: ../../content/applications/websites/elearning.rst:328 +msgid "Click :guilabel:`Add a line` to add a link or a file that supports your participants' learning. The resource appears in the course content on your website." msgstr "" #: ../../content/applications/websites/elearning.rst:-1 msgid "Additional ressources" msgstr "" -#: ../../content/applications/websites/elearning.rst:222 +#: ../../content/applications/websites/elearning.rst:337 msgid "Quiz tab" msgstr "" -#: ../../content/applications/websites/elearning.rst:224 -msgid "From this tab you can create a quiz to assess your students at the end of the course." +#: ../../content/applications/websites/elearning.rst:339 +msgid "From this tab, you can create a quiz to assess your students at the end of the course." msgstr "" -#: ../../content/applications/websites/elearning.rst:226 -msgid "The :guilabel:`Points Rewards` section lets you give a specific number of karma points depending on how many tries they need to correctly answer the question. Then, create your questions and the possible answers by clicking on :guilabel:`Add a line`. A new window pops up, add the question by filling in the :guilabel:`Question Name` and add multiple answers by clicking on :guilabel:`Add a line`. Tick the :guilabel:`Is correct answer` to mark one or more answers as correct. You can also fill in the :guilabel:`Comment` field to display additional information when the answer is chosen by the participant." +#: ../../content/applications/websites/elearning.rst:341 +msgid "The :guilabel:`Points Rewards` section allows you to assign karma points based on how many attempts are needed to answer correctly. To create a question, click :guilabel:`Add a line`, enter the :guilabel:`Question Name`, and add possible answers. Mark the correct answer(s) by selecting :guilabel:`Is correct answer`. You can also use the :guilabel:`Comment` field to provide additional information when an answer is selected." msgstr "" -#: ../../content/applications/websites/elearning.rst:237 +#: ../../content/applications/websites/elearning.rst:350 msgid "Content Tags" msgstr "" -#: ../../content/applications/websites/elearning.rst:239 -msgid "The **Content Tags** help users to classify the content from the :guilabel:`Contents` dashboard." +#: ../../content/applications/websites/elearning.rst:352 +msgid "**Content Tags** are visible on the :guilabel:`Contents` dashboard of a course on your website, and can help users identify the kind of content a particular lesson contains, e.g., theory, or exercises." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:355 +msgid "To manage content tags, go to :menuselection:`eLearning --> Configuration --> Content Tags`. Click :guilabel:`New` to create a new tag." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:361 +msgid "Publish courses and content" msgstr "" -#: ../../content/applications/websites/elearning.rst:241 -msgid "You can manage them by going to :menuselection:`eLearning --> Configuration --> Content Tags`. Click :guilabel:`New` to create a new tag." +#: ../../content/applications/websites/elearning.rst:363 +msgid "Courses and content items must be published from the front end to be available to your audience. To access the front end, click the :guilabel:`Go to Website` smart button at the top of the course form or an individual content form." msgstr "" -#: ../../content/applications/websites/elearning.rst:245 -msgid "Publish your content" +#: ../../content/applications/websites/elearning.rst:367 +msgid "A course and its content items are published separately:" msgstr "" -#: ../../content/applications/websites/elearning.rst:247 -msgid "Everything created on the back end needs to be published from the front end. Unpublished content is always visible from your website but still needs to be published to be available to your audience." +#: ../../content/applications/websites/elearning.rst:369 +msgid "To publish a course, access the main course page, then toggle the switch in the upper-right corner from :guilabel:`Unpublished` to :guilabel:`Published`." msgstr "" -#: ../../content/applications/websites/elearning.rst:250 -msgid "You must be on your website's front end to publish your content. To do so, click on the :guilabel:`Go To Website` smart button, and tick the :guilabel:`Publish` option available in the right-hand corner." +#: ../../content/applications/websites/elearning.rst:371 +msgid "To publish individual content items, click on an item to open it, then toggle the switch from :guilabel:`Unpublished` to :guilabel:`Published`." msgstr "" #: ../../content/applications/websites/elearning.rst:-1 msgid "Publish your content." msgstr "" +#: ../../content/applications/websites/elearning.rst:378 +msgid "When publishing a new course, publish the individual content items before publishing the course itself. Published content is only available to your audience once the course it is part of is published." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:382 +msgid "To unpublish a course or an individual content item, open the course or item, then toggle the switch from :guilabel:`Published` to :guilabel:`Unpublished`." +msgstr "" + +#: ../../content/applications/websites/elearning.rst:386 +msgid "Unpublishing a course renders the course *and* its content unavailable to your audience." +msgstr "" + #: ../../content/applications/websites/forum.rst:3 msgid "Forum" msgstr "" @@ -2521,7 +2819,7 @@ msgid "A user's karma points are shared across all forums, courses, etc., of a s msgstr "" #: ../../content/applications/websites/forum.rst:56 -msgid "eLearning users can earn karma points through different :ref:`course interactions ` and by :ref:`completing quizzes `." +msgid "eLearning users can earn karma points through different :ref:`course interactions ` and by :ref:`completing quizzes `." msgstr "" #: ../../content/applications/websites/forum.rst:62 @@ -3820,7 +4118,7 @@ msgid "If a user's :guilabel:`Online Chat Name` is not set, the name displayed d msgstr "" #: ../../content/applications/websites/livechat/participate.rst:24 -msgid "Mitchell Admin has his full name as his :guilabel:`User Name`, but he does not want to include his last name in a live chat conversation for privacy reasons. He would then set his :guilabel:`Online Chat Name` to include only his first name, Mitchell." +msgid "A user has their full name as their :guilabel:`User Name`, but they do not want to include their last name in a live chat conversation. They would then set their :guilabel:`Online Chat Name` to include only their first name." msgstr "" #: ../../content/applications/websites/livechat/participate.rst:0 @@ -3848,14 +4146,30 @@ msgid "Only :doc:`languages <../../general/users/language>` that are enabled on msgstr "" #: ../../content/applications/websites/livechat/participate.rst:53 -msgid "Join or leave a channel" +msgid "Set live chat expertise" msgstr "" #: ../../content/applications/websites/livechat/participate.rst:55 +msgid "Operators can designate *Expertise* in one or more areas on their profile. A :doc:`chatbot ` can then assign conversations to the operator with the appropriate expertise. Select one or more options from the :guilabel:`Live Chat Expertise` drop-down list." +msgstr "" + +#: ../../content/applications/websites/livechat/participate.rst:59 +msgid "To create a new expertise, navigate to :menuselection:`Live Chat app --> Configuration --> Expertise` and click :guilabel:`New`. Enter the :guilabel:`Name` of the expertise, and, if desired, select one or more :guilabel:`Operators`. Click :guilabel:`Save` when finished." +msgstr "" + +#: ../../content/applications/websites/livechat/participate.rst:64 +msgid "When forwarding live chat conversations, the chatbot prioritizes users with matching expertise. If no applicable match is found, the chatbot forwards the conversation to the next available operator." +msgstr "" + +#: ../../content/applications/websites/livechat/participate.rst:69 +msgid "Join or leave a channel" +msgstr "" + +#: ../../content/applications/websites/livechat/participate.rst:71 msgid "To join a live chat channel, go to the :menuselection:`Live Chat app --> Channels`, and click the :guilabel:`Join` button on the Kanban card for the appropriate channel." msgstr "" -#: ../../content/applications/websites/livechat/participate.rst:58 +#: ../../content/applications/websites/livechat/participate.rst:74 msgid "Any channel where the user is currently active shows a :guilabel:`Leave` button. Click this button to disconnect from the channel." msgstr "" @@ -3863,19 +4177,19 @@ msgstr "" msgid "View of a channel form and the option to join a channel for Odoo Live Chat." msgstr "" -#: ../../content/applications/websites/livechat/participate.rst:65 +#: ../../content/applications/websites/livechat/participate.rst:81 msgid "Operators that do not show any activity in Odoo for more than thirty minutes are considered disconnected, and subsequently removed from the channel." msgstr "" -#: ../../content/applications/websites/livechat/participate.rst:69 +#: ../../content/applications/websites/livechat/participate.rst:85 msgid "Manage live chat requests" msgstr "" -#: ../../content/applications/websites/livechat/participate.rst:71 -msgid "When an operator is active in a channel, chat windows open in the bottom-right corner of the screen, no matter what page they are on in Odoo. This allows them to access other pages and apps, while still participating in the conversation." +#: ../../content/applications/websites/livechat/participate.rst:87 +msgid "When an operator is active in a channel, chat windows open in the bottom-right corner of the screen, no matter where they are in the database. This allows them to access other pages and apps, while still participating in the conversation." msgstr "" -#: ../../content/applications/websites/livechat/participate.rst:75 +#: ../../content/applications/websites/livechat/participate.rst:91 msgid "Live chat conversations can also be viewed by navigating to the :menuselection:`Discuss app`. New conversations appear in bold under the channel name, located along the left panel." msgstr "" @@ -3883,27 +4197,27 @@ msgstr "" msgid "View of the discuss application with a message sent through live chat in Odoo." msgstr "" -#: ../../content/applications/websites/livechat/participate.rst:81 -msgid "Click on a conversation in the left panel to open it. From this view, an operator can participate in the chat the same as they would in the normal chat window." +#: ../../content/applications/websites/livechat/participate.rst:97 +msgid "Click on a conversation in the left panel to select it. This opens the conversation. From this view, an operator can participate in the chat the same as they would in the normal chat window." msgstr "" -#: ../../content/applications/websites/livechat/participate.rst:85 -msgid "Conversations can also be accessed by clicking the :icon:`fa-comments` :guilabel:`(messages)` icon in the menu bar." +#: ../../content/applications/websites/livechat/participate.rst:101 +msgid "Conversations can also be accessed by clicking the :icon:`fa-comments` :guilabel:`(Messages)` icon in the menu bar." msgstr "" #: ../../content/applications/websites/livechat/participate.rst:0 msgid "View of the menu bar in Odoo emphasizing the comments icon." msgstr "" -#: ../../content/applications/websites/livechat/participate.rst:92 +#: ../../content/applications/websites/livechat/participate.rst:108 msgid ":doc:`../../productivity/discuss`" msgstr "" -#: ../../content/applications/websites/livechat/participate.rst:93 +#: ../../content/applications/websites/livechat/participate.rst:109 msgid ":doc:`../livechat`" msgstr "" -#: ../../content/applications/websites/livechat/participate.rst:94 +#: ../../content/applications/websites/livechat/participate.rst:110 msgid ":doc:`../livechat/responses`" msgstr "" @@ -4739,7 +5053,7 @@ msgid "You could add a link to this page in your website's footer, for example." msgstr "" #: ../../content/applications/websites/website/configuration/cookies_bar.rst:57 -msgid ":doc:`Pages <../pages>`" +msgid ":doc:`Pages <../structure/pages>`" msgstr "" #: ../../content/applications/websites/website/configuration/domain_names.rst:3 @@ -5406,18 +5720,18 @@ msgid "`Google Tag Manager container snippet ` or :ref:`Google Tag Manager `. You need to access your domain registrar's settings for domain verification." msgstr "" -#: ../../content/applications/websites/website/configuration/google_search_console.rst:72 +#: ../../content/applications/websites/website/configuration/google_search_console.rst:73 msgid "HTML file upload" msgstr "" -#: ../../content/applications/websites/website/configuration/google_search_console.rst:74 +#: ../../content/applications/websites/website/configuration/google_search_console.rst:75 msgid "This method involves uploading an HTML file provided by Google containing the verification code you have to put in your Odoo's Website Settings. Google verifies ownership by checking for this code." msgstr "" -#: ../../content/applications/websites/website/configuration/google_search_console.rst:77 +#: ../../content/applications/websites/website/configuration/google_search_console.rst:78 msgid "Once you added your website URL under the URL prefix option and clicked :guilabel:`continue`, expand the HTML file section where you find a download :icon:`fa-download` button." msgstr "" @@ -5425,7 +5739,7 @@ msgstr "" msgid "HTML file download" msgstr "" -#: ../../content/applications/websites/website/configuration/google_search_console.rst:83 +#: ../../content/applications/websites/website/configuration/google_search_console.rst:84 msgid "Download your HTML verification file and copy the verification code (e.g., `google123abc.html`)." msgstr "" @@ -5433,7 +5747,7 @@ msgstr "" msgid "Open and copy html file" msgstr "" -#: ../../content/applications/websites/website/configuration/google_search_console.rst:88 +#: ../../content/applications/websites/website/configuration/google_search_console.rst:89 msgid "In your Odoo database, go to :menuselection:`Website --> Configuration --> Settings`, and enable :guilabel:`Google Search Console` in the :guilabel:`SEO` section. Paste the verification code (e.g., `google123abc.html`) in the dedicated field." msgstr "" @@ -5441,11 +5755,43 @@ msgstr "" msgid "Paste html code in Odoo" msgstr "" -#: ../../content/applications/websites/website/configuration/google_search_console.rst:95 +#: ../../content/applications/websites/website/configuration/google_search_console.rst:96 msgid "In Google Search Console, click :guilabel:`Verify`. If you perform the steps above correctly, verification should be done immediately." msgstr "" -#: ../../content/applications/websites/website/configuration/google_search_console.rst:99 +#: ../../content/applications/websites/website/configuration/google_search_console.rst:102 +msgid "HTML tag" +msgstr "" + +#: ../../content/applications/websites/website/configuration/google_search_console.rst:104 +msgid "This method involves copying a meta tag provided by Google and pasting it into your Odoo website. To verify your site ownership using an HTML tag, follow these instructions:" +msgstr "" + +#: ../../content/applications/websites/website/configuration/google_search_console.rst:107 +msgid "Expand the HTML tag section." +msgstr "" + +#: ../../content/applications/websites/website/configuration/google_search_console.rst:0 +msgid "Open HTML tag section." +msgstr "" + +#: ../../content/applications/websites/website/configuration/google_search_console.rst:112 +msgid ":guilabel:`Copy` the HTML tag to clipboard." +msgstr "" + +#: ../../content/applications/websites/website/configuration/google_search_console.rst:113 +msgid "On your Odoo website, click :guilabel:`Edit` in the upper-right corner, go to the :guilabel:`Theme` tab, scroll down to the :guilabel:`Advanced` section, then click :guilabel:` and ` next to :guilabel:`Code Injection`. Paste the copied tag into the first field (:guilabel:``), and click :guilabel:`Save`." +msgstr "" + +#: ../../content/applications/websites/website/configuration/google_search_console.rst:0 +msgid "Paste tag in head field." +msgstr "" + +#: ../../content/applications/websites/website/configuration/google_search_console.rst:121 +msgid "Return to :abbr:`GSC (Google Search Console)` and click :guilabel:`Verify`." +msgstr "" + +#: ../../content/applications/websites/website/configuration/google_search_console.rst:124 msgid ":doc:`domain_names`" msgstr "" @@ -5458,11 +5804,11 @@ msgid "Odoo allows you to create multiple websites from the same database. This msgstr "" #: ../../content/applications/websites/website/configuration/multi_website.rst:11 -msgid "Each website can be designed and configured independently with its own :doc:`domain name `, :doc:`theme <../web_design/themes>`, :doc:`pages <../pages>`, :doc:`menus <../pages/header_footer>`, :doc:`languages `, :doc:`products <../../ecommerce/products>`, assigned sales team, etc. They can also :ref:`share content and pages `." +msgid "Each website can be designed and configured independently with its own :doc:`domain name `, :doc:`theme <../web_design/themes>`, :doc:`pages <../structure/pages>`, :doc:`menus <../structure/header_footer>`, :doc:`languages `, :doc:`products <../../ecommerce/products>`, assigned sales team, etc. They can also :ref:`share content and pages `." msgstr "" #: ../../content/applications/websites/website/configuration/multi_website.rst:18 -msgid "Duplicate content (i.e., pages and content shared between multiple websites) can have a negative impact on :doc:`../pages/seo`." +msgid "Duplicate content (i.e., pages and content shared between multiple websites) can have a negative impact on :doc:`../structure/seo`." msgstr "" #: ../../content/applications/websites/website/configuration/multi_website.rst:22 @@ -5723,7 +6069,7 @@ msgid "Cloudflare Turnstile verification error message" msgstr "" #: ../../content/applications/websites/website/configuration/spam_protection.rst:56 -#: ../../content/applications/websites/website/pages.rst:46 +#: ../../content/applications/websites/website/structure/pages.rst:46 msgid "Click :guilabel:`Create`." msgstr "" @@ -5875,7 +6221,7 @@ msgid "Install languages" msgstr "" #: ../../content/applications/websites/website/configuration/translate.rst:16 -msgid "To allow translation of your website, you must first :doc:`install <../../../general/users/language>` the required languages and add them to your website. To do so, go to :menuselection:`Website --> Configuration --> Settings` and click :icon:`fa-arrow-right` :guilabel:`Install languages` in the :guilabel:`Website Info` section. In the dialog box that opens, select the :guilabel:`Languages` you want from the dropdown menu, tick the required :guilabel:`Websites to translate`, and click :guilabel:`Add`." +msgid "To allow translation of your website, you must first :doc:`install <../../../general/users/language>` the required languages and add them to your website. To do so, go to :menuselection:`Website --> Configuration --> Settings` and click :icon:`fa-arrow-right` :guilabel:`Install new languages` in the :guilabel:`Website Info` section. In the dialog box that opens, select the :guilabel:`Languages` you want from the dropdown menu, tick the required :guilabel:`Websites to translate`, and click :guilabel:`Add`." msgstr "" #: ../../content/applications/websites/website/configuration/translate.rst:23 @@ -6138,1149 +6484,1161 @@ msgstr "" msgid "You can also access the mail group's moderation rules by going to :menuselection:`Website --> Configuration --> Mailing Lists`, selecting the group, then clicking the :guilabel:`Moderations` smart button." msgstr "" -#: ../../content/applications/websites/website/pages.rst:5 -msgid "Pages" +#: ../../content/applications/websites/website/reporting/analytics.rst:3 +msgid "Website analytics" msgstr "" -#: ../../content/applications/websites/website/pages.rst:7 -msgid "Odoo allows you to create pages for your website and customize their content and appearance to your needs." +#: ../../content/applications/websites/website/reporting/analytics.rst:5 +msgid "Website analytics helps website owners monitor how people use their site. It provides data on visitor demographics, behavior, and interactions, helping improve websites and marketing strategies." msgstr "" -#: ../../content/applications/websites/website/pages.rst:12 -msgid "**Static** pages, such as the homepage or any :ref:`custom-created `, contain fixed content that does not change dynamically. You can manually create these pages, define their URLs, and adapt their :ref:`properties ` as needed. **Dynamic** pages, on the other hand, are generated dynamically. All pages generated automatically by Odoo, for example, when you install an app or module (e.g., `/shop` or `/blog`) or publish a new product or :doc:`blog post <../blog>`, are dynamic pages and are therefore managed differently." +#: ../../content/applications/websites/website/reporting/analytics.rst:8 +msgid "You can track your Odoo website's traffic using :ref:`analytics/plausible` or :ref:`analytics/google-analytics`. We recommend using Plausible.io as it is privacy-friendly, lightweight, and easy to use." msgstr "" -#: ../../content/applications/websites/website/pages.rst:22 -msgid "Page creation" +#: ../../content/applications/websites/website/reporting/analytics.rst:12 +msgid "The Plausible Analytics dashboard is also integrated into Odoo and can be accessed via :menuselection:`Website --> Reporting --> Analytics`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:24 -msgid "Website pages can be created from the **frontend** and the **backend**. To create a new website page, proceed as follows:" +#: ../../content/applications/websites/website/reporting/analytics.rst:18 +msgid "Plausible.io" msgstr "" -#: ../../content/applications/websites/website/pages.rst:27 -msgid "Either open the **Website** app, click :guilabel:`+ New` in the top-right corner, then select :guilabel:`Page`;" +#: ../../content/applications/websites/website/reporting/analytics.rst:20 +msgid "Odoo hosts its own Plausible.io server and provides a free and ready-to-use Plausible.io solution for **Odoo Online** databases that use the odoo.com domain. Odoo automatically creates and sets up your account. Start using it by going to :menuselection:`Website --> Reporting --> Analytics`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:29 -msgid "Or go to :menuselection:`Website --> Site --> Pages` and click :guilabel:`New`." +#: ../../content/applications/websites/website/reporting/analytics.rst:26 +msgid "If you use a custom :doc:`domain name <../configuration/domain_names>` (e.g., `example.com`), you need to create your own Plausible.io account and subscription." msgstr "" -#: ../../content/applications/websites/website/pages.rst:30 -msgid "In the :guilabel:`New Page` selection menu, click on a template. They are sorted by type:" +#: ../../content/applications/websites/website/reporting/analytics.rst:28 +msgid "**If you already have a Plausible.io account** and you want to connect it to your Odoo Online database, you must create two `ir.config.parameters` to use Plausible.io's servers. To do so, enable the :ref:`developer mode ` and go to :menuselection:`General Settings --> Technical --> System Parameters`. Click :guilabel:`New` and fill in the following :guilabel:`Key` and :guilabel:`Value` fields:" msgstr "" -#: ../../content/applications/websites/website/pages.rst:32 -msgid ":guilabel:`Basic`: Multi-purpose page. A blank page is also available to start from scratch." +#: ../../content/applications/websites/website/reporting/analytics.rst:37 +msgid "Key" msgstr "" -#: ../../content/applications/websites/website/pages.rst:33 -msgid ":guilabel:`About`: Information about your brand." +#: ../../content/applications/websites/website/reporting/analytics.rst:38 +msgid "Value" msgstr "" -#: ../../content/applications/websites/website/pages.rst:34 -msgid ":guilabel:`Landing Pages`: Summary of company content and info." +#: ../../content/applications/websites/website/reporting/analytics.rst:39 +msgid "`website.plausible_script`" msgstr "" -#: ../../content/applications/websites/website/pages.rst:35 -msgid ":guilabel:`Gallery`: Photos and media showcase." +#: ../../content/applications/websites/website/reporting/analytics.rst:40 +msgid "`https://plausible.io/js/plausible.js`" msgstr "" -#: ../../content/applications/websites/website/pages.rst:36 -msgid ":guilabel:`Services`: Focus on what you're selling and contact." +#: ../../content/applications/websites/website/reporting/analytics.rst:41 +msgid "`website.plausible_server`" msgstr "" -#: ../../content/applications/websites/website/pages.rst:37 -msgid ":guilabel:`Pricing Plans`: Highlight on subscription and prices." +#: ../../content/applications/websites/website/reporting/analytics.rst:42 +msgid "`https://plausible.io`" msgstr "" -#: ../../content/applications/websites/website/pages.rst:38 -msgid ":guilabel:`Team`: The people behind your company." +#: ../../content/applications/websites/website/reporting/analytics.rst:44 +msgid "Then, follow the steps below to connect your existing account with Plausible.io servers." msgstr "" -#: ../../content/applications/websites/website/pages.rst:39 -msgid ":guilabel:`Custom`: To select a custom template. To add a template to this category, open the page you want to save as a template, then go to :menuselection:`Site --> Properties`, enter the :guilabel:`Page Title`, :ref:`edit the page's properties `, enable :guilabel:`Is a template`, and click :guilabel:`Save`." +#: ../../content/applications/websites/website/reporting/analytics.rst:47 +msgid "Deactivating the free Plausible.io account linked to your **Odoo Online** database will also remove the existing keys. As a result, new keys will be generated, while all historical data will remain associated with the old keys. If you plan to deactivate the account, it is recommended to save the existing keys to preserve access to that data." msgstr "" -#: ../../content/applications/websites/website/pages.rst:45 -msgid "Enter a :guilabel:`Page Title`; this title is used in the menu and the page's URL." +#: ../../content/applications/websites/website/reporting/analytics.rst:52 +msgid "If your database is hosted on **Odoo.sh** or **On-premise**, or if you wish to use your own Plausible.io account, proceed as follows:" msgstr "" -#: ../../content/applications/websites/website/pages.rst:47 -msgid "If needed, :doc:`customize the page's content and appearance ` using the website editor, then click :guilabel:`Save`." +#: ../../content/applications/websites/website/reporting/analytics.rst:55 +msgid "Create or sign in to a Plausible.io account using the following link: ``_." msgstr "" -#: ../../content/applications/websites/website/pages.rst:49 -msgid ":ref:`Publish ` the page." +#: ../../content/applications/websites/website/reporting/analytics.rst:56 +msgid "If you are creating a new account, go through the registration and activation steps. On the :guilabel:`Add website info` page, add the :guilabel:`Domain` of your website without including `www` (e.g., `example.odoo.com`) and change the :guilabel:`Reporting Timezone`, if necessary. Click :guilabel:`Install Plausible` to proceed to the next step. Ignore the :guilabel:`Manual installation` instructions and click :guilabel:`Start collecting data`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:52 -msgid "Disable :guilabel:`Add to menu` if the page should not appear in the menu." +#: ../../content/applications/websites/website/reporting/analytics.rst:61 +msgid "Once done, click the Plausible.io logo in the upper-left part of the page to access your `list of websites `_, then click the :icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) icon next to the website and select :icon:`fa-cog` :guilabel:`Settings` from the drop-down menu." msgstr "" -#: ../../content/applications/websites/website/pages.rst:57 -msgid "Page management" +#: ../../content/applications/websites/website/reporting/analytics.rst:0 +msgid "Click the gear icon in the list of websites." msgstr "" -#: ../../content/applications/websites/website/pages.rst:62 -msgid "Publishing/unpublishing pages" +#: ../../content/applications/websites/website/reporting/analytics.rst:69 +msgid "In the sidebar, select :guilabel:`Visibility`, then click :guilabel:`Add Shared link`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:64 -msgid "Pages need to be published to make them visible to website visitors. To publish or unpublish a page, access it and toggle the switch in the upper-right corner from :guilabel:`Unpublished` to :guilabel:`Published`, or vice versa." +#: ../../content/applications/websites/website/reporting/analytics.rst:70 +msgid "Enter a :guilabel:`Name`, leave the :guilabel:`Password (optional)` field empty, as the Plausible analytics dashboard integration in Odoo does not support it, then click :guilabel:`Create shared link`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:-1 -msgid "Unpublished/Published toggle" +#: ../../content/applications/websites/website/reporting/analytics.rst:74 +msgid "Copy the shared link." msgstr "" -#: ../../content/applications/websites/website/pages.rst:72 -msgid "It is also possible to:" +#: ../../content/applications/websites/website/reporting/analytics.rst:0 +msgid "Copy the shared link URL from Plausible.io" msgstr "" -#: ../../content/applications/websites/website/pages.rst:74 -msgid "Publish/unpublish a page from the :ref:`page properties `, where you can define a publishing date and/or restrict the page's visibility if needed;" +#: ../../content/applications/websites/website/reporting/analytics.rst:79 +#: ../../content/applications/websites/website/reporting/analytics.rst:124 +msgid "In Odoo, go to :menuselection:`Website --> Configuration --> Settings`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:76 -msgid "Publish/unpublish several pages at once: go to :menuselection:`Website --> Site --> Pages`, select the pages, then click :guilabel:`Action` and select :guilabel:`Publish` or :guilabel:`Unpublish`." +#: ../../content/applications/websites/website/reporting/analytics.rst:80 +msgid "In the :guilabel:`SEO` section, enable :guilabel:`Plausible Analytics`, then paste the :guilabel:`Shared Link Auth` and click :guilabel:`Save`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:81 -msgid "Alternatively, you can define any :ref:`static page ` as your homepage by going to :menuselection:`Website --> Site --> Properties`. Select the :guilabel:`Publish` tab and enable :guilabel:`Use as Homepage`." +#: ../../content/applications/websites/website/reporting/analytics.rst:84 +msgid "If you have :doc:`multiple websites <../configuration/multi_website>`, add your websites to your Plausible.io account by going to ``_ and clicking :guilabel:`+ Add Website`. In Odoo, in the **Website settings**, make sure to select the website in the :guilabel:`Settings of Website` field at the top of the page before pasting the :guilabel:`Shared link`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:88 -msgid "Page properties" +#: ../../content/applications/websites/website/reporting/analytics.rst:91 +msgid "Odoo automatically pushes two custom goals: `Lead Generation` and `Shop`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:90 -msgid "To modify a :ref:`static page's ` properties, access the page you wish to modify, then go to :menuselection:`Site --> Properties`, where you can change the following properties:" +#: ../../content/applications/websites/website/reporting/analytics.rst:94 +msgid "`Plausible Analytics documentation `_" msgstr "" -#: ../../content/applications/websites/website/pages.rst:94 -msgid ":guilabel:`Page URL` : Modify the page URL in the field. In this case, you can redirect the old URL to the new one if needed. To do so, enable :guilabel:`Redirect old URL`, then select the :guilabel:`Type` of :ref:`redirection `:" +#: ../../content/applications/websites/website/reporting/analytics.rst:99 +msgid "Google Analytics" msgstr "" -#: ../../content/applications/websites/website/pages.rst:98 -msgid ":guilabel:`301 Moved permanently`: to redirect the page permanently." +#: ../../content/applications/websites/website/reporting/analytics.rst:101 +msgid "To follow your Odoo website's traffic with Google Analytics:" msgstr "" -#: ../../content/applications/websites/website/pages.rst:99 -msgid ":guilabel:`302 Moved temporarily`: to redirect the page temporarily." +#: ../../content/applications/websites/website/reporting/analytics.rst:103 +msgid "Create or sign in to a Google account using the following link: ``_." msgstr "" -#: ../../content/applications/websites/website/pages.rst:0 -msgid "Redirect old URL" +#: ../../content/applications/websites/website/reporting/analytics.rst:104 +msgid "If you are setting up Google Analytics for the first time, click :guilabel:`Start measuring` and go through the account creation step." msgstr "" -#: ../../content/applications/websites/website/pages.rst:104 -msgid ":guilabel:`In Menu`: Disable if you don't want the page to appear in the menu." +#: ../../content/applications/websites/website/reporting/analytics.rst:106 +msgid "If you already have a Google Analytics account, sign in and click the :icon:`fa-cog` icon in the bottom-left corner of the page to access the **Admin** page. Then, click :guilabel:`+ Create` and select :guilabel:`Property` from the drop-down menu." msgstr "" -#: ../../content/applications/websites/website/pages.rst:105 -msgid ":guilabel:`Is Homepage`: Enable if you want the page to be the homepage of your website." +#: ../../content/applications/websites/website/reporting/analytics.rst:110 +msgid "Complete the next steps: `property creation `_, business details and business objectives." msgstr "" -#: ../../content/applications/websites/website/pages.rst:106 -msgid ":guilabel:`Published`: Enable to publish the page." +#: ../../content/applications/websites/website/reporting/analytics.rst:112 +msgid "When you reach the **Data collection** step, choose the :guilabel:`Web` platform." msgstr "" -#: ../../content/applications/websites/website/pages.rst:107 -msgid ":guilabel:`Publishing Date`: To publish the page at a specific date and time, click the field, set the date and time, then press **Enter** or click :guilabel:`Apply` to validate your selection." +#: ../../content/applications/websites/website/reporting/analytics.rst:0 +msgid "Choose a platform for your Google Analytics property." msgstr "" -#: ../../content/applications/websites/website/pages.rst:109 -msgid ":guilabel:`Indexed`: Disable if you don't want the page to appear in search engine results." +#: ../../content/applications/websites/website/reporting/analytics.rst:117 +msgid "Set up your data stream: Specify your :guilabel:`Website URL` and a :guilabel:`Stream name`, then click :guilabel:`Create & continue`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:110 -msgid ":guilabel:`Visibility`: Select who can access the page:" +#: ../../content/applications/websites/website/reporting/analytics.rst:119 +msgid "Copy the :guilabel:`Measurement ID`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:112 -msgid ":guilabel:`Public`: Everyone can access the page." +#: ../../content/applications/websites/website/reporting/analytics.rst:0 +msgid "Measurement ID in Google Analytics." msgstr "" -#: ../../content/applications/websites/website/pages.rst:113 -msgid ":guilabel:`Signed In`: Only signed-in users can access the page." +#: ../../content/applications/websites/website/reporting/analytics.rst:125 +msgid "In the :guilabel:`SEO` section, enable :guilabel:`Google Analytics`, then paste the :guilabel:`Measurement ID` and click :guilabel:`Save`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:114 -msgid ":guilabel:`Restricted Group`: Select the :doc:`user access group(s) ` in the :guilabel:`Authorized group` field." +#: ../../content/applications/websites/website/reporting/analytics.rst:129 +msgid "If you have :doc:`multiple websites <../configuration/multi_website>` with separate domains, it is recommended to create `one property `_ per domain. In Odoo, in the **Website settings**, make sure to select the website in the :guilabel:`Settings of Website` field at the top of the page before pasting the :guilabel:`Measurement ID`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:116 -msgid ":guilabel:`With Password`: Type the password required to access the page in the :guilabel:`Password` field." +#: ../../content/applications/websites/website/reporting/analytics.rst:136 +msgid "`Google documentation on setting up Analytics for a website `_" msgstr "" -#: ../../content/applications/websites/website/pages.rst:119 -msgid ":guilabel:`Is a template`: Toggle the switch to save the page as a template and add it to the :guilabel:`Custom` category." +#: ../../content/applications/websites/website/reporting/analytics.rst:142 +msgid "Google Tag Manager" msgstr "" -#: ../../content/applications/websites/website/pages.rst:123 -msgid "*Some* of these properties can also be modified in batch from :menuselection:`Website --> Site --> Pages`." +#: ../../content/applications/websites/website/reporting/analytics.rst:144 +msgid "Google Tag Manager is a tag management system that allows you to easily update measurement codes and related code fragments, collectively known as tags on your website or mobile app, directly through the code injector." msgstr "" -#: ../../content/applications/websites/website/pages.rst:129 -msgid "Duplicating pages" +#: ../../content/applications/websites/website/reporting/analytics.rst:149 +msgid ":abbr:`GTM (Google Tag Manager)` is not an analytics tool and does not offer reporting features; it is used to collect data and works alongside Google Analytics to provide more detailed insights. In order to use GTM properly, it is recommended to configure Google Analytics as well." msgstr "" -#: ../../content/applications/websites/website/pages.rst:131 -msgid "To duplicate a page, access the page, then go to :menuselection:`Site --> Properties`, and click :guilabel:`Duplicate Page`. Enter a :guilabel:`Page Name`, then click :guilabel:`OK`. By default, the new page is added after the duplicated page in the menu, but you can remove it from the menu or change its position using the :doc:`menu editor `." +#: ../../content/applications/websites/website/reporting/analytics.rst:153 +msgid "For more information refer to the `documentation on linking Google Analytics and Google Tag Manager `_." msgstr "" -#: ../../content/applications/websites/website/pages.rst:139 -msgid "Deleting pages" +#: ../../content/applications/websites/website/reporting/analytics.rst:157 +msgid "Some GTM tags use data layers (e.g., advanced eCommerce tracking data layers) to retrieve variables and send them to Google Analytics. Data layers are currently not managed in Odoo." msgstr "" -#: ../../content/applications/websites/website/pages.rst:141 -msgid "To delete a page, proceed as follows:" +#: ../../content/applications/websites/website/reporting/analytics.rst:159 +msgid "Google Tag Manager may not be compliant with local data protection regulations." msgstr "" -#: ../../content/applications/websites/website/pages.rst:143 -msgid "Access the page, then go to :menuselection:`Site --> Properties` and click :guilabel:`Delete Page`." +#: ../../content/applications/websites/website/reporting/analytics.rst:161 +msgid "To configure GTM, proceed as follows:" msgstr "" -#: ../../content/applications/websites/website/pages.rst:144 -msgid "A pop-up window shows all links referring to the page you want to delete, organized by category. To ensure website visitors don't land on an error page, you must update all the links on your website referring to the page. To do so, expand a category, then click on a link to open it in a new window. Alternatively, you can set up a :ref:`redirection ` for the deleted page." +#: ../../content/applications/websites/website/reporting/analytics.rst:163 +msgid "Create or sign in to a Google account by going to https://tagmanager.google.com/." msgstr "" -#: ../../content/applications/websites/website/pages.rst:149 -msgid "Once you have updated the links (or set up a :ref:`redirection `), tick the :guilabel:`I am sure about this` check box, then click :guilabel:`OK`." +#: ../../content/applications/websites/website/reporting/analytics.rst:165 +msgid "In the :guilabel:`Accounts` tab, click :guilabel:`Create Account`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:155 -msgid "URL redirect mapping" +#: ../../content/applications/websites/website/reporting/analytics.rst:167 +msgid "Enter an :guilabel:`Account Name` and select the account's :guilabel:`Country`." +msgstr "" + +#: ../../content/applications/websites/website/reporting/analytics.rst:169 +msgid "Enter your website's URL in the :guilabel:`Container name` field and select the :guilabel:`Target platform`." msgstr "" -#: ../../content/applications/websites/website/pages.rst:157 -msgid "URL redirect mapping consists in sending visitors and search engines to a URL different from the one they initially requested. This technique is used, for example, to prevent broken links when you :ref:`delete a page `, :ref:`modify its URL `, or migrate your site from another platform to an Odoo :doc:`domain `. It can also be used to improve :doc:`pages/seo`." +#: ../../content/applications/websites/website/reporting/analytics.rst:172 +msgid "Click :guilabel:`Create` and agree to the Terms of Service." msgstr "" -#: ../../content/applications/websites/website/pages.rst:163 -msgid "To access existing URL redirections and create new ones, :doc:`activate the developer mode ` and go to :menuselection:`Website --> Configuration --> Redirects`." +#: ../../content/applications/websites/website/reporting/analytics.rst:174 +msgid "Copy the `` and `` codes from the popup window. Then, go to your website, click :guilabel:`Edit`, go to the :guilabel:`Theme` tab, scroll down to the :guilabel:`Advanced` section, then click :guilabel:`` and :guilabel:`` next to :guilabel:`Code Injection` to paste the codes." msgstr "" -#: ../../content/applications/websites/website/pages.rst:168 -msgid "A redirect record is added automatically every time you :ref:`modify a page's URL ` and enable :guilabel:`Redirect Old URL`." +#: ../../content/applications/websites/website/reporting/analytics.rst:0 +msgid "Install Google Tag Manager" msgstr "" -#: ../../content/applications/websites/website/pages.rst:170 -msgid "You can set up redirections for :ref:`static and dynamic pages `." +#: ../../content/applications/websites/website/reporting/analytics.rst:183 +msgid "The data is collected in the marketing tools used to monitor the website (e.g., Google Analytics, Plausible, Facebook Pixel), not in Odoo." msgstr "" -#: ../../content/applications/websites/website/pages.rst:172 -msgid "To create a new redirection, click the :guilabel:`New` button, then fill in the fields:" +#: ../../content/applications/websites/website/reporting/analytics.rst:187 +msgid "`Setting up click triggers on Google `_" msgstr "" -#: ../../content/applications/websites/website/pages.rst:174 -msgid ":guilabel:`Name`: Enter a name to identify the redirect." +#: ../../content/applications/websites/website/reporting/link_tracker.rst:3 +msgid "Link tracker" msgstr "" -#: ../../content/applications/websites/website/pages.rst:175 -msgid ":guilabel:`Action`: Select the type of redirection:" +#: ../../content/applications/websites/website/reporting/link_tracker.rst:5 +msgid "The link tracker allow you to create tracked links to measure your marketing campaigns' effectiveness. They let you determine which channels bring you the most visitors and make informed decisions." msgstr "" -#: ../../content/applications/websites/website/pages.rst:177 -msgid ":guilabel:`404 Not found`: visitors are redirected to a 404 error page when they try to access an unpublished or deleted page." +#: ../../content/applications/websites/website/reporting/link_tracker.rst:12 +msgid "The :guilabel:`Link Tracker` module is not installed by default. You need to enable the :guilabel:`Email Marketing` option by going to :menuselection:`Website --> Configuration --> Settings.` Alternatively, you can :doc:`install <../../../general/apps_modules>` the :guilabel:`Link Tracker` module itself or one of the marketing apps." msgstr "" -#: ../../content/applications/websites/website/pages.rst:179 -msgid ":guilabel:`301 Moved Permanently`: for permanent redirections of unpublished or deleted :ref:`static pages `. The new URL is shown in search engine results, and the redirect is cached by browsers." +#: ../../content/applications/websites/website/reporting/link_tracker.rst:18 +msgid "Create a traceable URL" msgstr "" -#: ../../content/applications/websites/website/pages.rst:182 -msgid ":guilabel:`302 Moved Temporarily`: for short-term redirections, for example, if you are redesigning or updating a page. The new URL is neither cached by browsers nor shown in search engine results." +#: ../../content/applications/websites/website/reporting/link_tracker.rst:20 +msgid "To create and manage tracked links, navigate to :menuselection:`Website --> Site --> Link Tracker`. Fill in the following information and click :guilabel:`Get tracked link` to generate a tracking URL." msgstr "" -#: ../../content/applications/websites/website/pages.rst:185 -msgid ":guilabel:`308 Redirect/Rewrite`: for permanent redirections of existing :ref:`dynamic pages `. The URL is renamed; the new name is shown in search engine results and is cached by browsers. Use this redirect type to rename a dynamic page, for example, if you wish to rename `/shop` into `/market`." +#: ../../content/applications/websites/website/reporting/link_tracker.rst:23 +msgid ":guilabel:`URL`: The URL which is the target of the campaign. It is automatically populated with the URL from where you access the menu." msgstr "" -#: ../../content/applications/websites/website/pages.rst:190 -msgid ":guilabel:`URL from`: Enter the URL to be redirected (e.g., `/about-the-company`) or search for the desired :ref:`dynamic page ` and select it from the list." +#: ../../content/applications/websites/website/reporting/link_tracker.rst:26 +msgid ":guilabel:`Campaign`: The specific campaign the link should be associated with. This parameter is used to distinguish the different campaigns." msgstr "" -#: ../../content/applications/websites/website/pages.rst:192 -msgid ":guilabel:`URL to`: For 301, 302, and 308 redirects, enter the URL to be redirected to. If you want to redirect to an external URL, include the protocol (e.g., `https://`)." +#: ../../content/applications/websites/website/reporting/link_tracker.rst:29 +msgid ":guilabel:`Medium`: The medium describes the category or method through which the visitor arrives at your site, such as organic search, paid search, social media ad, email, etc." msgstr "" -#: ../../content/applications/websites/website/pages.rst:194 -msgid ":guilabel:`Website`: Select a specific website." +#: ../../content/applications/websites/website/reporting/link_tracker.rst:32 +msgid ":guilabel:`Source`: The source identifies the precise platform or website that referred the visitor, such as a search engine, a newsletter, or a website." msgstr "" -#: ../../content/applications/websites/website/pages.rst:195 -msgid ":guilabel:`Sequence`: To define the order in which redirections are performed, e.g., in the case of redirect chains (i.e., a series of redirects where one URL is redirected to another one, which is itself further redirected to another URL)." +#: ../../content/applications/websites/website/reporting/link_tracker.rst:-1 +msgid "Create a link tracker URL" msgstr "" -#: ../../content/applications/websites/website/pages.rst:199 -msgid "Toggle the :guilabel:`Activate` switch to deactivate the redirection." +#: ../../content/applications/websites/website/reporting/link_tracker.rst:38 +msgid "The :guilabel:`Campaign`, :guilabel:`Medium`, and :guilabel:`Source` are called :abbr:`UTM (Urchin Tracking Module)` parameters. They are incorporated in the tracked URL." msgstr "" -#: ../../content/applications/websites/website/pages.rst:202 -msgid "404, 301, and 302 redirections are meant to migrate traffic from :ref:`unpublished ` or :ref:`deleted ` pages to *new* pages, while the 308 redirect is used for *permanent* redirections of *existing* pages." +#: ../../content/applications/websites/website/reporting/link_tracker.rst:42 +msgid "You can customize the :ref:`visibility ` of building blocks using the :abbr:`UTM (Urchin Tracking Module)` parameters, amongst other conditions." msgstr "" -#: ../../content/applications/websites/website/pages.rst:207 -msgid "`Google documentation on redirects and search `_" +#: ../../content/applications/websites/website/reporting/link_tracker.rst:46 +msgid "Tracked links overview" +msgstr "" + +#: ../../content/applications/websites/website/reporting/link_tracker.rst:48 +msgid "To get an overview of your tracked links, go to :menuselection:`Website --> Site --> Link Tracker` and scroll down to :guilabel:`Your tracked links` section." +msgstr "" + +#: ../../content/applications/websites/website/reporting/link_tracker.rst:-1 +msgid "Get an overview of all the links you track." msgstr "" -#: ../../content/applications/websites/website/pages.rst:208 -msgid ":doc:`pages/seo`" +#: ../../content/applications/websites/website/reporting/link_tracker.rst:55 +msgid "Statistics" +msgstr "" + +#: ../../content/applications/websites/website/reporting/link_tracker.rst:57 +msgid "To measure the performance of tracked links, click the :guilabel:`Stats` button." +msgstr "" + +#: ../../content/applications/websites/website/reporting/link_tracker.rst:-1 +msgid "View the statistics related to a specific tracked link." +msgstr "" + +#: ../../content/applications/websites/website/reporting/link_tracker.rst:62 +msgid "Scroll down to the :guilabel:`Statistics` section to get an overview of the number of clicks of your tracked links. You can display information for a specific period by clicking the :guilabel:`All Time`, :guilabel:`Last Month`, or :guilabel:`Last Week` options." +msgstr "" + +#: ../../content/applications/websites/website/structure.rst:7 +msgid "Structure" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:3 +#: ../../content/applications/websites/website/structure.rst:9 +msgid "Structure your website using :doc:`pages <../website/structure/pages>`, provide consistent visual and navigational framework with :doc:`headers and footers <../website/structure/header_footer>` and optimize your online presence with :doc:`Search Engine Optimization (SEO) <../website/structure/seo>`." +msgstr "" + +#: ../../content/applications/websites/website/structure/header_footer.rst:3 msgid "Headers and footers" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:5 +#: ../../content/applications/websites/website/structure/header_footer.rst:5 msgid "The website header is the top section of a web page and usually contains elements such as the logo, the :ref:`menu `, the search bar, the sign-in/customer account button, etc. The footer is displayed at the bottom of a web page and usually contains information such as contact details, links, legal notices, and other options." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:11 +#: ../../content/applications/websites/website/structure/header_footer.rst:11 msgid "Header design" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:13 +#: ../../content/applications/websites/website/structure/header_footer.rst:13 msgid "To modify the header's design, click on :guilabel:`Edit`, then click on the header. The following options are available in the :guilabel:`Header` section of the :guilabel:`Customize` tab in the website editor:" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:17 +#: ../../content/applications/websites/website/structure/header_footer.rst:17 msgid "Choose a :guilabel:`Template` from the drop-down menu." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:18 +#: ../../content/applications/websites/website/structure/header_footer.rst:18 msgid "Select :guilabel:`Background` settings to change the color palette through different :ref:`Theme styles `, :guilabel:`Custom` color options, and :guilabel:`Gradient` ones." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:21 +#: ../../content/applications/websites/website/structure/header_footer.rst:21 msgid "When adding a :guilabel:`Border` to the header, its size, style, and color can be defined." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:22 +#: ../../content/applications/websites/website/structure/header_footer.rst:22 msgid "Adapt :guilabel:`Round corners` to fit the design." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:23 +#: ../../content/applications/websites/website/structure/header_footer.rst:23 msgid "Add a :guilabel:`Shadow` and define its :guilabel:`Color`, :guilabel:`Offset`, :guilabel:`Blur`, and :guilabel:`Spread`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:25 +#: ../../content/applications/websites/website/structure/header_footer.rst:25 msgid "Add a :guilabel:`Scroll Effect`. Hover on an effect to preview it." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:26 +#: ../../content/applications/websites/website/structure/header_footer.rst:26 msgid "Choose the :guilabel:`Header Position` between :guilabel:`Regular`, :guilabel:`Hidden`, and :guilabel:`Over The Content`. When :guilabel:`Over The Content` is selected, you can customize the :guilabel:`Background` and :guilabel:`Text Color`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:29 +#: ../../content/applications/websites/website/structure/header_footer.rst:29 msgid "Show or hide :guilabel:`Elements` such as text, the search bar, :guilabel:`Sign in` button, social media links, :guilabel:`Contact us` button, and logo." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:32 -#: ../../content/applications/websites/website/pages/header_footer.rst:109 -#: ../../content/applications/websites/website/pages/header_footer.rst:151 -#: ../../content/applications/websites/website/pages/header_footer.rst:169 +#: ../../content/applications/websites/website/structure/header_footer.rst:32 +#: ../../content/applications/websites/website/structure/header_footer.rst:109 +#: ../../content/applications/websites/website/structure/header_footer.rst:151 +#: ../../content/applications/websites/website/structure/header_footer.rst:169 msgid "To finalize changes, click on :guilabel:`Save`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:35 +#: ../../content/applications/websites/website/structure/header_footer.rst:35 msgid "To hide the header, click on :guilabel:`Edit`, click on the header, and go to the :guilabel:`Theme` tab of the website editor. Scroll down to the :guilabel:`Advanced` section and toggle the :guilabel:`Show Header` switch to hide/show the header." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:42 +#: ../../content/applications/websites/website/structure/header_footer.rst:42 msgid "Header content" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:44 +#: ../../content/applications/websites/website/structure/header_footer.rst:44 msgid "Menus organize the header’s content and help users navigate through web pages effectively. User-friendly and well-structured menus also play a crucial role in improving :doc:`search engine rankings `." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:51 +#: ../../content/applications/websites/website/structure/header_footer.rst:51 msgid "Menu editor" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:53 +#: ../../content/applications/websites/website/structure/header_footer.rst:53 msgid "The menu editor allows to edit the website's header and add :ref:`menu items ` and :ref:`mega menus `." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:57 +#: ../../content/applications/websites/website/structure/header_footer.rst:57 msgid "To edit the header's content, go to :menuselection:`Website --> Site --> Menu Editor`. From there, you can:" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:60 +#: ../../content/applications/websites/website/structure/header_footer.rst:60 msgid "**rename** a menu item or change its URL using the :guilabel:`Edit Menu Item` icon;" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:61 +#: ../../content/applications/websites/website/structure/header_footer.rst:61 msgid "**delete** a menu item using the :guilabel:`Delete Menu Item` icon;" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:62 +#: ../../content/applications/websites/website/structure/header_footer.rst:62 msgid "**move** a menu item by dragging and dropping it to the desired place in the menu;" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:63 +#: ../../content/applications/websites/website/structure/header_footer.rst:63 msgid "**create a regular drop-down menu** by dragging and dropping the sub-menu items to the right, underneath their parent menu." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:-1 +#: ../../content/applications/websites/website/structure/header_footer.rst:-1 msgid "Menu editor with sub-menus" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:70 +#: ../../content/applications/websites/website/structure/header_footer.rst:70 msgid "You can also access the menu editor by clicking :guilabel:`Edit`, selecting any menu item, and clicking the :guilabel:`Edit Menu` icon." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:0 +#: ../../content/applications/websites/website/structure/header_footer.rst:0 msgid "Access the Menu editor while in Edit mode." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:79 +#: ../../content/applications/websites/website/structure/header_footer.rst:79 msgid "Adding menu items" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:81 -msgid "By default, pages are added to the menu as drop-down menu items when :doc:`they are created <../pages>`. To add a new menu item, follow these steps:" +#: ../../content/applications/websites/website/structure/header_footer.rst:81 +msgid "By default, pages are added to the menu as drop-down menu items when :doc:`they are created <../structure/pages>`. To add a new menu item, follow these steps:" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:84 +#: ../../content/applications/websites/website/structure/header_footer.rst:84 msgid "Go to :menuselection:`Website --> Site --> Menu Editor`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:85 +#: ../../content/applications/websites/website/structure/header_footer.rst:85 msgid "In the menu editor, click :guilabel:`Add Menu Item`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:86 +#: ../../content/applications/websites/website/structure/header_footer.rst:86 msgid "In the pop-up window, enter the :guilabel:`Name` to be displayed in the menu." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:87 +#: ../../content/applications/websites/website/structure/header_footer.rst:87 msgid "Type `/` in the :guilabel:`URL or Email` field to search for a page on your website or `#` to search for an existing custom anchor." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:89 +#: ../../content/applications/websites/website/structure/header_footer.rst:89 msgid "Click :guilabel:`OK`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:90 +#: ../../content/applications/websites/website/structure/header_footer.rst:90 msgid "Edit the :ref:`menu structure ` if needed, then :guilabel:`Save`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:94 +#: ../../content/applications/websites/website/structure/header_footer.rst:94 msgid "Menu item design" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:96 +#: ../../content/applications/websites/website/structure/header_footer.rst:96 msgid "To modify the menu items, click on :guilabel:`Edit`, click on a menu item, then go to the :guilabel:`Navbar` section of the website editor. The following options are available:" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:99 +#: ../../content/applications/websites/website/structure/header_footer.rst:99 msgid "Adapt the :guilabel:`Mobile Alignment`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:100 +#: ../../content/applications/websites/website/structure/header_footer.rst:100 msgid "Choose the :guilabel:`Font` for the menu items." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:101 +#: ../../content/applications/websites/website/structure/header_footer.rst:101 msgid "Change the font size, color, and alignment in the :guilabel:`Format` field." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:102 +#: ../../content/applications/websites/website/structure/header_footer.rst:102 msgid "Select a :guilabel:`Links Style` to highlight the current page in the menu." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:103 +#: ../../content/applications/websites/website/structure/header_footer.rst:103 msgid "Change the :ref:`style of the header buttons `." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:104 +#: ../../content/applications/websites/website/structure/header_footer.rst:104 msgid "Choose to display the :guilabel:`Sub Menus` :guilabel:`On Hover` or :guilabel:`On Click`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:107 +#: ../../content/applications/websites/website/structure/header_footer.rst:107 msgid "The fields available in the :guilabel:`Navbar` section can vary depending on the chosen template." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:114 +#: ../../content/applications/websites/website/structure/header_footer.rst:114 msgid "Mega menus" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:116 +#: ../../content/applications/websites/website/structure/header_footer.rst:116 msgid "Mega menus are similar to drop-down menus, but instead of a simple list of sub-menus, they display a panel divided into groups of navigation options. This makes them suitable for websites with large amounts of content or :doc:`e-commerce websites <../../ecommerce>`, as they can help include all of your web pages or :doc:`e-commerce categories <../../ecommerce/products/catalog>` in the menu while still making all menu items visible at once." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:-1 +#: ../../content/applications/websites/website/structure/header_footer.rst:-1 msgid "Mega menu in the navigation bar." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:125 +#: ../../content/applications/websites/website/structure/header_footer.rst:125 msgid "To create a mega menu, go to :menuselection:`Website --> Site --> Menu Editor` and click :guilabel:`Add Mega Menu Item`. Enter the :guilabel:`Name` of the mega menu in the pop-up, click :guilabel:`OK`, then :guilabel:`Save`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:129 +#: ../../content/applications/websites/website/structure/header_footer.rst:129 msgid "To adapt the options and content of the mega menu, click on a mega menu item in the header, then click :guilabel:`Edit`. Mega menus are composed of building blocks, which means you can customize each component individually. For example:" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:133 +#: ../../content/applications/websites/website/structure/header_footer.rst:133 msgid "Edit the text directly in the building block." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:134 +#: ../../content/applications/websites/website/structure/header_footer.rst:134 msgid "Edit a menu item's URL by selecting the menu item and clicking the :guilabel:`Edit link` button in the small preview pop-up. Type `/` to search for a page on your website, or `#` to search for an existing custom anchor." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:0 +#: ../../content/applications/websites/website/structure/header_footer.rst:0 msgid "Edit a mega menu option." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:141 +#: ../../content/applications/websites/website/structure/header_footer.rst:141 msgid "Move a menu item by dragging and dropping the related block to the desired position in the mega menu." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:143 +#: ../../content/applications/websites/website/structure/header_footer.rst:143 msgid "Delete a menu item by deleting the related block." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:145 +#: ../../content/applications/websites/website/structure/header_footer.rst:145 msgid "To adapt the general layout of the mega menu, go to the :guilabel:`Customize` tab of the website editor, then, in the :guilabel:`Mega Menu` section:" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:148 +#: ../../content/applications/websites/website/structure/header_footer.rst:148 msgid "Choose a :guilabel:`Template`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:149 +#: ../../content/applications/websites/website/structure/header_footer.rst:149 msgid "Pick the :guilabel:`Size`: either :guilabel:`Full-Width` or :guilabel:`Narrow`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:154 +#: ../../content/applications/websites/website/structure/header_footer.rst:154 msgid "Footer design" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:156 +#: ../../content/applications/websites/website/structure/header_footer.rst:156 msgid "To modify the footer, click on :guilabel:`Edit`, click on the footer, and in the :guilabel:`Footer` section of the :guilabel:`Customize` tab in the website editor:" msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:159 +#: ../../content/applications/websites/website/structure/header_footer.rst:159 msgid "Select a :guilabel:`Template`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:160 +#: ../../content/applications/websites/website/structure/header_footer.rst:160 msgid "Choose its :guilabel:`Colors`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:161 +#: ../../content/applications/websites/website/structure/header_footer.rst:161 msgid "Choose a :guilabel:`Slideout Effect`: :guilabel:`Regular` (i.e., no effect), :guilabel:`Slide Hover`, or :guilabel:`Shadow`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:163 +#: ../../content/applications/websites/website/structure/header_footer.rst:163 msgid "Toggle the :guilabel:`Copyright` switch to hide or show the copyright." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:164 +#: ../../content/applications/websites/website/structure/header_footer.rst:164 msgid "Choose the :guilabel:`Border` size." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:165 +#: ../../content/applications/websites/website/structure/header_footer.rst:165 msgid "Add a :guilabel:`Shadow`." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:166 +#: ../../content/applications/websites/website/structure/header_footer.rst:166 msgid "Add a :guilabel:`Scroll Top Button` and choose its position." msgstr "" -#: ../../content/applications/websites/website/pages/header_footer.rst:167 +#: ../../content/applications/websites/website/structure/header_footer.rst:167 msgid "Hide or show the footer by toggling the :guilabel:`Page visibility` switch." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:3 -msgid "Search Engine Optimization (SEO)" +#: ../../content/applications/websites/website/structure/pages.rst:5 +msgid "Pages" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:5 -msgid "Search Engine Optimization, often abbreviated as SEO, is a digital marketing strategy to improve a website's visibility and ranking in search engine results (e.g., in Google). It involves optimizing various elements on your website, including its content, social sharing, URLs, images, and page speed." +#: ../../content/applications/websites/website/structure/pages.rst:7 +msgid "Odoo allows you to create pages for your website and customize their content and appearance to your needs." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:11 -msgid "Odoo provides several modules to help you build your website content, such as :doc:`eCommerce <../../ecommerce>`, :doc:`Blog <../../blog>`, :doc:`eLearning <../../elearning>`, and :doc:`Forum <../../forum>`." +#: ../../content/applications/websites/website/structure/pages.rst:12 +msgid "**Static** pages, such as the homepage or any :ref:`custom-created `, contain fixed content that does not change dynamically. You can manually create these pages, define their URLs, and adapt their :ref:`properties ` as needed. **Dynamic** pages, on the other hand, are generated dynamically. All pages generated automatically by Odoo, for example, when you install an app or module (e.g., `/shop` or `/blog`) or publish a new product or :doc:`blog post <../../blog>`, are dynamic pages and are therefore managed differently." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:14 -msgid "All Odoo :doc:`themes <../web_design/themes>` rely on the CSS Framework `Bootstrap `_ to render efficiently according to the device: desktop, tablet, or mobile, which positively impacts ranking in search engines." +#: ../../content/applications/websites/website/structure/pages.rst:22 +msgid "Page creation" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:19 -msgid "`Magic Sheet - Optimize your website [PDF] `_" +#: ../../content/applications/websites/website/structure/pages.rst:24 +msgid "Website pages can be created from the **frontend** and the **backend**. To create a new website page, proceed as follows:" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:23 -msgid "Content optimization" +#: ../../content/applications/websites/website/structure/pages.rst:27 +msgid "Either open the **Website** app, click :guilabel:`+ New` in the top-right corner, then select :guilabel:`Page`;" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:25 -msgid "To optimize a webpage's SEO, access the page, then go to :menuselection:`Website --> Site --> Optimize SEO`." +#: ../../content/applications/websites/website/structure/pages.rst:29 +msgid "Or go to :menuselection:`Website --> Site --> Pages` and click :guilabel:`New`." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:-1 -msgid "Optimize SEO" +#: ../../content/applications/websites/website/structure/pages.rst:30 +msgid "In the :guilabel:`New Page` selection menu, click on a template. They are sorted by type:" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:32 -msgid "Meta tags" +#: ../../content/applications/websites/website/structure/pages.rst:32 +msgid ":guilabel:`Basic`: Multi-purpose page. A blank page is also available to start from scratch." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:34 -msgid "Meta tags are HTML elements that provide information about a webpage to search engines and website visitors. They play a crucial role in SEO by helping search engines understand the content and context of a webpage and attract visitors with appealing content. There are two types of meta tags in Odoo:" +#: ../../content/applications/websites/website/structure/pages.rst:33 +msgid ":guilabel:`About`: Information about your brand." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:39 -msgid ":guilabel:`Title` tags specify a webpage's title and are displayed as a clickable link in search engine results. They should be concise, descriptive, and relevant to the page's content. You can update the title tag of your webpage or keep it empty to use the default value based on the page’s content." +#: ../../content/applications/websites/website/structure/pages.rst:34 +msgid ":guilabel:`Landing Pages`: Summary of company content and info." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:44 -msgid ":guilabel:`Description` tags summarize the webpage's content, often displayed in search engine results below the title. They are used to encourage the user to visit the page. You can update the description tag of your webpage or keep it empty to use the default value based on the page’s content." +#: ../../content/applications/websites/website/structure/pages.rst:35 +msgid ":guilabel:`Gallery`: Photos and media showcase." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:50 -msgid "The :guilabel:`Preview` card displays how the title and description tags should appear in search results. It also includes the URL of your page." +#: ../../content/applications/websites/website/structure/pages.rst:36 +msgid ":guilabel:`Services`: Focus on what you're selling and contact." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:54 -msgid "Keywords" +#: ../../content/applications/websites/website/structure/pages.rst:37 +msgid ":guilabel:`Pricing Plans`: Highlight on subscription and prices." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:56 -msgid "Keywords are one of the main elements of SEO. A website that is well optimized for search engines speaks the same language as potential visitors, with keywords for SEO helping them to connect to your site." +#: ../../content/applications/websites/website/structure/pages.rst:38 +msgid ":guilabel:`Team`: The people behind your company." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:60 -msgid "You can enter the keywords you consider essential in the :guilabel:`Keyword` field and click :guilabel:`ADD` to see how they are used at different levels in your content (H1, H2, page title, page description, page content) and the related searches in Google. The tool also suggests relevant keywords to drive your web traffic. The more keywords are present on your webpage, the better." +#: ../../content/applications/websites/website/structure/pages.rst:39 +msgid ":guilabel:`Custom`: To select a custom template. To add a template to this category, open the page you want to save as a template, then go to :menuselection:`Site --> Properties`, enter the :guilabel:`Page Title`, :ref:`edit the page's properties `, enable :guilabel:`Is a template`, and click :guilabel:`Save`." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:66 -msgid "It is strongly recommended to only use one H1 title per page for SEO." +#: ../../content/applications/websites/website/structure/pages.rst:45 +msgid "Enter a :guilabel:`Page Title`; this title is used in the menu and the page's URL." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:69 -msgid "Image for social share" +#: ../../content/applications/websites/website/structure/pages.rst:47 +msgid "If needed, :doc:`customize the page's content and appearance <../web_design>` using the website editor, then click :guilabel:`Save`." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:71 -msgid "When you share your page on social media, your logo image is selected, but you can upload any other image by clicking the upward arrow." +#: ../../content/applications/websites/website/structure/pages.rst:49 +msgid ":ref:`Publish ` the page." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:75 -msgid "The :guilabel:`Social Preview` card displays how the page's information would appear when shared." +#: ../../content/applications/websites/website/structure/pages.rst:52 +msgid "Disable :guilabel:`Add to menu` if the page should not appear in the menu." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:77 -msgid "If you change the title of a blog post or the name of a product, the changes apply automatically everywhere on your website. The old link still functions when external websites use a :ref:`301 redirect `, maintaining the SEO link juice." +#: ../../content/applications/websites/website/structure/pages.rst:57 +msgid "Page management" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:82 -#: ../../content/applications/websites/website/web_design/elements.rst:64 -msgid "Images" +#: ../../content/applications/websites/website/structure/pages.rst:62 +msgid "Publishing/unpublishing pages" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:84 -msgid "The size of images has a significant impact on page speed, which is an essential criterion for search engines to optimize SEO ranking." +#: ../../content/applications/websites/website/structure/pages.rst:64 +msgid "Pages need to be published to make them visible to website visitors. To publish or unpublish a page, access it and toggle the switch in the upper-right corner from :guilabel:`Unpublished` to :guilabel:`Published`, or vice versa." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:88 -msgid "Compare how your website ranks using `Google Page Speed `_ or `Pingdom Website Speed Test `_." -msgstr "" - -#: ../../content/applications/websites/website/pages/seo.rst:91 -msgid "Odoo automatically compresses uploaded images and converts them to `Webp`. With this file format, photos are smaller, which increases the page loading speed and, therefore, gives a better ranking in SEO. All images used in Odoo official :doc:`themes <../web_design/themes>` are also compressed by default. If you are using a third-party theme, it may provide images that are not compressed efficiently." -msgstr "" - -#: ../../content/applications/websites/website/pages/seo.rst:97 -msgid "**To modify an image** from your website, select the image, click :guilabel:`Edit`, then go to the :guilabel:`Customize` tab, and adapt the :guilabel:`Format` in the :guilabel:`Image` section." -msgstr "" - -#: ../../content/applications/websites/website/pages/seo.rst:-1 -msgid "automated image compression" -msgstr "" - -#: ../../content/applications/websites/website/pages/seo.rst:104 -msgid "Alt tags are used to provide context to what an image is displaying, informing search engine crawlers and allowing them to index an image correctly. Adding alt tags keywords in the :guilabel:`Description` field is essential from an SEO perspective. This description is added to the HTML code of your image, and it is shown when the image cannot be displayed." -msgstr "" - -#: ../../content/applications/websites/website/pages/seo.rst:110 -msgid "Advanced features" +#: ../../content/applications/websites/website/structure/pages.rst:-1 +msgid "Unpublished/Published toggle" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:113 -msgid "Structured data markup" +#: ../../content/applications/websites/website/structure/pages.rst:72 +msgid "It is also possible to:" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:115 -msgid "Structured data markup is used to generate rich snippets in search engine results. It is a way for websites to send structured data to search engine robots, helping them understand your content and create well-presented search results." +#: ../../content/applications/websites/website/structure/pages.rst:74 +msgid "Publish/unpublish a page from the :ref:`page properties `, where you can define a publishing date and/or restrict the page's visibility if needed;" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:119 -msgid "By default, Google supports many `rich snippets `_ for content types, including Reviews, People, Products, Businesses, Events, and Organizations." +#: ../../content/applications/websites/website/structure/pages.rst:76 +msgid "Publish/unpublish several pages at once: go to :menuselection:`Website --> Site --> Pages`, select the pages, then click :guilabel:`Action` and select :guilabel:`Publish` or :guilabel:`Unpublish`." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:122 -msgid "Microdata is a set of tags, introduced with HTML5, that help search engines better understand your content and display it in a relevant way. Odoo implements microdata as defined in the schema.org `specification `_ for events, eCommerce products, forum posts, and contact addresses. This allows your product pages to be displayed in Google using extra information like the price and rating of a product:" +#: ../../content/applications/websites/website/structure/pages.rst:81 +msgid "Alternatively, you can define any :ref:`static page ` as your homepage by going to :menuselection:`Website --> Site --> Properties`. Select the :guilabel:`Publish` tab and enable :guilabel:`Use as Homepage`." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:-1 -msgid "snippets in search engine results" +#: ../../content/applications/websites/website/structure/pages.rst:88 +msgid "Page properties" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:132 -msgid "robots.txt" +#: ../../content/applications/websites/website/structure/pages.rst:90 +msgid "To modify a :ref:`static page's ` properties, access the page you wish to modify, then go to :menuselection:`Site --> Properties`, where you can change the following properties:" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:134 -msgid "A `robots.txt` file instructs search engine crawlers which parts of a website they are permitted to access. Its primary purpose is to:" +#: ../../content/applications/websites/website/structure/pages.rst:94 +msgid ":guilabel:`Page URL` : Modify the page URL in the field. In this case, you can redirect the old URL to the new one if needed. To do so, enable :guilabel:`Redirect old URL`, then select the :guilabel:`Type` of :ref:`redirection `:" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:137 -msgid "**Prevent overloading the website:** By guiding crawlers away from certain sections, robots.txt helps manage server load." +#: ../../content/applications/websites/website/structure/pages.rst:98 +msgid ":guilabel:`301 Moved permanently`: to redirect the page permanently." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:139 -msgid "**Control access to resources and detailed descriptions:** It can prevent crawlers from accessing media files (images, videos), CSS stylesheets, and JavaScript files, and from reading the content (text) of specific pages." +#: ../../content/applications/websites/website/structure/pages.rst:99 +msgid ":guilabel:`302 Moved temporarily`: to redirect the page temporarily." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:143 -msgid "When indexing your website, search engines first look at the robots.txt file. Odoo automatically creates one robot.txt file available on `mydatabase.odoo.com/robots.txt`." +#: ../../content/applications/websites/website/structure/pages.rst:0 +msgid "Redirect old URL" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:147 -msgid "Reputable bots adhere to robots.txt; others may require blocking via :ref:`Cloudflare ` on your custom domain." +#: ../../content/applications/websites/website/structure/pages.rst:104 +msgid ":guilabel:`In Menu`: Disable if you don't want the page to appear in the menu." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:151 -msgid "Edit robots.txt" +#: ../../content/applications/websites/website/structure/pages.rst:105 +msgid ":guilabel:`Is Homepage`: Enable if you want the page to be the homepage of your website." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:153 -msgid "By editing a robots.txt file, you can control which site pages are accessible to search engine crawlers. To add custom instructions to the file, go to :menuselection:`Website --> Configuration --> Settings`, scroll down to the :guilabel:`SEO` section, and click :guilabel:`Edit robots.txt`." +#: ../../content/applications/websites/website/structure/pages.rst:106 +msgid ":guilabel:`Published`: Enable to publish the page." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:158 -msgid "If you do not want robots to crawl the `/about-us` page of your site, you can edit the robots.txt file to add `Disallow: /about-us`." +#: ../../content/applications/websites/website/structure/pages.rst:107 +msgid ":guilabel:`Publishing Date`: To publish the page at a specific date and time, click the field, set the date and time, then press **Enter** or click :guilabel:`Apply` to validate your selection." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:162 -msgid "While `robots.txt` prevents content from being crawled, **it does not guarantee that a page will not be indexed**. A page can still appear in search results if it is linked to from other crawled pages (indexed by \"reference\"). Google generally does not recommend using robots.txt to block webpages that you wish to keep out of search results entirely." +#: ../../content/applications/websites/website/structure/pages.rst:109 +msgid ":guilabel:`Indexed`: Disable if you don't want the page to appear in search engine results." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:168 -msgid "Prevent a page from being indexed" +#: ../../content/applications/websites/website/structure/pages.rst:110 +msgid ":guilabel:`Visibility`: Select who can access the page:" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:170 -msgid "To effectively prevent a page from appearing in search engine results, use one of the following methods:" +#: ../../content/applications/websites/website/structure/pages.rst:112 +msgid ":guilabel:`Public`: Everyone can access the page." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:173 -msgid "**noindex tag:** Access the page's :ref:`properties ` and toggle the :guilabel:`Indexed` switch off." +#: ../../content/applications/websites/website/structure/pages.rst:113 +msgid ":guilabel:`Signed In`: Only signed-in users can access the page." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:177 -msgid "This option is not yet available for :ref:`dynamic pages `." +#: ../../content/applications/websites/website/structure/pages.rst:114 +msgid ":guilabel:`Restricted Group`: Select the :doc:`user access group(s) ` in the :guilabel:`Authorized group` field." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:179 -msgid "**404 or 403:** Configure the page to return a 404 (Not Found) or 403 (Forbidden) HTTP status code. These codes signal to search engines that the page does not exist or is inaccessible, leading to its eventual removal from the index." +#: ../../content/applications/websites/website/structure/pages.rst:116 +msgid ":guilabel:`With Password`: Type the password required to access the page in the :guilabel:`Password` field." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:183 -msgid "**404:** :ref:`Configure a 404 redirection. `" +#: ../../content/applications/websites/website/structure/pages.rst:119 +msgid ":guilabel:`Is a template`: Toggle the switch to save the page as a template and add it to the :guilabel:`Custom` category." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:184 -msgid "**403:** Access the page's :ref:`properties ` and toggle the :guilabel:`Visibility` switch off or :ref:`unpublish the page `." +#: ../../content/applications/websites/website/structure/pages.rst:123 +msgid "*Some* of these properties can also be modified in batch from :menuselection:`Website --> Site --> Pages`." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:187 -msgid "**Google Search Console:** Use Google Search Console to request the removal of specific URLs from Google's index." +#: ../../content/applications/websites/website/structure/pages.rst:129 +msgid "Duplicating pages" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:191 -msgid ":doc:`../configuration/google_search_console`" +#: ../../content/applications/websites/website/structure/pages.rst:131 +msgid "To duplicate a page, access the page, then go to :menuselection:`Site --> Properties`, and click :guilabel:`Duplicate Page`. Enter a :guilabel:`Page Name`, then click :guilabel:`OK`. By default, the new page is added after the duplicated page in the menu, but you can remove it from the menu or change its position using the :doc:`menu editor `." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:192 -msgid ":doc:`../pages`" +#: ../../content/applications/websites/website/structure/pages.rst:139 +msgid "Deleting pages" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:195 -msgid "Sitemap" +#: ../../content/applications/websites/website/structure/pages.rst:141 +msgid "To delete a page, proceed as follows:" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:197 -msgid "The sitemap points out website pages and their relation to each other to search engine robots. Odoo generates a `/sitemap.xml` file, including all URLs. For performance reasons, this file is cached and updated every 12 hours." +#: ../../content/applications/websites/website/structure/pages.rst:143 +msgid "Access the page, then go to :menuselection:`Site --> Properties` and click :guilabel:`Delete Page`." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:202 -msgid "If your website has a lot of pages, Odoo automatically creates a Sitemap Index file, respecting the `sitemaps.org protocol `_, grouping sitemap URLs in 45000 chunks per file." +#: ../../content/applications/websites/website/structure/pages.rst:144 +msgid "A pop-up window shows all links referring to the page you want to delete, organized by category. To ensure website visitors don't land on an error page, you must update all the links on your website referring to the page. To do so, expand a category, then click on a link to open it in a new window. Alternatively, you can set up a :ref:`redirection ` for the deleted page." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:206 -msgid "Every sitemap entry has three attributes that are computed automatically:" +#: ../../content/applications/websites/website/structure/pages.rst:149 +msgid "Once you have updated the links (or set up a :ref:`redirection `), tick the :guilabel:`I am sure about this` check box, then click :guilabel:`OK`." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:208 -msgid "``: the URL of a page." +#: ../../content/applications/websites/website/structure/pages.rst:155 +msgid "URL redirect mapping" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:209 -msgid "``: last modification date of the resource, computed automatically based on the related object. For a page related to a product, this could be the last modification date of the product or the page." +#: ../../content/applications/websites/website/structure/pages.rst:157 +msgid "URL redirect mapping consists in sending visitors and search engines to a URL different from the one they initially requested. This technique is used, for example, to prevent broken links when you :ref:`delete a page `, :ref:`modify its URL `, or migrate your site from another platform to an Odoo :doc:`domain <../configuration/domain_names>`. It can also be used to improve :doc:`seo`." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:212 -msgid "``: modules may implement their priority algorithm based on their content (for example, a forum might assign a priority based on the number of votes on a specific post). The priority of a static page is defined by its priority field, which is normalized (16 is the default)." +#: ../../content/applications/websites/website/structure/pages.rst:163 +msgid "To access existing URL redirections and create new ones, :doc:`activate the developer mode ` and go to :menuselection:`Website --> Configuration --> Redirects`." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:217 -msgid "To prevent pages from appearing in a sitemap, go to :menuselection:`Site --> Properties`, click the :guilabel:`Publish` tab, and turn off the :guilabel:`Indexed` feature." +#: ../../content/applications/websites/website/structure/pages.rst:168 +msgid "A redirect record is added automatically every time you :ref:`modify a page's URL ` and enable :guilabel:`Redirect Old URL`." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:0 -msgid "disabling the “Indexed” checkbox" +#: ../../content/applications/websites/website/structure/pages.rst:170 +msgid "You can set up redirections for :ref:`static and dynamic pages `." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:224 -msgid "Hreflang HTML tags" +#: ../../content/applications/websites/website/structure/pages.rst:172 +msgid "To create a new redirection, click the :guilabel:`New` button, then fill in the fields:" msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:226 -msgid "Odoo automatically includes `hreflang` and `x-default` tags in the code of your website's multilingual pages. These HTML attributes are crucial in informing search engines about a specific page's language and geographical targeting." +#: ../../content/applications/websites/website/structure/pages.rst:174 +msgid ":guilabel:`Name`: Enter a name to identify the redirect." msgstr "" -#: ../../content/applications/websites/website/pages/seo.rst:231 -msgid ":doc:`../configuration/translate`" +#: ../../content/applications/websites/website/structure/pages.rst:175 +msgid ":guilabel:`Action`: Select the type of redirection:" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:3 -msgid "Website analytics" +#: ../../content/applications/websites/website/structure/pages.rst:177 +msgid ":guilabel:`404 Not found`: visitors are redirected to a 404 error page when they try to access an unpublished or deleted page." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:5 -msgid "Website analytics helps website owners monitor how people use their site. It provides data on visitor demographics, behavior, and interactions, helping improve websites and marketing strategies." +#: ../../content/applications/websites/website/structure/pages.rst:179 +msgid ":guilabel:`301 Moved Permanently`: for permanent redirections of unpublished or deleted :ref:`static pages `. The new URL is shown in search engine results, and the redirect is cached by browsers." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:8 -msgid "You can track your Odoo website's traffic using :ref:`analytics/plausible` or :ref:`analytics/google-analytics`. We recommend using Plausible.io as it is privacy-friendly, lightweight, and easy to use." +#: ../../content/applications/websites/website/structure/pages.rst:182 +msgid ":guilabel:`302 Moved Temporarily`: for short-term redirections, for example, if you are redesigning or updating a page. The new URL is neither cached by browsers nor shown in search engine results." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:12 -msgid "The Plausible Analytics dashboard is also integrated into Odoo and can be accessed via :menuselection:`Website --> Reporting --> Analytics`." +#: ../../content/applications/websites/website/structure/pages.rst:185 +msgid ":guilabel:`308 Redirect/Rewrite`: for permanent redirections of existing :ref:`dynamic pages `. The URL is renamed; the new name is shown in search engine results and is cached by browsers. Use this redirect type to rename a dynamic page, for example, if you wish to rename `/shop` into `/market`." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:18 -msgid "Plausible.io" +#: ../../content/applications/websites/website/structure/pages.rst:190 +msgid ":guilabel:`URL from`: Enter the URL to be redirected (e.g., `/about-the-company`) or search for the desired :ref:`dynamic page ` and select it from the list." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:20 -msgid "Odoo hosts its own Plausible.io server and provides a free and ready-to-use Plausible.io solution for **Odoo Online** databases that use the odoo.com domain. Odoo automatically creates and sets up your account. Start using it by going to :menuselection:`Website --> Reporting --> Analytics`." +#: ../../content/applications/websites/website/structure/pages.rst:192 +msgid ":guilabel:`URL to`: For 301, 302, and 308 redirects, enter the URL to be redirected to. If you want to redirect to an external URL, include the protocol (e.g., `https://`)." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:26 -msgid "If you use a custom :doc:`domain name <../configuration/domain_names>` (e.g., `example.com`), you need to create your own Plausible.io account and subscription." +#: ../../content/applications/websites/website/structure/pages.rst:194 +msgid ":guilabel:`Website`: Select a specific website." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:28 -msgid "**If you already have a Plausible.io account** and you want to connect it to your Odoo Online database, you must create two `ir.config.parameters` to use Plausible.io's servers. To do so, enable the :ref:`developer mode ` and go to :menuselection:`General Settings --> Technical --> System Parameters`. Click :guilabel:`New` and fill in the following :guilabel:`Key` and :guilabel:`Value` fields:" +#: ../../content/applications/websites/website/structure/pages.rst:195 +msgid ":guilabel:`Sequence`: To define the order in which redirections are performed, e.g., in the case of redirect chains (i.e., a series of redirects where one URL is redirected to another one, which is itself further redirected to another URL)." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:37 -msgid "Key" +#: ../../content/applications/websites/website/structure/pages.rst:199 +msgid "Toggle the :guilabel:`Activate` switch to deactivate the redirection." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:38 -msgid "Value" +#: ../../content/applications/websites/website/structure/pages.rst:202 +msgid "404, 301, and 302 redirections are meant to migrate traffic from :ref:`unpublished ` or :ref:`deleted ` pages to *new* pages, while the 308 redirect is used for *permanent* redirections of *existing* pages." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:39 -msgid "`website.plausible_script`" +#: ../../content/applications/websites/website/structure/pages.rst:207 +msgid "`Google documentation on redirects and search `_" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:40 -msgid "`https://plausible.io/js/plausible.js`" +#: ../../content/applications/websites/website/structure/pages.rst:208 +msgid ":doc:`seo`" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:41 -msgid "`website.plausible_server`" +#: ../../content/applications/websites/website/structure/seo.rst:3 +msgid "Search Engine Optimization (SEO)" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:42 -msgid "`https://plausible.io`" +#: ../../content/applications/websites/website/structure/seo.rst:5 +msgid "Search Engine Optimization, often abbreviated as SEO, is a digital marketing strategy to improve a website's visibility and ranking in search engine results (e.g., in Google). It involves optimizing various elements on your website, including its content, social sharing, URLs, images, and page speed." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:44 -msgid "Then, follow the steps below to connect your existing account with Plausible.io servers." +#: ../../content/applications/websites/website/structure/seo.rst:11 +msgid "Odoo provides several modules to help you build your website content, such as :doc:`eCommerce <../../ecommerce>`, :doc:`Blog <../../blog>`, :doc:`eLearning <../../elearning>`, and :doc:`Forum <../../forum>`." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:47 -msgid "Deactivating the free Plausible.io account linked to your **Odoo Online** database will also remove the existing keys. As a result, new keys will be generated, while all historical data will remain associated with the old keys. If you plan to deactivate the account, it is recommended to save the existing keys to preserve access to that data." +#: ../../content/applications/websites/website/structure/seo.rst:14 +msgid "All Odoo :doc:`themes <../web_design/themes>` rely on the CSS Framework `Bootstrap `_ to render efficiently according to the device: desktop, tablet, or mobile, which positively impacts ranking in search engines." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:52 -msgid "If your database is hosted on **Odoo.sh** or **On-premise**, or if you wish to use your own Plausible.io account, proceed as follows:" +#: ../../content/applications/websites/website/structure/seo.rst:19 +msgid "`Magic Sheet - Optimize your website [PDF] `_" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:55 -msgid "Create or sign in to a Plausible.io account using the following link: ``_." +#: ../../content/applications/websites/website/structure/seo.rst:23 +msgid "Content optimization" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:56 -msgid "If you are creating a new account, go through the registration and activation steps. On the :guilabel:`Add website info` page, add the :guilabel:`Domain` of your website without including `www` (e.g., `example.odoo.com`) and change the :guilabel:`Reporting Timezone`, if necessary. Click :guilabel:`Install Plausible` to proceed to the next step. Ignore the :guilabel:`Manual installation` instructions and click :guilabel:`Start collecting data`." +#: ../../content/applications/websites/website/structure/seo.rst:25 +msgid "To optimize a webpage's SEO, access the page, then go to :menuselection:`Website --> Site --> Optimize SEO`." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:61 -msgid "Once done, click the Plausible.io logo in the upper-left part of the page to access your `list of websites `_, then click the :icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) icon next to the website and select :icon:`fa-cog` :guilabel:`Settings` from the drop-down menu." +#: ../../content/applications/websites/website/structure/seo.rst:-1 +msgid "Optimize SEO" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:0 -msgid "Click the gear icon in the list of websites." +#: ../../content/applications/websites/website/structure/seo.rst:32 +msgid "Meta tags" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:69 -msgid "In the sidebar, select :guilabel:`Visibility`, then click :guilabel:`Add Shared link`." +#: ../../content/applications/websites/website/structure/seo.rst:34 +msgid "Meta tags are HTML elements that provide information about a webpage to search engines and website visitors. They play a crucial role in SEO by helping search engines understand the content and context of a webpage and attract visitors with appealing content. There are two types of meta tags in Odoo:" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:70 -msgid "Enter a :guilabel:`Name`, leave the :guilabel:`Password (optional)` field empty, as the Plausible analytics dashboard integration in Odoo does not support it, then click :guilabel:`Create shared link`." +#: ../../content/applications/websites/website/structure/seo.rst:39 +msgid ":guilabel:`Title` tags specify a webpage's title and are displayed as a clickable link in search engine results. They should be concise, descriptive, and relevant to the page's content. You can update the title tag of your webpage or keep it empty to use the default value based on the page’s content." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:74 -msgid "Copy the shared link." +#: ../../content/applications/websites/website/structure/seo.rst:44 +msgid ":guilabel:`Description` tags summarize the webpage's content, often displayed in search engine results below the title. They are used to encourage the user to visit the page. You can update the description tag of your webpage or keep it empty to use the default value based on the page’s content." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:0 -msgid "Copy the shared link URL from Plausible.io" +#: ../../content/applications/websites/website/structure/seo.rst:50 +msgid "The :guilabel:`Preview` card displays how the title and description tags should appear in search results. It also includes the URL of your page." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:79 -#: ../../content/applications/websites/website/reporting/analytics.rst:124 -msgid "In Odoo, go to :menuselection:`Website --> Configuration --> Settings`." +#: ../../content/applications/websites/website/structure/seo.rst:54 +msgid "Keywords" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:80 -msgid "In the :guilabel:`SEO` section, enable :guilabel:`Plausible Analytics`, then paste the :guilabel:`Shared Link Auth` and click :guilabel:`Save`." +#: ../../content/applications/websites/website/structure/seo.rst:56 +msgid "Keywords are one of the main elements of SEO. A website that is well optimized for search engines speaks the same language as potential visitors, with keywords for SEO helping them to connect to your site." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:84 -msgid "If you have :doc:`multiple websites <../configuration/multi_website>`, add your websites to your Plausible.io account by going to ``_ and clicking :guilabel:`+ Add Website`. In Odoo, in the **Website settings**, make sure to select the website in the :guilabel:`Settings of Website` field at the top of the page before pasting the :guilabel:`Shared link`." +#: ../../content/applications/websites/website/structure/seo.rst:60 +msgid "You can enter the keywords you consider essential in the :guilabel:`Keyword` field and click :guilabel:`ADD` to see how they are used at different levels in your content (H1, H2, page title, page description, page content) and the related searches in Google. The tool also suggests relevant keywords to drive your web traffic. The more keywords are present on your webpage, the better." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:91 -msgid "Odoo automatically pushes two custom goals: `Lead Generation` and `Shop`." +#: ../../content/applications/websites/website/structure/seo.rst:66 +msgid "It is strongly recommended to only use one H1 title per page for SEO." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:94 -msgid "`Plausible Analytics documentation `_" +#: ../../content/applications/websites/website/structure/seo.rst:69 +msgid "Image for social share" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:99 -msgid "Google Analytics" +#: ../../content/applications/websites/website/structure/seo.rst:71 +msgid "When you share your page on social media, your logo image is selected, but you can upload any other image by clicking the upward arrow." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:101 -msgid "To follow your Odoo website's traffic with Google Analytics:" +#: ../../content/applications/websites/website/structure/seo.rst:75 +msgid "The :guilabel:`Social Preview` card displays how the page's information would appear when shared." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:103 -msgid "Create or sign in to a Google account using the following link: ``_." +#: ../../content/applications/websites/website/structure/seo.rst:77 +msgid "If you change the title of a blog post or the name of a product, the changes apply automatically everywhere on your website. The old link still functions when external websites use a :ref:`301 redirect `, maintaining the SEO link juice." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:104 -msgid "If you are setting up Google Analytics for the first time, click :guilabel:`Start measuring` and go through the account creation step." +#: ../../content/applications/websites/website/structure/seo.rst:82 +#: ../../content/applications/websites/website/web_design/elements.rst:64 +msgid "Images" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:106 -msgid "If you already have a Google Analytics account, sign in and click the :icon:`fa-cog` icon in the bottom-left corner of the page to access the **Admin** page. Then, click :guilabel:`+ Create` and select :guilabel:`Property` from the drop-down menu." +#: ../../content/applications/websites/website/structure/seo.rst:84 +msgid "The size of images has a significant impact on page speed, which is an essential criterion for search engines to optimize SEO ranking." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:110 -msgid "Complete the next steps: `property creation `_, business details and business objectives." +#: ../../content/applications/websites/website/structure/seo.rst:88 +msgid "Compare how your website ranks using `Google Page Speed `_ or `Pingdom Website Speed Test `_." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:112 -msgid "When you reach the **Data collection** step, choose the :guilabel:`Web` platform." +#: ../../content/applications/websites/website/structure/seo.rst:91 +msgid "Odoo automatically compresses uploaded images and converts them to `Webp`. With this file format, photos are smaller, which increases the page loading speed and, therefore, gives a better ranking in SEO. All images used in Odoo official :doc:`themes <../web_design/themes>` are also compressed by default. If you are using a third-party theme, it may provide images that are not compressed efficiently." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:0 -msgid "Choose a platform for your Google Analytics property." +#: ../../content/applications/websites/website/structure/seo.rst:97 +msgid "**To modify an image** from your website, select the image, click :guilabel:`Edit`, then go to the :guilabel:`Customize` tab, and adapt the :guilabel:`Format` in the :guilabel:`Image` section." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:117 -msgid "Set up your data stream: Specify your :guilabel:`Website URL` and a :guilabel:`Stream name`, then click :guilabel:`Create & continue`." +#: ../../content/applications/websites/website/structure/seo.rst:-1 +msgid "automated image compression" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:119 -msgid "Copy the :guilabel:`Measurement ID`." +#: ../../content/applications/websites/website/structure/seo.rst:104 +msgid "Alt tags are used to provide context to what an image is displaying, informing search engine crawlers and allowing them to index an image correctly. Adding alt tags keywords in the :guilabel:`Description` field is essential from an SEO perspective. This description is added to the HTML code of your image, and it is shown when the image cannot be displayed." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:0 -msgid "Measurement ID in Google Analytics." +#: ../../content/applications/websites/website/structure/seo.rst:110 +msgid "Advanced features" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:125 -msgid "In the :guilabel:`SEO` section, enable :guilabel:`Google Analytics`, then paste the :guilabel:`Measurement ID` and click :guilabel:`Save`." +#: ../../content/applications/websites/website/structure/seo.rst:113 +msgid "Structured data markup" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:129 -msgid "If you have :doc:`multiple websites <../configuration/multi_website>` with separate domains, it is recommended to create `one property `_ per domain. In Odoo, in the **Website settings**, make sure to select the website in the :guilabel:`Settings of Website` field at the top of the page before pasting the :guilabel:`Measurement ID`." +#: ../../content/applications/websites/website/structure/seo.rst:115 +msgid "Structured data markup is used to generate rich snippets in search engine results. It is a way for websites to send structured data to search engine robots, helping them understand your content and create well-presented search results." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:136 -msgid "`Google documentation on setting up Analytics for a website `_" +#: ../../content/applications/websites/website/structure/seo.rst:119 +msgid "By default, Google supports many `rich snippets `_ for content types, including Reviews, People, Products, Businesses, Events, and Organizations." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:142 -msgid "Google Tag Manager" +#: ../../content/applications/websites/website/structure/seo.rst:122 +msgid "Microdata is a set of tags, introduced with HTML5, that help search engines better understand your content and display it in a relevant way. Odoo implements microdata as defined in the schema.org `specification `_ for events, eCommerce products, forum posts, and contact addresses. This allows your product pages to be displayed in Google using extra information like the price and rating of a product:" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:144 -msgid "Google Tag Manager is a tag management system that allows you to easily update measurement codes and related code fragments, collectively known as tags on your website or mobile app, directly through the code injector." +#: ../../content/applications/websites/website/structure/seo.rst:-1 +msgid "snippets in search engine results" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:149 -msgid ":abbr:`GTM (Google Tag Manager)` is not an analytics tool and does not offer reporting features; it is used to collect data and works alongside Google Analytics to provide more detailed insights. In order to use GTM properly, it is recommended to configure Google Analytics as well." +#: ../../content/applications/websites/website/structure/seo.rst:132 +msgid "robots.txt" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:153 -msgid "For more information refer to the `documentation on linking Google Analytics and Google Tag Manager `_." +#: ../../content/applications/websites/website/structure/seo.rst:134 +msgid "A `robots.txt` file instructs search engine crawlers which parts of a website they are permitted to access. Its primary purpose is to:" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:157 -msgid "Some GTM tags use data layers (e.g., advanced eCommerce tracking data layers) to retrieve variables and send them to Google Analytics. Data layers are currently not managed in Odoo." +#: ../../content/applications/websites/website/structure/seo.rst:137 +msgid "**Prevent overloading the website:** By guiding crawlers away from certain sections, robots.txt helps manage server load." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:159 -msgid "Google Tag Manager may not be compliant with local data protection regulations." +#: ../../content/applications/websites/website/structure/seo.rst:139 +msgid "**Control access to resources and detailed descriptions:** It can prevent crawlers from accessing media files (images, videos), CSS stylesheets, and JavaScript files, and from reading the content (text) of specific pages." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:161 -msgid "To configure GTM, proceed as follows:" +#: ../../content/applications/websites/website/structure/seo.rst:143 +msgid "When indexing your website, search engines first look at the robots.txt file. Odoo automatically creates one robot.txt file available on `mydatabase.odoo.com/robots.txt`." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:163 -msgid "Create or sign in to a Google account by going to https://tagmanager.google.com/." +#: ../../content/applications/websites/website/structure/seo.rst:147 +msgid "Reputable bots adhere to robots.txt; others may require blocking via :ref:`Cloudflare ` on your custom domain." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:165 -msgid "In the :guilabel:`Accounts` tab, click :guilabel:`Create Account`." +#: ../../content/applications/websites/website/structure/seo.rst:151 +msgid "Edit robots.txt" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:167 -msgid "Enter an :guilabel:`Account Name` and select the account's :guilabel:`Country`." +#: ../../content/applications/websites/website/structure/seo.rst:153 +msgid "By editing a robots.txt file, you can control which site pages are accessible to search engine crawlers. To add custom instructions to the file, go to :menuselection:`Website --> Configuration --> Settings`, scroll down to the :guilabel:`SEO` section, and click :guilabel:`Edit robots.txt`." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:169 -msgid "Enter your website's URL in the :guilabel:`Container name` field and select the :guilabel:`Target platform`." +#: ../../content/applications/websites/website/structure/seo.rst:158 +msgid "If you do not want robots to crawl the `/about-us` page of your site, you can edit the robots.txt file to add `Disallow: /about-us`." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:172 -msgid "Click :guilabel:`Create` and agree to the Terms of Service." +#: ../../content/applications/websites/website/structure/seo.rst:162 +msgid "While `robots.txt` prevents content from being crawled, **it does not guarantee that a page will not be indexed**. A page can still appear in search results if it is linked to from other crawled pages (indexed by \"reference\"). Google generally does not recommend using robots.txt to block webpages that you wish to keep out of search results entirely." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:174 -msgid "Copy the `` and `` codes from the popup window. Then, go to your website, click :guilabel:`Edit`, go to the :guilabel:`Theme` tab, scroll down to the :guilabel:`Advanced` section, then click :guilabel:`` and :guilabel:`` next to :guilabel:`Code Injection` to paste the codes." +#: ../../content/applications/websites/website/structure/seo.rst:168 +msgid "Prevent a page from being indexed" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:0 -msgid "Install Google Tag Manager" +#: ../../content/applications/websites/website/structure/seo.rst:170 +msgid "To effectively prevent a page from appearing in search engine results, use one of the following methods:" msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:183 -msgid "The data is collected in the marketing tools used to monitor the website (e.g., Google Analytics, Plausible, Facebook Pixel), not in Odoo." +#: ../../content/applications/websites/website/structure/seo.rst:173 +msgid "**noindex tag:** Access the page's :ref:`properties ` and toggle the :guilabel:`Indexed` switch off." msgstr "" -#: ../../content/applications/websites/website/reporting/analytics.rst:187 -msgid "`Setting up click triggers on Google `_" +#: ../../content/applications/websites/website/structure/seo.rst:177 +msgid "This option is not yet available for :ref:`dynamic pages `." msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:3 -msgid "Link tracker" +#: ../../content/applications/websites/website/structure/seo.rst:179 +msgid "**404 or 403:** Configure the page to return a 404 (Not Found) or 403 (Forbidden) HTTP status code. These codes signal to search engines that the page does not exist or is inaccessible, leading to its eventual removal from the index." msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:5 -msgid "The link tracker allow you to create tracked links to measure your marketing campaigns' effectiveness. They let you determine which channels bring you the most visitors and make informed decisions." +#: ../../content/applications/websites/website/structure/seo.rst:183 +msgid "**404:** :ref:`Configure a 404 redirection. `" msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:12 -msgid "The :guilabel:`Link Tracker` module is not installed by default. You need to enable the :guilabel:`Email Marketing` option by going to :menuselection:`Website --> Configuration --> Settings.` Alternatively, you can :doc:`install <../../../general/apps_modules>` the :guilabel:`Link Tracker` module itself or one of the marketing apps." +#: ../../content/applications/websites/website/structure/seo.rst:184 +msgid "**403:** Access the page's :ref:`properties ` and toggle the :guilabel:`Visibility` switch off or :ref:`unpublish the page `." msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:18 -msgid "Create a traceable URL" +#: ../../content/applications/websites/website/structure/seo.rst:187 +msgid "**Google Search Console:** Use Google Search Console to request the removal of specific URLs from Google's index." msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:20 -msgid "To create and manage tracked links, navigate to :menuselection:`Website --> Site --> Link Tracker`. Fill in the following information and click :guilabel:`Get tracked link` to generate a tracking URL." +#: ../../content/applications/websites/website/structure/seo.rst:191 +msgid ":doc:`../configuration/google_search_console`" msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:23 -msgid ":guilabel:`URL`: The URL which is the target of the campaign. It is automatically populated with the URL from where you access the menu." +#: ../../content/applications/websites/website/structure/seo.rst:192 +msgid ":doc:`pages`" msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:26 -msgid ":guilabel:`Campaign`: The specific campaign the link should be associated with. This parameter is used to distinguish the different campaigns." +#: ../../content/applications/websites/website/structure/seo.rst:195 +msgid "Sitemap" msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:29 -msgid ":guilabel:`Medium`: The medium describes the category or method through which the visitor arrives at your site, such as organic search, paid search, social media ad, email, etc." +#: ../../content/applications/websites/website/structure/seo.rst:197 +msgid "The sitemap points out website pages and their relation to each other to search engine robots. Odoo generates a `/sitemap.xml` file, including all URLs. For performance reasons, this file is cached and updated every 12 hours." msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:32 -msgid ":guilabel:`Source`: The source identifies the precise platform or website that referred the visitor, such as a search engine, a newsletter, or a website." +#: ../../content/applications/websites/website/structure/seo.rst:202 +msgid "If your website has a lot of pages, Odoo automatically creates a Sitemap Index file, respecting the `sitemaps.org protocol `_, grouping sitemap URLs in 45000 chunks per file." msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:-1 -msgid "Create a link tracker URL" +#: ../../content/applications/websites/website/structure/seo.rst:206 +msgid "Every sitemap entry has three attributes that are computed automatically:" msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:38 -msgid "The :guilabel:`Campaign`, :guilabel:`Medium`, and :guilabel:`Source` are called :abbr:`UTM (Urchin Tracking Module)` parameters. They are incorporated in the tracked URL." +#: ../../content/applications/websites/website/structure/seo.rst:208 +msgid "``: the URL of a page." msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:42 -msgid "You can customize the :ref:`visibility ` of building blocks using the :abbr:`UTM (Urchin Tracking Module)` parameters, amongst other conditions." +#: ../../content/applications/websites/website/structure/seo.rst:209 +msgid "``: last modification date of the resource, computed automatically based on the related object. For a page related to a product, this could be the last modification date of the product or the page." msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:46 -msgid "Tracked links overview" +#: ../../content/applications/websites/website/structure/seo.rst:212 +msgid "``: modules may implement their priority algorithm based on their content (for example, a forum might assign a priority based on the number of votes on a specific post). The priority of a static page is defined by its priority field, which is normalized (16 is the default)." msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:48 -msgid "To get an overview of your tracked links, go to :menuselection:`Website --> Site --> Link Tracker` and scroll down to :guilabel:`Your tracked links` section." +#: ../../content/applications/websites/website/structure/seo.rst:217 +msgid "To prevent pages from appearing in a sitemap, go to :menuselection:`Site --> Properties`, click the :guilabel:`Publish` tab, and turn off the :guilabel:`Indexed` feature." msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:-1 -msgid "Get an overview of all the links you track." +#: ../../content/applications/websites/website/structure/seo.rst:0 +msgid "disabling the “Indexed” checkbox" msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:55 -msgid "Statistics" +#: ../../content/applications/websites/website/structure/seo.rst:224 +msgid "Hreflang HTML tags" msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:57 -msgid "To measure the performance of tracked links, click the :guilabel:`Stats` button." +#: ../../content/applications/websites/website/structure/seo.rst:226 +msgid "Odoo automatically includes `hreflang` and `x-default` tags in the code of your website's multilingual pages. These HTML attributes are crucial in informing search engines about a specific page's language and geographical targeting." msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:-1 -msgid "View the statistics related to a specific tracked link." +#: ../../content/applications/websites/website/structure/seo.rst:231 +msgid ":doc:`../configuration/translate`" msgstr "" -#: ../../content/applications/websites/website/reporting/link_tracker.rst:62 -msgid "Scroll down to the :guilabel:`Statistics` section to get an overview of the number of clicks of your tracked links. You can display information for a specific period by clicking the :guilabel:`All Time`, :guilabel:`Last Month`, or :guilabel:`Last Week` options." +#: ../../content/applications/websites/website/web_design.rst:7 +msgid "Web design" msgstr "" -#: ../../content/applications/websites/website/web_design.rst:5 -msgid "Web design" +#: ../../content/applications/websites/website/web_design.rst:9 +msgid "Design your website using :doc:`building blocks <../website/web_design/building_blocks>`, customize its :doc:`theme <../website/web_design/themes>` with various options, structure and present content with :doc:`elements <../website/web_design/elements>`, and display or hide building blocks using :doc:`visibility settings <../website/web_design/visibility>`." msgstr "" #: ../../content/applications/websites/website/web_design/building_blocks.rst:5 @@ -7300,7 +7658,7 @@ msgid "Add a building block" msgstr "" #: ../../content/applications/websites/website/web_design/building_blocks.rst:19 -msgid "To add a block to a :doc:`website page <../pages>`, access the page, click :guilabel:`Edit`, then drag and drop the desired building block into the appropriate location. Two types of building blocks are available: :guilabel:`Categories` and :guilabel:`Inner Content`. :guilabel:`Inner Content` building blocks can only be added into :guilabel:`Categories` building blocks." +msgid "To add a block to a :doc:`website page <../structure/pages>`, access the page, click :guilabel:`Edit`, then drag and drop the desired building block into the appropriate location. Two types of building blocks are available: :guilabel:`Categories` and :guilabel:`Inner Content`. :guilabel:`Inner Content` building blocks can only be added into :guilabel:`Categories` building blocks." msgstr "" #: ../../content/applications/websites/website/web_design/building_blocks.rst:24 diff --git a/tests/main.py b/tests/main.py index 3af845e85d..3275c48540 100644 --- a/tests/main.py +++ b/tests/main.py @@ -18,20 +18,23 @@ ] ADDITIONAL_CHECKERS = [ - checkers.resource_files.check_resource_file_referenced + checkers.resource_files.check_image_size, + checkers.resource_files.check_image_color_depth, + checkers.resource_files.check_resource_file_name, + checkers.resource_files.check_resource_file_referenced, ] def run_additional_checks(argv=None): _enabled_checkers, args = sphinxlint.parse_args(argv) for path in chain.from_iterable(sphinxlint.walk(path, args.ignore) for path in args.paths): - if path.startswith('content') and not path.endswith('.rst'): + if 'content/' in path and not path.endswith('.rst'): # Leave root and locale files alone. for checker in ADDITIONAL_CHECKERS: checker(path) """ -The following checkers are selected for `make test`. +The following built-in checkers are enabled for `make test`: - backtick-before-role: Search for roles preceded by a backtick. - bad-dedent: Check for mis-alignment in indentation in code blocks. - carriage-return: Check for carriage returns (\r) in lines. @@ -55,13 +58,11 @@ def run_additional_checks(argv=None): - role-without-backticks: Search roles without backticks. - trailing-whitespace: Check for trailing whitespaces at end of lines. - unbalanced-inline-literals-delimiters: Search for unbalanced inline literals delimiters. ---- -- all the checkers defined in checkers/* files. -The following checkers are only selected for `make review`. -- line-too-long: Check for line length. +All the custom checkers defined in checkers/* files are also enabled, except for the following ones, +which are only enabled for `make review`: +- line-too-long: Check for line lengths. - early-line-break: Check for early line breaks. - """ if __name__ == '__main__': # Patch sphinxlint's global constants to include our custom directives and parse their content. @@ -87,10 +88,5 @@ def run_additional_checks(argv=None): if os.getenv('REVIEW') == '1': # Enable checkers for `make review`. setattr(sphinxlint.check_line_too_long, 'enabled', True) setattr(checkers.rst_style.check_early_line_breaks, 'enabled', True) - ADDITIONAL_CHECKERS.extend([ - checkers.resource_files.check_image_size, - checkers.resource_files.check_image_color_depth, - checkers.resource_files.check_resource_file_name, - ]) run_additional_checks() sys.exit(sphinxlint.main())