Initial commit: VKUS vitrina MVP (frontend + backend).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-29 23:13:06 +07:00
commit 862e6b7b25
113 changed files with 50949 additions and 0 deletions
+396
View File
@@ -0,0 +1,396 @@
QUICK_PROMPTS = [
"Проект в ЛИМС не виден",
"VPN не работает",
"Восстановить файл",
"Ошибка в Meridium",
]
IT_SYSTEMS = [
"Meridium 4",
"ЕСУИД",
"1С",
"StarLims",
"ЛИМС",
"ВКУС",
]
GLOSSARY_ANSWERS = {
"есуид": (
"**ЕСУИД** (Единая система управления идентификационными данными) — "
"корпоративная система аутентификации. Через неё вы входите в Meridium, 1С "
"и другие корпоративные приложения. Портал: https://idmoam.sibur.local/identity"
),
"meridium": (
"**Meridium 4** — система управления активами и надёжностью оборудования (APM). "
"Основной URL: https://s001as-apmapp.sibur.local/Meridium/. "
"Отчёты: https://s001as-apmrep.sibur.local/ReportServer"
),
"вкус": (
"**ВКУС** (Витрина корпоративных услуг СИБУРа) — единый сервисный вход "
"для сотрудников: помощь по ИТ-вопросам, создание обращений и отслеживание их статуса."
),
"лимс": (
"**ЛИМС** (Laboratory Information Management System) — лабораторная "
"информационная система для управления образцами и результатами анализов."
),
"starlims": (
"**StarLims** — лабораторная информационная система, используемая на "
"предприятиях СИБУРа для учёта лабораторных исследований."
),
}
KNOWLEDGE_ENTRIES = [
{
"patterns": [
r"meridium.*(вход|войти|логин|парол|авториз)",
r"не могу.*meridium",
r"meridium.*не открыв",
],
"system": "Meridium 4",
"confidence": 85,
"package": {
"recommendation": (
"Для входа в Meridium 4 используется единая учётная запись ЕСУИД. "
"Если основная система не открывается, сначала проверьте доступ к порталу ЕСУИД."
),
"steps": [
"Откройте портал ЕСУИД: https://idmoam.sibur.local/identity",
"Войдите с корпоративными учётными данными",
"Перейдите в Meridium 4: https://s001as-apmapp.sibur.local/Meridium/",
"При ошибке доступа — очистите кэш браузера (Ctrl+Shift+Delete) и повторите вход",
"Если пароль не подходит — запросите сброс через ЕСУИД или создайте обращение",
],
"sources": [
{"title": "Инструкция по входу в Meridium 4", "url": "https://vkus.sibur.local/"},
{"title": "URL систем Meridium", "url": "https://s001as-apmapp.sibur.local/Meridium/"},
],
"colleague_cases": [
{
"summary": "Ошибка «доступ запрещён» после смены пароля",
"outcome": "Помог выход из всех сессий ЕСУИД и повторный вход через режим инкогнито",
},
{
"summary": "Meridium не загружается в Chrome",
"outcome": "Решилось добавлением сайта в доверенные зоны и обновлением браузера",
},
],
"ticket_draft": {
"title": "Проблема с входом в Meridium 4",
"description": "Не удаётся войти в систему Meridium 4. Проверка ЕСУИД и очистка кэша не помогли.",
"system": "Meridium 4",
"priority": "Высокий",
},
},
},
{
"patterns": [
r"есуид.*(парол|сброс|разблок)",
r"сброс.*парол",
r"забыл.*парол",
r"разблокир.*учётн",
],
"system": "ЕСУИД",
"confidence": 90,
"package": {
"recommendation": (
"Пароль ЕСУИД можно сбросить самостоятельно через портал самообслуживания "
"или обратившись в ИТ-поддержку."
),
"steps": [
"Откройте портал ЕСУИД: https://idmoam.sibur.local/identity",
"Нажмите «Забыли пароль?» на странице входа",
"Введите корпоративный логин (формат: ivanov.as)",
"Следуйте инструкциям на экране — ссылка придёт на корпоративную почту",
"При блокировке учётной записи — создайте обращение на разблокировку",
],
"sources": [
{"title": "ЕСУИД — единая система идентификации", "url": "https://idmoam.sibur.local/identity"},
{"title": "Инструкция по сбросу пароля", "url": "https://vkus.sibur.local/"},
],
"colleague_cases": [
{
"summary": "Ссылка для сброса не приходит",
"outcome": "Проверили папку «Спам» и убедились, что почтовый ящик не переполнен",
},
],
"ticket_draft": {
"title": "Сброс / разблокировка пароля ЕСУИД",
"description": "Требуется сброс или разблокировка учётной записи ЕСУИД. Самостоятельный сброс не удался.",
"system": "ЕСУИД",
"priority": "Средний",
},
},
},
{
"patterns": [
r"meridium.*(отчёт|отчет|report)",
r"отчёт.*meridium",
r"apmrep",
r"reportserver",
],
"system": "Meridium 4",
"confidence": 82,
"package": {
"recommendation": (
"Отчёты Meridium 4 формируются на отдельном сервере отчётов. "
"Ошибки часто связаны с правами доступа или недоступностью сервера."
),
"steps": [
"Проверьте доступность сервера отчётов: https://s001as-apmrep.sibur.local/ReportServer",
"Убедитесь, что основной Meridium 4 работает: https://s001as-apmapp.sibur.local/Meridium/",
"Откройте отчёт повторно — дождитесь полной загрузки",
"При ошибке — откройте консоль браузера (F12) и сохраните текст ошибки",
"Если проблема сохраняется — приложите скриншот к обращению",
],
"sources": [
{"title": "Сервер отчётов Meridium 4", "url": "https://s001as-apmrep.sibur.local/ReportServer"},
{"title": "Руководство по отчётам Meridium", "url": "https://vkus.sibur.local/"},
],
"colleague_cases": [
{
"summary": "Ошибка 403 при открытии отчёта",
"outcome": "Потребовалось обновление роли в группе доступа (ГД) — оформили заявку на доступ",
},
],
"warning": (
"В одном из похожих случаев коллеги решили проблему переустановкой браузера, "
"хотя официальная инструкция рекомендует сначала проверить права доступа. "
"Рекомендуем следовать регламенту."
),
"ticket_draft": {
"title": "Ошибка при формировании отчёта Meridium 4",
"description": "При открытии отчёта на сервере s001as-apmrep возникает ошибка. Основной модуль Meridium работает.",
"system": "Meridium 4",
"priority": "Высокий",
},
},
},
{
"patterns": [
r"1[сc].*(медлен|тормоз|долго|загруз)",
r"медленн.*1[сc]",
r"1[сc].*не открыв",
],
"system": "1С",
"confidence": 78,
"package": {
"recommendation": (
"Медленная работа 1С может быть связана с нагрузкой на сервер, "
"сетевым подключением или локальным кэшем клиента."
),
"steps": [
"Перезапустите клиент 1С полностью (закройте все окна)",
"Проверьте подключение к корпоративной сети (VPN, если работаете удалённо)",
"Очистите кэш 1С: удалите папку %APPDATA%\\1C\\1Cv8\\",
"Попробуйте запустить 1С в другое время — утром нагрузка выше",
"Зафиксируйте время возникновения проблемы для обращения в поддержку",
],
"sources": [
{"title": "Рекомендации по работе с 1С", "url": "https://vkus.sibur.local/"},
],
"colleague_cases": [
{
"summary": "1С зависает при открытии базы утром",
"outcome": "Проблема была на стороне сервера — решилась после перезапуска сеансов администратором",
},
],
"ticket_draft": {
"title": "Медленная работа 1С",
"description": "Клиент 1С загружается более 5 минут. Перезапуск и очистка кэша не помогли.",
"system": "1С",
"priority": "Средний",
},
},
},
{
"patterns": [
r"лимс.*(проект|не виден|не отображ)",
r"проект.*лимс",
r"starlims.*(проект|не виден)",
],
"system": "ЛИМС",
"confidence": 80,
"package": {
"recommendation": (
"Если проект не отображается в ЛИМС, чаще всего причина в правах доступа "
"или привязке проекта к вашему подразделению."
),
"steps": [
"Обновите страницу и проверьте фильтры в списке проектов",
"Убедитесь, что выбрано правильное предприятие / площадка",
"Проверьте, что у вас есть роль для просмотра проектов в ЛИМС",
"Уточните у коллег, виден ли проект у других пользователей",
"Если проект новый — возможно, он ещё не синхронизирован, подождите до 24 часов",
],
"sources": [
{"title": "Инструкция по работе с проектами ЛИМС", "url": "https://vkus.sibur.local/"},
],
"colleague_cases": [
{
"summary": "Проект не появился после создания",
"outcome": "Потребовалось обновление роли доступа через заявку в ИТ-поддержку",
},
],
"ticket_draft": {
"title": "Проект в ЛИМС не виден",
"description": "Проект не отображается в списке ЛИМС. Фильтры и обновление страницы не помогли.",
"system": "ЛИМС",
"priority": "Средний",
},
},
},
{
"patterns": [
r"vpn.*(не работ|не подключ|ошибк|обрыв)",
r"не работает.*vpn",
r"впн",
],
"system": "Общее",
"confidence": 75,
"package": {
"recommendation": (
"Проблемы с VPN обычно связаны с сетевым подключением, устаревшим клиентом "
"или истёкшим сертификатом."
),
"steps": [
"Проверьте подключение к интернету",
"Перезапустите VPN-клиент и повторите подключение",
"Перезагрузите компьютер",
"Убедитесь, что используете корпоративный VPN-клиент последней версии",
"Если ошибка сохраняется — сделайте скриншот сообщения об ошибке",
],
"sources": [
{"title": "Инструкция по VPN", "url": "https://vkus.sibur.local/"},
],
"ticket_draft": {
"title": "VPN не работает",
"description": "Не удаётся подключиться к корпоративному VPN. Перезапуск клиента не помог.",
"system": "Общее",
"priority": "Высокий",
},
},
},
{
"patterns": [
r"восстанов.*файл",
r"удалил.*файл",
r"потерял.*файл",
r"вернуть.*файл",
],
"system": "Общее",
"confidence": 72,
"package": {
"recommendation": (
"Восстановление файлов возможно из корзины, резервных копий на сетевом диске "
"или через обращение в ИТ-поддержку."
),
"steps": [
"Проверьте корзину на рабочем столе",
"Если файл был на сетевом диске — проверьте папку «Предыдущие версии» (ПКМ → Свойства)",
"Вспомните точное имя файла и расположение",
"Не сохраняйте новые файлы на диск, где был удалён файл",
"Оформите обращение с указанием пути и времени удаления",
],
"sources": [
{"title": "Политика резервного копирования", "url": "https://vkus.sibur.local/"},
],
"ticket_draft": {
"title": "Восстановление удалённого файла",
"description": "Требуется восстановление удалённого файла. Корзина и предыдущие версии не помогли.",
"system": "Общее",
"priority": "Средний",
},
},
},
{
"patterns": [
r"ошибк.*meridium",
r"ошибк.*меридиум",
r"meridium.*ошибк",
],
"system": "Meridium 4",
"confidence": 80,
"package": {
"recommendation": (
"Ошибки в Meridium 4 могут быть связаны с доступом, сессией ЕСУИД "
"или недоступностью сервера приложения."
),
"steps": [
"Зафиксируйте точный текст ошибки (скриншот)",
"Выйдите из Meridium и войдите заново через ЕСУИД",
"Проверьте доступность: https://s001as-apmapp.sibur.local/Meridium/",
"Очистите кэш браузера и повторите попытку",
"Если ошибка в отчётах — проверьте сервер отчётов отдельно",
],
"sources": [
{"title": "Meridium 4 — основная система", "url": "https://s001as-apmapp.sibur.local/Meridium/"},
{"title": "Руководство пользователя Meridium", "url": "https://vkus.sibur.local/"},
],
"ticket_draft": {
"title": "Ошибка в Meridium 4",
"description": "При работе в Meridium 4 возникает ошибка. Повторный вход не помог.",
"system": "Meridium 4",
"priority": "Высокий",
},
},
},
]
DEFAULT_PROFILE = {
"first_name": "Алексей",
"patronymic": "Петрович",
"last_name": "Смирнов",
"position": "Инженер по надёжности",
"department": "АО «Сибур-Нефтехим»",
}
def get_colleague_cases_for_system(system: str | None, limit: int = 3) -> list[dict[str, str]]:
"""Опыт коллег по системе — для блока self-service при ответах из RAG."""
if not system:
return []
seen: set[str] = set()
cases: list[dict[str, str]] = []
for entry in KNOWLEDGE_ENTRIES:
if entry.get("system") != system:
continue
for case in entry.get("package", {}).get("colleague_cases") or []:
key = case.get("summary", "")
if not key or key in seen:
continue
seen.add(key)
cases.append(case)
if len(cases) >= limit:
return cases
# Дополнительные кейсы для лабораторных систем
extra_by_system: dict[str, list[dict[str, str]]] = {
"ЛИМС": [
{
"summary": "Не удаётся провести переиспытание образца",
"outcome": "Потребовалось проверить статус образца и роль «Проведение переиспытаний»",
},
],
"StarLims": [
{
"summary": "Переиспытание недоступно в карточке образца",
"outcome": "Образец был в статусе «Завершён» — сначала выполнили отмену завершения",
},
{
"summary": "Ошибка при создании переиспытания",
"outcome": "Помогла очистка кэша браузера и повторный вход (не по регламенту)",
},
],
}
for case in extra_by_system.get(system, []):
key = case.get("summary", "")
if key and key not in seen:
seen.add(key)
cases.append(case)
if len(cases) >= limit:
break
return cases[:limit]