Есть внутреннее Android-приложение для полевых инспекций (Kotlin, Android 10-14, минимум API 26). Инспекторы работают в зонах без связи, заполняют чек-лист, делают фото, а в конце формируют акт в PDF. Сейчас PDF генерируется на сервере, из-за чего процесс ломается оффлайн. Нужно сделать локальное формирование и подпись PDF на устройстве с последующей синхронизацией при появлении сети. Техническая среда и ограничения - Проект: Kotlin, Gradle Kotlin DSL, MVVM, Coroutines/Flow, Hilt, Room, WorkManager, minSdk 26 - Формат документов: PDF/A не требуется, но PDF должен открываться в Adobe Acrobat без ошибок - Подпись: рукописная подпись стилусом/пальцем + timestamp, а также опциональное наложение на документ изображения печати (PNG с прозрачностью) - офлайн: генерация PDF и постановка задачи на синхронизацию без доступа к сети - Безопасность: исходные фото и подпись нельзя писать в общие каталоги, только app-private storage; временные файлы должны удаляться Что уже есть - экран заполнения чек-листа, локальная база Room с данными обзора и фото, очередь синхронизации на WorkManager - Серверный endpoint принимает готовый PDF в качестве multipart и возвращает serverDocumentId Что нужно сделать - Добавить модуль/пакет для локальной генерации PDF из данных обзора (текстовые поля, таблица пунктов, встроенные фото с масштабированием, нумерация страниц) - Добавить экран сбора подписи: canvas с отслеживанием давления, сглаживанием линий (bezier/kalman или аналог), кнопки очистить/повторить, превью страницы с местом подписи - Реализовать наложение подписи и печати в определенную область последней страницы PDF с корректным масштабом вне зависимости от DPI устройства - Добавить офлайн-очередь: если сети нет, сохранять сгенерированный PDF во внутреннее хранилище, создавать запись в Room, а WorkManager должен отправить документ при появлении сети и проставить serverDocumentId - Добавить базовые инструментальные тесты или проверки, чтобы поймать регрессии поколения (например, что PDF не пуст, содержит ожидаемое количество страниц для большого набора фото) - предоставить краткую документацию для разработчиков в виде README с описанием архитектуры и точек интеграции Измеряемые критерии приемки 1) В режиме полета можно создать акт для обзора с минимум 20 пунктов и 10 фото (по 3-5 МБ каждое), добавить подпись, получить PDF на устройстве без падений и ANR. 2) PDF открывается на ПК в Adobe Acrobat и содержит: заголовок, данные объекта, таблицу пунктов, вложенные фото, номер страницы в формате "X/Y", подпись в заданной области последней страницы. 3) После восстановления сети WorkManager отправляет PDF на сервер, в локальной БД появляется serverDocumentId, а локальный временный файл удаляется (или замечается для очистки, но реально очищается в течение 24 часов). 4) Память: при генерации PDF из 10 фото приложение не вылетает на устройствах с 4 ГБ RAM; большие изображения ресайзуются перед встройкой в PDF. 5) Код собирается в существующем CI (Gradle), без добавления тяжелых зависимостей, существенно увеличивающих APK (согласованный предел +8 МБ). Результат - PR или набор комитов в репозиторий с реализацией генерации PDF, экраном подписи, офлайн-синхронизацией и минимальными тестами, готовый к ревью. Бюджет ограничен, поэтому важна прагматичная реализация без лишнего дизайна, но с надежной оффлайн работой и корректным PDF.