GRH

Mettre à jour le gestionnaire de rubriques

La version du programme GRH est 2024.06.01

Le gestionnaire de rubriques passe à 67

Comme d’habitude, le gestionnaire de rubriques ne se met à jour que lors du changement de période.

Dans ce cas il est nécessaire de forcer cette mise à jour. La version du gestionnaire de rubriques est indiquée sur l’écran principal avec la version du programme.

image-1709554133686.png

Pour forcer la mise à jour, sélectionnez le menu Option utilisateur/MAJ Gestionnaire de rubrique.

Cette option est accessible si le configurateur vous permet de modifier le gestionnaire de rubrique.

image-1636031640465.png

Cliquez sur le bouton image-1636031652638.pngafin d’effectuer la mise à jour. A l’issue de celle-ci, le programme s’arrête. Il suffit alors de le relancer et de vérifier la version

Le menu Information de connexion permet de vérifier qu’aucun utilisateur n’est connecté.

Correction et mise à jour du gestionnaire de rubrique

Nouvelles rubriques

MALADIE_AM : Cotisation majoration maladie Alsace Moselle.

https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-taux-de-cotisations/la-cotisation-maladie---maternit/cas-particuliers.html

PREV_TH : Prévoyance travailleur handicapé
FORMATION_TH : Formation professionnelle continue travailleur handicapé
ACCIDENT_TH : Accident du travail travailleur handicapé

Ajout de accident_TH  : Base de cotisation BC_CPLDDTE  CTP 999  et CTP1  122

V_PLAFPREV : Nombre de plafond prévoyance à appliquer

Cette rubrique libre permet de définir le nombre de plafond de prévoyance à appliquer pour la tranche B et la tranche C de prévoyance.

En effet, jusqu'à présent, ce nombre était directement intégré dans les rubriques bases de cotisation de prévoyance :

image-1716382351642.png

Avec la mise à jour, les formules EIG de ces rubriques utilisent la rubrique libre V_PLAFPREV.

Exemple pour BC_TR_B_PREV_C :

Avant
F_TRANCHEBPREV([BC_BRUT_PREV_C.MONTANT];[BC_TR_A_PREV_C.MONTANT];
               [BC_TR_B_PREV_C.MONTANT];[PLAFONDS_A.PLA_OC];3)
Après
F_TRANCHEBPREV([BC_BRUT_PREV_C.MONTANT];[BC_TR_A_PREV_C.MONTANT];
               [BC_TR_B_PREV_C.MONTANT];[PLAFONDS_A.PLA_OC];[V_PLAFPREV.NB_TRB_C])

Les formules de la rubrique libre V_PLAFPREV ont été définies comme suit, afin de ne pas modifier la codification actuelle

A quoi ça sert ?

Dans la majorité des cas, cette modification n'est pas utile. Mais il arrive parfois que le nombre de plafond de prévoyance dépende d'une caractéristique du salarié : La convention, le type de contrat ou de salarié, etc. Dans ce cas, il sera possible de définir en un endroit le nombre de plafond à utiliser.

Exemple : En CCN51 , le nombre de plafond de prévoyance cadre est comme celui des non cadres, c'est à dire 2 plafonds pour la tranche B  et 4 plafonds pour la tranche C. Pour les autres conventions pas de changement.

On va modifier la formule V_PLAFPREV.NB_TRB_C  comme suit ;

si ([NUMCONV.NUMCONV]=51)
alors (2)
sinon (3)

Les cas exceptionnels où le salarié change de convention ne sont pas gérés. Dans ce cas, c'est le dernier nombre qui sera pris en compte dans le cumul annuel

Non résident actif

Pour l'assurance maladie, la cotisation suivante a été créée.

MALADIE_NRA : Cotisation maladie non résidents actif 
si (CONSTANTE(CONTRAT.PAS_RESIDENTETRANGER)=1)
alors ([BC_BRUT_URSAFF.MONTANT])
sinon (0)

Cette cotisation peut être ajoutée dans tous les régimes car la base de cotisation s'appuie sur le pays de résidence du salarié pour déterminer si la cotisation est due ou pas

Pour la retenue à la source, plusieurs éléments ont été créés.

Une liste de constante : RETSOURCE : Permet de renseigner les valeurs du barème MENSUEL pour le taux d'imposition

Pour rappel , le barème est le suivant en 2024 :

image-1716370668823.png

RET_JRSTRAV : Nombre de jours travaillés retenue à la source

