tr-arsapayi 0.1.0__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.
Files changed (38) hide show
  1. tr_arsapayi-0.1.0/CHANGELOG.md +22 -0
  2. tr_arsapayi-0.1.0/CITATION.cff +21 -0
  3. tr_arsapayi-0.1.0/LICENSE +21 -0
  4. tr_arsapayi-0.1.0/MANIFEST.in +9 -0
  5. tr_arsapayi-0.1.0/PKG-INFO +284 -0
  6. tr_arsapayi-0.1.0/README.md +247 -0
  7. tr_arsapayi-0.1.0/examples/bina.csv +10 -0
  8. tr_arsapayi-0.1.0/examples/eski.csv +5 -0
  9. tr_arsapayi-0.1.0/examples/quickstart.py +65 -0
  10. tr_arsapayi-0.1.0/examples/yeni.csv +9 -0
  11. tr_arsapayi-0.1.0/pyproject.toml +109 -0
  12. tr_arsapayi-0.1.0/setup.cfg +4 -0
  13. tr_arsapayi-0.1.0/src/tr_arsapayi/__init__.py +75 -0
  14. tr_arsapayi-0.1.0/src/tr_arsapayi/__main__.py +5 -0
  15. tr_arsapayi-0.1.0/src/tr_arsapayi/_version.py +1 -0
  16. tr_arsapayi-0.1.0/src/tr_arsapayi/allocation.py +600 -0
  17. tr_arsapayi-0.1.0/src/tr_arsapayi/cli.py +191 -0
  18. tr_arsapayi-0.1.0/src/tr_arsapayi/coefficients.py +289 -0
  19. tr_arsapayi-0.1.0/src/tr_arsapayi/io.py +129 -0
  20. tr_arsapayi-0.1.0/src/tr_arsapayi/models.py +79 -0
  21. tr_arsapayi-0.1.0/src/tr_arsapayi/py.typed +0 -0
  22. tr_arsapayi-0.1.0/src/tr_arsapayi/rounding.py +109 -0
  23. tr_arsapayi-0.1.0/src/tr_arsapayi/text.py +118 -0
  24. tr_arsapayi-0.1.0/src/tr_arsapayi/transformation.py +303 -0
  25. tr_arsapayi-0.1.0/src/tr_arsapayi.egg-info/PKG-INFO +284 -0
  26. tr_arsapayi-0.1.0/src/tr_arsapayi.egg-info/SOURCES.txt +36 -0
  27. tr_arsapayi-0.1.0/src/tr_arsapayi.egg-info/dependency_links.txt +1 -0
  28. tr_arsapayi-0.1.0/src/tr_arsapayi.egg-info/entry_points.txt +2 -0
  29. tr_arsapayi-0.1.0/src/tr_arsapayi.egg-info/requires.txt +6 -0
  30. tr_arsapayi-0.1.0/src/tr_arsapayi.egg-info/top_level.txt +1 -0
  31. tr_arsapayi-0.1.0/tests/conftest.py +18 -0
  32. tr_arsapayi-0.1.0/tests/test_allocation.py +191 -0
  33. tr_arsapayi-0.1.0/tests/test_cli.py +106 -0
  34. tr_arsapayi-0.1.0/tests/test_coefficients.py +89 -0
  35. tr_arsapayi-0.1.0/tests/test_io.py +54 -0
  36. tr_arsapayi-0.1.0/tests/test_rounding.py +65 -0
  37. tr_arsapayi-0.1.0/tests/test_text.py +73 -0
  38. tr_arsapayi-0.1.0/tests/test_transformation.py +112 -0
