# КФУ-агент — расчёт К1–К3 по Политике финансовой устойчивости Приложение с сервером (Node.js, `node:http`, без тяжёлых зависимостей) + статический фронт. Запуск — команда **`run`** (поставит зависимости по `package.json` и поднимет `server.js`). ## Что умеет 1. **Данные** — три источника: - выгрузка СУО (SAP BPC): листы ДОЛГ / EBITDA / Баланс, распознавание структуры, подбор строк, EBITDA «снизу вверх» по статьям ОПиУ и готовая строкой, LTM-мостик для промежуточных периодов, структура долга по компонентам с контролем по сумме, блок «Консолидация» (TOTALADJ) для Группы Фонда; - отчётность МСФО — извлечение показателей ИИ (PDF распковывается сервером в текст, Excel в браузере, сканы страниц — как изображения); результат — редактируемая сводка с LTM и итогами; - ручной ввод. 2. **Реестр показателей** — компании и периоды, долг/гарантии/EBITDA/проценты/капитал, редактирование и удаление. 3. **Расчёт и зоны** — целевые и пороговые значения по компаниям (предзаполнены из сводного файла КФУ), свод «как в сводном файле», коэффициенты К1–К3 с зонами (зелёная/жёлтая/красная), EBITDA ≤ 0 → красная, выгрузка в Excel (листы: Свод, Долг Группы, КФУ, Параметры, Аудит) и CSV. 4. **Агент** — чат с расчётом по методам: видит реестр, зоны и методы (реестр); подсказки: заключение по зонам, стресс-тест (долг +10%, EBITDA −15%, проценты +20%, капитал −5% — пересчитывается детерминированно в `stressRow`, агенту передаются готовые значения), запас до порогов, методологические риски. ## Архитектура - `index.html` — всё приложение (вкладки 1–4), SheetJS из `vendor/xlsx.full.min.js`. - `monitor.html` + `kfu-client.js` — предыдущий экран «Мониторинг» (ссылка в шапке КФУ-агента). - `server.js` — `node:http`: статика (allowlist файлов) + `POST /api/ai` (прокси к `AI_BASE_URL/chat/completions` с `AI_API_KEY`/`AI_MODEL` из окружения) + `GET /api/health`. Ключи ИИ живут только на сервере; браузер ходит в `api/ai` (относительный путь). - PDF: клиент шлёт base64 в `/api/ai` (блок `file:pdf`), сервер распковывает `pdf-parse`; пустой PDF (скан) → честная ошибка. Лимит тела 40 МБ, таймаут ИИ 90 с. ## Запуск `run` → ссылка из вывода. После правок — ещё раз `run`. Публикация — кнопка «Опубликовать» (приложение: `https://code.vibe42.kz/apps/...`, не в pages). Данные (Excel) читаются в браузере и не покидают машину, кроме отправки PDF/снимков в ИИ для извлечения показателей. Состояние (реестр, параметры, методика) сохраняется/загружается локальным JSON; исходные книги и отчёты исключены из Git.