Перейти до змісту

Gatehouse — інструкція користувача

Прохідна та вагова у DOP — один плагін, що покриває три ролі:

  1. Оператор авто-прохідної — приймає авто на територію, друкує QR-перепустку.
  2. Оператор ваги — стежить за зважуванням, переводить ticket у прихідну.
  3. Кадровик / охорона — слідкує за журналом відвідувань, налаштовує СКД-інтеграцію.

Тебе цікавить тільки твоя роль — інші розділи можна пропустити. Технічна частина (як це все запускається, які системи задіяні) — у testing-guide.md.


Що треба знати перед стартом

  • DOP App відкритий у браузері — https://erp.eswf.dev (production) або http://localhost:5173 (dev).
  • Ти увійшов у систему як свій тенант.
  • У сайдбарі є гілка Прохідна та вагова під Essentials → Plugins. Якщо її немає — звернись до адміністратора, перевірити що appGatehouse встановлений.

Структура сайдбара (важливо знати куди ти потрапляєш у різних кейсах):

🛡️ Прохідна та вагова
   📁 Довідники
        🌍 Прохідні                ← список усіх gate-points
        🔧 Обладнання              ← ваги / камери / сканери / тощо
   📁 Документи
        ⚖️ Талони зважування       ← weighing tickets
        📄 Події прохідної         ← журнал усіх crossing events
        🛣️ Чекпойнти               ← yard checkpoint records
   📁 Процеси
        Оператор:
           🖥️ Лайв-панель          ← загальний overview
           🚗 Оператор авто-прохідної
           ⚖️ Оператор вагової
           📷 Webcam ANPR — тестер
        Пости території:
           🔍 Сканер чекпойнтів    ← мобільний QR-сканер
           🛣️ Маршрут авто         ← timeline візиту
        Інтеграції:
           📊 FortNet СКД

🚗 Сценарій 1: Оператор авто-прохідної

Ти — людина за столом на КПП. На столі — комп'ютер з Gatehouse, ANPR-камера на воротах, принтер термонаклейок поряд.

Ранкова рутина

  1. Увімкни комп'ютер. Відкрий Прохідна та вагова → Процеси → Оператор → Оператор авто-прохідної.
  2. У dropdown «Прохідна» обери свою прохідну (наприклад gate_main). Решта працівників на території використовують інші прохідні — кожен оператор бачить тільки свою.
  3. У header справа має бути зелений Badge «WS онлайн». Якщо ні — зачекай 5 секунд (auto-reconnect) або клацни Refresh у браузері.

Авто заїжджає

  1. ANPR-камера автоматично знімає номер. Через 1-3 секунди у блоці «Очікують підтвердження» з'являється картка:
  2. Великими літерами — AA1234BB (номер).
  3. Якщо це авто уже у нашій базі (наприклад постійний партнер) — рядком нижче ім'я: Volvo FH 25-тонник, бейдж з ім'ям водія.
  4. Якщо авто незнайоме — буде написано Авто АА1234ВВ (система автоматично створила запис, ти потім збагатиш дані).

  5. Дві кнопки на картці:

  6. 🟢 Прийняти + друк — натисни, якщо все добре. Автомобіль уноситься в систему, друкується PDF-перепустка з QR-кодом, він відкривається у новій вкладці. Натисни Ctrl+P → принтер термонаклейок видасть наклейку розміру A6. Передаси її водієві з вказівкою «На лобове скло, не закривати».
  7. 🔴 Відхилити — натисни, якщо це помилка ANPR (наприклад розпізнало 1 замість I, або це не наш партнер). Подія залишається у журналі, але авто не пропускається.

  8. Не розпізнало номер? Внизу панелі є блок «Ручне введення». Введи плату руками (формат АА1234ВВ) і клацни «Зареєструвати». Далі — як і автоматично, картка з'явиться з кнопками.

Авто на території

