Détail du script "2024-009 - Acquisition CP"

Création 7 cumuls
CPJCAL - Nb jours calendaires :
Unité : Nombre
RAZ : Mois de bascule
Report : Aucun
Explication :  Ce cumul est alimenté via la fonction personnalisée DROICP - Droit CP mensuel et est utilisé dans la fonction personnalisée DRCPAN - Droit CP annuel pour recalculer annuellement le nombre de jours de CP acquis sur la période d'acquisition (ou lors d'une sortie).                            
CPABSM - Jrs abs hors mal mensuel :
Unité : Montant
RAZ : Tous les mois
Report : Rubrique - 1040    "ABS. AUTORISEE SS MAINT." en Montant
                                 1040J  "ABS. AUTORISEE SS MAINT. FORFAIT JOUR" en Montant
                                 1045    "ABS. NON AUTORISEE SS MAINT." en Montant
                                 1045J  "ABS. NON AUTORISEE SS MAINT. FORF JOUR" en Montant
                                 1135    "ABS. CONGE PARENT. ED. SS MAINT." en Montant
                                 1135J  "ABS. CONGE PARENT. ED. SS MAINT. FORF JR" en Montant
                                 3080  "ABS. CONGES SANS SOLDE SS MAINT." en Montant
                                 3080J  "ABS. CONGES SANS SOLDE SS MAINT. FORF JR" en Montant
Explication :  Ce cumul doit être alimenté par les rubriques d'absence non assimilée qui n'ouvrent pas droit à acquisition des CP. Ce cumul est utilisé dans la fonction personnalisée DROICP - Droit CP Mensuel , pour compter le nombre de jours calendaires d'absence non assimilée à partir des périodes saisies pour chaque rubrique qui alimente ce cumul.
Lors de l'exécution du script, l'alimentation du cumul est réalisée en prenant en compte toutes les rubriques d'absences datées (PMRUBR.LBMT = "D") qui proratisent le PMSS (PMELPA.DIVI = 1) et qui possèdent un motif de suspension du contrat de travail en DSN (Sauf motif 602 et 507) (PMRUBR.CMSC <> "" ).
Requête utilisée :
SELECT * FROM PMELPA JOIN PMRUBR ON PMELPA.NORU = PMRUBR.NORU
WHERE DIVI = 1 AND LBMT = 'D' AND (CMSC <> '' AND CMSC NOT IN ('602','507'))

CPABSA - Jrs abs hors maladie annuel :
Unité : Jour
RAZ : Mois bascule
Report : Aucun
Explication :  Ce cumul est alimenté par la fonction personnalisée DROICP - Droit CP Mensuel et est utilisé dans la fonction personnalisée DRCPAN - Droit CP annuel pour recalculer annuellement le nombre de jours de CP acquis sur la période d'acquisition (ou lors d'une sortie).
CPJAHM - CP Acquis hors mal :
Unité : Jour
RAZ : Mois bascule
Report : Aucun
Explication :  Ce cumul est alimenté par la fonction personnalisée DROICP - Droit CP Mensuel et est utilisé dans la fonction personnalisée DRCPAN - Droit CP annuel pour recalculer annuellement le nombre de jours de CP acquis sur la période d'acquisition (ou lors d'une sortie).
De plus, ce cumul pourra être utilisé pour connaitre le nombre de CP Acquis au titre des périodes d'arrêts maladie pendant la période d'acquisition (Juin à mai).
CPMALM - Jrs abs maladie mensuel :
Unité : Montant
RAZ : Tous les mois
Report : Rubrique - 1050    "ABS. MALADIE SS MAINT. du XX/XX au XX/XX" en Montant
                                 1050J  "ABS. MALADIE SS MAINT. FORFAIT JOUR" en Montant
                                 1060    "ABS. MALADIE MAINT." en Montant
                                 1060J  "ABS. MALADIE MAINT. FORFAIT JOUR" en Montant
                                 1201    "Abs. Maladie du XX/XX au XX/XX" en Montant
                                 1201J  "Abs. Maladie FORFAIT JOUR" en Montant
