tr-dop
English summary. tr-dop computes Turkish land readjustment ("arazi ve arsa düzenlemesi",
Article 18 of Zoning Law No. 3194) on the standard library alone: the DOP contribution ratio
under the 45 % cap, per-parcel DOP and KOP deductions that credit earlier surrenders, and the
distribution and shareholding of the new parcels with exact share checks. Inputs are JSON or
CSV; outputs are Markdown, CSV and JSON reports and a Turkish command-line tool, with every rule
traced to the article of the law or regulation it implements.
3194 sayılı İmar Kanunu 18. madde uygulaması (arazi ve arsa düzenlemesi) için hesap kütüphanesi ve komut satırı aracı.
tr-dop şunları yapar:
- Plan kullanımlarından düzenleme ortaklık payı oranını (DOPO) hesaplar. Hangi kullanımın DOP'tan karşılanacağı veri dosyasından okunur ve değiştirilebilir. Üst sınır %45'tir, oran virgülden sonra yedi basamakla hesaplanır.
- Parsel bazında DOP kesintisini hesaplar. Önceki terk ve kesintiler (bedelsiz terk, ifraz ve tevhit yoluyla terk, evvelce alınmış DOP), bağışlar, kamulaştırmalar, kapanan yollar ve kamu tahsisli parseller dikkate alınır. Mevcut yapılar nedeniyle alınamayan DOP bedele dönüştürülür.
- %45'i aşan kamu alanlarını önce bedelsiz kamu alanlarından karşılar, kalanını KOP (kamu ortaklık payı) hissesi olarak parsellere paylaştırır.
- Yeni imar parsellerine dağıtım ve hisselendirme yapar. Önce eski parselin yeri ve tercihleri esas alınır, gerekmedikçe tahsis bölünmez. Payda parsel alanıdır ve paylar tam sayıdır.
- Kontrolleri yapar: hisse toplamları, %45 sınırı, parsel bazında toplam kesinti, DOP'un karşılanması, saha ve dağıtım dengesi, pay ve payda eşitliği, asgari parsel büyüklüğü.
- Tapu ve kadastro alanı farkını yanılma sınırına göre değerlendirir (Yön. m.31).
- Sonuçları Markdown, CSV ve JSON olarak yazar. Türkçe bir CLI (
tr-dop) sunar.
Bağımlılığı yoktur, yalnızca Python standart kütüphanesini kullanır. Python 3.9 ve üzeri ile çalışır.
pip install tr-dop
Hızlı başlangıç (komut satırı)
# JSON proje dosyasıyla: rapor ekrana
tr-dop hesapla examples/proje.json
# CSV girdileriyle: Markdown rapor + CSV cetvelleri + JSON
tr-dop hesapla --parseller examples/parseller.csv --plan examples/plan.csv \
--yeni-parseller examples/yeni_parseller.csv --kapanan-yol 450 \
-o rapor.md --csv-klasoru cikti --ayrac ";" --json sonuc.json
# Plan kullanımları kataloğu: hangi kullanım DOP'tan karşılanır, hangi bentte
tr-dop kullanimlar
# Tapu alanı ile hesap alanı karşılaştırması (Yön. m.31)
tr-dop yanilma --tapu 1800 --hesap 1752 --olcek 1000
hesapla seçenekleri: --yontem dengeli|dogrudan, --kop orantili|cakisma|yok,
--ust-sinir 0.45, --kapanan-yol, --hazine-taskin, --kamu-alani, --asgari-parsel,
--tahsisler (elle tahsis CSV'si), --katalog (kullanım kataloğu değişiklikleri).
Çıkış kodu 0 başarı, 1 bir kontrol hata verdi, 2 girdi hatası anlamına gelir.
Örnek rapordan bir bölüm (examples/proje.json):
- Düzenleme ortaklık payı oranı (DOPO): **0.3551697** (%35,51697)
- Düşülen alanlar: kapanan yollar 450,00 m², bağış 0,00 m², kamu tahsisli parseller 600,00 m²
| 120/3 | 1500.00 | 1500.00 | tapu | 250.00 | 371.55 | 0.3551714 | 0.00 | 1128.45 | Önceki terk ... |
Hızlı başlangıç (Python)
from tr_dop import NewParcel, Owner, Parcel, PlanUse, Scheme, Settings, run, to_markdown
scheme = Scheme(
parcels=[
Parcel("101/1", 2000, [Owner("Ali", "1/2"), Owner("Ayşe", "1/2")]),
Parcel("101/2", 3000, [Owner("Mehmet", "1")]),
# ifraz sırasında 300 m² yola bedelsiz terk etmiş parsel (3194 m.18/9)
Parcel("101/3", 1500, [Owner("Zeynep", "1")], prior_deduction=300),
],
plan_uses=[PlanUse("yol", 1800), PlanUse("park", 700), PlanUse("konut", 4300)],
new_parcels=[NewParcel("5/1", 1100), NewParcel("5/2", 1100),
NewParcel("5/3", 1050), NewParcel("5/4", 1050)],
settings=Settings(closed_roads_area=300, min_parcel_area=400),
)
result = run(scheme)
result.dop.ratio # 0.3676471 ( = 2500 / 6800 )
result.dop.parcel("101/3").dop_area # 361.76 ( = 0.3676471 x 1800 - 300 )
result.ok # tüm "hata" düzeyindeki kontroller geçti mi
print(to_markdown(result))
Girdi biçimleri
JSON proje dosyası (examples/proje.json): parcels, plan_uses, new_parcels,
isteğe bağlı allocations ve settings.
CSV dosyalarında ayraç , ya da ; olabilir (otomatik algılanır). Ondalık virgül
(1.234,56) kabul edilir. Sütun adları Türkçe ya da İngilizce yazılabilir.
| Dosya | Sütunlar |
|---|---|
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") |
plan.csv |
kullanim, alan, isteğe bağlı dop (evet/hayır, katalogdaki değeri geçersiz kılar) |
yeni_parseller.csv |
yeni_parsel, alan; isteğe bağlı ada, kullanim, asgari_alan, kop |
tahsisler.csv |
parsel, yeni_parsel, alan (verilirse otomatik dağıtım yerine kullanılır) |
Parsel düzeyindeki sütunlar aynı parselin ilk satırında yazılır, sonraki satırlarda boş bırakılabilir.
API özeti
| Nesne / fonksiyon | Görev |
|---|---|
Owner, Parcel, PlanUse, NewParcel, Allocation, Settings, Scheme |
Girdi modeli. Hisseler Fraction olarak tutulur, toplamları tam olarak 1 olmalıdır. |
run(scheme, catalog=None) → ReadjustmentResult |
DOP, KOP, dağıtım ve kontroller (.dop, .distribution, .checks, .ok) |
compute_dop(parcels, plan_uses, settings, catalog) → DopResult |
Oran (ratio, applied_ratio), parsel satırları (ParcelDop), kullanım karşılama tablosu (UseCoverage) |
distribute(entitlements, owners, new_parcels, ...) → Distribution |
Yerleştirme ve hisse satırları (ShareRow: pay/payda) |
conversion_payments(dop_result, toplam_bedel) |
Bedele dönüştürülen DOP bedelinin fazladan kesinti yapılan parsellere dağıtımı |
basis_area, area_tolerance |
Tapu ve hesap alanı seçimi, yanılma sınırı |
default_catalog(), load_catalog(overrides) |
Plan kullanımları kataloğu |
load_scheme, read_*_csv, scheme_from_mapping |
Girdi okuma |
to_markdown, write_outputs, dop_table, distribution_table, coverage_table, result_to_mapping |
Çıktılar |
Yöntem ve dayanak
Metinler mevzuat.gov.tr'deki güncel İmar Kanunu metni ve Resmî Gazete'de yayımlanan yönetmelik ve değişiklikleriyle Kasım 2026'da karşılaştırılmıştır.
- 3194 sayılı İmar Kanunu m.18 (7181/2019, 7333/2021 ve 7534/2024 sayılı Kanunlarla
değişik):
- fıkra 2: DOP, düzenlemeden önceki yüzölçümünün %45'ini geçemez. 5006 sayılı Kanun sınırı %35'ten %40'a, 7181 sayılı Kanun %45'e çıkarmıştır.
- fıkra 3: DOP'un oluşabileceği kullanımların kapalı listesini verir. Taşkın kontrol tesisi önce Hazine taşınmazlarından, sonra kalan oran kadar DOP'tan karşılanır. Kapanan imar ve kadastro yolları toplam DOP'tan düşülür.
- fıkra 6: Kamulaştırılan kısım düşüldükten sonra kalan sahadan DOP alınır.
- fıkra 7: DOP kural olarak bir kez alınır. Yapılaşma koşulu ve nüfus artarsa, önceki terk ve kesintiler dikkate alınarak ilk uygulamadaki oran %45'e kadar tamamlanabilir.
- fıkra 8: 2981 m.10 uygulamalarında tamamlayıcı kesinti yapılabilir; toplam %45'i geçemez.
- fıkra 9: İfraz ve tevhitle terk edilen alanın oranı, DOPO'ya tamamlayan fark kadar DOP alınır.
- fıkra 11-12: Yapılar nedeniyle alınamayan DOP bedele dönüştürülür ve fazladan kesinti yapılan parsel sahiplerine ödenir.
- fıkra 13: Tahsis önce düzenlemeye alınan taşınmazın bulunduğu yerden yapılır.
- fıkra 15: Asgari parsel büyüklüğünün altında parsel oluşturulamaz.
- Arazi ve Arsa Düzenlemeleri Hakkında Yönetmelik (RG 22/2/2020-31047; değişiklikler
RG 11/9/2025-33014 ve 13/12/2025-33106):
- m.4/1-d: DOPO = toplam DOP / düzenlemeye giren parsellerin toplam yüzölçümü; yedi basamak.
- m.14/2: Öncelik sırası (a ... i). m.14/3: taşkın kontrol tesisi. m.14/4-5: kapanan yollar ve fazlası. m.14/6-7: önceki terkler (toplam %45). m.14/8: bağış ve tahsis.
- m.15: %45'i aşan kamu alanları. Önce tescil harici, belediye, kamu ve Hazine alanları kullanılır, sonra trampa, imar hakkı aktarımı ya da kamulaştırma. m.15/4'e göre aşan alan, çakışan parsellere kamulaştırma şerhiyle tahsis edilir.
- m.16: DOP alınmayan durumlar (yapılar ve bedele dönüştürme formülü m.16/3, kamu tahsisli parseller m.16/4, evvelce DOP alınmış parseller m.16/5).
- m.17: Dağıtım esasları ve KOP hisselendirmesi (m.17/3). m.31: yüzölçümü kontrolü. m.32: hisse hesabı (payda = parsel alanı).
Oran yöntemleri. Varsayılan dengeli yöntem, önceki terkleri olan parsellerin de
katkısını eşitleyecek oranı çözer: Σ max(0, r·A⁰ᵢ − Tᵢ) = gereken DOP (A⁰ terk öncesi
alan, T önceki terk). Böylece her parselin toplam katkısı özgün alanının aynı r oranı olur
ve kamu alanları tam karşılanır. dogrudan yöntem Yönetmelik m.4/1-d tanımını harfiyen
uygular: r = gereken DOP / Σ parsel alanı. Önceki terkler tamamlayan fark olarak düşüldüğü
için ortaya çıkan açık raporda gösterilir.
KOP. 2019-2020 düzenlemesiyle eski "kamu ortaklık payı" kesintisi kaldırılmıştır; ancak
%45'i aşan kamu alanlarının karşılanması gerekir. tr-dop aşan alanı hesaplar. Bu alanı önce
excess_cover_area (bedelsiz kamu alanı) ile karşılar, kalanını iki yöntemden biriyle
paylaştırır. orantili yöntemde pay, DOP sonrası tahsis miktarıyla orantılıdır (eski KOP
uygulaması, Yön. m.17/3). cakisma yöntemde pay, parselin aşan kamu alanına düşen kısmıyla
orantılıdır (Yön. m.15/4). KOP hisseleri malikin mülkiyetinde kalır ve kamulaştırma şerhiyle
kop_target parsellere hisselendirilir.
Dağıtım. Eski parseller verilen sırayla işlenir. Her parsel önce tercih ettiği yeni parsellere, sonra tahsisi bütün olarak alabilen ilk parsele yerleştirilir. Kalan parseller en geniş boş parselleri doldurur, son kalan kısım tahsisi tam alabilen en dar parsele konur. Toplam tahsis yeni parsel alanından yuvarlama kadar farklıysa en büyük kalan yöntemiyle dengelenir; bu dengeleme raporda gösterilir. Hesaplar 0,01 m² tamsayı biriminde yapılır, bu yüzden payların toplamı paydaya tam olarak eşittir.
Kontroller
| Kod | Düzey | İçerik |
|---|---|---|
hisse_toplami |
hata | Her eski parselde malik hisselerinin toplamı 1 |
dop_ust_siniri |
hata | DOPO ≤ üst sınır |
dop_asimi |
uyarı | Kamu alanları %45'i aşıyor (KOP/kamulaştırma gerekli) |
parsel_toplam_kesinti |
uyarı | Önceki kesintiler dahil parsel bazında %45 |
dop_karsilama |
uyarı | Toplanan DOP = gereken DOP |
saha_dengesi |
uyarı | Plan kullanımları toplamı = parseller + yollar + kamu alanları |
dagitim_dengesi |
hata | Tahsis toplamı = yeni parsel alanı toplamı (bağıl tolerans) |
dagitilamayan |
hata | Bütün tahsisler dağıtıldı |
pay_payda |
hata | Her yeni parselde Σ pay = payda |
asgari_parsel |
hata | Yeni parsel ≥ asgari büyüklük |
kop_parseli, yeni_parsel_plan, kapanan_yol_fazlasi, bedele_donusturme |
uyarı/bilgi | Ek bilgiler |
Sınırlamalar ve doğrulanamayan noktalar
- Yanılma sınırı: Formüller Yönetmelik m.31/3'ün 2020 metnindendir. 2025 değişikliğiyle
fıkra, Tapu Planlarında Yanılma Sınırının Belirlenmesi Hakkında Yönetmelik'e (RG
27/9/2022-31966) atıf yapar hale gelmiştir ve o yönetmeliğin formülleri bu pakette
doğrulanmamıştır. Yerleşik alan formülündeki karekökün
M·Fçarpımının tamamını kapsadığı varsayılmıştır, çünkü RG dizgisi bu konuda belirsizdir. Güncel değer içintolerancealanını kullanın. - Kullanım kataloğu: Kanun listesindeki kullanımların DOP kapsamı doğrulanmıştır. Bazı
satırlar
verified: falseolarak işaretlidir: mezarlık (yalnızca Yönetmelik m.14/2-i'de geçer), kent meydanı, kent parkı ve idari tesis (2025'te öncelik listesinden çıkarılmış ya da yalnızca tanımda geçer). Öncelik bentlerinden a (ilk kısmı), b, d, e, g ve ı'nın 2025 metni ikincil kaynaktan doğrulanmıştır. Öteki bentler 2020 metninden alınmıştır.tr-dop kullanimlarkomutu (*) ile işaretli satırları gösterir.--katalogile değiştirebilirsiniz. - Hesap yorumları:
dengeliyöntem, önceki terklerin "toplam parsel alanı" olarak terk öncesi alana (A⁰ = alan + terk) oranlandığı yorumuna dayanır. Değer artışı nedeniyle ilave DOP alınan parsellerde (3194 m.18/7) ilave kesintimin(r, %45)·A⁰ − önceki kesintiolarak hesaplanır. - KOP:
orantilipaylaştırma uygulamadaki eski KOP yöntemine dayanır; güncel mevzuatta bu adla bir kesinti yoktur.cakismayöntemi m.15/4'e daha yakındır, ancak çakışma alanlarını kullanıcının girmesi gerekir. - Geometri: Geometri yoktur. Plan kullanım alanları, yeni parsel alanları ve tercihler kullanıcıdan alınır. Değer esaslı (eşdeğer) dağıtım, kat mülkiyeti esaslı hisselendirme (m.19) ve imar hakkı aktarımı (m.38/A-C) kapsam dışıdır.
- Asgari parsel büyüklükleri plan ve Planlı Alanlar İmar Yönetmeliği'ne göre değişir.
Varsayılan bir değer yoktur,
min_areaya da--asgari-parselile verilmelidir. - Sonuçlar ön hesap niteliğindedir. Parselasyon planı yetkili idare tarafından mevzuata göre hazırlanır ve onaylanır.
Geliştirme
pip install -e ".[dev]"
pytest --cov=tr_dop
ruff check . && ruff format --check src tests && mypy src
Testler ağ kullanmaz. Her sayısal örnek test dosyalarında elle hesaplanarak gösterilmiştir
(tests/test_dop.py, tests/test_engine.py).
Lisans
MIT © 2026 Yusuf Eminoğlu. Ayrıntılar için LICENSE dosyasına, atıf için CITATION.cff dosyasına bakın.
Akademik atıf (Academic citation)
@software{eminoglu_tr_dop,
author = {Eminoğlu, Yusuf},
title = {tr-dop},
year = {2026},
version = {0.1.1},
url = {https://github.com/YusufEminoglu/tr_dop_sdk}
}
CITATION.cff dosyasına da bakın.
Metadata
Release files for tr-dop 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tr_dop-0.1.1.tar.gz | 60.7 kB | With provenance | Details for tr_dop-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| tr_dop-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for tr_dop-0.1.1-py3-none-any.whl |
Total release size: 107.0 kB
Release files / tr_dop-0.1.1.tar.gz
| Download URL | tr_dop-0.1.1.tar.gz |
|---|---|
| Size | 60.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
828d4a25fc8c14ff52cca68355b9df7d153b8e3914b3ec3105c0c5d293602b39
|
|
BLAKE2b-256 checksum How to use checksums |
5200157db6779431be462d886c8a25e24e58b4e149c2552b477623e32ab071f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logRelease files / tr_dop-0.1.1-py3-none-any.whl
| Download URL | tr_dop-0.1.1-py3-none-any.whl |
|---|---|
| Size | 46.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f0d7634b2ab9a3dab15da10b5cec9d1a2950b4e7560aeda39da9bf0a8f6c318a
|
|
BLAKE2b-256 checksum How to use checksums |
7a2fe95279de689c932cdcd29f2e010147949f3d350b7ab469697c5f9aa73f32
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logSecurity for tr-dop 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for tr_dop-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.