Внизу екрана — таблиця «На території зараз». Тут видно всі авто, що зайшли, але ще не виїхали.

  • 📄 (іконка принтера) — передрукувати наклейку, якщо водій загубив.
  • 🛣️ (іконка маршруту) — побачити timeline візиту: куди авто заїжджало (вагова, мийка, склад) і скільки часу там стояло.

Авто виїжджає

ANPR-камера на виїзді сама розпізнає номер → backend знаходить open visit → автоматично закриває його. Ти бачиш як зникає рядок з таблиці «На території зараз».

Якщо ANPR не спрацював на виїзді

Йди на Документи → Події прохідної → знайди відкритий event цього авто (фільтр status=registered) → відкрий → натисни «Відхилити» (закриє вручну) АБО передзвони у IT.


⚖️ Сценарій 2: Оператор вагової

Ти — людина у будці біля автомобільної ваги. Ваги під'єднані до твого комп'ютера через USB-кабель. Камера на стовпі знімає номер кожного авто на платформі.

Ранкова рутина

  1. Прохідна та вагова → Процеси → Оператор → Оператор вагової.
  2. У dropdown — обери свою вагову (наприклад gate_weighbridge).
  3. Зелений Badge «WS онлайн».

Як це працює

Ти нічого не вводиш руками! Система сама пов'язує номер з камери і вагу зі шкали — це і є цінність плагіна.

Авто стає на ваги завантажене

  1. Камера зняла номер AA1234BB → ваги показали 25400 kg.
  2. У картці «Останнє зчитування ваги»25 400.00 kg.
  3. У картці «Останнє ANPR»AA1234BB · 92%.
  4. Через 1-3 секунди у списку «Відкриті талони» з'являється новий ticket:
  5. T-00012, плата AA1234BB, брутто 25400 kg, тара , net 25400 kg, статус weighed_in.

Авто розвантажилось і повертається

  1. Ваги показали 12000 kg (порожнє авто).
  2. ANPR знов розпізнав той самий номер.
  3. Через 1-3 секунди у списку «Відкриті талони» статус ticket'а змінився на weighed_out → потім автоматично на closed. Net = 13400 kg (різниця).
  4. Ticket переходить у блок «Готові до приходу».

Створюємо прихід

  1. Клацни на ticket у блоці «Готові до приходу» → відкривається форма з кроками Чернетка → Брутто → Тара → Закрито → Прихід. Зараз 4-й крок.
  2. Перевір номенклатуру (Зерно) і контрагента — це поля з seed-у або з твоїх раніше створених записів.
  3. Натисни велику teal-кнопку Створити прихід (GoodsReceipt).
  4. У новій вкладці відкривається GoodsReceipt з рядком: Зерно × 13400 kg.
  5. Тепер можеш у GR проставити ціну, обрати склад, і провести через стандартний Save & Post workflow Essentials.

Якщо щось пішло не так

Ситуація Що робити
Ticket створився зі статусом needs_review Відкрий — у полі note буде написано чому (наприклад «Suspicious weight 0 kg»). Виправ вагу руками: ПеревідкритиБрутто / ТараЗакрити.
Кнопка «Створити прихід» приглушена Наведи курсор — Tooltip пояснить (немає номенклатури / контрагента / неправильний direction_pattern).
Авто проїхало через ваги, але correlator не пов'язав Перевір 30-секундне вікно: ANPR і scale event повинні прийти максимум через 30с один після одного на одній і тій же ваговій. Якщо камера трохи затримала — python device-bridge/emulators/anpr_cli.py --plate AA1234BB --gate-point 3 --direction in --backend ... --token ... дасть руками.
Перевідкрити закритий ticket На формі ticket — кнопка Перевідкрити (тільки для статусу closed).

📊 Сценарій 3: Кадровик / адміністратор СКД

Ти — людина, що відповідає за облік робочого часу та налаштування СКД-інтеграції.

