Разработка мобильного приложения для обходов и чек-листов (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 configuration. iOS умеет продолжать загрузку даже после force-close приложения если используется URLSessionConfiguration.background.
Отчёт и аналитика
PDF-отчёт по завершении обхода: таблица с ответами, фото нарушений, подпись инспектора, геомаршрут (если включено GPS-трекирование маршрута). Генерируется на сервере (WeasyPrint или Puppeteer) — клиент получает URL.
Дашборд: % выполненных чек-листов по объектам, топ нарушений, динамика за период. Для мобиля — упрощённая версия (Charts через Swift Charts или MPAndroidChart). Полная аналитика — в веб-панели.
Сроки
Базовое приложение (динамические чек-листы, фото, геометки, оффлайн, PDF-отчёт) — 4-8 недель. С конструктором шаблонов в веб-панели, NFC/QR-идентификацией объектов, подписями, маршрутным треком и дашбордом — 3-4 месяца. Стоимость рассчитывается индивидуально.







