Модель данных 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) для выдачи последовательного номера заявки.