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))
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))
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))
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))
def asGehalt(vStr): v = parse_decimal(vStr, locale="de") if v < 0: raise ValueError return dec(v)
def givenGehalt(self, jahr: int, gus: GuS, brutto, sonderProzent): self.ötv.mitGehalt( jahr, gus.gruppe, Gehälter(dec(sonderProzent), {gus.stufe: dec(brutto)}))