[IMP] accounting/l10n_hk: add Hong Kong payroll

Impacted Version:

- 17.0 and above

This commit improve below features:

- Add Hong Kong payroll documentation

closes odoo/documentation#9364

X-original-commit: a08fc7db34
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
This commit is contained in:
maya-odoo 2024-03-11 14:01:55 +08:00 committed by Sam Lieber (sali)
parent fab3e9f352
commit 652bead830
15 changed files with 504 additions and 19 deletions

View File

@ -2,8 +2,35 @@
Hong Kong Hong Kong
========= =========
Add FPS QR codes to invoices Configuration
============================ =============
:ref:`Install <general/install>` the following modules to get the latest features of the Hong Kong
localization:
.. list-table::
:header-rows: 1
* - Name
- Technical name
- Description
* - :guilabel:`Hong Kong - Accounting`
- `l10n_hk`
- The base module to manage chart of accounting and localization for Hong Kong.
* - :guilabel:`Hong Kong - Payroll`
- `l10n_hk_hr_payroll`
- Enables :ref:`payroll <hong_kong/payroll>` specific localization features for Odoo *Payroll*
app. This module also installs :guilabel:`Hong Kong - Payroll with Accounting` and
:guilabel:`Documents - Hong Kong Payroll`.
* - :guilabel:`Hong Kong - Payroll with Accounting`
- `l10n_hk_hr_payroll_account`
- Installs the link between Hong Kong payroll and accounting.
* - :guilabel:`Documents - Hong Kong Payroll`
- `documents_l10n_hk_hr_payroll`
- Integrates employee ir56 forms in the Odoo *Documents* app.
FPS QR codes on invoices
========================
:abbr:`FPS (Faster Payment System)` is a payment service platform that allows customers to make :abbr:`FPS (Faster Payment System)` is a payment service platform that allows customers to make
instant domestic payments to individuals and merchants in Hong Kong dollars or Renminbi via online instant domestic payments to individuals and merchants in Hong Kong dollars or Renminbi via online
@ -12,23 +39,26 @@ and mobile banking.
Activate QR codes Activate QR codes
----------------- -----------------
Go to :menuselection:`Accounting --> Configuration --> Settings`. Under the :guilabel:`Customer Go to :menuselection:`Accounting app --> Configuration --> Settings`. Under the :guilabel:`Customer
Payments` section, activate the :guilabel:`QR Codes` feature. Payments` section, tick the checkbox beside the :guilabel:`QR Codes` feature. Then, click
:guilabel:`Save`.
FPS bank account configuration FPS bank account configuration
------------------------------ ------------------------------
Go to :menuselection:`Contacts --> Configuration --> Bank Accounts` and select the bank account for Go to :menuselection:`Contacts app --> Configuration --> Bank Accounts section --> Bank Accounts`.
which you want to activate FPS. Set the :guilabel:`Proxy Type` and fill in the :guilabel:`Proxy Then select the bank account for FPS activation. Proceed to set the :guilabel:`Proxy Type` and fill
Value` field depending on the type you chose. in the :guilabel:`Proxy Value` field, depending on the type chosen.
.. important:: Remember to include the invoice number in the QR code, by ticking the :guilabel:`Include Reference`
- The account holder's country must be set to Hong Kong on its contact form. checkbox.
- You could also include the invoice number in the QR code by checking the :guilabel:`Include
Reference` checkbox.
.. image:: hong_kong/hk-fps-bank-setting.png .. image:: hong_kong/hk-fps-bank-setting.png
:alt: FPS bank account configuration :align: center
:alt: FPS bank account configuration.
.. important::
The account holder's country **must** be set to `Hong Kong` on their contact form.
.. seealso:: .. seealso::
:doc:`../accounting/bank` :doc:`../accounting/bank`
@ -36,20 +66,475 @@ Value` field depending on the type you chose.
Bank journal configuration Bank journal configuration
-------------------------- --------------------------
Go to :menuselection:`Accounting --> Configuration --> Journals`, open the bank journal, then fill Go to :menuselection:`Accounting app --> Configuration --> Journals` and open the bank journal.
out the :guilabel:`Account Number` and :guilabel:`Bank` under the :guilabel:`Journal Entries` tab. Then, fill out the :guilabel:`Account Number` and :guilabel:`Bank` fields, located in the
:guilabel:`Journal Entries` tab.
.. image:: hong_kong/hk-bank-account-journal-setting.png .. image:: hong_kong/hk-bank-account-journal-setting.png
:alt: Bank Account's journal configuration :align: center
:alt: Bank Account's journal configuration.
Issue invoices with FPS QR codes Issue invoices with FPS QR codes
-------------------------------- --------------------------------
When creating a new invoice, open the :guilabel:`Other Info` tab and set the :guilabel:`Payment When creating a new invoice, open the :guilabel:`Other Info` tab and set the :guilabel:`Payment
QR-code` option to *EMV Merchant-Presented QR-code*. QR-code` option to :guilabel:`EMV Merchant-Presented QR-code`.
.. image:: hong_kong/hk-qr-code-invoice-setting.png .. image:: hong_kong/hk-qr-code-invoice-setting.png
:alt: Select EMV Merchant-Presented QR-code option :align: center
:alt: Select EMV Merchant-Presented QR-code option.
Ensure that the :guilabel:`Recipient Bank` is the one you configured, as Odoo uses this field to Ensure that the :guilabel:`Recipient Bank` is configured, as Odoo uses this field to generate the
generate the FPS QR code. FPS QR code.
.. _hong_kong/payroll:
Payroll
=======
.. important::
Ensure the :guilabel:`Hong Kong - Payroll` (`l10n_hk_hr_payroll`) module is installed before
proceeding.
Create employees
----------------
Go to the :menuselection:`Employees` app and click :guilabel:`New`. Then, configure the following
fields:
- Under the :guilabel:`Work Information` tab
- :guilabel:`Working Hours`: :guilabel:`HK Standard 40 hours/week` option **must** be selected.
- Under the :guilabel:`Private Information` tab
- :guilabel:`Surname, Given Name, Name in Chinese`: name of the employee.
- :guilabel:`Private Address`: address of the employee.
- :guilabel:`Bank Account Number`: employee's bank account number.
- :guilabel:`Current Rental`: employee's rental records (if rental allowance is applicable).
- :guilabel:`Autopay Type`: :guilabel:`BBAN`, :guilabel:`SVID`, :guilabel:`EMAL`, etc.
- :guilabel:`Autopay Reference`: autopay reference number.
- :guilabel:`Identification No`: HKID of the employee.
- :guilabel:`Gender`: gender of the employee.
.. important::
For the :guilabel:`Bank Account Number`, this account should be set as :guilabel:`Trusted`
before further processing.
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.
.. note::
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`.
- Under the :guilabel:`HR Settings` tab:
- :guilabel:`Volunteer Contribution Option`: select either :guilabel:`Only Mandatory
Contribution`, :guilabel:`With Fixed %VC`, or :guilabel:`Cap 5% VC`.
- :guilabel:`MPF Manulife Account`: account number, if applicable.
.. _hong_kong/manage_contracts:
Manage contracts
----------------
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`.
.. note::
Only **one** contract can be active simultaneously per employee, but an employee can be assigned
consecutive contracts during their employment.
The following are critical for setting up a contract:
- :guilabel:`Salary Structure Type`: set as :guilabel:`CAP57: Hong Kong Employee`.
- :guilabel:`Contract Start Date`: start date of employment.
- :guilabel:`Working Schedule`: set as :guilabel:`HK Standard 40 hours/week` (from employee record).
- :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.
- :guilabel:`Working Schedule`: the work entries are generated automatically based on the
employee's working schedule.
- :guilabel:`Attendances`: the work entries are generated based on the check-in/out period logged
in the *Attendances*.
- :guilabel:`Planning`: the work entries are generated from planning shifts only.
- Under the :guilabel:`Salary Information` tab
- :guilabel:`Wage Type`: select :guilabel:`Fixed Wage` for Full-time or Part-time employees, or
:guilabel:`Hourly Wage` for employees who are paid hourly.
- :guilabel:`Schedule Pay`: the frequency of payslip issuance.
- :guilabel:`Wage`: :guilabel:`Monthly` or :guilabel:`Hourly` depending on the :guilabel:`Wage
Type`.
- :guilabel:`Internet Subscription`: this is an **optional** field to provide additional internet
allowance on top of the current salary package.
.. important::
Timesheets do **not** impact work entries in Odoo.
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.
.. image:: hong_kong/hk-contract.png
:align: center
:alt: Hong Kong employment contract.
.. _hong_kong/running_payslips:
Generate payslips
-----------------
Once the employees, and their contracts, are configured, payslips can be generated in the *Payroll*
app.
Odoo provides **four** different salary structures under CAP57 regulation:
#. :guilabel:`CAP57: Employees Monthly Pay`: to process the monthly employee salary.
#. :guilabel:`CAP57: Payment in Lieu of Notice`: to process final payment upon contract termination
using :abbr:`ADW (Average Daily Wage)`.
#. :guilabel:`CAP57: Long Service Payment`: applicable to employees with more than five years of
service upon contract termination.
#. :guilabel:`CAP57: Severance Payment`: applicable to employees with more than two years of service
upon contract termination.
Before running the payslips, the accounts used in the salary rule can be adjusted by navigating to
:menuselection:`Payroll app --> Configuration --> Rules`.
.. image:: hong_kong/hk-salary-rules.png
:align: center
:alt: Hong Kong Salary Rules.
Odoo can create pay runs in two ways: via :ref:`batch <hong_kong/batch_payslips>` or
:ref:`individual <hong_kong/individual_payslips>` payslips.
.. _hong_kong/batch_payslips:
Batch payslips
~~~~~~~~~~~~~~
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`.
#. Click on :guilabel:`New`.
#. Enter a :guilabel:`Batch Name` (e.g. `2024 - Jan`) and :guilabel:`Period` (e.g. `01/01/2024` -
`01/31/2024`).
#. Click on :guilabel:`Generate Payslips`.
#. 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.
#. Click on :guilabel:`Generate`.
#. A :guilabel:`Payslips` smart button is created automatically.
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.
.. _hong_kong/individual_payslips:
Individual payslips
~~~~~~~~~~~~~~~~~~~
Go to :menuselection:`Payroll app --> Payslips --> All Payslips`.
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`).
#. Click on :guilabel:`New`.
#. Select an :guilabel:`Employee`. When selected, the :guilabel:`Contract` is filled out
automatically.
#. Add a pay :guilabel:`Period`.
#. Select a salary :guilabel:`Structure` (e.g. :guilabel:`CAP57: Employees Monthly Pay`).
#. The :guilabel:`Worked Days & Inputs` tab automatically compute the worked days/hours and time off
leaves that are applicable.
#. Additional payslip items can be added at this time (e.g. :guilabel:`Commissions`,
:guilabel:`Deductions`) under the :guilabel:`Other Inputs` section.
#. Click on :guilabel:`Compute Sheet` button to generate the payslip lines. This button updates
the :guilabel:`Salary Computation` tab.
.. note::
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.
The :guilabel:`Salary Computation` tab shows the detailed breakdown of the computation, based on
the salary rules configured for each structure type.
#. :guilabel:`Rent Allowance`: amount derived from the employee's active rental record.
#. :guilabel:`Basic Salary`: amount of base salary provided (after rent allowance deduction).
#. :guilabel:`713 Gross`: net payable amount considering *Commission*, *Internet Allowance*,
*Reimbursements*, *Back-pay*, *Deduction*, etc.
#. :guilabel:`MPF Gross`: net payable amount from 713 gross after consideration of additional
allowances, deductions, and end-of-year payment.
#. :guilabel:`Employee Mandatory Contribution`: employee MPF Contribution.
#. :guilabel:`Employer Mandatory Contribution`: employer MPF Contribution.
#. :guilabel:`Gross`: net payable amount from MPF gross after consideration of MPF deductions.
#. :guilabel:`Net Salary`: final payable amount to be paid to the employee.
.. important::
There are no MPF contributions for the first month. Both employee and employer contribution
starts on second month.
.. image:: hong_kong/hk-salary-computation.png
:align: center
:alt: Hong Kong Salary computation.
Under the :guilabel:`Other Inputs` section in :guilabel:`Worked Days & Inputs` tab, there are
additional manual input types:
- :guilabel:`Back Pay`: additional salary payout can be included under this category.
- :guilabel:`Commission`: the commission earned during the period can be manually entered here.
- :guilabel:`Global Deduction`: a lump-sum deduction from the entire payslip.
- :guilabel:`Global Reimbursement`: a lump-sum reimbursement to the entire payslip.
- :guilabel:`Referral Fee`: the additional bonus offered for any form of business-related referral.
- :guilabel:`Moving Daily Wage`: to override the :abbr:`ADW (Average Daily Wage)` value used for
leaves computation.
- :guilabel:`Skip Rent Allowance`: if set, the rental allowance is excluded from the current
payslip.
- :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).
- :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.
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.
Pay employees
-------------
Once the draft journal entries have been posted, the company can now pay the employees. The user can
choose between **two** different *payment methods*:
- 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 <../accounting/payments>`. Select the desired bank journal and
payment method, then later reconcile the payment with the corresponding bank statement.
- 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 <../accounting/payments>` in the *Accounting* app, and
reconcile accordingly.
Attendances and hourly wage
---------------------------
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 <hong_kong/manage_contracts>`. It is important to remember to set the
:guilabel:`Work Entry Source` as :guilabel:`Attendances`, and :guilabel:`Wage Type` as
:guilabel:`Hourly Wage`.
To record the hours logged by the employee using *Attendances* app:
#. Go to :menuselection:`Attendances app`.
#. The employee can check-in/out, via the kiosk mode and the time will be logged automatically.
#. In the :menuselection:`Payroll app`, review the attendance work entries generated from
:menuselection:`Payroll app --> Work Entries --> Work Entries`.
#. Next, generate the :ref:`payslips <hong_kong/running_payslips>` and process the payment.
.. image:: hong_kong/hk-attendance-work-entry.png
:align: center
:alt: Hong Kong Attendance Work Entry.
.. image:: hong_kong/hk-attendance-payslip.png
:align: center
:alt: Hong Kong Attendance Payslip.
Time Off with Payroll
---------------------
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.
Go to :menuselection:`Payroll app --> Configuration --> Work Entry Types` and click :guilabel:`New`.
There are two checkboxes to be considered when setting up the work entry type:
- :guilabel:`Use 713`: Include this leave type as part of 713 computation.
- :guilabel:`Non-full pay`: 80% of the :abbr:`ADW (Average Daily Wage)`.
.. image:: hong_kong/hk-work-entry-type.png
:align: center
:alt: Hong Kong Work Entry Type.
.. seealso::
:ref:`Creating and configuring work entry types <payroll/work-entries>`
Understanding 713 Ordinance
---------------------------
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.
The ADW computation is as follows:
.. figure:: hong_kong/hk-adw.png
:alt: Hong Kong ADW Formula.
: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.
.. note::
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.
.. note::
Before generating payslips, ensure the statuses are :guilabel:`Done` to validate the outcome.
.. list-table::
:header-rows: 1
* - Period
- Days
- Wage
- Commission
- Total
- ADW
- Leave Value
* - Jan
- 31
- $20200
- $0
- $20200
- $651.61 ($20200/31)
- N/A
* - Feb
- 28
- $20200
- $5000
- $25200
- $769.49 ($45400/59)
- N/A
* - Mar (One Day Annual Leave)
- 31
- $20324.33
- $0
- $20324.33
- $730.27 ($65724.33/90)
- $769.49
* - Apr (One Day 80% Sick Leave)
- 30
- $20117.56
- $0
-
-
- $584.22 ($730.27*0.8)
.. example::
Here is an example demonstrating the 713 logic:
- **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.
- **Feb**: Generate a similar payslip, but add an :guilabel:`Other Input Type` for the
:guilabel:`Commission`.
- **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.
.. image:: hong_kong/hk-march-713.png
:align: center
:alt: Hong Kong March 713.
- **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.
.. image:: hong_kong/hk-apr-713.png
:align: center
:alt: Hong Kong April 713.
.. note::
The value of :abbr:`ADW (Average Daily Wage)` is computed in the backend, and not be visible to
the user.
.. seealso::
- `HK 713 Ordinance <https://www.labour.gov.hk/eng/public/wcp/ConciseGuide/Appendix1.pdf>`_
- `HK 418 Ordinance <https://www.workstem.com/hk/en/blog/418-regulations/>`_
Generate reports
----------------
Before generating the below reports, setup the following in :menuselection:`Settings app -->
Payroll`.
Configure the following in the :guilabel:`Accounting` section:
- Tick the :guilabel:`Payroll HSBC Autopay` checkbox.
- :guilabel:`Autopay Type`: Set as :guilabel:`H2H Submission`.
- Select the :guilabel:`Bank Account` to use.
Configure the following in the :guilabel:`HK Localization` section:
- :guilabel:`Employer's Name shows on reports`
- :guilabel:`Employer's File Number`
- :guilabel:`Manulife MPF Scheme`
.. image:: hong_kong/hk-report-setup.png
:align: center
:alt: Hong Kong Payroll Settings.
IRD report
~~~~~~~~~~
There are a total of **four** IRD reports available:
- :guilabel:`IR56B`: employer's Return of Remuneration and Pensions.
- :guilabel:`IR56E`: notification of Commencement of Employment.
- :guilabel:`IR56F`: notification of Ceasation of Employment (remaining in HK).
- :guilabel:`IR56G`: notification of Ceasation of Employment (departing from HK permanently).
Go to :menuselection:`Payroll app --> Reporting`, and select one of the :guilabel:`IR56B/E/F/G
Sheet` options:
#. Click on :guilabel:`New`.
#. Fill in the relevant information for the IRD report.
#. Click on :guilabel:`Populate`, and the :guilabel:`Eligible Employees` smart button appears.
#. The :guilabel:`Employee Declarations` status is :guilabel:`Draft` and changed to
:guilabel:`Generated PDF` status once the schedule runs.
#. Once the PDF is generated, the IRD form may be downloaded.
.. image:: hong_kong/hk-ir56b.png
:align: center
:alt: Hong Kong IR56B report.
.. note::
The scheduled action called *Payroll: Generate pdfs* can be manually triggered. It is set by
default to run the PDF generation monthly.
Manulife MPF sheet
~~~~~~~~~~~~~~~~~~
Go to :menuselection:`Payroll app --> Reporting --> Manulife MPF Sheet`.
#. Click on :guilabel:`New`.
#. Select the relevant :guilabel:`Year`, :guilabel:`Month`, and :guilabel:`Sequence No.`.
#. Click on :guilabel:`Create XLSX`.
#. The *Manulife MPF XLSX* file is then generated, and available for download.
.. image:: hong_kong/hk-manulife-sheet.png
:align: center
:alt: Hong Kong Manulife Sheet.
.. note::
Odoo will not be developing further reports for other MPF trustee as there will soon be an
eMPF platform setup by the local government.
.. seealso::
`eMPF <https://www.mpfa.org.hk/en/empf/overview>`_
HSBC autopay report
~~~~~~~~~~~~~~~~~~~
If *HSBC Autopay* is selected as the batch payment method, click on :guilabel:`Create HSBC Autopay
Report`, and fill in the mandatory fields:
.. image:: hong_kong/hk-generate-autopay.png
:align: center
:alt: Hong Kong HSBC Autopay wizard.
This creates an :file:`.apc` file format which can be uploaded to the HSCB portal for processing.

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB