Мобільний додаток для обходів та чек-листів: розробка під ключ
Інспектор обходить об'єкт, ставить галочки в паперовому журналі, повертається в офіс, переносить дані в Excel. Фото порушення знімає на особистий телефон і скидає в WhatsApp. За тиждень потрібно знайти конкретну перевірку — шукають по папках. Це типова картина на виробництві, будівництві, в ЖКГ, рітейлі. Мобільний додаток для обходів не просто цифровізує папір — він створює ланцюжок даних, що аудирується, з геомітками, фото та часовими штампами. Ми розробляємо такі рішення більше 5 років, наш досвід — понад 30 проєктів для промислових підприємств і торговельних мереж. Працюємо під ключ: від аналітики до релізу в магазинах додатків. Результат: час оформлення однієї інспекції скорочується з 2 годин до 20 хвилин, а втрата даних виключається повністю.
Чому офлайн-режим — обов'язкова умова?
Виробничий об'єкт, підвал, будівництво — інтернет нестабільний або відсутній. Додаток зобов'язаний працювати повністю офлайн. Наша архітектура базується на принципі local-first: SQLite зберігає всі шаблони, розпочаті та завершені інспекції. Фото зберігаються в локальне сховище з чергою на завантаження. При появі мережі — WorkManager (Android) або BGProcessingTask (iOS) вивантажує чергу. Порівняйте: офлайн-синхронізація на SQLite працює в 3 рази швидше, ніж відправка кожного чек-листа по REST одразу — і це без ризику втрати даних при обриві.
Конфлікти: якщо шаблон оновився поки інспектор був офлайн — показуємо попередження «шаблон оновлено, бажаєте перезапустити обхід?». Старий результат зберігаємо з флагом template_version_mismatch. Синхронізація при reconnect: спочатку відправляємо метадані інспекції (дрібні JSON), потім фото в фоні через URLSession.uploadTask з background configuration. iOS вміє продовжувати завантаження навіть після force-close додатку.
Як влаштований конструктор чек-листів?
Шаблони обходів повинні налаштовуватися без розробника. Це означає двигун динамічних форм: типи питань — 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 with when-switch по question.type, стан в FormViewModel (MVVM).
| Платформа | Рендеринг форм | Стан | Conditional visibility |
|---|---|---|---|
| iOS (UIKit) | UITableView + custom cells | Combine / delegate | NotificationCenter |
| iOS (SwiftUI) | List + dynamic ViewBuilder | @State / ObservableObject | .hidden() модифікатор |
| Android (Compose) | LazyColumn + when-switch | ViewModel + StateFlow | if-умова в compose |
Фотофіксація з геоштампом
Фото порушення — ключовий доказ. До кожного знімка прив'язуємо: координати (CLLocation / FusedLocationProviderClient), timestamp з системних годинників (не EXIF — його можна підробити), inspection_id та question_id. На фото накладаємо watermark з цими даними перед завантаженням.
Watermark на iOS: UIGraphicsImageRenderer — малюємо текст поверх UIImage. Зберігаємо оригінал і watermarked версію окремо (оригінал для архіву, версія з маркуванням для звіту). Завантаження — presigned S3 URL, як зазвичай. Об'єм фотофіксації: до 50 знімків за одну інспекцію з середнім розміром 3 МБ.
Сканування штрих-кодів та 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-звіт.
Звіт та аналітика
PDF-звіт після завершення обходу: таблиця з відповідями, фото порушень, підпис інспектора, геомаршрут (якщо включено GPS-трекінг маршруту). Генерується на сервері (WeasyPrint або Puppeteer) — клієнт отримує URL.
Дашборд: % виконаних чек-листів по об'єктах, топ порушень, динаміка за період. Для мобільного — спрощена версія (Charts через Swift Charts або MPAndroidChart). Повна аналітика — у веб-панелі. Порівняйте ручну обробку та автоматизовану:
| Операція | Час (ручна) | Час (авто) |
|---|---|---|
| Заповнення одного чек-листа | 15-30 хв | 3-5 хв |
| Формування звіту | 60-90 хв | 2 хв |
| Пошук даних за період | 30-60 хв | 2-5 сек |
Що входить в роботу
- Мобільний додаток під iOS та Android (нативний або Flutter/React Native)
- Веб-панель адміністратора для керування шаблонами та користувачами
- Конструктор чек-листів з умовною логікою
- Модуль офлайн-синхронізації з чергою завантажень
- Інтеграція з 1С, SAP та іншими системами через REST API
- Навчання співробітників та документація
- Підтримка після запуску (3 місяці безкоштовно)
Етапи розробки
- Аналітика — виявлення бізнес-процесів, прототипування інтерфейсів
- Проєктування — розробка архітектури, JSON Schema шаблонів, вибір стеку
- Реалізація — написання коду, інтеграція камери, геолокації, сканера
- Тестування — перевірка офлайн-режиму, навантажувальне тестування синхронізації
- Реліз — публікація в App Store та Google Play, налаштування CI/CD
Строки
Базовий додаток (динамічні чек-листи, фото, геомітки, офлайн, PDF-звіт) — 4-8 тижнів. З конструктором шаблонів у веб-панелі, NFC/QR-ідентифікацією об'єктів, підписами, маршрутним треком та дашбордом — 3-4 місяці. Вартість розраховується індивідуально.
Зв'яжіться з нами, щоб обговорити ваш проєкт — ми оцінимо його за один робочий день і запропонуємо оптимальне рішення. Замовте консультацію, і ми покажемо, як мобільний додаток знизить час на оформлення інспекцій на 40% та виключить втрату даних.







