Développeurs

Configuration régionale des salaires

Remplacer une fonction de HRMS selon le pays avec le hook regional_overrides, par exemple pour ajouter des déductions au bulletin de paie.

Configuration régionale des salaires

HRMS marque certaines fonctions avec le décorateur @hrms.allow_regional. Une application peut remplacer ces fonctions pour un pays, avec le hook regional_overrides de son fichier hooks.py. Cette page décrit le mécanisme et son usage sur le bulletin de paie.

Le hook regional_overrides

Le hook associe un pays à un dictionnaire. Chaque clé est le chemin de la fonction d'origine. Chaque valeur est le chemin de la fonction de remplacement.

# mon_app/hooks.py
regional_overrides = {
    "France": {
        "hrms.payroll.doctype.salary_slip.salary_slip.apply_regional_deductions": "mon_app.paie.deductions_france",
    },
}
  • Le chemin d'origine est le module suivi du nom de la fonction. Pour une méthode de classe, n'écrivez pas le nom de la classe.
  • Le nom du pays est le nom du document Pays, par exemple France.
  • Si plusieurs applications remplacent la même fonction, la dernière application installée l'emporte.

HRMS déclare lui-même des remplacements pour la France dans son fichier hooks.py : jours de congé, chevauchement des congés, acquisition des congés.

Pays utilisé

hrms.get_region() choisit le pays dans cet ordre :

  1. Le pays de la société de frappe.local.flags.company, si ce drapeau est défini.
  2. frappe.flags.country.
  3. Le pays des Paramètres système.

Le pays ne vient pas de la société du bulletin ni de la fiche de l'employé.

Déductions régionales du bulletin de paie

Le bulletin de paie appelle apply_regional_deductions après le calcul des gains, des déductions de la structure salariale et des remboursements de prêt. L'appel a lieu avant l'arrondi des montants et le calcul du net à payer. Les lignes ajoutées entrent donc dans le total des déductions et dans le net.

La fonction de remplacement reçoit le bulletin de paie comme seul argument :

# mon_app/paie.py
def deductions_france(salary_slip):
    # Exemple fictif : composant « Mutuelle salarié » de 45 € pour les cadres
    if salary_slip.designation == "Cadre":
        salary_slip.append(
            "deductions",
            {"salary_component": "Mutuelle salarié", "amount": 45},
        )

Le composant de salaire doit exister. La fonction ne renvoie rien : elle modifie le bulletin.

Exemple fictif : un cadre a un brut de 3 000 € et 650 € de déductions de structure. Avec cette fonction, le total des déductions passe à 695 € et le net à 2 305 €.

Vérifier le remplacement

Si la fonction n'est pas appelée :

  1. Vérifiez le pays des Paramètres système ou de la société de frappe.local.flags.company.
  2. Vérifiez que le nom du pays dans regional_overrides est identique au nom du document Pays.
  3. Vérifiez le chemin de la fonction d'origine, sans le nom de la classe.
  4. Lancez bench --site <site> clear-cache après une modification de hooks.py.