37 lines
4.0 KiB
Markdown
37 lines
4.0 KiB
Markdown
# КФУ-агент — расчёт К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.
|