Si le nombre de jours non travaillés est égal à zéro, cette rubrique sera égale à zéro et dans ce cas c'est le barème mensuel qui sera utilisé. Sinon, on utilise le barème journalier et cette rubrique est égale au nombre de jour travaillés (NB_JRSTRAV). En effet, en cas d'entrée sortie, c'est le barème journalier qui doit être appliqué. La rubrique RET_JRSTRAV est saisissable en paye dans le cas ou vous désirez ajuster le nombre de jour de travail.

si ([JRSNONTRAV.BASE]=0)
alors (0)
sinon ([NB_JRSTRAV.MONTANT])
RET_SOURCE : Retenue cotisation retenue à la source à ajouter dans le gestionnaire de régime

Comme pour la cotisation maladie, cette cotisation peut être ajoutée dans tous les régimes car la base de cotisation s'appuie sur le pays de résidence du salarié pour déterminer si la cotisation est due ou pas.

BC_RET_SOURCE : Base de cotisation de la retenue à la source
declarer (BASE)
affecter (base;arrondir([NETIMP.MONTANT]*(100-LISTEGEN(RETSOURCE;5))/100))
declarer (PLAF1)
affecter (PLAF1;si ([RET_JRSTRAV.BASE]=0)
                alors (LISTEGEN(RETSOURCE;1)) sinon (LISTEGEN(RETSOURCE;3)*[RET_JRSTRAV.BASE])
          )
declarer (PLAF2)
affecter (PLAF2;si ([RET_JRSTRAV.BASE]=0)
                alors (LISTEGEN(RETSOURCE;2)) sinon (LISTEGEN(RETSOURCE;4)*[RET_JRSTRAV.BASE])
          )
si (CONSTANTE(CONTRAT.PAS_RESIDENTETRANGER)=1)
alors (
        arrondir(
                 0.12
                 *
                 si (:BASE>:PLAF2)
                 alors (:PLAF2-:PLAF1)
                 sinon (
                       si (:BASE>:PLAF1)
                       alors (:BASE-:PLAF1)
                       sinon (0)
                       )
                  )
        +
        arrondir(
                 0.20
                 *
                 si (:BASE>:PLAF2)
                 alors (:BASE-:PLAF2)
                 sinon (0)
                 )
      )
sinon (0)
Base de CSG-CRDS

Les rubriques BC_CSG et BC_CRDS ont été modifiées pour prendre en compte le pays de résidence du salarié (constante contrat PAS_RESIDENTETRANGER). Si le code pays de résidence est différent de la France, ces bases de cotisations seront égales à zéro.

On peut donc utiliser un régime quelconque (général, cadre) qui inclut les cotisations CSG-CRDS, celles ci seront égales à zéro lorsque le salarié réside hors de France

Correctifs

V_NEWAGCP.HREMU : Heures rémunérées pour le nouveau calcul AGCP

Avant

si (([NB_HEUREREMU.BASE]=0) ou (CONSTANTE(CONTRAT.TYPESALARIE)=5))
 alors (
  {Assistante Maternelle}
       si (CONSTANTE(CONTRAT.NATURECONTRAT)=0003)
       alors (( CONSTANTE(CONTRAT.HORAIRECOLLECTIF)
               )
               *
               (
                       si ([IJBRUT.MONTANT]<>0)
                       alors ([BC_BRUT_URSAFF.MONTANT]/([BC_BRUT_URSAFF.MONTANT]+[IJBRUT.MONTANT]) )
                       sinon (1)
                )
              )
       sinon (
 {Forfait Annuel en jours}
               si (CONSTANTE(CONTRAT.SITUATIONHORAIRE)=4)
               alors (CONSTANTE(CONTRAT.HORAIRECOLLECTIF)*CONSTANTE(CONTRAT.JOUR_FORFAIT)/CONSTANTE(CONTRAT.FORFAITJOURCOLLECTIF)
                      *
                       si (([IJBRUT.MONTANT]<>0) ou ([ABSTOTALV.MONTANT]-[ABSTOTALM.MONTANT]<>0))
                       alors ([BC_BRUT_URSAFF.MONTANT]
                               /
                               ([BC_BRUT_URSAFF.MONTANT]+[IJBRUT.MONTANT] +[ABSTOTALV.MONTANT]-[ABSTOTALM.MONTANT])
                       )
                       sinon (1)
                      )
               sinon (
 {Forfait Annuel en heures}
                      si (CONSTANTE(CONTRAT.SITUATIONHORAIRE)=5)
                      alors (CONSTANTE(CONTRAT.HORAIRECOLLECTIF)*CONSTANTE(CONTRAT.HEURE_FORFAIT)/1596
                             *
                             si ([IJBRUT.MONTANT]<>0)
                             alors ([BC_BRUT_URSAFF.MONTANT]/([BC_BRUT_URSAFF.MONTANT]+[IJBRUT.MONTANT]) )
                             sinon (1)
                            )
 {Horaire fixe / Horaire variable}
                      sinon (
                            si (CONSTANTE(CONTRAT.TYPESALARIE)=5)
                            alors ([AD_HNEXO.BASE])
                            sinon ([NB_HEURESCON.MONTANT])
                            *
                            (
                               ([AGCP_NUMHREMU.MONTANT]
                               /
                               [B_PXHEURE.MONTANT]
                               )
                             )
                             +
                             si (CONSTANTE(CONTRAT.TYPESALARIE)=5)
                             alors([AGCP_HREMUPLUS.MONTANT]*[AD_HNEXO.BASE]/([AD_HNEXO.BASE]+[AD_HEXO.BASE]))
                             sinon ([AGCP_HREMUPLUS.MONTANT])
                            )
                     )
              )
       )