@@ -0,0 +1,22 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [Unreleased]
6
+
7
+ ## [0.1.0] - 2026-11-09
8
+ ### Added
9
+ - Value-based arsa payı allocation (634 sayılı KMK m.3) with an overridable coefficient
10
+ model: floor (with per-use floor tables), use, facade, view, position, extra factor and
11
+ eklenti equivalent-area factors; appraised values override coefficients per unit.
12
+ - Illustrative default coefficient set, clearly labelled as not prescribed by law;
13
+ JSON export/import with partial merge and Turkish table names.
14
+ - Pure area-based method and a side-by-side value/area comparison.
15
+ - Exact integer apportionment with the largest-remainder (Hamilton) method, optional
16
+ minimum share, fixed denominators, exact LCM-based denominator and automatic
17
+ denominator selection by error tolerance.
18
+ - Kentsel dönüşüm (6306) helpers: old vs. new arsa payı, entitled vs. received value per
19
+ owner, contractor share, and the m.6 "hisseleri oranında salt çoğunluk" check.
20
+ - Turkish tables (terminal, Markdown) and CSV output (optionally Excel-style `;` and
21
+ decimal comma); CSV input with Turkish column names and automatic delimiter detection.
22
+ - `tr-arsapayi` CLI with `hesapla`, `donusum` and `katsayilar` commands.
@@ -0,0 +1,21 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use this software, please cite it as below."
3
+ authors:
4
+ - family-names: "Eminoğlu"
5
+ given-names: "Yusuf"
6
+ email: "geospacephilo@gmail.com"
7
+ orcid: "https://orcid.org/0009-0005-6000-2934"
8
+ title: "tr-arsapayi"
9
+ version: "0.1.0"
10
+ date-released: "2026-11-09"
11
+ license: "MIT"
12
+ repository-code: "https://github.com/YusufEminoglu/tr_arsapayi_sdk"
13
+ url: "https://pypi.org/project/tr-arsapayi/"
14
+ abstract: "Arsa payı (land share) allocation for Turkish condominiums under Kat Mülkiyeti Kanunu (Law No. 634) art. 3: value-based coefficient model, area-based comparison, exact largest-remainder rounding to integer denominators, and kentsel dönüşüm (Law No. 6306) old-vs-new share comparisons."
15
+ keywords:
16
+ - arsa payı
17
+ - kat mülkiyeti
18
+ - condominium
19
+ - land share
20
+ - urban regeneration
21
+ - Turkey
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Yusuf Eminoğlu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,9 @@
1
+ include LICENSE
2
+ include README.md
3
+ include CHANGELOG.md
4
+ include CITATION.cff
5
+ include pyproject.toml
6
+ include src/tr_arsapayi/py.typed
7
+ recursive-include src/tr_arsapayi *.py
8
+ recursive-include tests *.py
9
+ recursive-include examples *.py *.csv
@@ -0,0 +1,284 @@
1
+ Metadata-Version: 2.4
2
+ Name: tr-arsapayi
3
+ Version: 0.1.0
4
+ Summary: Arsa payı (land share) allocation for Turkish condominiums under Kat Mülkiyeti Kanunu (634) art. 3: value-based coefficients, area-based comparison, exact largest-remainder rounding and kentsel dönüşüm (6306) comparisons.
5
+ Author-email: Yusuf Eminoğlu <geospacephilo@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/YusufEminoglu/tr_arsapayi_sdk
8
+ Project-URL: Repository, https://github.com/YusufEminoglu/tr_arsapayi_sdk
9
+ Project-URL: Issues, https://github.com/YusufEminoglu/tr_arsapayi_sdk/issues
10
+ Project-URL: Changelog, https://github.com/YusufEminoglu/tr_arsapayi_sdk/blob/main/CHANGELOG.md
11
+ Keywords: arsa-payi,kat-mulkiyeti,kat-irtifaki,condominium,land-share,kentsel-donusum,urban-regeneration,real-estate,valuation,turkey,apportionment,largest-remainder
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.9
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Environment :: Console
21
+ Classifier: Natural Language :: Turkish
22
+ Classifier: Topic :: Scientific/Engineering
23
+ Classifier: Topic :: Office/Business
24
+ Classifier: Intended Audience :: Science/Research
25
+ Classifier: Intended Audience :: Developers
26
+ Classifier: Intended Audience :: Legal Industry
27
+ Classifier: Typing :: Typed
28
+ Requires-Python: >=3.9
29
+ Description-Content-Type: text/markdown
30
+ License-File: LICENSE
31
+ Provides-Extra: dev
32
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
33
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
34
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
35
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
36
+ Dynamic: license-file
37
+
38
+ # tr-arsapayi
39
+
40
+ [![PyPI version](https://img.shields.io/pypi/v/tr-arsapayi.svg)](https://pypi.org/project/tr-arsapayi/)
41
+ [![Python versions](https://img.shields.io/pypi/pyversions/tr-arsapayi.svg)](https://pypi.org/project/tr-arsapayi/)
42
+ [![CI](https://github.com/YusufEminoglu/tr_arsapayi_sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/YusufEminoglu/tr_arsapayi_sdk/actions/workflows/ci.yml)
43
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/YusufEminoglu/tr_arsapayi_sdk/blob/main/LICENSE)
44
+
45
+ **English summary.** `tr-arsapayi` allocates *arsa payı* (the land share attached to
46
+ each independent unit of a condominium) under Article 3 of the Turkish Condominium Law
47
+ No. 634, which requires shares proportional to each unit's value. It values units with
48
+ overridable coefficients (floor, use, facade, view, position, annexes), offers a pure
49
+ area-based method for comparison, rounds to any integer denominator with the
50
+ largest-remainder method so shares sum exactly, and compares old vs. new shares in
51
+ urban-regeneration (Law No. 6306) projects. The rest of this document is in Turkish.
52
+
53
+ ---
54
+
55
+ **Kat mülkiyeti ve kat irtifakı için arsa payı hesabı.**
56
+
57
+ `tr-arsapayi`, 634 sayılı Kat Mülkiyeti Kanunu'nun 3. maddesindeki "bağımsız bölümlerin
58
+ konum ve büyüklüklerine göre hesaplanan değerleri ile oranlı" arsa payı ilkesini
59
+ uygulayan küçük, bağımlılıksız bir Python kütüphanesi ve komut satırı aracıdır.
60
+
61
+ - **Değer esaslı hesap:** net alan × kat × nitelik (konut/dükkan/ofis...) × cephe ×
62
+ manzara × konum katsayıları + eklenti (depo, otopark, bahçe, teras...) eşdeğer alanı.
63
+ Ekspertiz değeri varsa doğrudan o kullanılır.
64
+ - **Alan esaslı hesap** (yalnızca karşılaştırma için) ve iki yöntemin yan yana tablosu.
65
+ - **Tam sayılı payda:** 1000, 2400 gibi sabit payda, EKOK tabanlı kesin payda (`tam`)
66
+ veya hata toleransına göre otomatik payda. Yuvarlama **en büyük kalan (Hamilton)
67
+ yöntemi** ile yapılır; paylar paydaya **tam olarak** eşit toplanır.
68
+ - **Kentsel dönüşüm (6306):** eski ve yeni arsa paylarını, malik başına hak edilen ve
69
+ alınan değeri, yüklenici payını karşılaştırır; m.6'daki "hisseleri oranında salt
70
+ çoğunluk" kontrolünü yapar.
71
+ - **Çıktılar:** Türkçe başlıklı tablo (terminal), Markdown, CSV (Excel için `;` ve
72
+ ondalık virgül seçeneği).
73
+
74
+ > **Önemli:** Yerleşik katsayılar **örnek (temsili)** değerlerdir. 634 sayılı Kanun ya
75
+ > da başka bir mevzuat bir katsayı tablosu belirlemez. Gerçek bir tescil veya dava için
76
+ > katsayıları projeye/ekspertiz raporuna göre değiştirin. Bu araç hukuki görüş değildir.
77
+
78
+ ## Kurulum
79
+
80
+ ```bash
81
+ pip install tr-arsapayi
82
+ ```
83
+
84
+ Python 3.9 veya üstü gerekir; yalnızca standart kütüphane kullanılır.
85
+
86
+ ## Hızlı başlangıç (komut satırı)
87
+
88
+ `bina.csv`:
89
+
90
+ ```csv
91
+ bb_no,kat,nitelik,net_alan,cephe,manzara,konum,eklenti,malik
92
+ 1,Z,dükkan,85,ön,,,depo=12,Malik A
93
+ 2,Z,dükkan,60,yan,,,,Malik B
94
+ 3,1,konut,110,ön,kısmi,,,Malik C
95
+ 4,1,konut,95,arka,,,,Malik D
96
+ 5,2,konut,110,ön,kısmi,,otopark=12.5,Malik E
97
+ 6,2,konut,95,arka,,,,Malik F
98
+ 7,3,konut,110,ön,tam,,otopark=12.5,Malik G
99
+ 8,3,konut,95,arka,yok,,,Malik H
100
+ 9,4,konut,180,köşe,tam,çatı dubleks,teras=40,Malik I
101
+ ```
102
+
103
+ ```bash
104
+ tr-arsapayi hesapla bina.csv --payda 1000 --bicim md
105
+ ```
106
+
107
+ | BB No | Kat | Nitelik | Net alan (m²) | Eklenti (m²) | Kat k. | Nitelik k. | Cephe k. | Manzara k. | Konum k. | Ek k. | Eşdeğer alan (m²) | Değer | Oran (%) | Arsa payı |
108
+ |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
109
+ | 1 | Zemin | dükkan | 85,00 | depo 12,00 | 1,000 | 1,500 | 1,050 | 1,000 | 1,000 | 1,000 | 136,88 | 136,88 | 12,100 | 121/1000 |
110
+ | 2 | Zemin | dükkan | 60,00 | | 1,000 | 1,500 | 1,000 | 1,000 | 1,000 | 1,000 | 90,00 | 90,00 | 8,000 | 80/1000 |
111
+ | 3 | 1. Kat | konut | 110,00 | | 1,000 | 1,000 | 1,050 | 1,030 | 1,000 | 1,000 | 118,97 | 118,97 | 10,500 | 105/1000 |
112
+ | ... | | | | | | | | | | | | | | |
113
+ | 9 | 4. Kat | konut | 180,00 | teras 40,00 | 1,050 | 1,000 | 1,080 | 1,080 | 1,050 | 1,000 | 243,47 | 243,47 | 21,500 | 215/1000 |
114
+ | TOPLAM | | | 940,00 | | | | | | | | 1.131,11 | 1.131,11 | 100,000 | 1000/1000 |
115
+
116
+ Diğer komutlar:
117
+
118
+ ```bash
119
+ tr-arsapayi hesapla bina.csv --payda tam # EKOK tabanlı kesin payda
120
+ tr-arsapayi hesapla bina.csv --payda otomatik # en küçük uygun ortak payda
121
+ tr-arsapayi hesapla bina.csv --yontem alan # yalnız net alan
122
+ tr-arsapayi hesapla bina.csv --karsilastir # değer esaslı / alan esaslı
123
+ tr-arsapayi hesapla bina.csv --bicim csv --excel -o pay.csv
124
+ tr-arsapayi katsayilar -o katsayilar.json # örnek katsayı setini dışa aktar
125
+ tr-arsapayi hesapla bina.csv --katsayilar katsayilar.json
126
+ tr-arsapayi donusum eski.csv yeni.csv --bicim md # kentsel dönüşüm karşılaştırması
127
+ ```
128
+
129
+ ### CSV sütunları
130
+
131
+ | Sütun | Zorunlu | Açıklama |
132
+ |---|---|---|
133
+ | `bb_no` | evet | Bağımsız bölüm numarası (benzersiz) |
134
+ | `kat` | evet | `Z`/`zemin` = 0, `B1`/`bodrum` = -1, `3`, `3. kat` ... |
135
+ | `net_alan` | evet | m²; `12,5` veya `12.5` |
136
+ | `nitelik` | | `konut` (varsayılan), `dükkan`, `ofis`, `isyeri`, `depo`, `otopark` |
137
+ | `cephe`, `manzara`, `konum` | | Katsayı tablosundaki anahtarlar; boşsa 1,0 |
138
+ | `eklenti` | | `depo=8; otopark=12,5` |
139
+ | `malik` | | Malik (dönüşüm karşılaştırması ve çoğunluk için) |
140
+ | `ek_katsayi` | | Ek çarpan (varsayılan 1,0) |
141
+ | `deger` | | Ekspertiz değeri; verilirse katsayılar bu bölüm için kullanılmaz |
142
+
143
+ Sütun adları büyük/küçük harf ve Türkçe karakterden bağımsız eşleştirilir; ayraç
144
+ (`,` `;` sekme) otomatik bulunur. Tabloda tanımlı olmayan bir kategori (ör. `cephe=güney`)
145
+ sessizce 1,0 sayılmaz, **hata verir**.
146
+
147
+ ## Hızlı başlangıç (Python)
148
+
149
+ ```python
150
+ from tr_arsapayi import Unit, allocate, default_coefficients
151
+
152
+ units = [
153
+ Unit("1", floor=0, net_area=80, use="dukkan", facade="on"),
154
+ Unit("2", floor=1, net_area=100, facade="on"),
155
+ Unit("3", floor=1, net_area=100, facade="arka"),
156
+ Unit("4", floor=2, net_area=100, facade="on", annexes={"depo": 8}),
157
+ ]
158
+ alloc = allocate(units, denominator=1000)
159
+ print(alloc.shares()) # {'1': 288, '2': 240, '3': 222, '4': 250}
160
+ print(alloc.to_markdown())
161
+
162
+ # Katsayıları değiştirme (yalnızca farklı olanlar)
163
+ k = default_coefficients().updated({"nitelik": {"dukkan": 2.0}, "birim_deger": 40000})
164
+ print(allocate(units, k, denominator="tam").denominator)
165
+ ```
166
+
167
+ Elle doğrulama (örnek katsayılarla): BB1 = 80 × 1,00 × 1,50 × 1,05 = 126,00;
168
+ BB2 = 100 × 1,05 = 105,00; BB3 = 100 × 0,97 = 97,00; BB4 = 100 × 1,02 × 1,05 + 8 × 0,25
169
+ = 109,10; toplam 437,10. Kotalar 288,26 / 240,22 / 221,92 / 249,60; tam kısımların
170
+ toplamı 998, kalan 2 pay en büyük kalanlara (0,92 ve 0,60) verilir → 288, 240, 222, 250.
171
+
172
+ ### Kentsel dönüşüm
173
+
174
+ ```python
175
+ from fractions import Fraction
176
+ from tr_arsapayi import allocate, compare_transformation, majority, read_units_csv
177
+
178
+ old = allocate(read_units_csv("eski.csv"), denominator=1000)
179
+ new = allocate(read_units_csv("yeni.csv"), denominator=1000)
180
+ print(compare_transformation(old, new).to_markdown())
181
+
182
+ print(majority(old, ["Malik A", "Malik C"]).describe())
183
+ # Onaylayan hisse oranı %52,00; gereken: > 1/2. Çoğunluk SAĞLANDI.
184
+ ```
185
+
186
+ `compare_transformation`, yeni yapıda eski maliklere verilen bölümlerin toplam değerini
187
+ ("maliklere düşen değer") eski arsa payı oranlarına göre paylaştırır:
188
+ **hak edilen değer = eski oran × maliklere düşen değer**. Alınan değer bununla
189
+ karşılaştırılır (fark ve alınan/hak edilen oranı). Eski malik listesinde olmayan
190
+ (veya `Yüklenici`/`müteahhit` etiketli) yeni bölümler yüklenici payı sayılır.
191
+
192
+ ## API özeti
193
+
194
+ | Nesne | Açıklama |
195
+ |---|---|
196
+ | `Unit` | Bağımsız bölüm: `no`, `floor`, `net_area`, `use`, `facade`, `view`, `position`, `annexes`, `owner`, `extra_factor`, `value` |
197
+ | `CoefficientSet` | Katsayı tabloları; `from_json`, `from_dict(..., base=)`, `updated`, `to_json`, `floor_factor`, `lookup` |
198
+ | `default_coefficients()` | **Örnek** katsayı seti (yeni kopya döner) |
199
+ | `value_unit(unit, k)` | Katsayı dökümü ve değer (`UnitValuation`) |
200
+ | `allocate(units, k, denominator, method, min_share)` | Arsa payı dağıtımı → `Allocation` (`shares`, `owner_ratios`, `max_rounding_error`, `to_markdown`, `to_text`, `to_csv`, `to_dicts`) |
201
+ | `compare_methods`, `method_comparison_table` | Değer esaslı / alan esaslı karşılaştırma |
202
+ | `suggest_denominator` | Toleransa göre en küçük ortak payda (100, 120, 240, ..., 1000, 2400, ...) |
203
+ | `largest_remainder`, `exact_denominator` | Tam sayı paylaştırma çekirdeği |
204
+ | `compare_transformation` | Kentsel dönüşüm eski/yeni karşılaştırması → `TransformationResult` |
205
+ | `majority` | 6306 m.6 "hisseleri oranında salt çoğunluk" kontrolü |
206
+ | `read_units_csv`, `parse_annexes`, `parse_floor` | Girdi okuma yardımcıları |
207
+
208
+ ## Yöntem ve kaynaklar
209
+
210
+ **Hukuki dayanak** (metinler mevzuat.gov.tr üzerinden kontrol edilmiştir):
211
+
212
+ - **634 sayılı Kat Mülkiyeti Kanunu, m.2/d:** arsa payı, "arsanın, bu Kanunda yazılı
213
+ esasa göre bağımsız bölümlere tahsis edilen ortak mülkiyet payları"dır.
214
+ - **634 s.K. m.3/2** (14/11/2007 tarihli 5711 s.K. ile değişik): kat mülkiyeti ve kat
215
+ irtifakı, bağımsız bölümlerin "konum ve büyüklüklerine göre hesaplanan değerleri ile
216
+ oranlı olarak" tahsis edilen arsa payının gösterilmesi suretiyle kurulur; oranlı
217
+ değilse her malik düzeltme için mahkemeye başvurabilir; sonradan oluşan değer
218
+ artış/azalışı arsa payını değiştirmez.
219
+ - **634 s.K. m.4:** ortak yerler (temeller, merdivenler, asansörler, sığınaklar ...);
220
+ bunlara ayrı arsa payı verilmez.
221
+ - **634 s.K. m.6:** eklentiler, ait oldukları bağımsız bölümün bütünleyici parçasıdır.
222
+ Bu nedenle eklenti alanı (katsayısıyla) bölümün değerine eklenir.
223
+ - **6306 sayılı Kanun, m.6/1** (7/11/2023 tarihli 7471 s.K. ile değişik): riskli
224
+ yapılarda yeniden yapım, kat karşılığı vb. kararlar "yapının paydaşı olup olmadıkları
225
+ gözetilmeksizin sahip oldukları hisseleri oranında paydaşların salt çoğunluğu ile"
226
+ alınır (değişiklikten önce "en az üçte iki"). Yıkım sonrası tescil "payları oranında"
227
+ yapılır.
228
+
229
+ **Hesap:**
230
+
231
+ ```
232
+ değer_i = birim_değer × (net_alan_i × k_kat × k_nitelik × k_cephe × k_manzara × k_konum × k_ek
233
+ + Σ eklenti_alanı × k_eklenti)
234
+ oran_i = değer_i / Σ değer
235
+ pay_i = en büyük kalan yöntemiyle round(oran_i × payda), Σ pay_i = payda
236
+ ```
237
+
238
+ Değerler `precision` (varsayılan 2) ondalığa yuvarlanıp tam sayıya çevrilir; tüm
239
+ paylaştırma tam sayı aritmetiğiyle yapılır. `payda="tam"` için payda
240
+ `Σw / ebob(w)` (indirgenmiş kesirlerin paydalarının EKOK'u) olur ve yuvarlama yoktur.
241
+ `min_share` (varsayılan 1) hiçbir bölümün sıfır pay almamasını sağlar.
242
+
243
+ En büyük kalan yöntemi: M. L. Balinski & H. P. Young, *Fair Representation*, 2. bs.,
244
+ Brookings Institution Press, 2001.
245
+
246
+ **Örnek katsayılar** (`tr-arsapayi katsayilar` ile tamamı görülebilir; hiçbiri mevzuattan
247
+ alınmamıştır): kat (1. kat = 1,00; zemin 0,95; 1. bodrum 0,80; üst katlarda 1,02–1,06),
248
+ dükkan için ayrı kat tablosu (zemin 1,00, 1. bodrum 0,60), nitelik (konut 1,00; dükkan
249
+ 1,50; ofis 1,10; işyeri 1,20; depo 0,40; otopark 0,35), cephe (ön 1,05; yan 1,00; arka
250
+ 0,97; köşe 1,08; iç 0,95), manzara (yok 1,00; kısmi 1,03; tam 1,08; deniz 1,12), konum
251
+ (normal 1,00; çatı dubleks 1,05; asansörsüz üst 0,97), eklenti eşdeğer alan katsayıları
252
+ (depo/kiler 0,25; kömürlük 0,20; otopark 0,35; garaj 0,40; bahçe 0,15; teras ve çatı
253
+ arası 0,30).
254
+
255
+ ## Sınırlamalar
256
+
257
+ - Katsayılar örnektir; piyasa değerini yansıtmaları garanti edilmez. Değer esaslı
258
+ hesap için en sağlam girdi, lisanslı değerleme uzmanının bölüm bazlı değerleridir
259
+ (`deger` sütunu).
260
+ - Bir bağımsız bölümün birden çok paydaşı (hisseli mülkiyet) modellenmez; malik
261
+ alanına tek bir ad yazılır.
262
+ - Kentsel dönüşüm karşılaştırması, eski arsa payını hak ediş ölçüsü olarak kullanır;
263
+ sözleşmedeki ek bedeller, kira yardımı, KDV vb. hesaba katılmaz.
264
+ - Çoğunluk kontrolü yalnızca oran hesabıdır; tebligat, süre ve satış usulleri gibi
265
+ 6306 s.K. ve yönetmelik hükümleri kapsam dışıdır.
266
+ - Bu yazılım hukuki danışmanlık değildir; tapu tescili için proje müellifi, harita
267
+ mühendisi ve ilgili idare ile çalışın.
268
+
269
+ ## Akademik atıf
270
+
271
+ ```bibtex
272
+ @software{eminoglu_tr_arsapayi,
273
+ author = {Eminoğlu, Yusuf},
274
+ title = {tr-arsapayi},
275
+ year = {2026},
276
+ version = {0.1.0},
277
+ url = {https://github.com/YusufEminoglu/tr_arsapayi_sdk}
278
+ }
279
+ ```
280
+
281
+ ## Lisans
282
+
283
+ MIT Lisansı. Ayrıntılar için [LICENSE](https://github.com/YusufEminoglu/tr_arsapayi_sdk/blob/main/LICENSE).
284
+ İletişim: geospacephilo@gmail.com
@@ -0,0 +1,247 @@
1
+ # tr-arsapayi
2
+
3
+ [![PyPI version](https://img.shields.io/pypi/v/tr-arsapayi.svg)](https://pypi.org/project/tr-arsapayi/)
4
+ [![Python versions](https://img.shields.io/pypi/pyversions/tr-arsapayi.svg)](https://pypi.org/project/tr-arsapayi/)
5
+ [![CI](https://github.com/YusufEminoglu/tr_arsapayi_sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/YusufEminoglu/tr_arsapayi_sdk/actions/workflows/ci.yml)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/YusufEminoglu/tr_arsapayi_sdk/blob/main/LICENSE)
7
+
8
+ **English summary.** `tr-arsapayi` allocates *arsa payı* (the land share attached to
9
+ each independent unit of a condominium) under Article 3 of the Turkish Condominium Law
10
+ No. 634, which requires shares proportional to each unit's value. It values units with
11
+ overridable coefficients (floor, use, facade, view, position, annexes), offers a pure
12
+ area-based method for comparison, rounds to any integer denominator with the
13
+ largest-remainder method so shares sum exactly, and compares old vs. new shares in
14
+ urban-regeneration (Law No. 6306) projects. The rest of this document is in Turkish.
15
+
16
+ ---
17
+
18
+ **Kat mülkiyeti ve kat irtifakı için arsa payı hesabı.**
19
+
20
+ `tr-arsapayi`, 634 sayılı Kat Mülkiyeti Kanunu'nun 3. maddesindeki "bağımsız bölümlerin
21
+ konum ve büyüklüklerine göre hesaplanan değerleri ile oranlı" arsa payı ilkesini
22
+ uygulayan küçük, bağımlılıksız bir Python kütüphanesi ve komut satırı aracıdır.
23
+
24
+ - **Değer esaslı hesap:** net alan × kat × nitelik (konut/dükkan/ofis...) × cephe ×
25
+ manzara × konum katsayıları + eklenti (depo, otopark, bahçe, teras...) eşdeğer alanı.
26
+ Ekspertiz değeri varsa doğrudan o kullanılır.
27
+ - **Alan esaslı hesap** (yalnızca karşılaştırma için) ve iki yöntemin yan yana tablosu.
28
+ - **Tam sayılı payda:** 1000, 2400 gibi sabit payda, EKOK tabanlı kesin payda (`tam`)
29
+ veya hata toleransına göre otomatik payda. Yuvarlama **en büyük kalan (Hamilton)
30
+ yöntemi** ile yapılır; paylar paydaya **tam olarak** eşit toplanır.
31
+ - **Kentsel dönüşüm (6306):** eski ve yeni arsa paylarını, malik başına hak edilen ve
32
+ alınan değeri, yüklenici payını karşılaştırır; m.6'daki "hisseleri oranında salt
33
+ çoğunluk" kontrolünü yapar.
34
+ - **Çıktılar:** Türkçe başlıklı tablo (terminal), Markdown, CSV (Excel için `;` ve
35
+ ondalık virgül seçeneği).
36
+
37
+ > **Önemli:** Yerleşik katsayılar **örnek (temsili)** değerlerdir. 634 sayılı Kanun ya
38
+ > da başka bir mevzuat bir katsayı tablosu belirlemez. Gerçek bir tescil veya dava için
39
+ > katsayıları projeye/ekspertiz raporuna göre değiştirin. Bu araç hukuki görüş değildir.
40
+
41
+ ## Kurulum
42
+
43
+ ```bash
44
+ pip install tr-arsapayi
45
+ ```
46
+
47
+ Python 3.9 veya üstü gerekir; yalnızca standart kütüphane kullanılır.
48
+
49
+ ## Hızlı başlangıç (komut satırı)
50
+
51
+ `bina.csv`:
52
+
53
+ ```csv
54
+ bb_no,kat,nitelik,net_alan,cephe,manzara,konum,eklenti,malik
55
+ 1,Z,dükkan,85,ön,,,depo=12,Malik A
56
+ 2,Z,dükkan,60,yan,,,,Malik B
57
+ 3,1,konut,110,ön,kısmi,,,Malik C
58
+ 4,1,konut,95,arka,,,,Malik D
59
+ 5,2,konut,110,ön,kısmi,,otopark=12.5,Malik E
60
+ 6,2,konut,95,arka,,,,Malik F
61
+ 7,3,konut,110,ön,tam,,otopark=12.5,Malik G
62
+ 8,3,konut,95,arka,yok,,,Malik H
63
+ 9,4,konut,180,köşe,tam,çatı dubleks,teras=40,Malik I
64
+ ```
65
+
66
+ ```bash
67
+ tr-arsapayi hesapla bina.csv --payda 1000 --bicim md
68
+ ```
69
+
70
+ | BB No | Kat | Nitelik | Net alan (m²) | Eklenti (m²) | Kat k. | Nitelik k. | Cephe k. | Manzara k. | Konum k. | Ek k. | Eşdeğer alan (m²) | Değer | Oran (%) | Arsa payı |
71
+ |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
72
+ | 1 | Zemin | dükkan | 85,00 | depo 12,00 | 1,000 | 1,500 | 1,050 | 1,000 | 1,000 | 1,000 | 136,88 | 136,88 | 12,100 | 121/1000 |
73
+ | 2 | Zemin | dükkan | 60,00 | | 1,000 | 1,500 | 1,000 | 1,000 | 1,000 | 1,000 | 90,00 | 90,00 | 8,000 | 80/1000 |
74
+ | 3 | 1. Kat | konut | 110,00 | | 1,000 | 1,000 | 1,050 | 1,030 | 1,000 | 1,000 | 118,97 | 118,97 | 10,500 | 105/1000 |
75
+ | ... | | | | | | | | | | | | | | |
76
+ | 9 | 4. Kat | konut | 180,00 | teras 40,00 | 1,050 | 1,000 | 1,080 | 1,080 | 1,050 | 1,000 | 243,47 | 243,47 | 21,500 | 215/1000 |
77
+ | TOPLAM | | | 940,00 | | | | | | | | 1.131,11 | 1.131,11 | 100,000 | 1000/1000 |
78
+
79
+ Diğer komutlar:
80
+
81
+ ```bash
82
+ tr-arsapayi hesapla bina.csv --payda tam # EKOK tabanlı kesin payda
83
+ tr-arsapayi hesapla bina.csv --payda otomatik # en küçük uygun ortak payda
84
+ tr-arsapayi hesapla bina.csv --yontem alan # yalnız net alan
85
+ tr-arsapayi hesapla bina.csv --karsilastir # değer esaslı / alan esaslı
86
+ tr-arsapayi hesapla bina.csv --bicim csv --excel -o pay.csv
87
+ tr-arsapayi katsayilar -o katsayilar.json # örnek katsayı setini dışa aktar
88
+ tr-arsapayi hesapla bina.csv --katsayilar katsayilar.json
89
+ tr-arsapayi donusum eski.csv yeni.csv --bicim md # kentsel dönüşüm karşılaştırması
90
+ ```
91
+
92
+ ### CSV sütunları
93
+
94
+ | Sütun | Zorunlu | Açıklama |
95
+ |---|---|---|
96
+ | `bb_no` | evet | Bağımsız bölüm numarası (benzersiz) |
97
+ | `kat` | evet | `Z`/`zemin` = 0, `B1`/`bodrum` = -1, `3`, `3. kat` ... |
98
+ | `net_alan` | evet | m²; `12,5` veya `12.5` |
99
+ | `nitelik` | | `konut` (varsayılan), `dükkan`, `ofis`, `isyeri`, `depo`, `otopark` |
100
+ | `cephe`, `manzara`, `konum` | | Katsayı tablosundaki anahtarlar; boşsa 1,0 |
101
+ | `eklenti` | | `depo=8; otopark=12,5` |
102
+ | `malik` | | Malik (dönüşüm karşılaştırması ve çoğunluk için) |
103
+ | `ek_katsayi` | | Ek çarpan (varsayılan 1,0) |
104
+ | `deger` | | Ekspertiz değeri; verilirse katsayılar bu bölüm için kullanılmaz |
105
+
106
+ Sütun adları büyük/küçük harf ve Türkçe karakterden bağımsız eşleştirilir; ayraç
107
+ (`,` `;` sekme) otomatik bulunur. Tabloda tanımlı olmayan bir kategori (ör. `cephe=güney`)
108
+ sessizce 1,0 sayılmaz, **hata verir**.
109
+
110
+ ## Hızlı başlangıç (Python)
111
+
112
+ ```python
113
+ from tr_arsapayi import Unit, allocate, default_coefficients
114
+
115
+ units = [
116
+ Unit("1", floor=0, net_area=80, use="dukkan", facade="on"),
117
+ Unit("2", floor=1, net_area=100, facade="on"),
118
+ Unit("3", floor=1, net_area=100, facade="arka"),
119
+ Unit("4", floor=2, net_area=100, facade="on", annexes={"depo": 8}),
120
+ ]
121
+ alloc = allocate(units, denominator=1000)
122
+ print(alloc.shares()) # {'1': 288, '2': 240, '3': 222, '4': 250}
123
+ print(alloc.to_markdown())
124
+
125
+ # Katsayıları değiştirme (yalnızca farklı olanlar)
126
+ k = default_coefficients().updated({"nitelik": {"dukkan": 2.0}, "birim_deger": 40000})
127
+ print(allocate(units, k, denominator="tam").denominator)
128
+ ```
129
+
130
+ Elle doğrulama (örnek katsayılarla): BB1 = 80 × 1,00 × 1,50 × 1,05 = 126,00;
131
+ BB2 = 100 × 1,05 = 105,00; BB3 = 100 × 0,97 = 97,00; BB4 = 100 × 1,02 × 1,05 + 8 × 0,25
132
+ = 109,10; toplam 437,10. Kotalar 288,26 / 240,22 / 221,92 / 249,60; tam kısımların
133
+ toplamı 998, kalan 2 pay en büyük kalanlara (0,92 ve 0,60) verilir → 288, 240, 222, 250.
134
+
135
+ ### Kentsel dönüşüm
136
+
137
+ ```python
138
+ from fractions import Fraction
139
+ from tr_arsapayi import allocate, compare_transformation, majority, read_units_csv
140
+
141
+ old = allocate(read_units_csv("eski.csv"), denominator=1000)
142
+ new = allocate(read_units_csv("yeni.csv"), denominator=1000)
143
+ print(compare_transformation(old, new).to_markdown())
144
+
145
+ print(majority(old, ["Malik A", "Malik C"]).describe())
146
+ # Onaylayan hisse oranı %52,00; gereken: > 1/2. Çoğunluk SAĞLANDI.
147
+ ```
148
+
149
+ `compare_transformation`, yeni yapıda eski maliklere verilen bölümlerin toplam değerini
150
+ ("maliklere düşen değer") eski arsa payı oranlarına göre paylaştırır:
151
+ **hak edilen değer = eski oran × maliklere düşen değer**. Alınan değer bununla
152
+ karşılaştırılır (fark ve alınan/hak edilen oranı). Eski malik listesinde olmayan
153
+ (veya `Yüklenici`/`müteahhit` etiketli) yeni bölümler yüklenici payı sayılır.
154
+
155
+ ## API özeti
156
+
157
+ | Nesne | Açıklama |
158
+ |---|---|
159
+ | `Unit` | Bağımsız bölüm: `no`, `floor`, `net_area`, `use`, `facade`, `view`, `position`, `annexes`, `owner`, `extra_factor`, `value` |
160
+ | `CoefficientSet` | Katsayı tabloları; `from_json`, `from_dict(..., base=)`, `updated`, `to_json`, `floor_factor`, `lookup` |
161
+ | `default_coefficients()` | **Örnek** katsayı seti (yeni kopya döner) |
162
+ | `value_unit(unit, k)` | Katsayı dökümü ve değer (`UnitValuation`) |
163
+ | `allocate(units, k, denominator, method, min_share)` | Arsa payı dağıtımı → `Allocation` (`shares`, `owner_ratios`, `max_rounding_error`, `to_markdown`, `to_text`, `to_csv`, `to_dicts`) |
164
+ | `compare_methods`, `method_comparison_table` | Değer esaslı / alan esaslı karşılaştırma |
165
+ | `suggest_denominator` | Toleransa göre en küçük ortak payda (100, 120, 240, ..., 1000, 2400, ...) |
166
+ | `largest_remainder`, `exact_denominator` | Tam sayı paylaştırma çekirdeği |
167
+ | `compare_transformation` | Kentsel dönüşüm eski/yeni karşılaştırması → `TransformationResult` |
168
+ | `majority` | 6306 m.6 "hisseleri oranında salt çoğunluk" kontrolü |
169
+ | `read_units_csv`, `parse_annexes`, `parse_floor` | Girdi okuma yardımcıları |
170
+
171
+ ## Yöntem ve kaynaklar
172
+
173
+ **Hukuki dayanak** (metinler mevzuat.gov.tr üzerinden kontrol edilmiştir):
174
+
175
+ - **634 sayılı Kat Mülkiyeti Kanunu, m.2/d:** arsa payı, "arsanın, bu Kanunda yazılı
176
+ esasa göre bağımsız bölümlere tahsis edilen ortak mülkiyet payları"dır.
177
+ - **634 s.K. m.3/2** (14/11/2007 tarihli 5711 s.K. ile değişik): kat mülkiyeti ve kat
178
+ irtifakı, bağımsız bölümlerin "konum ve büyüklüklerine göre hesaplanan değerleri ile
179
+ oranlı olarak" tahsis edilen arsa payının gösterilmesi suretiyle kurulur; oranlı
180
+ değilse her malik düzeltme için mahkemeye başvurabilir; sonradan oluşan değer
181
+ artış/azalışı arsa payını değiştirmez.
182
+ - **634 s.K. m.4:** ortak yerler (temeller, merdivenler, asansörler, sığınaklar ...);
183
+ bunlara ayrı arsa payı verilmez.
184
+ - **634 s.K. m.6:** eklentiler, ait oldukları bağımsız bölümün bütünleyici parçasıdır.
185
+ Bu nedenle eklenti alanı (katsayısıyla) bölümün değerine eklenir.
186
+ - **6306 sayılı Kanun, m.6/1** (7/11/2023 tarihli 7471 s.K. ile değişik): riskli
187
+ yapılarda yeniden yapım, kat karşılığı vb. kararlar "yapının paydaşı olup olmadıkları
188
+ gözetilmeksizin sahip oldukları hisseleri oranında paydaşların salt çoğunluğu ile"
189
+ alınır (değişiklikten önce "en az üçte iki"). Yıkım sonrası tescil "payları oranında"
190
+ yapılır.
191
+
192
+ **Hesap:**
193
+
194
+ ```
195
+ değer_i = birim_değer × (net_alan_i × k_kat × k_nitelik × k_cephe × k_manzara × k_konum × k_ek
196
+ + Σ eklenti_alanı × k_eklenti)
197
+ oran_i = değer_i / Σ değer
198
+ pay_i = en büyük kalan yöntemiyle round(oran_i × payda), Σ pay_i = payda
199
+ ```
200
+
201
+ Değerler `precision` (varsayılan 2) ondalığa yuvarlanıp tam sayıya çevrilir; tüm
202
+ paylaştırma tam sayı aritmetiğiyle yapılır. `payda="tam"` için payda
203
+ `Σw / ebob(w)` (indirgenmiş kesirlerin paydalarının EKOK'u) olur ve yuvarlama yoktur.
204
+ `min_share` (varsayılan 1) hiçbir bölümün sıfır pay almamasını sağlar.
205
+
206
+ En büyük kalan yöntemi: M. L. Balinski & H. P. Young, *Fair Representation*, 2. bs.,
207
+ Brookings Institution Press, 2001.
208
+
209
+ **Örnek katsayılar** (`tr-arsapayi katsayilar` ile tamamı görülebilir; hiçbiri mevzuattan
210
+ alınmamıştır): kat (1. kat = 1,00; zemin 0,95; 1. bodrum 0,80; üst katlarda 1,02–1,06),
211
+ dükkan için ayrı kat tablosu (zemin 1,00, 1. bodrum 0,60), nitelik (konut 1,00; dükkan
212
+ 1,50; ofis 1,10; işyeri 1,20; depo 0,40; otopark 0,35), cephe (ön 1,05; yan 1,00; arka
213
+ 0,97; köşe 1,08; iç 0,95), manzara (yok 1,00; kısmi 1,03; tam 1,08; deniz 1,12), konum
214
+ (normal 1,00; çatı dubleks 1,05; asansörsüz üst 0,97), eklenti eşdeğer alan katsayıları
215
+ (depo/kiler 0,25; kömürlük 0,20; otopark 0,35; garaj 0,40; bahçe 0,15; teras ve çatı
216
+ arası 0,30).
217
+
218
+ ## Sınırlamalar
219
+
220
+ - Katsayılar örnektir; piyasa değerini yansıtmaları garanti edilmez. Değer esaslı
221
+ hesap için en sağlam girdi, lisanslı değerleme uzmanının bölüm bazlı değerleridir
222
+ (`deger` sütunu).
223
+ - Bir bağımsız bölümün birden çok paydaşı (hisseli mülkiyet) modellenmez; malik
224
+ alanına tek bir ad yazılır.
225
+ - Kentsel dönüşüm karşılaştırması, eski arsa payını hak ediş ölçüsü olarak kullanır;
226
+ sözleşmedeki ek bedeller, kira yardımı, KDV vb. hesaba katılmaz.
227
+ - Çoğunluk kontrolü yalnızca oran hesabıdır; tebligat, süre ve satış usulleri gibi
228
+ 6306 s.K. ve yönetmelik hükümleri kapsam dışıdır.
229
+ - Bu yazılım hukuki danışmanlık değildir; tapu tescili için proje müellifi, harita
230
+ mühendisi ve ilgili idare ile çalışın.
231
+
232
+ ## Akademik atıf
233
+
234
+ ```bibtex
235
+ @software{eminoglu_tr_arsapayi,
236
+ author = {Eminoğlu, Yusuf},
237
+ title = {tr-arsapayi},
238
+ year = {2026},
239
+ version = {0.1.0},
240
+ url = {https://github.com/YusufEminoglu/tr_arsapayi_sdk}
241
+ }
242
+ ```
243
+
244
+ ## Lisans
245
+
246
+ MIT Lisansı. Ayrıntılar için [LICENSE](https://github.com/YusufEminoglu/tr_arsapayi_sdk/blob/main/LICENSE).
247
+ İletişim: geospacephilo@gmail.com
@@ -0,0 +1,10 @@
1
+ bb_no,kat,nitelik,net_alan,cephe,manzara,konum,eklenti,malik
2
+ 1,Z,dükkan,85,ön,,,depo=12,Malik A
3
+ 2,Z,dükkan,60,yan,,,,Malik B
4
+ 3,1,konut,110,ön,kısmi,,,Malik C
5
+ 4,1,konut,95,arka,,,,Malik D
6
+ 5,2,konut,110,ön,kısmi,,otopark=12.5,Malik E
7
+ 6,2,konut,95,arka,,,,Malik F
8
+ 7,3,konut,110,ön,tam,,otopark=12.5,Malik G
9
+ 8,3,konut,95,arka,yok,,,Malik H
10
+ 9,4,konut,180,köşe,tam,çatı dubleks,teras=40,Malik I
@@ -0,0 +1,5 @@
1
+ bb_no;kat;nitelik;net_alan;cephe;malik
2
+ 1;Z;konut;90;ön;Malik A
3
+ 2;Z;konut;90;arka;Malik B
4
+ 3;1;konut;90;ön;Malik C
5
+ 4;1;konut;90;arka;Malik D