Identyfikacja pracowników w narzędziowni - po co potwierdzać osobę

Dokument wypożyczenia przypisuje narzędzie do osoby, a odpowiedzialność za sprzęt ma sens tylko wtedy, gdy osoba została rozpoznana poprawnie. Ręczne wpisywanie nazwiska lub numeru zajmuje czas przy okienku i daje pomyłki, zwłaszcza gdy w kolejce stoi kilka osób. Automatyczna identyfikacja zastępuje wpis jednym odczytem nośnika.

Według opisu Studio TCS.net program pozwala przypisać odpowiedzialnych pracowników do narzędzi, a identyfikacja pracowników kodami kreskowymi jest funkcją dodatkową, którą można zintegrować z systemem. Kartoteki osób opisuje tekst o modułach ewidencji pracowników w Studio TCS.net.

Element wydaniaBez identyfikacjiZ odczytem nośnika
Rozpoznanie osobyręczny wpis nazwiska lub numeruodczyt kodu przy czytniku
Ryzyko pomyłkiliterówka albo zamiana osóbkod przypisany do jednego pracownika
Czas przy okienkuzależy od szybkości pisaniajeden odczyt
Ślad zdarzeniazależy od dyscypliny magazynierazapis czasu i stanowiska

Reguła: nośnik identyfikuje osobę, a nie uprawnienie. To, co osoba może pobrać, wynika z jej kartoteki i kwalifikacji, a nie z samej karty.

Ten tekst dotyczy okienka narzędziowni. Identyfikację pod kątem czasu pracy i kontroli dostępu opisuje strona automatyczna identyfikacja pracowników, a pracę z etykietami w paśmie UHF - artykuł identyfikacja pracowników z etykietami RFID UHF.

Nośniki identyfikacji i ich parametry

Narzędziownia ma do wyboru cztery rodzaje nośników. Różnią się technologią odczytu, odpornością na zużycie i łatwością skopiowania, co przekłada się na dobór do konkretnego stanowiska.

NośnikTechnologia odczytuSposób odczytuOgraniczenie
Karta zbliżeniowa RFIDfale radiowe, najczęściej 125 kHz lub 13,56 MHzzbliżenie do czytnika na odległość do kilkunastu centymetrówczytnik musi obsługiwać technologię karty
Brelok RFIDta sama co kartazbliżenie do czytnikałatwo go zgubić razem z kluczami
Karta magnetycznapasek magnetycznyprzesunięcie przez szczelinę czytnikazużycie paska i prostsze kopiowanie
Kod kreskowyodczyt optycznyskan z linii wzrokunajłatwiejszy do skopiowania, wrażliwy na zabrudzenie

Karty i breloki zbliżeniowe RFID

Karta zbliżeniowa zawiera pasywny transponder zasilany polem czytnika, więc nie potrzebuje baterii. Czytnik odbiera numer identyfikacyjny, a system szuka go w bazie. Niektóre karty w paśmie 13,56 MHz mają pamięć chronioną kluczem, inne udostępniają tylko stały numer. W narzędziowni zwykle wystarcza numer używany jako klucz wyszukiwania pracownika.

Odczyt nie wymaga linii wzroku, więc karta w kieszeni kombinezonu albo brelok w dłoni przechodzą przez brud bez problemu. Brelok korzysta z tej samej technologii, a różni się tylko obudową. Do oznaczania samych narzędzi służą inne tagi, o których pisze artykuł o tagach RFID na metal.

Karta magnetyczna i kod kreskowy

Karta magnetyczna ma sens tam, gdzie zakład ma już czytniki i identyfikatory z paskiem, bo pozwala wykorzystać istniejącą infrastrukturę kontroli dostępu. Pasek ściera się przy codziennym przesuwaniu, a dane na nim da się skopiować prostym sprzętem.

Kod kreskowy jest najtańszy, bo wystarczy wydrukować identyfikator. Ta sama drukarka i ten sam format kodu obsługują też etykiety narzędzi, co opisuje strona o kodach kreskowych w magazynie. Cena tej prostoty to podatność na kopiowanie i zabrudzenie, więc przy narzędziach o dużej wartości kod uzupełnia się kodem PIN.

