9.5 KiB
1C Company Intelligence для AW-rus
Этот слой строится поверх clickhouse-1c/ и не трогает саму 1С.
Его задача:
- анализировать работу с компаниями (
counterparty); - показывать, где компании выпали из активности;
- считать простой, объяснимый прогноз по событиям и activity score;
- давать read-only API для AI Investigator и внешних аналитических сервисов.
Что считается компанией
В file-based AWatch-rus контуре компания = documents.counterparty, но это поле
заполняется не из бухгалтерских проводок, а из read-only file-base telemetry.
Сейчас есть два связанных слоя:
documents- событийный слой;
- содержит
CompanyActivitySnapshot;
companies- отдельная read-only business-like таблица по каждой файловой базе;
- хранит
owner_user,base_path,db_size_bytes,reglog_size_bytes,active_locks,temp_db_present,scheduler_touched,activity_score.
Для documents действует telemetry-модель:
counterparty = infobase;doc_type = CompanyActivitySnapshot;amount= интегральныйactivity scoreпо изменению базы, росту reglog, lock/temp markers и scheduler activity.
То есть это слой прогноза операционной активности по компаниям/базам, а не финансовый forecast по первичке.
Счетчики компаний
Важно не смешивать разные счетчики:
companies_totalв/api/health— технический счетчик записей/срезов 1C analytics, а не число компаний в управленческом портфеле;- количество компаний для портала и демонстрации берется из
GET /api/1/analytics-1c/companies/overviewиanalytics_1c.v_company_portfolio_overview; - если registry и portfolio расходятся, это считается вопросом качества привязок/актуальности 1C analytics, а не ошибкой портала.
Что добавлено
ClickHouse
Файл:
clickhouse-1c/clickhouse/init/04_company_intelligence.sql
Создаёт:
v_companies_currentcompany_forecastscompany_health_signalsv_counterparty_dailyv_counterparty_latest_activityv_company_forecasts_currentv_company_health_currentv_company_portfolio_overview
Forecast refresh
Файл:
clickhouse-1c/ai/refresh_company_intelligence.py
Что делает:
- строит daily series по
counterparty; - учитывает текущее состояние файловой базы из
companies; - считает базовую линию и линейный тренд;
- материализует прогнозы на
7и30дней; - создаёт health-signals:
inactive_companyamount_dropdocs_stoppedbase_busyscheduler_activityopen_casesopen_detections
Read-only API
Файл:
clickhouse-1c/ai/company_intelligence_api.py
Endpoints:
GET /healthGET /api/1/analytics-1c/companies/overviewGET /api/1/analytics-1c/companies/{counterparty}/summaryGET /api/1/analytics-1c/companies/{counterparty}/forecastGET /api/1/analytics-1c/companies/{counterparty}/timelineGET /api/1/analytics-1c/companies/{counterparty}/actionsGET /api/1/analytics-1c/manager/actionsGET /api/1/analytics-1c/manager/actions/companiesGET /api/1/analytics-1c/manager/brief/latestGET /api/1/analytics-1c/manager/brief/latest.mdGET /api/1/analytics-1c/manager/brief/historyGET /manager/briefGET /manager/actions
/manager/brief — это human-facing browser page для руководителя:
- server-rendered HTML;
- без frontend build chain и SPA-зависимостей;
- опирается на уже сгенерированный
latest.json; - показывает headline, человеческие комментарии, top risks, top forecasts, действия и свежесть источников;
- даёт быстрые ссылки на raw JSON/Markdown и в Grafana.
Отдельно появился deterministic слой manager/actions:
- не зависит от LLM;
- строится из
v_company_portfolio_overview,business_events,document_change_events,cases,detections; - показывает очередь действий вида
компания -> почему -> что делать -> кто отвечает -> насколько срочно. - верхний management-срез теперь enterprise-first:
сначала агрегирует необходимые действия по предприятиям, а текущий
owner_nameоставляет вторичным operational metadata. GET /api/1/analytics-1c/manager/actionsиGET /api/1/analytics-1c/manager/actions/companiesтеперь явно отдаютpriority_model=enterprise_riskиowner_mode=secondary_operational_metadata.
Executive brief для руководителя
Файлы:
clickhouse-1c/ai/generate_manager_brief.pyclickhouse-1c/ai/manager_brief_prompt.mdclickhouse-1c/ai/manager_brief_schema.jsonclickhouse-1c/ops/run_manager_brief.shclickhouse-1c/ops/aw-1c-manager-brief.serviceclickhouse-1c/ops/aw-1c-manager-brief.timer
Что делает:
- собирает live context по портфелю компаний из
ClickHouse; - вызывает локальный
codex execна<GATEWAY_HOST>от пользователяcodex; - требует structured JSON по schema, а не свободный текст;
- рендерит итог в
latest.jsonиlatest.md; - при сбое
codexдаёт deterministic fallback, чтобы контур не оставался пустым.
Важно:
tmuxне является production-зависимостью;- интерактивная сессия
codexможет быть открыта, но pipeline работает через обычныйcodex exec; - service не трогает
1С, работает только на уже выгруженных read-only данных.
Ops
Файлы:
clickhouse-1c/ops/run_company_intelligence_refresh.shclickhouse-1c/ops/run_company_intelligence_api.shclickhouse-1c/ops/aw-1c-company-api.service
И production writer aw-1c-ingest-rust теперь:
- грузит новые выгрузки;
- обновляет timeline/detections/cases;
- применяет
04_company_intelligence.sql; - пересчитывает company forecasts/signals.
Развёртывание
1. Установить зависимости
cd clickhouse-1c
python3 -m venv .venv
. .venv/bin/activate
pip install -r etl/requirements.txt
pip install -r ai/requirements.txt
2. Применить schema
clickhouse-client --queries-file clickhouse/init/04_company_intelligence.sql
3. Пересчитать company intelligence
./ops/run_company_intelligence_refresh.sh
4. Запустить API
./ops/run_company_intelligence_api.sh
5. Сформировать manager brief
./ops/run_manager_brief.sh
По умолчанию:
- host:
127.0.0.1 - port:
8710
Переменные окружения
См.:
clickhouse-1c/.env.example
Ключевые:
AW_1C_COMPANY_API_HOSTAW_1C_COMPANY_API_PORTAW_1C_COMPANY_LOOKBACK_DAYSAW_1C_COMPANY_MIN_DAYSAW_1C_COMPANY_HORIZONSAW_1C_MANAGER_BRIEF_STATE_DIRAW_1C_MANAGER_BRIEF_MODELAW_1C_MANAGER_BRIEF_CODEX_USERAW_1C_MANAGER_BRIEF_CODEX_BINAW_1C_MANAGER_BRIEF_WORKDIRAW_1C_MANAGER_BRIEF_TOP_LIMITAW_1C_MANAGER_BRIEF_FRESHNESS_HOURSAW_1C_MANAGER_BRIEF_TIMEOUT_SECAW_1C_MANAGER_BRIEF_RUN_AFTER_INGEST
Что уже есть в live payload
В live overview/summary теперь идут не только прогнозы, но и текущее
состояние файловой базы компании:
company_nameowner_userbase_pathcurrent_statusdb_size_bytesreglog_size_bytesactive_lockscurrent_activity_score
Что прогноз реально означает
Это не black-box ML и не «магический AI».
Сейчас используется объяснимый MVP:
- daily baseline;
- linear trend;
- confidence;
- health signals на простых правилах.
Этого достаточно для:
- раннего обнаружения выпадения компаний из потока;
- ранжирования портфеля;
- AI summary поверх уже объяснимых чисел.
Ограничения
- в file-based telemetry
amountозначаетactivity score, а не деньги; - прогноз показывает тенденцию активности компании/базы, а не финансовое обещание;
- API строго read-only;
- никакой записи обратно в 1С нет.