Журнал відвідувань

  1. HRM & Payroll → Operations → Журнал відвідувань (/hr-manager/operations/attendanceLogs).
  2. Тут видно одна рядок на пару (employee × date):
  3. in_at — найраніший вхід дня.
  4. out_at — найпізніший вихід дня.
  5. source — звідки прийшла подія: gatehouse (наша картка), fortnet (СКД клієнта), manual (ввели руками).
  6. is_open=True — людина зайшла, ще не вийшла.

Виправлення табеля

Якщо людина забула приклеїти картку, або картка не спрацювала — створи запис вручну:

  1. Журнал відвідувань+ New (або відкрий існуючий рядок).
  2. employee = людина, date = дата, in_at = час входу, out_at = час виходу, source = manual, note = чому (наприклад «забула картку, підтверджено пропуск охоронця»).
  3. Save.

Перерахунок зарплати після виправлень

  1. HRM & Payroll → Documents → Розрахункові листи (payrollSlips).
  2. Знайди slip людини за період (наприклад Іванов І.І. — 2026-04).
  3. Action «Recompute days worked» (через 3 крапки меню або кнопка) → days_worked оновлюється з історії AttendanceLog.

Налаштування FortNet-інтеграції

Це лише якщо у твого клієнта вже стоїть стороння СКД (FortNet, Bolid, Sigur). Якщо ні — пропусти цей розділ, ми використовуємо власний картрідер.

  1. Прохідна та вагова → Процеси → Інтеграції → FortNet СКД.
  2. Поля налаштувань:
  3. Шлях до CSV-емулятора — у dev-режимі шлях до тестового файлу. У production буде замінено на db_dsn (адреса БД FortNet).
  4. Інтервал pull-у (с) — як часто backend запитує нові події з FortNet. 0 = тільки manual sync.
  5. Увімкнено — глобальний switch.
  6. Після зміни → клацни «Зберегти».

Ручний запуск синхронізації

  1. На сторінці FortNet — кнопка «Синхронізувати зараз» (синя, велика).
  2. Backend читає всі нові рядки з джерела (CSV/DB), створює GateEvents + AttendanceLog.
  3. Результат у toast-нотифікації:
  4. success (зелений): усе ок, створено N рядків.
  5. partial (помаранчевий): частина створена, частина пропущена. Подивись блок «Історія синхронізацій» — там написано чому (наприклад «employee_not_found: EMP999»).
  6. error (червоний): нічого не вдалося. Перевір CSV path / db connection.

Що означає кожен number у Sync history

Rows: 50 — backend прочитав 50 рядків з джерела
+/replay/fail: 10/40/0
   10 — нових створено
   40 — replay (вже були у попередніх pull-ах, дедуп через unique constraint)
   0 — помилок
Cursor: 1010 → 1050 — курсор зрушив з 1010 на 1050

Інкрементальність

FortNet pull не дублює дані. Кожен запуск читає тільки рядки з event_id > last_synced_event_id. Якщо файл не змінився — created=0, replays=N.

Cron-запуск

Replace manual sync на регулярний:

# Windows Task Scheduler / cron — кожну хвилину
* * * * * cd /path/to/dop/backend && venv/Scripts/python.exe manage.py fortnet_pull --tenant 6 --trigger cron

🔍 Сценарій 4: Охоронник на пості території

Ти — охоронник на внутрішньому пості (вагова, мийка, склад). У руках — планшет / смартфон з відкритим браузером.

  1. На своєму пристрої відкрий: Прохідна та вагова → Процеси → Пости території → Сканер чекпойнтів.
  2. Якщо в URL приходить /.../checkpointScanner/checkpoint_yard_1 — пост вже обраний автоматично. Якщо ні — обери у dropdown.
  3. Натисни «Старт сканера» → дозволь камеру.
  4. Кожен раз як підходить авто, водій показує QR на лобовому склі → камерою наводь → toast Чекпойнт записано.
  5. У правій панелі — recent scans (останні 8). Можна клацнути Маршрут → відкривається timeline візиту.

