tr-dop 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 (43) hide show
  1. tr_dop-0.1.0/CHANGELOG.md +23 -0
  2. tr_dop-0.1.0/CITATION.cff +20 -0
  3. tr_dop-0.1.0/LICENSE +21 -0
  4. tr_dop-0.1.0/MANIFEST.in +9 -0
  5. tr_dop-0.1.0/PKG-INFO +301 -0
  6. tr_dop-0.1.0/README.md +263 -0
  7. tr_dop-0.1.0/examples/parseller.csv +10 -0
  8. tr_dop-0.1.0/examples/plan.csv +7 -0
  9. tr_dop-0.1.0/examples/proje.json +45 -0
  10. tr_dop-0.1.0/examples/quickstart.py +60 -0
  11. tr_dop-0.1.0/examples/yeni_parseller.csv +7 -0
  12. tr_dop-0.1.0/pyproject.toml +110 -0
  13. tr_dop-0.1.0/setup.cfg +4 -0
  14. tr_dop-0.1.0/src/tr_dop/__init__.py +115 -0
  15. tr_dop-0.1.0/src/tr_dop/__main__.py +7 -0
  16. tr_dop-0.1.0/src/tr_dop/_version.py +1 -0
  17. tr_dop-0.1.0/src/tr_dop/area.py +109 -0
  18. tr_dop-0.1.0/src/tr_dop/cli.py +196 -0
  19. tr_dop-0.1.0/src/tr_dop/data/land_uses.json +51 -0
  20. tr_dop-0.1.0/src/tr_dop/distribution.py +326 -0
  21. tr_dop-0.1.0/src/tr_dop/dop.py +474 -0
  22. tr_dop-0.1.0/src/tr_dop/engine.py +271 -0
  23. tr_dop-0.1.0/src/tr_dop/errors.py +11 -0
  24. tr_dop-0.1.0/src/tr_dop/io.py +464 -0
  25. tr_dop-0.1.0/src/tr_dop/landuse.py +175 -0
  26. tr_dop-0.1.0/src/tr_dop/models.py +312 -0
  27. tr_dop-0.1.0/src/tr_dop/py.typed +0 -0
  28. tr_dop-0.1.0/src/tr_dop/report.py +144 -0
  29. tr_dop-0.1.0/src/tr_dop.egg-info/PKG-INFO +301 -0
  30. tr_dop-0.1.0/src/tr_dop.egg-info/SOURCES.txt +41 -0
  31. tr_dop-0.1.0/src/tr_dop.egg-info/dependency_links.txt +1 -0
  32. tr_dop-0.1.0/src/tr_dop.egg-info/entry_points.txt +2 -0
  33. tr_dop-0.1.0/src/tr_dop.egg-info/requires.txt +6 -0
  34. tr_dop-0.1.0/src/tr_dop.egg-info/top_level.txt +1 -0
  35. tr_dop-0.1.0/tests/conftest.py +10 -0
  36. tr_dop-0.1.0/tests/test_area.py +43 -0
  37. tr_dop-0.1.0/tests/test_cli.py +141 -0
  38. tr_dop-0.1.0/tests/test_distribution.py +135 -0
  39. tr_dop-0.1.0/tests/test_doctests.py +37 -0
  40. tr_dop-0.1.0/tests/test_dop.py +225 -0
  41. tr_dop-0.1.0/tests/test_engine.py +181 -0
  42. tr_dop-0.1.0/tests/test_io.py +149 -0
  43. tr_dop-0.1.0/tests/test_landuse.py +129 -0
