Tender: AI-копилот тендерного менеджера
Multi-tenant B2B SaaS для управления тендерами 44-ФЗ / 223-ФЗ: парсинг zakupki.gov.ru, AI-анализ ТЗ через GigaChat-2-Max, автогенерация коммерческих предложений, win-probability прогноз, изоляция тенантов через PostgreSQL FORCE RLS. 119 backend-роутов, 22 worker-job, семантический поиск через pgvector HNSW 1024-dim + reranker.
Задача клиента
AI-анализ ТЗ и генерация коммерческих предложений
GigaChat-2-Max + reranker + WeasyPrint
Каждое ТЗ парсится: PDF / DOCX / XLSX / DOC / RTF / XML, чанкуется, эмбеддится через Qwen3-Embedding-4B (1024-dim) и сохраняется в pgvector с HNSW-индексом. Семантический поиск по требованиям с rerank через bge-reranker-v2-m3. AI-копилот через GigaChat-2-Max анализирует требования ТЗ, формирует разбивку позиций, оценку рисков, win-probability и автогенерирует коммерческие предложения с экспортом в PDF (WeasyPrint) и DOCX. Cross-process Redis-lock concurrency=1 на тариф API_PERS.
Multi-tenant изоляция через PostgreSQL RLS
Row Level Security FORCE на всех tenant-таблицах
Каждая tenant-таблица помечена ENABLE ROW LEVEL SECURITY + FORCE ROW LEVEL SECURITY. Политики RLS читают app.current_tenant из server-параметра, который выставляется middleware на основе JWT перед каждым запросом. Двухуровневый пул соединений: owner-pool (для миграций и системных операций с BYPASSRLS) и app-pool (без BYPASSRLS, обязан выставить tenant). Изоляция работает на уровне БД даже при ошибке в прикладной логике: невозможно достать чужой ряд даже через SELECT без фильтра.
Worker с 22 cron/interval-jobs
APScheduler + асинхронный SQLAlchemy
Отдельный worker-процесс с 22 job: парсинг новых тендеров с zakupki.gov.ru (интервал 30 мин), обработка attachments всех форматов с очередью retries, AI-анализ ТЗ батчами, генерация KP по запросу, обогащение контрагентов через ЕГРЮЛ / РНП / Fedresurs API, расчёт win-probability с переоценкой при изменении конкурентного ландшафта, deadline-эскалация (T-3 / T-1 / T-0 уведомления), daily-brief по тендерам в 09:00 МСК, drift-detector на отклонения метрик от исторической базы.
Платформенная админка superadmin
Cross-tenant управление, billing, support-тикеты
Отдельная зона /admin/platform для оператора SaaS: CRUD tenants с настройкой quotas / тарифов / fairshare на AI-токены, impersonate любого пользователя любого tenant с audit-trail, cross-tenant billing-метрики (MRR / ARR / Payback / Churn / NRR), система support-тикетов с привязкой к tenant и SLA, system health monitoring (uptime job, queue-depth, AI-latency, ошибки парсинга zakupki.gov.ru), feature-flags на per-tenant basis.
Селдон-style 4-метричный прогноз
Не один win-probability, а четыре независимых метрики: вероятность победы, релевантность ТЗ, маржинальность и интенсивность конкуренции. Каждая метрика рассчитывается отдельным worker-asset'ом с обновлением каждые 6 часов. Цветовые пороги настраиваются через/v1/configбез пересборки фронта.
Объяснимый AI: каждое требование с цитатой из исходного документа
AI не просто говорит «нашёл требование»: указывает страницу PDF и точный фрагмент. Менеджер за секунду проверяет интерпретацию, не открывая 80-страничный документ.
- 1Корпус из конструкционной стали (ГОСТ 27772-2015)
- 2Соответствие ТР ТС 010/2011
- 3Антикоррозийное покрытие минимум 60 мкм
- 4Гарантия не менее 5 лет
- 5Срок поставки до 31 августа 2026
«Все элементы конструкции должны соответствовать ТР ТС 010/2011 «О безопасности машин и оборудования» и иметь действующий сертификат соответствия.»
Kanban-доска со статусами и drag-and-drop
Команда работает в едином pipeline. Native HTML5 drag-and-drop без сторонних библиотек, мобильный fallback на dropdown.
GigaChat анализирует риски и рекомендует цену
Перед выходом на тендер AI оценивает: вероятность штрафов, требования по гарантиям, обеспечению исполнения. Цена рекомендуется на основе истории выигранных / проигранных конкурентами лотов с теми же ОКПД2.
- Штраф за просрочку0.3% в деньнорма не более 0.5%
- Обеспечение исполнения30%повышенный риск
- Срок гарантии36 месяцеввыше рынка
- Форс-мажортиповая формулировка ГК РФстандарт
Интеграции
Битрикс24 / 1С / ЮKassa / ЕГРЮЛ / РНП / Telegram / Email / CalDAV
Архитектура
FastAPI 0.115
Backend, Python 3.13, 119 routes, async SQLAlchemy 2.0
PostgreSQL 17 + pgvector
HNSW 1024-dim, pg_trgm, unaccent, FORCE RLS
Redis 8
Кэш + cross-process lock на GigaChat (concurrency=1)
Worker (APScheduler)
22 cron / interval job: парсинг, AI, эскалация, brief
Next.js 15 + React 19
App Router, Tailwind 4, motion (ex framer-motion), sonner
GigaChat-2-Max
Единственный LLM-провайдер, OAuth + Russian Trusted Root CA
Qwen3-Embedding-4B
Self-hosted llama-server 1024-dim, для семантики ТЗ
bge-reranker-v2-m3
Self-hosted cross-encoder, rerank top-N по релевантности