Explication :  Ce cumul doit être alimenté par les rubriques d'absence maladie non professionnelle qui ouvrent droit à acquisition des CP.
Ce cumul est utilisé une première fois pour alimenter le cumul CPMTN0 - Base CP En cours , via le rubrique 3080K1 - Calcul base CP Maladie . Puis, dans un second temps, ce cumul est utilisé dans la fonction personnalisée DROICP - Droit CP Mensuel , pour compter le nombre de jours calendaires d'absence maladie à partir des périodes saisies pour chaque rubrique qui alimente ce même cumul.
Lors de l'exécution du script, l'alimentation du cumul est réalisée en prenant en compte toutes les rubriques d'absence datées (PMRUBR.LBMT = "D") dont le libellé contient MALA et ne contient pas PRO (pour ignorer les rubriques d'absence maladie professionnelle). Seules les rubriques n'ayant pas de motif de suspension de contrat DSN sont prises en compte.
Requête utilisée :
SELECT * FROM PMELPA JOIN PMRUBR ON PMELPA.NORU = PMRUBR.NORU
WHERE LBMT = 'D' AND UPPER(LIBE) LIKE '%MALA%' AND SENS = 'R' AND UPPER(LIBE) NOT LIKE '%PRO%' AND CMSC = '' AND SUSP = 0
CPMALA - Jrs abs maladie annuel :
Unité : Jour
RAZ : Mois de bascule
Report : Aucun
Explication :  Ce cumul est alimenté par la fonction personnalisée DROICP - Droit CP Mensuel et est utilisé dans la fonction personnalisée DRCPAN - Droit CP annuel pour recalculer annuellement le nombre de jours de CP acquis sur la période d'acquisition (ou lors d'une sortie).
CPJAMA - CP Acquis maladie :
Unité : Jour
RAZ : Mois bascule
Report : Aucun
Explication :  Ce cumul est alimenté par la fonction personnalisée DROICP - Droit CP Mensuel et est utilisé dans la fonction personnalisée DRCPAN - Droit CP annuel pour recalculer annuellement le nombre de jours de CP acquis sur la période d'acquisition (ou lors d'une sortie).

Modification 1 cumul
CPMTN0  "BASE CP EN COURS"
Report rubriques à COCHER :
3080K1  "Calcul base CP maladie"
Report rubriques à DECOCHER :
1061    "MALADIE 100%"
1061J  "MALADIE 100% FORFAIT JOUR"
1062    "MALADIE 75 % "
1062J  "MALADIE 75 % FORFAIT JOUR"
1063   " MALADIE 50 %"
1063J  "MALADIE 50 % FORFAIT JOUR"
Explication :  Le calcul du 1/10ème est impacté par cette réforme car il convient de prendre en compte uniquement 80% du salaire théorique pendant les périodes d'arrêt maladie.
Maintenant, seules les rubriques d'absence maladie et la rubrique 3080K1 - Calcul base CP Maladie doivent alimenter le cumul CPMTN0 . Les rubriques de maintien ne sont plus à prendre en compte.
Lors de l'exécution du script, la modification du cumul CPMTN0 est réalisée en supprimant le report des rubriques qui sont en gain, dont le libellé contient MAL, ne contient pas PRO (pour ignorer les rubriques de maintien maladie professionnelle) et qui est associée à une autre rubrique.
Requête utilisée :
DELETE FROM PMLIRT WHERE NMCU = 'CPMTN0' AND NORU IN (SELECT PMELPA.NORU FROM PMELPA JOIN PMRUBR ON PMELPA.NORU = PMRUBR.NORU WHERE UPPER(LIBE) LIKE '%MAL%' AND UPPER(LIBE) NOT LIKE '%PRO%' AND SENS = 'G' AND PMELPA.NORU IN(SELECT NORU FROM PMASRU))

Création 3 Fonction Personnalisée
DROICP - Calcul droit CP En cours

// Version du 29/05/2024

//Cette fonction permet de calculer l'acquisition des CP avec prise en compte

// des absences maladie

 

// 1- On calcul le nombre de jours d'absence non assimilé

UnCumul est une chaîne = "CPABSM"

UneDate est une Date

tDatesAbsenceDéjàDécomptées est un tableau associatif de booléens

NombreJoursMaladie , NombreJoursAbsence sont des réels

 

// On remet à z&ero pour effacer les éventuels reports fait en amont

tCumuls [ UnCumul ]= 0   

 

// On balaye le tbaleau des éléments variables

// Pour chaque élément variable, on le traite si l'élément est daté et si la rubrique se reporte sur l'un des cumuls d'absence à traiter

