# Функциональная документация BalanceServer ## Назначение BalanceServer является backend для приложения Balance — персонального финансового учёта. Он не реализует пользовательский UI. Его задача — безопасно хранить и синхронизировать данные между устройствами. ## Пользовательские данные Синхронизируются: - финансовые операции; - пользовательские категории; - месячные бюджеты; - удаления этих сущностей. ## Multi-device Один пользователь может работать с несколькими устройствами. Пример: ```text iPhone добавил расход ↓ Server ↓ Android получил расход ↓ Mac получил расход ``` ## Offline-first Мобильные приложения сохраняют изменения локально и затем отправляют их серверу. Поэтому сервер должен корректно принимать изменения спустя некоторое время после их создания. ## Delete Удаление является syncable operation, а не только локальным DB delete. Другие устройства должны получить tombstone и удалить локальную запись. ## Privacy Сервер хранит персональные финансовые данные. Поэтому production deployment должен обеспечивать: - TLS; - authentication; - authorization; - encrypted backups; - controlled database access; - минимальное логирование финансовых payloads. ## Клиентская совместимость Backend должен рассматриваться как общий контракт для: - Apple Balance; - Android Balance. Любое изменение протокола требует проверки обеих реализаций.