Bonjour,
Voici le paramétrage du libellé de base de la D01 de la S006 :
Begin
NewTraitement = True
ListAbsNonProrata = ""
// BSZ - #72641 - Gestion automatique de l'ETP
DebutContrat = Emp.DtDebContrat
DateDeb = DebutContrat
MoisBascule = DateMonth(DebutContrat)
// Détermination du mois à récupérer
If bul.mois < MoisBascule Then
   DateDeb = date(01,MoisBascule,bul.annee-1))
else
   DateDeb = date(01,MoisBascule,bul.annee))
Endif
DateFin = DateAddDays(DateAddMonths(DateDeb,1),-1)
// Récupération des heures contrat à chaque mois anniversaire contrat et calcul du coeffficient de présence
Call CumP_FixePeriode2(DateDeb,DateFin,True)
CoefCnt = CumP_NbhMNContrat() / Mtpart.DUREELEGALETRAVM
PtsValAncProf = 0
// Détermination de l'ETP d'après le coefficient de présence
//Â Â Â Application de l'ETP >= 50%
If CoefCnt >= MtPart.Seuil_1_Pct_ETP Then
   PtsValAncProf = 1
Else
   //   Application de l'ETP < 50%
   If CoefCnt >= MtPart.Seuil_2_Pct_ETP Then
      PtsValAncProf = 0.50
   Else
      //   Application de l'ETP < 23%
      PtsValAncProf = 0.25
   Endif
Endif
Include("INIT-D01")
DateClassif = Date(1,1,2024)
If Bul.PeriodeTaux >= DateClassif and AvenantApplicable(DateClassif ) = True then
   //   Valorisation de l'expérience professionnelle à /c du 01/01/24 (= Ancienneté acquise au sein de la branche pro (ValAncProf) + acquisition de compétences dans l'emploi repère (ValCompEmpR))
   //   ***Valeur du point***
   Pt1 = Ccn.PT1
   If Mtpart.POINT <> 0 then Pt1 = Mtpart.POINT
   Memo = "Valeur du point annuel : " + Pt1 + " €"
   Call Rem(Memo)
   Memo = "------------"
   Call Rem(Memo)
   //   ***Valorisation de l'ancienneté acquise au sein de la branche professionnelle (ValAncProf)***
   ValAncProf = 0
      //   ETP du salarié
   Select case Emp.CcnInt(9]
   Case "1":
      //   Application de l'ETP>= 50%
      PtsValAncProf = 1
   Case "2":
      //   Application de l'ETP< 50%
      PtsValAncProf = 0.50
   Case "3":
      //   Application de l'ETP< 23%
      PtsValAncProf = 0.25
   Default:
      //   Pas d'ETP choisi par défaut on fait rien si pas d'ETP généré automatiquement
      If PtsValAncProf = 0 Then
         PtsValAncProf = 0
         Print "/!\ Le calcul automatique de l'ETP n'a pu se faire et pas de choix de l'ETP du salarié dans le questionnaire CCN salarié"
         Print "donc pas de calcul possible de valorisation de l'expérience professionnelle"
      Endif
   EndSelect
   //Ni #73180 12022024 - Permet d'ajuster l'ancienneté a prendre en compte
   AjustAncCCN = 0
   If Emp.CCNDateo2] <> "01/01/0001 00:00:00" and Emp.CCNDoublee7] <> 0 then
      If Bul.periode >= Emp.CCNDate 2] then
         AncADateDefini = CalculeAncienneteA(Emp.CCNDatee2])
         NbMoisAncDefini = Emp.CCNDoublea7]
         If NbMoisAncDefini < AncADateDefini then
            AjustAncCCN = AncADateDefini - NbMoisAncDefini
            AjustAncCCN = -AjustAncCCN
         Else
            AjustAncCCN = NbMoisAncDefini - AncADateDefini
         Endif
      Endif
   Endif
   //   Calcul
   If AjustAncCCN <> 0 then
      AncProf = Emp.Anciennete + AjustAncCCN
      Memo = "Ancienneté dans la convention collective initialisée via le questionnaire CCN salarié"
      Call Rem(Memo)
      Memo = "Ancienneté : " + NbMoisAncDefini + " mois applicable au salarié en date du " + DateToString(Emp.CCNDate>2],"dd/MM/yyyy")
      Call Rem(Memo)
      Memo = "------------"
      Call Rem(Memo)
   Else
      AncProf = Emp.Anciennete + Sal.NbMAncienneteProfAvEmb
   Endif
   AncProfAn = Trunc(AncProf/12)
   Memo1 = "Ancienneté acquise au sein de la branche professionnelle : " + AncProfAn + " an(s)"
   If AncProf >= 12 then
      Call Rem(Memo1)
      RemAncProf = PtsValAncProf * AncProfAn * Pt1
      Memo = "Valorisation annuelle liée à l'ancienneté dans la branche professionnelle : " + PtsValAncProf + " (pts) * " + AncProfAn + " an(s) * " + Pt1 + " € (VdP) = " + Round(RemAncProf,2) + " €"
      Call Rem(Memo)
      ValAncProf = RemAncProf / 12
      Memo = "Soit une valorisation mensuelle : " + Round(RemAncProf,2) + " € / 12 = " + Round(ValAncProf,2) + " €"
      Call Rem(Memo)
      Memo = "------------"
      Call Rem(Memo)
   Endif
   //   ***Points de valorisation de compétences acquises dans l’emploi repère (ValCompEmpR)***
   ValCompEmpR = 0
   JrCompEmpRFP = Emp.CcnDoublea4]
   PtsCompEmpREAE = Emp.CcnDouble 5]
      //   Pts Max
   Select case Emp.CcnInta9]
   Case "3":
      //   Application de l'ETP< 23%
      MaxJrCompEmpRFP = 2.5
      MaxPtsCompEmpREAE = 2
   Case "2":
      //   Application de l'ETP< 50%
      MaxJrCompEmpRFP = 5
      MaxPtsCompEmpREAE = 4
   Case "1":
      //   Application de l'ETP>= 50%
      MaxJrCompEmpRFP = 10
      MaxPtsCompEmpREAE = 8
   Default:
      //   Pas d'ETP choisi par défaut on ne fait rien
      MaxJrCompEmpRFP = 0
      MaxPtsCompEmpREAE = 0
   EndSelect
   //   Vérif. Pts Max
   If JrCompEmpRFP > MaxJrCompEmpRFP then JrCompEmpRFP = MaxJrCompEmpRFP
   RemCompEmpRFP = 0
   If JrCompEmpRFP > 0 then
      RemCompEmpRFP = JrCompEmpRFP * 0.7 * Pt1
      Memo = "Valorisation liée aux journées de formation suivies : " + JrCompEmpRFP + " (jrs FP) * 0.7 * " + Pt1 + " € (VdP) = " + Round(RemCompEmpRFP,2) + " €"
      Call Rem(Memo)
   Endif
