Вихідна ситуація - є Android-додаток для польових інженерів (Kotlin, Android 12+, minSdk 26) з авторизацією та базовою навігацією. Зараз дані про виїзди та огляди фіксуються у паперових формах і потім вручну заносяться до системи, через що губляться координати, фото та час. Потрібно додати додаток повноцінний офлайн-first модуль - створення завдання, збір даних на точці, запис треку, прикріплення фото та нотаток, а також надійну синхронізацію на сервер з появою мережі. Технічне середовище - Android Studio, Kotlin, Jetpack (ViewModel, Room, WorkManager), Coroutines/Flow, Hilt, Retrofit/OkHttp. Карта - Mapbox SDK або Google Maps SDK - можна вибрати, але рішення має бути обґрунтоване за обмеженнями нижче. Сервер вже існує, міняти його не можна. API – REST, JSON, HTTPS, токен Bearer. Документацію API буде надано, але в ній немає офлайн-сценаріїв. Що має вийти - релізний модуль у складі поточного проекту, який дозволяє: 1) Відкрити список завдань, завантажити завдання на пристрій та зберігати локально 2) Усередині завдання заповнити форму огляду з валідацією полів, зберегти чернетку локально без мережі 3) Записати GPS-трек під час виїзду та прив'язати до завдання - зберігати локально та відображати на карті 4) Зробити до 10 фото на завдання, стиснути та зберегти локально, показувати прев'ю та прив'язку до часу/координатів 5) Синхронізувати зміни та вкладення на сервер через чергу - з ретраями, дедуплікацією та захистом від дублів при повторному відправленні Обмеження - програма працює в умовах поганого зв'язку та обмеженого живлення, тому фонові завдання повинні бути дбайливими. Не можна додавати важкі сторонні бібліотеки крім стандартних Jetpack та вибраної SDK карти. Не можна вимагати постійної геолокації у фоні - запис треку має коректно працювати у foreground service з повідомленням, а при зупинці запису не утримувати ресурси. Дані повинні переживати перезапуск програми та перезавантаження пристрою. Вимірювані критерії приймання - функціональність має бути відтворена на 2 пристроях - Android 10 та Android 14: - Без мережі можна створити/відредагувати 3 завдання, записати трек щонайменше 2 км і зробити 10 фото на кожне - після перезапуску програми все залишається на місці - При появі мережі синхронізація запускається через WorkManager, довантажує всі зміни та фото, і після успішного відправлення локальні записи отримують позначку synced - Повторна синхронізація не створює дублікатів на сервері під час сценарію - відправка почалася, мережа зникла, користувач повторив відправку - Середній час відкриття екрана завдання з 10 фото - не більше 2 секунд на середньому пристрої (рівень Pixel 4a або аналог) - Помилки синхронізації відображаються людині зрозумілим повідомленням і залишаються в журналі всередині програми щонайменше за останніми 50 операціями Етапи виконання - аналіз поточної архітектури та точок інтеграції, проектування схеми Room та моделі конфліктів, реалізація UI та зберігання, реалізація трекера та карти, реалізація черги синхронізації та ретраїв, покриття ключових частин тестами (мінімум unit-тести для мапінгу та черги), фінальне приймання та інструкції. Результат - PR або набір коммітів у Git з робочим модулем, короткий README з налаштування ключів карти та тестових сценаріїв, список прийнятих припущень за API та офлайн-конфліктів.