Skip to content

Commit 5e7cd7b

Browse files
committed
[ADD] Payroll: Turkey localization
1 parent b503251 commit 5e7cd7b

File tree

7 files changed

+331
-1
lines changed

7 files changed

+331
-1
lines changed

content/applications/hr/payroll/payroll_localizations.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ Payroll localization modules are available for the countries listed below.
9191
- :doc:`Saudi Arabia <payroll_localizations/saudi_arabia>`
9292
- Slovakia
9393
- Switzerland
94-
- Türkiye
94+
- :doc:`Türkiye <payroll_localizations/turkey>`
9595
- :doc:`United Arab Emirates <payroll_localizations/united_arab_emirates>`
9696
- :doc:`United States <payroll_localizations/united_states>`
9797

@@ -105,6 +105,7 @@ Payroll localization modules are available for the countries listed below.
105105
payroll_localizations/jordan
106106
payroll_localizations/mexico
107107
payroll_localizations/saudi_arabia
108+
payroll_localizations/turkey
108109
payroll_localizations/united_arab_emirates
109110
payroll_localizations/united_states
110111
payroll_localizations/employment_hero
Lines changed: 329 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,329 @@
1+
=======
2+
Türkiye
3+
=======
4+
5+
The Türkiye payroll localization covers salary computations for employees, including both employee
6+
and employer payroll taxes. It accounts for federal and state regulations.
7+
8+
Before configuring the Türkiye localization, refer to the general :doc:`payroll <../../payroll>`
9+
documentation, which includes the basic information for all localizations, as well as all universal
10+
settings and fields.
11+
12+
.. _payroll/turkey_apps:
13+
14+
Apps & modules
15+
==============
16+
17+
:ref:`Install <general/install>` the following modules to get all the features of the Türkiye payroll
18+
localization:
19+
20+
.. list-table::
21+
:header-rows: 1
22+
23+
* - Name
24+
- Technical name
25+
- Dependencies
26+
- Description
27+
* - :guilabel:`Türkiye - Payroll`
28+
- `l10n_tr_hr_payroll`
29+
- - hr_payroll
30+
- Includes all salary rules, leave logic, and compensation rules compliant with Türkiye labor
31+
laws.
32+
* - :guilabel:`Türkiye - Payroll with Accounting`
33+
- `l10n_tr_hr_payroll_account`
34+
- - hr_payroll_account
35+
- l10n_tr_hr_payroll_account
36+
- l10n_tr_hr_payroll
37+
- Links payroll and accounting by creating journal entries (per payslip if needed) to record
38+
payroll in the company's books.
39+
40+
.. seealso::
41+
:doc:`Configure the Türkiye fiscal localization
42+
<../../../finance/fiscal_localizations/turkey>`
43+
44+
General configurations
45+
======================
46+
47+
First, the company must be configured. Navigate to :menuselection:`Settings app --> Users &
48+
Companies --> Companies`. From the list, select the desired company, and configure the following
49+
fields:
50+
51+
- :guilabel:`Company Name`: Enter the business name in this field.
52+
- :guilabel:`Address`: Complete the full address, including the :guilabel:`City`, :guilabel:`State`,
53+
:guilabel:`ZIP`, and :guilabel:`Country`.
54+
- :guilabel:`Tax ID`: Enter the company's tax ID.
55+
- :guilabel:`Company ID` : Enter the business's ID number.
56+
- :guilabel:`Currency`: By default, :abbr:`TRY (Turkish lira)` is selected. If not, select
57+
:guilabel:`TRY` from the drop-down menu.
58+
- :guilabel:`Phone`: Enter the company phone number.
59+
- :guilabel:`Email`: Enter the email used for general contact information.
60+
61+
Employees
62+
=========
63+
64+
Every employee being paid must have their employee profiles configured for the Türkiye payroll
65+
localization. Additional fields are present after configuring the database for Türkiye.
66+
67+
To update an employee form, open the :menuselection:`Employees` app and click on the desired
68+
employee record. On the employee form, configure the required fields in the related tabs.
69+
70+
Work tab
71+
--------
72+
73+
Enter the :guilabel:`Work Address` for the employee in the :guilabel:`Location` section of the
74+
:guilabel:`Work` tab.
75+
76+
Personal tab
77+
------------
78+
79+
Ensure the employee has a minimum of one :ref:`trusted bank account <employees/private-contact>`
80+
listed in the :guilabel:`Bank Accounts` field in the :guilabel:`Private Contact` section.
81+
82+
These accounts are used to pay the employee. Payroll **cannot** be processed for employees without a
83+
*trusted* :ref:`bank account <employees/private-contact>`. If no trusted bank account is set, a
84+
warning appears on the **Payroll** dashboard and an error occurs when attempting to run payroll.
85+
86+
Payroll tab
87+
-----------
88+
89+
Contract overview section
90+
~~~~~~~~~~~~~~~~~~~~~~~~~
91+
92+
This section holds information that drives salary calculations. Ensure the following fields are
93+
configured:
94+
95+
- :guilabel:`Contract`: Ensure a contract start date is entered in the first field.
96+
- :guilabel:`Wage Type`: Select how the employee is paid.
97+
98+
- Select :guilabel:`Fixed Wage` for salaried employees who receive the same amount each pay
99+
period.
100+
- Select :guilabel:`Hourly Wage` for employees paid based on hours worked.
101+
102+
.. tip::
103+
Set a default :guilabel:`Wage Type` in the salary :ref:`Structure Type
104+
<payroll/structure-types>` to configure employees in bulk. If needed, the default can be
105+
overridden on individual employee records if exceptions are needed.
106+
107+
- :guilabel:`Net to Gross`: Tick this checkbox if the gross salary is calculated based on the net
108+
salary.
109+
- :guilabel:`Contract Type`: Determines how the employee is paid and classified, such as
110+
:guilabel:`Permanent`, :guilabel:`Temporary`, or :guilabel:`Student`.
111+
- :guilabel:`Pay Category`: Select :guilabel:`Türkiye: Employee` for this field. This defines
112+
when the employee is paid, their default working schedule, and the work entry type it applies to.
113+
114+
.. image:: turkey/contract-tr.png
115+
:alt: The contract overview section of the employee form of the payroll tab.
116+
117+
Schedule section
118+
~~~~~~~~~~~~~~~~
119+
120+
- :guilabel:`Work Entry Source`: Defines how :doc:`work entries <../work_entries>` are generated for
121+
payroll during the specified pay period. The options are:
122+
123+
- :guilabel:`Working Schedule`: Based on the employee's assigned :ref:`working schedule
124+
<employees/schedule>` (e.g., 40 hours per week).
125+
- :guilabel:`Attendances`: Based on :doc:`approved checked-in hours
126+
<../../attendances/management>` in the **Attendances** app.
127+
- :guilabel:`Planning`: Based on :ref:`scheduled shifts <planning/shifts>` in the **Planning**
128+
app.
129+
130+
- :guilabel:`Working Hours`: Using the drop-down menu, select the default work schedule. This is
131+
particularly important for employees available to receive overtime pay (typically hourly
132+
employees, not salaried).
133+
134+
Payroll configuration
135+
=====================
136+
137+
Several sections within the **Payroll** app installs a Salary Structure, Structure Type, Rules, and
138+
Parameters specific to the Türkiye.
139+
140+
Salary structures & structure types
141+
-----------------------------------
142+
143+
When the **l10n_us_tr_payroll** module is :ref:`installed <payroll/turkey_apps>`, a new
144+
:guilabel:`Salary Structure` gets installed, :guilabel:`Türkiye: Regular Pay`. This structure
145+
includes one :guilabel:`Structure Type`, :guilabel:`Türkiye: Employee`.
146+
147+
The :guilabel:`Salary Structure` contains all the individual :ref:`salary rules
148+
<payroll/turkey_apps>` that informs the **Payroll** app how to calculate employee payslips.
149+
150+
.. image:: turkey/structure-types-tr.png
151+
:alt: The Türkiye salary structure in the salary structures list.
152+
153+
.. _payroll/turkey_rules:
154+
155+
Salary rules
156+
------------
157+
158+
To view the salary rules that inform the salary structure what to do, navigate to
159+
:menuselection:`Payroll app --> Configuration --> Structures` and expand the :guilabel:`Türkiye:
160+
Employee` group to reveal the :guilabel:`Türkiye: Monthly Pay` structure type. Click
161+
:guilabel:`Türkiye: Monthly Pay` to view the detailed salary rules.
162+
163+
.. image:: turkey/tr-rules-top-half.png
164+
:alt: The top portion of the Türkiye salary rules.
165+
166+
Each rule defines how pay is calculated, taking into account factors such as commissions, bonuses,
167+
taxes, and insurance.
168+
169+
Rule parameters
170+
---------------
171+
172+
Some calculations require specific rates associated with them, or wage caps. *Rules Parameters* are
173+
capable of listing a value, either a percentage or a fixed amount, to reference in the salary rules.
174+
175+
.. example::
176+
The wage base for Social Security tax calculations has a cap for 2025, accounted for in the `US:
177+
FICA OASDI Cap` parameter.
178+
179+
Most rules pull information stored in the parameters module to get the rate of the rule (a
180+
percentage) and the cap (a dollar amount).
181+
182+
To view rule parameters, navigate to :menuselection:`Payroll app --> Configuration --> Rule
183+
Parameters`. Here, all rule parameters are displayed with their linked :guilabel:`Salary Rules`,
184+
which can be accessed. Review the parameters associated with a rule by looking for the
185+
:guilabel:`Name` of the rule, and make any edits as needed.
186+
187+
.. example::
188+
The Unemployment tax of a company is different from the one added by default in Odoo. To update
189+
this, navigate to :menuselection:`Payroll app --> Configuration --> Rule Parameters`, then,
190+
filter the results by :abbr:`FUTA (Federal Unemployment Tax Act)`, or the name of the state that
191+
needs editing, and edit the corresponding rate from the list.
192+
193+
.. important::
194+
Odoo adds updated rule parameters for the current calendar year. It is **not** recommended to
195+
edit rule parameters **unless a federal or state parameter has changed**, and is different from
196+
the rule parameters created by Odoo. Check with all local and national regulations *before*
197+
making any changes to rule parameters.
198+
199+
Run Türkiye payroll
200+
===================
201+
202+
Before running payroll, the payroll officer must validate employee :doc:`work entries
203+
<../work_entries>` to confirm pay accuracy and catch errors. This includes checking that all time
204+
off is approved and any overtime is appropriate.
205+
206+
Work entries sync based on the employee's :doc:`contract <../contracts>` configuration. Odoo pulls
207+
from the assigned working schedule, attendance records, planning schedule, and approved time off.
208+
209+
Any :ref:`discrepencies or conflicts <payroll/conflicts>` must be resolved, then the work entries
210+
can be :ref:`regenerated <payroll/regenerate-work-entries>`.
211+
212+
Once everything is correct, draft payslips can be :ref:`created individually <payroll/process>` or
213+
in :doc:`batches <../batches>`, referred to in the **Payroll** app as *Pay Runs*.
214+
215+
.. image:: turkey/work-entries-tr.png
216+
:alt: The work entries for a pay run, with some time off entered in the work entries.
217+
218+
.. note::
219+
To cut down on the payroll officer's time, it is typical to process payslips in batches, either
220+
by wage type (fixed salary vs hourly), pay schedule (weekly, bi-weekly, monthly, etc.),
221+
department (direct cost vs. administration), or any other grouping that best suits the company.
222+
223+
The process of running payroll includes different actions that need to be executed to ensure that
224+
the amount withheld from payroll taxes is correct, the amount that the employee receives as their
225+
net salary is correct, and the computation of hours worked reflects the employee's actual hours
226+
worked, among others.
227+
228+
When running a payroll batch, check that the period, company, and employees included are correct
229+
*before* starting to analyze or validate the data.
230+
231+
Once the payslips are drafted, review them for accuracy. Check the :guilabel:`Worked Days & Inputs`
232+
tab, and ensure the listed worked time is correct, as well as any other inputs. Add any missing
233+
inputs, such as commissions, tips, reimbursements, that are missing.
234+
235+
Next, check the various totals (gross pay, employee taxes, benefits, employer taxes, net salaries),
236+
then click :guilabel:`Compute Sheet` to update the salary calculations, if there were edits. If
237+
everything is correct, click :guilabel:`Validate`.
238+
239+
.. image:: turkey/check-payslip-tr.png
240+
:alt: The worked days tab of a payslip.
241+
242+
Accounting check
243+
----------------
244+
245+
The accounting process when running payroll has two components: :ref:`creating journal entries
246+
<payroll/journal>`, and :ref:`registering payments <payroll/register>`.
247+
248+
.. _payroll/journal:
249+
250+
Journal entry creation
251+
~~~~~~~~~~~~~~~~~~~~~~
252+
253+
After payslips are confirmed and validated, journal entries are posted either individually, or in a
254+
batch. The journal entry is created first as a draft.
255+
256+
.. important::
257+
It must be decided if journal entries are done individually or in batches *before* running
258+
payroll.
259+
260+
.. image:: turkey/create-draft-entry.png
261+
:alt: All payslips in a draft state.
262+
263+
Four accounts from the US :abbr:`CoA (Chart of Accounts)` are included with the payroll
264+
localization:
265+
266+
- `611000 Salaries & Wages`: Records gross salary and the employer's portion of payroll expenses.
267+
Also groups values from rules without specific accounts (e.g., company-specific benefits).
268+
- `230100 Employee Payroll Taxes`: Withheld taxes from employees, which the employer must file and
269+
pay. The partner and label columns of the journal entry indicate the specific tax.
270+
- `230200 Employer Payroll Taxes`: Employer portion of payroll taxes to be filed and paid. The
271+
partner and label columns of the journal entry indicate the specific tax.
272+
- `230000 Salary Payable`: Net salary owed to the employee.
273+
274+
.. note::
275+
The :abbr:`CoA (Chart of Accounts)` configuration is done by default when a company is located in
276+
the US. The account codes and names can be edited to suit the company's needs. If there is no
277+
:abbr:`CoA (Chart of Accounts)` account associated with a salary rule (used in a salary
278+
structure), Odoo uses the account `Salary Expenses` to create the journal entry, regardless of
279+
the nature of the move.
280+
281+
If everything seems correct on the journal entry draft, post the journal entries.
282+
283+
.. image:: turkey/post-entries.png
284+
:alt: Journal entries posted.
285+
286+
.. _payroll/register:
287+
288+
Register Payments
289+
-----------------
290+
291+
After the :ref:`journal entries <payroll/journal>` are validated, Odoo can generate payments.
292+
293+
.. important::
294+
To generate payments from payslips,employee's **must** have a *trusted* bank account. If the
295+
employee's bank account is *not* marked as `trusted`, NACHA files **cannot** be generated through
296+
Odoo.
297+
298+
Payments can be :guilabel:`Grouped by Partner` if there is a partner associated with a salary rule.
299+
300+
.. image:: turkey/paid.png
301+
:alt: Payslips with a status of paid.
302+
303+
Close Payroll
304+
-------------
305+
306+
If there are no errors, payroll is completed for the pay period.
307+
308+
Reports
309+
=======
310+
311+
The US localization contains several reports unique to the US, which provide tax information for
312+
employees, as well as the ability to integrate with outside organizations such as ADP.
313+
314+
Export data to third-party apps
315+
-------------------------------
316+
317+
The *ADP Export* report generates a CSV file that can be submitted to ADP, which then makes payments
318+
to the employees.
319+
320+
The CSV file summarizes the employee's worked hours during a specified time period, correlating to
321+
their salary or hourly wage. The report is generated from :doc:`work entry <../work_entries>`
322+
*after* any time off is confirmed.
323+
324+
The export format is meant to match with the ADP format. Since companies can customize their portal
325+
and may require some changes, the data is there to be fed to ADP to run payroll in it.
326+
327+
.. important::
328+
To access the ADP Export report, the `Türkiye - Payroll - Export to ADP` module **must** be
329+
:ref:`installed <general/install>`.
22.8 KB
Loading
18 KB
Loading
14.9 KB
Loading
17.3 KB
Loading
9.41 KB
Loading

0 commit comments

Comments
 (0)