Реализация TRD §10 / Итерация 1:
- Camunda 7.21 BPMN: client-advocate-main + route-to-department
- Spring Boot 3 воркеры (Java 17): 18 external task handlers,
MockEventProducer, REST API на /api/v1/cases, BPMN auto-deploy
- FastAPI AI-сервис: keyword-based sentiment + pain classifier
- PostgreSQL 15: 5 таблиц по TRD §3 + отдельная БД для Camunda
- Статический дашборд (nginx) с live polling
- 7 синтетических детракторов из PRD §1.2
- docker-compose.yml с Traefik labels:
advocate.telecom.quest → дашборд + API
advocate-camunda.telecom.quest → Camunda Cockpit
60 lines
2.0 KiB
HTML
60 lines
2.0 KiB
HTML
<!doctype html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="utf-8"/>
|
||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||
<title>Адвокат клиента — Дашборд</title>
|
||
<link rel="stylesheet" href="styles.css"/>
|
||
</head>
|
||
<body>
|
||
<header>
|
||
<h1>⚖️ AI-агент «Адвокат клиента»</h1>
|
||
<p class="subtitle">Kazakhtelecom · ДУКО · MVP Iteration 1</p>
|
||
</header>
|
||
|
||
<section class="stats" id="stats">
|
||
<div class="card"><span class="label">Всего кейсов</span><span class="value" id="stat-total">—</span></div>
|
||
<div class="card black"><span class="label">⚫ BLACK</span><span class="value" id="stat-black">—</span></div>
|
||
<div class="card red"><span class="label">🔴 RED</span><span class="value" id="stat-red">—</span></div>
|
||
<div class="card yellow"><span class="label">🟡 YELLOW</span><span class="value" id="stat-yellow">—</span></div>
|
||
<div class="card green"><span class="label">🟢 GREEN</span><span class="value" id="stat-green">—</span></div>
|
||
</section>
|
||
|
||
<main>
|
||
<h2>Активные кейсы</h2>
|
||
<table id="cases-table">
|
||
<thead>
|
||
<tr>
|
||
<th>Приоритет</th>
|
||
<th>Клиент</th>
|
||
<th>Категория</th>
|
||
<th>Обращений</th>
|
||
<th>Статус</th>
|
||
<th>Маршрут</th>
|
||
<th>Тикет</th>
|
||
<th>Sentiment</th>
|
||
<th>Churn</th>
|
||
<th>Дней</th>
|
||
<th></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody id="cases-body">
|
||
<tr><td colspan="11" class="empty">Загрузка…</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</main>
|
||
|
||
<aside id="case-detail" hidden>
|
||
<button id="close-detail">✕</button>
|
||
<h3>Детали кейса</h3>
|
||
<pre id="detail-body"></pre>
|
||
</aside>
|
||
|
||
<footer>
|
||
Polling каждые 5 сек · Camunda: <a href="http://localhost:8080" target="_blank">localhost:8080</a> · API: <a href="/api/v1/cases">/api/v1/cases</a>
|
||
</footer>
|
||
|
||
<script src="app.js"></script>
|
||
</body>
|
||
</html>
|