Cezalar
Cezalar modülü, araçlara kesilen trafik cezalarının kayıt altına alındığı, ödeme/yansıtma süreçlerinin yürütüldüğü modüldür. Kayıtlar cezalar tablosunda tutulur ve her birine bir veya birden fazla Ceza Maddesi (KTK madde-bend) bağlanabilir.
:::info Erişim
- Sol menü: Risk → Cezalar
- URL (tüm cezalar):
https://demo.bulutfilo.com/arac/ceza - URL (araç bazlı):
https://demo.bulutfilo.com/arac/{id}/ceza - Yetki anahtarı:
arac.ceza.*(örn.arac.ceza.ekle) - Persona: P1, P2, P5 :::

Sayfa Sekmeleri (canlı ekrandan)
| Sekme | Açıklama |
|---|---|
| CEZALAR | Tüm ceza kayıtları |
| CEZA EKLE | Yeni ceza kaydı formu |
Liste Sütunları (canlı ekrandan, ilk 15)
| Sütun | Kod karşılığı |
|---|---|
| Araç | arac_id |
| Ceza Tarihi | ceza_tarihi |
| Tebliğ Tarihi / Ulaştığı Tarih | teblig_tarihi |
| Ceza Şekli | ceza_sekli |
| Ceza Seri No | ceza_seri_no |
| Ceza Tutarı | ceza_tutari |
| Ödenen Tutar | odenecek_tutar (etiket: "Ödenen Tutar") |
| Ceza Puani | ceza_puani |
| Kim Ödedi | kim_odeyecek (Şirket / Müşteri) |
| Durum | odendi (4 değerli enum) |
| Ödeme Tarihi | odeme_tarihi |
| Güncel Ana Bölge | hesaplanmış (Arac.bolge) |
| Bölge | bolge (FK → bolgeler.adi) |
| Alt Bölge | alt_bolge |
| Ceza Bölgesi | ceza_bolge |
Ödeme Durumu Enum'u
Ceza::$durumlar:
| Değer | Etiket |
|---|---|
| 0 | Ödenmedi |
| 1 | Ödendi |
| 2 | Gecikmeli Ödendi |
| 3 | İndirimli Ödendi |
odeme_tarihi, odendi != 0 ise zorunludur (required_if:odendi,1).
Kim Ödeyecek Enum'u
Ceza::kimOdeyecekListe():
| Değer | Açıklama |
|---|---|
| Şirket | Cezayı kurum öder; sürücüye yansıtma yapılabilir |
| Müşteri | Cezayı müşteri öder; yansıtma alanları sıfırlanır |
:::info Otomatik Sıfırlama (saving hook)
kim_odeyecek != "Şirket" olduğunda sistem otomatik olarak yansitilma = 0 ve yansitilma_tarihi = null yapar. Sürücüye yansıtma yalnızca Şirket ödediğinde anlamlıdır.
:::
Yeni Ceza Kaydı