sinon ( [NB_HEUREREMU.BASE])
+[NB_HREMUREGUL.BASE]
Après
si (([NB_HEUREREMU.BASE]=0) ou (CONSTANTE(CONTRAT.TYPESALARIE)=5))
 alors (
  {Assistante Maternelle}
       si (CONSTANTE(CONTRAT.NATURECONTRAT)=0003)
       alors (( CONSTANTE(CONTRAT.HORAIRECOLLECTIF)
               )
               *
               (
                       si ([IJBRUT.MONTANT]<>0)
                       alors ([BC_BRUT_URSAFF.MONTANT]/([BC_BRUT_URSAFF.MONTANT]+[IJBRUT.MONTANT]) )
                       sinon (1)
                )
              )
       sinon (
 {Forfait Annuel en jours}
               si (CONSTANTE(CONTRAT.SITUATIONHORAIRE)=4)
               alors (CONSTANTE(CONTRAT.HORAIRECOLLECTIF)*CONSTANTE(CONTRAT.JOUR_FORFAIT)/CONSTANTE(CONTRAT.FORFAITJOURCOLLECTIF)
                      *
                       si (([IJBRUT.MONTANT]<>0) ou ([ABSTOTALV.MONTANT]-[ABSTOTALM.MONTANT]<>0))
                       alors ([BC_BRUT_URSAFF.MONTANT]
                               /
                               ([BC_BRUT_URSAFF.MONTANT]+[IJBRUT.MONTANT] +[ABSTOTALV.MONTANT]-[ABSTOTALM.MONTANT])
                       )
                       sinon (1)
-----------------------NOUVEAU CODE ----------------------------------------------------------------                       
                       *
                        si ([JRSNONTRAV.BASE]<>0)
                        alors(maximum(1;(30 - [JRSNONTRAV.BASE])) / 30)
                        sinon(1)
----------------------------------------------------------------------------------------------------
                      )
               sinon (
 {Forfait Annuel en heures}
                      si (CONSTANTE(CONTRAT.SITUATIONHORAIRE)=5)
                      alors (CONSTANTE(CONTRAT.HORAIRECOLLECTIF)*CONSTANTE(CONTRAT.HEURE_FORFAIT)/1596
                             *
                             si ([IJBRUT.MONTANT]<>0)
                             alors ([BC_BRUT_URSAFF.MONTANT]/([BC_BRUT_URSAFF.MONTANT]+[IJBRUT.MONTANT]) )
                             sinon (1)
                            )
 {Horaire fixe / Horaire variable}
                      sinon (
                            si (CONSTANTE(CONTRAT.TYPESALARIE)=5)
                            alors ([AD_HNEXO.BASE])
                            sinon ([NB_HEURESCON.MONTANT])
                            *
                            (
                               ([AGCP_NUMHREMU.MONTANT]
                               /
                               [B_PXHEURE.MONTANT]
                               )
                             )
                             +
                             si (CONSTANTE(CONTRAT.TYPESALARIE)=5)
                             alors([AGCP_HREMUPLUS.MONTANT]*[AD_HNEXO.BASE]/([AD_HNEXO.BASE]+[AD_HEXO.BASE]))
                             sinon ([AGCP_HREMUPLUS.MONTANT])
                            )
                     )
              )
       )
