Example #1
0
def iter_heures_sup_annees_param(
        iter_annees=db.bdd().iterAnneesDispo,
        generateur_heures_sup_annees=gen_heures_sup_annee_a):
    BOOL_ITER_ANNEES_DOMAINE_OK = (iter_annees in [db.bdd().iterAnneesDispo])
    BOOL_GENE_HEURES_SUP_ANNEES_DOMAINE_OK = (generateur_heures_sup_annees in [
        gen_heures_sup_annee_a, gen_heures_sup_annee2, gen_heures_sup_annee
    ])
    if not BOOL_ITER_ANNEES_DOMAINE_OK:
        raise ("iter annees pas dans bon domaine")
    if not BOOL_GENE_HEURES_SUP_ANNEES_DOMAINE_OK:
        raise ("gene heures sup domaine pas ok")

    for a in iter_annees:
        annee = int(a)
        yield gen_heures_sup_annees(a)
Example #2
0
def getCumulHeuresTravailleesSemaine(a,
                                     s,
                                     methode=db.bdd().
                                     getCumulHeuresTravailleesSemaine):
    try:
        return int(methode(a, s))
    except TypeError:
        return int(methode)
Example #3
0
 def setBdd(self):
     self.bdd = bdd()
Example #4
0
 def setBdd(self, bdd):
     if bdd is not None:
         self.bdd = bdd
     else:
         from db import bdd
         self.bdd = bdd()
Example #5
0
import constantes
from db import bdd
from itertools import islice
""" je veux une fonction pour mon larbin
- ouvrant un fichier texte,
- explosant chaque ligne,
- transformant chaque ligne explosee en un poste via:
   * la creation d un horodatage de début
      i. par la combinaison d une date et d une heure:
         - la date etant annee mois et jour de début de poste
         - le début de poste dépendant du type de poste:
             * le type de poste est lu dans le fichier texte à destination du larbin
             * la correspondance entre type de poste et heure de début
                se fait à partir de la lecture de constantes.py
    * la creation d un horodatage de fin
      i . par l ajout à l horodatage de début de poste d une duree
        - la duree dépend du type de poste:
          * le type de poste est lu dans le fichier texte à destination du larbin
          * la correspondance entre type de poste et duree se lit dans constantes.py
    * la creation d un type d entree dans le planning lu dans constantes.py
    * la création d une categorie d entree lu dans constantes.py: travail ou absence"""

with open(next(bdd().iterFichiersPostes())) as f:
    for ligne in f:
        for ligne_poste in xpld.xpld().xplode_ite(ligne):
            print(ligne_poste)