Що означає Чекпойнт не знайдено

  • Якщо QR на наклейці пошкоджений (не зчитується) — попроси водія підняти.
  • Якщо backend каже 404 not found — це чужий QR (від давнього візиту, який вже закритий) або фейковий QR. Не пропускай.

🛣️ Сценарій 5: Подивитися куди їздило конкретне авто

Інспектор / директор / детектив.

  1. Прохідна та вагова → Документи → Події прохідної → відкрий потрібний event (фільтр vehicle=AA1234BB, direction=in).
  2. Або через сканер чекпойнтів → recent scans → Маршрут.
  3. Або вписати в URL: /gatehouse/gatehouseprocesses/vehicleTrace/<event_id>.
  4. Бачиш Timeline:
  5. 🚪 Заїзд на територію — gate_main о 14:02
  6. 📍 Чекпойнт — checkpoint_yard_1 о 14:18 (+16 хв)
  7. 📍 Чекпойнт — gate_weighbridge о 14:55 (+37 хв)
  8. 📍 Чекпойнт — checkpoint_yard_1 о 15:30 (+35 хв)
  9. 🚪 Виїзд з території — gate_main о 16:14 (+44 хв)
  10. Бейдж зверху:
  11. 🟠 НА ТЕРИТОРІЇ — авто ще не виїхало, лічильник часу йде.
  12. 🟢 ЗАВЕРШЕНО — повний візит закрився.

📷 Webcam ANPR Tester — для дев / навчання

Не для повсякденної роботи. Це інструмент для: - Дев тестування ANPR-розпізнавання (показуєш фото зі смартфона у webcam). - Навчання нового оператора як працює ANPR-flow. - Демонстрація клієнту як буде у production з реальною камерою.

Логіка та сама, що й оператора — клацнув «Зробити фото» → Підтвердити → подія летить у Live-feed.


Якщо нічого не працює

Симптом Куди йти
Жодний з екранів Gatehouse не відкривається Перевір що appGatehouse встановлений у AppStore (Applications → All → шукай Gatehouse). Якщо installed — звернись до адміна, він рестартне backend.
WS статус Помилка Backend може бути down. F5 один раз. Якщо не допомогло — звернись до IT.
Картка ANPR не з'являється у Operator screen Перевір що bridge-сервіс запущено на цій прохідній. Запитай IT — у них є моніторинг.
FortNet sync Failed: employee_not_found для багатьох рядків У Журналі відвідувань подивись CSV → є чи у тебе всі ці employee_id у Employees довіднику. Імпортуй пропущених.
Загублений PDF з QR Зайди у gateOperatorНа території зараз → 🖨 (іконка принтера) → передруковує.

Глосарій

Термін Що означає
Прохідна (GatePoint) Фізична точка контролю — гейт, турнікет, вагова, чекпойнт
purpose Тип прохідної: vehicle_gate, personnel_turnstile, weighing_station, mixed
Подія прохідної (GateEvent) Запис що хтось перетнув межу — водій, авто, контейнер
Талон зважування (WeighingTicket) Бізнес-документ що поєднує брутто + тара = нетто
Чекпойнт (GateCheckpoint) «Штамп» на проміжному пості території (вагова, мийка, склад). Кладе у timeline візиту.
QR UID (qr_label_uid) Унікальний код, надрукований на наклейці. Йдеш ним по території, скануєш на постах.
СКД Система Контролю Доступу — стороннє ПЗ (FortNet, Bolid, Sigur), що керує турнікетами на великих підприємствах.
Live-feed Стрім подій у реальному часі через WebSocket — те, що бачить оператор поки авто рухається.
Correlator Backend-сервіс, що пов'язує ANPR + scale у вікні 30 секунд → автоматичний WeighingTicket.
Bridge Тонкий конектор між Gatehouse і доменним модулем (HRM AttendanceLog, ContainerHub GateTransaction).