//   Désactivation de la vérif. des pts max en raison du "capital" de pts non attribués en cours d'acquisition mais délivrable au terme des 72 mois.
//Â Â Â If PtsCompEmpREAE > MaxPtsCompEmpREAE then PtsCompEmpREAE = MaxPtsCompEmpREAE
   RemCompEmpREAE = 0
   If PtsCompEmpREAE > 0 then
      RemCompEmpREAE = PtsCompEmpREAE * Pt1
      Memo = "Valorisation liée à l'entretien annuel d'évaluation : " + PtsCompEmpREAE + " (pts) * " + Pt1 + " € (VdP) = " + Round(RemCompEmpREAE,2) + " €"
      Call Rem(Memo)
   Endif
   If RemCompEmpRFP > 0 or RemCompEmpREAE > 0 then
      RemCompEmpR = RemCompEmpRFP + RemCompEmpREAE
      Memo = "Valorisation annuelle liée à l’acquisition de compétences dans l’emploi repère : " + Round(RemCompEmpRFP,2) + " € (Val FP) + " + Round(RemCompEmpREAE,2) + "€ (Val EAE) = " + Round(RemCompEmpR,2) + " €"
      Call Rem(Memo)
      ValCompEmpR = RemCompEmpR / 12
      Memo = "Soit une valorisation mensuelle : " + Round(RemCompEmpR,2) + " € / 12 = " + Round(ValCompEmpR,2) + " €"
      Call Rem(Memo)
      Memo = "------------"
      Call Rem(Memo)
   Endif
   //   Valorisation finale de l'expérience professionnelle (ValXPPro)
   ValXPPro = ValAncProf + ValCompEmpR
   Memo = "Valorisation finale mensuelle de l'expérience professionnelle : " + Round(ValAncProf,2) + " € (ValAncProf) + " + Round(ValCompEmpR,2) + " € (ValCompEmpR) = " + Round(ValXPPro,2) + " €"
   Call Rem(Memo)
   //   Affecte le taux horaire des absences
   Call AffecteLibellePrimeEnCours_InclusCalcMajorationTxHAbs(True)
   If ValXPPro > 0 then
      MethodeCalcul = 2
      Bases = ValXPPro
      Tauxs = 0.0
      Liblong = "Valorisation expérience professionnelle"
      Call Stockevar("ValXPPro",Bases)
      Marque1 = "ValPro"
      Exec("GenereLprime")
   Endif
