Ваши данные

Что мы храним — и чего не храним

Список ниже — все поля из схемы базы: если поля там нет, его нет и у нас. Вне базы — только загруженные вами файлы, технические логи запросов с IP-адресом и браузером, резервные копии на сервере — за последние 14 дней и письма, которые уходят через почтовый сервис.

Что мы храним

Поля из схемы базы

Ниже — то, что реально лежит в PostgreSQL. Названия полей как в схеме.

Аккаунт

модель User

email
Адрес для входа и писем. Уникальный.
password_hash
Хеш пароля (bcrypt). Сам пароль в базу не пишется. Для входа через Google поле может быть пустым.
name
Отображаемое имя в профиле.
avatar_url
Ссылка на загруженный аватар.
email_verified · google_id
Флаг подтверждения почты и идентификатор Google, если вход через Google.
consented_at
Когда вы дали согласие на обработку персональных данных при регистрации.

Подписки

модель Subscription

name
Название подписки, которое вы ввели.
price · currency
Сумма и валюта этой записи. Не курс банка и не выписка — только то, что вы указали.
billing_cycle
Период: daily, weekly, monthly или yearly.
next_billing_date
Дата следующего продления — для списка и календаря.
status
active, paused или cancelled. Пауза сохраняет историю.
category_id · color
Своя категория (модель Category: name, icon, color) и цвет подписки — фон иконки без логотипа и отметка в календаре. Есть также необязательное description.
icon_url
Ссылка на иконку сервиса, если вы её загрузили.
created_at · updated_at
Когда запись создана и когда менялась последний раз.
deleted_at
Время удаления. Подписка скрывается из приложения и хранится ещё 90 дней, затем стирается автоматически. При удалении аккаунта — сразу.

Журнал безопасности

таблица audit_logs

user_id
Аккаунт, с которым связано событие. Журнал помогает выявлять подозрительные входы и разбираться в случаях несанкционированного доступа. В интерфейсе он не показывается.
action
Тип события: вход по паролю или через Google, неудачная попытка входа по паролю в существующий аккаунт, смена пароля в профиле или сброс пароля. Попытки входа с неизвестной почтой не записываются.
ip_address
IP-адрес, с которого произошло событие.
user_agent
Сведения о браузере (User-Agent).
created_at
Время события. Записи хранятся 90 дней, затем стираются автоматически. При удалении аккаунта — сразу.

Настройки

модель UserPreferences

уведомления
Флаги: email_notifications, push_notifications, payment_reminders, price_change_alerts, weekly_report, marketing_emails. Это только настройки: писем по ним сервис пока не отправляет.
currency · language · timezone
Базовая валюта для итогов. Язык и часовой пояс пока только сохраняются.
theme · compact_mode
Тема (light / dark / system) и флаг компактного списка — сам режим пока не сделан.

Ещё в схеме — служебные поля и токены

id, связи между записями и даты создания и изменения. refresh_tokens (сессия), password_reset_tokens и email_verification_tokens — записи для входа и подтверждения почты, у каждой свой срок действия. Не данные подписок.

Чего мы не храним

Банка у нас нет — и не будет из коробки

Это не политика, которую можно «включить обратно». В коде нет интеграции с банком или open-banking — отключать нечего.

Как данные уходят

Выгрузка и удаление — в продукте

При удалении подписка скрывается из приложения и хранится ещё 90 дней, затем стирается автоматически. Сразу после удаления её можно вернуть кнопкой «Вернуть». Чтобы стереть удалённую подписку раньше, удалите аккаунт или напишите оператору.

Чего ещё нет

Вопросы, на которые честный ответ — «нет»

То, что спрашивает закупщик. Сроков здесь нет — только факт: этого в продукте сейчас нет.