@@ -0,0 +1,23 @@
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
+ - DOP ratio (DOPO) computation from the plan's land uses with the 45 % cap of 3194 m.18/2,
10
+ seven-decimal rounding (Yönetmelik m.4/1-d), closed roads, donations and public parcels
11
+ credited (m.14/4-8, m.16/4), flood control facilities last and Treasury land first (m.14/3).
12
+ - "dengeli" (balanced) and "dogrudan" (literal) ratio methods; earlier surrenders and earlier
13
+ DOP handled per 3194 m.18/7-9 (complement up to the ratio, total never above 45 %).
14
+ - Public uses above the cap: free public land first, then KOP shares in proportion to
15
+ entitlement or to the area lying on those uses (Yönetmelik m.15, m.17/3).
16
+ - DOP converted to money because of lawful buildings, with the extra deduction borne by the
17
+ other parcels and the payment split (3194 m.18/11-12, Yönetmelik m.16/1-3).
18
+ - Registered vs computed area choice with the error limit of Yönetmelik m.31 (overridable).
19
+ - Distribution to new parcels (location preferences, minimal splitting), owners' shares with
20
+ integer numerators over the parcel-area denominator (m.32), exact checks.
21
+ - Data-driven, overridable land-use catalogue with article references.
22
+ - JSON/CSV input (Turkish or English column names, decimal commas), Markdown/CSV/JSON output,
23
+ `tr-dop` CLI in Turkish (`hesapla`, `kullanimlar`, `yanilma`).
@@ -0,0 +1,20 @@
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-dop"
9
+ version: "0.1.0"
10
+ date-released: "2026-11-09"
11
+ license: "MIT"
12
+ repository-code: "https://github.com/YusufEminoglu/tr_dop_sdk"
13
+ url: "https://pypi.org/project/tr-dop/"
14
+ abstract: "Turkish land readjustment (arazi ve arsa düzenlemesi) calculations under Article 18 of Zoning Law 3194 and the Arazi ve Arsa Düzenlemeleri Hakkında Yönetmelik: DOP ratio with the 45 % cap, per-parcel DOP and KOP deductions accounting for earlier surrenders, distribution and shareholding tables, consistency checks, Markdown/CSV reports and a Turkish command-line interface."
15
+ keywords:
16
+ - land readjustment
17
+ - land pooling
18
+ - urban planning
19
+ - cadastre
20
+ - Turkey
tr_dop-0.1.0/LICENSE ADDED
@@ -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_dop/py.typed
7
+ recursive-include src/tr_dop *.py *.json
8
+ recursive-include tests *.py
9
+ recursive-include examples *.py *.csv *.json
tr_dop-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,301 @@
1
+ Metadata-Version: 2.4
2
+ Name: tr-dop
3
+ Version: 0.1.0
4
+ Summary: Turkish land readjustment (arazi ve arsa düzenlemesi, İmar Kanunu m.18) calculations: DOP ratio, per-parcel DOP/KOP deductions with earlier surrenders, distribution and shareholding tables, checks, Markdown/CSV reports and a Turkish CLI.
5
+ Author-email: Yusuf Eminoğlu <geospacephilo@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/YusufEminoglu/tr_dop_sdk
8
+ Project-URL: Repository, https://github.com/YusufEminoglu/tr_dop_sdk
9
+ Project-URL: Issues, https://github.com/YusufEminoglu/tr_dop_sdk/issues
10
+ Project-URL: Changelog, https://github.com/YusufEminoglu/tr_dop_sdk/blob/main/CHANGELOG.md
11
+ Keywords: land-readjustment,land-pooling,arazi-duzenlemesi,imar,18-madde,dop,duzenleme-ortaklik-payi,parselasyon,hisselendirme,cadastre,urban-planning,turkey
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: Natural Language :: English
23
+ Classifier: Topic :: Scientific/Engineering :: GIS
24
+ Classifier: Topic :: Utilities
25
+ Classifier: Intended Audience :: Science/Research
26
+ Classifier: Intended Audience :: Developers
27
+ Classifier: Intended Audience :: Other Audience
28
+ Classifier: Typing :: Typed
29
+ Requires-Python: >=3.9
30
+ Description-Content-Type: text/markdown
31
+ License-File: LICENSE
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
34
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
35
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
36
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
37
+ Dynamic: license-file
38
+
39
+ # tr-dop
40
+
41
+ [![PyPI version](https://img.shields.io/pypi/v/tr-dop.svg)](https://pypi.org/project/tr-dop/)
42
+ [![Python versions](https://img.shields.io/pypi/pyversions/tr-dop.svg)](https://pypi.org/project/tr-dop/)
43
+ [![CI](https://github.com/YusufEminoglu/tr_dop_sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/YusufEminoglu/tr_dop_sdk/actions/workflows/ci.yml)
44
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
45
+
46
+ **English summary.** `tr-dop` computes Turkish land readjustment ("arazi ve arsa düzenlemesi",
47
+ Article 18 of Zoning Law No. 3194) on the standard library alone: the DOP contribution ratio
48
+ under the 45 % cap, per-parcel DOP and KOP deductions that credit earlier surrenders, and the
49
+ distribution and shareholding of the new parcels with exact share checks. Inputs are JSON or
50
+ CSV; outputs are Markdown, CSV and JSON reports and a Turkish command-line tool, with every rule
51
+ traced to the article of the law or regulation it implements.
52
+
53
+ ---
54
+
55
+ **3194 sayılı İmar Kanunu 18. madde uygulaması (arazi ve arsa düzenlemesi) için hesap
56
+ kütüphanesi ve komut satırı aracı.**
57
+
58
+ `tr-dop` şunları yapar:
59
+
60
+ - Plan kullanımlarından **düzenleme ortaklık payı oranını (DOPO)** hesaplar. Hangi kullanımın
61
+ DOP'tan karşılanacağı veri dosyasından okunur ve değiştirilebilir. Üst sınır %45'tir, oran
62
+ virgülden sonra yedi basamakla hesaplanır.
63
+ - **Parsel bazında DOP kesintisini** hesaplar. Önceki terk ve kesintiler (bedelsiz terk, ifraz
64
+ ve tevhit yoluyla terk, evvelce alınmış DOP), bağışlar, kamulaştırmalar, kapanan yollar ve
65
+ kamu tahsisli parseller dikkate alınır. Mevcut yapılar nedeniyle alınamayan DOP bedele
66
+ dönüştürülür.
67
+ - %45'i aşan kamu alanlarını önce bedelsiz kamu alanlarından karşılar, kalanını **KOP
68
+ (kamu ortaklık payı) hissesi** olarak parsellere paylaştırır.
69
+ - Yeni imar parsellerine **dağıtım ve hisselendirme** yapar. Önce eski parselin yeri ve
70
+ tercihleri esas alınır, gerekmedikçe tahsis bölünmez. Payda parsel alanıdır ve paylar tam
71
+ sayıdır.
72
+ - **Kontrolleri** yapar: hisse toplamları, %45 sınırı, parsel bazında toplam kesinti, DOP'un
73
+ karşılanması, saha ve dağıtım dengesi, pay ve payda eşitliği, asgari parsel büyüklüğü.
74
+ - **Tapu ve kadastro alanı farkını** yanılma sınırına göre değerlendirir (Yön. m.31).
75
+ - Sonuçları **Markdown, CSV ve JSON** olarak yazar. Türkçe bir CLI (`tr-dop`) sunar.
76
+
77
+ Bağımlılığı yoktur, yalnızca Python standart kütüphanesini kullanır. Python 3.9 ve üzeri ile
78
+ çalışır.
79
+
80
+ ```bash
81
+ pip install tr-dop
82
+ ```
83
+
84
+ ## Hızlı başlangıç (komut satırı)
85
+
86
+ ```bash
87
+ # JSON proje dosyasıyla: rapor ekrana
88
+ tr-dop hesapla examples/proje.json
89
+
90
+ # CSV girdileriyle: Markdown rapor + CSV cetvelleri + JSON
91
+ tr-dop hesapla --parseller examples/parseller.csv --plan examples/plan.csv \
92
+ --yeni-parseller examples/yeni_parseller.csv --kapanan-yol 450 \
93
+ -o rapor.md --csv-klasoru cikti --ayrac ";" --json sonuc.json
94
+
95
+ # Plan kullanımları kataloğu: hangi kullanım DOP'tan karşılanır, hangi bentte
96
+ tr-dop kullanimlar
97
+
98
+ # Tapu alanı ile hesap alanı karşılaştırması (Yön. m.31)
99
+ tr-dop yanilma --tapu 1800 --hesap 1752 --olcek 1000
100
+ ```
101
+
102
+ `hesapla` seçenekleri: `--yontem dengeli|dogrudan`, `--kop orantili|cakisma|yok`,
103
+ `--ust-sinir 0.45`, `--kapanan-yol`, `--hazine-taskin`, `--kamu-alani`, `--asgari-parsel`,
104
+ `--tahsisler` (elle tahsis CSV'si), `--katalog` (kullanım kataloğu değişiklikleri).
105
+ Çıkış kodu 0 başarı, 1 bir kontrol hata verdi, 2 girdi hatası anlamına gelir.
106
+
107
+ Örnek rapordan bir bölüm (`examples/proje.json`):
108
+
109
+ ```text
110
+ - Düzenleme ortaklık payı oranı (DOPO): **0.3551697** (%35,51697)
111
+ - Düşülen alanlar: kapanan yollar 450,00 m², bağış 0,00 m², kamu tahsisli parseller 600,00 m²
112
+ | 120/3 | 1500.00 | 1500.00 | tapu | 250.00 | 371.55 | 0.3551714 | 0.00 | 1128.45 | Önceki terk ... |
113
+ ```
114
+
115
+ ## Hızlı başlangıç (Python)
116
+
117
+ ```python
118
+ from tr_dop import NewParcel, Owner, Parcel, PlanUse, Scheme, Settings, run, to_markdown
119
+
120
+ scheme = Scheme(
121
+ parcels=[
122
+ Parcel("101/1", 2000, [Owner("Ali", "1/2"), Owner("Ayşe", "1/2")]),
123
+ Parcel("101/2", 3000, [Owner("Mehmet", "1")]),
124
+ # ifraz sırasında 300 m² yola bedelsiz terk etmiş parsel (3194 m.18/9)
125
+ Parcel("101/3", 1500, [Owner("Zeynep", "1")], prior_deduction=300),
126
+ ],
127
+ plan_uses=[PlanUse("yol", 1800), PlanUse("park", 700), PlanUse("konut", 4300)],
128
+ new_parcels=[NewParcel("5/1", 1100), NewParcel("5/2", 1100),
129
+ NewParcel("5/3", 1050), NewParcel("5/4", 1050)],
130
+ settings=Settings(closed_roads_area=300, min_parcel_area=400),
131
+ )
132
+ result = run(scheme)
133
+ result.dop.ratio # 0.3676471 ( = 2500 / 6800 )
134
+ result.dop.parcel("101/3").dop_area # 361.76 ( = 0.3676471 x 1800 - 300 )
135
+ result.ok # tüm "hata" düzeyindeki kontroller geçti mi
136
+ print(to_markdown(result))
137
+ ```
138
+
139
+ ## Girdi biçimleri
140
+
141
+ **JSON proje dosyası** (`examples/proje.json`): `parcels`, `plan_uses`, `new_parcels`,
142
+ isteğe bağlı `allocations` ve `settings`.
143
+
144
+ **CSV** dosyalarında ayraç `,` ya da `;` olabilir (otomatik algılanır). Ondalık virgül
145
+ (`1.234,56`) kabul edilir. Sütun adları Türkçe ya da İngilizce yazılabilir.
146
+
147
+ | Dosya | Sütunlar |
148
+ |---|---|
149
+ | `parseller.csv` (malik başına bir satır) | `parsel`, `malik`, `hisse` (`1/3`, `0,25`), `tapu_alani`; isteğe bağlı `hesap_alani`, `olcek`, `yerlesik`, `yanilma_siniri`, `giren_alan`, `onceki_kesinti`, `onceki_kesinti_turu` (`terk`/`dop`), `deger_artisi`, `bagis`, `kamulastirilan`, `durum` (`ozel`/`kamu_tahsisli`), `azami_kesinti`, `cakisma_alani`, `tercih` (`"1/1;1/2"`) |
150
+ | `plan.csv` | `kullanim`, `alan`, isteğe bağlı `dop` (evet/hayır, katalogdaki değeri geçersiz kılar) |
151
+ | `yeni_parseller.csv` | `yeni_parsel`, `alan`; isteğe bağlı `ada`, `kullanim`, `asgari_alan`, `kop` |
152
+ | `tahsisler.csv` | `parsel`, `yeni_parsel`, `alan` (verilirse otomatik dağıtım yerine kullanılır) |
153
+
154
+ Parsel düzeyindeki sütunlar aynı parselin ilk satırında yazılır, sonraki satırlarda boş
155
+ bırakılabilir.
156
+
157
+ ## API özeti
158
+
159
+ | Nesne / fonksiyon | Görev |
160
+ |---|---|
161
+ | `Owner`, `Parcel`, `PlanUse`, `NewParcel`, `Allocation`, `Settings`, `Scheme` | Girdi modeli. Hisseler `Fraction` olarak tutulur, toplamları tam olarak 1 olmalıdır. |
162
+ | `run(scheme, catalog=None)` → `ReadjustmentResult` | DOP, KOP, dağıtım ve kontroller (`.dop`, `.distribution`, `.checks`, `.ok`) |
163
+ | `compute_dop(parcels, plan_uses, settings, catalog)` → `DopResult` | Oran (`ratio`, `applied_ratio`), parsel satırları (`ParcelDop`), kullanım karşılama tablosu (`UseCoverage`) |
164
+ | `distribute(entitlements, owners, new_parcels, ...)` → `Distribution` | Yerleştirme ve hisse satırları (`ShareRow`: pay/payda) |
165
+ | `conversion_payments(dop_result, toplam_bedel)` | Bedele dönüştürülen DOP bedelinin fazladan kesinti yapılan parsellere dağıtımı |
166
+ | `basis_area`, `area_tolerance` | Tapu ve hesap alanı seçimi, yanılma sınırı |
167
+ | `default_catalog()`, `load_catalog(overrides)` | Plan kullanımları kataloğu |
168
+ | `load_scheme`, `read_*_csv`, `scheme_from_mapping` | Girdi okuma |
169
+ | `to_markdown`, `write_outputs`, `dop_table`, `distribution_table`, `coverage_table`, `result_to_mapping` | Çıktılar |
170
+
171
+ ## Yöntem ve dayanak
172
+
173
+ Metinler mevzuat.gov.tr'deki güncel İmar Kanunu metni ve Resmî Gazete'de yayımlanan yönetmelik
174
+ ve değişiklikleriyle Kasım 2026'da karşılaştırılmıştır.
175
+
176
+ - **3194 sayılı İmar Kanunu m.18** (7181/2019, 7333/2021 ve 7534/2024 sayılı Kanunlarla
177
+ değişik):
178
+ - fıkra 2: DOP, düzenlemeden önceki yüzölçümünün **%45**'ini geçemez. 5006 sayılı Kanun
179
+ sınırı %35'ten %40'a, 7181 sayılı Kanun %45'e çıkarmıştır.
180
+ - fıkra 3: DOP'un oluşabileceği kullanımların kapalı listesini verir. Taşkın kontrol tesisi
181
+ önce Hazine taşınmazlarından, sonra kalan oran kadar DOP'tan karşılanır. Kapanan imar ve
182
+ kadastro yolları toplam DOP'tan düşülür.
183
+ - fıkra 6: Kamulaştırılan kısım düşüldükten sonra kalan sahadan DOP alınır.
184
+ - fıkra 7: DOP kural olarak bir kez alınır. Yapılaşma koşulu ve nüfus artarsa, önceki terk
185
+ ve kesintiler dikkate alınarak ilk uygulamadaki oran %45'e kadar tamamlanabilir.
186
+ - fıkra 8: 2981 m.10 uygulamalarında tamamlayıcı kesinti yapılabilir; toplam %45'i geçemez.
187
+ - fıkra 9: İfraz ve tevhitle terk edilen alanın oranı, DOPO'ya tamamlayan fark kadar DOP alınır.
188
+ - fıkra 11-12: Yapılar nedeniyle alınamayan DOP bedele dönüştürülür ve fazladan kesinti
189
+ yapılan parsel sahiplerine ödenir.
190
+ - fıkra 13: Tahsis önce düzenlemeye alınan taşınmazın bulunduğu yerden yapılır.
191
+ - fıkra 15: Asgari parsel büyüklüğünün altında parsel oluşturulamaz.
192
+ - **Arazi ve Arsa Düzenlemeleri Hakkında Yönetmelik** (RG 22/2/2020-31047; değişiklikler
193
+ RG 11/9/2025-33014 ve 13/12/2025-33106):
194
+ - m.4/1-d: DOPO = toplam DOP / düzenlemeye giren parsellerin toplam yüzölçümü; yedi basamak.
195
+ - m.14/2: Öncelik sırası (a ... i). m.14/3: taşkın kontrol tesisi. m.14/4-5: kapanan yollar
196
+ ve fazlası. m.14/6-7: önceki terkler (toplam %45). m.14/8: bağış ve tahsis.
197
+ - m.15: %45'i aşan kamu alanları. Önce tescil harici, belediye, kamu ve Hazine alanları
198
+ kullanılır, sonra trampa, imar hakkı aktarımı ya da kamulaştırma. m.15/4'e göre aşan alan,
199
+ çakışan parsellere kamulaştırma şerhiyle tahsis edilir.
200
+ - m.16: DOP alınmayan durumlar (yapılar ve bedele dönüştürme formülü m.16/3, kamu tahsisli
201
+ parseller m.16/4, evvelce DOP alınmış parseller m.16/5).
202
+ - m.17: Dağıtım esasları ve KOP hisselendirmesi (m.17/3). m.31: yüzölçümü kontrolü.
203
+ m.32: hisse hesabı (payda = parsel alanı).
204
+
205
+ **Oran yöntemleri.** Varsayılan `dengeli` yöntem, önceki terkleri olan parsellerin de
206
+ katkısını eşitleyecek oranı çözer: `Σ max(0, r·A⁰ᵢ − Tᵢ) = gereken DOP` (`A⁰` terk öncesi
207
+ alan, `T` önceki terk). Böylece her parselin toplam katkısı özgün alanının aynı `r` oranı olur
208
+ ve kamu alanları tam karşılanır. `dogrudan` yöntem Yönetmelik m.4/1-d tanımını harfiyen
209
+ uygular: `r = gereken DOP / Σ parsel alanı`. Önceki terkler tamamlayan fark olarak düşüldüğü
210
+ için ortaya çıkan açık raporda gösterilir.
211
+
212
+ **KOP.** 2019-2020 düzenlemesiyle eski "kamu ortaklık payı" kesintisi kaldırılmıştır; ancak
213
+ %45'i aşan kamu alanlarının karşılanması gerekir. `tr-dop` aşan alanı hesaplar. Bu alanı önce
214
+ `excess_cover_area` (bedelsiz kamu alanı) ile karşılar, kalanını iki yöntemden biriyle
215
+ paylaştırır. `orantili` yöntemde pay, DOP sonrası tahsis miktarıyla orantılıdır (eski KOP
216
+ uygulaması, Yön. m.17/3). `cakisma` yöntemde pay, parselin aşan kamu alanına düşen kısmıyla
217
+ orantılıdır (Yön. m.15/4). KOP hisseleri malikin mülkiyetinde kalır ve kamulaştırma şerhiyle
218
+ `kop_target` parsellere hisselendirilir.
219
+
220
+ **Dağıtım.** Eski parseller verilen sırayla işlenir. Her parsel önce tercih ettiği yeni
221
+ parsellere, sonra tahsisi bütün olarak alabilen ilk parsele yerleştirilir. Kalan parseller en
222
+ geniş boş parselleri doldurur, son kalan kısım tahsisi tam alabilen en dar parsele konur. Toplam
223
+ tahsis yeni parsel alanından yuvarlama kadar farklıysa en büyük kalan yöntemiyle dengelenir; bu
224
+ dengeleme raporda gösterilir. Hesaplar 0,01 m² tamsayı biriminde yapılır, bu yüzden payların
225
+ toplamı paydaya tam olarak eşittir.
226
+
227
+ ## Kontroller
228
+
229
+ | Kod | Düzey | İçerik |
230
+ |---|---|---|
231
+ | `hisse_toplami` | hata | Her eski parselde malik hisselerinin toplamı 1 |
232
+ | `dop_ust_siniri` | hata | DOPO ≤ üst sınır |
233
+ | `dop_asimi` | uyarı | Kamu alanları %45'i aşıyor (KOP/kamulaştırma gerekli) |
234
+ | `parsel_toplam_kesinti` | uyarı | Önceki kesintiler dahil parsel bazında %45 |
235
+ | `dop_karsilama` | uyarı | Toplanan DOP = gereken DOP |
236
+ | `saha_dengesi` | uyarı | Plan kullanımları toplamı = parseller + yollar + kamu alanları |
237
+ | `dagitim_dengesi` | hata | Tahsis toplamı = yeni parsel alanı toplamı (bağıl tolerans) |
238
+ | `dagitilamayan` | hata | Bütün tahsisler dağıtıldı |
239
+ | `pay_payda` | hata | Her yeni parselde Σ pay = payda |
240
+ | `asgari_parsel` | hata | Yeni parsel ≥ asgari büyüklük |
241
+ | `kop_parseli`, `yeni_parsel_plan`, `kapanan_yol_fazlasi`, `bedele_donusturme` | uyarı/bilgi | Ek bilgiler |
242
+
243
+ ## Sınırlamalar ve doğrulanamayan noktalar
244
+
245
+ - **Yanılma sınırı:** Formüller Yönetmelik m.31/3'ün 2020 metnindendir. 2025 değişikliğiyle
246
+ fıkra, *Tapu Planlarında Yanılma Sınırının Belirlenmesi Hakkında Yönetmelik*'e (RG
247
+ 27/9/2022-31966) atıf yapar hale gelmiştir ve o yönetmeliğin formülleri bu pakette
248
+ doğrulanmamıştır. Yerleşik alan formülündeki karekökün `M·F` çarpımının tamamını kapsadığı
249
+ varsayılmıştır, çünkü RG dizgisi bu konuda belirsizdir. Güncel değer için `tolerance`
250
+ alanını kullanın.
251
+ - **Kullanım kataloğu:** Kanun listesindeki kullanımların DOP kapsamı doğrulanmıştır. Bazı
252
+ satırlar `verified: false` olarak işaretlidir: mezarlık (yalnızca Yönetmelik m.14/2-i'de
253
+ geçer), kent meydanı, kent parkı ve idari tesis (2025'te öncelik listesinden çıkarılmış ya
254
+ da yalnızca tanımda geçer). Öncelik bentlerinden a (ilk kısmı), b, d, e, g ve ı'nın 2025
255
+ metni ikincil kaynaktan doğrulanmıştır. Öteki bentler 2020 metninden alınmıştır.
256
+ `tr-dop kullanimlar` komutu (*) ile işaretli satırları gösterir. `--katalog` ile
257
+ değiştirebilirsiniz.
258
+ - **Hesap yorumları:** `dengeli` yöntem, önceki terklerin "toplam parsel alanı" olarak terk
259
+ öncesi alana (`A⁰ = alan + terk`) oranlandığı yorumuna dayanır. Değer artışı nedeniyle ilave
260
+ DOP alınan parsellerde (3194 m.18/7) ilave kesinti `min(r, %45)·A⁰ − önceki kesinti` olarak
261
+ hesaplanır.
262
+ - **KOP:** `orantili` paylaştırma uygulamadaki eski KOP yöntemine dayanır; güncel mevzuatta
263
+ bu adla bir kesinti yoktur. `cakisma` yöntemi m.15/4'e daha yakındır, ancak çakışma
264
+ alanlarını kullanıcının girmesi gerekir.
265
+ - **Geometri:** Geometri yoktur. Plan kullanım alanları, yeni parsel alanları ve tercihler
266
+ kullanıcıdan alınır. Değer esaslı (eşdeğer) dağıtım, kat mülkiyeti esaslı hisselendirme
267
+ (m.19) ve imar hakkı aktarımı (m.38/A-C) kapsam dışıdır.
268
+ - **Asgari parsel büyüklükleri** plan ve Planlı Alanlar İmar Yönetmeliği'ne göre değişir.
269
+ Varsayılan bir değer yoktur, `min_area` ya da `--asgari-parsel` ile verilmelidir.
270
+ - Sonuçlar ön hesap niteliğindedir. Parselasyon planı yetkili idare tarafından mevzuata göre
271
+ hazırlanır ve onaylanır.
272
+
273
+ ## Geliştirme
274
+
275
+ ```bash
276
+ pip install -e ".[dev]"
277
+ pytest --cov=tr_dop
278
+ ruff check . && ruff format --check src tests && mypy src
279
+ ```
280
+
281
+ Testler ağ kullanmaz. Her sayısal örnek test dosyalarında elle hesaplanarak gösterilmiştir
282
+ (`tests/test_dop.py`, `tests/test_engine.py`).
283
+
284
+ ## Lisans
285
+
286
+ MIT © 2026 Yusuf Eminoğlu. Ayrıntılar için [LICENSE](LICENSE) dosyasına, atıf için
287
+ [CITATION.cff](CITATION.cff) dosyasına bakın.
288
+
289
+ ## Akademik atıf (Academic citation)
290
+
291
+ ```bibtex
292
+ @software{eminoglu_tr_dop,
293
+ author = {Eminoğlu, Yusuf},
294
+ title = {tr-dop},
295
+ year = {2026},
296
+ version = {0.1.0},
297
+ url = {https://github.com/YusufEminoglu/tr_dop_sdk}
298
+ }
299
+ ```
300
+
301
+ `CITATION.cff` dosyasına da bakın.
tr_dop-0.1.0/README.md ADDED
@@ -0,0 +1,263 @@
1
+ # tr-dop
2
+
3
+ [![PyPI version](https://img.shields.io/pypi/v/tr-dop.svg)](https://pypi.org/project/tr-dop/)
4
+ [![Python versions](https://img.shields.io/pypi/pyversions/tr-dop.svg)](https://pypi.org/project/tr-dop/)
5
+ [![CI](https://github.com/YusufEminoglu/tr_dop_sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/YusufEminoglu/tr_dop_sdk/actions/workflows/ci.yml)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
7
+
8
+ **English summary.** `tr-dop` computes Turkish land readjustment ("arazi ve arsa düzenlemesi",
9
+ Article 18 of Zoning Law No. 3194) on the standard library alone: the DOP contribution ratio
10
+ under the 45 % cap, per-parcel DOP and KOP deductions that credit earlier surrenders, and the
11
+ distribution and shareholding of the new parcels with exact share checks. Inputs are JSON or
12
+ CSV; outputs are Markdown, CSV and JSON reports and a Turkish command-line tool, with every rule
13
+ traced to the article of the law or regulation it implements.
14
+
15
+ ---
16
+
17
+ **3194 sayılı İmar Kanunu 18. madde uygulaması (arazi ve arsa düzenlemesi) için hesap
18
+ kütüphanesi ve komut satırı aracı.**
19
+
20
+ `tr-dop` şunları yapar:
21
+
22
+ - Plan kullanımlarından **düzenleme ortaklık payı oranını (DOPO)** hesaplar. Hangi kullanımın
23
+ DOP'tan karşılanacağı veri dosyasından okunur ve değiştirilebilir. Üst sınır %45'tir, oran
24
+ virgülden sonra yedi basamakla hesaplanır.
25
+ - **Parsel bazında DOP kesintisini** hesaplar. Önceki terk ve kesintiler (bedelsiz terk, ifraz
26
+ ve tevhit yoluyla terk, evvelce alınmış DOP), bağışlar, kamulaştırmalar, kapanan yollar ve
27
+ kamu tahsisli parseller dikkate alınır. Mevcut yapılar nedeniyle alınamayan DOP bedele
28
+ dönüştürülür.
29
+ - %45'i aşan kamu alanlarını önce bedelsiz kamu alanlarından karşılar, kalanını **KOP
30
+ (kamu ortaklık payı) hissesi** olarak parsellere paylaştırır.
31
+ - Yeni imar parsellerine **dağıtım ve hisselendirme** yapar. Önce eski parselin yeri ve
32
+ tercihleri esas alınır, gerekmedikçe tahsis bölünmez. Payda parsel alanıdır ve paylar tam
33
+ sayıdır.
34
+ - **Kontrolleri** yapar: hisse toplamları, %45 sınırı, parsel bazında toplam kesinti, DOP'un
35
+ karşılanması, saha ve dağıtım dengesi, pay ve payda eşitliği, asgari parsel büyüklüğü.
36
+ - **Tapu ve kadastro alanı farkını** yanılma sınırına göre değerlendirir (Yön. m.31).
37
+ - Sonuçları **Markdown, CSV ve JSON** olarak yazar. Türkçe bir CLI (`tr-dop`) sunar.
38
+
39
+ Bağımlılığı yoktur, yalnızca Python standart kütüphanesini kullanır. Python 3.9 ve üzeri ile
40
+ çalışır.
41
+
42
+ ```bash
43
+ pip install tr-dop
44
+ ```
45
+
46
+ ## Hızlı başlangıç (komut satırı)
47
+
48
+ ```bash
49
+ # JSON proje dosyasıyla: rapor ekrana
50
+ tr-dop hesapla examples/proje.json
51
+
52
+ # CSV girdileriyle: Markdown rapor + CSV cetvelleri + JSON
53
+ tr-dop hesapla --parseller examples/parseller.csv --plan examples/plan.csv \
54
+ --yeni-parseller examples/yeni_parseller.csv --kapanan-yol 450 \
55
+ -o rapor.md --csv-klasoru cikti --ayrac ";" --json sonuc.json
56
+
57
+ # Plan kullanımları kataloğu: hangi kullanım DOP'tan karşılanır, hangi bentte
58
+ tr-dop kullanimlar
59
+
60
+ # Tapu alanı ile hesap alanı karşılaştırması (Yön. m.31)
61
+ tr-dop yanilma --tapu 1800 --hesap 1752 --olcek 1000
62
+ ```
63
+
64
+ `hesapla` seçenekleri: `--yontem dengeli|dogrudan`, `--kop orantili|cakisma|yok`,
65
+ `--ust-sinir 0.45`, `--kapanan-yol`, `--hazine-taskin`, `--kamu-alani`, `--asgari-parsel`,
66
+ `--tahsisler` (elle tahsis CSV'si), `--katalog` (kullanım kataloğu değişiklikleri).
67
+ Çıkış kodu 0 başarı, 1 bir kontrol hata verdi, 2 girdi hatası anlamına gelir.
68
+
69
+ Örnek rapordan bir bölüm (`examples/proje.json`):
70
+
71
+ ```text
72
+ - Düzenleme ortaklık payı oranı (DOPO): **0.3551697** (%35,51697)
73
+ - Düşülen alanlar: kapanan yollar 450,00 m², bağış 0,00 m², kamu tahsisli parseller 600,00 m²
74
+ | 120/3 | 1500.00 | 1500.00 | tapu | 250.00 | 371.55 | 0.3551714 | 0.00 | 1128.45 | Önceki terk ... |
75
+ ```
76
+
77
+ ## Hızlı başlangıç (Python)
78
+
79
+ ```python
80
+ from tr_dop import NewParcel, Owner, Parcel, PlanUse, Scheme, Settings, run, to_markdown
81
+
82
+ scheme = Scheme(
83
+ parcels=[
84
+ Parcel("101/1", 2000, [Owner("Ali", "1/2"), Owner("Ayşe", "1/2")]),
85
+ Parcel("101/2", 3000, [Owner("Mehmet", "1")]),
86
+ # ifraz sırasında 300 m² yola bedelsiz terk etmiş parsel (3194 m.18/9)
87
+ Parcel("101/3", 1500, [Owner("Zeynep", "1")], prior_deduction=300),
88
+ ],
89
+ plan_uses=[PlanUse("yol", 1800), PlanUse("park", 700), PlanUse("konut", 4300)],
90
+ new_parcels=[NewParcel("5/1", 1100), NewParcel("5/2", 1100),
91
+ NewParcel("5/3", 1050), NewParcel("5/4", 1050)],
92
+ settings=Settings(closed_roads_area=300, min_parcel_area=400),
93
+ )
94
+ result = run(scheme)
95
+ result.dop.ratio # 0.3676471 ( = 2500 / 6800 )
96
+ result.dop.parcel("101/3").dop_area # 361.76 ( = 0.3676471 x 1800 - 300 )
97
+ result.ok # tüm "hata" düzeyindeki kontroller geçti mi
98
+ print(to_markdown(result))
99
+ ```
100
+
101
+ ## Girdi biçimleri
102
+
103
+ **JSON proje dosyası** (`examples/proje.json`): `parcels`, `plan_uses`, `new_parcels`,
104
+ isteğe bağlı `allocations` ve `settings`.
105
+
106
+ **CSV** dosyalarında ayraç `,` ya da `;` olabilir (otomatik algılanır). Ondalık virgül
107
+ (`1.234,56`) kabul edilir. Sütun adları Türkçe ya da İngilizce yazılabilir.
108
+
109
+ | Dosya | Sütunlar |
110
+ |---|---|
111
+ | `parseller.csv` (malik başına bir satır) | `parsel`, `malik`, `hisse` (`1/3`, `0,25`), `tapu_alani`; isteğe bağlı `hesap_alani`, `olcek`, `yerlesik`, `yanilma_siniri`, `giren_alan`, `onceki_kesinti`, `onceki_kesinti_turu` (`terk`/`dop`), `deger_artisi`, `bagis`, `kamulastirilan`, `durum` (`ozel`/`kamu_tahsisli`), `azami_kesinti`, `cakisma_alani`, `tercih` (`"1/1;1/2"`) |
112
+ | `plan.csv` | `kullanim`, `alan`, isteğe bağlı `dop` (evet/hayır, katalogdaki değeri geçersiz kılar) |
113
+ | `yeni_parseller.csv` | `yeni_parsel`, `alan`; isteğe bağlı `ada`, `kullanim`, `asgari_alan`, `kop` |
114
+ | `tahsisler.csv` | `parsel`, `yeni_parsel`, `alan` (verilirse otomatik dağıtım yerine kullanılır) |
115
+
116
+ Parsel düzeyindeki sütunlar aynı parselin ilk satırında yazılır, sonraki satırlarda boş
117
+ bırakılabilir.
118
+
119
+ ## API özeti
120
+
121
+ | Nesne / fonksiyon | Görev |
122
+ |---|---|
123
+ | `Owner`, `Parcel`, `PlanUse`, `NewParcel`, `Allocation`, `Settings`, `Scheme` | Girdi modeli. Hisseler `Fraction` olarak tutulur, toplamları tam olarak 1 olmalıdır. |
124
+ | `run(scheme, catalog=None)` → `ReadjustmentResult` | DOP, KOP, dağıtım ve kontroller (`.dop`, `.distribution`, `.checks`, `.ok`) |
125
+ | `compute_dop(parcels, plan_uses, settings, catalog)` → `DopResult` | Oran (`ratio`, `applied_ratio`), parsel satırları (`ParcelDop`), kullanım karşılama tablosu (`UseCoverage`) |
126
+ | `distribute(entitlements, owners, new_parcels, ...)` → `Distribution` | Yerleştirme ve hisse satırları (`ShareRow`: pay/payda) |
127
+ | `conversion_payments(dop_result, toplam_bedel)` | Bedele dönüştürülen DOP bedelinin fazladan kesinti yapılan parsellere dağıtımı |
128
+ | `basis_area`, `area_tolerance` | Tapu ve hesap alanı seçimi, yanılma sınırı |
129
+ | `default_catalog()`, `load_catalog(overrides)` | Plan kullanımları kataloğu |
130
+ | `load_scheme`, `read_*_csv`, `scheme_from_mapping` | Girdi okuma |
131
+ | `to_markdown`, `write_outputs`, `dop_table`, `distribution_table`, `coverage_table`, `result_to_mapping` | Çıktılar |
132
+
133
+ ## Yöntem ve dayanak
134
+
135
+ Metinler mevzuat.gov.tr'deki güncel İmar Kanunu metni ve Resmî Gazete'de yayımlanan yönetmelik
136
+ ve değişiklikleriyle Kasım 2026'da karşılaştırılmıştır.
137
+
138
+ - **3194 sayılı İmar Kanunu m.18** (7181/2019, 7333/2021 ve 7534/2024 sayılı Kanunlarla
139
+ değişik):
140
+ - fıkra 2: DOP, düzenlemeden önceki yüzölçümünün **%45**'ini geçemez. 5006 sayılı Kanun
141
+ sınırı %35'ten %40'a, 7181 sayılı Kanun %45'e çıkarmıştır.
142
+ - fıkra 3: DOP'un oluşabileceği kullanımların kapalı listesini verir. Taşkın kontrol tesisi
143
+ önce Hazine taşınmazlarından, sonra kalan oran kadar DOP'tan karşılanır. Kapanan imar ve
144
+ kadastro yolları toplam DOP'tan düşülür.
145
+ - fıkra 6: Kamulaştırılan kısım düşüldükten sonra kalan sahadan DOP alınır.
146
+ - fıkra 7: DOP kural olarak bir kez alınır. Yapılaşma koşulu ve nüfus artarsa, önceki terk
147
+ ve kesintiler dikkate alınarak ilk uygulamadaki oran %45'e kadar tamamlanabilir.
148
+ - fıkra 8: 2981 m.10 uygulamalarında tamamlayıcı kesinti yapılabilir; toplam %45'i geçemez.
149
+ - fıkra 9: İfraz ve tevhitle terk edilen alanın oranı, DOPO'ya tamamlayan fark kadar DOP alınır.
150
+ - fıkra 11-12: Yapılar nedeniyle alınamayan DOP bedele dönüştürülür ve fazladan kesinti
151
+ yapılan parsel sahiplerine ödenir.
152
+ - fıkra 13: Tahsis önce düzenlemeye alınan taşınmazın bulunduğu yerden yapılır.
153
+ - fıkra 15: Asgari parsel büyüklüğünün altında parsel oluşturulamaz.
154
+ - **Arazi ve Arsa Düzenlemeleri Hakkında Yönetmelik** (RG 22/2/2020-31047; değişiklikler
155
+ RG 11/9/2025-33014 ve 13/12/2025-33106):
156
+ - m.4/1-d: DOPO = toplam DOP / düzenlemeye giren parsellerin toplam yüzölçümü; yedi basamak.
157
+ - m.14/2: Öncelik sırası (a ... i). m.14/3: taşkın kontrol tesisi. m.14/4-5: kapanan yollar
158
+ ve fazlası. m.14/6-7: önceki terkler (toplam %45). m.14/8: bağış ve tahsis.
159
+ - m.15: %45'i aşan kamu alanları. Önce tescil harici, belediye, kamu ve Hazine alanları
160
+ kullanılır, sonra trampa, imar hakkı aktarımı ya da kamulaştırma. m.15/4'e göre aşan alan,
161
+ çakışan parsellere kamulaştırma şerhiyle tahsis edilir.
162
+ - m.16: DOP alınmayan durumlar (yapılar ve bedele dönüştürme formülü m.16/3, kamu tahsisli
163
+ parseller m.16/4, evvelce DOP alınmış parseller m.16/5).
164
+ - m.17: Dağıtım esasları ve KOP hisselendirmesi (m.17/3). m.31: yüzölçümü kontrolü.
165
+ m.32: hisse hesabı (payda = parsel alanı).
166
+
167
+ **Oran yöntemleri.** Varsayılan `dengeli` yöntem, önceki terkleri olan parsellerin de
168
+ katkısını eşitleyecek oranı çözer: `Σ max(0, r·A⁰ᵢ − Tᵢ) = gereken DOP` (`A⁰` terk öncesi
169
+ alan, `T` önceki terk). Böylece her parselin toplam katkısı özgün alanının aynı `r` oranı olur
170
+ ve kamu alanları tam karşılanır. `dogrudan` yöntem Yönetmelik m.4/1-d tanımını harfiyen
171
+ uygular: `r = gereken DOP / Σ parsel alanı`. Önceki terkler tamamlayan fark olarak düşüldüğü
172
+ için ortaya çıkan açık raporda gösterilir.
173
+
174
+ **KOP.** 2019-2020 düzenlemesiyle eski "kamu ortaklık payı" kesintisi kaldırılmıştır; ancak
175
+ %45'i aşan kamu alanlarının karşılanması gerekir. `tr-dop` aşan alanı hesaplar. Bu alanı önce
176
+ `excess_cover_area` (bedelsiz kamu alanı) ile karşılar, kalanını iki yöntemden biriyle
177
+ paylaştırır. `orantili` yöntemde pay, DOP sonrası tahsis miktarıyla orantılıdır (eski KOP
178
+ uygulaması, Yön. m.17/3). `cakisma` yöntemde pay, parselin aşan kamu alanına düşen kısmıyla
179
+ orantılıdır (Yön. m.15/4). KOP hisseleri malikin mülkiyetinde kalır ve kamulaştırma şerhiyle
180
+ `kop_target` parsellere hisselendirilir.
181
+
182
+ **Dağıtım.** Eski parseller verilen sırayla işlenir. Her parsel önce tercih ettiği yeni
183
+ parsellere, sonra tahsisi bütün olarak alabilen ilk parsele yerleştirilir. Kalan parseller en
184
+ geniş boş parselleri doldurur, son kalan kısım tahsisi tam alabilen en dar parsele konur. Toplam
185
+ tahsis yeni parsel alanından yuvarlama kadar farklıysa en büyük kalan yöntemiyle dengelenir; bu
186
+ dengeleme raporda gösterilir. Hesaplar 0,01 m² tamsayı biriminde yapılır, bu yüzden payların
187
+ toplamı paydaya tam olarak eşittir.
188
+
189
+ ## Kontroller
190
+
191
+ | Kod | Düzey | İçerik |
192
+ |---|---|---|
193
+ | `hisse_toplami` | hata | Her eski parselde malik hisselerinin toplamı 1 |
194
+ | `dop_ust_siniri` | hata | DOPO ≤ üst sınır |
195
+ | `dop_asimi` | uyarı | Kamu alanları %45'i aşıyor (KOP/kamulaştırma gerekli) |
196
+ | `parsel_toplam_kesinti` | uyarı | Önceki kesintiler dahil parsel bazında %45 |
197
+ | `dop_karsilama` | uyarı | Toplanan DOP = gereken DOP |
198
+ | `saha_dengesi` | uyarı | Plan kullanımları toplamı = parseller + yollar + kamu alanları |
199
+ | `dagitim_dengesi` | hata | Tahsis toplamı = yeni parsel alanı toplamı (bağıl tolerans) |
200
+ | `dagitilamayan` | hata | Bütün tahsisler dağıtıldı |
201
+ | `pay_payda` | hata | Her yeni parselde Σ pay = payda |
202
+ | `asgari_parsel` | hata | Yeni parsel ≥ asgari büyüklük |
203
+ | `kop_parseli`, `yeni_parsel_plan`, `kapanan_yol_fazlasi`, `bedele_donusturme` | uyarı/bilgi | Ek bilgiler |
204
+
205
+ ## Sınırlamalar ve doğrulanamayan noktalar
206
+
207
+ - **Yanılma sınırı:** Formüller Yönetmelik m.31/3'ün 2020 metnindendir. 2025 değişikliğiyle
208
+ fıkra, *Tapu Planlarında Yanılma Sınırının Belirlenmesi Hakkında Yönetmelik*'e (RG
209
+ 27/9/2022-31966) atıf yapar hale gelmiştir ve o yönetmeliğin formülleri bu pakette
210
+ doğrulanmamıştır. Yerleşik alan formülündeki karekökün `M·F` çarpımının tamamını kapsadığı
211
+ varsayılmıştır, çünkü RG dizgisi bu konuda belirsizdir. Güncel değer için `tolerance`
212
+ alanını kullanın.
213
+ - **Kullanım kataloğu:** Kanun listesindeki kullanımların DOP kapsamı doğrulanmıştır. Bazı
214
+ satırlar `verified: false` olarak işaretlidir: mezarlık (yalnızca Yönetmelik m.14/2-i'de
215
+ geçer), kent meydanı, kent parkı ve idari tesis (2025'te öncelik listesinden çıkarılmış ya
216
+ da yalnızca tanımda geçer). Öncelik bentlerinden a (ilk kısmı), b, d, e, g ve ı'nın 2025
217
+ metni ikincil kaynaktan doğrulanmıştır. Öteki bentler 2020 metninden alınmıştır.
218
+ `tr-dop kullanimlar` komutu (*) ile işaretli satırları gösterir. `--katalog` ile
219
+ değiştirebilirsiniz.
220
+ - **Hesap yorumları:** `dengeli` yöntem, önceki terklerin "toplam parsel alanı" olarak terk
221
+ öncesi alana (`A⁰ = alan + terk`) oranlandığı yorumuna dayanır. Değer artışı nedeniyle ilave
222
+ DOP alınan parsellerde (3194 m.18/7) ilave kesinti `min(r, %45)·A⁰ − önceki kesinti` olarak
223
+ hesaplanır.
224
+ - **KOP:** `orantili` paylaştırma uygulamadaki eski KOP yöntemine dayanır; güncel mevzuatta
225
+ bu adla bir kesinti yoktur. `cakisma` yöntemi m.15/4'e daha yakındır, ancak çakışma
226
+ alanlarını kullanıcının girmesi gerekir.
227
+ - **Geometri:** Geometri yoktur. Plan kullanım alanları, yeni parsel alanları ve tercihler
228
+ kullanıcıdan alınır. Değer esaslı (eşdeğer) dağıtım, kat mülkiyeti esaslı hisselendirme
229
+ (m.19) ve imar hakkı aktarımı (m.38/A-C) kapsam dışıdır.
230
+ - **Asgari parsel büyüklükleri** plan ve Planlı Alanlar İmar Yönetmeliği'ne göre değişir.
231
+ Varsayılan bir değer yoktur, `min_area` ya da `--asgari-parsel` ile verilmelidir.
232
+ - Sonuçlar ön hesap niteliğindedir. Parselasyon planı yetkili idare tarafından mevzuata göre
233
+ hazırlanır ve onaylanır.
234
+
235
+ ## Geliştirme
236
+
237
+ ```bash
238
+ pip install -e ".[dev]"
239
+ pytest --cov=tr_dop
240
+ ruff check . && ruff format --check src tests && mypy src
241
+ ```
242
+
243
+ Testler ağ kullanmaz. Her sayısal örnek test dosyalarında elle hesaplanarak gösterilmiştir
244
+ (`tests/test_dop.py`, `tests/test_engine.py`).
245
+
246
+ ## Lisans
247
+
248
+ MIT © 2026 Yusuf Eminoğlu. Ayrıntılar için [LICENSE](LICENSE) dosyasına, atıf için
249
+ [CITATION.cff](CITATION.cff) dosyasına bakın.
250
+
251
+ ## Akademik atıf (Academic citation)
252
+
253
+ ```bibtex
254
+ @software{eminoglu_tr_dop,
255
+ author = {Eminoğlu, Yusuf},
256
+ title = {tr-dop},
257
+ year = {2026},
258
+ version = {0.1.0},
259
+ url = {https://github.com/YusufEminoglu/tr_dop_sdk}
260
+ }
261
+ ```
262
+
263
+ `CITATION.cff` dosyasına da bakın.
@@ -0,0 +1,10 @@
1
+ parsel;malik;hisse;tapu_alani;hesap_alani;olcek;onceki_kesinti;onceki_kesinti_turu;giren_alan;durum;tercih
2
+ 120/1;Ahmet Yılmaz;1/2;2400;2409,5;1000;;;;;"1/1;1/2"
3
+ 120/1;Fatma Yılmaz;1/4;;;;;;;;
4
+ 120/1;Ali Yılmaz;1/4;;;;;;;;
5
+ 120/2;Mehmet Kaya;1;1800;1752;1000;;;;;
6
+ 120/3;Zeynep Demir;2/3;1500;;;250;terk;;;
7
+ 120/3;Can Demir;1/3;;;;;;;;
8
+ 120/4;Hazine;1;900;;;;;;;
9
+ 121/7;Elif Şahin;1;1200;;;;;800;;1/6
10
+ 121/8;Hazine (MEB tahsisli);1;600;;;;;;kamu_tahsisli;