POUR ind = 1 À ftCAELVA ..Occurrence

  CAELVA = ftCAELVA [ ind ]

  SI CAELVA . CMSA <> "S" _ET_ CAELVA . DTDB <> "" _ET_ CAELVA . DTFI <> "" _ET_ CAELVA . DTDB <= CAELVA . DTFI ...

    _ET_ HLitRecherchePremier ( "PMLIRT" , "KLIRT" , [ UnCumul , CAELVA . NORU ]) ALORS

    // On décompte les jours ouvrés sur la période d'absence de cet élément variable

    // en prenant garde à ce qu'une même journée ne soit pas décomptée 2 fois, au travers de 2 éléments dont les périodes se recrouvreraient en tout ou partie

    UneDate = CAELVA . DTDB

   

    TANTQUE UneDate <= CAELVA . DTFI

      SI PAS tDatesAbsenceDéjàDécomptées [ UneDate ]   ALORS

        tDatesAbsenceDéjàDécomptées [ UneDate ]= Vrai

        SI CAELVA . NBRE > 0 ALORS NombreJoursAbsence ++ SINON NombreJoursAbsence --

      FIN

      UneDate ..Jour++

    FIN

  FIN

FIN

 

tCumuls [ UnCumul ]+= NombreJoursAbsence

 

// On revient sur l'enregistrement courant

CAELVA = ftCAELVA [ fIndiceftCAELVA ]

 

// 2 - On calcul le nombre de jours d'Absence maladie

UnCumul = "CPMALM"

tDatesAbsenceMaladieDéjàDécomptées est un tableau associatif de booléens

 

// On remet à z&ero pour effacer les éventuels reports fait en amont

tCumuls [ UnCumul ]= 0   

 

// On balaye le tbaleau des éléments variables

// Pour chaque élément variable, on le traite si l'élément est daté et si la rubrique se reporte sur l'un des cumuls d'absence à traiter

POUR ind = 1 À ftCAELVA ..Occurrence

  CAELVA = ftCAELVA [ ind ]

  SI CAELVA . CMSA <> "S" _ET_ CAELVA . DTDB <> "" _ET_ CAELVA . DTFI <> "" _ET_ CAELVA . DTDB <= CAELVA . DTFI ...

    _ET_ HLitRecherchePremier ( "PMLIRT" , "KLIRT" , [ UnCumul , CAELVA . NORU ]) ALORS

    // On décompte les jours ouvrés sur la période d'absence de cet élément variable

    // en prenant garde à ce qu'une même journée ne soit pas décomptée 2 fois, au travers de 2 éléments dont les périodes se recrouvreraient en tout ou partie

    UneDate = CAELVA . DTDB

   

    TANTQUE UneDate <= CAELVA . DTFI

      SI PAS tDatesAbsenceMaladieDéjàDécomptées [ UneDate ]   ALORS

        tDatesAbsenceMaladieDéjàDécomptées [ UneDate ]= Vrai

        SI CAELVA . NBRE > 0 ALORS NombreJoursMaladie ++ SINON NombreJoursMaladie --

      FIN

      UneDate ..Jour++

    FIN

  FIN

FIN

 

tCumuls [ UnCumul ]+= NombreJoursMaladie

 

// On revient sur l'enregistrement courant

CAELVA = ftCAELVA [ fIndiceftCAELVA ]

 

// 3 -   On calcul l'acquisition CP

 

NombrejoursCalendaire , NombreJoursBulletin sont des réels

NombreJoursPrésence , NombreSemaine , NombreMois sont des réels

DroitCP , DroitCPHorsMaladie , DroitCPMaladie , DroitCPTotal sont des réels

 

DroitCP = CG . DROICP

 

// On calcul le nombre de jours calendaire du bulletin

// et mise à jours du cumul

//NombrejoursCalendaire = DateDifférence(PremierJourDuMois(CAENBU.DTDB),DernierJourDuMois(CAENBU.DTDB))+1

NombrejoursCalendaire = Val ( Droite ( DernierJourDuMois ( CAENBU . DTFI ), 2 ))

 

//tCumuls["CPJCAL"] += NombrejoursCalendaire

//NombrejoursCalendaire = CU.CPJCAL

 

NombreJoursBulletin = DateDifférence ( CAENBU . DTDB , CAENBU . DTFI )+ 1

tCumuls [ "CPJCAL" ] += NombreJoursBulletin

 

//Calcul acquisition CP Hors Maladie

NombreJoursPrésence = NombreJoursBulletin - NombreJoursAbsence - NombreJoursMaladie

 

DroitCPHorsMaladie = Arrondi ( NombreJoursPrésence / NombrejoursCalendaire * DroitCP , 2 )

 

//Calcul acquisition CP Maladie

DroitCPMaladie = Arrondi ( NombreJoursMaladie / NombrejoursCalendaire * DroitCP * 0.8 , 2 )

 

//Calcul acquisition CP Total

DroitCPTotal = DroitCPMaladie + DroitCPHorsMaladie

 

//Affichage ligne commentaire, pour explication du calcul

Commentaireinfo est une chaîne

Commentaireinfo = "[VR]"

