summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/exekutor_dph.json9
-rw-r--r--data/exekutor_tarif.json10
-rw-r--r--dph.py5
-rw-r--r--exekutor.py111
-rw-r--r--test.py6
5 files changed, 141 insertions, 0 deletions
diff --git a/data/exekutor_dph.json b/data/exekutor_dph.json
new file mode 100644
index 0000000..19ea4eb
--- /dev/null
+++ b/data/exekutor_dph.json
@@ -0,0 +1,9 @@
+{
+ "2003-12-31": 0.05,
+ "2004-04-30": 0.22,
+ "2009-12-31": 0.19,
+ "2012-12-31": 0.20,
+ "9999-12-31": 0.21
+
+ }
+
diff --git a/data/exekutor_tarif.json b/data/exekutor_tarif.json
new file mode 100644
index 0000000..34134d4
--- /dev/null
+++ b/data/exekutor_tarif.json
@@ -0,0 +1,10 @@
+{
+ "2001-09-21": {
+ "tarif": [ 20000, 3000000, 40000000, 50000000, 250000000 ],
+ "sazby": [ 0.15, 0.15, 0.10, 0.05, 0.01 ]
+ },
+ "2017-04-01": {
+ "tarif": [ 13333.33, 3000000, 40000000, 50000000, 250000000 ],
+ "sazby": [ 0.15, 0.15, 0.10, 0.05, 0.01 ]
+ }
+}
diff --git a/dph.py b/dph.py
new file mode 100644
index 0000000..78b9b50
--- /dev/null
+++ b/dph.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+
+class Dph:
+ def __init__(self, duzp):
+
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
diff --git a/test.py b/test.py
new file mode 100644
index 0000000..d4ad14f
--- /dev/null
+++ b/test.py
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+import exekutor
+
+x = exekutor.Exekutor("2018-01-19", 20600, "2005-04-30", 3500, 605)
+
+print(x.rozdeleni())