Зачем: проект разрабатывается под Windows, а стенд там не стартовал:
spawn('npx') и spawn('node_modules/.bin/tsx') без shell падают с ENOENT,
потому что в Windows это .cmd-файлы (приёмка владельца, TASK-GROK-2 п.1).
Что: scripts/test/node-commands.mjs находит JS-точки входа через
require.resolve (tsx/cli, vitest.mjs, prettier.cjs) и всегда запускает их
текущим node (process.execPath). Сервер запускается одним процессом
`node --import tsx src/server.ts`: CLI tsx порождает дочерний node, и под
Windows kill() родителя оставил бы сервер-сироту на порту. baseEnv()
передаёт дочерним процессам PATH и под win32 системные переменные
(SystemRoot, TEMP и др.), без которых node на Windows не работает с сетью,
но не наследует секреты родителя.
Проверка на Linux: tests/e2e/harness/node-commands.test.ts (входит в
npm test) — команды начинаются с process.execPath, без .cmd/.bin/npx,
файлы существуют; исходники стенда не вызывают npx и node_modules/.bin.
Реальный прогон на Windows 11 — не проверено (нет Windows-раннера).
|
||
|---|---|---|
| .forgejo/workflows | ||
| api | ||
| apps | ||
| deploy/pilot | ||
| docker/postgres | ||
| docs | ||
| installer | ||
| migrations | ||
| schemas | ||
| scripts | ||
| src | ||
| tests | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc.json | ||
| AGENTS.md | ||
| compose.yaml | ||
| Dockerfile | ||
| eslint.config.js | ||
| LICENSE | ||
| module.json | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| SECURITY.md | ||
| settings.schema.json | ||
| tsconfig.build.json | ||
| tsconfig.json | ||
| vitest.config.ts | ||
Krona Staff
Блок сотрудников для Krona Business Platform. Он включает терминал посещаемости и проверяемое ядро управленческого расчёта зарплаты по подтверждённым требованиям владельца. Официальный расчёт налогов и взносов, кадровые документы, отпуска и планирование графиков в текущий объём не входят.
Репозиторий сохраняет платформенные границы: два runtime-режима, порты Core, PostgreSQL/RLS, outbox/inbox/idempotency/audit, проверяемые OpenAPI и module manifest, контейнеризацию и CI. Расчёт остаётся чистой детерминированной функцией, а данные каждого tenant изолируются на уровне транзакции, внешних ключей и RLS.
Быстрый старт
cp .env.example .env
docker compose --profile tools run --rm migrate
docker compose up --build app postgres
Открыть: shell http://localhost:8080/, OpenAPI JSON /api/v1/staff/openapi.json, проверки /api/v1/staff/live, /api/v1/staff/ready, /api/v1/staff/version.
Без Docker: Node.js 22+ и PostgreSQL 17; затем npm ci, создайте отдельные роли мигратора и приложения, выполните npm run db:migrate и npm run dev.
Команды
npm run check— lint, typecheck, tests, миграции, контракты и build.npm run db:migrate— применить ещё не выполненные миграции. Откат удаляет только последнюю миграцию и требуетALLOW_MIGRATION_DOWN=true.npm run check:contracts— проверить manifest/settings/OpenAPI.
Архитектурные решения: docs/ARCHITECTURE.md, интеграция: docs/PLATFORM-INTEGRATION.md, будущий объём: docs/ROADMAP.md.
Расчётный контур
Ядро в src/domain/payroll поддерживает почасовую и посменную оплату, проценты, гарантии, премии, сдельные позиции, общий фонд с распределением по времени присутствия, прогрессивные шкалы, ночные, сверхурочные и праздничные часы. Правила и назначения версионируются, а каждая строка ведомости сохраняет объяснение расчёта.
Требования: REQ-001, каталог схем: PAYROLL-SCHEMES-CATALOGUE, платформенное решение: ADR-002.
Биометрический терминал
Windows-приложение для SLK20R находится в apps/KronaStaffTerminal. Оно добавляет сотрудников, регистрирует несколько отпечатков по трём сканам, учитывает приход/уход и отправляет уведомление в Telegram и/или MAX. Инструкция по запуску и настройке находится в README терминала.