SI DroitCPHorsMaladie <> 0 _ET_ ( NombreJoursAbsence <> 0 OU NombreJoursMaladie <> 0 ) ALORS

  Commentaireinfo += RC + "CP Hors maladie : " + DroitCPHorsMaladie

  Commentaireinfo += RC + "   ( " + NombreJoursPrésence + " / " + NombrejoursCalendaire + " * " + DroitCP + " )"

FIN

 

SI DroitCPMaladie <> 0 ALORS

  Commentaireinfo += RC + "CP maladie : " + DroitCPMaladie

  Commentaireinfo += RC + "   ( " + NombreJoursMaladie + " / " + NombrejoursCalendaire + " * " + DroitCP + " * 0.8)"              

FIN

fCommentaireCalcul = Commentaireinfo

 

//Mise à jours des cumuls

tCumuls [ "CPJAHM" ] += DroitCPHorsMaladie

tCumuls [ "CPJAMA" ] += DroitCPMaladie

tCumuls [ "CPABSA" ] += NombreJoursAbsence

tCumuls [ "CPMALA" ] += NombreJoursMaladie

 

RENVOYER ( DroitCPTotal )

 

Explication :  Cette fonction permet de calculer le nombre de jours acquis en cours mensuellement. Pour cela, la fonction est décomposée en plusieurs étapes :
1- Calcul du nombre de jours d'absence non assimilée à partir des rubriques alimentant le cumul CPABSM - Jrs abs hors mal mensuel .
2- Calcul du nombre de jours d'absence maladie à partir des rubriques alimentant le cumul CPMALM - Jrs abs maladie mensuel.
3- Calcul du nombre de jours calendaires à partir de la date de début et de fin du bulletin.
4- Calcul du nombre de CP Acquis hors maladie : nombre de jours présence / nombre de jours du mois * DroitCP
5- Calcul du nombre de CP Acquis maladie : nombre de jours maladie / nombre de jours du mois * DroitCP
6- Calcul du nombre de CP Acquis en cours :  CP Acquis hors maladie + CP Acquis maladie
7- Mise à jour des cumuls suivants :
  • CPJAHM - CP Acquis hors maladie
  • CPJAMA - CP Acquis maladie
  • CPABSA - Jrs abs hors maladie annuel
  • CPMALA - Jrs abs maladie annuel
  • CPJCAL - Nb jours calendaires
Cette fonction est utilisée sur la rubrique 3080KC - Droit à CP congés payés .
DRCPAN - Droit CP En cours annuel

// Version du 03/06/2024

// Cette fonction permet de calculer l'acquisition des CP avec prise en compte des périodes d'arrêts maladie

 

NombrejoursCalendaire , NombreJoursAbsence , NombreJoursMaladie sont des réels

NombreJoursPrésence , NombreSemaine , NombreMois sont des réels

DroitCP , DroitCPHorsMaladie , DroitCPMaladie , DroitCPTotal sont des réels

 

NombrejoursCalendaire = CU . CPJCAL

NombreJoursAbsence   = CU . CPABSA

NombreJoursMaladie = CU . CPMALA

 

CPRégul est un réel

CPRégul = CU . CPJAN0 - CU . CPJAHM - CU . CPJAMA

 

DroitCP = CG . DROICP

 

