đŸŸ„ [EXP] Swiss Payroll - How to's
đŸŸ„

Swiss Payroll in Odoo - Some how to's

A few numbers

Release of the Certified Payroll localization on February 2025. Since then:

  • Number of production databases running Swiss Payroll: +600 databases
  • Number of payslips generated in production: +20,000 payslips

Set-up

Prerequisites
  • Odoo version: minimum 17.0

  • Company localization: Switzerland

  • Certification: The Swissdec module is certified ELM 5.0 and ELM 5.3

Installation
  • In your Odoo database, install the module Swissdec ELM 5.0 and ELM 5.3 from the Apps

Note that if Odoo is freshly installed with a Swiss localization and payroll app, the ELM modules are automatically installed.

Usual set-up for Swiss Payroll follows this logic:

On a regular basis (i.e. every year for the payroll settings, every month for the running payroll, every day for the employee and contracts), this process needs to be updated to always be aligned with the current situation of the company. 


Available resources for the general configuration

For demo purpose, following videos can be shared: Demo FR and Demo EN

For step-by-step configuration of the solution and demo on the transmission workflow, refer to the following video:

In Odoo 18: https://www.youtube.com/watch?v=1C0E9fTSeTk


In Odoo 19: https://www.youtube.com/watch?v=_y12os9mns8  

In order to quickly create and test the workflow in a database, you can use this link to duplicate a template Odoo 19 database: https://www.odoo.com/odoo-enterprise/template/53154?token=e2fbc8dd-d06c-42f2-8a26-ed5eabd0da81 

As the solution is Swissdec certified, following resources are useful to know if needs are part of Swissdec requirements: Swissdec Data Receiver List and Swissdec Document 


Practical use cases

Before starting, note that Odoo Swiss Payroll should always be done on a yearly basis. In other words, except if the company was created during the year or that an employee joined during the year, payslips should always be generated from January to December. 

#

NEED

SOLUTION

1

EN: What is certified by Swissdec?

------------------------------

FR: Qu'est-ce qui est certifié Swissdec dans la localisation de paie Odoo?

  • The IAP transmitter 
  • The salary computation engine
  • Fields added to the Employee model

2

EN: How to deal with warnings

------------------------------

FR: Comment gérer les avertissements

On a draft payslip, any highlighted warnings should be fixed before creating the draft entry (i.e. confirming the payslip):

Even if they might not seem relevant for each and every companies, each warning has a purpose, either related to the payslip computation or the Swissdec transmission. 

It's NOT enough to fix the warning AFTER confirming the payslip. It should be done before. If you ever created and posted a payslip that was containing warnings, you would need to cancel, delete and create it again once those warnings are solved. 

NB: in draft, by clicking on the blue arrow, you are brought to the model where the data should be changed. Any changes on those fields are reflected automatically on the corresponding payslip. Don't forget to recompute the sheet. 

From the technical point of view, warnings are coming from the employee_meta_data variable coming from the code, and is computed from this method: Github repository 19.0 - _compute_employee_meta_data method

3

EN: The Source-Tax/IS amount is not right, what could be the reason?

------------------------------

FR: Le montant d'impĂŽt Ă  la source calculĂ© n'est pas correct, quelle peut en ĂȘtre la raison?

The Source-Tax computation for eligible employees is done on a yearly basis

From a general point of view, if you are willing to do Swiss Payroll on Odoo, you need to generate payslips starting from the beginning of the year (January). That also means to reproduce the update of the Employee data in each corresponding month (as it was done before switching to Odoo), reproducing errors as well, IS corrections,...

Also, if the employee has another employment, it's important to add the total income of their other job in order to adjust the IS base amount:

It's because Swissdec is computing the IS amount based on the sum, and not the average (source: Swissdec Book - Page 59 for computation examples regarding the AVS). 

4

EN: Source-Tax Rates: manual or automatic import every year?

------------------------------

FR: Les taux d'impÎt à la source: doit-on les importer manuellement chaque année ou est-ce fait automatiquement?

For now, the source-tax rates import should be triggered manually through the corresponding feature in the Payroll app (on a yearly basis):

The right Tax Year should be chosen, as well as the targeted cantons:

5

EN: Source-Tax: who is subjected to IS?

------------------------------

FR: ImpÎt à la source: qui est concerné?

Here is the definition:

