Skip to content

v0.4.1: Факт сделки, ресурсный план, PostgreSQL по умолчанию

Choose a tag to compare

@onixus onixus released this 14 Sep 16:49
· 247 commits to main since this release

EvaCal v0.4.1 — факт сделки, ресурсный план, PostgreSQL по умолчанию

Релиз собирает всё, что вошло в main после v0.4.0: PR #72–#82.
Главное: PostgreSQL стал СУБД по умолчанию, а поверх согласованных
расчётов появился контур факта — исход сделки, фактические часы и сроки,
ресурсный план по портфелю и аналитика отклонений.

Новое

  • Калибровка оценки по похожим проектам (#72). Для расчёта подбираются
    утверждённые расчёты того же шаблона с близкими ответами опросника
    (расстояние Гауэра); панель показывает медианную поправку, коридор часов,
    калиброванную оценку, типичный срок и этапы, которые архитектор обычно
    правит. Гостям по share-ссылке соседи показываются обезличенно.
  • Факт и исход сделки (#78, Horizon E1). Исход на проекте: выиграна
    (версия договора, сумма без НДС), проиграна (причина, конкурент),
    отменена. Факт часов и дат по этапам выигранной версии, факт РП,
    закрытие факта, CSV-импорт с dry-run. Страница /analytics с вкладками
    «Сделки» и «Точность оценок». Калибровка получила третий слой
    «факт / утверждено», рейтинг — win rate у пресейлов и медиану отклонения
    у архитекторов.
  • Ресурсный план по портфелю (#79, E2). Спрос из Гантов всех проектов
    по ISO-неделям и ролям с весами воронки, ёмкость ролей с датой действия
    (/admin/capacity), тепловая карта /capacity на 13 или 26 недель,
    what-if со сдвигом расчётов и применением через POST /api/capacity/apply,
    выгрузка в xlsx, полоса «Перегруз по портфелю» над Гантом и виджет
    загрузки на главной архитектора.
  • Контроль сроков и отклонения по задачам (#80, E3). Статус этапа и
    проекта по датам факта (в графике / риск срыва / опоздание / завершён),
    прогноз окончания. График медианных отклонений по одинаковым задачам и
    конструктор срезов /analytics/deviations с фильтрами, группировками,
    метриками (медиана, среднее, P90), сохранением срезов и выгрузкой в xlsx.
  • PostgreSQL по умолчанию (#73, #76). docker compose up поднимает
    сервис postgres, контейнер migrate применяет версионированные миграции
    из prisma/postgresql/migrations, CI гоняет тесты, сборку и e2e против
    той же СУБД. SQLite остаётся режимом одного стенда
    (DATABASE_PROVIDER=sqlite).
  • S3-совместимое хранилище артефактов (#75). ZIP выпущенных комплектов
    и DOCX тех.писателя можно хранить в AWS S3, MinIO, Yandex/VK Object
    Storage или Ceph RGW; включается заданным S3_BUCKET. Для файлового
    режима объявлен том storage-data — раньше артефакты жили в слое
    контейнера и терялись при его пересоздании.

Исправлено

По код-ревью стопки E1–E3 (#82):

  • Панель факта не рисовала ячейки дат факта и сдвига: шапка объявляла
    девять колонок, строка выводила пять.
  • Применение what-if шло через PATCH расчёта, который отказывает
    утверждённым версиям, и при первой ошибке оставляло уже применённые
    сдвиги на панели. Новый эндпоинт переносит даты этапов с сохранением id.
  • Замок закрытого факта пропускал повторное «выиграно» и смену версии
    с потерей факта; непереданная сумма обнулялась.
  • Сохранённые срезы: обновление только автором или админом, 404 на
    несуществующий id.
  • Рейтинг: исход сделки приписывается автору выигранной версии, проигрыш —
    автору последней; проект без расчётов не входит в win rate.
  • CSV-импорт факта помечает одноимённые этапы как неоднозначные вместо
    записи в последний попавшийся.
  • Калибровка не считает соседями свои версии и не теряет обнулённые этапы (#72).

Обновление с 0.4.0

  • Смена СУБД по умолчанию. Стенд на SQLite продолжит работать, если в
    .env задать DATABASE_PROVIDER=sqlite и DATABASE_URL=file:./prisma/dev.db
    и пересобрать образ с тем же DATABASE_PROVIDER. Без этого compose
    поднимет PostgreSQL с чистой базой. Перенос данных между SQLite и
    PostgreSQL штатной командой не делается, см. README.
  • Схема. Новые модели и поля под исход сделки, факт, ёмкость ролей и
    срезы. PostgreSQL: prisma migrate deploy (делает контейнер migrate).
    SQLite: prisma db push через npm run db:sync.
  • Артефакты. Если комплекты лежали в слое контейнера, перед пересозданием
    скопируйте /app/storage в том storage-data или в S3.

Проверено

npm audit --audit-level=high — 0 уязвимостей. 597 юнит-тестов в 71 файле.
Jenkins на коммите 6408388: аудит, lint, typecheck, тесты, сборка и
сквозной сценарий ГОСТ 34 против PostgreSQL — зелёные.

Образ

ghcr.io/onixus/evacal:0.4.1
ghcr.io/onixus/evacal:latest

Мультиарх, linux/amd64 + linux/arm64. Манифест:

sha256:5b5df7fea2f29f8f88e94e43d483751b18d0e634cc993e0268e0ad6b7f29c287

Образ собран из того же коммита, на который указывает тег (387516a).