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 ADDED
@@ -0,0 +1,9 @@
1
+ from .core import (
2
+ brut_net_aylik,
3
+ brut_net_yillik,
4
+ net_brut_aylik,
5
+ net_brut_yillik,
6
+ SABITLER
7
+ )
8
+
9
+ __version__ = "0.0.1"
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,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.2)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ MIT License
@@ -0,0 +1 @@
1
+ bordro