Skip to main content

tr-dop

PyPI version Python versions CI License: MIT

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çin tolerance alanını kullanın.
  • Kullanım kataloğu: Kanun listesindeki kullanımların DOP kapsamı doğrulanmıştır. Bazı satırlar verified: false olarak 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 kullanimlar komutu (*) ile işaretli satırları gösterir. --katalog ile değiştirebilirsiniz.
  • Hesap yorumları: dengeli yö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 kesinti min(r, %45)·A⁰ − önceki kesinti olarak hesaplanır.
  • KOP: orantili paylaştırma uygulamadaki eski KOP yöntemine dayanır; güncel mevzuatta bu adla bir kesinti yoktur. cakisma yö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_area ya da --asgari-parsel ile 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.0},
  url     = {https://github.com/YusufEminoglu/tr_dop_sdk}
}

CITATION.cff dosyasına da bakın.

Metadata

Release files for tr-dop 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tr-dop 0.1.0
File Size Uploaded Provenance Actions
tr_dop-0.1.0.tar.gz 60.7 kB With provenance Details for tr_dop-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for tr-dop 0.1.0
File Interpreter ABI Platform Actions
tr_dop-0.1.0-py3-none-any.whl Python 3 none any Details for tr_dop-0.1.0-py3-none-any.whl

Total release size: 106.9 kB

Release files / tr_dop-0.1.0.tar.gz

Download URL tr_dop-0.1.0.tar.gz
Size 60.7 kB
Tags Source
SHA-256 checksum
How to use checksums
90493e5ac3303365e768c4927111c23323662f68596c0426f472445ecc9736eb
BLAKE2b-256 checksum
How to use checksums
e3e18e9bfd7e3430af967929d92299e87d1a3900f43793cef15c9018a588ffef
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 log

Release files / tr_dop-0.1.0-py3-none-any.whl

Download URL tr_dop-0.1.0-py3-none-any.whl
Size 46.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1f54872938eb2909c91102984adfdc0137555a4166acd082923b18ff98f74de7
BLAKE2b-256 checksum
How to use checksums
3b1711b0c3c5a4fa4f6681ece795b476fac999511ab7167aaa097ce425c8ce56
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 log

Security for tr-dop 0.1.0

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.

Select from 2 files

Attestation for tr_dop-0.1.0.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 log

A 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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page