##			datetime_debutposte = datetime.datetime.combine(
##				datetime.date(ligne_poste['year'], ligne_poste['month'], ligne_poste['day']),
##				datetime.time(ligne_poste)
##
Example #6
0
def prejudice():
    """hsrd = hss_effectuee - hsspayee.
       les heures négatives ?   c est le point le plus important:
       trois positions possibles:
         1) les heures sont perdues pour l employeur et le décompte se fait à la semaine, paiement au mois
         2) les heures ne sont pas perdues pour l employeur et le cumul se fait algébriquement sur le mois
         3) les heures ne sont pas perdues pour l employeur et le cumul se fait algébriquement sur l'année.
         4) il n'y a jamais de perte pour l'employeur et le compteur n est jamais perdu pour l employeur.
         je penche pour le type 3 pour l instant:
         il s'agit d une CORRECTION DU PAIEMENT REEL PAR RAPPORT A UN PAIEMENT DU
         pour qualifier un DOL
         PAR CONTRE QUEL QUE SOIT LE RESULTAT, LE COMPTEUR DE DIFF25
         EST REMIS A ZERO au 1er janvier

         des exceptions sont à prendre en compte:
         pendant certaines semaines de congés payées, on travaille.
         on est à la fois en congés et au travail.
         cela se résoud en considérant cela comme des heures supplémentaires:
         en effet, les cp sont censées se substituer à des jours de travail
         mais ils sont payés comme des jours de travail (les heures à poser
         pour un jour de cp correspond à la moyenne des heures d une semaine
         de travail normal)
       """
    """ALGO:    pour chaque semaine du mois:
        probleme | semaine à exclure | semaine à inclure
        si semaine_travaillée et semaine_cp => probleme 
        si non semaine travaillee et semeaince cp => semaine a exclure
        sinon semaine  à inclure
        pour chaque semaine à inclure du mois:
            pour chaque type_d heures sup:
                heure_sup_dues vs heures_sup_payees.
                si heures sup_dues:
                    ajouter (typeheures_sup : + heures_sup_dues)
                si heures_en_trop:
                    ajouter(typeheures_sup: cagnotte globale)
    fin_du_mois :
        pour chaque type_heures_sup:
            pour chaque_semaine:
                ajouter_type_heures_sup
            ajouter_cagnotte
            vider_cagnotte
            si_heures_sup:
                ajouter_heures_sup
        renvoyer tableau_heures_sup_mensuellesje vex une methode restant_dues qui
           permette de calculer le nombre d heures restant dues
           à 25% .
           mon employeur me paie effectivement 169 heures par mois
           dont 4 bonifiées à 25 %:
           il applique la l3121-31:
  Article L3121-31 En savoir plus sur cet article...
Modifié par LOI n°2016-1088 du 8 août 2016 - art. 8 (V)
Dans les entreprises dont la durée collective hebdomadaire de travail est supérieure
à la durée légale hebdomadaire, la rémunération mensuelle due au salarié peut être calculée
en multipliant la rémunération horaire par les cinquante-deux douzièmes de cette durée hebdomadaire de travail,
en tenant compte des majorations de salaire correspondant aux heures supplémentaires accomplies.

          cependant si dans mon contrat l'annualisaiont n'est pas valable,
          alors les 39 non plus (pas un self service ou on prend une partie
          et pas le reste)
          le raisonnement de l'avocat est de partir des 35 heures sur la base
          des art 3121-27 et 3121-28 et 29:
          1) compter la qté d heures de chaque semaine travaillée.
             si plus de 35 heures 25% dues.
           2) cumuler ca à l'année.

Article L3121-27 En savoir plus sur cet article...
Modifié par LOI n°2016-1088 du 8 août 2016 - art. 8 (V)
La durée légale de travail effectif des salariés à temps complet est fixée à trente-cinq heures par semaine.

Article L3121-28 En savoir plus sur cet article...
Modifié par LOI n°2016-1088 du 8 août 2016 - art. 8 (V)
Toute heure accomplie au delà de la durée légale hebdomadaire
ou de la durée considérée comme équivalente est une heure supplémentaire
qui ouvre droit à une majoration salariale ou, le cas échéant,
à un repos compensateur équivalent.

Article L3121-29 En savoir plus sur cet article...
Modifié par LOI n°2016-1088 du 8 août 2016 - art. 8 (V)
Les heures supplémentaires se décomptent par semaine.

Article L3121-30 En savoir plus sur cet article...
Modifié par LOI n°2016-1088 du 8 août 2016 - art. 8 (V)
Des heures supplémentaires peuvent être accomplies
dans la limite d'un contingent annuel.
Les heures effectuées au delà de ce contingent annuel
ouvrent droit à une contrepartie obligatoire sous forme de repos.

Les heures prises en compte pour le calcul du contingent
annuel d'heures supplémentaires sont celles accomplies
au delà de la durée légale.

Les heures supplémentaires ouvrant droit
au repos compensateur équivalent mentionné à l'article L. 3121-28
et celles accomplies dans les cas de travaux urgents
énumérés à l'article L. 3132-4
ne s'imputent pas sur le contingent annuel d'heures supplémentaires.

AUTRE PT DE VUE:
les heures sup dues sur un mois somment les heures sup dues des semaines terminees
elles representent apres bonification un eqv heures trav
comparable à l eqv heures trav de la bonif payée effectivement.
elles permettent donc de déterminer un préjudice.


        """

    anneesdispo = list(db.bdd().iterAnneesDispo())
    moisannee = list(range(1, 13))

    def eqv_trv_de_sup_paye_obsolete(mois, annee):
        cste_h25_payee_mois = 17.33
        return bonification25(cste_h25_payee_mois)

    def eqv_trv_de_sup_sem_paye(semaine, annee):
        heures_cp = getCumulHeuresCpSemaine(annee, semaine)
        paye_semaine = sup25_deja_paye(heures_cp)
        if heures_cp:
            phrase_cp_non_nuls = "en semaine {}, {} heures de cp ramenent les hsup payéees de 4 à {}"
            phrase_cp_non_nuls = phrase_cp_non_nuls.format(
                semaine, annee, paye_semaine)
            log.critical(phrase_cp_non_nuls)
        else:
            phrase_cp_nuls = "{} heures ont été payées à 25% au titre de la mens des heures de 35 à 39h"
            phrase_cp_nuls = phrase_cp_nuls.format(paye_semaine)
            log.debug(phrase_cp_nuls)
        return bonification25(paye_semaine)

    def eqv_trv_de_sup_paye(mois, annee):
        eqv = 0
        import utilitaireDates
        semainesmois = list(utilitaireDates.iterSemaine(annee, mois))
        for semaine in semainesmois:
            eqv = eqv + eqv_trv_de_sup_sem_paye(semaine, annee)
            phrase_debug = "eqv trv de paye vaut {} lors semaine {}"
            phrase_debug = phrase_debug.format(
                eqv_trv_de_sup_sem_paye(semaine, annee), semaine)

            log.debug(phrase_debug)

        return eqv

    def bonification25(heures):
        return heures * 1.25

    def bonification50(heures):
        return heures * 1.50

    def bonification100(heures):
        return heures * 2

    def eqv_trv_de_sup_du(mois, annee):
        ##        def eqv_trv_de_sup_sem_du(semaine, annee):
        ##            e_s = eqv_trv_de_sup_sem_du_25(semaine,annee)
        ##            + eqv_trv_de_sup_sem_du_50(semaine,annee)
        ##            + eqv_trv_de_sup_sem_du_100(semaine,annee)
        ##            return e_s
        ##        def eqv_trv_de_sup_sem_du_25(semaine,annee):
        ##            heures_effectuees_semaine = getCumulHeuresTravailleesSemaine(semaine,annee)
        ##            return bonification25(
        ##                heures_sup_25_effectuees(heures_effectuees_semaine)
        ##                )
        ##        def eqv_trv_de_sup_sem_du_50(semaine,annee):
        ##            heures_effectuees_semaine = getCumulHeuresTravailleesSemaine(semaine,annee)
        ##            return bonification50(
        ##                heures_sup_50_effectuees(heures_effectuees_semaine)
        ##                )
        ##
        ##        def eqv_trv_de_sup_sem_du_100(semaine,annee):
        ##            heures_effectuees_semaine = getCumulHeuresTravailleesSemaine(semaine,annee)
        ##            return bonification100(
        ##                heures_illegales_effectuees(heures_effectuees_semaine)
        ##                )

        eqv = 0
        import utilitaireDates
        semainesmois = list(utilitaireDates.iterSemaine(annee, mois))
        for semaine in semainesmois:
            eqv = eqv + eqv_trv_de_sup_sem_du(semaine, annee)
            phrase_debug = "eqv vaut {} lors semaine {} (sem25: {} sem50: {} sem100: {}"
            phrase_debug = phrase_debug.format(
                eqv, semaine, eqv_trv_de_sup_sem_du_25(semaine, annee),
                eqv_trv_de_sup_sem_du_50(semaine, annee),
                eqv_trv_de_sup_sem_du_100(semaine, annee))

            log.info(phrase_debug)

        return eqv

    cumul_total_posit = 0
    cumul_total_neg = 0
    cumul_total = 0
    for annee in anneesdispo:
        cumul_annuel_posit = 0
        cumul_annuel_neg = 0
        bilan_annuel = 0
        for mois in moisannee:
            cumul_mensuel_posit = 0
            cumul_mensuel_neg = 0

            p = eqv_trv_de_sup_paye(mois, annee)
            d = eqv_trv_de_sup_du(mois, annee)
            phrase_datation = "pour mois {} annee {}".format(mois, annee)
            phrase_ok_ko = phrase_datation + "\n paye {} alors que du {}".format(
                p, d)
            phrase_cumul_mensuel = "cumul mensuel de {}".format(d - p)
            if p >= d:
                log.info(phrase_ok_ko)
                cumul_mensuel_neg = d - p
                log.info(phrase_cumul_mensuel)

            else:
                log.critical(phrase_ok_ko)
                cumul_mensuel_posit = d - p
                log.critical(phrase_cumul_mensuel)
                log.critical(
                    "prejudice de {} pour le mois".format(cumul_mensuel_posit))

            cumul_annuel_posit = cumul_annuel_posit + cumul_mensuel_posit
            cumul_annuel_neg = cumul_annuel_neg + cumul_mensuel_neg
            # fin de pour chaque mois de l'année
        # debut de pour chaque année
        log.critical(
            "cumul_annuel_posit (le seul à prendre en ocmpte puisque les heures sup sont comptees à la semaine et payees au mois. on s arrete donc au décompte des mois positifs): {}"
            .format(cumul_annuel_posit))
        log.info("cumul_annuel_neg : {}".format(cumul_annuel_neg))
        log.critical("prejudice annuel (prejudice si posit) {}".format(
            cumul_annuel_posit + cumul_annuel_neg))
        cumul_total_posit = cumul_annuel_posit + cumul_total_posit
        cumul_total_neg = cumul_annuel_neg + cumul_total_neg
        # fin de pour chaque annee
    #debut de decompte final
    log.critical(
        "pour action: cumul total posit : {}".format(cumul_total_posit))
    log.info("pour info : cumul total neg: {}".format(cumul_total_neg))
    cumul_total = cumul_total_posit + cumul_total_neg
    log.critical("prejudice si chiffre positif: {}".format(cumul_total))
Example #7
0
def iter_heures_sup_annees_a():
    for a in db.bdd().iterAnneesDispo():
        annee = int(a)
        yield gen_heures_sup_annee_a(a)