tamer-bordro-hesaplama 0.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bordro/__init__.py +9 -0
- bordro/core.py +248 -0
- bordro/parametreler/2026.json +86 -0
- tamer_bordro_hesaplama-0.0.1.dist-info/METADATA +108 -0
- tamer_bordro_hesaplama-0.0.1.dist-info/RECORD +8 -0
- tamer_bordro_hesaplama-0.0.1.dist-info/WHEEL +5 -0
- tamer_bordro_hesaplama-0.0.1.dist-info/licenses/LICENSE +1 -0
- tamer_bordro_hesaplama-0.0.1.dist-info/top_level.txt +1 -0
bordro/__init__.py
ADDED
bordro/core.py
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MAAŞ DÖNÜŞÜM ÇEKİRDEK MODÜLÜ (CORE)
|
|
3
|
+
- Brütten Nete & Netten Brüte Çeviri
|
|
4
|
+
- Aylık ve Yıllık Hesaplama
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
import os
|
|
9
|
+
import pandas as pd
|
|
10
|
+
from typing import Dict, List, Union, Optional
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# PARAMETRE YÖNETİMİ
|
|
14
|
+
|
|
15
|
+
class BordroParametreleri:
|
|
16
|
+
def __init__(self, yil: int = 2026):
|
|
17
|
+
self.veriler = self._json_yukle(yil)
|
|
18
|
+
|
|
19
|
+
self.ASGARI_UCRET_BRUT = self.veriler["ASGARI_UCRET_BRUT"]
|
|
20
|
+
# Tavanı hesapla
|
|
21
|
+
self.SGK_TAVAN = self.ASGARI_UCRET_BRUT * self.veriler["SGK_TAVAN_KATSAYI"]
|
|
22
|
+
|
|
23
|
+
self.AYLAR = self.veriler["AYLAR"]
|
|
24
|
+
self.ORAN_BES = self.veriler["ORANLAR"]["BES"]
|
|
25
|
+
self.ORAN_DAMGA = self.veriler["ORANLAR"]["DAMGA"]
|
|
26
|
+
|
|
27
|
+
# Sigorta Tipleri (Sadece işçi paylarını alacağız)
|
|
28
|
+
self.SIGORTA_TIPLERI = self.veriler["SIGORTA_TIPLERI"]
|
|
29
|
+
self.ENGELLILIK = self.veriler["ENGELLILIK_INDIRIMLERI"]
|
|
30
|
+
|
|
31
|
+
# Vergi dilimlerindeki null değerini sonsuzluğa (inf) çevir
|
|
32
|
+
dilimler = self.veriler["GELIR_VERGISI_DILIMLERI"]
|
|
33
|
+
if dilimler[-1][0] is None: dilimler[-1][0] = float('inf')
|
|
34
|
+
self.GELIR_VERGISI_DILIMLERI = dilimler
|
|
35
|
+
|
|
36
|
+
def _json_yukle(self, yil: int) -> Dict:
|
|
37
|
+
base_path = os.path.dirname(os.path.abspath(__file__))
|
|
38
|
+
json_path = os.path.join(base_path, "parametreler", f"{yil}.json")
|
|
39
|
+
if not os.path.exists(json_path):
|
|
40
|
+
raise FileNotFoundError(f"Parametre dosyası bulunamadı: {json_path}")
|
|
41
|
+
with open(json_path, 'r', encoding='utf-8') as f:
|
|
42
|
+
return json.load(f)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# Global Sabitler
|
|
46
|
+
SABITLER = BordroParametreleri(2026)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
# YARDIMCI FONKSİYONLAR
|
|
51
|
+
|
|
52
|
+
def yuvarla(sayi: float) -> float:
|
|
53
|
+
"""Para birimi yuvarlama (2 hane)"""
|
|
54
|
+
return round(float(sayi or 0), 2)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def gelir_vergisi_hesapla(matrah: float, kumulatif_matrah: float = 0) -> float:
|
|
58
|
+
"""Kümülatif matraha göre dilimli gelir vergisi hesaplar."""
|
|
59
|
+
toplam_vergi = 0
|
|
60
|
+
hesaplanacak = matrah
|
|
61
|
+
gecici_kumulatif = kumulatif_matrah
|
|
62
|
+
|
|
63
|
+
for sinir, oran in SABITLER.GELIR_VERGISI_DILIMLERI:
|
|
64
|
+
if gecici_kumulatif >= sinir:
|
|
65
|
+
continue
|
|
66
|
+
|
|
67
|
+
kalan_limit = sinir - gecici_kumulatif
|
|
68
|
+
dilim_ici = min(hesaplanacak, kalan_limit)
|
|
69
|
+
|
|
70
|
+
toplam_vergi += dilim_ici * oran
|
|
71
|
+
hesaplanacak -= dilim_ici
|
|
72
|
+
gecici_kumulatif += dilim_ici
|
|
73
|
+
|
|
74
|
+
if hesaplanacak <= 0:
|
|
75
|
+
break
|
|
76
|
+
|
|
77
|
+
return toplam_vergi
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
# ANA FONKSİYON: BRÜT → NET (AYLIK)
|
|
82
|
+
|
|
83
|
+
def brut_net_aylik(brut_maas: float,
|
|
84
|
+
ay: int = 1,
|
|
85
|
+
devreden_matrah: Optional[float] = None,
|
|
86
|
+
sigorta_tipi_kodu: str = "01",
|
|
87
|
+
engellilik_derecesi: str = "0",
|
|
88
|
+
bes_var_mi: bool = False) -> Dict:
|
|
89
|
+
"""
|
|
90
|
+
Verilen brüt maaşın o ayki net karşılığını hesaplar.
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
# Parametre Hazırlığı
|
|
94
|
+
ay_ismi = SABITLER.AYLAR[ay - 1]
|
|
95
|
+
sigorta = SABITLER.SIGORTA_TIPLERI.get(sigorta_tipi_kodu, SABITLER.SIGORTA_TIPLERI["01"])
|
|
96
|
+
engelli_indirim = SABITLER.ENGELLILIK.get(str(engellilik_derecesi), 0)
|
|
97
|
+
|
|
98
|
+
# Devreden Matrah Yoksa Hesapla (Önceki ayları simüle et)
|
|
99
|
+
if devreden_matrah is None:
|
|
100
|
+
if ay == 1:
|
|
101
|
+
devreden_matrah = 0
|
|
102
|
+
else:
|
|
103
|
+
kumulatif = 0
|
|
104
|
+
for i in range(1, ay):
|
|
105
|
+
onceki = brut_net_aylik(brut_maas, i, kumulatif,
|
|
106
|
+
sigorta_tipi_kodu, engellilik_derecesi, bes_var_mi)
|
|
107
|
+
kumulatif = onceki['kumulatif_matrah']
|
|
108
|
+
devreden_matrah = kumulatif
|
|
109
|
+
|
|
110
|
+
# HESAPLAMA
|
|
111
|
+
|
|
112
|
+
# 1. SGK ve İşsizlik (İşçi Payı)
|
|
113
|
+
sgk_matrah = min(brut_maas, SABITLER.SGK_TAVAN)
|
|
114
|
+
sgk_isci = yuvarla(sgk_matrah * sigorta["Isci_SGK"])
|
|
115
|
+
issizlik_isci = yuvarla(sgk_matrah * sigorta["Isci_Iss"])
|
|
116
|
+
|
|
117
|
+
# Gelir Vergisi
|
|
118
|
+
gv_matrah = max(0, brut_maas - sgk_isci - issizlik_isci - engelli_indirim)
|
|
119
|
+
|
|
120
|
+
if sigorta["Vergi_Muaf"]:
|
|
121
|
+
odenecek_gv = 0
|
|
122
|
+
else:
|
|
123
|
+
# Asgari Ücret İstisnası Hesabı
|
|
124
|
+
asgari_brut = SABITLER.ASGARI_UCRET_BRUT
|
|
125
|
+
asgari_sgk = yuvarla(asgari_brut * 0.14) # Standart %14
|
|
126
|
+
asgari_iss = yuvarla(asgari_brut * 0.01) # Standart %1
|
|
127
|
+
asgari_gv_matrah = asgari_brut - asgari_sgk - asgari_iss
|
|
128
|
+
|
|
129
|
+
# Vergi Hesapla
|
|
130
|
+
gelir_vergisi = yuvarla(gelir_vergisi_hesapla(gv_matrah, devreden_matrah))
|
|
131
|
+
istisna_gv = yuvarla(gelir_vergisi_hesapla(asgari_gv_matrah, devreden_matrah))
|
|
132
|
+
|
|
133
|
+
# İstisnayı Düş
|
|
134
|
+
odenecek_gv = max(0, gelir_vergisi - istisna_gv)
|
|
135
|
+
|
|
136
|
+
# Damga Vergisi
|
|
137
|
+
damga_vergisi = yuvarla(brut_maas * SABITLER.ORAN_DAMGA)
|
|
138
|
+
asgari_damga = yuvarla(SABITLER.ASGARI_UCRET_BRUT * SABITLER.ORAN_DAMGA)
|
|
139
|
+
odenecek_dv = max(0, damga_vergisi - asgari_damga)
|
|
140
|
+
|
|
141
|
+
# BES Kesintisi
|
|
142
|
+
bes_tutari = yuvarla(brut_maas * SABITLER.ORAN_BES) if bes_var_mi else 0
|
|
143
|
+
|
|
144
|
+
# NET MAAŞ
|
|
145
|
+
toplam_kesinti = sgk_isci + issizlik_isci + odenecek_gv + odenecek_dv + bes_tutari
|
|
146
|
+
net_maas = yuvarla(brut_maas - toplam_kesinti)
|
|
147
|
+
|
|
148
|
+
return {
|
|
149
|
+
'ay': ay_ismi,
|
|
150
|
+
'brut': brut_maas,
|
|
151
|
+
'net': net_maas,
|
|
152
|
+
'kumulatif_matrah': devreden_matrah + gv_matrah,
|
|
153
|
+
'sgk_isci': sgk_isci,
|
|
154
|
+
'issizlik_isci': issizlik_isci,
|
|
155
|
+
'gv': odenecek_gv,
|
|
156
|
+
'dv': odenecek_dv,
|
|
157
|
+
'bes': bes_tutari
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
# ANA FONKSİYON: BRÜT → NET (YILLIK LİSTE)
|
|
162
|
+
|
|
163
|
+
def brut_net_yillik(brut_maas: float,
|
|
164
|
+
sigorta_tipi_kodu: str = "01",
|
|
165
|
+
engellilik_derecesi: str = "0",
|
|
166
|
+
bes_var_mi: bool = False,
|
|
167
|
+
dataframe: bool = True) -> Union[pd.DataFrame, List[Dict]]:
|
|
168
|
+
"""Brüt maaşın 12 aylık dökümünü verir."""
|
|
169
|
+
sonuclar = []
|
|
170
|
+
kumulatif = 0
|
|
171
|
+
|
|
172
|
+
for ay in range(1, 13):
|
|
173
|
+
sonuc = brut_net_aylik(brut_maas, ay, kumulatif,
|
|
174
|
+
sigorta_tipi_kodu, engellilik_derecesi, bes_var_mi)
|
|
175
|
+
sonuclar.append(sonuc)
|
|
176
|
+
kumulatif = sonuc['kumulatif_matrah']
|
|
177
|
+
|
|
178
|
+
if dataframe:
|
|
179
|
+
df = pd.DataFrame(sonuclar)
|
|
180
|
+
toplam = df.select_dtypes(include=['number']).sum()
|
|
181
|
+
toplam['ay'] = 'TOPLAM'
|
|
182
|
+
df.loc['TOPLAM'] = toplam
|
|
183
|
+
return df
|
|
184
|
+
|
|
185
|
+
return sonuclar
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
# TERS FONKSİYON: NET → BRÜT (AYLIK)
|
|
190
|
+
|
|
191
|
+
def net_brut_aylik(hedef_net: float,
|
|
192
|
+
ay: int = 1,
|
|
193
|
+
sigorta_tipi_kodu: str = "01",
|
|
194
|
+
engellilik_derecesi: str = "0",
|
|
195
|
+
bes_var_mi: bool = False) -> Dict:
|
|
196
|
+
"""
|
|
197
|
+
İstenilen NET maaşı elde etmek için gereken BRÜT maaşı bulur.
|
|
198
|
+
(Deneme-Yanılma / Bisection Yöntemi ile çalışır)
|
|
199
|
+
"""
|
|
200
|
+
|
|
201
|
+
alt = hedef_net
|
|
202
|
+
ust = hedef_net * 2.5 # Tahmini üst sınır
|
|
203
|
+
|
|
204
|
+
# 50 adımda doğru sonuca yaklaş
|
|
205
|
+
for _ in range(50):
|
|
206
|
+
orta_brut = (alt + ust) / 2
|
|
207
|
+
|
|
208
|
+
sonuc = brut_net_aylik(orta_brut, ay, None,
|
|
209
|
+
sigorta_tipi_kodu, engellilik_derecesi, bes_var_mi)
|
|
210
|
+
|
|
211
|
+
fark = sonuc['net'] - hedef_net
|
|
212
|
+
|
|
213
|
+
if abs(fark) < 0.01: # 1 kuruş hassasiyet
|
|
214
|
+
return sonuc
|
|
215
|
+
|
|
216
|
+
if fark < 0: # Hesaplanan az geldiyse brütü artır
|
|
217
|
+
alt = orta_brut
|
|
218
|
+
else: # Hesaplanan çok geldiyse brütü azalt
|
|
219
|
+
ust = orta_brut
|
|
220
|
+
|
|
221
|
+
return sonuc
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
# TERS FONKSİYON: NET → BRÜT (YILLIK)
|
|
226
|
+
|
|
227
|
+
def net_brut_yillik(hedef_net: float,
|
|
228
|
+
sigorta_tipi_kodu: str = "01",
|
|
229
|
+
engellilik_derecesi: str = "0",
|
|
230
|
+
bes_var_mi: bool = False,
|
|
231
|
+
dataframe: bool = True) -> Union[pd.DataFrame, List[Dict]]:
|
|
232
|
+
"""Her ay ele o NET paranın geçmesi için gereken Brütleri hesaplar."""
|
|
233
|
+
|
|
234
|
+
sonuclar = []
|
|
235
|
+
|
|
236
|
+
for ay in range(1, 13):
|
|
237
|
+
|
|
238
|
+
sonuc = net_brut_aylik(hedef_net, ay, sigorta_tipi_kodu, engellilik_derecesi, bes_var_mi)
|
|
239
|
+
sonuclar.append(sonuc)
|
|
240
|
+
|
|
241
|
+
if dataframe:
|
|
242
|
+
df = pd.DataFrame(sonuclar)
|
|
243
|
+
toplam = df.select_dtypes(include=['number']).sum()
|
|
244
|
+
toplam['ay'] = 'TOPLAM'
|
|
245
|
+
df.loc['TOPLAM'] = toplam
|
|
246
|
+
return df
|
|
247
|
+
|
|
248
|
+
return sonuclar
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"YIL": 2026,
|
|
3
|
+
"ASGARI_UCRET_BRUT": 33030.00,
|
|
4
|
+
"SGK_TAVAN_KATSAYI": 9.0,
|
|
5
|
+
"AYLAR": ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran",
|
|
6
|
+
"Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
|
|
7
|
+
|
|
8
|
+
"GELIR_VERGISI_DILIMLERI": [
|
|
9
|
+
[190000.00, 0.15],
|
|
10
|
+
[400000.00, 0.20],
|
|
11
|
+
[1500000.00, 0.27],
|
|
12
|
+
[5300000.00, 0.35],
|
|
13
|
+
[null, 0.40]
|
|
14
|
+
],
|
|
15
|
+
|
|
16
|
+
"ORANLAR": {
|
|
17
|
+
"BES": 0.03,
|
|
18
|
+
"DAMGA": 0.00759
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
"ENGELLILIK_INDIRIMLERI": {
|
|
22
|
+
"0": 0,
|
|
23
|
+
"1": 12000,
|
|
24
|
+
"2": 7000,
|
|
25
|
+
"3": 3000
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
"SIGORTA_TIPLERI": {
|
|
29
|
+
"00": {"Ad": "00 - SGK'ya Tabi Değil", "Isci_SGK": 0.00, "Isci_Iss": 0.00, "Isveren_SGK": 0.00, "Isveren_Iss": 0.00, "Vergi_Muaf": false},
|
|
30
|
+
"01": {"Ad": "01 - Normal Çalışan", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2175, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
31
|
+
"02": {"Ad": "02 - Emekli (SGDP)", "Isci_SGK": 0.075, "Isci_Iss": 0.00, "Isveren_SGK": 0.245, "Isveren_Iss": 0.00, "Vergi_Muaf": false},
|
|
32
|
+
"04": {"Ad": "04 - Yeraltı Sürekli (Maden)", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2475, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
33
|
+
"05": {"Ad": "05 - Yeraltı Gruplu", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2475, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
34
|
+
"06": {"Ad": "06 - Yer Üstü Gruplu", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2175, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
35
|
+
"07": {"Ad": "07 - Çırak / Öğrenci", "Isci_SGK": 0.00, "Isci_Iss": 0.00, "Isveren_SGK": 0.02, "Isveren_Iss": 0.00, "Vergi_Muaf": true},
|
|
36
|
+
"12": {"Ad": "12 - Banka Sandıkları", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2175, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
37
|
+
"13": {"Ad": "13 - İşsizliksiz Normal", "Isci_SGK": 0.14, "Isci_Iss": 0.00, "Isveren_SGK": 0.2175, "Isveren_Iss": 0.00, "Vergi_Muaf": false},
|
|
38
|
+
"14": {"Ad": "14 - Libya", "Isci_SGK": 0.05, "Isci_Iss": 0.00, "Isveren_SGK": 0.095, "Isveren_Iss": 0.00, "Vergi_Muaf": false},
|
|
39
|
+
"19": {"Ad": "19 - Hükümlü ve Tutuklu", "Isci_SGK": 0.00, "Isci_Iss": 0.00, "Isveren_SGK": 0.02, "Isveren_Iss": 0.00, "Vergi_Muaf": true},
|
|
40
|
+
"20": {"Ad": "20 - Almanya İstisna", "Isci_SGK": 0.00, "Isci_Iss": 0.00, "Isveren_SGK": 0.00, "Isveren_Iss": 0.00, "Vergi_Muaf": false},
|
|
41
|
+
"21": {"Ad": "21 - Yurt Dışı (Sözleşmesiz)", "Isci_SGK": 0.06, "Isci_Iss": 0.00, "Isveren_SGK": 0.115, "Isveren_Iss": 0.00, "Vergi_Muaf": false},
|
|
42
|
+
"22": {"Ad": "22 - Stajyer Öğrenci", "Isci_SGK": 0.00, "Isci_Iss": 0.00, "Isveren_SGK": 0.02, "Isveren_Iss": 0.00, "Vergi_Muaf": true},
|
|
43
|
+
"23": {"Ad": "23 - Harp Malulleri", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2175, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
44
|
+
"25": {"Ad": "25 - İŞKUR Kursiyer", "Isci_SGK": 0.00, "Isci_Iss": 0.00, "Isveren_SGK": 0.00, "Isveren_Iss": 0.00, "Vergi_Muaf": true},
|
|
45
|
+
"28": {"Ad": "28 - İş Kaybı Tazminatı", "Isci_SGK": 0.00, "Isci_Iss": 0.00, "Isveren_SGK": 0.00, "Isveren_Iss": 0.00, "Vergi_Muaf": false},
|
|
46
|
+
"29": {"Ad": "29 - 60 Gün FHSZ (Tüm)", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2275, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
47
|
+
"30": {"Ad": "30 - 60 Gün FHSZ (İşsizliksiz)", "Isci_SGK": 0.14, "Isci_Iss": 0.00, "Isveren_SGK": 0.2275, "Isveren_Iss": 0.00, "Vergi_Muaf": false},
|
|
48
|
+
"31": {"Ad": "31 - 60 Gün FHSZ (Malul)", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2275, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
49
|
+
"32": {"Ad": "32 - 90 Gün FHSZ (Tüm)", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2325, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
50
|
+
"33": {"Ad": "33 - 90 Gün FHSZ (İşsizliksiz)", "Isci_SGK": 0.14, "Isci_Iss": 0.00, "Isveren_SGK": 0.2325, "Isveren_Iss": 0.00, "Vergi_Muaf": false},
|
|
51
|
+
"34": {"Ad": "34 - 90 Gün FHSZ (Malul)", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2325, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
52
|
+
"35": {"Ad": "35 - 180 Gün FHSZ (Tüm)", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2475, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
53
|
+
"37": {"Ad": "37 - 180 Gün FHSZ (Malul)", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2475, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
54
|
+
"39": {"Ad": "39 - Birleşik Krallık/İsviçre", "Isci_SGK": 0.05, "Isci_Iss": 0.00, "Isveren_SGK": 0.095, "Isveren_Iss": 0.00, "Vergi_Muaf": false},
|
|
55
|
+
"41": {"Ad": "41 - Askıda Olanlar", "Isci_SGK": 0.00, "Isci_Iss": 0.00, "Isveren_SGK": 0.12, "Isveren_Iss": 0.00, "Vergi_Muaf": false},
|
|
56
|
+
"90": {"Ad": "90 - İtibari Hizmet", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2175, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
57
|
+
"91": {"Ad": "91 - 60 Gün FHSZ + İtibari", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2275, "Isveren_Iss": 0.02, "Vergi_Muaf": false},
|
|
58
|
+
"92": {"Ad": "92 - 90 Gün FHSZ + İtibari", "Isci_SGK": 0.14, "Isci_Iss": 0.01, "Isveren_SGK": 0.2325, "Isveren_Iss": 0.02, "Vergi_Muaf": false}
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
"TESVIK_KODLARI": {
|
|
62
|
+
"00000": {"Ad": "Teşviksiz", "Indirim": 0.00},
|
|
63
|
+
"05510": {"Ad": "05510 - Hazine (%5)", "Indirim": 0.05},
|
|
64
|
+
"05746": {"Ad": "05746 - Ar-Ge Merkezi", "Indirim": 0.2175},
|
|
65
|
+
"05921": {"Ad": "05921 - İşsizlik Ödeneği", "Indirim": 0.2175},
|
|
66
|
+
"06111": {"Ad": "06111 - Genç/Kadın İstihdamı", "Indirim": 0.2175},
|
|
67
|
+
"06486": {"Ad": "06486 - Bölgesel (6 Puan)", "Indirim": 0.11},
|
|
68
|
+
"06645": {"Ad": "06645 - İşbaşı Eğitim", "Indirim": 0.2175},
|
|
69
|
+
"14447": {"Ad": "14447 - İşsizlik Ödeneği", "Indirim": 0.05},
|
|
70
|
+
"14857": {"Ad": "14857 - Engelli Teşviki", "Indirim": 0.2175},
|
|
71
|
+
"15921": {"Ad": "15921 - 5921 Eski", "Indirim": 0.2175},
|
|
72
|
+
"16322": {"Ad": "16322 - Yatırım Teşviki", "Indirim": 0.05},
|
|
73
|
+
"24447": {"Ad": "24447 - İlave İstihdam (Hizmet)", "Indirim": 0.2175},
|
|
74
|
+
"25225": {"Ad": "25225 - Kültür Yatırımları", "Indirim": 0.2175},
|
|
75
|
+
"25510": {"Ad": "25510 - Yatırım Teşviki Ek", "Indirim": 0.05},
|
|
76
|
+
"26322": {"Ad": "26322 - Yatırım Teşviki Genel", "Indirim": 0.05},
|
|
77
|
+
"44447": {"Ad": "44447 - İlave İstihdam (İmalat)", "Indirim": 0.2175},
|
|
78
|
+
"46486": {"Ad": "46486 - Bölgesel Ek Puan", "Indirim": 0.11},
|
|
79
|
+
"54857": {"Ad": "54857 - Korumalı İşyeri", "Indirim": 0.2175},
|
|
80
|
+
"55225": {"Ad": "55225 - Kültür Girişimleri", "Indirim": 0.2175},
|
|
81
|
+
"56486": {"Ad": "56486 - Bölgesel Teşvik (En Yaygın)", "Indirim": 0.11},
|
|
82
|
+
"64447": {"Ad": "64447 - 4447 Diğer", "Indirim": 0.2175},
|
|
83
|
+
"66476": {"Ad": "66476 - Ar-Ge/Teknoloji", "Indirim": 0.2175},
|
|
84
|
+
"84447": {"Ad": "84447 - 4447 Özel", "Indirim": 0.2175}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tamer-bordro-hesaplama
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: 2026 Türkiye parametreleriyle çalışan, teşvik destekli Net-Brüt ve Brüt-Net maaş hesaplama motoru.
|
|
5
|
+
Author-email: Melisa Tamer <melisatamer4@gmail.com>
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
8
|
+
Classifier: Operating System :: OS Independent
|
|
9
|
+
Requires-Python: >=3.9
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Requires-Dist: pandas>=1.0.0
|
|
13
|
+
Dynamic: license-file
|
|
14
|
+
|
|
15
|
+
\# Maaş Dönüşüm Kütüphanesi (2026)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
Bu kütüphane, Türkiye 2026 parametreleriyle çalışır. \*\*Çalışanın maaşını aylık ve yıllık seçenekleriyle brütten nete ve netten brüte dönüştürür.\*\*
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
\## Özellikler
|
|
24
|
+
|
|
25
|
+
\- \*\*Brütten Nete:\*\* Maaşın net karşılığını ve vergi kesintilerini hesaplar.
|
|
26
|
+
|
|
27
|
+
\- \*\*Netten Brüte:\*\* İstenilen net maaş için gereken brüt tutarı hesaplar (Tersine hesaplama).
|
|
28
|
+
|
|
29
|
+
\- \*\*Aylık ve Yıllık:\*\* Tek satır kodla ister tek ayın, ister tüm yılın dökümünü alabilirsiniz.
|
|
30
|
+
|
|
31
|
+
\- \*\*Hata Toleransı:\*\* Yanlış sigorta kodu girilse bile varsayılan ayarlarla çalışmaya devam eder.
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
\## Kurulum
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
|
|
39
|
+
pip install tamer-bordro-hesaplama
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
\## Kullanım Örnekleri
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
\### 1. Maaşı Brütten Nete Dönüştürme
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
|
|
53
|
+
from bordro import brut\_net\_aylik
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
\# Ocak ayı için hesapla
|
|
58
|
+
|
|
59
|
+
sonuc = brut\_net\_aylik(60000, ay=1)
|
|
60
|
+
|
|
61
|
+
print(f"Net Maaş: {sonuc\['net']} TL")
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
\### 2. Maaşı Netten Brüte Dönüştürme
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
|
|
71
|
+
from bordro import net\_brut\_aylik
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
\# Şubat ayı için hesapla
|
|
76
|
+
|
|
77
|
+
hesap = net\_brut\_aylik(45000, ay=2)
|
|
78
|
+
|
|
79
|
+
print(f"Gereken Brüt Maaş: {hesap\['brut']} TL")
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
\### 3. Emekli Çalışanın Yıllık Maaş Tablosu
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
|
|
89
|
+
from bordro import brut\_net\_yillik
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
\# 75.000 TL Brüt alan Emekli çalışan (Kod: "02")
|
|
94
|
+
|
|
95
|
+
tablo = brut\_net\_yillik(75000, sigorta\_tipi\_kodu="02")
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
print(tablo)
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
bordro/__init__.py,sha256=u6-ZiuexZCLb6wbGoxIpDaV4iGL_3N4T4BkFQ3qo1qQ,147
|
|
2
|
+
bordro/core.py,sha256=1Ag-NuiSMtCEvPXO-ywF_xSTQahQzpck9eZ6z-s-qQw,8176
|
|
3
|
+
bordro/parametreler/2026.json,sha256=3fnIi4eOPkF3TFj0A5ElgH8fCHOoiXN-Rk_pHH9bFt8,6649
|
|
4
|
+
tamer_bordro_hesaplama-0.0.1.dist-info/licenses/LICENSE,sha256=q7KJbcPCqUAvkBuI1QNc8Kg9XPfBfnNkLN9WKwudO8U,11
|
|
5
|
+
tamer_bordro_hesaplama-0.0.1.dist-info/METADATA,sha256=ME0p5P6-B-JBmKl7jrfvDAUaUG7pL6kR8Sodx5iR1Kw,2063
|
|
6
|
+
tamer_bordro_hesaplama-0.0.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
7
|
+
tamer_bordro_hesaplama-0.0.1.dist-info/top_level.txt,sha256=8Wjqhckh32MFN270r-RsXGKZ2eK48CpZYAJTW7Xzxvc,7
|
|
8
|
+
tamer_bordro_hesaplama-0.0.1.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
MIT License
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
bordro
|