İçeriğe geç
Muslu Yüksektepe

İnşaat iş akışı paneli

İnşaat şirketleri için kasa, çek, banka hareketi ve proje maliyetini tek panelde toplayan, çok kiracılı muhasebe ve proje yönetim paneli.

İnşaat İş Akışı Paneli, inşaat şirketlerinin muhasebe ve şantiye tarafındaki günlük işlerini tek bir web panelinde toplamak için geliştirdiğim bir yönetim uygulamasıdır. Makdos için geliştirdiğim bu panel, Makdos'un müşterilerine sunduğu iş akışı ürünlerinden biridir. Kasa defterinden çek takibine, banka hareketlerinin onayından proje bazında maliyet analizine kadar bir inşaat firmasının para ve proje bilgisini aynı yerde tutar.

Amaç

İnşaat firmalarında para hareketleri çoğu zaman tablolara, banka ekstrelerine ve ayrı ayrı tutulan proje dosyalarına dağılmış durumdadır. Bir projenin metrekare başına maliyetini, bir taşerona bu yıl ne kadar ödendiğini ya da portföyde vadesi yaklaşan çekleri öğrenmek için birkaç kaynağı yan yana koymak gerekir. Bu paneli, bu bilgileri tek bir kayıt düzeninde birleştirmek ve raporları elle hazırlamak yerine kayıtların kendisinden üretmek için tasarladım.

Bir başka amacım da paneli birden fazla müşteriye güvenle satılabilir hâle getirmekti. Bu yüzden panel, her müşterinin kendi firmalarını, kullanıcılarını ve verilerini birbirinden tamamen yalıtılmış biçimde yönettiği çok kiracılı bir yapıda çalışır. Panelde görünen ad, logo ve ana renk de kurulum ayarlarından gelir, böylece her müşteri paneli kendi markasıyla kullanır.

Nasıl çalışır

Panel iki ana modülden oluşur. Muhasebe modülü kasa, çekler, hesaplar ve banka hareketleriyle ilgilenir. İnşaat modülü ise şirketleri, taşeronları, projeleri ve proje ortaklıklarını yönetir. Her kullanıcının bir rolü ve erişebildiği modüller vardır. İzleyici yalnızca okur, düzenleyici kayıt ekler ve düzenler, yönetici silme yetkisine sahiptir ve diğer kullanıcıları yönetir, hesap sahibi ise her şeyi yapabilir. Bu yetkileri yalnızca arayüzde gizlemekle yetinmedim, her isteği sunucu tarafında da denetlerim.

Kasa defterinde her kayıt bir hesaba giren ya da hesaptan çıkan bir hareket olarak tutulur. Bir hesabın bakiyesi, açılış bakiyesine o tarihten sonraki hareketlerin eklenmesiyle hesaplanır. Hesaplar arası transferlerde iki bacak birbirine bağlıdır ve birlikte düzenlenip silinir. Farklı para birimleri arasında yapılan transferlerde her iki tutar ayrı ayrı girilir.

Döviz işlemlerinde her kayda, işlem tarihinden önceki son TCMB bülteninin kurunu yazarım. TCMB bülteni öğleden sonra yayımlandığı ve ertesi gün için geçerli olduğu için kaydın girildiği saate bağlı bir sonuç çıkmasını bu yöntemle önlemiş oldum. Dövizden Türk lirasına çevirmede vergi mevzuatına uygun olarak döviz alış kurunu kullanırım, satış kurunu da ayrıca saklarım. Eldeki varlıklar son bültenin kuruyla, gelir ve giderler ise her kaydın kendi işlem kuruyla çevrilir.

Bankadan gelen hareketler önce Bekleyen İşlemler ekranına düşer. Kullanıcı burada hareketi sınıflandırıp kasaya işleyebilir, kasada zaten var olan bir kayıtla eşleştirebilir ya da yok sayabilir. Panel, önceki kayıtlara ve açıklamadaki kelimelere bakarak sınıflandırma önerir. Aynı işleme ait EFT ücreti ve BSMV gibi masraf satırları tek bir banka masrafı kaydında birlikte işlenir. Kasadaki kayıt silinirse ya da hesabı veya tutarı değişirse, ilgili banka hareketi yeniden bekleyen duruma döner.