sinon ( [NB_HEUREREMU.BASE])
+[NB_HREMUREGUL.BASE]
APPRENTI.ABTBRANCHE : Abattement en % de la rémunération Accord de Branche

Modification pour prendre en compte les nouveaux pourcentages dans l'accord de branche :

Avant

selon (
         cas ([APPRENTI.AGES] = 1)
             alors (
                   selon (
                      cas ([APPRENTI.ANC] = 1) alors (30)
                      cas ([APPRENTI.ANC] = 2) alors (45)
                      cas ([APPRENTI.ANC] = 3) alors (0)
                          )
                   )
         cas ([APPRENTI.AGES] = 2)
             alors (
                   selon (
                      cas ([APPRENTI.ANC] = 1) alors (50)
                      cas ([APPRENTI.ANC] = 2) alors (60)
                      cas ([APPRENTI.ANC] = 3) alors (70)
                          )
                   )

         cas ([APPRENTI.AGES] >= 3)
             alors (
                 selon (
                      cas ([APPRENTI.ANC] = 1) alors (65)
                      cas ([APPRENTI.ANC] = 2) alors (75)
                      cas ([APPRENTI.ANC] = 3) alors (85)
                          )
                   )

         )

Après

selon (
         cas ([APPRENTI.AGES] = 1)
             alors (
                   selon (
                      cas ([APPRENTI.ANC] = 1) alors (35)
                      cas ([APPRENTI.ANC] = 2) alors (45)
                      cas ([APPRENTI.ANC] = 3) alors (55)
                          )
                   )
         cas ([APPRENTI.AGES] = 2)
             alors (
                   selon (
                      cas ([APPRENTI.ANC] = 1) alors (50)
                      cas ([APPRENTI.ANC] = 2) alors (60)
                      cas ([APPRENTI.ANC] = 3) alors (70)
                          )
                   )

         cas ([APPRENTI.AGES] = 3)
             alors (
                 selon (
                      cas ([APPRENTI.ANC] = 1) alors (65)
                      cas ([APPRENTI.ANC] = 2) alors (75)
                      cas ([APPRENTI.ANC] = 3) alors (85)
                          )
                   )
         cas ([APPRENTI.AGES] = 4)
             alors (100
                   )
         )
JRSNONTRAV : Jours non travaillés

Lors d'un changement de situation en cours de mois, permet d'avoir le nombre de jour correct au total

Avant :

si([H_N0NTRAV.BASE]=0)
alors(
       (
        si (constante(general.mois_paye)=2)
        alors (
            si (CONSTANTE(CONTRAT.CIVJOURSTRAVAIL)=CONSTANTE(GENERAL.NBJMOISPAYE))
            alors (0)
            sinon (30-CONSTANTE(CONTRAT.CIVJOURSTRAVAIL))
              )
        sinon (30-minimum(constante(contrat.CIVJOURSTRAVAIL);30))
        )
      *
      CONSTANTE(CONTRAT.USEJOURSNONTRAVAIL))
sinon (0)

Après

si([H_N0NTRAV.BASE]=0)
alors(
      si (CONSTANTE(CONTRAT.USEJOURSNONTRAVAIL)=0)
      alors (0)
      sinon (
                si (constante(general.mois_paye)=2)
                alors (
                    si (CONSTANTE(CONTRAT.CIVJOURSTRAVAIL)=CONSTANTE(GENERAL.NBJMOISPAYE))
                    alors (0)
                    sinon (30-CONSTANTE(CONTRAT.CIVJOURSTRAVAIL)
                          -
                          si ((CONSTANTE(CONTRAT.CIVJOURSTRAVAIL)<>CONSTANTE(CONTRAT.CIVJOURSTRAVAIL_EMB))
                              et (CONSTANTE(CONTRAT.CIVJOURSTRAVAIL_EMB)>=28))
                          alors (2)
                          sinon (0)
                          )
                      )
                sinon (30-minimum(constante(contrat.CIVJOURSTRAVAIL);30))
             +
             si ((CONSTANTE(CONTRAT.CIVJOURSTRAVAIL)<>CONSTANTE(CONTRAT.CIVJOURSTRAVAIL_EMB)) et (CONSTANTE(CONTRAT.CIVJOURSTRAVAIL_EMB)=31))
             alors (1)
             sinon (0)
            )
      )
sinon (0)

 

Divers

Non résident actif

Ajout d'un système pour le calcul des cotisations des non résidents actifs

https://wikiapp.heberg-eig.fr/books/calcul-de-paye-rubriques/page/non-residents-actifs

PERECO

