Справочник таблиц¶
Полное описание таблиц и колонок (итоговое состояние с учётом всех миграций). Типы — как в Laravel-blueprint. FK указаны в примечаниях.
Соглашения
Почти все доменные таблицы содержат id (PK) и created_at/updated_at (timestamps). agent_id — FK на agents (мультиарендность). Денежные суммы — decimal(14,2); курсы — decimal(10,4).
Арендаторы, СРМ-тарифы, доступ¶
agents — посредник (арендатор)¶
| Колонка | Тип | Примечание |
|---|---|---|
name |
string | Название организации |
logo |
string? | Логотип |
agent_pub_id |
string, unique | Публичный идентификатор |
subdomain |
string?, unique | Поддомен {sub}.test142.ru |
email |
string, unique | Email владельца |
password |
string | Хэш пароля |
phone |
string? | Телефон |
payment_password_hash |
string? | Платёжный пароль |
card_master_hash |
string? | Мастер-пароль доступа к картам |
crm_tariff_id |
FK? crm_tariffs | Текущий тариф СРМ |
crm_tariff_until |
dateTime? | Действует до |
balance_cny |
decimal | Баланс СРМ в ¥ |
status |
string = moderation |
moderation / active |
email_confirmed |
bool | — |
main_currency |
string(8) = RUB |
Основная валюта заказов |
default_locale |
string = ru |
Язык |
chat_signature |
string? | Автоподпись в чате |
checklist_done |
json? | Выполненные шаги чек-листа |
agent_staff — сотрудники посредника¶
| Колонка | Тип | Примечание |
|---|---|---|
agent_id |
FK agents | Арендатор |
group_id |
FK? access_groups | Группа прав |
name |
string | — |
email |
string, unique | — |
password |
string, nullable | Хэш (nullable — первый вход) |
phone |
string? | — |
telegram_id / max_id |
string? | Привязки мессенджеров |
status |
string = enabled |
enabled / disabled |
confirmed |
bool | Подтверждён |
last_ip |
string? | Последний IP |
last_seen_at |
timestamp? | Онлайн-индикатор |
remember_token |
string? | — |
crm_tariffs — тарифы СРМ¶
| Колонка | Тип | Примечание |
|---|---|---|
code / name |
string | Код / название |
status |
string(16) = active |
active / archived |
price_cny_month |
decimal | Месячная плата, ¥ |
staff_limit |
int | Лимит сотрудников |
free_items_per_order |
int | Бесплатных товаров в заказе |
free_orders |
int | Бесплатных заказов |
over_order_cny |
decimal | Плата за заказ сверх лимита |
over_item_cny |
decimal | Плата за товар сверх лимита |
intro_days |
int | Пробный период |
features |
json? | Список фич тарифа |
crm_charges — аудит списаний по тарифу СРМ¶
| Колонка | Тип | Примечание |
|---|---|---|
agent_id |
FK agents | — |
crm_tariff_id |
FK? crm_tariffs | — |
order_id |
FK? orders | Для over_* — уникален (анти-дубль) |
kind |
string(24) | subscription / over_order / over_item / renew_downgrade |
amount_cny |
decimal | Сумма |
period_start |
dateTime? | — |
meta |
json? | {orders_in_period, items, items_over, …} |
agent_invoices — счета СРМ посреднику¶
| Колонка | Тип | Примечание |
|---|---|---|
agent_id |
FK agents | — |
amount_cny |
decimal | Сумма в ¥ |
amount_rub |
decimal? | Сумма в ₽ (информативно) |
purpose |
string = topup |
topup / subscription |
method |
string = cash |
cash / card |
status |
string = issued |
issued / paid / canceled |
confirmed_by |
FK? srm_admins | Кто подтвердил |
paid_at |
timestamp? | — |
srm_admins — администраторы СРМ¶
name, email (unique), password, remember_token, timestamps. RBAC: is_super (полный доступ) + permissions (json — права по разделам админки).
access_objects — объекты доступа¶
| Колонка | Тип | Примечание |
|---|---|---|
code |
string | Код объекта (unique с side) |
title |
string | Название |
side |
string | agent / client |
group_label |
string? | Раздел матрицы (ДОСТУПЫ/ЗАКАЗЫ/…) |
access_groups — группы прав¶
| Колонка | Тип | Примечание |
|---|---|---|
agent_id |
FK? agents | NULL — эталонная группа |
side |
string(8) = agent |
agent / client |
client_id |
FK? clients | Для клиентских групп |
name |
string | — |
is_reference |
bool | Эталонная (клонируется посредникам) |
access_group_permissions — матрица прав¶
| Колонка | Тип | Примечание |
|---|---|---|
group_id |
FK access_groups | — |
object_id |
FK access_objects | unique с group_id |
can_view / can_add / can_edit / can_delete |
bool | Уровни |
scope |
string = own |
own / foreign / all |
Клиенты и тарифы¶
users — пользователь (телефон)¶
| Колонка | Тип | Примечание |
|---|---|---|
phone |
string, unique | Нормализованный телефон |
name |
string? | — |
email |
string?, nullable | Опционально |
password |
string? | Для входа по паролю |
telegram_id / max_id |
string? | Привязки |
default_locale |
string = ru |
— |
timezone |
string = Europe/Moscow |
Часовой пояс |
preferred_channel |
string = telegram |
Канал связи |
last_seen_at |
timestamp? | Онлайн |
clients — клиент посредника¶
| Колонка | Тип | Примечание |
|---|---|---|
agent_id |
FK agents | — |
name |
string? | — |
client_code |
string? | Код клиента (на этикетках, складе) |
phone |
string | — |
status |
string = active |
— |
tariff_id |
FK? client_tariffs | — |
assigned_manager_id |
FK? agent_staff | Закреплённый менеджер (scope own) |
warehouse_address |
string? | Адрес склада (самовыкуп) |
locale |
string = ru |
— |
display_currency |
string(8)? | Валюта отображения |
client_memberships — связь пользователь ↔ клиент¶
| Колонка | Тип | Примечание |
|---|---|---|
user_id |
FK users | unique с client_id |
client_id |
FK clients | — |
role |
string = employee |
owner / employee |
group_id |
FK? | Группа прав клиента |
invite_hash |
string?, unique | Реф-приглашение сотрудника |
confirmed |
bool | — |
client_tariffs — тарифы клиента¶
| Колонка | Тип | Примечание |
|---|---|---|
agent_id |
FK agents | — |
name |
string | — |
sites |
string? | Сайты (legacy) |
type |
string = order_commission |
Тип тарифа |
min_order_cny |
decimal | Минимальный заказ |
first_order_pct |
decimal(6,2) | Комиссия первого заказа |
archived |
bool | — |
client_subtariffs — подтарифы по сайтам¶
| Колонка | Тип | Примечание |
|---|---|---|
tariff_id |
FK client_tariffs | — |
name |
string = Основной |
— |
is_default |
bool | «Основной» (wildcard, если не подошёл другой) |
sites |
json? | Коды сайтов или NULL = все |
sort |
int | — |
client_tariff_steps — ступени комиссии¶
| Колонка | Тип | Примечание |
|---|---|---|
tariff_id |
FK client_tariffs | — |
subtariff_id |
FK? client_subtariffs | Шаги переехали на подтариф |
from_cny |
decimal | Порог «От ¥» |
pct |
decimal(6,2) | Комиссия на ступени |
client_addresses / client_recipients¶
client_addresses: client_id, country, city, street, house, apartment.
client_recipients: client_id, last_name, first_name, middle_name?, phone?, passport?.
messenger_contacts — телефон ↔ мессенджер¶
phone (unique), telegram_chat_id?, max_chat_id?, name?. Заполняется вебхуками до создания user (для доставки OTP).
Заказы¶
orders — заказ¶
| Колонка | Тип | Примечание |
|---|---|---|
agent_id |
FK agents | — |
client_id |
FK clients | — |
order_no |
string? | Номер заказа |
type |
string = standard |
standard / self_buyout / free |
currency |
string(8) = CNY |
Валюта заказа |
currency_changed |
bool | Флаг ручной смены валюты |
status |
string = draft |
См. OrderStatus (раздел Заказы) |
manager_id |
FK? agent_staff | Менеджер заказа |
dest_country / dest_city |
string? | Назначение |
cell |
string? | Складская ячейка |
private_name |
string? | Приватное имя заказа |
private_comment |
text? | Комментарий (клиент не видит) |
comment_to_agent |
text? | Комментарий посреднику |
grouping_mode |
bool | Режим группировки |
tariff_calc_id |
FK? client_tariffs | Тариф расчёта |
order_items — позиции заказа¶
| Колонка | Тип | Примечание |
|---|---|---|
order_id |
FK orders | — |
group_id |
FK? item_groups | Группа консолидации |
seq_no |
int | Номер клиента (неизменен) |
name |
string? | Наименование |
name_i18n |
json? | Перевод наименования |
price |
decimal | Цена (клиент) |
agent_price |
decimal? | Переопределение посредника |
qty |
int | Кол-во (клиент) |
agent_qty |
int? | Переопределение посредника |
china_delivery |
decimal | Доставка по Китаю (клиент) |
agent_china_delivery |
decimal? | Переопределение посредника |
size / color |
string? | — |
url |
text? | Ссылка на товар |
image |
string? | Фото |
comment |
text? | Комментарий клиента |
hidden_comment |
text? | Скрытый комментарий |
check_status |
string = await_process |
Статус проверки |
buyout_status |
string = await_buyout |
Статус выкупа |
buyout_qty |
int? | Сколько выкуплено |
arrival_status |
string = await_arrival |
Статус прибытия |
arrival_qty |
int? | Сколько прибыло |
return_status / return_qty / return_comment |
— | Возврат денег |
goods_return_status |
string = none |
Логистический возврат: none/processing/returned |
goods_return_qty / goods_return_comment |
— | — |
sort |
int | Порядок |
item_groups — группы консолидации¶
| Колонка | Тип | Примечание |
|---|---|---|
order_id |
FK orders | — |
name |
string? | Название группы |
platform_order_id |
string? | ИД заказа на площадке |
seller |
string? | Магазин/продавец |
buyout_account_id |
FK? buyout_accounts | Выкупной аккаунт |
actually_paid |
decimal? | Фактически оплачено |
group_delivery |
decimal | Доставка на группу |
group_delivery_enabled |
bool | Применять доставку на группу |
track_numbers |
json? | Трек-номера |
credit_toggle |
tinyint (0/1/2) | Кредит: выкл/на контроле/выполнено |
credit_date |
date? | — |
discount_toggle |
tinyint (0/1/2) | Скидка: тройной переключатель |
discount_value |
decimal? | Размер скидки |
discount_comment |
text? | Комментарий к скидке |
discount_files |
json? | Файлы к скидке |
color |
(string) | Цвет группы (авто-палитра) |
sort |
int | — |
order_calc_snapshots — снимок расчёта¶
order_id, fixed_rate_cny (курс на момент), goods_sum, delivery_sum, services_sum, commission, total, snapshot (json).
order_status_history¶
order_id, status, changed_by (FK? agent_staff), changed_at.
order_activities — журнал событий¶
order_id, event (status/item/shipment/delivery/refund/group/payment), description, actor_type (agent/client/system), actor_name, actor_id.
Логистика¶
shipments — отгрузка¶
| Колонка | Тип | Примечание |
|---|---|---|
order_id |
FK orders | — |
shipment_no |
int | Порядковый в заказе |
display_no |
string | <order_no>_<shipment_no> |
category |
string? | Категория |
status |
string = cost_not_calculated |
См. ShipmentStatus |
manager_id |
FK? agent_staff | — |
weight_kg / volume_cm / places |
— | Вес / объём / места |
recipient / recipient_passport / recipient_country |
string? | Получатель |
delivery_method_id / packaging_id / insurance_id |
FK? | Простые справочники (legacy) |
country_id / city_id |
FK? | Каталог стран/городов |
cargo_method_id / cargo_speed_method_id |
FK? | Способ доставки + скорость |
dlv_packaging_id / dlv_insurance_id |
FK? | Упаковка / страховка (расширенные) |
delivery_mode |
string(16)? | delivery / pickup |
transport_company_id / pickup_point_id |
FK? | ТК / пункт самовывоза |
client_address_id / client_recipient_id |
FK? | Адрес / получатель клиента |
rate_cny_snapshot / rate_usd_snapshot / usd_cny_snapshot |
decimal? | Снимки курсов |
delivery_calc |
json? | Расчёт доставки |
calc_valid_until |
dateTime? | Срок действия расчёта |
delivery_filled_at |
timestamp? | Первое сохранение → упрощённый режим |
arrived_at |
timestamp? | Для авто-приёмки через 30 дней |
problem_reported_at |
timestamp? | Клиент пометил «Проблема с грузом» |
shipping_currency |
string(8)? | Валюта оплаты доставки |
shipment_items / shipment_services¶
shipment_items: shipment_id, order_item_id, qty (SUM по позиции ≤ order_item.qty).
shipment_services: shipment_id, kind (delivery/insurance/custom), name, calc_mode (flat/per_kg/fixed/percent/amount), value, currency (CNY/USD/RUR), pay_on_receipt, enabled, sort.
deliveries / delivery_shipments / delivery_history¶
deliveries (груз): agent_id, title?, status = formed (см. Delivery-state), track_no?, manager_id?.
delivery_shipments: delivery_id, shipment_id (unique — отгрузка не более чем в одном грузе).
delivery_history: delivery_id, event, changed_by?, created_at.
Каталоги доставки (слой agent_id=NULL → системный)¶
| Таблица | Ключевые колонки |
|---|---|
delivery_countries |
name, flag, sort, active |
delivery_cities |
country_id, name, sort, active |
cargo_methods |
country_id?, name, price_per_kg, price_currency, term_text, forbidden_url, info |
cargo_speed_methods |
cargo_method_id, name, term_text, price, price_currency |
delivery_packagings |
name, price, price_currency, unit (place/cube), description, photos_url |
delivery_insurances |
name, price, price_currency, description |
delivery_transport_companies |
country_id?, name, logo_url, track_url |
delivery_pickup_points |
country_id?, city, name, address |
agent_catalog_disables |
catalog_type, catalog_id (отключение системного дефолта у посредника) |
Legacy-справочники
Таблицы delivery_methods, packagings, insurances, transport_companies, pickup_points — старые простые справочники. Оставлены для совместимости; новый флоу доставки использует таблицы delivery_* и cargo_*.
Финансы¶
client_balance_accounts / balance_ops¶
client_balance_accounts: client_id, currency (RUR/CNY), balance (unique client+currency).
balance_ops (единый леджер): client_id, account_id, currency, op_type (income/expense), amount (со знаком), balance_after, order_id?, shipment_id?, invoice_id?, comment?, created_by?.
invoices — счёт-реквизиты¶
| Колонка | Тип | Примечание |
|---|---|---|
order_id |
FK orders | — |
chat_id |
FK? chats | — |
method |
string | card / cash / payment_agent |
card_id |
FK? payment_cards | — |
amount_cny |
decimal | — |
rate_cny |
decimal(10,4) | Курс |
amount_rur |
decimal? | Информативно |
reqs_ttl_hours |
int = 24 | Срок реквизитов |
status |
string = issued |
issued → client_marked_paid → paid/inactive |
onetime_password |
string? | Одноразовый пароль карты |
agent_bank |
string? | Банк |
cn_payment_system / cn_recipient_reqs |
string? | Кошелёк Alipay/WeChat (информативно) |
paid_confirmed_at / confirmed_by |
— | Подтверждение |
requisite_codes — короткие коды реквизитов¶
agent_id, order_id, client_id?, card_id?, invoice_id?, code (unique, короткий), method (card/cash/agent_pay), amount_cny, amount_rur, rate_cny, expires_at, viewed_at?. Просмотр клиентом по /r/{code} без логина.
payment_cards / buyout_accounts / buyout_sites¶
payment_cards: agent_id, holder, number_enc (шифрованный номер), status.
buyout_accounts: agent_id, login, site, note?, archived.
buyout_sites: agent_id?, code, name, active, sort (каталог сайтов выкупа).
Курсы валют¶
rates: agent_id, base=CNY, quote=RUB, value (₽ за 1 ¥), mode (manual/auto), source (manual/cbr/bestchange), markup_pct, updated_by? (unique agent+base+quote).
rate_steps (ладдер): agent_id, kind (order/topup), from_cny (порог), rate, sort.
agent_rate_settings: agent_id (unique), accept_mode (self/bestchange), usd_rub, usd_cny (кросс), rate_validity_hours, delivery_short, delivery_terms, delivery_cost.
currencies / agent_currencies¶
currencies: code (unique), symbol, name, decimals, active, sort.
agent_currencies: agent_id, code, is_main, rate_to_cny (0 = брать из RateService), sort (unique agent+code).
wallet_topups — пополнение Alipay/WeChat¶
agent_id, client_id, system (alipay/wechat), wallet_number, amount, status (pending/paid), paid_at?. Не влияет на баланс — отдельная история.
bestchange¶
bestchange_changers: id (внешний PK), name?, active, checked (курирует админ), priority, data (json), updated_at.
bestchange_rates: code (направление), changer, rate, inmin, inmax (bigint!), updated_at (unique code+changer).
Чат¶
chats¶
agent_id, client_id?, order_id?, type = order, client_can_reply (флаг «не требует ответа»), agent_read_at / client_read_at (метки прочтения).
messages¶
chat_id, sender_type (agent/client/system), sender_id?, body, meta (json: реакции, файлы, перевод tr, internal/to_staff_id, reply_to, edited_at), created_at.
Локализация и сервис¶
translations — локальный словарь (overlay)¶
key (unique), ru, en, cn, is_long (длинные тексты, не перезатираются pull'ом), group?.
translation_cache — кэш автопереводов Google¶
hash (sha1 исходника), target (ru/en/cn), source?, text (перевод), unique hash+target.
checklist_steps — стартовый чек-лист посредника¶
key (unique), title, description?, link?, sort, is_active. Управляется в админке; отметки выполнения — в agents.checklist_done.
agent_preferences — настройки посредника (singleton)¶
| Группа | Колонки |
|---|---|
| Базовое | agent_id (unique), timezone, working_hours (json) |
| Уведомления | notify_new_order, notify_order_paid, notify_shipment, notify_status_changed |
| Каналы | channel_telegram, channel_max, channel_email |
| Общее | assign_clients_to_managers, default_client_tariff_id, client_terms |
| Alipay/WeChat | alipay_enabled, alipay_simplified |
| Категории заказов | order_cat_standard, order_cat_self, order_cat_free |
| Самовыкуп | self_pay_enabled, self_pay_warehouse, self_pay_phone, self_pay_recipient |
| Приём оплаты | pay_cards, pay_cash, pay_agents |
app_settings — глобальные настройки приложения¶
key (unique), value. Простой key-value стор, управляется в Filament (AppSettingsPage).
Доп. услуги к товарам и медиа¶
См. модуль Доп. услуги к товарам.
services — каталог услуг¶
agent_id? (NULL — системная), code (photo/video/measure/recount), name + name_i18n (json), icon, media_kind (photo/video/none), active, sort.
agent_service_settings / agent_service_prices¶
agent_service_settings: agent_id, service_id, enabled, mode (free/paid). Unique agent+service.
agent_service_prices: agent_id, service_id, currency (валюта заказа), price. Unique agent+service+currency.
order_item_services — услуга на позиции¶
order_item_id, service_id, status (ordered/rendered/canceled), qty, free, unit_price + currency (снимок), paid_amount, comment, rendered_at/rendered_by, canceled_at.
service_media / service_upload_tokens¶
service_media: order_item_service_id? / order_item_id?, extra_photo (доп. фото вне услуги), kind (photo/video), path, url, hidden_from_client, sort, uploaded_via (desktop/phone).
service_upload_tokens: token (unique), привязка к услуге/позиции, kind, expires_at — публичная загрузка медиа с телефона (/su/{token}).
Уведомления, заметки, пополнения¶
custom_notifications — кастомные уведомления¶
agent_id? (NULL — глобальное от СРМ), active, audience (clients/…), display_method (header/…), name? (внутреннее), text, detail_text?, start_at/end_at, dismissible. См. Доп. модули.
notes — заметки сотрудников¶
agent_id?, staff_id?, notable_type (order/item/group/shipment/delivery/client/personal), notable_id, body. Unique agent+notable_type+notable_id.
topup_requests — запросы пополнения по заказу¶
order_id, agent_id?, client_id?, amount_cny, status (pending/fulfilled). Создаётся при «Запросить пополнение» в заказе (см. Финансы).
extension_tokens — токены Chrome-расширения¶
user_id, name (метка устройства), token_hash (sha256 — сам токен показывается один раз), last_used_at, last_ip. Авторизация клиентского Chrome-расширения.
Страны, категории товаров, фавиконы¶
agent_countries — справочник стран посредника¶
name, flag (эмодзи), currency_code (нац. валюта, предлагается в онбординг-мастере), sort, active. Отдельный справочник стран работы посредника (вместо delivery_countries для agents.home_country_id / work_country_ids).
product_categories — категории товаров¶
agent_id? (NULL — системная, видна всем), name, sort, active. Плюс order_items.product_category — категория позиции. Системные категории засеяны (одежда/обувь/стройматериалы и пр.).
site_favicons — кэш фавиконов площадок¶
domain (unique), path (в public-диске), ok (удалось ли получить), fetched_at. Кэш иконок сайтов товаров (фавикон-прокси).
feedback_tickets — тикеты обратной связи¶
Кнопка обратной связи у посредника/клиента создаёт тикет со скриншотом и контекстом страницы; обрабатывается в админке.
| Колонка | Назначение |
|---|---|
agent_id? |
Посредник (если есть) |
reporter_type / reporter_id? / reporter_phone? / reporter_name? |
Кто отправил |
category? |
Категория обращения |
url / route / page_component |
Где (адрес, маршрут, Vue-страница) |
element_selector / element_text |
Помеченный элемент |
viewport / user_agent / locale |
Окружение |
screenshot_path |
Скриншот (html2canvas) |
comment_original / comment_lang / comment_ru |
Текст обращения + автоперевод на RU |
status (new…) / priority |
Состояние и приоритет |
assigned_admin_id? |
Ответственный админ |
our_note |
Внутренняя заметка |
reply_text / reply_sent_at |
Ответ автору (отправляется в мессенджер) |
resolved_at / resolved_notified |
Решение и уведомление автора |
Изменения существующих таблиц (ещё позже)¶
| Таблица | Добавленные колонки |
|---|---|
orders |
title (Название заказа), seen_at (просмотрен посредником), auto_group_disabled (отключить автогруппировку), manual_commission_pct / manual_rate (ручные переопределения комиссии/курса по заказу) |
order_items |
client_comment (комментарий клиента), delivery_refunded (доставка возвращена), product_category |
item_groups |
paid_basis (база «фактически оплачено») |
clients |
overdraft_limit (лимит овердрафта баланса) |
shipments |
currency_rates (json — снимок курсов на момент расчёта) |
agent_rate_settings |
services_currency (валюта доп. услуг) |
topup_requests |
order_id → nullable + currency + note (пополнение баланса вне заказа) |
buyout_sites |
icon_url, match_keys (ключи распознавания ссылки для автогруппировки) |
RUR → RUB
Миграцией unify_rur_to_rub код валюты RUR унифицирован в RUB во всех таблицах (счета, кассы, услуги, счёт-фактуры). В описаниях ниже по тексту возможны старые упоминания RUR — актуальный код RUB.
Изменения существующих таблиц (поздние миграции)¶
Колонки, добавленные доработками (мультивалютность, профили, медиа, онбординг):
| Таблица | Добавленные колонки |
|---|---|
agents |
card_master_salt, home_country_id, work_country_ids (json), onboarding (json) |
agent_staff |
chat_signature, timezone, preferred_channel, avatar |
users |
avatar |
clients |
currency (валюта клиента) |
client_tariffs |
first_order_commission_enabled (вкл/выкл комиссию первого заказа) |
client_memberships |
user_id → nullable (приглашённый сотрудник до привязки) |
order_items |
client_group (группа от клиента) |
item_groups |
sort |
invoices |
base_currency, pay_currency, auto_convert (мультивалютный счёт) |
rate_steps |
from_cur, to_cur (валютная пара ступени — мультивалютные ладдеры) |
agent_rate_settings |
delivery_base (базовая валюта доставки) |
payment_cards |
number_scheme (app/…), last4 |
requisite_codes |
number_enc, otp_salt, otp_hash, holder (OTP-защита просмотра реквизитов) |
delivery_countries |
currency_code |
messenger_contacts |
last_channel (последний использованный канал) |