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

Модель данных MCP‑сервера

Здесь собраны сведения о таблицах, с которыми работает MCP‑сервер, и о том, какие сущности они отражают. Код моделей находится в файле mcp-server/prime_lardi/models.py. Ниже приведены все модели и поля с типами и ограничениями.

Important

tg_id (Telegram chat/user id) на практике может быть больше 32‑битного INT, поэтому на уровне MariaDB его стоит хранить как BIGINT и согласовать это между сервисами. Telegram‑бот уже использует BigInteger в своих моделях; в MCP‑сервере тип в ORM указан как Integer, но это не должно быть ограничением на уровне БД.

users

Поле Тип Описание По умолчанию
user_id Integer PK, autoincrement Внутренний идентификатор пользователя. autoincrement
tg_id Integer, unique, nullable Telegram ID (опциональный). NULL
phone String(12), unique, nullable Номер телефона в формате 380XXXXXXXXX. NULL
role Enum("client", "transporter"), nullable Роль пользователя (заказчик/перевозчик). NULL
onec_profile Text, nullable Сериализованный JSON с реквизитами для 1С. NULL
created_at DateTime Время создания записи. now()
updated_at DateTime Время последнего обновления. now() on update

cargo_requests

Поле Тип Описание По умолчанию
id Integer PK, autoincrement Внутренний идентификатор заявки. autoincrement
lardi_request_id Integer, unique, indexed Идентификатор заявки в Lardi. NULL
user_id Integer FK users.user_id, indexed Владелец заявки.
settings_payload Text Исходный JSON payload, отправленный в Lardi.
settings_payload_human Text, nullable Человекочитаемая версия payload. NULL
internal_price Numeric(12,2), nullable Внутренняя сумма для расчёта маржи. NULL
internal_currency String(8), nullable Валюта внутренней суммы. NULL
client_notes Text, nullable Комментарии клиента. NULL
carrier_status Enum("open", "matched", "cancelled") Статус по перевозчику. "open"
created_at DateTime Время создания записи. now()
updated_at DateTime Время последнего обновления. now() on update

transporter_matches

Поле Тип Описание По умолчанию
id Integer PK, autoincrement Идентификатор записи соответствия. autoincrement
lardi_request_id Integer FK cargo_requests.lardi_request_id (CASCADE), indexed Заявка, к которой привязан перевозчик.
user_id Integer FK users.user_id, indexed Перевозчик (users.user_id).
status Enum("pending", "confirmed", "rejected") Статус подтверждения перевозчика. "confirmed"
confirmed_capabilities Text Подтверждённые параметры/условия перевозчика.
transporter_info JSON, nullable Опциональная структурированная информация (например, car и driver), используемая для документов. NULL
created_at DateTime Время создания записи. now()
updated_at DateTime Время последнего обновления. now() on update
Уникальный индекс (lardi_request_id, user_id) Один перевозчик — одна запись на заявку.

dialogue_history

Поле Тип Описание По умолчанию
id Integer PK, autoincrement Идентификатор строки истории. autoincrement
user_id Integer FK users.user_id (CASCADE), indexed Пользователь, которому принадлежит запись.
channel Enum("telegram", "sip") Канал сообщения.
direction Enum("in", "out") Направление: входящее/исходящее.
content_type Enum("text", "transcript", "system", "tool", "other") Тип содержимого. "text"
content Text Текст/транскрипт/системное сообщение.
created_at DateTime Время появления записи. now()

Note

Помимо ORM‑моделей из mcp-server/prime_lardi/models.py, MCP‑сервер использует таблицу request_serials (через raw SQL в инструменте send_docx_form) для выдачи последовательного номера заявки.