Ajout du module pour la mise en place du PERECO

https://wikiapp.heberg-eig.fr/books/pereco
https://wikiapp.heberg-eig.fr/books/calcul-de-paye-rubriques/chapter/le-pereco-dans-eig

DSN

Régularisation DSN

On rappelle ici que la régularisation DSN permet de déclarer des éléments qui ont été calculés correctement en paye mais incorrectement déclarés en DSN

Il est désormais possible de faire une régularisation DSN du bloc 58 utilisé pour le net social mais aussi pour les heures supplémentaires exonérées.

Il est également possible de faire une régularisation DSN pour des contrats clos sans qu'il soit nécessaire de faire un bulletin de régularisation. Par contre, il ne sera pas possible de générer la DSN pour un seul matricule d'un contrat clos.

Lorsque l'on fait une régularisation DSN de l'AGCP (urssaf ou AA) avec le code cotisation 018 ou 106 en bloc 81, le bloc 79 code 01 smic fillon est obligatoire. Le programme va le générer automatiquement à zéro s'il n'a pas été spécifié dans la régularisation DSN

Génération DSN

Lorsque l'on génère la DSN pour un matricule, un message d'avertissement s'affiche lorsque le matricule n'existe pas.

Correctif passage statut boeth a non statut dans A rappeler en DSN : utilisation de la date depuis le

Autre

Bulletin de régularisation

La DSN issue d'un bulletin de régularisation utilise les données de la fiche contractuelle.

Lorsque l'on réalise un bulletin de régularisation sur une fiche qui a été clôturé en changement de situation,  les modalités reprisent en DSN sont celle du contrat actif.

Toutefois, s'il n'y a pas de contrat actif, ou si ce contrat est dans un autre établissement, les modalités reprises sont celles de la fiche du bulletin de régularisation. Dans ce cas, et UNIQUEMENT dans ce cas, le programme averti qu'il est préférable de faire le bulletin de régularisation sur la dernière fiche contractuelle qui en principe contient les dernières modalités.

image-1716888146461.png

Exemple 1 :

En mai, on clôture le contrat 1.2.0 mais il est toujours actif. On réalise un bulletin de régularisation sur le contrat 1.1.0. En DSN l'horaire contractuel repris est bien 151.67.

En juin, on refait un bulletin de régularisation sur le contrat 1.1.0. Le message précédent apparait car en DSN, l'horaire contractuel repris sera 151.67 (avec un bloc 41 changement de contrat). Il faut dans ce cas la faire le bulletin de régularisation sur le contrat 1.2.0

Exemple 2 :

En mai, on réalise un bulletin de régularisation sur le contrat 1.1.0. Comme il n'est pas dans le même établissement que le contrat 1.2.0, la DSN reprendra les modalités de la fiche 1.1.0 avec un horaire contractuel de 151.67. Il est donc préférable dans ce cas de faire un bulletin de régularisation sur la fiche contrat 1.2.0.

Proposition de contrat

La validation des propositions lorsque la paye est bloquée partiellement est désormais possible après l'accord de l'utilisateur sur un message d'avertissement.

Gestionnaire de régime

Le boutonimage-1716480119066.png permet d'afficher les régimes sous forme de tableau. tous les tris et recherche sont possibles et l'export Excel est également réalisable.

Reliquat prime décentralisée

Le module de calcul du reliquat de prime décentralisée a été modifié.

En effet le calcul de la prime décentralisée et donc du reliquat est très variable d'une association à l'autre : prime décentralisée payée en décembre pour l'année en cours, payée en juin et en décembre, payée en janvier pour l'année précédente, payée en juillet en janvier. Et parfois le mode de calcul est différent en fonction de la caractéristique du salarié (cadre/non cadre, catégorie de salarié, etc).

Il est désormais possible de définir une période à cheval sur deux années.

Le reste du mode de fonctionnement ne change pas.

Comptabilisation

Il arrive parfois que lors de la comptabilisation un message d'alerte prévient que le débit est différent du crédit :

image-1718630045753.png

Dans la majorité des cas, cela est du au fait que la somme des éléments du brut est différent du brut et la cause peut être multiple :

Dans tous les cas, vérifiez sur le bulletin que le brut est bien égal à la somme des éléments du brut

Avec la mise à jour, le programme vérifie que la somme des éléments du brut est bien égale au brut. Si ce n'est pas le cas, un autre message d'alerte est affiché :

image-1718630477317.png

Il est alors possible dans certains cas exceptionnel de corriger la comptabilisation automatiquement.