User profile
Таблица public.user_profile — профиль и PII пользователя.
Поля
| Поле |
Тип |
Nullable |
Индекс |
Описание |
userId |
int |
нет |
UNIQUE user_profile_user_idx |
FK → users.id |
firstName |
String |
нет |
— |
Имя |
lastName |
String |
нет |
— |
Фамилия |
fullName |
String |
да |
— |
Полное имя (необязательное) |
phone |
String |
нет |
UNIQUE user_profile_phone_idx |
Телефон (открытый) |
phoneMasked |
String |
нет |
— |
Маскированный телефон для UI |
nationalIdNumber |
String |
да |
UNIQUE user_profile_national_id_idx |
Номер удостоверения личности (открытый) |
nationalIdMasked |
String |
да |
— |
Маскированный ID для UI |
languageCode |
String |
нет |
— |
Язык интерфейса (th, en) |
avatarUrl |
String |
да |
— |
URL аватара |
encryptedPii |
ByteData |
да |
— |
AES-256-GCM блоб с PII (имя, дата рождения, адрес и др.) |
encryptPii |
bool |
нет |
— |
Включён ли режим шифрования PII (default: true) |
isLocked |
bool |
нет |
— |
Профиль заблокирован оператором от редактирования |
lockedAt |
DateTime |
да |
— |
Дата блокировки профиля |
accountTier |
String |
нет |
— |
Тир аккаунта (влияет на лимиты) |
accountTierOverriddenByAdmin |
bool |
нет |
— |
Тир задан вручную оператором |
businessName |
String |
да |
— |
Название бизнеса (для merchant/agent) |
taxId |
String |
да |
— |
ИНН / Tax ID (для merchant/agent) |
businessCategoryCode |
String |
да |
— |
Код категории бизнеса |
isVatPayer |
bool |
нет |
— |
Плательщик НДС (default: false) |
termsAcceptedAt |
DateTime |
да |
— |
Дата принятия условий (KYC-флоу) |
tags |
List<String> |
да |
— |
Произвольные теги (оператор) |
referralAgentId |
UuidValue |
да |
— |
ID агента-реферала |
nfcEnabled |
bool |
нет |
— |
Разрешено ли NFC-списание (default: true) |
createdAt |
DateTime |
нет |
— |
Дата создания записи |
updatedAt |
DateTime |
нет |
— |
Дата последнего изменения |
Индексы
| Имя индекса |
Поля |
Уникальный |
user_profile_user_idx |
userId |
да |
user_profile_phone_idx |
phone |
да |
user_profile_national_id_idx |
nationalIdNumber |
да |
PII-поля
| Поле |
Метод защиты |
Примечание |
encryptedPii |
AES-256-GCM шифрование |
Хранит имя, дату рождения, адрес и другие персональные данные из KYC |
nationalIdNumber |
Открытый текст |
Используется для уникальной идентификации; доступен только серверному коду |
nationalIdMasked |
Маскирование |
Отображается в UI (****1234) |
phoneMasked |
Маскирование |
Отображается в UI (+66 ** *** 1234) |
encryptPii |
Флаг |
Если false — PII в открытом виде (режим отладки/миграции); по умолчанию true |