summaryrefslogtreecommitdiff
path: root/exekutor.py
diff options
context:
space:
mode:
Diffstat (limited to 'exekutor.py')
-rw-r--r--exekutor.py111
1 files changed, 111 insertions, 0 deletions
diff --git a/exekutor.py b/exekutor.py
new file mode 100644
index 0000000..6992692
--- /dev/null
+++ b/exekutor.py
@@ -0,0 +1,111 @@
+# -*- coding: utf-8 -*-
+import math
+from datetime import *
+#import dph
+import json
+
+class Exekutor:
+ def __init__(self, napad, rozvrh, duzp, naklEx, naklOp):
+ self.rozvrh = float(rozvrh)
+ self.nhv = float(naklEx)
+ self.nop = float(naklOp)
+ self.datum = datetime.strptime(napad, "%Y-%m-%d")
+ self.duzp = datetime.strptime(duzp, "%Y-%m-%d")
+ with open("exekutor_tarif.json") as t:
+ self.tarif_tab = json.loads(t.read())
+ with open("exekutor_dph.json") as d:
+ self.dph_tab = json.loads(d.read())
+
+# Určí koeficient pro výpočet DPH dle sazby odpovídající zvolenému datu DUZP
+
+ def kDph(self):
+ zmeny_dph = sorted(self.dph_tab)
+ print(zmeny_dph)
+ pocet_zmen = len(zmeny_dph)
+ for i in range(pocet_zmen):
+ if self.duzp >= datetime.strptime(zmeny_dph[i], "%Y-%m-%d") and self.duzp <= datetime.strptime(zmeny_dph[i+1], "%Y-%m-%d"):
+ sazba = self.dph_tab[zmeny_dph[i+1]
+ k = 1 + sazba
+ return k
+
+# Tato funkce vybere správné hodnoty tarifu pro datum zahájení řízení
+# zadané při inicializaci třídy Exekutor.
+
+ def vyberTarif(self):
+ zmeny_tarifu = self.tarif_tab.keys()
+ pocet_zmen = len(zmeny_tarifu)
+ zero = datetime.min
+ inf = datetime.max
+ prvni_zmena = datetime.strptime(zmeny_tarifu[0], "%Y-%m-%d")-timedelta(1)
+ posledni_zmena = datetime.strptime(zmeny_tarifu[pocet_zmen-1], "%Y-%m-%d")
+ obdobi = [ [zero, prvni_zmena] ]
+ for i in range(pocet_zmen-1):
+ stop = datetime.strptime(zmeny_tarifu[i-1], "%Y-%m-%d")-timedelta(1)
+ start = datetime.strptime(zmeny_tarifu[i], "%Y-%m-%d")
+ obdobi.append([start, stop])
+ obdobi.append([posledni_zmena,inf])
+ pocet_obdobi = len(obdobi)
+ for o in range(pocet_obdobi):
+ if self.datum <= obdobi[0][1]:
+ break
+ elif self.datum >= obdobi[o][0] and self.datum <= obdobi[o][1]:
+ tar = datetime.strftime(obdobi[o][0], "%Y-%m-%d")
+ tarif = self.tarif_tab[tar]
+ return tarif
+
+
+# Pomocná funkce, která vypočítá maximální odměnu pro jednotlivá pásma tarifu a
+# maximální rozdělovanou částku pro dané pásmo tarifu a vstupní hodnoty náhrady
+# hotových výdajů a nákladů exekuce oprávněného. Dále se vypočítá pomocná konstanta
+# rozdil, která se používá pro finální výpočet. Tato konstanta odečítá z
+# z rozdělované částky součet odměn za předešlá pásma vynásobený rozdílem tarifní sazby.
+
+ def tarif(self):
+ idx = 0
+ dph = self.kDph()
+ max_odmena = []
+ max_pasmo = []
+ rozdil = []
+ while idx <= len(self.vyberTarif()["tarif"]) - 1:
+ cur = self.vyberTarif()["tarif"][idx]
+ if idx == 0:
+ prev = 0
+ soucet = 0
+ p = self.vyberTarif()["tarif"][idx]+dph*(self.vyberTarif()["tarif"][idx]*self.vyberTarif()["sazby"][idx]+self.nhv)+self.nop
+ r = 0
+ else:
+ prev = self.vyberTarif()["tarif"][idx-1]
+ soucet = max_odmena[idx-1]
+ p = self.vyberTarif()["tarif"][idx]+dph*(max_odmena[idx-1]+(self.vyberTarif()["tarif"][idx]-self.vyberTarif()["tarif"][idx-1])*self.vyberTarif()["sazby"][idx]+self.nhv)+self.nop
+ r = (max_odmena[idx-1] - self.vyberTarif()["sazby"][idx] * self.vyberTarif()["tarif"][idx-1]) * 1.05
+ m = soucet + math.ceil((cur - prev) * self.vyberTarif()["sazby"][idx] / 10) * 10
+ max_odmena.append(m)
+ max_pasmo.append(p)
+ rozdil.append(r)
+ idx += 1
+ tarif = self.vyberTarif()["tarif"], self.vyberTarif()["sazby"], tuple(max_odmena[:]), tuple(max_pasmo[:]), tuple(rozdil[:])
+ return tarif
+
+ def rozdeleni(self):
+ suma = self.rozvrh
+ dph = self.kDph()
+ if suma <= self.tarif()[3][0]:
+ r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[4][0])/(1 + dph * self.vyberTarif()["sazby"][0])
+ r_odmena = r_opravneny * self.tarif()[1][0]
+ elif suma <= self.tarif()[3][1]:
+ r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[4][1])/(1 + dph * self.vyberTarif()["sazby"][1])
+ r_odmena = r_opravneny * self.tarif()[1][1]
+ elif suma <= self.tarif()[3][2]:
+ r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[4][2])/(1 + dph * self.vyberTarif()["sazby"][2])
+ r_odmena = r_opravneny * self.tarif()[1][2]
+ elif suma <= self.tarif()[3][3]:
+ r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[4][3])/(1 + dph * self.vyberTarif()["sazby"][3])
+ r_odmena = r_opravneny * self.tarif()[1][3]
+ elif suma <= self.tarif()[3][4]:
+ r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[4][4])/(1 + dph * self.vyberTarif()["sazby"][4])
+ r_odmena = r_opravneny * self.tarif()[1][4]
+ else:
+ r_opravneny = (suma - dph * self.nhv - self.nop - self.tarif()[2][4] * dph)
+ r_odmena = self.tarif()[2][4]
+ rozdel = [round(r_opravneny,2), round(r_odmena,-1), round(round(r_odmena,-1) * dph - round(r_odmena,-1),2), round(self.nhv,2), round(self.nhv * dph - self.nhv,2), round(self.nop,2)]
+ return rozdel