Gatehouse — інструкція користувача¶
Прохідна та вагова у DOP — один плагін, що покриває три ролі:
- Оператор авто-прохідної — приймає авто на територію, друкує QR-перепустку.
- Оператор ваги — стежить за зважуванням, переводить ticket у прихідну.
- Кадровик / охорона — слідкує за журналом відвідувань, налаштовує СКД-інтеграцію.
Тебе цікавить тільки твоя роль — інші розділи можна пропустити. Технічна частина (як це все запускається, які системи задіяні) — у 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-камера на воротах, принтер термонаклейок поряд.
Ранкова рутина¶
- Увімкни комп'ютер. Відкрий Прохідна та вагова → Процеси → Оператор → Оператор авто-прохідної.
- У dropdown «Прохідна» обери свою прохідну (наприклад
gate_main). Решта працівників на території використовують інші прохідні — кожен оператор бачить тільки свою. - У header справа має бути зелений Badge «WS онлайн». Якщо ні — зачекай 5 секунд (auto-reconnect) або клацни Refresh у браузері.
Авто заїжджає¶
- ANPR-камера автоматично знімає номер. Через 1-3 секунди у блоці «Очікують підтвердження» з'являється картка:
- Великими літерами —
AA1234BB(номер). - Якщо це авто уже у нашій базі (наприклад постійний партнер) — рядком нижче ім'я:
Volvo FH 25-тонник, бейдж з ім'ям водія. -
Якщо авто незнайоме — буде написано
Авто АА1234ВВ(система автоматично створила запис, ти потім збагатиш дані). -
Дві кнопки на картці:
- 🟢
Прийняти + друк— натисни, якщо все добре. Автомобіль уноситься в систему, друкується PDF-перепустка з QR-кодом, він відкривається у новій вкладці. Натисни Ctrl+P → принтер термонаклейок видасть наклейку розміру A6. Передаси її водієві з вказівкою «На лобове скло, не закривати». -
🔴
Відхилити— натисни, якщо це помилка ANPR (наприклад розпізнало 1 замість I, або це не наш партнер). Подія залишається у журналі, але авто не пропускається. -
Не розпізнало номер? Внизу панелі є блок «Ручне введення». Введи плату руками (формат
АА1234ВВ) і клацни «Зареєструвати». Далі — як і автоматично, картка з'явиться з кнопками.
Авто на території¶
Внизу екрана — таблиця «На території зараз». Тут видно всі авто, що зайшли, але ще не виїхали.
- 📄 (іконка принтера) — передрукувати наклейку, якщо водій загубив.
- 🛣️ (іконка маршруту) — побачити timeline візиту: куди авто заїжджало (вагова, мийка, склад) і скільки часу там стояло.
Авто виїжджає¶
ANPR-камера на виїзді сама розпізнає номер → backend знаходить open visit → автоматично закриває його. Ти бачиш як зникає рядок з таблиці «На території зараз».
Якщо ANPR не спрацював на виїзді¶
Йди на Документи → Події прохідної → знайди відкритий event цього авто (фільтр status=registered) → відкрий → натисни «Відхилити» (закриє вручну) АБО передзвони у IT.
⚖️ Сценарій 2: Оператор вагової¶
Ти — людина у будці біля автомобільної ваги. Ваги під'єднані до твого комп'ютера через USB-кабель. Камера на стовпі знімає номер кожного авто на платформі.
Ранкова рутина¶
- Прохідна та вагова → Процеси → Оператор → Оператор вагової.
- У dropdown — обери свою вагову (наприклад
gate_weighbridge). - Зелений Badge «WS онлайн».
Як це працює¶
Ти нічого не вводиш руками! Система сама пов'язує номер з камери і вагу зі шкали — це і є цінність плагіна.
Авто стає на ваги завантажене¶
- Камера зняла номер
AA1234BB→ ваги показали25400 kg. - У картці «Останнє зчитування ваги» —
25 400.00 kg. - У картці «Останнє ANPR» —
AA1234BB · 92%. - Через 1-3 секунди у списку «Відкриті талони» з'являється новий ticket:
- №
T-00012, платаAA1234BB, брутто25400 kg, тара—, net25400 kg, статусweighed_in.
Авто розвантажилось і повертається¶
- Ваги показали
12000 kg(порожнє авто). - ANPR знов розпізнав той самий номер.
- Через 1-3 секунди у списку «Відкриті талони» статус ticket'а змінився на
weighed_out→ потім автоматично наclosed. Net = 13400 kg (різниця). - Ticket переходить у блок «Готові до приходу».
Створюємо прихід¶
- Клацни на ticket у блоці «Готові до приходу» → відкривається форма з кроками
Чернетка → Брутто → Тара → Закрито → Прихід. Зараз 4-й крок. - Перевір номенклатуру (
Зерно) і контрагента — це поля з seed-у або з твоїх раніше створених записів. - Натисни велику teal-кнопку
Створити прихід (GoodsReceipt). - У новій вкладці відкривається
GoodsReceiptз рядком:Зерно × 13400 kg. - Тепер можеш у GR проставити ціну, обрати склад, і провести через стандартний
Save & Postworkflow 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: Кадровик / адміністратор СКД¶
Ти — людина, що відповідає за облік робочого часу та налаштування СКД-інтеграції.
Журнал відвідувань¶
- HRM & Payroll → Operations → Журнал відвідувань (
/hr-manager/operations/attendanceLogs). - Тут видно одна рядок на пару (employee × date):
in_at— найраніший вхід дня.out_at— найпізніший вихід дня.source— звідки прийшла подія:gatehouse(наша картка),fortnet(СКД клієнта),manual(ввели руками).is_open=True— людина зайшла, ще не вийшла.
Виправлення табеля¶
Якщо людина забула приклеїти картку, або картка не спрацювала — створи запис вручну:
- Журнал відвідувань → + New (або відкрий існуючий рядок).
employee= людина,date= дата,in_at= час входу,out_at= час виходу,source=manual,note= чому (наприклад «забула картку, підтверджено пропуск охоронця»).- Save.
Перерахунок зарплати після виправлень¶
- HRM & Payroll → Documents → Розрахункові листи (
payrollSlips). - Знайди slip людини за період (наприклад
Іванов І.І. — 2026-04). - Action «Recompute days worked» (через 3 крапки меню або кнопка) →
days_workedоновлюється з історії AttendanceLog.
Налаштування FortNet-інтеграції¶
Це лише якщо у твого клієнта вже стоїть стороння СКД (FortNet, Bolid, Sigur). Якщо ні — пропусти цей розділ, ми використовуємо власний картрідер.
- Прохідна та вагова → Процеси → Інтеграції → FortNet СКД.
- Поля налаштувань:
Шлях до CSV-емулятора— у dev-режимі шлях до тестового файлу. У production буде замінено наdb_dsn(адреса БД FortNet).Інтервал pull-у (с)— як часто backend запитує нові події з FortNet.0= тільки manual sync.Увімкнено— глобальний switch.- Після зміни → клацни «Зберегти».
Ручний запуск синхронізації¶
- На сторінці FortNet — кнопка «Синхронізувати зараз» (синя, велика).
- Backend читає всі нові рядки з джерела (CSV/DB), створює GateEvents + AttendanceLog.
- Результат у toast-нотифікації:
success(зелений): усе ок, створено N рядків.partial(помаранчевий): частина створена, частина пропущена. Подивись блок «Історія синхронізацій» — там написано чому (наприклад «employee_not_found: EMP999»).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: Охоронник на пості території¶
Ти — охоронник на внутрішньому пості (вагова, мийка, склад). У руках — планшет / смартфон з відкритим браузером.
- На своєму пристрої відкрий: Прохідна та вагова → Процеси → Пости території → Сканер чекпойнтів.
- Якщо в URL приходить
/.../checkpointScanner/checkpoint_yard_1— пост вже обраний автоматично. Якщо ні — обери у dropdown. - Натисни «Старт сканера» → дозволь камеру.
- Кожен раз як підходить авто, водій показує QR на лобовому склі → камерою наводь → toast
Чекпойнт записано. - У правій панелі — recent scans (останні 8). Можна клацнути
Маршрут→ відкривається timeline візиту.
Що означає Чекпойнт не знайдено¶
- Якщо QR на наклейці пошкоджений (не зчитується) — попроси водія підняти.
- Якщо backend каже
404 not found— це чужий QR (від давнього візиту, який вже закритий) або фейковий QR. Не пропускай.
🛣️ Сценарій 5: Подивитися куди їздило конкретне авто¶
Інспектор / директор / детектив.
- Прохідна та вагова → Документи → Події прохідної → відкрий потрібний event (фільтр
vehicle=AA1234BB,direction=in). - Або через сканер чекпойнтів → recent scans →
Маршрут. - Або вписати в URL:
/gatehouse/gatehouseprocesses/vehicleTrace/<event_id>. - Бачиш Timeline:
- 🚪 Заїзд на територію — gate_main о 14:02
- 📍 Чекпойнт — checkpoint_yard_1 о 14:18 (+16 хв)
- 📍 Чекпойнт — gate_weighbridge о 14:55 (+37 хв)
- 📍 Чекпойнт — checkpoint_yard_1 о 15:30 (+35 хв)
- 🚪 Виїзд з території — gate_main о 16:14 (+44 хв)
- Бейдж зверху:
- 🟠
НА ТЕРИТОРІЇ— авто ще не виїхало, лічильник часу йде. - 🟢
ЗАВЕРШЕНО— повний візит закрився.
📷 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). |