Turnike cihazı olmadan giriş çıkış kaydı, kimlik ve yer doğrulamasını kaydın kendisine gömer: kimliği personelin okuttuğu QR, sahayı telefonun konum servisi verir. Doğrulama sahaya bağlandığında sahayla birlikte biter; kişiye bağlandığında personelin telefonuyla bir sonraki sahaya taşınır. Şantiye personel takip sisteminde süre, eşleşen giriş ve çıkış çiftinden hesaplanır; çıkışı okutulmamış giriş eksik kayıt olarak listede kalır.
Turnike geçici sahaya neden kurulmaz
Turnike bir doğrulama cihazıdır ve doğrulamayı sabit bir noktaya bağlar. Kapının kendisi kimliğin sınandığı yerdir; kayıt, kapıdan geçen kişiden değil kapının kendisinden çıkar. Kalıcı bir tesiste bu bağ sorun çıkarmaz, çünkü kapı da tesis kadar uzun yaşar. Şantiye ise bitmek üzere kurulan bir sahadır. Sahaya monte edilen cihazın hizmet ömrü sahanın ömrüyle sınırlanır: kapanış günü geldiğinde cihaz da işini bitirir ve yatırımın karşılığı tek bir projenin takvimine bölünür.
İkinci sorun cihazın ekonomisinden değil, personelin hareketinden geliyor. İnşaat personeli tek sahaya bağlı çalışmıyor; aynı kişi hafta içinde başka bir şantiyede olabiliyor. Sabit noktadan geçişi sayan bir cihaz, personel o noktadan geçmediği gün hiçbir şey saymaz. Doğrulayıcı yerinde duruyor, doğrulanacak kişi hareket ediyor. Kaydın eksik kalması burada bir arıza değil, kurgunun kendisinden çıkan sonuç.
Aynı desenin ikinci ve bağımsız bir örneği eğitim tarafında görünüyor. Optik okuyucu donanımı olmadan, form görüntüsü üzerinden değerlendirme yapan sınav okuma sisteminde cihaz tek merkezde duruyordu ve şubeler sınav formlarını oraya taşımak zorunda kalıyordu. Sabit cihaz, hareketli olanı kendine çağırır. Okuma işi form görüntüsüne alındığında taşıma adımı ortadan kalktı; şube kendi sınavını kendi okutur oldu.
İki vakanın ortak yanı, itirazın cihazın işini kötü yapmasına yönelmemesi. Turnike geçişi sayar, optik okuyucu işareti okur; ikisi de kendi işini yapar. Sorun, sabit bir cihazın etrafında bir lojistik doğurması. Biri formu merkeze taşıtıyor, öteki personeli tek kapıya bağlıyor. Yazılım tarafındaki soru da bu yüzden şu oluyor: bu adım cihaza bağlı kalmak zorunda mı.
Tek binalı bir fabrikada, sabit bir ofiste ya da giriş noktası tek olan bir tesiste turnike yerinde bir yatırımdır. Orada cihaz tesisin ömrü boyunca çalışır, personel her gün aynı kapıdan geçer ve sabit doğrulama sabit bir gerçekliğe oturur. Bu yazıdaki itiraz cihazın kendisine değil, geçici bir sahaya sabit bir cihaz kurma kararına.
Kâğıt puantaj itiraz anında neden dayanak olmaz
Kâğıt puantajın sorunu yavaşlığı değil. Cetvele yazılan satır günü gününe de yazılsa, o satırı olayla bağlayan bağımsız bir doğrulayıcı yok. Satırı kim yazdıysa satırın doğruluğu da onun beyanına dayanıyor. Cetvel, onu tutan kişinin sözünden başka bir şeye yaslanmıyor.
Bu eksikliğin faturası gündelik işleyişte değil, itiraz anında çıkıyor. Hak ediş hesabı doğrulanamayan bu kâğıdın üzerine kuruluyor. Taşeron ay sonunda gelen rakama itiraz ettiğinde ya da personel çalıştığı bir günün görünmediğini söylediğinde, masaya konacak dayanak yine aynı cetvel oluyor. İki taraf da aynı kâğıda bakıyor ve kâğıt hiçbirini haklı çıkarmıyor; anlaşmazlık pazarlıkla kapanıyor.
Sahada birden çok taşeron çalıştığında bu belirsizlik katlanıyor. Bir kişinin hangi gün hangi taşeron adına, hangi sahada çalıştığı sorusunun cevabı tek bir cetvelde değil, birkaç ayrı cetvelde parça parça duruyor. Parçaları birleştiren şey de yine insan hafızası oluyor.
QR ve konum doğrulamalı kayıtta durum tersine dönüyor. Her giriş, oluştuğu anda iki bağımsız doğrulama taşıyor: kim okuttu ve hangi sahadaydı. İtiraz çıktığında gösterilen şey ay sonunda derlenmiş bir liste değil, olay anında oluşmuş tekil kayıt oluyor. Tartışma “böyle hatırlıyorum” düzleminden çıkıp kaydın kendisine iniyor.
Kaydın dijital olması tek başına kanıt üretmiyor. Elle doldurulan bir mobil form da beyandır; ekranda durması onu doğrulanmış yapmaz. Kanıt değerini üreten şey kaydın taşıyıcısı değil, doğrulamanın kaydın oluştuğu anda yapılması. Kâğıt ile telefon arasındaki fark bu noktada başlıyor.
QR kod kimi doğrular, konum nereyi
QR kodun kimliği, konumun sahayı doğruladığı şantiye personel takip sisteminde her giriş kaydı iki soruyu birden yanıtlıyor. QR kod kimin okuttuğunu belirliyor, konum hangi sahada olunduğunu belirliyor ve iki bilgi tek kayıtta bir arada duruyor. Kaydın kanıt değeri de bu birlikteliğe dayanıyor.
İkisini ayrı tutmak kaydı eksik bırakır. Tek başına QR “kim” sorusunu yanıtlar ama nerede okutulduğunu söylemez. Tek başına konum “nerede” sorusunu yanıtlar ama orada duran kişinin kim olduğunu söylemez. Devam kaydının cevaplaması gereken soru ise ikisinin bileşimi: bu kişi, bu sahada, bu saatte. Doğrulamanın tek bacağı üzerinde duran bir kayıt, itiraz anında yarısı boş bir dayanaktır.
Bunun pratikteki en görünür sonucu, saha adının hiçbir adımda elle seçilmemesi. Hangi şantiyede olunduğu bilgisi bir listeden işaretlenmiyor, konum doğrulamasından geliyor. Elle seçilen her alan yanlış seçilebilen bir alandır; ay sonunda “bu kayıt yanlış sahaya yazılmış” diye ayıklanacak satırlar da o alandan çıkar. Adım ortadan kalkınca o adımın hata sınıfı da ortadan kalkıyor.
Doğrulamayı yapan iki araç da personelin zaten taşıdığı telefonda duruyor: kamera QR kodu okuyor, konum servisi sahayı belirliyor. QR okutmayı ve konum doğrulamasını sabit bir cihaz yerine personelin telefonuna taşıyan katmanı React Native (Expo) ile kurduk; kayıt Laravel tarafına iletiliyor ve MySQL’de tutuluyor. Sahaya doğrulama için ayrı bir cihaz konmuyor. Birinci bölümdeki sabit nokta sorununun teknik cevabı burada: doğrulayıcı, doğrulanan kişiyle birlikte geziyor.
Sahada duran tek fiziksel parça basılı QR kodun kendisi. Bu kodun bir cihazdan farkı, arızalanacak ya da bakım isteyecek bir yanının olmaması; yıprandığında yerine yenisi basılıyor. Şantiye kapandığında da sahaya özgü kod oradan çıkıyor, sonraki saha için yenisi üretiliyor. Kurulum diye bir kalem oluşmuyor, çünkü kurulacak bir şey yok.
Bu zincirin kurulamadığı durumlar da var. Personelin kendi telefonu yoksa ya da işletme telefonu sahaya sokmuyorsa, doğrulamayı taşıyacak bir yüzey kalmaz. O koşulda bu model uygulanmaz; ortada yazılımla kapatılabilecek bir boşluk yok, çünkü eksik olan şey kayıt değil doğrulamanın taşıyıcısı.
Çalışma süresi eşleşen giriş ve çıkıştan hesaplanır
Sistemde “çalışılan süre” diye doldurulan bir alan yok. Süre, eşleşen giriş ve çıkış kaydından hesaplanan bir türev. Bu, bir raporlama tercihi değil veri modelinin kendisiyle ilgili bir karar.
Farkı anlamak için beyan edilen bir alanı düşünmek yeterli. Beyan edilen değer düzeltilebilir, yuvarlanabilir, sonradan değiştirilebilir; değiştiğinde de kaynağıyla arasında bir çelişki oluşmaz, çünkü ortada kaynak yoktur. Türetilen değerde böyle bir alan hiç bulunmuyor. Sonucu değiştirmek isteyen, kaynağın kendisine dokunmak zorunda; kaynak da iki doğrulama taşıyor. Değişiklik yapılabilir ama görünmeden yapılamaz.
Türetmenin ikinci sonucu eksik kayıtta ortaya çıkıyor. Çıkışı okutulmamış bir giriş, çıkış kaydı gelene kadar eksik kayıt olarak listede duruyor. Sessizce bir varsayılan süreye kapanmıyor, gün sonunda otomatik kapatılmıyor. Eksiklik bir hata durumu olarak değil, kapatılması gereken açık bir iş olarak görünüyor.
Kâğıt düzenle asıl fark burada. Kâğıt puantajda unutulan satır yoktur; olmayan bir satırın yokluğunu kimse görmez. Cetvel eksiğiyle birlikte tamamlanmış görünür ve eksiklik ancak biri o günü hatırlayıp itiraz ettiğinde ortaya çıkar. Türetilen sistemde eksik veri sessizce kaybolmuyor, denetlenebilir bir durum olarak listede kalıyor.
Türetmenin üçüncü sonucu ikinci bölümdeki itiraz konuşmasına bağlanıyor. Süre beyan edilen bir alan olsaydı, itiraz doğrudan o alana yönelirdi: rakam neden bu, kim yazdı, hangi güne ait? Süre bir hesap sonucu olduğunda tartışma tek adım geriye kayıyor ve kaynak kayıtların üstüne oturuyor. Kaynak kayıtta ise konuşulacak şey belirli: bu giriş kim tarafından okutuldu, hangi sahada oluştu, eşleştiği çıkış hangisi.
Bunun operasyona yansıması da somut. Unutulan çıkış bir istisna olarak yönetiliyor ve sorumlusu tarafından kayıt düzeyinde tamamlanıyor. Düzeltme türetilen sonucun üstünde değil, sonucu üreten kaydın üstünde yapılıyor. Böylece hesabın dayanağı her durumda aynı yerde kalıyor: doğrulanmış giriş ve çıkış kayıtları.
Personel sahalar arasında dolaşınca kayıt nasıl ayrışır
Aynı personelin farklı şantiyelerdeki kayıtları ayrı duruyor. Kayıt kişi ve saha kırılımında tutulduğu için, hafta içinde saha değiştiren personelin süreleri birbirine karışmıyor.
Nedeni bir önceki bölümdeki kararda. Saha bilgisi her kayda oluştuğu anda konumdan yazılıyor; kayıt daha listeye düşmeden hangi sahaya ait olduğunu üzerinde taşıyor. Ay sonunda kayıtları saha saha ayırmak diye bir iş gündeme gelmiyor, çünkü ayrım kaydın doğal yapısında zaten var.
Saha bilgisi kayda yazılmasaydı, kayıtlar tek havuzda birikir ve hangi kaydın hangi sahaya ait olduğu sonradan işaretlenirdi. Sonradan işaretleme de yine belleğe dayanırdı: bu kişi o hafta neredeydi? Böyle bir düzende ayrıştırmanın doğruluğu, ayrıştırmayı yapanın hatırladığı kadar oluyor.
Sahada birden çok taşeronun çalışması bu ayrımı daha da gerekli kılıyor. Kâğıt düzende aynı kişinin farklı şantiye ve taşeronlardaki kayıtları karışıyordu; kimin kimin adına çalıştığı sorusu her ay yeniden çözülüyordu. Her giriş kimin ve hangi sahanın adına oluştuğunu üzerinde taşıdığında bu soru kendiliğinden cevaplanıyor.
Ayrımın ikinci ekseni aynı sahanın içinde duruyor. Bir şantiyede birden çok taşeronun ekibi yan yana çalışıyor ve hepsi aynı kapıdan giriyor. Kayıt kişiye bağlı olduğu için, aynı sahada aynı gün oluşan girişler taşerona göre de ayrışıyor.
Toplama da aynı kırılımı izliyor. Aynı personelin farklı sahalardaki süreleri ayrı ayrı toplanıyor; toplam tek havuza akmıyor. Hak ediş saha bazında ayrıştığı için, bir sahanın maliyeti başka bir sahanın kaydıyla şişmiyor. Personelin hareketliliği burada bir sorun olmaktan çıkıp kaydın taşıdığı sıradan bir bilgiye dönüşüyor.
Hak ediş ayrı tablo değil, kayıttan türeyen sonuçtur
Hak ediş için açılmış ikinci bir tablo yok. Ay sonunda ödenecek tutar, doğrulanmış giriş ve çıkış kayıtlarının kendisinden çıkıyor; kayıtların yanında duran, elle beslenen bir hesap sayfası bulunmuyor.
İkinci tablonun yokluğu bir bakım kalemini de ortadan kaldırıyor. İki tablo tutan bir düzende kaçınılmaz soru şudur: hangisi doğru? Kaynak kayıtlar ile hesap tablosu zamanla birbirinden uzaklaşır, çünkü biri sahadan beslenirken öteki elle sürdürülür. Mutabakat işi de ay sonunda birinin masasına düşer. İkinci tablo hiç açılmadığında bu soru gündeme gelmiyor; tabloların birbirini tutmaması diye bir durum oluşmuyor, çünkü karşılaştırılacak ikinci bir tablo yok.
Aynı desenin ikinci yüzü kendi ürünümüzde görünüyor. Cihaz geçmişinin ayrı bir dosya değil, servis kayıtlarından türeyen bir sonuç olduğu AlgoKlima’da garanti, bakım ve arıza kayıtları cihaz kaydının altında birikiyor. Cihazın geçmişi diye ayrıca tutulan bir liste yok; geçmiş, o cihaza bağlı kayıtların kendisi. Bunun gündelik karşılığı şu: cihaz el değiştirdiğinde geçmişi de kendisiyle kalıyor, taşınacak bir dosya aranmıyor.
İki vakada da aynı kural işliyor. Bir bilgi başka kayıtlardan hesaplanabiliyorsa, o bilgi için ayrı bir yer açmak bilgiyi ikinci kez saklamak demektir. İkinci kopya da ilkinden ayrışma ihtimalini yanında getirir. Türetme bu ihtimali ortadan kaldırıyor; hesaplanan değer her bakıldığında kaynağından yeniden çıkıyor.
Türetme, elle müdahale gerektiren istisnaları yok saymak anlamına gelmiyor. Unutulan çıkış, telefonun arızalandığı bir gün ya da doğrulamanın yapılamadığı bir vardiya yaşanabilir. Bunların hepsi kaynak kaydın düzeyinde çözülüyor: eksik kayıt tamamlanıyor, düzeltme kaydın üstüne yazılıyor. Türetilen sonucun kendisine elle dokunulmuyor. Sonuca dokunulsaydı, ortada yine iki gerçeklik olurdu: kayıtların söylediği ve tabloya yazılan.
Turnikeli PDKS ile telefon tabanlı kayıt yan yana
İki yaklaşım rakip değil. Biri kalıcı tesisin cevabı, öteki ömrü cihazından kısa olan sahanın cevabı. Aşağıdaki tablo ikisini aynı eksenler üzerinde yan yana koyuyor.
| Eksen | Turnikeli PDKS | QR + konum tabanlı kayıt |
|---|---|---|
| Kurulum ve söküm | Cihaz sahaya monte edilir; saha bittiğinde cihazın sökülmesi ve taşınması gerekir | Uygulama personelin telefonuna kurulur; sahaya monte edilen bir şey yoktur |
| Sahalar arası hareketlilik | Doğrulama noktası sabittir; personel o kapıdan geçmediği gün kayıt oluşmaz | Doğrulama araçları kişiyle birlikte hareket eder; personel hangi sahadaysa kayıt o sahaya düşer |
| Saha adının belirlenme biçimi | Saha, cihazın kurulu olduğu yerdir; kayıt cihazın kimliğinden gelir | Saha, giriş anındaki konum doğrulamasından gelir; hiçbir adımda elle seçilmez |
| Hak ediş dayanağı | Cihaz geçiş saatini verir; hak ediş hesabı ayrı bir tabloda kurulur | Hak ediş eşleşen giriş çıkış çiftlerinden üretilir; ikinci bir hesap tablosu tutulmaz |
| Saha kapandığında geride kalan | Sökülecek, taşınacak ya da yeni sahaya yeniden kurulacak bir cihaz | Personelin cebindeki uygulama ve sunucudaki kayıtlar; sahada fiziksel iz yoktur |
Tabloyu okurken belirleyici satır ikincisi. Diğer satırların hepsi maliyet ve kurulum tarafında tartışılabilir; hareketlilik satırı ise doğrudan kaydın oluşup oluşmadığını belirliyor. Personel sabit bir kapıdan geçmiyorsa, o kapıya kurulan cihaz ne kadar iyi olursa olsun kayıt üretmiyor.
Üçüncü satırda fark daha ince. Turnikeli düzende saha bilgisi cihazın kimliğinden geliyor; cihaz nereye kuruluysa kayıt orayı gösteriyor. Telefon tabanlı düzende saha bilgisi girişin yapıldığı andaki konumdan geliyor. İkisi de saha adını elle seçtirmiyor; fark, doğrulamanın sahaya mı yoksa kişiye mi bağlandığında. Sahaya bağlanan doğrulama sahayla birlikte bitiyor, kişiye bağlanan doğrulama kişiyle birlikte sürüyor.
Seçimi yapan şey bu yüzden sektör değil, sahanın ömrü. Yıllarca aynı yerde duracak bir tesiste sabit cihaz daha az hareketli parça demektir ve yatırım tesisin ömrüne yayılır. Aylarla ölçülen, bitince kapanan ve personeli başka sahaya kayan bir işte aynı cihaz, ömrünü tamamlamadan sökülmek üzere kurulur.
Sahadaki kaydın değeri de oluştuğu anda bitmiyor. Giriş çıkış kayıtları ofis tarafında puantajı, puantaj da hak edişi besliyor. Sahadaki giriş çıkış kaydını ofisteki puantaja ve hak edişe bağlayan kurguyu tasarlarken sorduğumuz soru şu oluyor: bu bilgi bir kez mi giriliyor, yoksa her katmanda yeniden mi yazılıyor? Doğrulama kaydın kendisine gömülmüşse cevap birincisi oluyor ve zincirin geri kalanı aynı kayıttan yürüyor.