lct-hack/backend/app
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ivan Gerasimov 7212251112 feat: классификатор ЕКП — признаки вместо выбора службы (lct-32)
Оператор системы-112 службу не выбирает: он проставляет формализованные
признаки происшествия, комбинация признаков даёт код ЕКП, а коду соответствует
список оповещения, который система собирает сама (docs/spec/DATASET.md).
Прежняя модель с полем dds из пяти значений оценивала действие, которого
в боевой работе нет.

- scripts/import_ekp.py (make ekp): книга заказчика → app/domain/ekp.json,
  1283 кода, 61 служба, 23 группы. Разовый импорт, результат под гитом:
  читать xlsx в рантайме — лишняя зависимость и полсекунды на старте.
- domain/ekp.py: справочник с ленивой загрузкой, каскад значений признаков,
  список оповещения с модификаторами (нет доступа, угроза людям, пострадавшие,
  газификация и ещё десяток).
- КИО: поля signs, incident_code, notify. Последние два только на чтение
  и пересчитываются при каждой правке признаков; добавленная вручную служба
  не теряется, удалить службу нельзя — как в боевом АРМ.
- GET /api/ekp/signs отдаёт один уровень признаков, а не дерево на полмегабайта.
- Карточка на фронте: три каскадных селектора вместо выбора службы.
- Оценка: метрика incident_signs (E2, маршрутизация). Для размеченных сценариев
  dds_choice больше не считается — список оповещения производен от признаков,
  и штрафовать за него отдельно значит наказать дважды за одну ошибку.

Разбор книги оказался основной работой: имя службы лежит то в первой строке
заголовка, то во второй, то склеено с модификатором; «Классификатор МЧС» —
заголовок группы колонок, а не служба. Правила разбора в докстринге импорта.

113 тестов зелёных (14 новых в tests/test_ekp.py), make typecheck чистый.
2026-09-19 20:11:50 +03:00
..
api feat: классификатор ЕКП — признаки вместо выбора службы (lct-32) 2026-09-19 20:11:50 +03:00
db lct-05: состояние сессии, таймеры по событиям, четыре канала 2026-09-16 02:07:27 +03:00
dialog lct-07 и lct-19: звонящий на LLM, офлайн-таблица, предгенерация 2026-09-17 23:50:19 +03:00
domain feat: классификатор ЕКП — признаки вместо выбора службы (lct-32) 2026-09-19 20:11:50 +03:00
scenarios feat: классификатор ЕКП — признаки вместо выбора службы (lct-32) 2026-09-19 20:11:50 +03:00
scoring feat: классификатор ЕКП — признаки вместо выбора службы (lct-32) 2026-09-19 20:11:50 +03:00
session lct-20: АРМ диспетчера ДДС и цепочка 112 → ДДС 2026-09-17 21:45:47 +03:00
voice lct-07 и lct-19: звонящий на LLM, офлайн-таблица, предгенерация 2026-09-17 23:50:19 +03:00
__init__.py каркас: домен, генерация типов фронта, стенд и карточки задач 2026-09-15 19:35:03 +03:00
config.py lct-06: голосовой контур VAD → STT → звонящий → TTS, с перебиванием 2026-09-17 15:04:17 +03:00
main.py feat: классификатор ЕКП — признаки вместо выбора службы (lct-32) 2026-09-19 20:11:50 +03:00