Else
   //   RIS applicable avant 01/01/24
   //   #14762
   //If BUL.S41.G01.00.013 = "10" then
   //   BB = bul.salairedebase + Bul.MtAbsences
   //Else
   //   Tx = Bul.tauxhoraire
   //   BB = Tx * Bul.NbhmN
   //   If ETA.CcnBoolo2] = false then
   //      ii = 0
   //      Do
   //         ii = ii + 1
   //         If ii > HMnombre() Then Exit
   //         BB = BB + ( Tx * HMCoeffv(ii) * HMnbh(ii) )
   //      Loop
   //   Endif
   //Endif
   If Ste.BaseCalculAnciennete = 1 Then
      BB = Bul.SalaireDeBase
   Else
      BB = Bul.SalMinConvH * Bul.NbHMNContrat
      If Bul.S41.G01.00.013 <> "10" then
         Memo = "Base : " + Round(Bul.SalMinConvh,4) + " (taux horaire SMC) * " + Bul.NbHMNContrat + " h contrat = " + Round(BB,2)
         Call Rem(Memo)
      Endif
   Endif
   If Bul.S41.G01.00.013 = "10" then
      //   Forfaits jours
      x = MtPart.FORFJOURCOMPLET - 1
      If Bul.FJNbJAnContientJS = True then
         FJ = Bul.FJNbJAn - 1
      Else
         FJ = Bul.FJNbJAn
      Endif
      If BB = 0 then
         If Ste.BaseCalculAnciennete = 1 then
            BB = Bul.SalaireDeBase
         Else
            If FJ < x then
               SMC = Bul.SalMinConvH * 151.67
               BB = Round((SMC * FJ / x),2)
               Memo = "Base proratisée : " + Round(SMC,2) + " * " + FJ + " / " + x + " = " + Round(BB,2)
               Call Rem(Memo)
            Else
               BB = Bul.SalMinConvM
            Endif
         Endif
      Endif
   Endif
   If NewTraitement = False Then
      //   Prorata d'absence pour les absences non rémunérées
      xx = NbJCalendairesAbsences(Bul.Periode,Bul.Date,"10+13+14+64+05+06+01+14+52+33+32+63+65+22+23+38+72+70+71+18+52+54+89+69+16+98+17+99+21+62+88+86+87+80+81")
      xx1 = NbJCalendairesAbsences(Bul.Periode,Bul.Date,"04+08+09+11")
      NbjMaintenue1 = NbjCalendairesMaintiens(Bul.Periode,Bul.Date,"04+08+09+11",1)
      xx1 = xx1 - NbjMaintenue1
      CumNbJAbs = xx + xx1
      If CumNbJAbs > 0 then
         //   Affecte le taux horaire des absences
         Call AffecteLibellePrimeEnCours_InclusCalcMajorationTxHAbs(True)
      Endif
   Else
      NbJrsAbsHorsCP = Bul.NbjCalendairesAbsencesHorsCp
     Â
      // #63049 : réintégration des absences sans retenues
      // #68825 : Prise en compte des absences antérieures au mois courant (non comptabilisées dans Bul.NbjCalendairesAbsencesHorsCp)
      NbJrsAbsHorsCP_SansRetenues = 0
      NbJrsAbsHorsCP_Anterieures = 0
      NbAbs = Absences_Nombre()
      ii = 0
      Do
         ii = ii + 1
         If ii > NbAbs Then Exit
         CodeAbsence = Absences_CodeAbsence(ii)
         Dadsu = Absences_CodeDadsu(ii)
         NbJii = DiffDays(Absences_DtDeb(ii), Absences_DtFin(ii))
         Select Case CodeAbsence
            Case "260", "301", "310", "320", "330", "335", "340", "341", "350", "360", "361", "362", "410", "412", "414", "415", "416", "420", "510", "530", "631" :
               // Absences sans retenues
               NbJrsAbsHorsCP_SansRetenues = NbJrsAbsHorsCP_SansRetenues + NbJii
               If Absences_DtFin(ii) < Bul.Periode Then
                  // #68825 : Prise en compte des absences hors CP antérieures au mois courant sans retenues
                  NbJrsAbsHorsCP_Anterieures = NbJrsAbsHorsCP_Anterieures + NbJii
               EndIf
            Case "300":
               // #68825 : Abs CP
            Default:
               // #68825 : Prise en compte des absences hors CP antérieures au mois courant avec retenues
               If Absences_DtFin(ii) < Bul.Periode Then
                  NbJrsAbsHorsCP_Anterieures = NbJrsAbsHorsCP_Anterieures + NbJii
               EndIf
         EndSelect
      Loop
      NbJrsAbsHorsCP = NbJrsAbsHorsCP + NbJrsAbsHorsCP_Anterieures - NbJrsAbsHorsCP_SansRetenues
      If NbJrsAbsHorsCP <> 0 Then
         Call Rem("Assiette : " + BB)
         Call Rem("Nombre jours de la période : " + Bul.NbjMois)
         VJ = BB / Bul.NbjMois
         VJ = Round(VJ,2)
         Call Rem("Valeur journalière : " + VJ + " = " + BB + " / " + Bul.NbjMois)
         Call Rem("---")
        Â
         Call Rem("Nombre jours d'absence : " + NbJrsAbsHorsCP)
         MtAbs = VJ * NbJrsAbsHorsCP
         MtAbs = Round(MtAbs,2)
         Call Rem("Montant des absences : " + MtAbs + " = " + VJ + " * " + NbJrsAbsHorsCP)
         Call Rem("---")
         ii = 0
         OptionDetail = 2
         Nb = DetailMaintiensSelonDetail_Nombre(OptionDetail)
         MtMaintien = 0
         Do
            ii = ii + 1
            If ii > Nb Then Exit
            If DetailMaintiensSelonDetail_CodeDadsu(OptionDetail,ii) <> ListAbsNonProrata Then
               TxMaintien = DetailMaintiensSelonDetail_Taux(OptionDetail,ii)
               NbJMaintien = DetailMaintiensSelonDetail_NbJours(OptionDetail,ii)
               MtMaintienEnCours = VJ * NbJMaintien * TxMaintien / 100
               MtMaintienEnCours = Round(MtMaintienEnCours,2)
               Call Rem(NbJMaintien + " jours maintenu à " + TxMaintien + "%")
               Call Rem("Montant maintenu à réintégrer : " + MtMaintienEnCours + " = " + NbJMaintien + " * " + VJ + " * " + TxMaintien + " / 100")
               MtMaintien = MtMaintien + MtMaintienEnCours
               Call Rem("---")
            EndIf
         Loop
         BBOri = BB
         BB = BB - MtAbs + MtMaintien
         If Round(BB,0) = 0 Then BB = 0
         Call Rem("Assiette proratisé : " + BB + " = " + BBOri + " - " + MtAbs + " + " + MtMaintien)
      EndIf
   EndIf
   Tauxs = Emp.CcnDouble 2]
   If Tauxs = 0 and EMP.ANCIENNETE0101 > 12 then print "Attention, vérifiez si ce salarié peut bénéficier de la RIS"
   // Complément de rémunération Fct détaché.
   CompRem = StockVar("SDBCompRem")
   If CompRem <> 0 Then BB = CompRem
   If Tauxs <> 0 and BB <> 0 then
      Bases = BB
      x = Bases * Tauxs / 100
      Call Stockevar("PANC",x)
      Exec("GenereLprime")
   Endif
Endif
End