Makdos WMS: barkodlu depo ve dağıtım
Üretimden depoya, araçta satıştan gün sonu mutabakatına kadar her adımı barkodla izleyen, çevrimdışı çalışabilen depo ve dağıtım sistemi.
Makdos WMS, Makdos için geliştirdiğim barkodlu bir sipariş, üretim, depo ve dağıtım takip sistemidir. WMS, depo yönetim sistemi anlamına gelir. Sistem üretimden çıkan koliyi ve paleti barkodla kayda alır, depoda yerini, son tüketim tarihini ve kalite durumunu izler, siparişi toplatıp araca yükletir, araçta yapılan satışı, teslimi ve tahsilatı kaydeder ve akşam gün sonu mutabakatını yapar. Çok firmalı bir ürün olarak tasarladım ve ilk müşterisi canlıda kullanıyor.
Amaç
Gıda üreten ve ürünlerini kendi araçlarıyla dağıtan firmalarda üretim, depo ve satış ekipleri çoğu zaman birbirinden habersiz çalışır. Hangi paletin hangi rafta durduğu, hangi lotun önce çıkması gerektiği ya da araçtaki şoförün gün içinde ne kadar tahsilat yaptığı akşam kâğıtlar toplanana kadar tam olarak bilinmez. Son tüketim tarihi yakın ürünlerin zamanında çıkmaması da doğrudan fire ve maliyet anlamına gelir.
Bu sistemi, ürünün üretim hattından çıktığı andan müşteriye teslim edildiği ana kadar her adımın barkodla kayda geçtiği ve bu bilginin anında ofise ulaştığı bir yapı kurmak için geliştirdim. Önemli bir hedefim de sahada internet kesildiğinde işin durmamasıydı.
Nasıl çalışır
Sistem üç arayüzden oluşur. Ofis çalışanları web panelini mevcut bilgisayar, telefon ya da TV tarayıcısından kullanır. Sahadaki üretim, kalite, depo, sevkiyat ve şoför-satıcı çalışanları Android el terminallerindeki uygulamayı kullanır. Makdos ekibi ise müşteri firmaları, faturaları ve destek taleplerini ayrı bir platform yönetim panelinden yönetir.
Terminal uygulamasını çevrimdışı öncelikli olarak tasarladım. Her işlem önce cihaza yazılır, internet varsa hemen sunucuya gönderilir. İnternet yoksa çalışan işine devam eder ve ekranda yalnızca bekleyen işlem sayısı görünür. Her işlem benzersiz bir kimlik taşıdığı için aynı işlem sunucuya iki kez ulaşsa bile bir kez sayılır.
Sunucu tarafında olay tabanlı bir kayıt modeli kullandım. Terminalden gelen her işlem değiştirilemeyen bir olay olarak saklanır ve stok, palet, sipariş gibi tablolar bu olaylardan türetilir. Bu yaklaşım, geçmişte ne olduğunu her zaman izlenebilir kılar ve bir hesaplama hatası düzeltildiğinde tabloların olaylardan yeniden üretilmesine izin verir.
Etiket basımında sunucu yazıcıya ulaşmaya çalışmaz. Fabrikadaki ortak terminal etiket komutlarını yerel ağdaki endüstriyel etiket yazıcısına kendisi gönderir. Palet seri numarası aralıkları cihaza önceden ayrıldığı için internet kesikken de palet etiketi basılabilir. Araçlardaki terminaller ise fişleri Bluetooth ile bağlı fiş yazıcısından basar.
Öne çıkan özellikler
- Koli ve palet etiketleri, palet seri numarası, lot ve son tüketim tarihi takibi sistemin çekirdeğini oluşturur.
- Son tüketim tarihi en yakın paletin önce çıkması anlamına gelen FEFO kuralı sunucuda uygulanır; terminal hangi paletin önce çıkacağını gösterir, panel ise son otuz gündeki FEFO uyumunu ve bu kurala uyulmayan toplamaları kim, ne zaman, kaç gün farkla yaptı diye ölçer.
- Satın alma, ön sevk bildirimi, mal kabul, yerleştirme, transfer, ikmal, döngüsel sayım, görev kuyruğu, toplama dalgaları ve sevk irsaliyesi gibi temel depo süreçlerinin hepsi bulunur.
- Dağıtım modülü fiyat listelerini, araç stoğunu, tahsilat ve makbuzu, cari hesabı, çek ve senedi, boş kasa takibini, fotoğraflı teslim kanıtını, sefer ve rota planını ve araçtan depoya boşaltmayı kapsar.
- Gün sonu mutabakatı kör yapılır; yani şoför teslim ettiği tutarı sistemin beklediği tutarı görmeden girer.
- Soğuk zincir için sıcaklık kaydı ve eşik uyarısı, geri çağırma tatbikatı, HACCP raporu ve temel performans göstergeleri panosu vardır.
- Panelde sürükle bırak ile çalışan bir etiket, fiş ve irsaliye tasarımcısı bulunur ve tasarımlar yayımlanmadan önce denetlenip deneme baskısıyla sınanabilir.
- Eski kayıtlar Excel, CSV, JSON ya da XML dosyalarından dört adımlı bir sihirbazla içe aktarılabilir ve sihirbaz yaygın muhasebe programlarının sütun adlarını tanır.
- Her listede veriler dışa aktarılabilir, dış sistemler için API anahtarıyla çalışan ve OpenAPI 3.1 ile belgelenmiş bir REST API ve olay bildirimleri için webhook desteği vardır.
- Logo ERP ve CRM bağlayıcıları bulunur; Logo bağlantısı için müşterinin kendi ağında çalışan küçük bir aracı program yazdım.
- Terminal menüsü, çalışanın rolü ile terminalin kullanım yerinin kesişimine göre oluşur; örneğin şoför-satıcı yalnızca kendi aracına bağlı terminale girebilir.
Güvenlik
Ofis rolleri terminale giremez, terminal yalnızca saha rollerine açıktır. Terminali bir kez kurulum yetkilisi kurar, sonrasında sahadaki çalışan kendi personel kodu ve PIN'iyle giriş yapar. Parola ve PIN bilgileri Fernet ile şifrelenir ve sabit zamanlı karşılaştırmayla doğrulanır. Firma verileri veritabanında satır düzeyinde birbirinden ayrılır ve firma bilgisi alan adından değil, giriş yapan kimlikten çözülür. Dışarıya giden webhook isteklerini özel ve yerel ağ adreslerine ulaşamayacak biçimde sınırladım. Web paneli arama motorlarına kapalıdır.
Teknik altyapı
- Sunucuyu Go ile tek bir statik program olarak yazdım; yönlendirmede chi, veritabanı erişiminde pgx, migration'larda goose kullanırım.
- Veritabanı PostgreSQL'dir; olay tablosuna yalnızca ekleme yapılır, diğer tablolar bu olaylardan türetilir.
- Önbellek, giriş hız sınırı ve panelin canlı güncellemeleri için Valkey kullanırım; panel sunucudan anlık bildirimleri SSE ile alır.
- Web paneli ve platform yönetim paneli Next.js ve React ile geliştirildi.
- El terminali uygulamasını React Native ile yazdım; tarayıcı, yazıcı ve Bluetooth gibi donanım erişimleri küçük Kotlin modüllerinde, iş mantığı ise TypeScript'te.
- Tüm firmalar ve tüm cihaz modelleri için tek bir Android uygulaması var; uygulama Google Play kullanmadan kendini sunucudan günceller ve firmanın logosu ile adı girişte sunucudan gelir.
- Etiket tasarımcısı aynı tasarımı farklı yazıcı dillerine, fiş metnine, SVG'ye ve A4 HTML çıktısına çevirebilir.
- Servisler doğrudan sunucuda systemd ile çalışır, önlerinde nginx bulunur.
Kullanım alanları
- Kendi ürettiği gıdayı kendi araçlarıyla bayilere ve marketlere dağıtan üreticiler bu sistemi kullanabilir.
- Son tüketim tarihi kısa ürünlerle çalışan ve fireyi azaltmak isteyen depolar için uygundur.
- Araçta satış ve tahsilat yapan dağıtım ekiplerinin gün sonu mutabakatını hızlandırır.
- Soğuk zincir ve gıda güvenliği kayıtlarını denetimlere hazır tutması gereken firmalar için yararlıdır.
Durum
Çekirdek akışla birlikte bütün modüller canlıda ve ilk müşteri sistemi kullanıyor. İleride projeyi yapay zekâ destekli, daha genel bir depo yönetim ürününe dönüştürmeyi planladım.
- Kategori
- Kurumsal paneller
- Yıl
- 2026
Teknolojiler
- Go
- React Native
- Next.js
- Barcode
- Offline-first