Зачем: аудит показал, что 156 зелёных тестов на fakeDatabase не заметили, что создание сотрудника, подтверждение смены и расчёт зарплаты всегда падают на реальной PostgreSQL. Чтобы тесты и CI проверяли реальный SQL, нужен воспроизводимый стенд с ролями как в pilot, но с минимальными привилегиями: - scripts/test/provision-pg.mjs: bootstrap-админ (только как DBA/entrypoint) создаёт krona_migrator (NOSUPERUSER NOCREATEDB NOCREATEROLE, владелец БД и схемы public) и krona_staff_app (NOSUPERUSER NOBYPASSRLS NOINHERIT); пароли crypto.randomBytes, пишутся только в env-файл 0600, в вывод не попадают. scripts/create-app-role.mjs здесь не используется, т.к. без SUPERUSER он падает (находка N6, продуктовый код не трогаем). - scripts/test/migrate-roundtrip.mjs: up -> откат всех миграций -> up -> повторный up должен быть no-op; ролью мигратора, как требует AGENTS.md. Проверено на PostgreSQL 17.11: 11 миграций применены, откачены, применены повторно, третий up пустой. |
||
|---|---|---|
| .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 терминала.