Hook régional pour les cotisations employeur
Hook régional pour les cotisations employeur
Le bulletin de paie appelle la méthode apply_regional_employer_contributions après le calcul des cotisations employeur de la structure salariale. Par défaut, cette méthode ne fait rien. Une application régionale la remplace pour ajouter ses propres lignes au tableau employer_contributions.
La méthode porte le décorateur @hrms.allow_regional. Ce décorateur cherche une fonction de remplacement dans le hook regional_overrides, pour le pays courant.
Ordre d'exécution
Dans calculate_net_pay, le bulletin exécute ces étapes :
- Il calcule les gains et les déductions de la structure salariale.
- Il appelle
apply_regional_deductions(déductions régionales). - Il calcule les cotisations employeur de la structure (
calculate_component_amounts("employer_contributions")), si le bulletin a une structure salariale. - Il appelle
apply_regional_employer_contributions. - Il arrondit les montants (
set_precision_for_component_amounts). - Il calcule le net à payer (
set_net_pay).
Les cotisations employeur s'affichent sur le bulletin. Elles n'entrent pas dans le brut, le total des déductions ou le net à payer.
Déclarer le remplacement
Dans le fichier hooks.py de votre application, associez le chemin de la méthode d'origine à votre fonction, sous le nom du pays :
# mon_app/hooks.py
regional_overrides = {
"France": {
"hrms.payroll.doctype.salary_slip.salary_slip.apply_regional_employer_contributions": "mon_app.paie.ajouter_cotisations_employeur",
},
}
La clé est le module de la méthode suivi de son nom, sans le nom de la classe. Si plusieurs applications déclarent la même clé, la dernière application installée l'emporte.
Votre fonction reçoit le bulletin de paie (self) comme seul argument :
# mon_app/paie.py
def ajouter_cotisations_employeur(salary_slip):
# Exemple fictif : composant de salaire « Prévoyance employeur » à 1,5 % du brut
salary_slip.append(
"employer_contributions",
{
"salary_component": "Prévoyance employeur",
"amount": salary_slip.gross_pay * 0.015,
},
)
Le composant de salaire doit exister avant l'appel.
Pays utilisé
hrms.get_region() détermine le pays. Il prend le pays de la société de frappe.local.flags.company si ce drapeau est défini. Sinon, il prend frappe.flags.country, puis le pays des Paramètres système.
frappe.local.flags.company ou testez le pays dans votre fonction.