Go to file
2026-09-21 09:57:33 +00:00
design-system КФУ: 5 колонок без min-width, EBITDA≤0, диагностика, README, .gitignore 2026-09-21 08:15:19 +00:00
vendor КФУ: 5 колонок без min-width, EBITDA≤0, диагностика, README, .gitignore 2026-09-21 08:15:19 +00:00
.gitignore v1.3: полный KFU-агент (4 шага) + server.js (node:http, /api/ai, health), импорт сводной книги КФУ, стресс-тест, демо, monitor.html отдельным экраном 2026-09-21 09:41:24 +00:00
.vibe42-design.json КФУ: 5 колонок без min-width, EBITDA≤0, диагностика, README, .gitignore 2026-09-21 08:15:19 +00:00
AGENTS.md КФУ: 5 колонок без min-width, EBITDA≤0, диагностика, README, .gitignore 2026-09-21 08:15:19 +00:00
design.md КФУ: 5 колонок без min-width, EBITDA≤0, диагностика, README, .gitignore 2026-09-21 08:15:19 +00:00
index.html v1.3.4: agentSystem — зоны только готовые из context; при null цели/порога — «норматив не задан», запрещено утверждать превышение отсутствующего норматива; EBITDA ≤ 0 — самостоятельная причина красной итоговой зоны, не превышение К2/К3 2026-09-21 09:57:33 +00:00
kfu-client.js v1.3: полный KFU-агент (4 шага) + server.js (node:http, /api/ai, health), импорт сводной книги КФУ, стресс-тест, демо, monitor.html отдельным экраном 2026-09-21 09:41:24 +00:00
monitor.html v1.3: полный KFU-агент (4 шага) + server.js (node:http, /api/ai, health), импорт сводной книги КФУ, стресс-тест, демо, monitor.html отдельным экраном 2026-09-21 09:41:24 +00:00
package-lock.json v1.3: полный KFU-агент (4 шага) + server.js (node:http, /api/ai, health), импорт сводной книги КФУ, стресс-тест, демо, monitor.html отдельным экраном 2026-09-21 09:41:24 +00:00
package.json v1.3: полный KFU-агент (4 шага) + server.js (node:http, /api/ai, health), импорт сводной книги КФУ, стресс-тест, демо, monitor.html отдельным экраном 2026-09-21 09:41:24 +00:00
README.md v1.3: полный KFU-агент (4 шага) + server.js (node:http, /api/ai, health), импорт сводной книги КФУ, стресс-тест, демо, monitor.html отдельным экраном 2026-09-21 09:41:24 +00:00
server.js v1.3.2: ИИ — stream:false+enable_thinking:false в upstream, max_tokens дефолт 1200 (извлечение 4096), клиент AbortController 100с; стресс-тест — сворачиваемая таблица на шаге 3 (расчёт через тот же calcRow на изменённой копии) 2026-09-21 09:46:31 +00:00

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