Exemple #1
0
 def testGehaltAndSonderzahlungMonatlich(self):
     self.givenGehalt(2012, AllGuS.E10_3, 8., 75.)
     s = Stelle(AllGuS.E10_3, date(2012, 1, 1), dec(40.))
     self.assertAlmostEqual(dec(1.3 * 8. * .4),
                            self.ötv.monatsGesamt(2012, s))
     self.assertAlmostEqual(dec(1.3 * 8. * .4 * .75),
                            self.ötv.sonderzahlung(2012, s))
Exemple #2
0
    def testBasicFactsMonatlich(self):
        self.givenGehalt(2012, AllGuS.E10_3, 8., 75.)

        self.assertAlmostEqual(dec(1.3 * 8.),
                               self.ötv._monatsGesamt(2012, AllGuS.E10_3))
        self.assertAlmostEqual(75.,
                               self.ötv._sonderZahlProzent(2012, AllGuS.E10_3))
Exemple #3
0
    def calcSonderzahlung(self, stichtag: date, anstellung : Anstellung) -> Optional[Decimal]:
        """
        Calculate the Jahressonderzahlung according to
        https://oeffentlicher-dienst.info/tv-l/allg/jahressonderzahlung.html
        
        :return: None if Sonderzahlung does not apply (i.e., Stichtag is not November),
                    or a Decimal denoting the Sonderzahlung
        """
        # if not Nov, nothing to do here
        if stichtag.month != 11:
            return None

        # if end date is before Dez, it's zero
        referenzJahr = stichtag.year
        if anstellung.bis < date(referenzJahr, 12, 1):
            return Decimal(0.)

        baseStellen = anstellung.findBaseStellen(referenzJahr)

        sonderzahlBases = [self.ötv.sonderzahlung(referenzJahr, stelle) for stelle in baseStellen]

        # be careful not to round the Anteil - this amplifies to many Euros
        anteil = Decimal(anstellung.monateAngestellt(referenzJahr) / 12.)

        return dec(anteil * sum(sonderzahlBases) / len(sonderzahlBases))
Exemple #4
0
    def berechne(self):
        vonDate = qDate2date(self.beschäftigung.vonPicker.date())
        bisDate = qDate2date(self.beschäftigung.bisPicker.date())

        gruppe = self.beschäftigung.gruppe.currentItem()
        stufe = self.weiterOderNeu.stufe.currentItem()
        umfang = dec(self.beschäftigung.umfang.value())

        stufenStart = qDate2date(self.weiterOderNeu.seit(
        )) if self.weiterOderNeu.istWeiter() else vonDate

        anst = Anstellung(Stelle(GuS(gruppe, stufe), stufenStart, umfang),
                          vonDate, bisDate)
        summe, details = self.summierer.calc(anst)
        self.details.clear()
        for monatsKosten in details:
            self.details.addDetail(monatsKosten)
        self.summe.total.setText("{0:n} €".format(summe))
Exemple #5
0
def asGehalt(vStr):
    v = parse_decimal(vStr, locale="de")
    if v < 0: raise ValueError
    return dec(v)
Exemple #6
0
 def givenGehalt(self, jahr: int, gus: GuS, brutto, sonderProzent):
     self.ötv.mitGehalt(
         jahr, gus.gruppe,
         Gehälter(dec(sonderProzent), {gus.stufe: dec(brutto)}))