bordro-hesaplama 0.0.1__tar.gz

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.
@@ -0,0 +1 @@
1
+ MIT License
@@ -0,0 +1 @@
1
+ graft src
@@ -0,0 +1,170 @@
1
+ Metadata-Version: 2.4
2
+ Name: bordro-hesaplama
3
+ Version: 0.0.1
4
+ Summary: 2026 Türkiye parametreleriyle çalışan, aylık ve yıllık Net-Brüt ve Brüt-Net maaş dönüşümlerini yapan hesaplama motoru.
5
+ Author: Geliştirici
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
16
+
17
+ Türkiye'deki bordro hesaplamalarını basitleştiren Python kütüphanesi. Brüt maaştan net maaşa, net maaştan brüt maaşa dönüşüm yapmanızı sağlar.
18
+
19
+ ## 🚀 Özellikler
20
+
21
+ - ✅ **Brüt → Net** dönüşümü (aylık ve yıllık)
22
+ - ✅ **Net → Brüt** dönüşümü (aylık ve yıllık)
23
+ - ✅ Kademeli gelir vergisi hesaplama
24
+ - ✅ Asgari ücret istisnası desteği
25
+ - ✅ **30+ farklı sigorta tipi** desteği (Normal çalışan, Emekli, Çırak, Stajyer, vs.)
26
+ - ✅ Engelli çalışan indirimleri (1., 2., 3. derece)
27
+ - ✅ BES (Bireysel Emeklilik Sistemi) kesintisi
28
+ - ✅ 2026 güncel parametreleri
29
+
30
+ ## Kurulum
31
+
32
+ ```bash
33
+ pip install pandas
34
+ ```
35
+
36
+ Kütüphaneyi projenize dahil edin:
37
+
38
+ ```python
39
+ from bordro import brut_net_aylik, brut_net_yillik, net_brut_aylik, net_brut_yillik
40
+ ```
41
+
42
+ ## Parametreler
43
+
44
+ ### Sigorta Tipi Kodları (Öne Çıkanlar)
45
+
46
+ | Kod | Açıklama | SGK (İşçi) | İşsizlik (İşçi) | Vergi Muaf |
47
+ |-----|----------|------------|-----------------|------------|
48
+ | **"00"** | SGK'ya Tabi Değil | %0 | %0 | Hayır |
49
+ | **"01"** | Normal Çalışan (En Yaygın) | %14 | %1 | Hayır |
50
+ | **"02"** | Emekli (SGDP) | %7.5 | %0 | Hayır |
51
+ | **"07"** | Çırak / Öğrenci | %0 | %0 | **Evet** |
52
+ | **"13"** | İşsizliksiz Normal | %14 | %0 | Hayır |
53
+ | **"19"** | Hükümlü ve Tutuklu | %0 | %0 | **Evet** |
54
+ | **"22"** | Stajyer Öğrenci | %0 | %0 | **Evet** |
55
+ | **"25"** | İŞKUR Kursiyer | %0 | %0 | **Evet** |
56
+
57
+ **Not:** Toplam 30+ sigorta tipi mevcuttur. Tüm liste için `2026.json` dosyasına bakınız.
58
+
59
+ ### Engellilik Dereceleri
60
+
61
+ | Kod | Açıklama | Aylık İndirim (2026) |
62
+ |-----|----------|----------------------|
63
+ | **"0"** | Engelli değil | 0 TL |
64
+ | **"1"** | 1. Derece | 12,000 TL |
65
+ | **"2"** | 2. Derece | 7,000 TL |
66
+ | **"3"** | 3. Derece | 3,000 TL |
67
+
68
+ ### 2026 Güncel Parametreler
69
+
70
+ | Parametre | Değer |
71
+ |-----------|-------|
72
+ | **Asgari Ücret (Brüt)** | 33,030 TL |
73
+ | **SGK Tavanı** | 297,270 TL (Asgari ücret × 9) |
74
+ | **Damga Vergisi** | %0.759 |
75
+ | **BES Varsayılan Oran** | %3 |
76
+
77
+ ### Gelir Vergisi Dilimleri (2026)
78
+
79
+ | Matrah Aralığı | Vergi Oranı |
80
+ |----------------|-------------|
81
+ | 0 - 190,000 TL | %15 |
82
+ | 190,000 - 400,000 TL | %20 |
83
+ | 400,000 - 1,500,000 TL | %27 |
84
+ | 1,500,000 - 5,300,000 TL | %35 |
85
+ | 5,300,000 TL üzeri | %40 |
86
+
87
+ ## 📁 Proje Yapısı
88
+
89
+ ```
90
+ proje/
91
+
92
+ ├── core.py # Ana modül (hesaplama motoru)
93
+ ├── parametreler/ # Yıllık parametre dosyaları
94
+ │ └── 2026.json # 2026 yılı parametreleri
95
+ │ # (Asgari ücret, vergiler, sigorta tipleri vb.)
96
+ └── README.md # Bu dosya
97
+ ```
98
+
99
+ ## 💡 Kullanım Örnekleri
100
+
101
+ ### Örnek 1: Normal Çalışan vs Emekli Çalışan
102
+
103
+ ```python
104
+ # Normal çalışan
105
+ normal = brut_net_aylik(60000, sigorta_tipi_kodu="01")
106
+ print(f"Normal Çalışan Net: {normal['net']:.2f} TL")
107
+ print(f"SGK: {normal['sgk_isci']:.2f} TL")
108
+
109
+ # Emekli çalışan (daha az SGK kesilir)
110
+ emekli = brut_net_aylik(60000, sigorta_tipi_kodu="02")
111
+ print(f"Emekli Net: {emekli['net']:.2f} TL")
112
+ print(f"SGK: {emekli['sgk_isci']:.2f} TL")
113
+ print(f"Fark: {emekli['net'] - normal['net']:.2f} TL")
114
+ ```
115
+
116
+ ### Örnek 2: Farklı Aylardaki Net Maaş Farkı (Kümülatif Vergi)
117
+
118
+ ```python
119
+ # Ocak ayı
120
+ ocak = brut_net_aylik(70000, ay=1)
121
+ print(f"Ocak Net: {ocak['net']:.2f} TL")
122
+
123
+ # Haziran ayı
124
+ haziran = brut_net_aylik(70000, ay=6)
125
+ print(f"Haziran Net: {haziran['net']:.2f} TL")
126
+
127
+ # Aralık ayı (kümülatif vergi nedeniyle daha düşük)
128
+ aralik = brut_net_aylik(70000, ay=12)
129
+ print(f"Aralık Net: {aralik['net']:.2f} TL")
130
+
131
+ print(f"Ocak-Aralık Farkı: {ocak['net'] - aralik['net']:.2f} TL")
132
+ ```
133
+
134
+ ### Örnek 3: Engelli Çalışan Hesaplaması
135
+
136
+ ```python
137
+ # Normal çalışan
138
+ normal = brut_net_aylik(50000)
139
+
140
+ # 1. derece engelli (12,000 TL indirim)
141
+ engelli_1 = brut_net_aylik(50000, engel_derecesi="1")
142
+
143
+ # 2. derece engelli (7,000 TL indirim)
144
+ engelli_2 = brut_net_aylik(50000, engel_derecesi="2")
145
+
146
+ # 3. derece engelli (3,000 TL indirim)
147
+ engelli_3 = brut_net_aylik(50000, engel_derecesi="3")
148
+
149
+ print(f"Normal Net: {normal['net']:.2f} TL")
150
+ print(f"1. Derece Net: {engelli_1['net']:.2f} TL (+{engelli_1['net'] - normal['net']:.2f} TL)")
151
+ print(f"2. Derece Net: {engelli_2['net']:.2f} TL (+{engelli_2['net'] - normal['net']:.2f} TL)")
152
+ print(f"3. Derece Net: {engelli_3['net']:.2f} TL (+{engelli_3['net'] - normal['net']:.2f} TL)")
153
+ ```
154
+
155
+ ### Örnek 4: BES ile Vergi Avantajı
156
+
157
+ ```python
158
+ # BES olmadan
159
+ bes_yok = brut_net_aylik(80000, bes=False)
160
+
161
+ # %3 BES ile
162
+ bes_3 = brut_net_aylik(80000, bes=True, bes_orani=0.03)
163
+
164
+ print(f"BES Yok - Net: {bes_yok['net']:.2f} TL")
165
+ print(f"BES %3 - Net: {bes_3['net']:.2f} TL, BES: {bes_3['bes']:.2f} TL")
166
+ ```
167
+
168
+ ---
169
+
170
+ **Not**: Bu kütüphane **2026 yılı** Türkiye bordro mevzuatına göre hazırlanmıştır. Yeni yıllarda `parametreler/` klasöründe yeni JSON dosyası oluşturarak güncelleyebilirsiniz.
@@ -0,0 +1,156 @@
1
+ # Maaş Dönüşüm Kütüphanesi
2
+
3
+ Türkiye'deki bordro hesaplamalarını basitleştiren Python kütüphanesi. Brüt maaştan net maaşa, net maaştan brüt maaşa dönüşüm yapmanızı sağlar.
4
+
5
+ ## 🚀 Özellikler
6
+
7
+ - ✅ **Brüt → Net** dönüşümü (aylık ve yıllık)
8
+ - ✅ **Net → Brüt** dönüşümü (aylık ve yıllık)
9
+ - ✅ Kademeli gelir vergisi hesaplama
10
+ - ✅ Asgari ücret istisnası desteği
11
+ - ✅ **30+ farklı sigorta tipi** desteği (Normal çalışan, Emekli, Çırak, Stajyer, vs.)
12
+ - ✅ Engelli çalışan indirimleri (1., 2., 3. derece)
13
+ - ✅ BES (Bireysel Emeklilik Sistemi) kesintisi
14
+ - ✅ 2026 güncel parametreleri
15
+
16
+ ## Kurulum
17
+
18
+ ```bash
19
+ pip install pandas
20
+ ```
21
+
22
+ Kütüphaneyi projenize dahil edin:
23
+
24
+ ```python
25
+ from bordro import brut_net_aylik, brut_net_yillik, net_brut_aylik, net_brut_yillik
26
+ ```
27
+
28
+ ## Parametreler
29
+
30
+ ### Sigorta Tipi Kodları (Öne Çıkanlar)
31
+
32
+ | Kod | Açıklama | SGK (İşçi) | İşsizlik (İşçi) | Vergi Muaf |
33
+ |-----|----------|------------|-----------------|------------|
34
+ | **"00"** | SGK'ya Tabi Değil | %0 | %0 | Hayır |
35
+ | **"01"** | Normal Çalışan (En Yaygın) | %14 | %1 | Hayır |
36
+ | **"02"** | Emekli (SGDP) | %7.5 | %0 | Hayır |
37
+ | **"07"** | Çırak / Öğrenci | %0 | %0 | **Evet** |
38
+ | **"13"** | İşsizliksiz Normal | %14 | %0 | Hayır |
39
+ | **"19"** | Hükümlü ve Tutuklu | %0 | %0 | **Evet** |
40
+ | **"22"** | Stajyer Öğrenci | %0 | %0 | **Evet** |
41
+ | **"25"** | İŞKUR Kursiyer | %0 | %0 | **Evet** |
42
+
43
+ **Not:** Toplam 30+ sigorta tipi mevcuttur. Tüm liste için `2026.json` dosyasına bakınız.
44
+
45
+ ### Engellilik Dereceleri
46
+
47
+ | Kod | Açıklama | Aylık İndirim (2026) |
48
+ |-----|----------|----------------------|
49
+ | **"0"** | Engelli değil | 0 TL |
50
+ | **"1"** | 1. Derece | 12,000 TL |
51
+ | **"2"** | 2. Derece | 7,000 TL |
52
+ | **"3"** | 3. Derece | 3,000 TL |
53
+
54
+ ### 2026 Güncel Parametreler
55
+
56
+ | Parametre | Değer |
57
+ |-----------|-------|
58
+ | **Asgari Ücret (Brüt)** | 33,030 TL |
59
+ | **SGK Tavanı** | 297,270 TL (Asgari ücret × 9) |
60
+ | **Damga Vergisi** | %0.759 |
61
+ | **BES Varsayılan Oran** | %3 |
62
+
63
+ ### Gelir Vergisi Dilimleri (2026)
64
+
65
+ | Matrah Aralığı | Vergi Oranı |
66
+ |----------------|-------------|
67
+ | 0 - 190,000 TL | %15 |
68
+ | 190,000 - 400,000 TL | %20 |
69
+ | 400,000 - 1,500,000 TL | %27 |
70
+ | 1,500,000 - 5,300,000 TL | %35 |
71
+ | 5,300,000 TL üzeri | %40 |
72
+
73
+ ## 📁 Proje Yapısı
74
+
75
+ ```
76
+ proje/
77
+
78
+ ├── core.py # Ana modül (hesaplama motoru)
79
+ ├── parametreler/ # Yıllık parametre dosyaları
80
+ │ └── 2026.json # 2026 yılı parametreleri
81
+ │ # (Asgari ücret, vergiler, sigorta tipleri vb.)
82
+ └── README.md # Bu dosya
83
+ ```
84
+
85
+ ## 💡 Kullanım Örnekleri
86
+
87
+ ### Örnek 1: Normal Çalışan vs Emekli Çalışan
88
+
89
+ ```python
90
+ # Normal çalışan
91
+ normal = brut_net_aylik(60000, sigorta_tipi_kodu="01")
92
+ print(f"Normal Çalışan Net: {normal['net']:.2f} TL")
93
+ print(f"SGK: {normal['sgk_isci']:.2f} TL")
94
+
95
+ # Emekli çalışan (daha az SGK kesilir)
96
+ emekli = brut_net_aylik(60000, sigorta_tipi_kodu="02")
97
+ print(f"Emekli Net: {emekli['net']:.2f} TL")
98
+ print(f"SGK: {emekli['sgk_isci']:.2f} TL")
99
+ print(f"Fark: {emekli['net'] - normal['net']:.2f} TL")
100
+ ```
101
+
102
+ ### Örnek 2: Farklı Aylardaki Net Maaş Farkı (Kümülatif Vergi)
103
+
104
+ ```python
105
+ # Ocak ayı
106
+ ocak = brut_net_aylik(70000, ay=1)
107
+ print(f"Ocak Net: {ocak['net']:.2f} TL")
108
+
109
+ # Haziran ayı
110
+ haziran = brut_net_aylik(70000, ay=6)
111
+ print(f"Haziran Net: {haziran['net']:.2f} TL")
112
+
113
+ # Aralık ayı (kümülatif vergi nedeniyle daha düşük)
114
+ aralik = brut_net_aylik(70000, ay=12)
115
+ print(f"Aralık Net: {aralik['net']:.2f} TL")
116
+
117
+ print(f"Ocak-Aralık Farkı: {ocak['net'] - aralik['net']:.2f} TL")
118
+ ```
119
+
120
+ ### Örnek 3: Engelli Çalışan Hesaplaması
121
+
122
+ ```python
123
+ # Normal çalışan
124
+ normal = brut_net_aylik(50000)
125
+
126
+ # 1. derece engelli (12,000 TL indirim)
127
+ engelli_1 = brut_net_aylik(50000, engel_derecesi="1")
128
+
129
+ # 2. derece engelli (7,000 TL indirim)
130
+ engelli_2 = brut_net_aylik(50000, engel_derecesi="2")
131
+
132
+ # 3. derece engelli (3,000 TL indirim)
133
+ engelli_3 = brut_net_aylik(50000, engel_derecesi="3")
134
+
135
+ print(f"Normal Net: {normal['net']:.2f} TL")
136
+ print(f"1. Derece Net: {engelli_1['net']:.2f} TL (+{engelli_1['net'] - normal['net']:.2f} TL)")
137
+ print(f"2. Derece Net: {engelli_2['net']:.2f} TL (+{engelli_2['net'] - normal['net']:.2f} TL)")
138
+ print(f"3. Derece Net: {engelli_3['net']:.2f} TL (+{engelli_3['net'] - normal['net']:.2f} TL)")
139
+ ```
140
+
141
+ ### Örnek 4: BES ile Vergi Avantajı
142
+
143
+ ```python
144
+ # BES olmadan
145
+ bes_yok = brut_net_aylik(80000, bes=False)
146
+
147
+ # %3 BES ile
148
+ bes_3 = brut_net_aylik(80000, bes=True, bes_orani=0.03)
149
+
150
+ print(f"BES Yok - Net: {bes_yok['net']:.2f} TL")
151
+ print(f"BES %3 - Net: {bes_3['net']:.2f} TL, BES: {bes_3['bes']:.2f} TL")
152
+ ```
153
+
154
+ ---
155
+
156
+ **Not**: Bu kütüphane **2026 yılı** Türkiye bordro mevzuatına göre hazırlanmıştır. Yeni yıllarda `parametreler/` klasöründe yeni JSON dosyası oluşturarak güncelleyebilirsiniz.
@@ -0,0 +1,28 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "bordro-hesaplama"
7
+ version = "0.0.1"
8
+ authors = [
9
+ { name="Geliştirici"},
10
+ ]
11
+ description = "2026 Türkiye parametreleriyle çalışan, aylık ve yıllık Net-Brüt ve Brüt-Net maaş dönüşümlerini yapan hesaplama motoru."
12
+ readme = "README.md"
13
+ requires-python = ">=3.9"
14
+ classifiers = [
15
+ "Programming Language :: Python :: 3",
16
+ "License :: OSI Approved :: MIT License",
17
+ "Operating System :: OS Independent",
18
+ ]
19
+ dependencies = [
20
+ "pandas>=1.0.0",
21
+ ]
22
+
23
+
24
+ [tool.setuptools.packages.find]
25
+ where = ["src"]
26
+
27
+ [tool.setuptools.package-data]
28
+ bordro = ["parametreler/*.json"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -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"
@@ -0,0 +1,268 @@
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
+ engel_derecesi: str = "0",
88
+ bes: bool = False,
89
+ bes_orani: Optional[float] = None) -> Dict:
90
+ """
91
+ Verilen brüt maaşın o ayki net karşılığını hesaplar.
92
+ """
93
+
94
+ # Parametre Hazırlığı
95
+ ay_ismi = SABITLER.AYLAR[ay - 1]
96
+ sigorta_bilgisi = SABITLER.SIGORTA_TIPLERI.get(sigorta_tipi_kodu, SABITLER.SIGORTA_TIPLERI["01"])
97
+ engelli_indirim = SABITLER.ENGELLILIK.get(str(engel_derecesi), 0)
98
+
99
+ # Devreden Matrah Yoksa Hesapla (Önceki ayları simüle et)
100
+ if devreden_matrah is None:
101
+ if ay == 1:
102
+ devreden_matrah = 0
103
+ else:
104
+ kumulatif = 0
105
+ for i in range(1, ay):
106
+ onceki = brut_net_aylik(brut_maas, i, kumulatif,
107
+ sigorta_tipi_kodu, engel_derecesi, bes, bes_orani)
108
+ kumulatif = onceki['kumulatif_matrah']
109
+ devreden_matrah = kumulatif
110
+
111
+ # HESAPLAMA
112
+
113
+ # 1. SGK ve İşsizlik (İşçi Payı)
114
+ sgk_matrah = min(brut_maas, SABITLER.SGK_TAVAN)
115
+ sgk_isci = yuvarla(sgk_matrah * sigorta_bilgisi["Isci_SGK"])
116
+ issizlik_isci = yuvarla(sgk_matrah * sigorta_bilgisi["Isci_Iss"])
117
+
118
+ # Gelir Vergisi
119
+ gv_matrah = max(0, brut_maas - sgk_isci - issizlik_isci - engelli_indirim)
120
+
121
+ if sigorta_bilgisi["Vergi_Muaf"]:
122
+ odenecek_gv = 0
123
+ else:
124
+ # Asgari Ücret İstisnası Hesabı
125
+ asgari_brut = SABITLER.ASGARI_UCRET_BRUT
126
+ asgari_sgk = yuvarla(asgari_brut * 0.14) # Standart %14
127
+ asgari_iss = yuvarla(asgari_brut * 0.01) # Standart %1
128
+ asgari_gv_matrah = asgari_brut - asgari_sgk - asgari_iss
129
+
130
+ asgari_kumulatif = asgari_gv_matrah * (ay - 1)
131
+
132
+ # Vergi Hesapla
133
+ gelir_vergisi = yuvarla(gelir_vergisi_hesapla(gv_matrah, devreden_matrah))
134
+ istisna_gv = yuvarla(gelir_vergisi_hesapla(asgari_gv_matrah, asgari_kumulatif))
135
+
136
+ # İstisnayı Düş
137
+ odenecek_gv = max(0, gelir_vergisi - istisna_gv)
138
+
139
+ # Damga Vergisi
140
+ damga_vergisi = yuvarla(brut_maas * SABITLER.ORAN_DAMGA)
141
+ asgari_damga = yuvarla(SABITLER.ASGARI_UCRET_BRUT * SABITLER.ORAN_DAMGA)
142
+ odenecek_dv = max(0, damga_vergisi - asgari_damga)
143
+
144
+ # BES Kesintisi
145
+ # Brüt maaş değil, SGK matrahı kullanılır
146
+
147
+ bes_tutari = 0
148
+ if bes:
149
+ kullanilacak_oran = bes_orani if bes_orani is not None else SABITLER.ORAN_BES
150
+ bes_tutari = yuvarla(sgk_matrah * kullanilacak_oran)
151
+
152
+ # NET MAAŞ
153
+ toplam_kesinti = sgk_isci + issizlik_isci + odenecek_gv + odenecek_dv + bes_tutari
154
+ net_maas = yuvarla(brut_maas - toplam_kesinti)
155
+
156
+ return {
157
+ 'ay': ay_ismi,
158
+ 'brut': brut_maas,
159
+ 'net': net_maas,
160
+ 'kumulatif_matrah': devreden_matrah + gv_matrah,
161
+ 'sgk_isci': sgk_isci,
162
+ 'issizlik_isci': issizlik_isci,
163
+ 'gv': odenecek_gv,
164
+ 'dv': odenecek_dv,
165
+ 'bes': bes_tutari
166
+ }
167
+
168
+
169
+ # ANA FONKSİYON: BRÜT → NET (YILLIK LİSTE)
170
+
171
+ def brut_net_yillik(brut_maas: float,
172
+ sigorta_tipi_kodu: str = "01",
173
+ engel_derecesi: str = "0",
174
+ bes: bool = False,
175
+ bes_orani: Optional[float] = None,
176
+ dataframe: bool = True) -> Union[pd.DataFrame, List[Dict]]:
177
+ """Brüt maaşın 12 aylık dökümünü verir."""
178
+ sonuclar = []
179
+ kumulatif = 0
180
+
181
+ for ay in range(1, 13):
182
+ sonuc = brut_net_aylik(brut_maas, ay, kumulatif,
183
+ sigorta_tipi_kodu, engel_derecesi, bes, bes_orani)
184
+ sonuclar.append(sonuc)
185
+ kumulatif = sonuc['kumulatif_matrah']
186
+
187
+ if dataframe:
188
+ df = pd.DataFrame(sonuclar)
189
+ toplam = df.select_dtypes(include=['number']).sum()
190
+ toplam['ay'] = 'TOPLAM'
191
+ df.loc['TOPLAM'] = toplam
192
+ return df
193
+
194
+ return sonuclar
195
+
196
+
197
+ # TERS FONKSİYON: NET → BRÜT (AYLIK)
198
+
199
+ def net_brut_aylik(hedef_net: float,
200
+ ay: int = 1,
201
+ devreden_matrah: float = 0,
202
+ sigorta_tipi_kodu: str = "01",
203
+ engel_derecesi: str = "0",
204
+ bes: bool = False,
205
+ bes_orani: Optional[float] = None) -> Dict:
206
+ """
207
+ İstenilen NET maaşı elde etmek için gereken BRÜT maaşı bulur.
208
+ (Deneme-Yanılma / Bisection Yöntemi ile çalışır)
209
+ BES varsa, hedefimiz (Cepteki Net + BES Kesintisi) toplamıdır.
210
+ Böylece BES işveren maliyeti olmaz, çalışanın netinden düşer.
211
+ """
212
+
213
+ alt = hedef_net
214
+ ust = hedef_net * 3.0 # Tahmini üst sınır
215
+
216
+ # 50 adımda doğru sonuca yaklaş
217
+ for _ in range(50):
218
+ orta_brut = (alt + ust) / 2
219
+
220
+ sonuc = brut_net_aylik(orta_brut, ay, devreden_matrah,
221
+ sigorta_tipi_kodu, engel_derecesi, bes, bes_orani)
222
+
223
+
224
+ elimize_gecen_deger = sonuc['net']
225
+ if bes:
226
+ elimize_gecen_deger += sonuc['bes']
227
+
228
+ fark = elimize_gecen_deger - hedef_net
229
+ # ---------------------------
230
+
231
+ if abs(fark) < 0.01: # 1 kuruş hassasiyet
232
+ return sonuc
233
+
234
+ if fark < 0: # Hesaplanan az geldiyse brütü artır
235
+ alt = orta_brut
236
+ else: # Hesaplanan çok geldiyse brütü azalt
237
+ ust = orta_brut
238
+
239
+ return sonuc
240
+
241
+
242
+ # TERS FONKSİYON: NET → BRÜT (YILLIK)
243
+
244
+ def net_brut_yillik(hedef_net: float,
245
+ sigorta_tipi_kodu: str = "01",
246
+ engel_derecesi: str = "0",
247
+ bes: bool = False,
248
+ bes_orani: Optional[float] = None,
249
+ dataframe: bool = True) -> Union[pd.DataFrame, List[Dict]]:
250
+ """Her ay ele o NET paranın geçmesi için gereken Brütleri hesaplar."""
251
+
252
+ sonuclar = []
253
+ kumulatif = 0
254
+
255
+ for ay in range(1, 13):
256
+ sonuc = net_brut_aylik(hedef_net, ay, kumulatif,
257
+ sigorta_tipi_kodu, engel_derecesi, bes, bes_orani)
258
+ sonuclar.append(sonuc)
259
+ kumulatif = sonuc['kumulatif_matrah']
260
+
261
+ if dataframe:
262
+ df = pd.DataFrame(sonuclar)
263
+ toplam = df.select_dtypes(include=['number']).sum()
264
+ toplam['ay'] = 'TOPLAM'
265
+ df.loc['TOPLAM'] = toplam
266
+ return df
267
+
268
+ 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,170 @@
1
+ Metadata-Version: 2.4
2
+ Name: bordro-hesaplama
3
+ Version: 0.0.1
4
+ Summary: 2026 Türkiye parametreleriyle çalışan, aylık ve yıllık Net-Brüt ve Brüt-Net maaş dönüşümlerini yapan hesaplama motoru.
5
+ Author: Geliştirici
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
16
+
17
+ Türkiye'deki bordro hesaplamalarını basitleştiren Python kütüphanesi. Brüt maaştan net maaşa, net maaştan brüt maaşa dönüşüm yapmanızı sağlar.
18
+
19
+ ## 🚀 Özellikler
20
+
21
+ - ✅ **Brüt → Net** dönüşümü (aylık ve yıllık)
22
+ - ✅ **Net → Brüt** dönüşümü (aylık ve yıllık)
23
+ - ✅ Kademeli gelir vergisi hesaplama
24
+ - ✅ Asgari ücret istisnası desteği
25
+ - ✅ **30+ farklı sigorta tipi** desteği (Normal çalışan, Emekli, Çırak, Stajyer, vs.)
26
+ - ✅ Engelli çalışan indirimleri (1., 2., 3. derece)
27
+ - ✅ BES (Bireysel Emeklilik Sistemi) kesintisi
28
+ - ✅ 2026 güncel parametreleri
29
+
30
+ ## Kurulum
31
+
32
+ ```bash
33
+ pip install pandas
34
+ ```
35
+
36
+ Kütüphaneyi projenize dahil edin:
37
+
38
+ ```python
39
+ from bordro import brut_net_aylik, brut_net_yillik, net_brut_aylik, net_brut_yillik
40
+ ```
41
+
42
+ ## Parametreler
43
+
44
+ ### Sigorta Tipi Kodları (Öne Çıkanlar)
45
+
46
+ | Kod | Açıklama | SGK (İşçi) | İşsizlik (İşçi) | Vergi Muaf |
47
+ |-----|----------|------------|-----------------|------------|
48
+ | **"00"** | SGK'ya Tabi Değil | %0 | %0 | Hayır |
49
+ | **"01"** | Normal Çalışan (En Yaygın) | %14 | %1 | Hayır |
50
+ | **"02"** | Emekli (SGDP) | %7.5 | %0 | Hayır |
51
+ | **"07"** | Çırak / Öğrenci | %0 | %0 | **Evet** |
52
+ | **"13"** | İşsizliksiz Normal | %14 | %0 | Hayır |
53
+ | **"19"** | Hükümlü ve Tutuklu | %0 | %0 | **Evet** |
54
+ | **"22"** | Stajyer Öğrenci | %0 | %0 | **Evet** |
55
+ | **"25"** | İŞKUR Kursiyer | %0 | %0 | **Evet** |
56
+
57
+ **Not:** Toplam 30+ sigorta tipi mevcuttur. Tüm liste için `2026.json` dosyasına bakınız.
58
+
59
+ ### Engellilik Dereceleri
60
+
61
+ | Kod | Açıklama | Aylık İndirim (2026) |
62
+ |-----|----------|----------------------|
63
+ | **"0"** | Engelli değil | 0 TL |
64
+ | **"1"** | 1. Derece | 12,000 TL |
65
+ | **"2"** | 2. Derece | 7,000 TL |
66
+ | **"3"** | 3. Derece | 3,000 TL |
67
+
68
+ ### 2026 Güncel Parametreler
69
+
70
+ | Parametre | Değer |
71
+ |-----------|-------|
72
+ | **Asgari Ücret (Brüt)** | 33,030 TL |
73
+ | **SGK Tavanı** | 297,270 TL (Asgari ücret × 9) |
74
+ | **Damga Vergisi** | %0.759 |
75
+ | **BES Varsayılan Oran** | %3 |
76
+
77
+ ### Gelir Vergisi Dilimleri (2026)
78
+
79
+ | Matrah Aralığı | Vergi Oranı |
80
+ |----------------|-------------|
81
+ | 0 - 190,000 TL | %15 |
82
+ | 190,000 - 400,000 TL | %20 |
83
+ | 400,000 - 1,500,000 TL | %27 |
84
+ | 1,500,000 - 5,300,000 TL | %35 |
85
+ | 5,300,000 TL üzeri | %40 |
86
+
87
+ ## 📁 Proje Yapısı
88
+
89
+ ```
90
+ proje/
91
+
92
+ ├── core.py # Ana modül (hesaplama motoru)
93
+ ├── parametreler/ # Yıllık parametre dosyaları
94
+ │ └── 2026.json # 2026 yılı parametreleri
95
+ │ # (Asgari ücret, vergiler, sigorta tipleri vb.)
96
+ └── README.md # Bu dosya
97
+ ```
98
+
99
+ ## 💡 Kullanım Örnekleri
100
+
101
+ ### Örnek 1: Normal Çalışan vs Emekli Çalışan
102
+
103
+ ```python
104
+ # Normal çalışan
105
+ normal = brut_net_aylik(60000, sigorta_tipi_kodu="01")
106
+ print(f"Normal Çalışan Net: {normal['net']:.2f} TL")
107
+ print(f"SGK: {normal['sgk_isci']:.2f} TL")
108
+
109
+ # Emekli çalışan (daha az SGK kesilir)
110
+ emekli = brut_net_aylik(60000, sigorta_tipi_kodu="02")
111
+ print(f"Emekli Net: {emekli['net']:.2f} TL")
112
+ print(f"SGK: {emekli['sgk_isci']:.2f} TL")
113
+ print(f"Fark: {emekli['net'] - normal['net']:.2f} TL")
114
+ ```
115
+
116
+ ### Örnek 2: Farklı Aylardaki Net Maaş Farkı (Kümülatif Vergi)
117
+
118
+ ```python
119
+ # Ocak ayı
120
+ ocak = brut_net_aylik(70000, ay=1)
121
+ print(f"Ocak Net: {ocak['net']:.2f} TL")
122
+
123
+ # Haziran ayı
124
+ haziran = brut_net_aylik(70000, ay=6)
125
+ print(f"Haziran Net: {haziran['net']:.2f} TL")
126
+
127
+ # Aralık ayı (kümülatif vergi nedeniyle daha düşük)
128
+ aralik = brut_net_aylik(70000, ay=12)
129
+ print(f"Aralık Net: {aralik['net']:.2f} TL")
130
+
131
+ print(f"Ocak-Aralık Farkı: {ocak['net'] - aralik['net']:.2f} TL")
132
+ ```
133
+
134
+ ### Örnek 3: Engelli Çalışan Hesaplaması
135
+
136
+ ```python
137
+ # Normal çalışan
138
+ normal = brut_net_aylik(50000)
139
+
140
+ # 1. derece engelli (12,000 TL indirim)
141
+ engelli_1 = brut_net_aylik(50000, engel_derecesi="1")
142
+
143
+ # 2. derece engelli (7,000 TL indirim)
144
+ engelli_2 = brut_net_aylik(50000, engel_derecesi="2")
145
+
146
+ # 3. derece engelli (3,000 TL indirim)
147
+ engelli_3 = brut_net_aylik(50000, engel_derecesi="3")
148
+
149
+ print(f"Normal Net: {normal['net']:.2f} TL")
150
+ print(f"1. Derece Net: {engelli_1['net']:.2f} TL (+{engelli_1['net'] - normal['net']:.2f} TL)")
151
+ print(f"2. Derece Net: {engelli_2['net']:.2f} TL (+{engelli_2['net'] - normal['net']:.2f} TL)")
152
+ print(f"3. Derece Net: {engelli_3['net']:.2f} TL (+{engelli_3['net'] - normal['net']:.2f} TL)")
153
+ ```
154
+
155
+ ### Örnek 4: BES ile Vergi Avantajı
156
+
157
+ ```python
158
+ # BES olmadan
159
+ bes_yok = brut_net_aylik(80000, bes=False)
160
+
161
+ # %3 BES ile
162
+ bes_3 = brut_net_aylik(80000, bes=True, bes_orani=0.03)
163
+
164
+ print(f"BES Yok - Net: {bes_yok['net']:.2f} TL")
165
+ print(f"BES %3 - Net: {bes_3['net']:.2f} TL, BES: {bes_3['bes']:.2f} TL")
166
+ ```
167
+
168
+ ---
169
+
170
+ **Not**: Bu kütüphane **2026 yılı** Türkiye bordro mevzuatına göre hazırlanmıştır. Yeni yıllarda `parametreler/` klasöründe yeni JSON dosyası oluşturarak güncelleyebilirsiniz.
@@ -0,0 +1,12 @@
1
+ LICENSE
2
+ MANIFEST.in
3
+ README.md
4
+ pyproject.toml
5
+ src/bordro/__init__.py
6
+ src/bordro/core.py
7
+ src/bordro/parametreler/2026.json
8
+ src/bordro_hesaplama.egg-info/PKG-INFO
9
+ src/bordro_hesaplama.egg-info/SOURCES.txt
10
+ src/bordro_hesaplama.egg-info/dependency_links.txt
11
+ src/bordro_hesaplama.egg-info/requires.txt
12
+ src/bordro_hesaplama.egg-info/top_level.txt