Canlı Form Alanları (DOM'dan, 29 alan)
Plaka, Ceza Tarihi, Ceza Saati, Ceza Şekli, Ceza Seri No, Tebliğ Tarihi / Şirkete Ulaştığı Tarih, Cezasız Son Ödeme Tarihi, Düzenleyen Birim, İl/İlçe, Kesildiği Yer, İhlal No, Giriş İstasyonu, Çıkış İstasyon, Toplam Ceza Tutarı, Durum, Ödemeyi Yapan, Ödenen Tutar, Toplam Ceza Puanı, Sürücü, Sorumlu Personel, Araç Ruhsat Sahibi, Ceza Yılı (select), Ceza Maddesi, Araç Bölgesi, Araç Alt Bölgesi, Ceza Bölgesi, Ceza Alt Bölgesi, Açıklama (textarea).
Validasyon (Ceza::$rules['ekle'] + StoreCezaRequest)
| Alan | Validasyon | Açıklama |
|---|---|---|
arac_id | required, exists:araclar | Cezanın bağlı olduğu araç |
ceza_madde_id[] | array, exists:ceza_maddeleri | Bir veya daha fazla KTK madde-bend |
ceza_tarihi | date | Cezanın yazıldığı tarih |
ceza_saati | date_format:H:i | Ceza saati (24 saat) |
teblig_tarihi | date | İlk tebliğ tarihi |
teblig_tarihi_2 / _3 / _4 | date | Ek tebliğ tarihleri |
cezasiz_son_odeme_tarihi | date | İndirimli ödemenin son tarihi |
ceza_seri_no | sometimes | Ceza seri numarası |
ihlal_no | sometimes | İhlal numarası |
ceza_tutari | (otomatik, maddelerden hesaplanır) | Brüt tutar |
odenecek_tutar | (otomatik) | Ödenecek/ödenen tutar |
ceza_puani | numeric | Ehliyet puan kesintisi (toplam) |
kim_odeyecek | string | Şirket / Müşteri |
odendi | numeric | 0/1/2/3 (durum enum) |
odeme_tarihi | required_if:odendi,1; date | Ödeme tarihi |
yansitilma | numeric | 0/1 — sürücüye yansıtıldı mı |
yansitilma_tarihi | required_if:yansitilma,1; date | Yansıtma tarihi |
surucu_id | numeric | FK → personeller.id (sürücü) |
sorumlu_user_id | numeric, exists:users | Sorumlu kullanıcı (mail bildirimi tetikler) |
ruhsat_sahibi_firma_id | numeric, exists:firmalar | Ruhsat sahibi (özel kural) |
bolge / alt_bolge | exists:bolgeler.adi | Aracın bölgesi |
ceza_bolge / ceza_alt_bolge | exists:bolgeler.adi | Cezanın kesildiği bölge |
giris_istasyon / cikis_istasyon | sometimes | HGS/OGS giriş-çıkış (geçiş ücreti cezaları için) |
gecis_ucreti | decimal(19,2) | Geçiş ücreti |
cikis_tarihi | datetime | Çıkış zamanı |
arac_sinif | tinyint | Araç sınıfı (HGS) |
duzenleyen_birim / il_ilce / kesildigi_yer | sometimes | Düzenleyen kurum bilgileri |
tutanak_seri_no / resmi_yazi_no / tebligat_no | text | Tutanak ve yazı numaraları |
harcama_tipi_id | FK → harcama_tipleri.id | Varsayılan: 3 |
aciklama | text | Açıklama |
ValidateCezaRuhsatSahibi after-validation rule, ruhsat sahibi firma kuralının cezada da geçerli olduğunu doğrular.
Ceza Maddeleri (KTK)
Ceza tutarı ve puanı, seçilen ceza maddelerinden otomatik hesaplanır:
ceza_tutari = ∑(seçilen ceza_maddeleri.ceza_tutari)
ceza_puani = ∑(seçilen ceza_maddeleri.ceza_puani)
(Ceza::toplamCezaTutariVeCezaPuani($cezaMaddeleri))
Madde Listesi Endpoint'leri
| URL | Eylem |
|---|---|
GET /ceza/ekle/ceza-yillari | Mevcut ceza yıllarını listele |
POST /ceza/ekle/ceza-maddeleri | Yıla göre maddeleri getir |
POST /ceza/ekle/ceza-maddeleri/tutar-puan | Seçili maddeler için tutar+puan toplamı |
cezaMaddeleriListe() varsayılan yıl olarak 2022 kullanır; başka yıl için parametre geçilebilir.
Yansıtma Süreci
| Alan | Açıklama |
|---|---|
yansitilma | 0 / 1 |
yansitilma_tarihi | Yansıtma kaydının düzenlenme tarihi |
Ayrı CezaYansitma modeli (ceza_yansitmalar tablosu) ve CezaYansitmaController ile sürücüye fiili yansıtma kayıtları yönetilir. Route prefix: /ceza_yansitma.
CezaYansitmaCezalar (ceza_yansitmalar_cezalar pivot) bir yansıtma kaydının birden fazla cezayı paketlemesine izin verir.
Belge Yönetimi
Ceza::dosyalar morph relation ile cloud_files tablosuna bağlanır. Üç ayrı dosya tipi vardır (App\Enums\Ceza\CezaDosya):
| Enum | Pivot type | Liste Sütunu |
|---|---|---|
CEZA_BELGESI | ceza_belgesi | ceza_belgesi_durum |
ODEME_BELGESI | odeme_belgesi | odeme_belgesi_durum |
IHBAR_YAZISI | ihbar_yazisi | ihbar_yazisi_durum |
Listede her belge tipi için Var / Yok badge'i görünür; "Var" tıklanabilir indirme bağlantısıdır.
Sorumlu Personele Mail
saved hook'u: sorumlu_user_id değiştiğinde ve yeni sorumlu kullanıcı arac.ceza.sorumlu_personel.mail.gonder yetkisine sahipse otomatik olarak DefaultMarkdownMail ile "X Plakalı Aracın Ceza Kaydına Sorumlu Personel Olarak Atandınız" maili gönderilir (kuyruğa atılır).
mail_gonderildi flag'i toplu mail bildirimlerinin durumunu izler. Liste üzerinden POST /ceza/dosyalar/mail (arac.ceza.dosyalar.mail) ile dosyalı toplu mail gönderilebilir.
Audit (Hareket Geçmişi)
Ceza::boot() her create/update/delete olayında Hareket kaydı düşer:
| Olay | Açıklama |
|---|---|
| created | "Yeni ceza kaydı oluşturuldu." |
| updated | "Ceza kaydı güncellendi." |
| deleted | "Ceza kaydı silindi - {id}" |
Linkler doğrudan arac.ceza.detay route'una çıkar.
Liste Sayfası — Tüm Sütunlar ($aranabilir)
| Alan | Tip | İsim |
|---|---|---|
arac_id | selectizePlaka | Araç |
ceza_tarihi | date | Ceza Tarihi |
teblig_tarihi | date | Tebliğ Tarihi / Ulaştığı Tarih |
ceza_sekli | selectize | Ceza Şekli (sistemden distinct) |
ceza_seri_no | text | Ceza Seri No |
ceza_tutari | range | Ceza Tutarı |
odenecek_tutar | range | Ödenen Tutar |
ceza_puani | text | Ceza Puanı |
kim_odeyecek | selectize | Kim Ödedi (Şirket/Müşteri) |
odendi | selectize | Durum (4 değerli) |
odeme_tarihi | date | Ödeme Tarihi |
arac_ana_bolge | text | Güncel Ana Bölge |
bolge / alt_bolge | selectize/text | Bölge / Alt Bölge |
ceza_bolge / ceza_alt_bolge | text | Ceza Bölgesi / Alt |
ruhsat_sahibi | text | Ruhsat Sahibi |
yansitilma | selectize | Yansıtılma (Evet/Hayır) |
yansitilma_tarihi | date | Yansıtılma Tarihi |
arac_marka / arac_tipi / arac_cinsi | text | Araç bilgileri |
odeme_belgesi_durum | selectize | Ödeme Belgesi (Var/Yok) |
ceza_belgesi_durum | selectize | Ceza Belgesi (Var/Yok) |
ihbar_yazisi_durum | selectize | İhbar Yazısı (Var/Yok) |
ceza_kodu | text | Ceza Kodu (maddelerden) |
ceza_madde | text | Ceza Maddesi |
sorumlu_adi / surucu_adi / surucu_id | text | Sorumlu/Sürücü |
ceza_saati | text | Ceza Saati |
mail_gonderildi | selectize | Mail Gönderildi (Evet/Hayır) |
Fatih (kurum-spesifik) build'lerde
resmi_yazi_no"UHM No" etiketiyle ek sütun olarak görünür (isAppName(['fatih'])koşulu).
Routes — Tam Liste
| HTTP | URL | Route Adı |
|---|---|---|
| GET | /ceza | arac.ceza.tumu |
| GET | /{id}/ceza | arac.ceza.liste |
| GET | /{id}/ceza/{ceza_id} | arac.ceza.detay |
| PUT | /{id}/ceza/{ceza_id} | arac.ceza.update |
| GET | /{id}/ceza/{ceza_id}/sil | arac.ceza.sil |
| GET | /{id}/ceza/ekle | arac.ceza.ekle |
| POST | /{id}/ceza/ekle | arac.ceza.create |
| GET | /{id}/ceza/sorgula | arac.ceza.sorgula (EGM/online sorgu) |
| GET | /ceza/liste/modal | arac.ceza.liste.modal |
| POST | /ceza/dosyalar/mail | arac.ceza.dosyalar.mail |
| GET | /ceza/import | arac.ceza.import |
| POST | /ceza/import | arac.ceza.importUpload |
| POST | /ceza/upload | arac.ceza.upload |
İlişkili Modüller
| Model | İlişki |
|---|---|
Arac | belongsTo — cezanın bağlı olduğu araç |
Personel (sürücü) | belongsTo üzerinden surucu_id |
User (sorumlu) | belongsTo üzerinden sorumlu_user_id |
CezaMadde | belongsToMany (ceza_ceza_maddeleri_pivot) |
Bolge | İki ayrı bölge: bolge (araç) ve ceza_bolge (kesim) |
HarcamaTipi | belongsTo — finansal kategori |
CloudFile | morphToMany — 3 farklı dosya tipi |
Fatura | FaturaModuluTrait üzerinden, ceza fatura kalemi olabilir |
Hareket | Audit log |
Maliyet Raporu | "Ceza Maliyetleri" tablosu üzerinden gösterilir |
Dashboard | "En Çok Ceza Alan Sürücüler" widget'ı bu modülden beslenir |
Otomasyonlar
| Mekanizma | Tetiklenme | Yan etki |
|---|---|---|
Boot hook saving | Her create/update | kim_odeyecek != "Şirket" ise yansitilma=0, yansitilma_tarihi=null |
Boot hook saved | sorumlu_user_id değişti | Yeni sorumlu arac.ceza.sorumlu_personel.mail.gonder yetkili ise DefaultMarkdownMail queued |
Boot hook created/updated/deleted | Lifecycle | Hareket audit log |
| HistoryObserver/SnapshotObserver | Lifecycle | snapshots tablosuna alan-bazlı diff |
Arac/CezaImportJob | Excel import | Toplu ceza kaydı |
CezaGetirEgmJob | UI: "EGM Sorgula" | EGM API'den ceza çek |
CezaGetirKgmJob | UI: "KGM Sorgula" | KGM API'den ceza çek |
bfy:vakifbank-hgs-harcama-import | dailyAt 00:05 | HGS geçiş cezalarını otomatik import (Vakıfbank entegrasyonu varsa) |
bfy:hgs-data-import | daily | TETRA HGS'den ceza/geçiş kayıtları |
Widget\CezaRaporController | Dashboard widget | "En Çok Ceza Alan Sürücüler" verisini sağlar |
Detay: bkz. Sistem & İş Akışları