Ana içeriğe geç

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 :::

Ceza Listesi — canlı ekran

Sayfa Sekmeleri (canlı ekrandan)

SekmeAçıklama
CEZALARTüm ceza kayıtları
CEZA EKLEYeni ceza kaydı formu

Liste Sütunları (canlı ekrandan, ilk 15)

SütunKod karşılığı
Araçarac_id
Ceza Tarihiceza_tarihi
Tebliğ Tarihi / Ulaştığı Tarihteblig_tarihi
Ceza Şekliceza_sekli
Ceza Seri Noceza_seri_no
Ceza Tutarıceza_tutari
Ödenen Tutarodenecek_tutar (etiket: "Ödenen Tutar")
Ceza Puaniceza_puani
Kim Ödedikim_odeyecek (Şirket / Müşteri)
Durumodendi (4 değerli enum)
Ödeme Tarihiodeme_tarihi
Güncel Ana Bölgehesaplanmış (Arac.bolge)
Bölgebolge (FK → bolgeler.adi)
Alt Bölgealt_bolge
Ceza Bölgesiceza_bolge

Ödeme Durumu Enum'u

Ceza::$durumlar:

DeğerEtiket
0Ödenmedi
1Ödendi
2Gecikmeli Ödendi
3İndirimli Ödendi

odeme_tarihi, odendi != 0 ise zorunludur (required_if:odendi,1).


Kim Ödeyecek Enum'u

Ceza::kimOdeyecekListe():

DeğerAçıklama
ŞirketCezayı kurum öder; sürücüye yansıtma yapılabilir
MüşteriCezayı 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ı

Yeni Ceza Kaydı formu

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)

AlanValidasyonAçıklama
arac_idrequired, exists:araclarCezanın bağlı olduğu araç
ceza_madde_id[]array, exists:ceza_maddeleriBir veya daha fazla KTK madde-bend
ceza_tarihidateCezanın yazıldığı tarih
ceza_saatidate_format:H:iCeza saati (24 saat)
teblig_tarihidateİlk tebliğ tarihi
teblig_tarihi_2 / _3 / _4dateEk tebliğ tarihleri
cezasiz_son_odeme_tarihidateİndirimli ödemenin son tarihi
ceza_seri_nosometimesCeza seri numarası
ihlal_nosometimesİhlal numarası
ceza_tutari(otomatik, maddelerden hesaplanır)Brüt tutar
odenecek_tutar(otomatik)Ödenecek/ödenen tutar
ceza_puaninumericEhliyet puan kesintisi (toplam)
kim_odeyecekstringŞirket / Müşteri
odendinumeric0/1/2/3 (durum enum)
odeme_tarihirequired_if:odendi,1; dateÖdeme tarihi
yansitilmanumeric0/1 — sürücüye yansıtıldı mı
yansitilma_tarihirequired_if:yansitilma,1; dateYansıtma tarihi
surucu_idnumericFK → personeller.id (sürücü)
sorumlu_user_idnumeric, exists:usersSorumlu kullanıcı (mail bildirimi tetikler)
ruhsat_sahibi_firma_idnumeric, exists:firmalarRuhsat sahibi (özel kural)
bolge / alt_bolgeexists:bolgeler.adiAracın bölgesi
ceza_bolge / ceza_alt_bolgeexists:bolgeler.adiCezanın kesildiği bölge
giris_istasyon / cikis_istasyonsometimesHGS/OGS giriş-çıkış (geçiş ücreti cezaları için)
gecis_ucretidecimal(19,2)Geçiş ücreti
cikis_tarihidatetimeÇıkış zamanı
arac_siniftinyintAraç sınıfı (HGS)
duzenleyen_birim / il_ilce / kesildigi_yersometimesDüzenleyen kurum bilgileri
tutanak_seri_no / resmi_yazi_no / tebligat_notextTutanak ve yazı numaraları
harcama_tipi_idFK → harcama_tipleri.idVarsayılan: 3
aciklamatextAçı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

URLEylem
GET /ceza/ekle/ceza-yillariMevcut ceza yıllarını listele
POST /ceza/ekle/ceza-maddeleriYıla göre maddeleri getir
POST /ceza/ekle/ceza-maddeleri/tutar-puanSeç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

AlanAçıklama
yansitilma0 / 1
yansitilma_tarihiYansı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):

EnumPivot typeListe Sütunu
CEZA_BELGESIceza_belgesiceza_belgesi_durum
ODEME_BELGESIodeme_belgesiodeme_belgesi_durum
IHBAR_YAZISIihbar_yazisiihbar_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:

OlayAçı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)

AlanTipİsim
arac_idselectizePlakaAraç
ceza_tarihidateCeza Tarihi
teblig_tarihidateTebliğ Tarihi / Ulaştığı Tarih
ceza_sekliselectizeCeza Şekli (sistemden distinct)
ceza_seri_notextCeza Seri No
ceza_tutarirangeCeza Tutarı
odenecek_tutarrangeÖdenen Tutar
ceza_puanitextCeza Puanı
kim_odeyecekselectizeKim Ödedi (Şirket/Müşteri)
odendiselectizeDurum (4 değerli)
odeme_tarihidateÖdeme Tarihi
arac_ana_bolgetextGüncel Ana Bölge
bolge / alt_bolgeselectize/textBölge / Alt Bölge
ceza_bolge / ceza_alt_bolgetextCeza Bölgesi / Alt
ruhsat_sahibitextRuhsat Sahibi
yansitilmaselectizeYansıtılma (Evet/Hayır)
yansitilma_tarihidateYansıtılma Tarihi
arac_marka / arac_tipi / arac_cinsitextAraç bilgileri
odeme_belgesi_durumselectizeÖdeme Belgesi (Var/Yok)
ceza_belgesi_durumselectizeCeza Belgesi (Var/Yok)
ihbar_yazisi_durumselectizeİhbar Yazısı (Var/Yok)
ceza_kodutextCeza Kodu (maddelerden)
ceza_maddetextCeza Maddesi
sorumlu_adi / surucu_adi / surucu_idtextSorumlu/Sürücü
ceza_saatitextCeza Saati
mail_gonderildiselectizeMail 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

HTTPURLRoute Adı
GET/cezaarac.ceza.tumu
GET/{id}/cezaarac.ceza.liste
GET/{id}/ceza/{ceza_id}arac.ceza.detay
PUT/{id}/ceza/{ceza_id}arac.ceza.update
GET/{id}/ceza/{ceza_id}/silarac.ceza.sil
GET/{id}/ceza/eklearac.ceza.ekle
POST/{id}/ceza/eklearac.ceza.create
GET/{id}/ceza/sorgulaarac.ceza.sorgula (EGM/online sorgu)
GET/ceza/liste/modalarac.ceza.liste.modal
POST/ceza/dosyalar/mailarac.ceza.dosyalar.mail
GET/ceza/importarac.ceza.import
POST/ceza/importarac.ceza.importUpload
POST/ceza/uploadarac.ceza.upload

İlişkili Modüller

Modelİlişki
AracbelongsTo — cezanın bağlı olduğu araç
Personel (sürücü)belongsTo üzerinden surucu_id
User (sorumlu)belongsTo üzerinden sorumlu_user_id
CezaMaddebelongsToMany (ceza_ceza_maddeleri_pivot)
Bolgeİki ayrı bölge: bolge (araç) ve ceza_bolge (kesim)
HarcamaTipibelongsTo — finansal kategori
CloudFilemorphToMany — 3 farklı dosya tipi
FaturaFaturaModuluTrait üzerinden, ceza fatura kalemi olabilir
HareketAudit log
Maliyet Raporu"Ceza Maliyetleri" tablosu üzerinden gösterilir
Dashboard"En Çok Ceza Alan Sürücüler" widget'ı bu modülden beslenir

Otomasyonlar

MekanizmaTetiklenmeYan etki
Boot hook savingHer create/updatekim_odeyecek != "Şirket" ise yansitilma=0, yansitilma_tarihi=null
Boot hook savedsorumlu_user_id değiştiYeni sorumlu arac.ceza.sorumlu_personel.mail.gonder yetkili ise DefaultMarkdownMail queued
Boot hook created/updated/deletedLifecycleHareket audit log
HistoryObserver/SnapshotObserverLifecyclesnapshots tablosuna alan-bazlı diff
Arac/CezaImportJobExcel importToplu ceza kaydı
CezaGetirEgmJobUI: "EGM Sorgula"EGM API'den ceza çek
CezaGetirKgmJobUI: "KGM Sorgula"KGM API'den ceza çek
bfy:vakifbank-hgs-harcama-importdailyAt 00:05HGS geçiş cezalarını otomatik import (Vakıfbank entegrasyonu varsa)
bfy:hgs-data-importdailyTETRA HGS'den ceza/geçiş kayıtları
Widget\CezaRaporControllerDashboard widget"En Çok Ceza Alan Sürücüler" verisini sağlar

Detay: bkz. Sistem & İş Akışları