Pracownica przy terminalu komputerowym w hali produkcyjnej, za nią dwóch współpracowników przy maszynach
Stanowisko z terminalem, przy którym odczyt nośnika poprzedza rejestrację dokumentu.

Telefon jako nośnik

Pytanie o telefony pojawia się przy każdym wdrożeniu. Telefon z Androidem potrafi w trybie emulacji karty odpowiadać czytnikowi NFC tak, jak karta zbliżeniowa; mechanizm opisuje dokumentacja emulacji karty opartej na hoście. Czytnik musi obsługiwać NFC, a aplikacja przechowuje identyfikator, który wysyła w odpowiedzi.

Telefon ma też wady na hali: rozładowuje się, bywa zostawiany w szafce i łatwo go uszkodzić. Nie zastępuje więc w pełni karty. Czy dany wariant obsługuje wdrażany system, potwierdza się w specyfikacji wdrożenia, bo sama możliwość techniczna nie oznacza gotowej funkcji programu.

Dobór nośnika do stanowiska

Wybór zaczyna się od warunków pracy, a nie od ceny czytnika. W hali, gdzie pracownicy noszą rękawice i pracują w oleju, karta RFID w kieszeni albo brelok przy pasie są wygodniejsze niż identyfikator z kodem, który trzeba wyciągnąć i ustawić przed skanerem. W małej narzędziowni z drukarką etykiet kod kreskowy uruchamia się jednego dnia i nie wymaga zakupu kart.

Trzecim kryterium jest to, co zakład ma już w użyciu. Jeżeli pracownicy noszą karty do bramek, ta sama karta może posłużyć w narzędziowni, o ile czytnik obsługuje jej technologię. Mieszanie nośników na jednym stanowisku wymaga czytnika wielotechnologicznego albo dwóch urządzeń podłączonych równolegle.

Powiązanie nośnika z pracownikiem w bazie

Jeden pracownik może mieć kilka nośników, na przykład kartę i brelok, ale każdy kod może być aktywny tylko u jednej osoby. Tę regułę najlepiej wymusić w bazie, a nie w aplikacji. Unikalny indeks filtrowany obejmuje wyłącznie wiersze aktywne, więc wycofana karta nie blokuje kodu, gdy zostanie kiedyś użyty ponownie. Mechanizm opisuje dokumentacja indeksów filtrowanych w SQL Server.

CREATE TABLE dbo.nosnik_identyfikacji (
    id_nosnika        int IDENTITY PRIMARY KEY,
    id_pracownika     int          NOT NULL,
    typ_nosnika       varchar(20)  NOT NULL,
    kod_nosnika       varchar(64)  NOT NULL,
    aktywny           bit          NOT NULL DEFAULT 1,
    data_dezaktywacji datetime2(0) NULL
);

CREATE UNIQUE INDEX ux_nosnik_aktywny
    ON dbo.nosnik_identyfikacji (kod_nosnika)
    WHERE aktywny = 1;
  • Kod nośnika - numer odczytany z nośnika, bez danych osobowych zapisanych na samym nośniku.
  • Typ nośnika - rodzaj identyfikatora, potrzebny do raportów o zużyciu i wymianie.
  • Status aktywności - wycofanie nośnika ustawia znacznik, zamiast usuwać wiersz, więc stare dokumenty zachowują odwołanie.
  • Data dezaktywacji - moment wycofania, który pozwala odtworzyć, kto był właścicielem kodu w danym dniu.

Wyszukanie osoby po odczycie sprowadza się do jednego zapytania. Nazwy tabel i kolumn są przykładowe.

SELECT p.id_pracownika, p.nazwisko
FROM dbo.nosnik_identyfikacji AS n
JOIN dbo.pracownik AS p ON p.id_pracownika = n.id_pracownika
WHERE n.kod_nosnika = @kod
  AND n.aktywny = 1;

Import numerów z istniejących kart