Öne çıkan özellikler

  • Kasa defteri, hesap, para birimi, transfer tipi ve proje gibi süzgeçlerle çalışır ve süzülen kayıtların tamamının toplamını gösterir.
  • Alınan çekler, firmanın o para birimindeki çek portföyü hesabına girer; ciro ve tahsil işlemleri bu portföyden çıkış ya da başka bir hesaba transfer olarak kaydedilir.
  • Çek listesinde vadesi geçmiş ve otuz gün içinde vadesi dolacak çekler ayrıca özetlenir, çek görseli de kayda eklenebilir.
  • Hesaplarım ekranı banka, nakit ve şahsi hesapları para birimine ve türe göre bakiyeleriyle birlikte, Türk lirası karşılıklarını da hesaplayarak gösterir.
  • Bekleyen İşlemler ekranında hesap başına ekstre karşılaştırması yapılır ve defterdeki tutarla bekleyen hareketlerin toplamı banka bakiyesiyle karşılaştırılır.
  • Proje detayında toplam gelir ve gider, metrekare maliyeti, ortaklık payı, son on iki ayın seyri ve kategori ile taşeron dağılımları yer alır.
  • Ortaklı projeler için ayrı bir ortak hesabı tutulur ve ortağın gider payı kasa kayıtlarından hesaplanarak öneri olarak yazılır.
  • Taşeron kayıtlarında birden çok kategori seçilebilir, il ve ilçe listesi kullanılır, vergi numarası ve posta kodu doğrulanır.
  • Günlük, aylık ve yıllık raporlar iç para hareketlerini dışarıda bırakarak hazırlanır ve CSV olarak indirilebilir.
  • Ana sayfadaki genel rapor; kurları, eğilim gösteren gösterge kartlarını, nakit akışı grafiğini, varlık dağılımını ve vadesi yaklaşan çekleri tek ekranda toplar.

Çok kiracılı yapı

Paneli satılabilir bir ürün olarak tasarladığım için kiracı yalıtımı üzerinde özellikle durdum. Hiyerarşi Makdos, müşteri, müşterinin yetkilileri, inşaat firması ve firmanın departmanları ile üyeleri şeklinde ilerler. Her müşteri bir pakete bağlıdır ve paket, açabileceği firma ve kullanıcı sayısını belirler. Bir kişi birden fazla firmada farklı rollerle çalışabilir, çünkü rol ve modül yetkisi kişiye değil firma üyeliğine bağlıdır.

Veri yalıtımını uygulama koduna bırakmak yerine PostgreSQL'in satır düzeyinde güvenlik özelliğiyle (RLS) sağladım. RLS, veritabanının her sorguda yalnızca izin verilen satırları döndürmesini sağlayan bir mekanizmadır. Bağlantı havuzu her isteğin firmasını veritabanı oturumuna yazar ve firmasız bir bağlamdan hiçbir firma verisi görünmez. Uygulamanın veritabanı rolü bu kuralları atlayabilecek yetkilere sahipse API açılışta çalışmayı reddeder.

Makdos aynı panelden girer, ancak yalnızca kendi menüsünü görür. Bu menüde müşteriler, paketler, yetkililer, destek talepleri ve faturalar bulunur. Makdos'un müşterilerin firma verisini görmemesi bilinçli bir tasarım kararıdır, çünkü panel satılır ve içindeki veri müşteriye aittir.

Teknik altyapı

  • Sunucu tarafını Go ile yazdım ve yönlendirme için chi kütüphanesini kullandım.
  • Veritabanı PostgreSQL; bağlantılar için pgx, şema değişiklikleri için uygulamaya gömülü goose migration'ları kullanırım.
  • Para tutarlarını veritabanında numeric, Go tarafında ondalık sayı kütüphanesiyle tutuyor ve JSON'da metin olarak taşırım, böylece yuvarlama hatası oluşmuyor.
  • Ad sütunlarında Türkçe sıralama kuralını kullanırım, böylece I ve İ harfleri aramada ve sıralamada doğru davranıyor.
  • Oturumlar HttpOnly çerezle tutulur, parolalar argon2id ile saklanır ve siteler arası istek sahteciliğine karşı koruma vardır.
  • Arayüzü React 19, Vite, TypeScript ve Tailwind ile geliştirdim; veri çekmede TanStack Query, grafiklerde recharts kullanırım.
  • Her yazma işlemi tek bir veritabanı işlemi içinde yapılır ve değişiklik kaydı aynı işlemde tutulur.
  • Sunucuya yalnızca derlenmiş program, arayüz çıktısı ve servis ayarları gönderilir; kaynak kod sunucuya gitmez.

Kullanım alanları

  • Birden çok projeyi aynı anda yürüten ve proje bazında maliyet takibi yapmak isteyen inşaat şirketleri bu paneli kullanabilir.
  • Çek ve senetle çalışan, portföyündeki çeklerin vadelerini izlemesi gereken muhasebe ekipleri için uygundur.
  • Ortaklı projelerde ortağın yatırdığı tutarı ve gider payını şeffaf biçimde izlemek isteyen firmalar için yararlıdır.
  • Birden fazla şirketi ya da firmayı tek hesaptan yöneten grup yapıları, firma seçiciyle aralarında geçiş yapabilir.

Durum

Muhasebe, inşaat, ayarlar ve çok kiracılı yapı tamamlandı. Tanıtım için kurgusal verilerle çalışan bir vitrin kurulumu da hazır. Sıradaki aşamada bankalardan hareketleri doğrudan çekecek entegrasyonlar üzerinde çalışırım; Bekleyen İşlemler ekranı ve ekstre karşılaştırması bu entegrasyonlara hazır durumda.

Kategori
Kurumsal paneller
Yıl
2026

Teknolojiler

  • Go
  • PostgreSQL
  • React
  • Multitenancy
  • Accounting

Tüm projelere dön