sozday-rabochee-veb-prilozhe/README.md

37 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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