aytugyayman.com.tr

Lojistik ERP · web uygulaması

Kurum içi · canlıda

BEST Freight ERP

BEST Freight ERP, uluslararası karayolu taşımacılığı yapan bir şirket için geliştirdiğim web tabanlı bir ERP sistemi. Ofis ekibi ithalat ve ihracat seferlerini, gümrük beyannamelerini, araçları, şoförleri ve muhasebeyi bu sistemden yürütüyor. Arayüz Türkçe ve sistem her gün kullanılıyor.

Kurum içi bir yazılım olduğu için kaynak kodunu, ekran görüntülerini ve şirkete ait bilgileri paylaşmıyorum. Bu sayfada yalnızca ne yaptığını ve nasıl kurulduğunu anlatıyorum.

Modüller

  • Operasyon

    İthalat ve ihracat seferleri (pozisyonlar), yükler, mühür numaraları, CMR ve diğer belgelerin PDF olarak üretilmesi, taranan evrakların arşivi ve ladametre (yükleme metresi) hesabı.

  • Gümrük

    SGS TransitNet üzerinden NCTS transit beyannameleri, İngiltere için GVMS/GMR ve CDS ihracat beyannameleri, AB'ye girişte ICS/ENS. Beyannamelerin durumu arka planda düzenli olarak sorgulanıyor.

  • Filo

    GPS araç takibi, takograf verilerinin senkronizasyonu, sefer başına km ve yakıt takibi, yakıt kartı hareketleri, ECMT ve UBAK geçiş belgeleri.

  • Şoförler

    Şoför kayıtları, vize ve belge süreleri, şoförlerin telefondan belge yükleyebildiği sayfalar ve şoförlere mesaj gönderme.

  • Finans

    Muhasebe, masraf formları, sefer kârlılığı ve muhasebe yazılımıyla e-fatura entegrasyonu.

  • Ofis

    IMAP üzerinden e-posta takibi ve yazışmaların referans kodlarıyla seferlere bağlanması, ekip içi sohbet ve bildirimler, insan kaynakları ve sigorta kayıtları.

  • Belge okuma ve asistan

    Taranan belgelerden OCR ve yapay zekâ ile bilgi çıkarma. Türkçe sorulan sorulara veritabanından cevap veren bir asistan.

Nasıl kurulu

Sunucu Node.js ve Express 5 ile yazıldı. Katmanlar route, controller ve model (yalnızca SQL) olarak ayrılıyor, dış sistemlerle konuşan kod ayrı servislerde duruyor. Arayüz React 19, TypeScript ve Vite ile yazılmış tek sayfalık bir uygulama, Express onu statik dosya olarak sunuyor.

Veriler birkaç SQLite veritabanında (better-sqlite3) tutuluyor. Ana veriler, gümrük ve mesajlaşma tabloları, denetim kayıtları, GPS ve oturumlar ayrı dosyalarda. Takograf verileri ve canlı GPS için PostgreSQL kullanılıyor.

Bildirimler ve sohbet Socket.IO ile gerçek zamanlı çalışıyor. Gümrük durum sorguları, GPS yenileme, takograf senkronizasyonu ve yedekler gibi işler node-cron ile arka planda zamanlanıyor. Yedekler hem yerelde hem Google Drive'da tutuluyor.

PDF'ler pdf-lib ve pdfmake ile, Excel dosyaları ExcelJS ile üretiliyor. SGS'ye SOAP ile, HMRC'ye OAuth kullanan REST API'leriyle bağlanılıyor.

Zor kısımlar

  • EJS'den React'e geçiş

    Arayüz başta sunucuda üretilen EJS sayfalarıydı. Sistem kullanılmaya devam ederken sayfaları tek tek React ve TypeScript'e taşıdım. Asıl iş API'de değil, eski sayfaların küçük davranışlarını ve görünümlerini birebir yakalamaktaydı.

  • Her gümrük sisteminin kendi dili var

    NCTS için SGS'nin SOAP servisi ve XML şemaları, İngiltere için HMRC'nin OAuth kullanan REST API'leri, ICS/ENS için ayrı bir akış. Her birinin hata kodları ve durum döngüsü farklı. Bu yüzden her entegrasyon ayrı bir servis olarak, kendi arka plan sorgusuyla çalışıyor.

  • CMR'leri yüklerle eşleştirmek

    Teslim edilen tek bir CMR birden fazla yükü kapatabiliyor. Ağırlıklar Türkçe biçimde yazılıyor: “20.840” kilogram, basit bir ayrıştırmayla 20,84'e dönüşüp yanlış satırla eşleşiyor. Eşleştirme mantığı hem arayüzde hem sunucuda var. İkisinin birebir aynı kalması bir testle kontrol ediliyor.

Güvenlik

  • Oturum tabanlı giriş ve güvenilir cihaz desteğiyle iki adımlı doğrulama (TOTP).
  • CSRF koruması ve giriş denemelerine sınır.
  • Rol ve sayfa bazlı yetkiler. İzinler her istekte veritabanından yeniden okunuyor.
  • Ayrı bir veritabanında tutulan denetim kayıtları.
  • Düzenli yerel ve Google Drive yedekleri.

Durum

Sistem canlıda ve her gün kullanılıyor. Geliştirme küçük ve sık değişikliklerle sürüyor.