Перейти к содержанию

Справочник таблиц

Полное описание таблиц и колонок (итоговое состояние с учётом всех миграций). Типы — как в 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 issuedclient_marked_paidpaid/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_idnullable (приглашённый сотрудник до привязки)
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 (последний использованный канал)