Мобільний застосунок для обходів та чек-листів (Inspections)
Інспектор обходить об'єкт, ставить галочки в паперовому журналі, повертається в офіс, переносить дані в Excel. Фото порушення знімає на особистий телефон та скидає в WhatsApp. Через тиждень потрібно знайти конкретну перевірку — шукають по папках. Це типова картина на виробництві, стройці, в ЖКХ, рітейлі. Мобільний застосунок для обходів не просто цифровізує папір — він створює аудируемую цепочку даних з геометками, фото та часовими штампами.
Що технічно важливо в чек-листах
Конструктор форм
Шаблони обходів мають настроюватися без розробника. Це означає движок динамічних форм: типи запитань — checkbox, radio, text, number, photo, signature, geo_point, barcode_scan, rating_stars. Кожне запитання має required, conditions (показувати якщо попередня відповідь = X) та validation_rules.
На сервері — JSON Schema для опису шаблону. На мобілі — рендерер, що будує UI по схемі. iOS: рекурсивна UITableView з кастомними UITableViewCell під кожен тип. Для conditional visibility — NotificationCenter між ячейками або reactive-підхід через Combine. Android (Compose): LazyColumn з when-switch по question.type, стан в FormViewModel (MVVM).
Фотофіксація з геоштампом
Фото порушення — ключове доказ. До кожного знімку прив'язуємо: координати (CLLocation / FusedLocationProviderClient), timestamp з системних годинників (не EXIF — його можна підробити), inspection_id та question_id. На фото накладаємо watermark з цими даними перед завантаженням.
Watermark на iOS: UIGraphicsImageRenderer — рисуємо текст поверх UIImage. Зберігаємо оригінал та watermarked версію окремо (оригінал для архіву, версія з маркуванням для звіту). Завантаження — presigned S3 URL, як звичайно.
Сканування штрих-кодів та QR
Об'єкт обходу (обладнання, помещение, торгова точка) ідентифікується сканування. iOS: AVCaptureMetadataOutput — нативно, без зайвих бібліотек, підтримує QR, EAN-13, Code-128, DataMatrix. Android: ML Kit Barcode Scanning — швидко, працює офлайн. Flutter: mobile_scanner (обгортка над нативними API).
Після сканування — запит до API об'єкту, подгрузка потрібного шаблону чек-листу. Якщо об'єкт невідомий — створення нового через форму.
Підпис інспектора
Фінальний крок обходу — підпис. UIBezierPath + UIGestureRecognizer на iOS, Canvas + PointerInputScope в Compose. Зберігаємо як PNG з прозорим фоном, вставляємо в PDF-звіт.
Оффлайн-режим — найважливіше
Виробничий об'єкт, підвал, стройка — інтернет нестабільний або відсутній. Застосунок обов'язково має працювати повністю офлайн.
Архітектура: local-first. SQLite зберігає всі шаблони, всі початі та завершені інспекції. Фото зберігаються в локальне сховище з чергою на завантаження. При появі мережі — WorkManager (Android) або BGProcessingTask (iOS) вивантажує чергу.
Конфлікти: якщо шаблон оновився поки інспектор був офлайн — показуємо попередження «шаблон оновлений, хочете перезапустити обхід?». Старий результат зберігаємо з флагом template_version_mismatch.
Синхронізація при reconnect: не перегружаємо мережу — спочатку відправляємо метадані інспекції (дрібні JSON), потім фото у фоні через URLSession.uploadTask з background конфігурацією. iOS умує продовжувати завантаження навіть після force-close застосунку якщо використовується URLSessionConfiguration.background.
Звіт та аналітика
PDF-звіт по завершенні обходу: таблиця з відповідями, фото порушень, підпис інспектора, геомаршрут (якщо включено GPS-трекирование). Генерується на сервері (WeasyPrint або Puppeteer) — клієнт отримує URL.
Дашборд: % виконаних чек-листів по об'єктах, топ порушень, динаміка за період. Для мобіля — спрощена версія (Charts через Swift Charts або MPAndroidChart). Повна аналітика — в веб-панелі.
Терміни
Базовий застосунок (динамічні чек-листи, фото, геометки, оффлайн, PDF-звіт) — 4-8 тижнів. З конструктором шаблонів в веб-панелі, NFC/QR-ідентифікацією об'єктів, підписами, маршрутним треком та дашбордом — 3-4 місяці. Вартість розраховується індивідуально.