Zakład, który ma już karty w systemie kontroli dostępu, zwykle chce je wykorzystać w narzędziowni. Ten sam numer karty bywa raportowany jako liczba dziesiętna, zapis szesnastkowy albo ciąg bajtów w odwróconej kolejności, zależnie od czytnika. Przed importem trzeba ustalić format, który zwraca czytnik na stanowisku, i przeliczyć wszystkie numery do jednej postaci, bo inaczej karta zadziała w jednym systemie, a w drugim zostanie odrzucona.

Stanowisko wydawania - czytnik i przebieg wydania

Większość czytników działa jak klawiatura: kod trafia do aktywnego pola jako ciąg znaków zakończony klawiszem Enter. Strona stanowiska nie musi więc znać sterownika czytnika, tylko rozpoznać serię znaków, która przyszła szybciej, niż pisze człowiek. Skrypt poniżej zbiera znaki do bufora, a zerowanie po przerwie dłuższej niż 80 ms odróżnia odczyt od ręcznego pisania.

let bufor = '';
let ostatni = 0;

document.addEventListener('keydown', (e) => {
  const teraz = performance.now();
  if (teraz - ostatni > 80) bufor = '';
  ostatni = teraz;
  if (e.key === 'Enter') {
    if (bufor.length >= 4) wyslijKod(bufor);
    bufor = '';
  } else if (e.key.length === 1) {
    bufor += e.key;
  }
});

async function wyslijKod(kod) {
  const odp = await fetch('/api/nosnik/rozpoznaj', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ kod })
  });
  if (odp.ok) pokazPracownika(await odp.json());
}

Po rozpoznaniu osoby magazynier skanuje narzędzia, a każda pozycja trafia do dokumentu wypożyczenia. Opis Studio TCS.net wspomina o trybie bufora dokumentu, automatycznym nadawaniu numeru referencyjnego oraz podpisie elektronicznym lub tradycyjnym. Przebieg dokumentu wyjaśnia tekst o dokumentach wypożyczeń w Studio TCS.net.

KrokZdarzenieZapis w systemie
1. Odczyt kartyrozpoznanie pracownikawpis o odczycie z czasem i stanowiskiem
2. Skan narzędziadopisanie pozycji do dokumentupozycja w buforze dokumentu
3. Zatwierdzeniezmiana statusu narzędzi na wydanenumer referencyjny dokumentu
4. Potwierdzeniepodpis elektroniczny lub tradycyjnyślad potwierdzenia przy dokumencie

Zwrot przebiega w odwrotnej kolejności i korzysta z tej samej identyfikacji. Reguły zwrotów opisuje strona o zwrotach narzędzi w Studio TCS.net, a wypożyczenia realizowane przez samych pracowników - tekst o wypożyczalni narzędzi przez pracowników.

Odrzucone odczyty

Nieznany kod, kod wycofanego nośnika i kod przypisany do innej osoby kończą się komunikatem na stanowisku, a nie cichym pominięciem. Każdy taki odczyt trafia do dziennika z czasem i numerem stanowiska. Powtarzające się próby użycia wycofanej karty są sygnałem, że ktoś nadal jej używa, więc warto je zestawić z raportem zgubionych identyfikatorów.

Zabezpieczenie odczytu - kopiowanie i kod PIN

Stały numer karty zbliżeniowej da się skopiować na inny nośnik prostym sprzętem, a kod kreskowy wystarczy sfotografować. Sam odczyt nie dowodzi więc, że przy okienku stoi właściciel karty. Przy narzędziach o dużej wartości dokłada się drugi składnik, czyli kod PIN wpisywany po odczycie.

PIN nie może leżeć w bazie jawnie. Zapisuje się jego skrót policzony funkcją wyprowadzania klucza z losową solą, a przy weryfikacji porównuje się skróty. Krótki PIN i tak ma niewielką przestrzeń kluczy, dlatego skrót chroni przed odczytem z bazy, ale nie zastępuje blokady po kilku błędnych próbach.

using System.Security.Cryptography;

static byte[] HashPin(string pin, byte[] sol)
{
    return Rfc2898DeriveBytes.Pbkdf2(pin, sol, 100_000, HashAlgorithmName.SHA256, 32);
}

