Мобільний застосунок для обліку робочого часу
Таблиця в Excel та ручні відмітки в журналі — це не просто незручно, це джерело постійних суперечок між HR та працівниками. «Я прийшов о 9:02, а у вас записано 9:15» — та нічим не докажеш. Мобільний застосунок з геолокованими відмітками вирішує цю проблему, але тільки якщо реалізовано правильно: без можливості відзначитися з дому, з коректною роботою в офлайні та звітами, які одразу йдуть в бухгалтерію.
Відмітка приходу/уходу: технічна чесність
Геофенсинг — основа антифрода. При check-in застосунок перевіряє, що користувач знаходиться в радіусі N метрів від робочого місця. iOS: CLLocationManager з requestLocation() (одиночний замір, економить батарею) — точність kCLLocationAccuracyNearestTenMeters. Android: FusedLocationProviderClient.getCurrentLocation(PRIORITY_HIGH_ACCURACY) з Google Location Services.
Геозони будуються на клієнті (перевірка відстані через CLLocation.distance(from:)) або на сервері (PostGIS ST_DWithin). Серверна перевірка надійніше — клієнтський код можна підробити. Координати при check-in передаються в API, сервер верифікує через PostGIS та повертає статус.
Проблема другого плану — точність GPS в приміщеннях. На першому поверху бізнес-центру похибка може доходити 50-100 метрів. Рішення: комбінація GPS + Wi-Fi fingerprinting. При check-in зберігаємо список видимих Wi-Fi точок (BSSID + RSSI) через NEHotspotHelper (iOS, потребує entitlement) або WifiManager.getScanResults() (Android). Якщо GPS неточен — звіряємось з еталонним fingerprint офісу.
Для строгого контролю — NFC-метки на вході. Працівник прикладає телефон до метки, застосунок читає NFCNDEFReaderSession (iOS) або NfcAdapter (Android) та автоматично фіксує check-in з timestamp. Підробити фізично неможливо.
Офлайн-режим та синхронізація
Стройка, склад, виїзні бригади — інтернет нестабільний. Все відмітки мають зберігатися локально та синхронізуватися при появі мережі.
Локальне сховище: SQLite через Room (Android) або GRDB.swift (iOS). Таблиця time_records: id (UUID, генерується локально), type (check_in/check_out/break_start/break_end), latitude, longitude, wifi_bssids, timestamp, synced (boolean), sync_error.
Фоновая синхронізація: iOS — BGTaskScheduler з BGAppRefreshTask. Android — WorkManager з NetworkType.CONNECTED. При синхронізації — batch upload усіх несинхронізованих записів, на сервері ідемпотентність по client_id.
Важливо: якщо працівник забув відзначитися — потрібна можливість ручної корекції з обов'язковим коментарем та сповіщенням керівнику (push через FCM/APNs).
Таблиця та звіти
Таблиця — зведена таблиця за період. Для кожного працівника: дата, час приходу, час уходу, перерви, итого годин, статус (вчасно/опізнення/переробка). Генерується на бекенді, клієнт отримує paginated JSON.
Експорт: PDF через WeasyPrint/Puppeteer на сервері або Excel через xlsxwriter (Python) / Apache POI (Java). Клієнт скачує файл через URL з short-lived signed token. На iOS — UIDocumentInteractionController для відкриття/шарингу. На Android — FileProvider + Intent.ACTION_VIEW.
Інтеграція з 1С: 1С умує приймати дані через REST API (HTTP-сервіс) або обмін файлами (CSV/XML по розкладу). Для прямої інтеграції потрібен 1С-розробник на стороні клієнта — ми готуємо API з потрібною структурою даних.
Ролі та структура
Три рівні: працівник (бачить свою таблицю, робить відмітки), керівник (бачить таблицю свого відділу, одобрює корекції), HR/бухгалтерія (повний доступ, експорт,設置 графіків). Авторизація — JWT з роллю в payload, перевірка на рівні API middleware.
Графік роботи (змінний, гнучкий, стандартний 9-18) задається в адміністративній частині — мобільний застосунок враховує його при розрахунку опізнень та переробок.
Терміни
Базовий застосунок (GPS check-in/out, таблиця, експорт) — 2-4 тижні. З NFC, Wi-Fi fingerprinting, офлайн-режимом та інтеграцією з 1С — 6-10 тижнів. Вартість розраховується індивідуально: кількість платформ, потрібна чи веб-версія для HR, обсяг інтеграцій з зовнішніми системами.