SI Droite ( CAENBU . MPAY , 2 ) = PEPACT . MBCP _OU_ ( PEPACT . SORT = 1 ET Gauche ( PEPACT . DTFP , 6 ) = CAENBU . MPAY ) ALORS

 

  //Calcul acquisition CP Hors Maladie

  // CP Hors maladie = Nombre de mois de présence * Droit CP Mensuel

  NombreJoursPrésence = NombrejoursCalendaire - NombreJoursAbsence - NombreJoursMaladie

  NombreSemaine =   NombreJoursPrésence / 7

  NombreMois = Min ( NombreSemaine / 4 , 12 )

 

  DroitCPHorsMaladie = Arrondi ( NombreMois * DroitCP , 2 )

 

  //Calcul acquisition CP Maladie

  // CP maladie = Nombre de mois maladie * Droit CP Mensuel * 0.80

  NombreSemaine =   NombreJoursMaladie / 7

  NombreMois = Min ( NombreSemaine / 4 , 12 )

 

  DroitCPMaladie = Arrondi ( NombreMois * DroitCP * 0.8 , 2 )

 

  //Calcul acquisition CP Total

  DroitCPTotal = Min ( DroitCPMaladie + DroitCPHorsMaladie , Arrondi ( DroitCP * 12 , 2 ))

 

  //Arrondi droit CP uniquement le mois de bascule des CP

  SI Droite ( CAENBU . MPAY , 2 ) = PEPACT . MBCP ALORS

    DroitCPTotal = ArrondiSupérieur ( DroitCPTotal )  

  FIN

 

  //Affichage ligne commentaire, pour explication du calcul

  Commentaireinfo est une chaîne

  Commentaireinfo = "[VR]"

  Commentaireinfo += RC + "CP Hors maladie annuel: " + DroitCPHorsMaladie

  Commentaireinfo += RC + "   ( " + NombreJoursPrésence + " / 7 / 4 * " + DroitCP + " )"

  SI DroitCPMaladie <> 0 ALORS

    Commentaireinfo += RC + "CP maladie annuel: " + DroitCPMaladie

    Commentaireinfo += RC + "   ( " + NombreJoursMaladie + " / 7 / 4 * " + DroitCP + " * 0.80 )"

  FIN

  SI CPRégul <> 0 ALORS Commentaireinfo += RC + "CP manuel : " + CPRégul

  Commentaireinfo += RC + "CP Total : " + Arrondi ( DroitCPTotal + CPRégul , 2 )

  fCommentaireCalcul = Commentaireinfo

 

  //Mise à jours des cumuls

  tCumuls [ "CPJAHM" ] = DroitCPHorsMaladie - CU . CPJAHM

  tCumuls [ "CPJAMA" ] = DroitCPHorsMaladie - CU . CPJAMA

 

  RENVOYER ( DroitCPTotal - CU . CPJAN0 + CPRégul )

SINON

  RENVOYER 0

FIN

 

 

Explication :  Cette fonction permet de recalculer annuellement, le nombre de jours acquis sur la période (juin à mai) ou lors de la sortie du salarié à partir des formules ci-dessous :
  • CP Acquis hors maladie = nombre de mois de présence * droit CP mensuel
  • CP Acquis maladie = nombre de mois maladie * Droit CP mensuel
  • CP Acquis = CP Acquis hors maladie + CP Acquis maladie (plafonnés à 12* Droit CP mensuel)
Le nombre de mois de présence est obtenu via le calcul suivant : (nombre de jours de présence / 7 jours / 4 semaines) plafonné à 12 mois
Le nombre de mois maladie est obtenu via le calcul suivant : (nombre de jours maladie / 7 jours / 4 semaines) plafonné à 12 mois
Les cumuls suivants sont utilisés dans la fonction :
  • CPJAHM - CP Acquis Hors Maladie
  • CPJAMA - CP Acquis Maladie
  • CPABSA - Jrs abs hors maladie annuel
  • CPMALA - Jrs abs maladie annuel
  • CPJCAL - Nb jours calendaires
  • CPJAN0 - CP Acquis En cours
La fonction est utilisée sur la rubrique 3080KR - Recalcul droit congés payés et renvoie le nombre de jours à régulariser (CP Acquis - CU.CPJAN0). Cette régularisation du cumul CPJAN0 n'impacte pas la base de CP En cours pour le calcul du 1/10ème.
La fonction arrondit à l'entier supérieur le nombre de jours de CP acquis, uniquement sur le mois de bascule des CP ( Article L3141-7 - Code du travail - Légifrance (legifrance.gouv.fr ).
CPMALB - Base CP Maladie
Formule : (CU.CPMALM*0.8)*-1
Explication :  Cette fonction permet de calculer 80% du montant des absences maladie, pour alimenter la base de CP En cours (Cumul CPMTN0 - Base CP En cours ).
Création 3 Rubriques
3080K1 -  Calcul base CP maladie
Création par copie de la rubrique 0159-Droit à cp congés payés mensuel
Calcul :
Unité : Montant
Montant : Fonction Perso // Nom= CPMALB
Cumul : CPMTN0
3080KC - Droit à CP congés payés mensuel
Création par copie de la rubrique 0159-Droit à cp congés payés mensuel
Calcul / Sens : Gain
             Unité : Jour
             Base : Fonction personnalisée  //  Nom : FP.DROICP
             Code calcul 00
Profils / Pour tous les salarié présent (sauf intéressement)
Cumul / CPJAN0 en nombre
3080KR -  Recalcul Droit congés payés
Création par copie de la rubrique 3080KC-Droit à CP congés payés mensuel
Calcul / Alimentation Base : Fonction personnalisée  //  Nom : FP.DRCPAN
Cumul / CPJAN0

Modification 2 Rubriques
0159 - Droit à cp congés payés mensuel
Suspendre

0160 - Arrondi jrs cp acquis en cours à fin Mai
Suspendre