Liczbę iteracji dobiera się do mocy serwera, a sól zapisuje obok skrótu, osobno dla każdego pracownika. Blokadę po błędnych próbach realizuje się po stronie serwera, bo skrypt w przeglądarce można ominąć.

Uprawnienia i katalog użytkowników

Identyfikacja fizyczna przy okienku i logowanie do aplikacji to dwa osobne mechanizmy. Karta odpowiada na pytanie, kto odbiera narzędzie. Konto użytkownika odpowiada na pytanie, kto obsługuje system i co w nim może zmienić. Mieszanie obu funkcji w jednym identyfikatorze utrudnia późniejszy audyt.

Grafika chmury z kolumnami danych na tle sieci połączeń, symbol usługi katalogowej
Katalog kont jako źródło loginów - identyfikacja kartą pozostaje osobnym mechanizmem.

Opis programu dla magazynu BHP wymienia integrację z Active Directory, która upraszcza administrację kontami. Katalog usług domenowych przechowuje konta i grupy oraz obsługuje uwierzytelnianie w sieci firmowej; przegląd usługi podaje dokumentacja Active Directory Domain Services. Logowanie do aplikacji magazynowych omawia też strona o logowaniu i autoryzacji.

Uprawnienia do pobierania określonych typów narzędzi wynikają z kwalifikacji zapisanych w kartotece pracownika. Raport uprawnień pokazuje, kto może pobrać dany typ narzędzia, a kto nie, co ułatwia audyt wewnętrzny. Więcej o tym, jak narzędziownia porządkuje obieg sprzętu, znajduje się w tekście o magazynie narzędzi w Studio TCS.net.

Kobieta patrzy na duży ekran z panelem raportów i wykresem słupkowym w ciemnym pomieszczeniu
Zestawienie uprawnień: kto może pobrać dany typ narzędzia.

Eksploatacja nośników i dane osobowe

Utrata karty jest zdarzeniem, które system musi obsłużyć od razu. Nośnik dezaktywuje się w bazie, a pracownik dostaje nowy, więc stary kod przestaje działać, choć historia wypożyczeń pozostaje nienaruszona. Zapas pustych kart i breloków warto trzymać przy stanowisku wydawania, żeby wymiana nie zatrzymywała pracy.

Raz na kwartał warto sprawdzić, które aktywne nośniki od dawna nie były użyte. Nieużywana karta aktywnego pracownika bywa zgubiona albo leży w szafce, a nieużywana karta osoby, która odeszła, jest luką w zabezpieczeniach. Zapytanie wskazuje nośniki bez odczytu w ostatnich dziewięćdziesięciu dniach.

SELECT n.id_nosnika, p.nazwisko, MAX(o.data_odczytu) AS ostatni_odczyt
FROM dbo.nosnik_identyfikacji AS n
JOIN dbo.pracownik AS p ON p.id_pracownika = n.id_pracownika
LEFT JOIN dbo.odczyt_nosnika AS o ON o.id_nosnika = n.id_nosnika
WHERE n.aktywny = 1
GROUP BY n.id_nosnika, p.nazwisko
HAVING MAX(o.data_odczytu) IS NULL
    OR MAX(o.data_odczytu) < DATEADD(DAY, -90, SYSDATETIME());

Reguła: karta pracownika, który odchodzi, zostaje dezaktywowana dopiero po zwrocie wszystkich narzędzi zapisanych na jego nazwisko.

Kod nośnika staje się daną osobową, gdy da się go powiązać z konkretnym człowiekiem, więc obowiązuje zasada minimalizacji: na karcie zapisuje się sam numer, a dane osoby oraz uprawnienia pozostają w bazie. Taka konstrukcja ogranicza skutki zgubienia karty, bo znalazca nie odczyta z niej nic poza numerem.

Nośniki identyfikacji pracowników łączą się z oznaczaniem samych narzędzi, opisanym w tekście o narzędziowni i tagach RFID. Podejście do identyfikacji w logistyce przedstawia też strona o automatycznej identyfikacji w logistyce.