3.1.1 Workers residing in Switzerland
Workers without a permanent residence permit (C permit) who are resident in Switzerland for tax purposes are subject to withholding tax on their income from employment. Spouses living in the same household are not subject to withholding tax if one of them is a Swiss national or has a permanent residence permit. If
the spouse who is a Swiss national or has a permanent residence permit resides abroad in a separate domicile, the worker who is employed and resides in Switzerland remains subject to withholding tax (see Art. 83 LIFD).

3.1.2 Workers residing abroad
Regardless of their nationality and residence permit, workers (cross-border workers or workers staying for a week or a short period) residing abroad are taxed at source on salary income and compensation income paid to them by a debtor of the taxable service who has their domicile, registered office, effective administration, a permanent establishment, or a fixed base in Switzerland (see Art. 91, para. 1, LIFD). This means that a worker residing abroad is subject to taxation at source even if they are a Swiss national or hold a permanent residence permit. The divergent provisions of the relevant DTA remain reserved.

Workers who are not resident in Switzerland and who receive a salary or other remuneration for work in international traffic on board a ship, aircraft, or road transport vehicle from an employer with its registered office or permanent establishment in Switzerland are subject to withholding tax regardless of their nationality or residence permit (see Art. 91, para. 2, LIFD). To determine on a case-by-case basis whether withholding tax must be levied, reference must be made to the provisions of the applicable DTAs. These are summarized in the “Overview of double taxation agreements” contained in the current “FTA Circular on the withholding tax treatment of employees in international transport companies.”

Source: Circulaire n°45 - DĂ©partement fĂ©dĂ©ral des finances - Juin 2019 (page 9 - section 3.1.1 and 3.1.2)

6

EN: Annual salary paid as one-shot, various cases:

  • Salary by task
  • Case of a retired employee, having a contract on-going for the full year but who is only paid during one month of the year. How to make it work?
  • AVS exempted for small yearly salaries

------------------------------

FR: Salaire annuel payé en une fois, différents cas de figure:

  • Salaire par tĂąche
  • Cas d'un retraitĂ©, avec un contrat annuel mais payĂ© uniquement durant un mois de l'annĂ©e
  • Cas des employĂ©s non-soumis aux cotisations AVS (salaire annuel en-dessous du seuil AVS)

1. Annual salary paid as one-shot (ex. 2 000 CHF/year)

While the wage type (1018) Salary by task could be used to record one-shot payment, it would trigger the AVS cotisation even if the threshold is not reached. Therefore, it would be easier to set a (1000) Monthly salary as a one-time payment for the corresponding month. 

NB: for employees who are only paid by tasks, you have to check that box (if they don't have weekly hours or lessons on their contract):

2. AVS exemption for small salaries (< 2 300 CHF/year)

The "Exempted" AVS Special Status should be set on the Employee form if it is 100% sure that he will not go above the yearly amount for the given year. If it happens that the Employee yearly salary eventually goes above the limit, Odoo will NOT recompute the AVS cotisation he should pay, starting from the beginning of the year. 

3. AVS Deductible for Retired Employees (16 800 CHF/year)

Even if the deductible is yearly, Odoo will split it per month (1400 CHF/month). Therefore, if only one payslip is generated for the year, it won't apply the deductible in the right way. 

What should be done is to generate payslip every month for such employee (for the contract period), even with a 0 CHF salary. For the month where the yearly salary is effectively paid, record it through a one-time payment for that month as explained above. 

7

EN: Configure the LPP in %

------------------------------

FR: Configurer les contributions LPP en %

If the ELM 5.3 module is installed, it is possible to choose the LPP computation method from the "Insurances" tab on the Employee:

Either with regular amount if the checkbox is not set, or through percentages. 

8

EN: Set the PP complementary contributions

------------------------------

FR: Définir la contribution LPP complémentaire

Use the (5052) PP Complementary Contributions

9

EN: Be able to set flexible rate on IJM and LAAC for Employer Rate

------------------------------

FR: Définir des taux flexibles de taux employeur sur l'IJM et la LAAC

If the ELM 5.3 module is installed, it is possible to set flexible rate for the Employer Rates:

For the LAAC:

For the IJM:


10

EN: Set-up CCT or LPCFam (in rate % or general amounts)

------------------------------

FR: Mettre en place les cotisations CCT et LPCFam (en pourcentage ou des montants généraux)

Either use:

54XX/74XX wage types for specific rates

5300/7300 wage types for specific amounts

Those wage types must be encoded at the Employee level in the monthly salary wages:

11

EN: Computation of IS for foreign worker

------------------------------

FR: Calcul de l'impÎt à la source pour un travailleur étranger

In case a foreign worker is subjected to Source-Tax, the IS amount will be computed based on the canton from the Workplace:

12

EN: Encoding of Swiss specific leaves for employees and impact on the salary

------------------------------

FR: Encoder les absences spécifiques à la Suisse et comprendre leur impact sur le calcul du salaire

Along with the Payroll localization, specific Swiss time off are created in the time off types:

By grouping them by Country, we identify them in the list:

Each of this absence has an impact on the payslip of the month they are posted. This is done through the "Disability" and "Continued Pay" percentages applied when recording them:

Which impact?

  • Continued Pay %: it will reduce the gross salary amount by the corresponding amount. In other terms, a 50% continued pay will impact that this time off is paid at 50% of the corresponding salary
  • Disability %: it will determine which part of the "continued paid salary" is attributed to an absence or to worked days. 

Example:

  • One employee has a 5000CHF monthly salary. 
  • He's off during the full month, with a continued pay % of 60% and a disability of 50%. 
  • The resulting salary is:

    • 3000CHF
    • Split in two parts: 1500CHF on time off, 1500CHF on salary/worked days

Display: 

  • When recorded, absences are part of the monthly wages of the generated payslip and compute the gross salary accordingly:

 

13

EN: What can be changed on a wage type and what shouldn't be changed (i.e. how to make sure wage types are taken into account for vacation computation)

Can I create my own wage type?

------------------------------

FR: Quels Ă©lĂ©ments des types de salaire peuvent ĂȘtre modifiĂ©s ou non (par exemple, concernant l'impact d'un type de salaire sur la base de calcul des vacances)

Est-ce que je peux créer mes propres types de salaire?

By default, nothing should be changed at the wage type level in order to grant the Swissdec certification. 

This is why there is no option to create wage types in the model:

For any unmet cases, the first step is to check if another wage type cannot answer the need, by checking the documentation or asking through odoo.com/help

From a more practical point of view, it is possible to edit any parts of the wage types except the Python expressions/computation. To be noted that it's the responsibility of the one who changes those settings to make sure that the expected result is the right one. Also, after update of the model or upgrade to another versions, some settings will be reset by the localization. 

About wage type creation (same responsibility concern apply), you can decide to duplicate similar wage type when doing so and adapt the settings accordingly. Note that, in order to keep unique CH code per wage type, you could use suffix to manually created ones, such as:

  • 1060.01
  • 1400.02
  • ...

That way, added wage type will remain unique and will still appear on the payslip PDF. 

Exceptions about the settings reset during the upgrade still exist:

  • The L10N Ch Vacation Pay Included and L10N Ch 13Th Month Hourly Included can be checked/unchecked on wage types that should impact the base amount for vacation computation on the payslip:

  • Also, the "credit" and "debit" accounts of each wage type can be changed depending on the company chart of account/salary accounting entries:

14

EN: Be in one app free Swiss Payroll database - pros and cons

------------------------------

FR: Base de données gratuite avec l'app Paie - avantages et limitations

It is technically possible to create a database through odoo.com/trial and only select the Payroll app:

This will result in a one-app-free database for Swiss Payroll. Time off app will be installed as well and be part of the one-app free. 

However, Accounting won't be installed, which means:

  • That you will not be able to generate the accounting entry for the salaries
  • That you will not be able to generate the .xml SEPA file for paying the employee salaries 

15

EN: What salary to indicate on the Employee contract (part time)

------------------------------

FR: Quel salaire mensuel définir sur la fiche Employé (temps partiel)

The Monthly Wage defined on the Employee form is directly linked to the Occupation Rate:

In this screenshot, 6000 CHF is the salary of the employee with a 80% occupation rate. 

This is NOT the corresponding 100% salary amount the employee would get if he was at 100% of occupation rate. 

16

EN: Set-up the 100% salary on the contract and make it displayed on the payslip PDF

------------------------------

FR: Encoder le salaire équivalent à 100% sur son contrat et l'afficher sur le PDF: bonnes pratiques

In standard, this is not possible yet but a task is created to add it in the future. 

Prior to this standard update, it would require some customization to make it work. 

A non-intrusive advice is to add a new field on the hr.employee model to store the 100% equivalent salary as an information. 

Then, through an inherited view, add this field to the header of the Payslip, next to the "Activity Rate". 

By doing so, we don't impact the salary computation and the salary rules linked to the Swissdec certification.

17

EN: Net wage warranty in case of long-term illness

------------------------------

FR: Garantie du net dans le cas de maladie longue durée

In case of long-term illness, net wage warranty may be computed and added/subtracted from the net salary to ensure that the contract paid salary remains the same. This is not automatically done in Odoo, but it could be manually computed and added through the (5110) Cash Advantage Correction wage type. 

18

EN: Set up additional monthly wages (night shift, night work, overtime,...) at the payslip level

------------------------------

FR: Définir des salaires mensuels (travail de nuit, heures supplémentaires) au niveau de la fiche de paie

Once the payslip is generated and still at the "draft" level, additional monthly wages, along with their base and the corresponding factor can be added:

Once recorded, you can click on "Compute Sheet" to take it into account for the payslip computation. 

You can also decide the "Recompute Whole Sheet" to get rid of any manually added inputs (monthly wages or additional wage types) on the payslip:

19

EN: Time off: how to understand the disability and continued pay %?

------------------------------

FR: Absences/congés: comprendre les taux d'invalidité et de maintien de salaire

When recording time off with Swiss Payroll Localization, new fields appear:

Which impact do they have?

  • Continued Pay %: it will reduce the gross salary amount by the corresponding amount. In other terms, a 50% continued pay will impact that this time off is paid at 50% of the corresponding salary
  • Disability %: it will determine which part of the "continued paid salary" is attributed to an absence or to worked days. 

Example:

  • One employee has a 5000CHF monthly salary. 
  • He's off during the full month, with a continued pay % of 60% and a disability of 50%. 
  • The resulting salary is:

    • 3000CHF
    • Split in two parts: 1500CHF on time off, 1500CHF on salary/worked days

Display: 

  • When recorded, absences are part of the monthly wages of the generated payslip and compute the gross salary accordingly:

 

20

EN: Computation of the illness pay rate ("Jour de carence", sick days paid by the company, sick days paid at 80%,...), depending on the canton

------------------------------

FR: Calcul et encodage des jours de congé maladie (en tenant compte des jours de carence, et des taux de maintien de salaire propres à chaque canton)

Such canton-specific computation rules are not part of the module for now. They should be manually set through the time off overview of the corresponding employee, with the corresponding Continued Pay %. For example, if an employee takes sick time off for 10 days, and that: 

  • First day is the "Carence" day, on which continued pay is 0,
  • Next four days are paid at 100%,
  • Next five days are paid at 80%,

Those should be recorded on the "Time off" smartbutton of the Employee, which the corresponding rates:

So that the corresponding payslip will look like this:

Description can be adapted here to make it clearer (if needed). 

Absences/manually added monthly wages can also be recorded at the payslip level when in "Draft" stage. 

21

EN: When is the email sent to employee about the payslip generation/how to communicate the PDF through a portal access to employees (Odoo 19)

------------------------------

FR: Quand est envoyé l'email prévenant l'employé de la génération d'une fiche de paie / comment communiquer le PDF via un coffre-fort pour chaque employé (sur Odoo 19 en passant par le portail)

At the moment the Pay Run is confirmed (i.e. the draft entry is created), an email is sent to the Employees, depending if yes or no you have the Document app installed:

Content of the email template can be adapted, either at the body level, or concerning the recipient of the email:

Which could be set to the Employee personal email address with the following Python expression in the "To (Emails)" field:


If the Document app is installed, it is possible to store the payslip PDF in each employee personal drive, so that it is accessible from their internal user/portal user interface. How to make it work?

  • Install Documents app, synchronize the HR documents in the settings. Once the Pay Run is confirmed, a scheduled action will generate the Payslips PDF and store them in the Documents app (+ link them to the Employee)

  • The email is sent to the Employee email address (as defined above), warning them that the PDF is now available. In order to access it, they can open the Documents app (if they are internal users) or connect to their portal access (if they are portal users). Indeed, from Odoo 19, it is now possible to link a portal user to an employee. 

  • When logged in the portal, they can access their Documents:

  • And access their payslip:

22

EN: How to easily generate the salary payment file

------------------------------

FR: Comment générer le fichier de paiement des salaires

The first step is to activate the SEPA payment in the Payroll Settings:

As for the payment of vendor bills in the Accounting, this feature implies that the IBAN (and corresponding bank information) are defined on the Bank journal and on the Employees:

Bank journal: 

Employees (important to set it as Trusted):

Once set, Payroll Managers can generate the payment file from the Pay Run:

And specify the Export format, the bank journal on which the payment should be made, as well as the payment date if it shouldn't be done immediately. 

Note that this technical module should be installed to benefit from the ISO20022 export format:

23

EN: Why is the number of days off an integer on the Employee form

------------------------------

FR: Pourquoi le nombre de congés est un entier sur la fiche employé

The number of Holidays defined on the Employee form is an integer because it represents the number of days for a 100% occupation rate in the company

24

EN: Minimum annual salary to be AVS exempted

------------------------------

FR: Salaire minimum annuel pour ne pas ĂȘtre soumis Ă  la cotisation AVS - ce qu'il faut savoir

AVS exemption for small yearly salaries (< 2 300 CHF/year)

The "Exempted" AVS Special Status should be set on the Employee form if it is 100% sure that he will not go above the yearly amount for the given year. If it happens that the Employee yearly salary eventually goes above the limit, Odoo will NOT recompute the AVS cotisation he should pay, starting from the beginning of the year. 

25

EN: How to set up a complementary illness insurance (as an "IJMC")

------------------------------

FR: Comment mettre en place une assurance maladie complĂ©mentaire ("IJMC") 

As the IJM insurances field on the Employee form is a many2many field type, several entries can be selected (a primary and a secondary insurance):

To be noted that the accounting impact for each insurance can be set on the corresponding wage type (9051) and (9053):

26

EN: Anticipated retirement

------------------------------

FR: Retraite anticipée

To be set through the (54XX) and (74XX) wages types

27

EN: Representation fees (wage types that impact AVS base VS those that don't)

------------------------------

FR: Frais de représentations (et clarification sur les types de salaire qui impactent la base AVS et ceux qui ne l'impactent pas)

(6040) Lump-sum representation expenses

From a general perspective, wage types going from (1000) to (2000) impact the AVS base amount, while wage types from (3000) to (9000) do not. 

However, exceptions exist, and a way to see which wage types impact the AVS base amount is to group them by "AVS/AC included":

28

EN: What should be set in the Payroll settings

------------------------------

FR: quels paramétrages sont obligatoires dans l'app Paie

What is mandatory for the transmission is:

In case of an association (which doesn't have an IDE-OFS number), this field can remain empty/unknown. 

29

EN: Statistic report in the Transmission: error because unsupported report

------------------------------

FR: Génération du PDF sur le rapport statique: erreur de validation

For now, the statistic report PDF is not supported by Swissdec, which explains why the generation of the PDF in Odoo is triggering an error when trying to open it:

Once Swissdec will support it, it will be available in Odoo. 

However, the "Declare Salary" feature is still available and allows you to declare the Statistic through Swissdec. 

30

EN: How to understand the LAA set-up

------------------------------

FR: Comprendre la configuration et la mise en place de l'assurance LAA

A feedback that comes a lot is the question: "why are there only a 0% and 50% company part on the LAA groups?"

To answer this question, we need to address it from a general point of view:

  • LAA insurance covers the accident of employees
  • For each and every companies in Switzerland, the company part for the "Occupational Accident" is either 0% or 100% (i.e. a professional incident is always fully or not covered by the company). This is why we cannot edit the "Company Part" for Occupational Accident, but set it up at the Employee level. The "Occupational Rate" is about the Employee contribution. 
  • Then, depending on the company's insurance contract, "Non-Occupational Accident" may be covered or not:

    • By the Employee, from the "Non-Occupational Rate"
    • By the Employer, from the "Company Part (%)"
  • What if the company part is 100%? Then, it should be set at the contract level

    • LAA0 --> nothing is insured 
    • LAA1 --> Takes the Company Part % for the Employer Contribution
    • LAA2 --> Equivalent to Company Part = 100%
    • LAA3 --> Equivalent to Company Part = 0%

31

EN: Specific time off (i.e. accident) with a continued pay set to 0% but salary paid by the insurance

------------------------------

FR: Absence (par exemple, accident) avec un maintien de salaire de 0% car payé par l'assurance

First step is to record a Swiss time off (see above sections about time off/absence) with a continued pay % = 0

Depending on the time off type (accident, sickness, maternity leaves), the wage type to be used to record the allowance (through a one-time payment) is:

  • Accident: (2030)
  • Sickness: (2035)
  • Maternity: (2040)

Then, the equivalent correction is done through the (2050) Third Party Correction wage type (in earliest version, the 2050 might be automatically added even if not specified in the Additional Wage types. This can be prevented by setting the (2050) to 0 in that same table). 

Example:

2000CHF for a sickness allowance. On the payslip, following wage types are recorded:

And its impact is to reduce the base amount by the corresponding allowance amount:

While keeping the same gross salary. 

32

EN: How to manually adjust the Source-Tax/IS amount

------------------------------

FR: Comment ajuster manuellement le montant de l'impĂŽt Ă  la source

Use the (5061) Source-Tax: Manual Correction to record the difference (+ or -) between the computed source-tax amount and the actual one that should appear

33

EN: Deduction for prosecution office

------------------------------

FR: Retenue office des poursuites

(5081) Deduction for Prosecution Office

34

EN: How to deduct speed fine on the payslip

How to deduct repayment of a loan (for a computer) on a monthly basis

When to use 5110 wage type

------------------------------

FR: Déduire des amendes pour excÚs de vitesse

DĂ©duire le remboursement mensuel d'un prĂȘt (pour un ordinateur par exemple)

Quand utiliser le type de salaire 5110

As those deductions should reduce the Net salary without impacting the Cotisations, it can be recorded through the (5110) Cash Correction wage type. In other words, (5110) wage type is to be used when willing to impact Net salary, without impacting anything previously computed (gross, AVS, deductions,...)

By default, the 5110 wage type is going to deduct the amount from the net salary. Therefore, 

  • a positive amount in 5110 is going to appear negatively on the payslip
  • a negative amount in 5110 is going to appear positively on the payslip

NB: if you encode several additional wage types with the code 5110 on the same payslip, they will be concatenated on the payslip PDF:

35

EN: Edit the vacation pay rate for hourly salary

------------------------------

FR: Modifier le taux d'indemnité de vacances

The Holiday Compensation Rate is defined at the Employee level:

By default, it's computed based on the number of annual time off, but it can be edited afterwards. 

36

EN: Salary Advance

------------------------------

FR: Avances sur salaire

(6510) Salary Advance Already Paid

37

EN: Health insurance

------------------------------

FR: Caisse maladie

(1974) Employee portion CM assumed by employer

38

EN: Household Allowance

------------------------------

FR: Allocation de ménage

(3032) Household allowance

39

EN: Child Allowance (CAF, FCF) before 16 years old or after 16 years old

------------------------------

FR: Allocation de famille (FCF, CAF) avant et aprĂšs 16 ans

(3000) Child allowance for children < 16 years old

(3010) Education allowance for children > 16 years old

With ELM 5.3, computation of the child allowance is automatically done based on the personal information of the employee:

And the corresponding compensation fund:

However, following scenario may occur:

Up front: for each child, only one full child allowance is paid.

If both parents work, entitlement follows a legal priority order:

  1. the employed person (as opposed to self-employed),
  2. the person with parental custody,
  3. if custody is shared: the person with whom the child mainly lives,
  4. if both live with the child: the parent working in the child’s canton of residence,
  5. if both (or neither) work there: the parent with the higher AHV-liable income.

Cases 4 and 5 occur quite regularly in practice.

Concrete example:

  • The family lives in the canton of Aargau, and the spouse also works there.

    • The spouse receives CHF 215 child allowance via her employer, paid by the Aargau family compensation fund.
  • Our employee works in the canton of Zurich, where the statutory child allowance is CHF 268.
  • Since the spouse works in the canton of Aargau, Zurich only owes the differential allowance (Differenzzulage) of CHF 53.
  • This CHF 53 is paid via our payroll to the employee and settled through the Zurich family compensation fund (not paid directly by the canton and not a discretionary company payment).

In such case, the computation of the child allowance should be performed outside of Odoo. Then, it should be set in the (3000) Child Allowance wage type AND the corresponding children should be set with non-receivable allowance:

40

EN: Child Allowance (Geneva/GenĂšve specific)

------------------------------

FR: Allocation de famille (dans le cas spécifique de GenÚve)

(3004) Child allowance paid by FCF

In the case of Geneva, this is the FCF which is paying for the child allowance

41

EN: Alimony Deduction

------------------------------

FR: Pension alimentaire

(5082) Alimony Deduction

42

EN: Split the salary paid into different bank accounts/different payment method

------------------------------

FR: Répartir le paiement du salaire selon différents comptes bancaires ou méthodes de paiement

The bank account field is now a Many2many field. This allows you to add multiple bank accounts to the same employee.

You can so  assign two bank accounts to one employee if the salary from the payslip needs to be split and paid to two separate accounts.

43

EN: 13th salary payment

------------------------------

FR: Paiement du 13Ăšme mois

Nothing prevents Payroll Managers to pay the 13th salary every month, two times per year, or one time per year. When generating a pay run, they simply need to check the box if 13th salary should be paid for the corresponding month:

This will automatically trigger the 13th salary computation on each payslip of the Run:

44

EN: Rounding to 0.5 of the payslip rules

------------------------------

FR: Arrondi Ă  0.5 des rĂšgles de salaire

This is a Swissdec constraint, as explained in the following document Swissdec reference book (section 4.1.1)

45

EN: Partial Unemployment/RHT

------------------------------

FR: ChĂŽmage partiel

The partial unemployment amount can be recorded through the 

  • (2060) Short-time work monthly --> for monthly salary
  • (2065) Short-time work hourly --> for hourly salary

But it should be computed outside of Odoo. It means that oth wage types expect a fixed amount in CHF. Odoo does not automatically calculate short-time work compensation based on any criteria, this logic lives entirely outside of Odoo. It is therefore the "Payroll officer" s responsibility to calculate, by their own means, how much short-time work compensation each employee is entitled to. Once this amount is determined, it simply needs to be entered on the payslip using the relevant wage type either as a recurring entry or as a one-time payment.

46

EN: Translate other input types in Odoo 17.0 to ease the payslip encoding 

------------------------------

FR: Comment traduire les types de salaire sur la fiche de paie pour les faire apparaßtre en français

In Odoo 17, description field of the other input type is not translatable. Therefore, it will be the unique name that will be displayed during the encoding of the payslip additional wage types:

In the payslip wage type (whatever the language of the connected user):

A workaround is to add both the English and French translation as a description, liked "(3000) Child Allowance / Allocation de famille"

47

EN: Private share of vehicle

------------------------------

FR: Part privée des véhicules

(1910) Private share and (5080) Deduction for the private share

48

EN: Vacation Provision

------------------------------

FR: Provision de vacances

The wage types (9000) Vacation pay Provision and (9001) Vacation pay Balance appear once the employee contract is set as "hourly" and the "Pay Holiday Compensation each month" is not set:

The payment of the provision is to be made with the (1162) Vacation payments wage type. 

NB: the vacation provision is not transferred from one year to another. 

49

EN: Average delay to get status during declaration (verifying plausibility status)

------------------------------

FR: Délai moyen pour obtenir un statut lors d'une déclaration (Vérification de la plausabilité)

This depends on Swissdec workload. It can be up to seconds or minutes - hours in some cases. Anyway, if the delay exceeds one day, it's better to create a new declaration by clicking again on the "Declare Salary":

Be aware that you have to click on "Get Status" option to leave the "Verifying Plausibility" status:

50

EN: How to know if an insurance or a canton administration is connected to Swissdec 

------------------------------

FR: Comment savoir si je peux déclarer mon salaire ou mes cotisations via Swissdec (à l'administration ou aux caisses d'assurance)

The list of available data receiver or canton that are connected to Swissdec is available here: https://swissdec.ch/fr/data-receiver

For example, the last table of that page is referring to the cantons that allow salary certificate declaration through Swissdec (instead of printing and sending it by letter):

51

EN: Scheduled action that regularly recomputes the draft payslips

------------------------------

FR: Actions planifiées qui recalculent les fiches de paie en attente

By default, the following scheduled action is recomputing draft payslips based on up-to-date Employee data. This might erase manually added wage types or edited values. To prevent it, you could decide to archive this action in the database:


52

EN: How to pay salary after departure

------------------------------

FR: Comment gérer le paiement de salaire aprÚs le départ d'un employé

Everything starts from this field in the other info tab of the departure payslip:

The two options are the following:

  1. After Departure Payment: used when you need to make the payment while the employee is not in the company anymore at that time
  2. After Departure Payment with ST correction: same as above + used in order to revert the source tax of the departure month (and make sure both payslips are considered as one in the IS declaration). This will recompute the whole IS as one for the two payslips. 

See this: https://swissdec.ch/document/share/359/54dddb6c-ed5e-4a56-ab1c-8d0db2817501, sections 9.6.5 and 9.6.6 

53

EN: What is absences are recorded after the Pay Run is validated on a given month

------------------------------

FR: Comment encoder des absences encodées par des employés aprÚs que le lot de fiches de paie du mois concerné a été validé

If the Pay Run is validated, trying to create time off for the corresponding month is triggering this error:

In order for the time off/absences to still be encoded and impact the computation of next month salary, users will have to create those time off entries in the next month (even if they were actually taken the month before). That's the way to get the right salary computation. 

NB: a description can be added to make it more clear:

54

If really necessary, how can I create my salary type?

------------------------------

FR: Si vraiment nĂ©cessaire, comment puis-je crĂ©er mon type de salaire ?


As explained in point 13, it is really not recommended to create your own salary type; however, here is a video explaining how to properly create one if it is really necessary.

55

Is there an automatic carry-over to the next year for the vacation provision (9000-9001)?

------------------------------

FR: Y a-t-il un report automatique Ă  l'annĂ©e suivante pour la provision de vacances (9000-9001) ?

This is not possible at the moment, a new wage type should soon exist for this purpose.

56

Swiss Salary Certificate – Field 15 (cm 63–71)

How to populated id on Odoo ?

------------------------------

Fr : Comment le configurer ?

Field 15 of the Swiss salary certificate is a free-text remarks field used to record specific information about an employee's compensation.

57

Correcting Payslips in Switzerland – Best Practice

------------------------------

Fr : Correction de bulletins de paie en Suisse – Bonne pratique

The refund mechanism should not be used in Switzerland as it will likely break calculations. Depending on the type of error, two alternatives are recommended:

  • Wrong source-tax data (wrong code, wrong canton) → use the Source-Tax correction
  • Missing salary component → cancel the payslip and redo it, or defer to the next month

58

Telework Percentage – Impact on Declarations

------------------------------

FR : Pourcentage de tĂ©lĂ©travail – Impact sur les dĂ©clarations

a telework percentage can be set on the employee record. This field has no impact on the monthly IS declaration and no computation impact. It is only reported in the yearly cross-border tax declaration.


59 

Report expenses on payslips

------------------------------

FR : Reporter les dĂ©penses sur les fiches de paie

Unfortunately, there is no direct link between expenses and payslips with the Swiss payroll localization. The "Report in Next Payslip" button on expenses does not work with this localization.

To display them on payslips, an additional manual step is required, which involves adding a one-time payment on the relevant employee's record with the amount of the expense(s) to be reimbursed. Wage types are already created in the Swiss localization to support this.

wage type already available: 


One time payment : 


This one-time payment will generate an additional wage type on the payslip, on which it will always be possible to change the description on the payslip if needed.


60

Separate Salary Type for Public Holiday Hours

------------------------------

FR : Salaire pour jours fériés travaillés

If you want a separate salary type for hours worked on public holidays, with a different rate than regular hours.

Unfortunately, this is not standard in Odoo. As soon as you need to add or modify salary rules in Python, 

The solution would be to create a new input type "hours worked on public holidays", add a new salary rule that calculates the pay for those hours, and modify the standard hourly rule to deduct those hours and avoid double counting.

61

Retroactive exemption of the source-tax (correction)

------------------------------

FR : rembourser l'IS pour un employĂ© qui n'est finalement pas soumis Ă  l'impĂŽt Ă  la source 

There 3 steps to correct this:

  1. Set the predefined category + Tax scale like in the photo

2. Perform the IS line correction like in this video of the affected payslips https://drive.google.com/file/d/1VT7Ip3QRFGNKHDIQmweBoQsyVYrDdMUd/view?usp=sharing

3. After the correction, set back his profile to Not subject to source tax (uncheck the box below)