Compare commits

...

10 commits

Author SHA1 Message Date
421da722c0 docs(e2e): REPORT.md (описание PR) и свежие evidence прогона
Зачем: PR в Forgejo создать нельзя (нет API-токена), поэтому описание
изменений, таблица green/red по ID с командами и фактическим выводом, итог
N5 до/после, валидация CI и N13 лежат в репозитории рядом с тестами.
Evidence перезаписаны финальным прогоном ./scripts/test/ci-local.sh, чтобы
отчёт ссылался на те же числа, что в файлах (38 red / 9 green, храповик OK,
format красный из-за F14). Число файлов F14 в комментарии ci.yml и в
заметках уточнено до 23 по этому замеру.
2026-09-26 14:35:19 +07:00
3388b90bfa test(e2e): N13 — нагрузочная проверка гонки первого расчёта зарплаты
Зачем: владелец пометил N13 как «не воспроизведено», а в коде окно гонки
(SELECT ... FOR UPDATE по отсутствующей строке, затем INSERT ... ON CONFLICT
DO NOTHING со своим runId) видно. Нужен повторяемый замер на живом сервере
и реальной PostgreSQL 17, а не рассуждение.

Что: scripts/test/n13-race.mjs — 10/25/50 параллельных первых
POST /payroll/calculate, каждая попытка на новой точке, проверка статусов,
числа run_id, строк в staff_payroll_runs и «фантомных» run_id. Режим as-is
показывает, что сейчас всё упирается в N2 (500). Режим n2-bypass ставит
DEFAULT now() только в одноразовой БД скрипта (продукт и миграции не
меняются), чтобы увидеть саму гонку. Итог: 0 некорректных из 30 попыток;
причина (из кода) — случайная сериализация через upsert
ensureDefaultPayRules. Это записано в NOTES-FOR-EXECUTORS вместе с
рекомендацией явной блокировки и замечанием об утечке текста ошибок БД в 500.
2026-09-26 14:33:11 +07:00
1e325a6dfd test(e2e): сценарии решений владельца (OWN-01..11) и заметки исполнителям
Зачем: решения владельца (роли точки/бухгалтера/директора, пакет зарплаты
с подписью директора, неизменяемость после подписи, зарплата по точке
фактической смены, согласие на биометрию) должны стать исполняемыми
критериями приёмки до того, как Codex начнёт этап 4, иначе реализацию
будет нечем проверить.

API ещё нет, поэтому тесты написаны против наиболее вероятного контракта
C1 (access-grants), C2 (payroll/batches, submit/sign/return,
notifications), C3 (biometric-consent, terminal enrollment); контракт и
инварианты описаны в tests/e2e/NOTES-FOR-EXECUTORS.md. Сейчас все OWN
красные (404 Route not found) и внесены в known-defects.json.
В NOTES также: найденные сценариями дефекты с указанием файлов,
конфликт NODE_ENV/standalone для pilot, N6, требования к раннеру docker-host.
2026-09-26 14:30:46 +07:00
a19c06b574 test(e2e): проверка deploy/pilot/compose.yaml (PILOT-1..3)
Зачем: корневой compose.yaml уже проверяется tests/unit/deployment.test.ts,
а pilot-файл, который реально разворачивается у владельца, — нет. В нём
подстановки вида ${STANDALONE_MANAGER_TOKEN} без :? молча дают пустое
значение, а при пустых токенах standalone выдаёт права анониму (F2);
NODE_ENV=development в pilot отключает production-проверки config.ts.

- PILOT-1: каждая подстановка должна быть ${VAR:?сообщение};
- PILOT-2: ни один сервис не с NODE_ENV=development;
- PILOT-3: у app нет учётных данных мигратора (сейчас зелёный).
Файл в tests/e2e как *.e2e.ts: tests/unit вне разрешённых путей, а
красные пункты (дефекты deploy/, которые правят исполнители) идут через
known-defects.json и не ломают `npm run check`. Сейчас PILOT-1 и PILOT-2
красные: 14 подстановок без :?, app с NODE_ENV=development.
2026-09-26 14:30:10 +07:00
f59be3adf9 ci: PostgreSQL 17 с ролями как в pilot, roundtrip миграций, e2e, SHA-пины
Зачем: прежний CI запускал миграции и тесты под POSTGRES_USER сервиса
(суперпользователь), не проверял откат миграций, не запускал e2e на
реальной БД, держал плавающие теги actions (F13) и выполнял docker build
в контейнере без Docker daemon.

- verify: bootstrap-админ сервиса только создаёт роли (provision-pg.mjs,
  пароли случайные); миграции up -> откат всех -> up -> up (no-op) ролью
  krona_migrator без SUPERUSER; `npm run check` с DATABASE_TEST_URL
  (app-роль) и DATABASE_TEST_MIGRATION_URL (очистка, см. N5); npm audit.
- format: prettier вынесен в отдельную задачу — он красный по 25 файлам
  (F14) и не должен маскировать статус verify/e2e.
- e2e: реальный сервер + PostgreSQL 17 через scripts/test/run-e2e.mjs.
  Выбран «храповик» known-defects.json, а не отдельная задача с
  continue-on-error: так CI зелёный, только если стенд работает и каждый
  красный сценарий — известный открытый дефект; новый красный сценарий
  (регрессия) или исправленный, но не вычеркнутый дефект делают задачу
  красной. continue-on-error скрыл бы и поломку самого стенда.
- docker-build: отдельная задача на метке `docker-host` только для push,
  после verify; без такого раннера она ждёт в очереди, не блокируя
  остальные.
- actions/checkout v4.4.0 и actions/setup-node v4.4.0 закреплены SHA
  (git ls-remote; одинаковы на github.com и code.forgejo.org).

Проверено: actionlint 1.7.12 (метки docker/docker-host объявлены как
self-hosted) — 0 замечаний; scripts/test/ci-local.sh повторяет шаги
verify/format/e2e на локальной PostgreSQL 17.11 (Forgejo-раннер реально
не запускался — не проверено).
2026-09-26 14:29:47 +07:00
9bdfb66a53 test(e2e): форматировать сгенерированные json/md evidence prettier
Зачем: tests/e2e/evidence не входит в .prettierignore (файл вне разрешённых путей), и минифицированный JSON vitest делал бы npm run format:check красным из-за артефактов, а не из-за кода.
2026-09-26 14:29:47 +07:00
32ced4b100 test(e2e): сценарии офлайн-синхронизации (/sync/*)
Зачем: бэкенд офлайн-синхронизации (миграция 0011) покрыт только
юнит-тестами без реальной БД. Сценарии на живом сервере показывают, как
терминал реально взаимодействует с сервером, и фиксируют границы
доверия к устройству.

Проверяется правильное поведение: устройство не подтверждает смены и не
утверждает табель сам (SYNC-A/B); начальная загрузка работает (SYNC-C0,
сейчас 500 «column status does not exist» — у staff_org_units нет
status) и не теряет сущности после 100-й (SYNC-C); правки из портала
видны в инкрементальном pull (SYNC-D); отметки уволенных и вне окна
времени отклоняются (SYNC-E/J); точка устройства сохраняется, чужая
отклоняется (SYNC-F); битая команда не роняет пакет (SYNC-G); CSRF и
анонимная регистрация устройств запрещены (SYNC-H/I); ack не принимает
курсор из будущего (SYNC-K). SYNC-L — позитивный контроль отзыва.
2026-09-26 14:27:59 +07:00
518494d03c test(e2e): сценарии дефектов основного API (N1-N4, N9-N12, F2-F4, F7, F10)
Зачем: каждый открытый дефект аудита должен иметь исполняемый сценарий
на реальной БД, который проверяет ПРАВИЛЬНОЕ поведение. Тогда красный
тест = открытый дефект, а исправление видно по смене цвета, без ручной
перепроверки.

- N1 POST /employees -> 201; N2 подтверждение смены, расчёт, утверждение
  и сумма начисления 8 ч x синтетическая ставка; N4 пересекающиеся
  периоды не начисляют смену дважды (сейчас блокирован N2 — это видно в
  сообщении assert как «предусловие, см. N2»);
- N3 SSRF: подписка на https://127.0.0.1:<порт> должна отклоняться, и
  локальный слушатель не должен получить соединение;
- N9, N12, N10, N11, F2 (процесс без токенов), F3, F4 (отдельный процесс),
  F7, F10.
Сотрудники для сценариев, не относящихся к N1, создаются импортом, чтобы
один дефект не маскировал остальные. Все данные синтетические (E2E-*),
ставка 123,45 ₽/ч заведомо не реальная.
2026-09-26 14:27:59 +07:00
cf7f6f4510 test(e2e): стенд с реальным сервером и PostgreSQL 17
Зачем: 156 зелёных тестов на fakeDatabase не поймали, что ключевые
сценарии (создание сотрудника, подтверждение смены, расчёт зарплаты)
всегда падают на реальной PostgreSQL. Нужен приёмочный стенд, который
проверяет продукт как чёрный ящик: настоящий процесс сервера, настоящая
БД, роли как в pilot, но с минимальными привилегиями.

- tests/e2e/harness/global-setup.ts: создаёт БД и роли через
  scripts/test/provision-pg.mjs, применяет миграции ролью krona_migrator
  (NOSUPERUSER), поднимает `tsx src/server.ts` под krona_staff_app с
  токенами/VAPID из crypto.randomBytes; три процесса: с токенами, без
  токенов (как корневой compose.yaml) и отдельный для проверки rate limit;
  логи серверов пишутся в tests/e2e/evidence/.
- *.e2e.ts и отдельный vitest.e2e.config.ts: e2e не попадают в `npm test`,
  поэтому `npm run check` не требует БД и не краснеет от известных дефектов.
- [HARNESS]/[CTRL] — позитивные контроли (версия PG >= 17, атрибуты ролей,
  app-роль не видит schema_migrations, RBAC, уволенный теряет доступ):
  если они красные, красные дефектные сценарии ничего не доказывают.
- scripts/test/run-e2e.mjs: «храповик» известных дефектов по
  tests/e2e/known-defects.json (новый красный или исправленный-но-не-
  вычеркнутый ID = exit 1), таблица e2e-table.md и проверка, что в
  evidence нет ничего похожего на секреты стенда.

Логи названы *.txt, т.к. *.log в .gitignore.
2026-09-26 14:27:59 +07:00
d7e9008b8c style(test): prettier для tenant-isolation.test.ts
Зачем: файл уже до правки N5 не проходил prettier --check (часть F14); форматирование вынесено в отдельный коммит, чтобы смысловая правка N5 читалась отдельно от шума.
2026-09-26 14:21:48 +07:00
28 changed files with 6157 additions and 16 deletions

View file

@ -3,6 +3,16 @@ on:
push:
branches: [main, codex/bootstrap-platform-foundation]
pull_request:
# Все actions закреплены полным SHA коммита (F13); SHA получены `git ls-remote`
# и совпадают на github.com и code.forgejo.org (зеркало), поэтому закрепление
# работает при любом DEFAULT_ACTIONS_URL раннера.
#
# Роли БД как в pilot, но с минимальными привилегиями: POSTGRES_USER сервиса —
# только bootstrap-админ (роль DBA/entrypoint образа), им scripts/test/provision-pg.mjs
# создаёт krona_migrator (NOSUPERUSER, владелец БД) и krona_staff_app (NOBYPASSRLS)
# со случайными паролями. Ни миграции, ни тесты, ни сервер под bootstrap-админом не работают.
jobs:
verify:
runs-on: docker
@ -10,27 +20,85 @@ jobs:
postgres:
image: postgres:17-alpine@sha256:18cfe3ef5e6815560c98237d6216d1e5119702fb0f3894c8785dd58b8bbe5d73
env:
POSTGRES_DB: krona_staff
POSTGRES_USER: krona_migrator
POSTGRES_PASSWORD: ci-migration-password
ports: ['5432:5432']
POSTGRES_DB: postgres
POSTGRES_USER: ci_bootstrap
POSTGRES_PASSWORD: ci-bootstrap-only
options: >-
--health-cmd "pg_isready -U krona_migrator -d krona_staff"
--health-cmd "pg_isready -U ci_bootstrap -d postgres"
--health-interval 5s
--health-timeout 3s
--health-retries 20
env:
DATABASE_MIGRATION_URL: postgres://krona_migrator:ci-migration-password@postgres:5432/krona_staff
DATABASE_TEST_URL: postgres://krona_staff_app:ci-app-password@postgres:5432/krona_staff
POSTGRES_APP_PASSWORD: ci-app-password
E2E_PG_ADMIN_URL: postgres://ci_bootstrap:ci-bootstrap-only@postgres:5432/postgres
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: { node-version: 22, cache: npm }
- run: npm ci
- run: node scripts/create-app-role.mjs
- run: node scripts/migrate.mjs up
- run: npm run check
- run: npm run format:check
- name: provision roles (migrator NOSUPERUSER, app NOBYPASSRLS)
run: node scripts/test/provision-pg.mjs --out "$RUNNER_TEMP/db.env" --db krona_staff
- name: migrations up -> rollback all -> up -> up (no-op)
run: |
set -a; . "$RUNNER_TEMP/db.env"; set +a
node scripts/test/migrate-roundtrip.mjs roundtrip
- name: npm run check (tenant-isolation on real PostgreSQL as app role)
run: |
set -a; . "$RUNNER_TEMP/db.env"; set +a
unset DATABASE_URL POSTGRES_APP_PASSWORD
npm run check
- run: npm audit --audit-level=high
- run: docker build -t krona-staff:${{ forgejo.sha }} .
# Отдельная задача: prettier сейчас красный по 23 файлам (F14; замер 2026-09-26), и это не должно
# маскировать статус verify/e2e.
format:
runs-on: docker
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: { node-version: 22, cache: npm }
- run: npm ci
- run: npm run format:check
# Приёмочные сценарии на реальном сервере и PostgreSQL 17. Красные сценарии
# известных открытых дефектов перечислены в tests/e2e/known-defects.json:
# задача зелёная, если стенд работает ([HARNESS]/[CTRL] зелёные) и каждый
# красный сценарий есть в списке; новый красный сценарий или исправленный,
# но не вычеркнутый дефект делают задачу красной.
e2e:
runs-on: docker
services:
postgres:
image: postgres:17-alpine@sha256:18cfe3ef5e6815560c98237d6216d1e5119702fb0f3894c8785dd58b8bbe5d73
env:
POSTGRES_DB: postgres
POSTGRES_USER: ci_bootstrap
POSTGRES_PASSWORD: ci-bootstrap-only
options: >-
--health-cmd "pg_isready -U ci_bootstrap -d postgres"
--health-interval 5s
--health-timeout 3s
--health-retries 20
env:
E2E_PG_ADMIN_URL: postgres://ci_bootstrap:ci-bootstrap-only@postgres:5432/postgres
E2E_MIGRATIONS: roundtrip
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: { node-version: 22, cache: npm }
- run: npm ci
- name: e2e (known-defects ratchet)
run: node scripts/test/run-e2e.mjs
- name: e2e table
if: always()
run: cat tests/e2e/evidence/e2e-table.md || true
# docker build требует Docker daemon, которого нет в контейнере метки `docker`.
# Нужен раннер с меткой `docker-host` (хост с доступом к Docker). Пока такого
# раннера нет, задача ждёт в очереди и не блокирует verify/format/e2e.
docker-build:
runs-on: docker-host
needs: [verify]
if: github.event_name == 'push'
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- run: docker build -t "krona-staff:${GITHUB_SHA}" .

30
scripts/test/ci-local.sh Executable file
View file

@ -0,0 +1,30 @@
#!/usr/bin/env bash
# Локальный эквивалент задач verify/format/e2e из .forgejo/workflows/ci.yml
# (без Docker: PostgreSQL 17 уже запущен, E2E_PG_ADMIN_URL указывает на bootstrap-админа).
# docker-build локально не воспроизводится: Docker в этой среде нет.
set -uo pipefail
cd "$(dirname "$0")/../.."
: "${E2E_PG_ADMIN_URL:?E2E_PG_ADMIN_URL (bootstrap-админ PostgreSQL 17) обязателен}"
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT
status=0
step() {
local name="$1"
shift
echo "::: [$name] $*"
if "$@"; then echo "::: [$name] OK"; else local code=$?; echo "::: [$name] FAIL exit=$code"; status=1; fi
}
with_db_env() { (set -a; . "$tmp/db.env"; set +a; unset DATABASE_URL POSTGRES_APP_PASSWORD; "$@"); }
echo "=== job verify"
step npm-ci npm ci --no-audit --no-fund
step provision node scripts/test/provision-pg.mjs --out "$tmp/db.env" --db krona_staff
step migrate-roundtrip with_db_env node scripts/test/migrate-roundtrip.mjs roundtrip
step check with_db_env npm run check
step audit npm audit --audit-level=high
echo "=== job format"
step format-check npm run format:check
echo "=== job e2e"
step e2e env E2E_MIGRATIONS=roundtrip node scripts/test/run-e2e.mjs
echo "=== итог: status=$status"
exit $status

298
scripts/test/n13-race.mjs Normal file
View file

@ -0,0 +1,298 @@
#!/usr/bin/env node
// N13: гонка первого расчёта зарплаты. N параллельных POST /payroll/calculate для одной и той же
// пары (точка, месяц), когда расчёта ещё нет. Каждая попытка — новая точка (значит «первый» расчёт).
//
// Режимы:
// --mode as-is код и схема как есть (N2 не обходится);
// --mode n2-bypass ДИАГНОСТИКА: в одноразовой БД мигратор ставит DEFAULT now() для
// staff_outbox.occurred_at, чтобы обойти N2 и увидеть саму гонку.
// Продукт/миграции не меняются, БД удаляется при следующем provision.
// Опции: --sizes 10,25,50 --attempts 5 --with-sessions (подтверждённые смены, нужен n2-bypass)
// Требует E2E_PG_ADMIN_URL (bootstrap-админ только для создания ролей/БД).
// Правильное поведение: все ответы 200, один и тот же run_id, ровно один расчёт в БД,
// каждый возвращённый run_id существует в БД.
import { spawn, spawnSync } from 'node:child_process';
import { randomBytes } from 'node:crypto';
import { createWriteStream, mkdtempSync, readFileSync, rmSync } from 'node:fs';
import { createServer } from 'node:net';
import { tmpdir } from 'node:os';
import path from 'node:path';
import pg from 'pg';
const repoRoot = path.resolve(import.meta.dirname, '../..');
const args = process.argv.slice(2);
const opt = (name, fallback) => {
const index = args.indexOf(`--${name}`);
return index >= 0 ? args[index + 1] : fallback;
};
const mode = opt('mode', 'as-is');
const sizes = opt('sizes', '10,25,50').split(',').map(Number);
const attempts = Number(opt('attempts', '5'));
const withSessions = args.includes('--with-sessions');
const database = opt('db', `krona_staff_n13_${mode.replace(/-/g, '_')}`);
const CROCKFORD = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
const ulid = () =>
Array.from(randomBytes(26), (byte) => CROCKFORD[byte % 32])
.join('')
.replace(/^./, '0');
function parseEnvFile(file) {
const result = {};
for (const line of readFileSync(file, 'utf8').split('\n')) {
const index = line.indexOf('=');
if (index > 0) result[line.slice(0, index)] = line.slice(index + 1);
}
return result;
}
function runNode(scriptArgs, env) {
const result = spawnSync(process.execPath, scriptArgs, { cwd: repoRoot, env, encoding: 'utf8' });
if (result.status !== 0) {
process.stdout.write(`${result.stdout}${result.stderr}`);
throw new Error(`${scriptArgs.join(' ')} failed`);
}
return result.stdout;
}
async function freePort() {
return new Promise((resolve) => {
const server = createServer();
server.listen(0, '127.0.0.1', () => {
const { port } = server.address();
server.close(() => resolve(port));
});
});
}
const adminUrl = process.env.E2E_PG_ADMIN_URL;
if (!adminUrl) throw new Error('E2E_PG_ADMIN_URL не задан');
const secretsDir = mkdtempSync(path.join(tmpdir(), 'krona-n13-'));
runNode(
['scripts/test/provision-pg.mjs', '--out', path.join(secretsDir, 'db.env'), '--db', database],
{
...process.env,
},
);
const dbEnv = parseEnvFile(path.join(secretsDir, 'db.env'));
rmSync(secretsDir, { recursive: true, force: true });
runNode(['scripts/test/migrate-roundtrip.mjs', 'up'], {
PATH: process.env.PATH ?? '',
DATABASE_MIGRATION_URL: dbEnv.DATABASE_MIGRATION_URL,
});
const migrator = new pg.Client({ connectionString: dbEnv.DATABASE_MIGRATION_URL });
await migrator.connect();
if (mode === 'n2-bypass') {
await migrator.query('ALTER TABLE staff_outbox ALTER COLUMN occurred_at SET DEFAULT now()');
console.log(
'[n13] ДИАГНОСТИКА: staff_outbox.occurred_at DEFAULT now() (обход N2 только в этой БД)',
);
}
const tenantId = ulid();
const managerToken = randomBytes(32).toString('hex');
const terminalToken = randomBytes(32).toString('hex');
const vapid = {};
for (const line of runNode(['scripts/generate-vapid-keys.mjs'], process.env).split('\n')) {
const index = line.indexOf('=');
if (index > 0) vapid[line.slice(0, index)] = line.slice(index + 1);
}
const port = await freePort();
const log = createWriteStream(path.join(repoRoot, `tests/e2e/evidence/server-n13-${mode}.txt`));
const child = spawn(path.join(repoRoot, 'node_modules/.bin/tsx'), ['src/server.ts'], {
cwd: repoRoot,
env: {
PATH: process.env.PATH ?? '',
NODE_ENV: 'test',
HOST: '127.0.0.1',
PORT: String(port),
LOG_LEVEL: 'warn',
STAFF_RUNTIME_MODE: 'standalone',
DATABASE_URL: dbEnv.DATABASE_URL,
STANDALONE_TENANT_ID: tenantId,
STANDALONE_ACTOR_ID: ulid(),
STANDALONE_ACCESS: 'employee',
STANDALONE_MANAGER_TOKEN: managerToken,
STANDALONE_TERMINAL_TOKEN: terminalToken,
STANDALONE_TERMINAL_ACTOR_ID: ulid(),
...vapid,
},
stdio: ['ignore', 'pipe', 'pipe'],
});
child.stdout.pipe(log);
child.stderr.pipe(log);
const base = `http://127.0.0.1:${port}/api/v1/staff`;
async function api(method, route, token, body) {
const response = await fetch(`${base}${route}`, {
method,
headers: {
authorization: `Bearer ${token}`,
...(body ? { 'content-type': 'application/json' } : {}),
},
...(body ? { body: JSON.stringify(body) } : {}),
});
const text = await response.text();
let json = null;
try {
json = JSON.parse(text);
} catch {
// не JSON
}
return { status: response.status, json, text };
}
try {
for (let i = 0; i < 240; i += 1) {
try {
if ((await fetch(`${base}/ready`)).status === 200) break;
} catch {
// ещё не слушает
}
await new Promise((resolve) => setTimeout(resolve, 250));
}
await migrator.query("SELECT set_config('app.tenant_id', $1, false)", [tenantId]);
const month = (() => {
const date = new Date();
date.setUTCDate(1);
date.setUTCMonth(date.getUTCMonth() - 1);
return date.toISOString().slice(0, 7);
})();
let hourlyRule = null;
if (withSessions) {
const rules = await api('GET', '/pay-rules', managerToken);
hourlyRule = (
rules.json.pay_rules.find((rule) => rule.code === 'hourly') ?? rules.json.pay_rules[0]
).id;
}
async function prepareUnit() {
const code = `n13-${ulid().slice(-10).toLowerCase()}`;
const suffix = ulid().slice(-8);
const imported = await api('POST', '/imports/owner-workbook', managerToken, {
source_name: `n13-import-${suffix}`,
units: [{ code, name: `Синтетическая точка ${suffix}` }],
...(withSessions
? {
employees: [
{
external_ref: `n13:${suffix}`,
personnel_number: `N13-${suffix}`,
display_name: `Синтетический ${suffix}`,
},
],
}
: {}),
});
if (imported.status >= 300) throw new Error(`import ${imported.status} ${imported.text}`);
const unitId = (await migrator.query('SELECT id FROM staff_org_units WHERE code = $1', [code]))
.rows[0].id;
if (withSessions) {
const employeeId = (
await migrator.query('SELECT id FROM staff_employees WHERE external_ref = $1', [
`n13:${suffix}`,
])
).rows[0].id;
const assign = await api('PUT', `/employees/${employeeId}/pay-assignment`, managerToken, {
pay_rule_id: hourlyRule,
org_unit_id: unitId,
rate_minor: 12345,
effective_from: '2026-01-01',
});
if (assign.status !== 200) throw new Error(`assign ${assign.status} ${assign.text}`);
const start = new Date(`${month}-10T09:00:00Z`);
for (const [eventType, at] of [
['check_in', start],
['check_out', new Date(start.getTime() + 8 * 3_600_000)],
]) {
const event = await api('POST', '/attendance/events', terminalToken, {
employee_id: employeeId,
event_type: eventType,
occurred_at: at.toISOString(),
source_event_id: `n13-${ulid()}`,
org_unit_id: unitId,
});
if (event.status !== 201) throw new Error(`clock ${event.status} ${event.text}`);
}
const day = start.toISOString().slice(0, 10);
const reconcile = await api('POST', '/work-sessions/reconcile', managerToken, {
date_from: day,
date_to: day,
});
if (reconcile.status !== 200) throw new Error(`reconcile ${reconcile.status}`);
const sessionId = (
await migrator.query('SELECT id FROM staff_work_sessions WHERE employee_id = $1', [
employeeId,
])
).rows[0].id;
const confirm = await api('PATCH', `/work-sessions/${sessionId}`, managerToken, {
status: 'confirmed',
});
if (confirm.status !== 200)
throw new Error(`confirm ${confirm.status} ${confirm.text.slice(0, 200)}`);
}
return unitId;
}
let totalBad = 0;
const summary = [];
for (const size of sizes) {
for (let attempt = 1; attempt <= attempts; attempt += 1) {
const unitId = await prepareUnit();
const responses = await Promise.all(
Array.from({ length: size }, () =>
api('POST', '/payroll/calculate', managerToken, { month, org_unit_id: unitId }),
),
);
const statuses = {};
const errors = {};
const runIds = new Set();
for (const response of responses) {
statuses[response.status] = (statuses[response.status] ?? 0) + 1;
if (response.status === 200) {
const id = response.json?.run_id ?? response.json?.id ?? response.json?.run?.id;
if (id) runIds.add(id);
} else {
const key = (
response.json?.error?.message ??
response.json?.message ??
response.text
).slice(0, 90);
errors[key] = (errors[key] ?? 0) + 1;
}
}
const dbRuns = (
await migrator.query('SELECT id FROM staff_payroll_runs WHERE org_unit_id = $1', [unitId])
).rows.map((row) => row.id);
const dbLines = Number(
(
await migrator.query(
'SELECT count(*) AS n FROM staff_payroll_lines WHERE org_unit_id = $1',
[unitId],
)
).rows[0].n,
);
const phantom = [...runIds].filter((id) => !dbRuns.includes(id));
const ok =
(statuses[200] ?? 0) === size &&
runIds.size === 1 &&
dbRuns.length === 1 &&
phantom.length === 0;
if (!ok) totalBad += 1;
const line =
`[n13] mode=${mode} sessions=${withSessions} N=${size} attempt=${attempt}: ` +
`statuses=${JSON.stringify(statuses)} distinct_run_ids=${runIds.size} db_runs=${dbRuns.length} db_lines=${dbLines} ` +
`phantom_run_ids=${phantom.length} errors=${JSON.stringify(errors)} -> ${ok ? 'OK' : 'BAD'}`;
console.log(line);
summary.push(ok);
}
}
console.log(
`[n13] ИТОГ mode=${mode} sessions=${withSessions}: попыток ${summary.length}, некорректных ${totalBad}`,
);
process.exitCode = totalBad > 0 ? 1 : 0;
} finally {
await migrator.end();
child.kill('SIGTERM');
}

128
scripts/test/run-e2e.mjs Normal file
View file

@ -0,0 +1,128 @@
#!/usr/bin/env node
// Запуск e2e с «храповиком» известных дефектов.
// * Сценарии проверяют ПРАВИЛЬНОЕ поведение, поэтому открытые дефекты дают красные тесты.
// * tests/e2e/known-defects.json — список ID, красный цвет которых сейчас ожидаем.
// * exit 0, если: все [HARNESS]-тесты зелёные И каждый красный тест есть в списке
// И ни один ID из списка не стал полностью зелёным (исправленный дефект нужно
// убрать из списка — иначе регрессию потом никто не заметит).
// * --no-known-defects: строгий режим, exit = код vitest (все дефекты красные).
// Полный вывод пишется в tests/e2e/evidence/e2e-run.txt, таблица — в e2e-table.md.
import { spawn, spawnSync } from 'node:child_process';
import { createWriteStream, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
import path from 'node:path';
const repoRoot = path.resolve(import.meta.dirname, '../..');
const evidence = path.join(repoRoot, 'tests/e2e/evidence');
mkdirSync(evidence, { recursive: true });
const strict = process.argv.includes('--no-known-defects');
const jsonPath = path.join(evidence, 'e2e-results.json');
const logPath = path.join(evidence, 'e2e-run.txt');
const extra = process.argv.slice(2).filter((arg) => !arg.startsWith('--no-known-defects'));
const vitestArgs = [
'vitest',
'run',
'--config',
'tests/e2e/vitest.e2e.config.ts',
'--reporter=verbose',
'--reporter=json',
`--outputFile.json=${jsonPath}`,
...extra,
];
const log = createWriteStream(logPath);
log.write(`$ npx ${vitestArgs.join(' ')}\n`);
const exitCode = await new Promise((resolve) => {
const child = spawn('npx', vitestArgs, { cwd: repoRoot, env: process.env });
for (const stream of [child.stdout, child.stderr]) {
stream.on('data', (chunk) => {
process.stdout.write(chunk);
log.write(chunk);
});
}
child.on('close', (code) => resolve(code ?? 1));
});
log.end();
let results;
try {
results = JSON.parse(readFileSync(jsonPath, 'utf8'));
} catch {
console.error('[run-e2e] нет JSON-результатов: стенд не поднялся (см. e2e-run.txt)');
process.exit(1);
}
const known = strict
? {}
: JSON.parse(readFileSync(path.join(repoRoot, 'tests/e2e/known-defects.json'), 'utf8')).defects;
const byId = new Map();
for (const file of results.testResults) {
for (const test of file.assertionResults) {
const id = /^\[([A-Z0-9-]+)\]/.exec(test.title)?.[1] ?? 'UNTAGGED';
const entry = byId.get(id) ?? { passed: 0, failed: 0, tests: [] };
if (test.status === 'passed') entry.passed += 1;
else if (test.status === 'failed') entry.failed += 1;
entry.tests.push({ title: test.title, status: test.status });
byId.set(id, entry);
}
}
const problems = [];
// Страховка: в evidence не должно попасть ничего похожего на секреты стенда
// (hex-токены 48/64 символа, токены устройств kstaff_dev_*, URL с паролем).
const secretPatterns = [
/\b[0-9a-f]{48}\b/,
/\b[0-9a-f]{64}\b/,
/kstaff_dev_[0-9A-Z]{26}_[0-9a-f]{16,}/,
/postgres:\/\/[^\s:@]+:[^\s@]+@/,
];
for (const name of readdirSync(evidence)) {
const content = readFileSync(path.join(evidence, name), 'utf8');
for (const pattern of secretPatterns) {
if (pattern.test(content))
problems.push(`evidence/${name}: найдено похожее на секрет (${pattern})`);
}
}
const rows = [];
for (const [id, entry] of [...byId.entries()].sort()) {
const red = entry.failed > 0;
let verdict;
if (id === 'HARNESS' || id === 'UNTAGGED') {
verdict = red ? 'СТЕНД СЛОМАН' : 'зелёный (позитивный контроль)';
if (red || id === 'UNTAGGED') problems.push(`${id}: ${red ? 'красный' : 'тест без ID'}`);
} else if (red && known[id]) verdict = 'красный (известный дефект)';
else if (red) {
verdict = 'красный (НЕ в known-defects)';
problems.push(`${id}: новый красный тест — регрессия или новый дефект`);
} else if (known[id]) {
verdict = 'зелёный — ИСПРАВЛЕН, уберите из known-defects.json';
problems.push(`${id}: дефект исправлен, обновите known-defects.json`);
} else verdict = 'зелёный';
rows.push(
`| ${id} | ${red ? 'RED' : 'GREEN'} | ${entry.passed}/${entry.passed + entry.failed} | ${verdict} |`,
);
}
for (const id of Object.keys(known)) {
if (!byId.has(id)) problems.push(`${id}: есть в known-defects.json, но сценария нет`);
}
const table = ['| ID | Цвет | Зелёных/всего | Вердикт |', '|---|---|---|---|', ...rows].join('\n');
writeFileSync(path.join(evidence, 'e2e-table.md'), `${table}\n`);
// Сгенерированные json/md приводятся к prettier, чтобы `npm run format:check` не
// краснел из-за evidence (tests/e2e/evidence не в .prettierignore).
spawnSync('npx', ['prettier', '--write', jsonPath, path.join(evidence, 'e2e-table.md')], {
cwd: repoRoot,
stdio: 'ignore',
});
console.log(`\n[run-e2e] vitest exit=${exitCode}\n${table}`);
if (strict) {
if (problems.some((p) => p.startsWith('evidence/'))) {
console.error(`\n[run-e2e] FAIL:\n- ${problems.join('\n- ')}`);
process.exit(1);
}
process.exit(exitCode);
}
if (problems.length > 0) {
console.error(`\n[run-e2e] FAIL:\n- ${problems.join('\n- ')}`);
process.exit(1);
}
console.log('\n[run-e2e] OK: стенд работает, все красные сценарии — известные открытые дефекты');

119
tests/e2e/00-harness.e2e.ts Normal file
View file

@ -0,0 +1,119 @@
// [HARNESS] Позитивный контроль стенда: эти тесты обязаны быть зелёными всегда.
// Если они красные — сломан сам стенд, и красные дефектные сценарии ничего не доказывают.
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
import pg from 'pg';
import { describe, expect, it } from 'vitest';
import { api, ctx, describeResponse } from './harness/client.js';
describe('HARNESS: реальный сервер + PostgreSQL 17', () => {
it('[HARNESS] сервер отвечает live/ready (ready проверяет БД)', async () => {
const live = await api('GET', '/live');
expect(live.status).toBe(200);
const ready = await api('GET', '/ready');
expect(ready.status, describeResponse(ready)).toBe(200);
expect(ready.body).toEqual({ status: 'ready' });
});
it('[HARNESS] БД: PostgreSQL 17, приложение под ролью без SUPERUSER/BYPASSRLS, мигратор без SUPERUSER', async () => {
const client = new pg.Client({ connectionString: ctx().appDatabaseUrl });
await client.connect();
try {
const version = await client.query<{ server_version_num: string }>('SHOW server_version_num');
expect(Number(version.rows[0]!.server_version_num)).toBeGreaterThanOrEqual(170000);
const roles = await client.query<{
rolname: string;
rolsuper: boolean;
rolbypassrls: boolean;
rolcreaterole: boolean;
}>(
`SELECT rolname, rolsuper, rolbypassrls, rolcreaterole FROM pg_roles
WHERE rolname IN (current_user, 'krona_migrator') ORDER BY rolname`,
);
expect(roles.rows).toEqual([
{ rolname: 'krona_migrator', rolsuper: false, rolbypassrls: false, rolcreaterole: false },
{ rolname: 'krona_staff_app', rolsuper: false, rolbypassrls: false, rolcreaterole: false },
]);
} finally {
await client.end();
}
});
it('[HARNESS] миграции применены мигратором, app-роль не видит schema_migrations', async () => {
const migrator = new pg.Client({ connectionString: ctx().migrationDatabaseUrl });
await migrator.connect();
try {
const applied = await migrator.query<{ count: string }>(
'SELECT count(*)::text AS count FROM schema_migrations',
);
expect(Number(applied.rows[0]!.count)).toBeGreaterThanOrEqual(11);
} finally {
await migrator.end();
}
const app = new pg.Client({ connectionString: ctx().appDatabaseUrl });
await app.connect();
try {
await expect(app.query('SELECT 1 FROM schema_migrations')).rejects.toThrow(
/permission denied/,
);
} finally {
await app.end();
}
});
it('[HARNESS] токены: без токена 401, случайный токен 401, manager-токен 200', async () => {
expect((await api('GET', '/portal')).status).toBe(401);
expect((await api('GET', '/portal', { token: 'x'.repeat(64) })).status).toBe(401);
const ok = await api('GET', '/portal', { token: ctx().managerToken });
expect(ok.status, describeResponse(ok)).toBe(200);
expect(ok.body.viewer.role).toBe('manager');
});
it('[HARNESS] терминал: отметка сотрудника из импорта принимается (201)', async () => {
const { importEmployees, clock, daysAgo } = await import('./harness/fixtures.js');
const [employee] = await importEmployees(1);
const response = await clock(employee!.id, 'check_in', daysAgo(1));
expect(response.status, describeResponse(response)).toBe(201);
});
// [CTRL] Позитивные контроли безопасности, которые аудит признал рабочими: они
// должны оставаться зелёными и доказывают, что сценарии умеют быть зелёными.
it('[CTRL] RBAC: терминал не видит портал и не создаёт сотрудников; сотрудник видит только себя', async () => {
const { importEmployees, issueEmployeeToken } = await import('./harness/fixtures.js');
const [self, other] = await importEmployees(2);
const employeeToken = await issueEmployeeToken(self!.id);
const terminalPortal = await api('GET', '/portal', { token: ctx().terminalToken });
const terminalCreate = await api('POST', '/employees', {
token: ctx().terminalToken,
body: { personnel_number: 'E2E-CTRL', display_name: 'E2E-CTRL' },
});
const own = await api('GET', '/portal', { token: employeeToken });
const rows = (own.body?.employees ?? []) as Array<{ id: string }>;
const ids = rows.map((row) => row.id);
expect({
terminalPortal: terminalPortal.status,
terminalCreate: terminalCreate.status,
own: own.status,
seesSelf: ids.includes(self!.id),
seesOther: ids.includes(other!.id),
}).toEqual({
terminalPortal: 403,
terminalCreate: 403,
own: 200,
seesSelf: true,
seesOther: false,
});
});
it('[CTRL] уволенный сотрудник теряет доступ (401)', async () => {
const { importEmployees, issueEmployeeToken } = await import('./harness/fixtures.js');
const [employee] = await importEmployees(1);
const employeeToken = await issueEmployeeToken(employee!.id);
expect((await api('GET', '/portal', { token: employeeToken })).status).toBe(200);
const dismiss = await api('PATCH', `/employees/${employee!.id}`, {
token: ctx().managerToken,
body: { status: 'dismissed' },
});
expect(dismiss.status, describeResponse(dismiss)).toBe(200);
expect((await api('GET', '/portal', { token: employeeToken })).status).toBe(401);
});
});

View file

@ -0,0 +1,326 @@
// Сценарии дефектов основного API (ID из аудита Grok 2026-09-26; сопоставление с ID
// владельца — в REPORT.md). Каждый тест проверяет ПРАВИЛЬНОЕ поведение, поэтому
// красный тест = открытый дефект.
/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment */
import { createECDH, randomBytes } from 'node:crypto';
import { createServer, type Server } from 'node:net';
import { describe, expect, it } from 'vitest';
import { api, ctx, dbQuery, describeResponse } from './harness/client.js';
import { randomUlid, synthetic } from './harness/context.js';
import {
SYNTHETIC_RATE_MINOR,
assignHourly,
clock,
createOrgUnits,
daysAgo,
hourlyRuleId,
importEmployees,
isoDate,
issueEmployeeToken,
workedShift,
} from './harness/fixtures.js';
function pushKeys() {
const ecdh = createECDH('prime256v1');
ecdh.generateKeys();
return {
p256dh: ecdh.getPublicKey().toString('base64url'),
auth: randomBytes(16).toString('base64url'),
};
}
function monthOf(date: Date): string {
return date.toISOString().slice(0, 7);
}
async function accrualsFor(employeeId: string) {
return dbQuery<{ amount_minor: string; ref_id: string }>(
`SELECT amount_minor::text AS amount_minor, ref_id FROM staff_payroll_ledger
WHERE employee_id = $1 AND kind = 'accrual'`,
[employeeId],
);
}
describe('Основной API на реальной PostgreSQL', () => {
it('[N1] менеджер создаёт сотрудника через POST /employees → 201', async () => {
const number = `E2E-${randomUlid().slice(-8)}`;
const response = await api('POST', '/employees', {
token: ctx().managerToken,
body: {
personnel_number: number,
display_name: synthetic('Сотрудник'),
position: 'E2E-должность',
},
});
expect(response.status, describeResponse(response)).toBe(201);
const rows = await dbQuery('SELECT id FROM staff_employees WHERE personnel_number = $1', [
number,
]);
expect(rows).toHaveLength(1);
});
it('[N2] подтверждение смены, расчёт и утверждение зарплаты проходят (200) и начисляют 8 ч × ставка', async () => {
const [unit] = await createOrgUnits(1);
const [employee] = await importEmployees(1);
await assignHourly(employee!.id, unit!.id);
const day = daysAgo(3);
const sessionId = await workedShift(employee!.id, unit!.id, day, 8);
const confirm = await api('PATCH', `/work-sessions/${sessionId}`, {
token: ctx().managerToken,
body: { status: 'confirmed' },
});
expect(confirm.status, `подтверждение смены: ${describeResponse(confirm)}`).toBe(200);
const calculate = await api('POST', '/payroll/calculate', {
token: ctx().managerToken,
body: { month: monthOf(day), org_unit_id: unit!.id },
});
expect(calculate.status, `расчёт: ${describeResponse(calculate)}`).toBe(200);
const runId = (calculate.body.run_id ?? calculate.body.id ?? calculate.body.run?.id) as string;
const approve = await api('POST', `/payroll/runs/${runId}/approve`, {
token: ctx().managerToken,
});
expect(approve.status, `утверждение: ${describeResponse(approve)}`).toBe(200);
const accruals = await accrualsFor(employee!.id);
const total = accruals.reduce((sum, row) => sum + BigInt(row.amount_minor), 0n);
expect(total).toBe(BigInt(8 * SYNTHETIC_RATE_MINOR));
});
it('[N4] пересекающиеся расчёты не начисляют одну смену дважды', async () => {
const [unit] = await createOrgUnits(1);
const [employee] = await importEmployees(1);
await assignHourly(employee!.id, unit!.id);
const day = daysAgo(2);
const sessionId = await workedShift(employee!.id, unit!.id, day, 8);
const confirm = await api('PATCH', `/work-sessions/${sessionId}`, {
token: ctx().managerToken,
body: { status: 'confirmed' },
});
expect(
confirm.status,
`подтверждение смены (предусловие, см. N2): ${describeResponse(confirm)}`,
).toBe(200);
const month = monthOf(day);
const first = await api('POST', '/payroll/calculate', {
token: ctx().managerToken,
body: { month, org_unit_id: unit!.id },
});
expect(first.status, `первый расчёт (предусловие, см. N2): ${describeResponse(first)}`).toBe(
200,
);
const firstRun = (first.body.run_id ?? first.body.id) as string;
expect(
(await api('POST', `/payroll/runs/${firstRun}/approve`, { token: ctx().managerToken }))
.status,
).toBe(200);
const lastDay = new Date(Date.UTC(day.getUTCFullYear(), day.getUTCMonth() + 1, 0));
const secondFrom = new Date(Date.UTC(day.getUTCFullYear(), day.getUTCMonth(), 2));
const second = await api('POST', '/payroll/calculate', {
token: ctx().managerToken,
body: { from: isoDate(secondFrom), to: isoDate(lastDay), org_unit_id: unit!.id },
});
if (second.status === 200) {
const secondRun = (second.body.run_id ?? second.body.id) as string;
await api('POST', `/payroll/runs/${secondRun}/approve`, { token: ctx().managerToken });
} else {
expect(second.status, describeResponse(second)).toBe(409);
}
const accruals = await accrualsFor(employee!.id);
const total = accruals.reduce((sum, row) => sum + BigInt(row.amount_minor), 0n);
expect(total, 'смена должна быть начислена ровно один раз').toBe(
BigInt(8 * SYNTHETIC_RATE_MINOR),
);
});
it('[N3] push-подписка на внутренний адрес отклоняется, сервер не подключается к 127.0.0.1', async () => {
const [employee] = await importEmployees(1);
const employeeToken = await issueEmployeeToken(employee!.id);
let connections = 0;
const listener: Server = createServer((socket) => {
connections += 1;
socket.destroy();
});
await new Promise<void>((resolve) => listener.listen(0, '127.0.0.1', resolve));
const address = listener.address();
const port = typeof address === 'object' && address ? address.port : 0;
try {
const subscribe = await api('POST', '/push/subscriptions', {
token: employeeToken,
body: { endpoint: `https://127.0.0.1:${port}/e2e-internal-admin`, keys: pushKeys() },
});
// Инициируем отправку push этому сотруднику (отметка терминала) и ждём попытку соединения.
await clock(employee!.id, 'check_in', daysAgo(0, 0));
await new Promise((resolve) => setTimeout(resolve, 2_500));
expect(
{ status: subscribe.status, connections },
`подписка: ${describeResponse(subscribe)}`,
).toEqual({
status: expect.toSatisfy((s: number) => s === 400 || s === 422 || s === 403),
connections: 0,
});
} finally {
listener.close();
}
});
it('[N9] чужой push-endpoint нельзя перепривязать к другому сотруднику', async () => {
const [employeeA, employeeB] = await importEmployees(2);
const tokenA = await issueEmployeeToken(employeeA!.id);
const tokenB = await issueEmployeeToken(employeeB!.id);
const endpoint = `https://fcm.googleapis.com/fcm/send/e2e-${randomBytes(16).toString('hex')}`;
const first = await api('POST', '/push/subscriptions', {
token: tokenA,
body: { endpoint, keys: pushKeys() },
});
expect(first.status, describeResponse(first)).toBe(201);
const second = await api('POST', '/push/subscriptions', {
token: tokenB,
body: { endpoint, keys: pushKeys() },
});
const owner = await dbQuery<{ employee_id: string }>(
'SELECT employee_id FROM staff_push_subscriptions WHERE endpoint = $1',
[endpoint],
);
expect(
{ status: second.status, owner: owner.map((row) => row.employee_id) },
describeResponse(second),
).toEqual({
status: expect.toSatisfy((s: number) => s === 409 || s === 403),
owner: [employeeA!.id],
});
});
it('[N12] PUT pay-assignment отвергает лишние поля и нереальные суммы (400)', async () => {
const [employee] = await importEmployees(1);
const payRuleId = await hourlyRuleId();
const extra = await api('PUT', `/employees/${employee!.id}/pay-assignment`, {
token: ctx().managerToken,
body: { pay_rule_id: payRuleId, rate_minor: SYNTHETIC_RATE_MINOR, e2e_unexpected_field: 'x' },
});
const huge = await api('PUT', `/employees/${employee!.id}/pay-assignment`, {
token: ctx().managerToken,
body: {
pay_rule_id: payRuleId,
rate_minor: Number.MAX_SAFE_INTEGER,
guarantee_minor: Number.MAX_SAFE_INTEGER,
},
});
expect(
{ extra: extra.status, huge: huge.status },
`${describeResponse(extra)} | ${describeResponse(huge)}`,
).toEqual({
extra: 400,
huge: 400,
});
});
it('[N10] терминальный токен не читает справочники профессий и точек (403)', async () => {
const professions = await api('GET', '/professions', { token: ctx().terminalToken });
const units = await api('GET', '/org-units', { token: ctx().terminalToken });
expect({ professions: professions.status, units: units.status }).toEqual({
professions: 403,
units: 403,
});
});
it('[F2] standalone без токенов не выдаёт права менеджера анонимному запросу (401)', async () => {
const portal = await api('GET', '/portal', { base: 'open' });
const payroll = await api('GET', '/payroll', { base: 'open' });
const write = await api('POST', '/professions', {
base: 'open',
body: { name: synthetic('Профессия') },
});
expect({ portal: portal.status, payroll: payroll.status, write: write.status }).toEqual({
portal: 401,
payroll: 401,
write: 401,
});
});
it('[F3] cookie сессии не содержит сырой токен и отзывается при выходе', async () => {
const login = await api('POST', '/session', { body: { access_token: ctx().managerToken } });
expect(login.status, describeResponse(login)).toBe(200);
const setCookie = login.headers.get('set-cookie') ?? '';
const value = decodeURIComponent(
/__Host-krona_staff_session=([^;]*)/.exec(setCookie)?.[1] ?? '',
);
const cookie = `__Host-krona_staff_session=${encodeURIComponent(value)}`;
const logout = await api('DELETE', '/session', { headers: { cookie } });
expect(logout.status).toBe(204);
const reuse = await api('GET', '/portal', { headers: { cookie } });
expect({ rawTokenInCookie: value === ctx().managerToken, afterLogout: reuse.status }).toEqual({
rawTokenInCookie: false,
afterLogout: 401,
});
});
it('[F10] мутация по cookie без Origin отклоняется (CSRF, 403)', async () => {
const login = await api('POST', '/session', { body: { access_token: ctx().managerToken } });
const setCookie = login.headers.get('set-cookie') ?? '';
const cookie = /(__Host-krona_staff_session=[^;]*)/.exec(setCookie)?.[1] ?? '';
const response = await api('POST', '/professions', {
headers: { cookie },
body: { name: synthetic('CSRF-профессия') },
});
expect(response.status, describeResponse(response)).toBe(403);
});
it('[F7] повтор Idempotency-Key с другим телом не создаёт второе событие', async () => {
const [employee] = await importEmployees(1);
const key = `e2e-${randomUlid()}`;
const send = (sourceEventId: string) =>
api('POST', '/attendance/events', {
token: ctx().terminalToken,
headers: { 'idempotency-key': key },
body: {
employee_id: employee!.id,
event_type: 'check_in',
occurred_at: daysAgo(1).toISOString(),
source_event_id: sourceEventId,
},
});
const first = await send(`e2e-${randomUlid()}`);
const second = await send(`e2e-${randomUlid()}`);
expect({ first: first.status, secondCreated: second.status === 201 }).toEqual({
first: 201,
secondCreated: false,
});
});
it('[N11] импорт с неверным kind начисления → 400, а не 500', async () => {
const [employee] = await importEmployees(1);
const response = await api('POST', '/imports/owner-workbook', {
token: ctx().managerToken,
body: {
source_name: synthetic('import-bad-kind'),
payroll_entries: [
{
external_key: `e2e-${randomUlid()}`,
employee_external_ref: employee!.external_ref,
business_date: isoDate(daysAgo(1)),
kind: 'e2e_bogus_kind',
amount_minor: 100,
},
],
},
});
expect(response.status, describeResponse(response)).toBe(400);
});
it('[F4] перебор ключей входа ограничивается (429 не позже 30 неверных попыток)', async () => {
const statuses: number[] = [];
for (let attempt = 0; attempt < 30; attempt += 1) {
const response = await api('POST', '/session', {
base: 'ratelimit',
body: { access_token: randomBytes(32).toString('hex') },
});
statuses.push(response.status);
if (response.status === 429) break;
}
expect(statuses.includes(429), `статусы: ${[...new Set(statuses)].join(',')}`).toBe(true);
});
});

View file

@ -0,0 +1,287 @@
// Сценарии офлайн-синхронизации (/api/v1/staff/sync/*, миграция 0011).
// Проверяют ПРАВИЛЬНОЕ поведение: красный тест = открытый дефект.
/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call */
import { createHash } from 'node:crypto';
import { describe, expect, it } from 'vitest';
import { api, ctx, dbQuery, describeResponse } from './harness/client.js';
import { randomUlid, synthetic } from './harness/context.js';
import { createOrgUnits, daysAgo, importEmployees, isoDate } from './harness/fixtures.js';
interface Device {
id: string;
token: string;
}
async function registerDevice(orgUnitId?: string): Promise<Device> {
const response = await api('POST', '/sync/devices', {
token: ctx().managerToken,
body: {
device_code: `E2E-${randomUlid().slice(-10)}`,
name: synthetic('Терминал'),
...(orgUnitId ? { org_unit_id: orgUnitId } : {}),
},
});
expect(response.status, describeResponse(response)).toBe(201);
return { id: response.body.device.id as string, token: response.body.token as string };
}
function command(commandType: string, payload: Record<string, unknown>) {
return {
command_type: commandType,
schema_version: 1,
idempotency_key: `e2e-${randomUlid()}`,
correlation_id: randomUlid(),
created_at: new Date().toISOString(),
payload,
};
}
async function push(device: Device, commands: unknown[]) {
return api('POST', '/sync/push', { token: device.token, body: { commands } });
}
async function pullAll(device: Device, cursor: string | null = null) {
const changes: Array<{ entity_type: string; entity_id: string }> = [];
let next: string | null = cursor;
for (let page = 0; page < 50; page += 1) {
const response = await api('POST', '/sync/pull', {
token: device.token,
body: { cursor: next, limit: 100 },
});
expect(response.status, describeResponse(response)).toBe(200);
changes.push(...(response.body.changes as Array<{ entity_type: string; entity_id: string }>));
next = response.body.next_cursor as string;
if (!response.body.has_more) break;
}
return { changes, cursor: next };
}
describe('Офлайн-синхронизация на реальной PostgreSQL', () => {
it('[SYNC-A] устройство не может само подтвердить смену (status=confirmed отклоняется)', async () => {
const [unit] = await createOrgUnits(1);
const [employee] = await importEmployees(1);
const device = await registerDevice(unit!.id);
const sessionId = randomUlid();
const response = await push(device, [
command('upsert_work_session', {
id: sessionId,
employee_id: employee!.id,
org_unit_id: unit!.id,
business_date: isoDate(daysAgo(1)),
worked_minutes: 600,
status: 'confirmed',
}),
]);
const stored = await dbQuery<{ status: string }>(
'SELECT status FROM staff_work_sessions WHERE id = $1',
[sessionId],
);
expect(
{
http: response.status,
result: response.body?.results?.[0]?.status,
stored: stored[0]?.status ?? null,
},
describeResponse(response),
).toEqual({ http: 200, result: 'rejected', stored: null });
});
it('[SYNC-B] устройство не может утвердить табель (status=approved отклоняется)', async () => {
const [employee] = await importEmployees(1);
const device = await registerDevice();
const entryId = randomUlid();
const response = await push(device, [
command('upsert_timesheet_entry', {
id: entryId,
employee_id: employee!.id,
work_date: isoDate(daysAgo(1)),
minutes_worked: 600,
status: 'approved',
}),
]);
const stored = await dbQuery<{ status: string }>(
'SELECT status FROM staff_timesheet_entries WHERE id = $1',
[entryId],
);
expect(
{ result: response.body?.results?.[0]?.status, stored: stored[0]?.status ?? null },
describeResponse(response),
).toEqual({ result: 'rejected', stored: null });
});
it('[SYNC-C0] начальная загрузка (pull без курсора) работает на реальной БД (200)', async () => {
await createOrgUnits(1);
await importEmployees(1);
const device = await registerDevice();
const response = await api('POST', '/sync/pull', {
token: device.token,
body: { cursor: null },
});
expect(response.status, describeResponse(response)).toBe(200);
const types = new Set(
(response.body.changes as Array<{ entity_type: string }>).map((c) => c.entity_type),
);
expect(types.has('employee') && types.has('org_unit')).toBe(true);
});
it('[SYNC-C] начальная загрузка >100 сущностей отдаёт все сущности постранично', async () => {
const employees = await importEmployees(120);
const device = await registerDevice();
const { changes } = await pullAll(device, null);
const received = new Set(
changes.filter((c) => c.entity_type === 'employee').map((c) => c.entity_id),
);
const missing = employees.filter((employee) => !received.has(employee.id)).length;
expect(missing, `не доставлено сотрудников: ${missing} из ${employees.length}`).toBe(0);
});
it('[SYNC-D] изменения, сделанные через портал, попадают в инкрементальный pull', async () => {
const device = await registerDevice();
// Курсор берём из /sync/status, чтобы сценарий не зависел от начальной загрузки (SYNC-C0).
const status = await api('GET', '/sync/status', { token: device.token });
expect(status.status, describeResponse(status)).toBe(200);
const cursor = status.body.latest_cursor as string;
const [employee] = await importEmployees(1);
const patch = await api('PATCH', `/employees/${employee!.id}`, {
token: ctx().managerToken,
body: { display_name: synthetic('Переименован') },
});
expect(patch.status, describeResponse(patch)).toBe(200);
const { changes } = await pullAll(device, cursor);
expect(changes.some((c) => c.entity_type === 'employee' && c.entity_id === employee!.id)).toBe(
true,
);
});
it('[SYNC-E] отметка уволенного сотрудника через sync отклоняется', async () => {
const [employee] = await importEmployees(1);
const dismiss = await api('PATCH', `/employees/${employee!.id}`, {
token: ctx().managerToken,
body: { status: 'dismissed' },
});
expect(dismiss.status, describeResponse(dismiss)).toBe(200);
const device = await registerDevice();
const response = await push(device, [
command('attendance_event', {
employee_id: employee!.id,
event_type: 'check_in',
occurred_at: daysAgo(0, 0).toISOString(),
}),
]);
expect(response.body?.results?.[0]?.status, describeResponse(response)).toBe('rejected');
});
it('[SYNC-F] отметка через sync сохраняет точку устройства; чужая точка в payload отклоняется', async () => {
const [unitA, unitB] = await createOrgUnits(2);
const [employee] = await importEmployees(1);
const device = await registerDevice(unitA!.id);
const own = command('attendance_event', {
employee_id: employee!.id,
event_type: 'check_in',
occurred_at: daysAgo(0, 0).toISOString(),
});
const foreign = command('attendance_event', {
employee_id: employee!.id,
event_type: 'check_out',
occurred_at: new Date(daysAgo(0, 0).getTime() + 60_000).toISOString(),
org_unit_id: unitB!.id,
});
const response = await push(device, [own, foreign]);
expect(response.status, describeResponse(response)).toBe(200);
const ownEventId = response.body.results[0]?.result?.event_id as string | undefined;
const stored = await dbQuery<{ org_unit_id: string | null }>(
'SELECT org_unit_id FROM staff_attendance_events WHERE id = $1',
[ownEventId ?? ''],
);
expect(
{
ownOrgUnit: stored[0]?.org_unit_id ?? null,
foreign: response.body.results[1]?.status,
},
describeResponse(response),
).toEqual({ ownOrgUnit: unitA!.id, foreign: 'rejected' });
});
it('[SYNC-G] битая команда в пакете отклоняется по отдельности, остальные применяются (не 500)', async () => {
const [employee] = await importEmployees(1);
const device = await registerDevice();
const good = command('attendance_event', {
employee_id: employee!.id,
event_type: 'check_in',
occurred_at: daysAgo(0, 0).toISOString(),
});
const bad = command('attendance_event', {
employee_id: employee!.id,
event_type: 'check_out',
occurred_at: 'e2e-not-a-timestamp',
});
const response = await push(device, [good, bad]);
expect(
{
http: response.status,
statuses: (response.body?.results ?? []).map((r: { status: string }) => r.status),
},
describeResponse(response),
).toEqual({ http: 200, statuses: ['applied', 'rejected'] });
});
it('[SYNC-H] регистрация устройства по cookie с чужим Origin отклоняется (CSRF, 403)', async () => {
const login = await api('POST', '/session', { body: { access_token: ctx().managerToken } });
const cookie =
/(__Host-krona_staff_session=[^;]*)/.exec(login.headers.get('set-cookie') ?? '')?.[1] ?? '';
const response = await api('POST', '/sync/devices', {
headers: { cookie, origin: 'https://attacker.e2e.invalid' },
body: { device_code: `E2E-${randomUlid().slice(-10)}`, name: synthetic('CSRF-терминал') },
});
expect(response.status, describeResponse(response)).toBe(403);
});
it('[SYNC-I] без настроенных токенов анонимный запрос не регистрирует устройство (401)', async () => {
const response = await api('POST', '/sync/devices', {
base: 'open',
body: {
device_code: `E2E-${randomUlid().slice(-10)}`,
name: synthetic('Анонимный терминал'),
},
});
expect(response.status, describeResponse(response)).toBe(401);
});
it('[SYNC-J] отметка через sync вне окна времени (2001 год) отклоняется, как в POST /attendance/events', async () => {
const [employee] = await importEmployees(1);
const device = await registerDevice();
const response = await push(device, [
command('attendance_event', {
employee_id: employee!.id,
event_type: 'check_in',
occurred_at: '2001-01-01T09:00:00.000Z',
}),
]);
expect(response.body?.results?.[0]?.status, describeResponse(response)).toBe('rejected');
});
it('[SYNC-K] ack курсора из будущего (больше выданного сервером) отклоняется (400)', async () => {
const device = await registerDevice();
const tenant = ctx().tenantId;
const seq = '999999999';
const hash = createHash('sha256')
.update(`${tenant}:${seq}:krona_staff_sync_cursor_salt_v1`)
.digest('hex')
.slice(0, 12);
const response = await api('POST', '/sync/ack', {
token: device.token,
body: { cursor: `cur_${seq}_${hash}` },
});
expect(response.status, describeResponse(response)).toBe(400);
});
it('[SYNC-L] отозванное устройство не может синхронизироваться (403) — позитивный контроль', async () => {
const device = await registerDevice();
const revoke = await api('POST', `/sync/devices/${device.id}/revoke`, {
token: ctx().managerToken,
});
expect(revoke.status, describeResponse(revoke)).toBe(200);
const status = await api('GET', '/sync/status', { token: device.token });
expect(status.status).toBe(403);
});
});

View file

@ -0,0 +1,270 @@
// Сценарии решений владельца (ожидаемо КРАСНЫЕ до этапа 4 Codex).
// Публичного API для ролей точки/бухгалтера/директора, пакетов зарплаты и согласия
// на биометрию пока нет, поэтому тесты написаны против наиболее вероятного контракта,
// описанного в tests/e2e/NOTES-FOR-EXECUTORS.md (C1–C3). Если Codex выберет другой
// контракт — меняется только этот файл и NOTES, смысл проверок остаётся.
/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment */
import { describe, expect, it } from 'vitest';
import { api, ctx, dbQuery, describeResponse } from './harness/client.js';
import { synthetic } from './harness/context.js';
import {
assignHourly,
createOrgUnits,
daysAgo,
importEmployees,
isoDate,
workedShift,
type OrgUnit,
} from './harness/fixtures.js';
type Role = 'point_manager' | 'accountant' | 'director';
/** C1: главный менеджер выдаёт ключ роли (standalone-аналог Core RBAC). */
async function grant(role: Role, orgUnitIds: string[] = []): Promise<string> {
const response = await api('POST', '/access-grants', {
token: ctx().managerToken,
body: { role, org_unit_ids: orgUnitIds, display_name: synthetic(role) },
});
expect(response.status, `C1 POST /access-grants (${role}): ${describeResponse(response)}`).toBe(
201,
);
return response.body.access_token as string;
}
async function confirm(sessionId: string) {
const response = await api('PATCH', `/work-sessions/${sessionId}`, {
token: ctx().managerToken,
body: { status: 'confirmed' },
});
expect(response.status, `подтверждение смены (см. N2): ${describeResponse(response)}`).toBe(200);
}
interface World {
unitA: OrgUnit;
unitB: OrgUnit;
employeeId: string;
sessionId: string;
day: Date;
}
/** Точка A и B, сотрудник точки A со сменой в точке A (по умолчанию подтверждённой; см. N2). */
async function world(confirmShift = true): Promise<World> {
const [unitA, unitB] = await createOrgUnits(2);
const [employee] = await importEmployees(1);
await assignHourly(employee!.id, unitA!.id);
const day = daysAgo(4);
const sessionId = await workedShift(employee!.id, unitA!.id, day, 8);
if (confirmShift) await confirm(sessionId);
return { unitA: unitA!, unitB: unitB!, employeeId: employee!.id, sessionId, day };
}
function period(day: Date) {
const from = new Date(Date.UTC(day.getUTCFullYear(), day.getUTCMonth(), 1));
const to = new Date(Date.UTC(day.getUTCFullYear(), day.getUTCMonth() + 1, 0));
return { from: isoDate(from), to: isoDate(to) };
}
/** C2: пакет зарплаты точки за месяц. */
async function createBatch(token: string, orgUnitId: string, day: Date) {
return api('POST', '/payroll/batches', {
token,
body: { org_unit_id: orgUnitId, ...period(day) },
});
}
async function submittedBatch(w: World, accountant: string): Promise<string> {
const created = await createBatch(accountant, w.unitA.id, w.day);
expect(created.status, `C2 создание пакета: ${describeResponse(created)}`).toBe(201);
const batchId = created.body.id as string;
const submit = await api('POST', `/payroll/batches/${batchId}/submit`, { token: accountant });
expect(submit.status, `C2 отправка пакета: ${describeResponse(submit)}`).toBe(200);
return batchId;
}
async function ledgerFor(employeeId: string) {
return dbQuery<{ kind: string; amount_minor: string }>(
`SELECT kind, amount_minor::text AS amount_minor FROM staff_payroll_ledger WHERE employee_id = $1`,
[employeeId],
);
}
describe('Решения владельца: роли, пакеты зарплаты, согласие на биометрию', () => {
it('[OWN-01] менеджер точки A запускает расчёт для точки B → 403', async () => {
const w = await world(false);
const managerA = await grant('point_manager', [w.unitA.id]);
const batch = await createBatch(managerA, w.unitB.id, w.day);
const legacy = await api('POST', '/payroll/calculate', {
token: managerA,
body: { month: isoDate(w.day).slice(0, 7), org_unit_id: w.unitB.id },
});
expect({ batch: batch.status, legacy: legacy.status }).toEqual({ batch: 403, legacy: 403 });
});
it('[OWN-02] менеджер точки отправляет пакет на согласование → 403', async () => {
const w = await world(false);
const managerA = await grant('point_manager', [w.unitA.id]);
const created = await createBatch(managerA, w.unitA.id, w.day);
expect(
created.status,
`C2 создание пакета менеджером своей точки: ${describeResponse(created)}`,
).toBe(201);
const submit = await api('POST', `/payroll/batches/${created.body.id}/submit`, {
token: managerA,
});
expect(submit.status, describeResponse(submit)).toBe(403);
});
it('[OWN-03] бухгалтер отправляет пакет → успех, каждый директор получает ровно одно уведомление', async () => {
const accountant = await grant('accountant');
const directors = [await grant('director'), await grant('director')];
const w = await world();
const batchId = await submittedBatch(w, accountant);
for (const director of directors) {
const inbox = await api('GET', '/notifications', { token: director });
expect(inbox.status, `C2 уведомления директора: ${describeResponse(inbox)}`).toBe(200);
const aboutBatch = (
inbox.body.notifications as Array<{ type: string; subject_id: string }>
).filter((n) => n.type === 'payroll.batch.submitted' && n.subject_id === batchId);
expect(aboutBatch).toHaveLength(1);
}
});
it('[OWN-04] бухгалтер пытается подписать пакет → 403', async () => {
const accountant = await grant('accountant');
const w = await world();
const batchId = await submittedBatch(w, accountant);
const sign = await api('POST', `/payroll/batches/${batchId}/sign`, { token: accountant });
expect(sign.status, describeResponse(sign)).toBe(403);
});
it('[OWN-05] до подписи директора в ledger нет начислений и выплат', async () => {
const accountant = await grant('accountant');
const w = await world();
await submittedBatch(w, accountant);
expect(await ledgerFor(w.employeeId)).toEqual([]);
});
it('[OWN-06] подпись директора → начисления и выплаты в ledger, пакет и смены неизменяемы', async () => {
const accountant = await grant('accountant');
const director = await grant('director');
const w = await world();
const batchId = await submittedBatch(w, accountant);
const sign = await api('POST', `/payroll/batches/${batchId}/sign`, { token: director });
expect(sign.status, describeResponse(sign)).toBe(200);
const kinds = new Set((await ledgerFor(w.employeeId)).map((row) => row.kind));
const editShift = await api('PATCH', `/work-sessions/${w.sessionId}`, {
token: ctx().managerToken,
body: {
status: 'confirmed',
worked_minutes: 1,
correction_note: 'E2E попытка правки после подписи',
},
});
const resubmit = await api('POST', `/payroll/batches/${batchId}/submit`, { token: accountant });
expect({
accrual: kinds.has('accrual'),
payout: kinds.has('payout'),
editShift: editShift.status,
resubmit: resubmit.status,
}).toEqual({ accrual: true, payout: true, editShift: 409, resubmit: 409 });
});
it('[OWN-07] смена изменена после отправки → подписать нельзя (409), пакет возвращён бухгалтеру', async () => {
const accountant = await grant('accountant');
const director = await grant('director');
const w = await world();
const batchId = await submittedBatch(w, accountant);
const edit = await api('PATCH', `/work-sessions/${w.sessionId}`, {
token: ctx().managerToken,
body: {
status: 'confirmed',
worked_minutes: 420,
correction_note: 'E2E правка после отправки',
},
});
expect(edit.status, describeResponse(edit)).toBe(200);
const sign = await api('POST', `/payroll/batches/${batchId}/sign`, { token: director });
const batch = await api('GET', `/payroll/batches/${batchId}`, { token: accountant });
expect({ sign: sign.status, status: batch.body?.status }).toEqual({
sign: 409,
status: 'returned',
});
});
it('[OWN-08] возврат с комментарием → пакет у бухгалтера, комментарий сохранён', async () => {
const accountant = await grant('accountant');
const director = await grant('director');
const w = await world();
const batchId = await submittedBatch(w, accountant);
const comment = synthetic('Комментарий директора');
const back = await api('POST', `/payroll/batches/${batchId}/return`, {
token: director,
body: { comment },
});
expect(back.status, describeResponse(back)).toBe(200);
const batch = await api('GET', `/payroll/batches/${batchId}`, { token: accountant });
expect({ status: batch.body?.status, comment: batch.body?.return_comment }).toEqual({
status: 'returned',
comment,
});
});
it('[OWN-09] сотрудник точки A отработал смену в точке B → смена попадает в зарплату точки B', async () => {
const accountant = await grant('accountant');
const [unitA, unitB] = await createOrgUnits(2);
const [employee] = await importEmployees(1);
await assignHourly(employee!.id, unitA!.id);
const day = daysAgo(5);
const sessionId = await workedShift(employee!.id, unitB!.id, day, 6);
await confirm(sessionId);
const batchB = await createBatch(accountant, unitB!.id, day);
const batchA = await createBatch(accountant, unitA!.id, day);
expect(batchB.status, describeResponse(batchB)).toBe(201);
const sessionsOf = (batch: typeof batchB) =>
((batch.body?.lines ?? []) as Array<{ work_session_id: string }>).map(
(l) => l.work_session_id,
);
expect({
inB: sessionsOf(batchB).includes(sessionId),
inA: sessionsOf(batchA).includes(sessionId),
}).toEqual({
inB: true,
inA: false,
});
});
it('[OWN-10] сотрудник без согласия на биометрию → сервер сообщает терминалу «регистрация запрещена»', async () => {
const [employee] = await importEmployees(1);
const response = await api('GET', `/terminal/employees/${employee!.id}/enrollment`, {
token: ctx().terminalToken,
});
expect(response.status, `C3: ${describeResponse(response)}`).toBe(200);
expect(response.body).toMatchObject({ registration_allowed: false, reason: 'consent_missing' });
});
it('[OWN-11] согласие отозвано → статус для терминала меняется', async () => {
const [employee] = await importEmployees(1);
const setConsent = (status: 'granted' | 'revoked') =>
api('PUT', `/employees/${employee!.id}/biometric-consent`, {
token: ctx().managerToken,
body: { status, document_ref: synthetic('согласие') },
});
const enrollment = () =>
api('GET', `/terminal/employees/${employee!.id}/enrollment`, { token: ctx().terminalToken });
const granted = await setConsent('granted');
expect(granted.status, `C3 PUT biometric-consent: ${describeResponse(granted)}`).toBe(200);
const before = await enrollment();
const revoked = await setConsent('revoked');
expect(revoked.status, describeResponse(revoked)).toBe(200);
const after = await enrollment();
expect({
before: before.body?.registration_allowed,
after: after.body?.registration_allowed,
reason: after.body?.reason,
}).toEqual({
before: true,
after: false,
reason: 'consent_revoked',
});
});
});

View file

@ -0,0 +1,56 @@
// Статическая проверка deploy/pilot/compose.yaml (аналог tests/unit/deployment.test.ts
// для корневого compose.yaml). Лежит в tests/e2e, а не в tests/unit: у исполнителя
// теста нет права менять tests/unit, а красные пункты (открытые дефекты deploy/)
// должны идти через known-defects.json, не ломая `npm run check`.
import { readFileSync } from 'node:fs';
import path from 'node:path';
import { describe, expect, it } from 'vitest';
import { parse } from 'yaml';
const composePath = path.resolve(import.meta.dirname, '../../deploy/pilot/compose.yaml');
const raw = readFileSync(composePath, 'utf8');
const compose = parse(raw) as {
services: Record<string, { environment?: Record<string, string | number> | string[] }>;
};
function environmentOf(service: string): Record<string, string> {
const env = compose.services[service]?.environment ?? {};
if (Array.isArray(env)) {
return Object.fromEntries(
env.map((entry) => {
const index = entry.indexOf('=');
return index < 0 ? [entry, ''] : [entry.slice(0, index), entry.slice(index + 1)];
}),
);
}
return Object.fromEntries(Object.entries(env).map(([key, value]) => [key, String(value)]));
}
describe('deploy/pilot/compose.yaml', () => {
it('[PILOT-1] все подставляемые переменные обязательны: ${VAR:?сообщение}', () => {
const interpolations = [...raw.matchAll(/\$\{([^}]*)\}/g)].map((match) => match[1]!);
expect(interpolations.length).toBeGreaterThan(0);
const optional = interpolations.filter((inner) => !/^[A-Z0-9_]+:\?.+$/.test(inner));
expect(optional, 'переменные без :? — пустое значение молча попадёт в контейнер').toEqual([]);
});
it('[PILOT-2] ни один сервис не запускается с NODE_ENV=development', () => {
const offenders = Object.keys(compose.services).filter(
(service) => environmentOf(service).NODE_ENV === 'development',
);
expect(offenders).toEqual([]);
});
it('[PILOT-3] у сервиса app нет учётных данных мигратора', () => {
const env = environmentOf('app');
const keys = Object.keys(env).filter((key) =>
['DATABASE_MIGRATION_URL', 'POSTGRES_MIGRATION_PASSWORD', 'POSTGRES_MIGRATION_USER'].includes(
key,
),
);
const values = Object.entries(env)
.filter(([, value]) => /POSTGRES_MIGRATION_PASSWORD|krona_migrator/.test(value))
.map(([key]) => key);
expect({ keys, values }).toEqual({ keys: [], values: [] });
});
});

View file

@ -0,0 +1,141 @@
# Заметки для исполнителей (Codex / Antigravity)
Автор: Grok (стенд тестов и независимая приёмка). Я не меняю `src/`, `apps/`,
`migrations/`, `deploy/`; всё, что требует изменения продукта, описано здесь.
Как запускать:
```sh
# bootstrap-админ PostgreSQL 17 (только создаёт роли и БД; сервер и миграции под ним не работают)
export E2E_PG_ADMIN_URL=postgres://<admin>:<pass>@127.0.0.1:55433/postgres
node scripts/test/run-e2e.mjs # храповик known-defects (как в CI)
node scripts/test/run-e2e.mjs --no-known-defects # строгий режим: все дефекты красные
E2E_MIGRATIONS=roundtrip node scripts/test/run-e2e.mjs # + откат всех миграций перед запуском
./scripts/test/ci-local.sh # локальный эквивалент verify/format/e2e
```
**Правило храповика.** Исправили дефект → его сценарий позеленел →
`run-e2e.mjs` падает с «дефект исправлен, обновите known-defects.json» —
удалите ID из `tests/e2e/known-defects.json` в том же коммите. Новый красный
сценарий, которого нет в списке, — регрессия.
## 1. Предполагаемый контракт для решений владельца (OWN-01..11) — Codex, этап 4
API пока нет, поэтому сценарии `tests/e2e/30-owner-decisions.e2e.ts` написаны
против наиболее вероятного контракта. Если выбираете другой — поменяйте тесты и
этот раздел в том же PR, смысл проверок (кто что может и когда) менять нельзя.
Все пути относительно `/api/v1/staff`.
### C1. Роли точки/бухгалтера/директора (standalone-аналог Core RBAC)
- `POST /access-grants` (только главный менеджер, `staff:employee:write`)
тело `{ "role": "point_manager" | "accountant" | "director", "org_unit_ids": ["<ULID>"], "display_name": "..." }`
→ `201 { "id", "role", "org_unit_ids", "access_token" }`. Токен показывается один раз,
хранится как хеш (как ключи сотрудников), используется как `Authorization: Bearer`.
- `point_manager` видит/считает только свои `org_unit_ids`; чужая точка → `403`
(и для нового `POST /payroll/batches`, и для старого `POST /payroll/calculate`).
- В platform-режиме те же роли приходят из Core (User ≠ Employee, AGENTS.md).
### C2. Пакет зарплаты точки и согласование
| Метод и путь | Кто | Результат |
| ------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `POST /payroll/batches` `{org_unit_id, from, to}` | accountant; point_manager своей точки | `201 {id, status:"draft", org_unit_id, lines:[{work_session_id, employee_id, org_unit_id, amount_minor}]}` |
| `POST /payroll/batches/:id/submit` | только accountant | `200 {status:"submitted"}`; point_manager → `403`; повтор после подписи → `409` |
| `GET /notifications` | любой пользователь | `200 {notifications:[{type:"payroll.batch.submitted", subject_id:<batchId>}]}`; каждому директору ровно одно уведомление на отправку |
| `POST /payroll/batches/:id/sign` | только director | `200 {status:"signed"}`; accountant → `403`; если смена пакета изменилась после отправки → `409`, пакет получает `status:"returned"` |
| `POST /payroll/batches/:id/return` `{comment}` | director | `200 {status:"returned", return_comment}` |
| `GET /payroll/batches/:id` | accountant, director | `200 {status, return_comment, lines:[...]}` |
Инварианты, которые проверяют тесты:
- до подписи в `staff_payroll_ledger` для сотрудников пакета нет ни `accrual`, ни `payout` (OWN-05);
- подпись атомарно пишет `accrual` и `payout`; после подписи `PATCH /work-sessions/:id`
для смен пакета → `409`, пакет не отправляется повторно (OWN-06);
- строка пакета принадлежит точке, где отработана смена (`staff_work_sessions.org_unit_id`),
а не основной точке сотрудника (OWN-09).
### C3. Согласие на биометрию
- `PUT /employees/:id/biometric-consent` `{ "status": "granted" | "revoked", "document_ref": "..." }`
(главный менеджер) → `200`.
- `GET /terminal/employees/:id/enrollment` (терминальный токен) →
`200 { "employee_id", "registration_allowed": boolean, "reason": "consent_missing" | "consent_revoked" | null }`.
Без записи о согласии — `false/consent_missing` (OWN-10); после отзыва — `false/consent_revoked` (OWN-11).
- Шаблоны отпечатков на сервер не передаются (docs/TERMINAL-API-REQUIREMENTS.md);
сервер хранит только факт согласия. Тот же флаг стоит отдать в `/sync/pull` (employee payload).
Сейчас все OWN красные с `404 Route ... not found` (C1–C3 не реализованы);
OWN-03..09 дополнительно упрутся в N2 (подтверждение смены падает 500).
## 2. Дефекты продукта, найденные сценариями (все красные сейчас)
Команда и фактический вывод — `tests/e2e/evidence/e2e-run.txt`; таблица — `tests/e2e/REPORT.md`.
| ID | Файл | Что исправить |
| -------- | --------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| N1 | `src/portal.ts` POST /employees | `42P08 inconsistent types deduced for parameter $2`: явные `$2::varchar(26)`, `$5::text` или отдельный запрос профессии |
| N2 | `src/portal.ts` PATCH /work-sessions, `src/domain/payroll/service.ts` calculate/approve | `staff_outbox.occurred_at` NULL (23502): передавать `occurred_at` или `DEFAULT now()` новой миграцией |
| N4 | `service.ts` | после N2 проверить: пересекающийся период не должен начислять смену повторно (409 или исключение уже начисленных смен) |
| N3 | push-подписки | allowlist push-сервисов / запрет приватных адресов, `redirect:'manual'`; сейчас сервер подключается к `127.0.0.1` |
| N9 | `push-dispatcher.ts` | `ON CONFLICT ... DO UPDATE SET employee_id` → 409 для чужого endpoint |
| N10 | GET /professions, /org-units | требовать право справочника; терминал сейчас получает 200 |
| N11 | импорт | валидировать `kind` и схему `items` → 400 вместо 500 (23514) |
| N12 | PUT pay-assignment | `additionalProperties:false`, верхние границы сумм |
| F2 | `config.ts`/`identity.ts` | standalone без токенов не должен выдавать права (процесс без токенов отдаёт 200 на /portal, /payroll, POST /professions) |
| F3 | POST/DELETE /session | в cookie — идентификатор сессии, а не сырой токен; logout отзывает сессию |
| F4 | вход | rate limit (тест ждёт 429 не позже 30 неверных попыток; идёт на отдельном процессе, чтобы лимит не мешал другим сценариям) |
| F7 | POST /attendance/events | использовать `Idempotency-Key` / `staff_idempotency_keys` |
| F10 | `assertSameOrigin` | мутации по cookie без `Origin` отклонять |
| SYNC-A/B | `src/domain/sync/service.ts` | устройство не должно выставлять `confirmed`/`approved` (сейчас `applied`) |
| SYNC-C0 | `pull()` bootstrap | `SELECT ... status FROM staff_org_units` — такого столбца нет → 500 на любой начальной загрузке |
| SYNC-C | `pull()` bootstrap | при `has_more=true` отдаётся `next_cursor=latest`, остаток после 100 сущностей теряется; нужен курсор снимка |
| SYNC-D | портал/импорт | изменения вне sync не пишутся в `staff_sync_change_log` → терминал не узнаёт о новых/изменённых сотрудниках |
| SYNC-E | `executeCommand` | проверять `status='active'` сотрудника |
| SYNC-F | `executeCommand` | сохранять `org_unit_id` в `staff_attendance_events`; payload не может переопределить точку устройства |
| SYNC-G | `push()` | ошибки БД одной команды → `rejected` для неё, а не 500 и откат всего пакета |
| SYNC-H | `/sync/devices` | `assertCookieMutationOrigin` как в портале |
| SYNC-I | `requireManagerContext` | без токенов не выдавать права (как F2) |
| SYNC-J | `executeCommand` | окно времени отметки как в POST /attendance/events (−180 дней … +5 мин) |
| SYNC-K | `acknowledge()` | отклонять курсор больше `MAX(cursor_seq)` |
## 3. deploy/ (PILOT-1, PILOT-2) — Codex
- PILOT-1: все подстановки в `deploy/pilot/compose.yaml` → `${VAR:?VAR is required}`
(сейчас 14 без `:?`: пустой `STANDALONE_MANAGER_TOKEN` молча превращает pilot в F2).
- PILOT-2: `NODE_ENV: development` в `app`. Конфликт: `config.ts` запрещает
`STAFF_RUNTIME_MODE=standalone` при `NODE_ENV=production`. Нужно решение: либо
разрешить standalone в production при обязательных токенах и HTTPS, либо
отдельный режим для pilot. Тест требует только «не development».
- N6: `scripts/create-app-role.mjs` не работает мигратором без SUPERUSER
(«Only roles with SUPERUSER may change the SUPERUSER attribute»). CI и e2e
обходятся `scripts/test/provision-pg.mjs` (роли создаёт bootstrap-админ, как
`docker/postgres/init-app-role.sh`). В pilot мигратор = `POSTGRES_USER` =
суперпользователь; рекомендую схему как в provision-pg.mjs.
## 4. CI
- Задаче `docker-build` нужен раннер с меткой `docker-host` (Docker daemon).
Без него задача ждёт в очереди; остальные задачи не блокируются.
- `format` красная, пока не исправлен F14 (23 файла на замер 2026-09-26, в основном `src/`, `docs/`, `tests/unit/`).
- Реальный Forgejo-раннер мной не запускался (нет API-токена) — не проверено.
## 5. N13 (гонка первого расчёта) и утечка текста ошибок БД
- `scripts/test/n13-race.mjs`, вывод `tests/e2e/evidence/n13-race.txt`: 10/25/50
параллельных первых `POST /payroll/calculate` × 5 попыток. Как есть — все 500 (N2),
гонку не видно. В одноразовой БД с обходом N2 (`DEFAULT now()` только там) — 0 из 30
некорректных попыток (без смен и с подтверждённой сменой): один `run_id`, один расчёт в БД.
- Почему не воспроизводится (вывод из кода, не проверено отдельным экспериментом):
`calculatePayroll` сначала вызывает `ensureDefaultPayRules`, а там
`INSERT ... ON CONFLICT DO UPDATE` по одним и тем же строкам `staff_pay_rules` тенанта.
Первая транзакция держит блокировки этих строк до коммита, остальные ждут — расчёты
одного тенанта выполняются по очереди случайно. Если upsert правил вынесут из расчёта
или сделают `DO NOTHING`, окно `SELECT ... FOR UPDATE` (строки нет) → `INSERT ... ON
CONFLICT DO NOTHING` со своим `runId` → строки/UPDATE по несуществующему `runId` вернётся.
Рекомендация: явный `pg_advisory_xact_lock` по (tenant, org_unit, period_start) или
`INSERT ... ON CONFLICT DO UPDATE ... RETURNING id`. Скрипт стоит перезапустить после
такого изменения.
- Ответы 500 содержат сырой текст ошибки PostgreSQL (например
`null value in column "occurred_at" of relation "staff_outbox" ...`) — клиенту видна
схема БД. Для 5xx отдавать нейтральное сообщение, подробности — только в лог.

225
tests/e2e/REPORT.md Normal file
View file

@ -0,0 +1,225 @@
# PR: e2e-стенд на реальной PostgreSQL 17 и независимая приёмка (grok/e2e-harness)
База: `codex/bootstrap-platform-foundation` @ `778ba2d`. Сравнение:
<https://git.ochenstarik.ru/ochenstarik/krona-staff/compare/codex/bootstrap-platform-foundation...grok/e2e-harness>
Изменены только `tests/e2e/**`, `tests/integration/tenant-isolation.test.ts`,
`.forgejo/workflows/ci.yml`, `scripts/test/**`. `src/`, `apps/`, `migrations/`, `deploy/`,
`package.json` не тронуты. Всё, что требует правки продукта, — в
[`NOTES-FOR-EXECUTORS.md`](NOTES-FOR-EXECUTORS.md).
## Зачем
156 зелёных тестов на поддельной БД не заметили, что создание сотрудника,
подтверждение смены и расчёт зарплаты на реальной PostgreSQL падают всегда. Этот PR
добавляет стенд, где реальный сервер (`tsx src/server.ts`) работает с реальной
PostgreSQL 17 под ролью приложения без привилегий, миграции применяет мигратор без
SUPERUSER, а все токены и пароли случайные (`crypto.randomBytes`). Каждый сценарий
проверяет **правильное** поведение, поэтому красный цвет означает открытый дефект.
## Источник ID
Файлы владельца (`AUDIT.md`, `live-audit.mjs`, `live-sync.mjs`) до конца работы в
`/workspace/uploads/krona-staff-owner/` не появились. Сценарии написаны по моему
аудиту `2026-09-26_full-project-audit_grok_3e20544.md` (ID `F*`/`N*`) и по коду. ID владельца
K1, K3, K4, K5, K6, K10, K11, K12, S1, S2, S9, A4 **не сопоставлены — не проверено**.
Синхронизация помечена `SYNC-*` (мои ID, вероятно пересекаются с S1–S9 владельца).
Когда файлы владельца будут доступны, достаточно переименовать теги в названиях
тестов (например `[K3/N1]`) и ключи в `known-defects.json`.
## Коммиты
| SHA | Что |
| --------- | ------------------------------------------------------------------------------------- |
| `29fefc1` | `scripts/test/provision-pg.mjs`, `migrate-roundtrip.mjs`: роли как в pilot, roundtrip |
| `88fc749` | N5: очистка tenant-isolation ролью мигратора |
| `d7e9008` | prettier для tenant-isolation.test.ts |
| `cf7f6f4` | стенд e2e: global-setup, клиент, фикстуры, храповик `run-e2e.mjs` |
| `518494d` | сценарии основного API (N1–N4, N9–N12, F2–F4, F7, F10) |
| `32ced4b` | сценарии `/sync/*` (SYNC-A…L) |
| `9bdfb66` | форматирование сгенерированных evidence |
| `f59be3a` | CI: PostgreSQL 17, роли, roundtrip, e2e, docker-build отдельно, SHA-пины |
| `a19c06b` | проверка `deploy/pilot/compose.yaml` (PILOT-1..3) |
| `1e325a6` | сценарии решений владельца (OWN-01..11) + заметки исполнителям |
| `3388b90` | N13: гонка первого расчёта (скрипт и замер) |
| (этот) | REPORT.md и свежие evidence |
## Как запустить
```sh
# PostgreSQL 17, bootstrap-админ нужен только для создания ролей и БД
export E2E_PG_ADMIN_URL=postgres://<admin>:<pw>@127.0.0.1:55433/postgres
node scripts/test/run-e2e.mjs # храповик known-defects (как в CI)
node scripts/test/run-e2e.mjs --no-known-defects # строго: любой красный = exit 1
E2E_MIGRATIONS=roundtrip node scripts/test/run-e2e.mjs
./scripts/test/ci-local.sh # локальный эквивалент всех задач CI
```
Роли (`provision-pg.mjs`): `krona_migrator` — NOSUPERUSER NOCREATEDB NOCREATEROLE,
владелец БД и схемы `public`; `krona_staff_app` — NOSUPERUSER NOBYPASSRLS, права выдают
миграции 0003/0004. Пароли случайные, пишутся в env-файл 0600 во временном каталоге,
который удаляется после запуска.
## Таблица green/red по ID
Команда: `E2E_MIGRATIONS=roundtrip node scripts/test/run-e2e.mjs` (в составе
`./scripts/test/ci-local.sh`), 2026-09-26 14:33 (UTC+7), PostgreSQL 17.11. Фактический вывод:
[`evidence/e2e-run.txt`](evidence/e2e-run.txt), [`evidence/ci-local.txt`](evidence/ci-local.txt),
JSON — [`evidence/e2e-results.json`](evidence/e2e-results.json), логи серверов — `evidence/server-*.txt`.
```text
Test Files 4 failed | 1 passed (5)
Tests 38 failed | 9 passed (47)
[run-e2e] OK: стенд работает, все красные сценарии — известные открытые дефекты
```
| ID | Цвет | Что проверяется (правильное поведение) | Фактически (из вывода) |
| ------------ | ----- | -------------------------------------------------------------------- | ----------------------------------------------------------------- |
| HARNESS (×5) | GREEN | live/ready, PG17, app-роль без SUPERUSER/BYPASSRLS, токены, терминал | 5/5 passed |
| CTRL (×2) | GREEN | RBAC терминала/сотрудника, уволенный теряет доступ | 2/2 passed |
| N1 | RED | POST /employees → 201 | 500 `42P08 inconsistent types deduced for parameter $2` |
| N2 | RED | подтверждение смены, расчёт, утверждение → 200 | 500 `23502 null value in column "occurred_at" of "staff_outbox"` |
| N4 | RED | пересекающиеся расчёты не начисляют смену дважды | блокирован N2 (500 23502 на предусловии) — сам N4 **не проверен** |
| N3 | RED | push на внутренний адрес отклоняется, соединений нет | 201 и 1 входящее соединение на 127.0.0.1 |
| N9 | RED | чужой push-endpoint не перепривязывается | 201 |
| N10 | RED | терминал не читает справочники (403) | professions 200, org-units 200 |
| N11 | RED | импорт с неверным kind → 400 | 500 `23514` check constraint staff_payroll_ledger |
| N12 | RED | лишние поля/нереальные суммы → 400 | 200 |
| F2 | RED | процесс без токенов не даёт прав анониму (401) | /portal 200, /payroll 200, POST /professions 201 |
| F3 | RED | cookie без сырого токена, logout отзывает | `rawTokenInCookie: true` |
| F4 | RED | 429 не позже 30 неверных входов | все 401, 429 нет |
| F7 | RED | повтор Idempotency-Key с другим телом не создаёт событие | второе событие создано (201) |
| F10 | RED | мутация по cookie без Origin → 403 | 201 |
| SYNC-A | RED | устройство не подтверждает смену | `applied` |
| SYNC-B | RED | устройство не утверждает табель | `applied` |
| SYNC-C0 | RED | bootstrap pull без курсора → 200 | 500 `42703 column "status" does not exist` (новая находка) |
| SYNC-C | RED | bootstrap >100 сущностей постранично без потерь | 500 42703 (блокирован SYNC-C0) |
| SYNC-D | RED | изменения из портала видны в инкрементальном pull | изменения нет |
| SYNC-E | RED | отметка уволенного через sync отклоняется | `applied` |
| SYNC-F | RED | точка устройства сохраняется, чужая точка в payload не принимается | `applied`, точка не сохранена |
| SYNC-G | RED | битая команда отклоняется по отдельности | 500 `22007` на весь пакет |
| SYNC-H | RED | регистрация устройства по cookie с чужим Origin → 403 | 201 |
| SYNC-I | RED | без токенов анонимно устройство не регистрируется | 201 |
| SYNC-J | RED | отметка 2001 года через sync отклоняется | `applied` |
| SYNC-K | RED | ack курсора из будущего → 400 | 200 |
| SYNC-L | GREEN | отозванное устройство не синхронизируется (403) | 403 (позитивный контроль) |
| OWN-01 | RED | менеджер точки A считает зарплату точки B → 403 | 404 `Route POST:/api/v1/staff/access-grants not found` (нет API) |
| OWN-02 | RED | менеджер отправляет пакет на согласование → 403 | 404 access-grants (нет API) |
| OWN-03 | RED | бухгалтер отправляет пакет → успех, каждому директору 1 уведомление | 404 access-grants (нет API) |
| OWN-04 | RED | бухгалтер подписывает пакет → 403 | 404 access-grants (нет API) |
| OWN-05 | RED | до подписи в ledger нет начислений/выплат | 404 access-grants (нет API) |
| OWN-06 | RED | подпись директора → ledger, пакет и смены неизменяемы | 404 access-grants (нет API) |
| OWN-07 | RED | смена изменена после отправки → 409, пакет у бухгалтера | 404 access-grants (нет API) |
| OWN-08 | RED | возврат с комментарием → пакет у бухгалтера, комментарий сохранён | 404 access-grants (нет API) |
| OWN-09 | RED | смена сотрудника A в точке B → в расчёт точки B | 404 access-grants (нет API) |
| OWN-10 | RED | без согласия на биометрию → терминалу «регистрация запрещена» | 404 `GET .../terminal/employees/:id/enrollment` (нет API) |
| OWN-11 | RED | согласие отозвано → статус для терминала меняется | 404 `PUT .../biometric-consent` (нет API) |
| PILOT-1 | RED | все подстановки в pilot compose — `${VAR:?}` | 14 переменных без `:?` (первая — `STANDALONE_MANAGER_TOKEN`) |
| PILOT-2 | RED | нет `NODE_ENV=development` | сервис `app` |
| PILOT-3 | GREEN | у `app` нет кредов мигратора | passed |
| N13 | — | гонка первого расчёта (скрипт, не vitest) | см. ниже: как есть 15/15 → 500 (N2); с обходом N2 — 0/30 гонок |
| N5 | GREEN | tenant-isolation на живой БД | до: FAIL; после: 2/2 прогона exit=0 (см. ниже) |
Предполагаемые контракты для OWN-01..11 (C1 роли точки/бухгалтера/директора, C2 пакет
зарплаты и согласование, C3 согласие на биометрию) описаны в `NOTES-FOR-EXECUTORS.md` §1.
### Механизм для красных сценариев (храповик)
Выбран список `tests/e2e/known-defects.json` и одна задача `e2e`, а не отдельная
задача «allowed to fail». Причины: задача с `continue-on-error` зеленеет при любом
сбое, включая сломанный стенд, а храповик различает три случая: (1) стенд сломан
(`[HARNESS]`/`[CTRL]` красные или тест без ID) → exit 1; (2) новый красный ID не из
списка (регрессия) → exit 1; (3) ID из списка стал зелёным → exit 1 с просьбой
вычеркнуть его (исправление фиксируется, откат снова станет красным). Строгий режим
`--no-known-defects` показывает полную картину.
## N5: tenant-isolation до/после
До (база 778ba2d, `DATABASE_TEST_URL` = роль приложения), [`evidence/n5-before.txt`](evidence/n5-before.txt):
```text
FAIL tests/integration/tenant-isolation.test.ts > PostgreSQL tenant isolation
error: permission denied for table staff_employees
❯ tests/integration/tenant-isolation.test.ts:40:7
Test Files 1 failed (1)
Tests 1 passed (1)
exit=1
```
После (очистка соединением мигратора `DATABASE_TEST_MIGRATION_URL`, с
`app.tenant_id` из-за FORCE RLS, до и после теста), [`evidence/n5-after.txt`](evidence/n5-after.txt):
```text
== run 1 ... Test Files 1 passed (1) Tests 1 passed (1) exit=0
== run 2 ... Test Files 1 passed (1) Tests 1 passed (1) exit=0
```
Полный `npm run check` с тестовой БД (задача verify в `ci-local.sh`):
`Test Files 19 passed (19)`, `Tests 188 passed (188)`.
## CI (`.forgejo/workflows/ci.yml`)
- `verify`: сервис `postgres:17-alpine@sha256:18cfe3ef…` (bootstrap-пользователь только
для provision), роли как в pilot (мигратор без SUPERUSER, app без BYPASSRLS),
миграции `up → откат всех 11 → up → up (no-op)`, `npm run check` с
`DATABASE_TEST_URL`/`DATABASE_TEST_MIGRATION_URL` (tenant-isolation реально
выполняется), `npm audit --audit-level=high`.
- `format`: отдельно, чтобы F14 (23 файла вне моих путей) не маскировал остальное.
- `e2e`: тот же сервис PostgreSQL 17, `E2E_MIGRATIONS=roundtrip`, храповик.
- `docker-build`: отдельная задача на метке `docker-host`, `needs: verify`, только push.
- Все actions закреплены SHA (F13): `actions/checkout@11d5960a… # v4.4.0`,
`actions/setup-node@49933ea5… # v4.4.0` (SHA получены `git ls-remote`, совпадают на
github.com и code.forgejo.org).
Валидация: `actionlint -config-file actionlint.yaml .forgejo/workflows/ci.yml` (1.7.12,
метки `docker`, `docker-host`) → 0 замечаний, exit 0. Локальный эквивалент
`./scripts/test/ci-local.sh` ([`evidence/ci-local.txt`](evidence/ci-local.txt)):
```text
::: [migrate-roundtrip] OK (== roundtrip OK: rolledBack=11 reapplied=11)
::: [check] OK (Test Files 19 passed, Tests 188 passed)
::: [audit] OK (found 0 vulnerabilities)
::: [format-check] FAIL exit=1 (Code style issues found in 23 files — F14)
::: [e2e] OK (храповик: все красные — известные дефекты)
=== итог: status=1 (только из-за format)
```
## Проверка pilot compose (PILOT-1..3)
`tests/e2e/40-compose-pilot.e2e.ts` читает `deploy/pilot/compose.yaml` (только чтение).
Положен в `tests/e2e/`, а не рядом с существующим тестом корневого compose
(`tests/unit/deployment.test.ts`), потому что `tests/unit/` вне разрешённых путей.
Результат: PILOT-1 RED (14 подстановок без `:?`), PILOT-2 RED (`NODE_ENV: development` в
`app`; конфликт с запретом standalone в production в `config.ts` описан в заметках),
PILOT-3 GREEN.
## N13: гонка первого расчёта
`node scripts/test/n13-race.mjs` — 10/25/50 параллельных первых `POST /payroll/calculate`,
5 попыток на размер, каждая попытка на новой точке. Вывод: [`evidence/n13-race.txt`](evidence/n13-race.txt).
```text
[n13] ИТОГ mode=as-is sessions=false: попыток 15, некорректных 15 (все 500: N2, occurred_at)
[n13] ИТОГ mode=n2-bypass sessions=false: попыток 15, некорректных 0 (200×N, 1 run_id, 1 расчёт)
[n13] ИТОГ mode=n2-bypass sessions=true: попыток 15, некорректных 0 (с подтверждённой сменой, db_lines=1)
```
`n2-bypass` — диагностика: в одноразовой БД скрипта мигратор ставит
`DEFAULT now()` для `staff_outbox.occurred_at`; продукт и миграции не меняются.
Вердикт: **гонка не воспроизведена (0 из 30 попыток при 10/25/50)**, совпадает с
«N13 not reproduced» владельца. Вероятная причина (из кода, отдельно не проверено):
upsert `ensureDefaultPayRules` в начале расчёта случайно сериализует расчёты одного
тенанта. Окно в коде остаётся — рекомендация в заметках §5.
## Не проверено
- Реальный Forgejo-раннер: workflow не запускался на сервере (нет API-токена, задачи
выполнены локально эквивалентным скриптом). Раннера с меткой `docker-host` может не быть.
- `docker build` не запускался (на этой машине нет Docker).
- Windows-only: DPAPI, ACL каталога данных, установщик, WinUI, реальный named pipe —
не проверено; см. тесты Codex в `apps/KronaStaffTerminal.Tests`.
- Сопоставление с ID владельца K1/K3/K4/K5/K6/K10/K11/K12, S1/S2/S9, A4 и сверка с его
`live-audit.mjs`/`live-sync.mjs` — файлов нет.
- N4 и SYNC-C по существу: блокированы N2 и SYNC-C0 соответственно.
- OWN-01..11 проверяют предполагаемый контракт; реальный контракт Codex может отличаться.
- Причина невоспроизводимости N13 — гипотеза по коду.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,669 @@
{
"numTotalTestSuites": 10,
"numPassedTestSuites": 2,
"numFailedTestSuites": 8,
"numPendingTestSuites": 0,
"numTotalTests": 47,
"numPassedTests": 9,
"numFailedTests": 38,
"numPendingTests": 0,
"numTodoTests": 0,
"snapshot": {
"added": 0,
"failure": false,
"filesAdded": 0,
"filesRemoved": 0,
"filesRemovedList": [],
"filesUnmatched": 0,
"filesUpdated": 0,
"matched": 0,
"total": 0,
"unchecked": 0,
"uncheckedKeysByFile": [],
"unmatched": 0,
"updated": 0,
"didUpdate": false
},
"startTime": 1790408012144,
"success": false,
"testResults": [
{
"assertionResults": [
{
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [HARNESS] сервер отвечает live/ready (ready проверяет БД)",
"status": "passed",
"title": "[HARNESS] сервер отвечает live/ready (ready проверяет БД)",
"duration": 32.192098,
"failureMessages": [],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [HARNESS] БД: PostgreSQL 17, приложение под ролью без SUPERUSER/BYPASSRLS, мигратор без SUPERUSER",
"status": "passed",
"title": "[HARNESS] БД: PostgreSQL 17, приложение под ролью без SUPERUSER/BYPASSRLS, мигратор без SUPERUSER",
"duration": 14.342552000000012,
"failureMessages": [],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [HARNESS] миграции применены мигратором, app-роль не видит schema_migrations",
"status": "passed",
"title": "[HARNESS] миграции применены мигратором, app-роль не видит schema_migrations",
"duration": 14.26604900000001,
"failureMessages": [],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [HARNESS] токены: без токена 401, случайный токен 401, manager-токен 200",
"status": "passed",
"title": "[HARNESS] токены: без токена 401, случайный токен 401, manager-токен 200",
"duration": 13.863121000000007,
"failureMessages": [],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [HARNESS] терминал: отметка сотрудника из импорта принимается (201)",
"status": "passed",
"title": "[HARNESS] терминал: отметка сотрудника из импорта принимается (201)",
"duration": 24.62379200000001,
"failureMessages": [],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [CTRL] RBAC: терминал не видит портал и не создаёт сотрудников; сотрудник видит только себя",
"status": "passed",
"title": "[CTRL] RBAC: терминал не видит портал и не создаёт сотрудников; сотрудник видит только себя",
"duration": 23.691180000000003,
"failureMessages": [],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [CTRL] уволенный сотрудник теряет доступ (401)",
"status": "passed",
"title": "[CTRL] уволенный сотрудник теряет доступ (401)",
"duration": 23.254977999999994,
"failureMessages": [],
"meta": {},
"tags": [],
"benchmarks": []
}
],
"startTime": 1790408019083,
"endTime": 1790408019229.255,
"status": "passed",
"message": "",
"name": "/workspace/krona-staff/tests/e2e/00-harness.e2e.ts"
},
{
"assertionResults": [
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [N1] менеджер создаёт сотрудника через POST /employees → 201",
"status": "failed",
"title": "[N1] менеджер создаёт сотрудника через POST /employees → 201",
"duration": 38.316193,
"failureMessages": [
"AssertionError: HTTP 500 {\"statusCode\":500,\"code\":\"42P08\",\"error\":\"Internal Server Error\",\"message\":\"inconsistent types deduced for parameter $2\"}: expected 500 to be 201 // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:55:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [N2] подтверждение смены, расчёт и утверждение зарплаты проходят (200) и начисляют 8 ч × ставка",
"status": "failed",
"title": "[N2] подтверждение смены, расчёт и утверждение зарплаты проходят (200) и начисляют 8 ч × ставка",
"duration": 110.697531,
"failureMessages": [
"AssertionError: подтверждение смены: HTTP 500 {\"statusCode\":500,\"code\":\"23502\",\"error\":\"Internal Server Error\",\"message\":\"null value in column \\\"occurred_at\\\" of relation \\\"staff_outbox\\\" violates not-null constraint\"}: expected 500 to be 200 // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:73:81\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [N4] пересекающиеся расчёты не начисляют одну смену дважды",
"status": "failed",
"title": "[N4] пересекающиеся расчёты не начисляют одну смену дважды",
"duration": 66.33918700000004,
"failureMessages": [
"AssertionError: подтверждение смены (предусловие, см. N2): HTTP 500 {\"statusCode\":500,\"code\":\"23502\",\"error\":\"Internal Server Error\",\"message\":\"null value in column \\\"occurred_at\\\" of relation \\\"staff_outbox\\\" violates not-null constraint\"}: expected 500 to be 200 // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:104:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [N3] push-подписка на внутренний адрес отклоняется, сервер не подключается к 127.0.0.1",
"status": "failed",
"title": "[N3] push-подписка на внутренний адрес отклоняется, сервер не подключается к 127.0.0.1",
"duration": 2544.330582,
"failureMessages": [
"AssertionError: подписка: HTTP 201 {\"id\":\"01M3EA4FH3FG4Q3YEKXYQ8Y4Q5\",\"endpoint\":\"https://127.0.0.1:36027/e2e-internal-admin\"}: expected { status: 201, connections: 1 } to deeply equal { status: toSatisfy{…}, …(1) }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:161:9\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [N9] чужой push-endpoint нельзя перепривязать к другому сотруднику",
"status": "failed",
"title": "[N9] чужой push-endpoint нельзя перепривязать к другому сотруднику",
"duration": 44.48753099999976,
"failureMessages": [
"AssertionError: HTTP 201 {\"id\":\"01M3EA4J0JSPFRDF22J6E2CEY1\",\"endpoint\":\"https://fcm.googleapis.com/fcm/send/e2e-d464594734e6ddf8569ec571f5832dbf\"}: expected { status: 201, …(1) } to deeply equal { status: toSatisfy{…}, …(1) }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:191:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [N12] PUT pay-assignment отвергает лишние поля и нереальные суммы (400)",
"status": "failed",
"title": "[N12] PUT pay-assignment отвергает лишние поля и нереальные суммы (400)",
"duration": 31.35817700000007,
"failureMessages": [
"AssertionError: HTTP 200 {\"id\":\"01M3EA4J1PHXWHFMAMYYVRMK3E\",\"employee_id\":\"01M3EA4J151B1H9D5AKAR29AN9\",\"org_unit_id\":null,\"pay_rule_id\":\"01M3EA4FCDRQSS6V8H5Q6XS615\",\"pay_rule_code\":\"hourly\",\"pay_rule_name\":\"Почасовая (стажёр, дополнительный сотрудник)\",\"rate_minor\":12345,\"percent_bp\":0,\"guarantee_minor\":0,\"pool_weight_bp\":0… | HTTP 200 {\"id\":\"01M3EA4J1PHXWHFMAMYYVRMK3E\",\"employee_id\":\"01M3EA4J151B1H9D5AKAR29AN9\",\"org_unit_id\":null,\"pay_rule_id\":\"01M3EA4FCDRQSS6V8H5Q6XS615\",\"pay_rule_code\":\"hourly\",\"pay_rule_name\":\"Почасовая (стажёр, дополнительный сотрудник)\",\"rate_minor\":9007199254740991,\"percent_bp\":0,\"guarantee_minor\":900719925…: expected { extra: 200, huge: 200 } to deeply equal { extra: 400, huge: 400 }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:215:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [N10] терминальный токен не читает справочники профессий и точек (403)",
"status": "failed",
"title": "[N10] терминальный токен не читает справочники профессий и точек (403)",
"duration": 4.364047000000028,
"failureMessages": [
"AssertionError: expected { professions: 200, units: 200 } to deeply equal { professions: 403, units: 403 }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:224:70\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [F2] standalone без токенов не выдаёт права менеджера анонимному запросу (401)",
"status": "failed",
"title": "[F2] standalone без токенов не выдаёт права менеджера анонимному запросу (401)",
"duration": 19.630533999999898,
"failureMessages": [
"AssertionError: expected { portal: 200, payroll: 200, …(1) } to deeply equal { portal: 401, payroll: 401, …(1) }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:237:85\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [F3] cookie сессии не содержит сырой токен и отзывается при выходе",
"status": "failed",
"title": "[F3] cookie сессии не содержит сырой токен и отзывается при выходе",
"duration": 8.088321000000178,
"failureMessages": [
"AssertionError: expected { rawTokenInCookie: true, …(1) } to deeply equal { rawTokenInCookie: false, …(1) }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:255:91\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [F10] мутация по cookie без Origin отклоняется (CSRF, 403)",
"status": "failed",
"title": "[F10] мутация по cookie без Origin отклоняется (CSRF, 403)",
"duration": 5.457843000000139,
"failureMessages": [
"AssertionError: HTTP 201 {\"id\":\"01M3EA4J31CEM99Y9708PNVE90\",\"code\":\"profession-01m3ea4j31cem99y9708pnve90\",\"name\":\"E2E-CSRF-профессия-c30803\",\"status\":\"active\"}: expected 201 to be 403 // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:269:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [F7] повтор Idempotency-Key с другим телом не создаёт второе событие",
"status": "failed",
"title": "[F7] повтор Idempotency-Key с другим телом не создаёт второе событие",
"duration": 31.478251999999884,
"failureMessages": [
"AssertionError: expected { first: 201, secondCreated: true } to deeply equal { first: 201, secondCreated: false }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:288:75\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [N11] импорт с неверным kind начисления → 400, а не 500",
"status": "failed",
"title": "[N11] импорт с неверным kind начисления → 400, а не 500",
"duration": 24.907294000000093,
"failureMessages": [
"AssertionError: HTTP 500 {\"statusCode\":500,\"code\":\"23514\",\"error\":\"Internal Server Error\",\"message\":\"new row for relation \\\"staff_payroll_ledger\\\" violates check constraint \\\"staff_payroll_ledger_kind_check\\\"\"}: expected 500 to be 400 // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:311:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
"fullName": "Основной API на реальной PostgreSQL [F4] перебор ключей входа ограничивается (429 не позже 30 неверных попыток)",
"status": "failed",
"title": "[F4] перебор ключей входа ограничивается (429 не позже 30 неверных попыток)",
"duration": 75.38818200000014,
"failureMessages": [
"AssertionError: статусы: 401: expected false to be true // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:324:84\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
}
],
"startTime": 1790408015147,
"endTime": 1790408018151.3882,
"status": "failed",
"message": "",
"name": "/workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts"
},
{
"assertionResults": [
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-A] устройство не может само подтвердить смену (status=confirmed отклоняется)",
"status": "failed",
"title": "[SYNC-A] устройство не может само подтвердить смену (status=confirmed отклоняется)",
"duration": 86.95440500000001,
"failureMessages": [
"AssertionError: HTTP 200 {\"results\":[{\"idempotency_key\":\"e2e-01M3EA4JPXC3E39GZMHFH33H92\",\"command_type\":\"upsert_work_session\",\"status\":\"applied\",\"result\":{\"id\":\"01M3EA4JPXQPVQDPGEA3YVFPXV\",\"revision\":1,\"status\":\"applied\"}}]}: expected { http: 200, result: 'applied', …(1) } to deeply equal { http: 200, result: 'rejected', …(1) }\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:86:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-B] устройство не может утвердить табель (status=approved отклоняется)",
"status": "failed",
"title": "[SYNC-B] устройство не может утвердить табель (status=approved отклоняется)",
"duration": 32.361658000000006,
"failureMessages": [
"AssertionError: HTTP 200 {\"results\":[{\"idempotency_key\":\"e2e-01M3EA4JR4CST4PE643FC043K9\",\"command_type\":\"upsert_timesheet_entry\",\"status\":\"applied\",\"result\":{\"id\":\"01M3EA4JR43V65BMVJVX5DHSV0\",\"revision\":1,\"status\":\"applied\"}}]}: expected { result: 'applied', …(1) } to deeply equal { result: 'rejected', stored: null }\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:109:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-C0] начальная загрузка (pull без курсора) работает на реальной БД (200)",
"status": "failed",
"title": "[SYNC-C0] начальная загрузка (pull без курсора) работает на реальной БД (200)",
"duration": 39.13565999999997,
"failureMessages": [
"AssertionError: HTTP 500 {\"statusCode\":500,\"code\":\"42703\",\"error\":\"Internal Server Error\",\"message\":\"column \\\"status\\\" does not exist\"}: expected 500 to be 200 // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:120:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-C] начальная загрузка >100 сущностей отдаёт все сущности постранично",
"status": "failed",
"title": "[SYNC-C] начальная загрузка >100 сущностей отдаёт все сущности постранично",
"duration": 54.852048000000025,
"failureMessages": [
"AssertionError: HTTP 500 {\"statusCode\":500,\"code\":\"42703\",\"error\":\"Internal Server Error\",\"message\":\"column \\\"status\\\" does not exist\"}: expected 500 to be 200 // Object.is equality\n at pullAll (/workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:51:57)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:130:25\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-D] изменения, сделанные через портал, попадают в инкрементальный pull",
"status": "failed",
"title": "[SYNC-D] изменения, сделанные через портал, попадают в инкрементальный pull",
"duration": 40.97763200000003,
"failureMessages": [
"AssertionError: expected false to be true // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:151:95\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-E] отметка уволенного сотрудника через sync отклоняется",
"status": "failed",
"title": "[SYNC-E] отметка уволенного сотрудника через sync отклоняется",
"duration": 23.937388999999996,
"failureMessages": [
"AssertionError: HTTP 200 {\"results\":[{\"idempotency_key\":\"e2e-01M3EA4JXB10Y1W7WAT3QXPJXR\",\"command_type\":\"attendance_event\",\"status\":\"applied\",\"result\":{\"event_id\":\"01M3EA4JXD7TMSBAMMAK6HMXK2\",\"status\":\"accepted\"}}]}: expected 'applied' to be 'rejected' // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:171:77\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-F] отметка через sync сохраняет точку устройства; чужая точка в payload отклоняется",
"status": "failed",
"title": "[SYNC-F] отметка через sync сохраняет точку устройства; чужая точка в payload отклоняется",
"duration": 42.41749800000002,
"failureMessages": [
"AssertionError: HTTP 200 {\"results\":[{\"idempotency_key\":\"e2e-01M3EA4JYFDZ0AAZYVEF6G72T2\",\"command_type\":\"attendance_event\",\"status\":\"applied\",\"result\":{\"event_id\":\"01M3EA4JYH12S10KQ4NWN232FM\",\"status\":\"accepted\"}},{\"idempotency_key\":\"e2e-01M3EA4JYFDXJXPH923SG1E832\",\"command_type\":\"attendance_event\",\"status\":\"applied\",\"resul…: expected { Object (ownOrgUnit, foreign) } to deeply equal { …(2) }\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:202:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-G] битая команда в пакете отклоняется по отдельности, остальные применяются (не 500)",
"status": "failed",
"title": "[SYNC-G] битая команда в пакете отклоняется по отдельности, остальные применяются (не 500)",
"duration": 20.59652299999999,
"failureMessages": [
"AssertionError: HTTP 500 {\"statusCode\":500,\"code\":\"22007\",\"error\":\"Internal Server Error\",\"message\":\"invalid input syntax for type timestamp with time zone: \\\"e2e-not-a-timestamp\\\"\"}: expected { http: 500, statuses: [] } to deeply equal { http: 200, statuses: [ …(2) ] }\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:225:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-H] регистрация устройства по cookie с чужим Origin отклоняется (CSRF, 403)",
"status": "failed",
"title": "[SYNC-H] регистрация устройства по cookie с чужим Origin отклоняется (CSRF, 403)",
"duration": 9.081312000000025,
"failureMessages": [
"AssertionError: HTTP 201 {\"device\":{\"id\":\"01M3EA4JZKVD04KCMNCGGW1EAH\",\"tenant_id\":\"01M3EA4DJNEY3HRCYSBSX43XW0\",\"device_code\":\"E2E-5J7EDPFQV6\",\"name\":\"E2E-CSRF-терминал-34e01a\",\"token_hint\":\"kstaff_dev_01M3E\",\"status\":\"active\",\"allowed_scopes\":[\"attendance:sync\"],\"registered_at\":\"2026-09-26T07:33:38.935Z\",\"created_by\":\"01M3E…: expected 201 to be 403 // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:236:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-I] без настроенных токенов анонимный запрос не регистрирует устройство (401)",
"status": "failed",
"title": "[SYNC-I] без настроенных токенов анонимный запрос не регистрирует устройство (401)",
"duration": 6.548922000000005,
"failureMessages": [
"AssertionError: HTTP 201 {\"device\":{\"id\":\"01M3EA4JZWQF4S3SXWCX77J9ST\",\"tenant_id\":\"01M3EA4DJNEY3HRCYSBSX43XW0\",\"device_code\":\"E2E-KS5GF18F83\",\"name\":\"E2E-Анонимный терминал-75d36d\",\"token_hint\":\"kstaff_dev_01M3E\",\"status\":\"active\",\"allowed_scopes\":[\"attendance:sync\"],\"registered_at\":\"2026-09-26T07:33:38.940Z\",\"created_by\":\"…: expected 201 to be 401 // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:247:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-J] отметка через sync вне окна времени (2001 год) отклоняется, как в POST /attendance/events",
"status": "failed",
"title": "[SYNC-J] отметка через sync вне окна времени (2001 год) отклоняется, как в POST /attendance/events",
"duration": 23.565251999999987,
"failureMessages": [
"AssertionError: HTTP 200 {\"results\":[{\"idempotency_key\":\"e2e-01M3EA4K0JQNMDJTDAM1PZ1J8K\",\"command_type\":\"attendance_event\",\"status\":\"applied\",\"result\":{\"event_id\":\"01M3EA4K0NB5RS8GACHWC7N2C2\",\"status\":\"accepted\"}}]}: expected 'applied' to be 'rejected' // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:260:77\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-K] ack курсора из будущего (больше выданного сервером) отклоняется (400)",
"status": "failed",
"title": "[SYNC-K] ack курсора из будущего (больше выданного сервером) отклоняется (400)",
"duration": 6.953785000000039,
"failureMessages": [
"AssertionError: HTTP 200 {\"acknowledged\":true,\"cursor\":\"cur_999999999_fd163ccb01a6\",\"acknowledged_at\":\"2026-09-26T07:33:38.972Z\"}: expected 200 to be 400 // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:275:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-L] отозванное устройство не может синхронизироваться (403) — позитивный контроль",
"status": "passed",
"title": "[SYNC-L] отозванное устройство не может синхронизироваться (403) — позитивный контроль",
"duration": 8.451247999999964,
"failureMessages": [],
"meta": {},
"tags": [],
"benchmarks": []
}
],
"startTime": 1790408018587,
"endTime": 1790408018982.4512,
"status": "failed",
"message": "",
"name": "/workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts"
},
{
"assertionResults": [
{
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-01] менеджер точки A запускает расчёт для точки B → 403",
"status": "failed",
"title": "[OWN-01] менеджер точки A запускает расчёт для точки B → 403",
"duration": 109.84663699999999,
"failureMessages": [
"AssertionError: C1 POST /access-grants (point_manager): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:94:22\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-02] менеджер точки отправляет пакет на согласование → 403",
"status": "failed",
"title": "[OWN-02] менеджер точки отправляет пакет на согласование → 403",
"duration": 64.021771,
"failureMessages": [
"AssertionError: C1 POST /access-grants (point_manager): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:105:22\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-03] бухгалтер отправляет пакет → успех, каждый директор получает ровно одно уведомление",
"status": "failed",
"title": "[OWN-03] бухгалтер отправляет пакет → успех, каждый директор получает ровно одно уведомление",
"duration": 1.5183850000000234,
"failureMessages": [
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:118:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-04] бухгалтер пытается подписать пакет → 403",
"status": "failed",
"title": "[OWN-04] бухгалтер пытается подписать пакет → 403",
"duration": 1.8508840000000077,
"failureMessages": [
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:133:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-05] до подписи директора в ledger нет начислений и выплат",
"status": "failed",
"title": "[OWN-05] до подписи директора в ledger нет начислений и выплат",
"duration": 1.9114280000000008,
"failureMessages": [
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:141:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-06] подпись директора → начисления и выплаты в ledger, пакет и смены неизменяемы",
"status": "failed",
"title": "[OWN-06] подпись директора → начисления и выплаты в ledger, пакет и смены неизменяемы",
"duration": 1.5373430000000212,
"failureMessages": [
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:148:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-07] смена изменена после отправки → подписать нельзя (409), пакет возвращён бухгалтеру",
"status": "failed",
"title": "[OWN-07] смена изменена после отправки → подписать нельзя (409), пакет возвращён бухгалтеру",
"duration": 1.4993349999999737,
"failureMessages": [
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:173:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-08] возврат с комментарием → пакет у бухгалтера, комментарий сохранён",
"status": "failed",
"title": "[OWN-08] возврат с комментарием → пакет у бухгалтера, комментарий сохранён",
"duration": 2.188139000000035,
"failureMessages": [
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:195:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-09] сотрудник точки A отработал смену в точке B → смена попадает в зарплату точки B",
"status": "failed",
"title": "[OWN-09] сотрудник точки A отработал смену в точке B → смена попадает в зарплату точки B",
"duration": 2.2691649999999868,
"failureMessages": [
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:213:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-10] сотрудник без согласия на биометрию → сервер сообщает терминалу «регистрация запрещена»",
"status": "failed",
"title": "[OWN-10] сотрудник без согласия на биометрию → сервер сообщает терминалу «регистрация запрещена»",
"duration": 15.068132999999989,
"failureMessages": [
"AssertionError: C3: HTTP 404 {\"message\":\"Route GET:/api/v1/staff/terminal/employees/01M3EA4JGPPB7M0G78QQBQBJ1M/enrollment not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 200 // Object.is equality\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:241:66\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-11] согласие отозвано → статус для терминала меняется",
"status": "failed",
"title": "[OWN-11] согласие отозвано → статус для терминала меняется",
"duration": 14.774637000000041,
"failureMessages": [
"AssertionError: C3 PUT biometric-consent: HTTP 404 {\"message\":\"Route PUT:/api/v1/staff/employees/01M3EA4JH57XZ361XBC2Z7SA6J/biometric-consent not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 200 // Object.is equality\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:255:86\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
],
"meta": {},
"tags": [],
"benchmarks": []
}
],
"startTime": 1790408018262,
"endTime": 1790408018478.7747,
"status": "failed",
"message": "",
"name": "/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts"
},
{
"assertionResults": [
{
"ancestorTitles": ["deploy/pilot/compose.yaml"],
"fullName": "deploy/pilot/compose.yaml [PILOT-1] все подставляемые переменные обязательны: ${VAR:?сообщение}",
"status": "failed",
"title": "[PILOT-1] все подставляемые переменные обязательны: ${VAR:?сообщение}",
"duration": 5.8893739999999895,
"failureMessages": [
"AssertionError: переменные без :? — пустое значение молча попадёт в контейнер: expected [ 'STANDALONE_MANAGER_TOKEN', …(13) ] to deeply equal []\n at /workspace/krona-staff/tests/e2e/40-compose-pilot.e2e.ts:34:87\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:1628:35\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:26\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3319:20\n at new Promise (<anonymous>)\n at runWithCancel (file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3314:10)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3299:20\n at new Promise (<anonymous>)\n at runWithTimeout (file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3257:10)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3876:64"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["deploy/pilot/compose.yaml"],
"fullName": "deploy/pilot/compose.yaml [PILOT-2] ни один сервис не запускается с NODE_ENV=development",
"status": "failed",
"title": "[PILOT-2] ни один сервис не запускается с NODE_ENV=development",
"duration": 1.0336859999999888,
"failureMessages": [
"AssertionError: expected [ 'app' ] to deeply equal []\n at /workspace/krona-staff/tests/e2e/40-compose-pilot.e2e.ts:41:23\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:1628:35\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:26\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3319:20\n at new Promise (<anonymous>)\n at runWithCancel (file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3314:10)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3299:20\n at new Promise (<anonymous>)\n at runWithTimeout (file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3257:10)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3876:64"
],
"meta": {},
"tags": [],
"benchmarks": []
},
{
"ancestorTitles": ["deploy/pilot/compose.yaml"],
"fullName": "deploy/pilot/compose.yaml [PILOT-3] у сервиса app нет учётных данных мигратора",
"status": "passed",
"title": "[PILOT-3] у сервиса app нет учётных данных мигратора",
"duration": 0.5442440000000062,
"failureMessages": [],
"meta": {},
"tags": [],
"benchmarks": []
}
],
"startTime": 1790408019346,
"endTime": 1790408019353.5442,
"status": "failed",
"message": "",
"name": "/workspace/krona-staff/tests/e2e/40-compose-pilot.e2e.ts"
}
]
}

View file

@ -0,0 +1,941 @@
$ npx vitest run --config tests/e2e/vitest.e2e.config.ts --reporter=verbose --reporter=json --outputFile.json=/workspace/krona-staff/tests/e2e/evidence/e2e-results.json
RUN v5.0.1 /workspace/krona-staff
[e2e] provision:
provisioned database=krona_staff_e2e server_version=17.11
role=krona_migrator super=false createrole=false createdb=false bypassrls=false
role=krona_staff_app super=false createrole=false createdb=false bypassrls=false
[e2e] migrations (roundtrip) as krona_migrator:
== migrate up (1)
applied 0001_infrastructure.up.sql
applied 0002_security_hardening.up.sql
applied 0003_app_role_privileges.up.sql
applied 0004_revoke_broad_default_privileges.up.sql
applied 0005_attendance_portal.up.sql
applied 0006_payroll_foundation.up.sql
applied 0007_work_session_trace.up.sql
applied 0008_employee_access.up.sql
applied 0009_professions.up.sql
applied 0010_employee_push_notifications.up.sql
applied 0011_offline_sync_backend.up.sql
== rollback all (applied now: 11)
rolled back 0011_offline_sync_backend.down.sql
rolled back 0010_employee_push_notifications.down.sql
rolled back 0009_professions.down.sql
rolled back 0008_employee_access.down.sql
rolled back 0007_work_session_trace.down.sql
rolled back 0006_payroll_foundation.down.sql
rolled back 0005_attendance_portal.down.sql
rolled back 0004_revoke_broad_default_privileges.down.sql
rolled back 0003_app_role_privileges.down.sql
rolled back 0002_security_hardening.down.sql
rolled back 0001_infrastructure.down.sql
no migration to roll back
== rolled back 11 migrations
== migrate up (2)
applied 0001_infrastructure.up.sql
applied 0002_security_hardening.up.sql
applied 0003_app_role_privileges.up.sql
applied 0004_revoke_broad_default_privileges.up.sql
applied 0005_attendance_portal.up.sql
applied 0006_payroll_foundation.up.sql
applied 0007_work_session_trace.up.sql
applied 0008_employee_access.up.sql
applied 0009_professions.up.sql
applied 0010_employee_push_notifications.up.sql
applied 0011_offline_sync_backend.up.sql
== migrate up (3, must be no-op)
== roundtrip OK: rolledBack=11 reapplied=11
[e2e] server secured ready at http://127.0.0.1:35389 (log: tests/e2e/evidence/server-secured.txt)
[e2e] server no-tokens ready at http://127.0.0.1:33821 (log: tests/e2e/evidence/server-no-tokens.txt)
[e2e] server rate-limit ready at http://127.0.0.1:36299 (log: tests/e2e/evidence/server-rate-limit.txt)
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N1] менеджер создаёт сотрудника через POST /employees → 201 38ms
→ HTTP 500 {"statusCode":500,"code":"42P08","error":"Internal Server Error","message":"inconsistent types deduced for parameter $2"}: expected 500 to be 201 // Object.is equality
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N2] подтверждение смены, расчёт и утверждение зарплаты проходят (200) и начисляют 8 ч × ставка 111ms
→ подтверждение смены: HTTP 500 {"statusCode":500,"code":"23502","error":"Internal Server Error","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}: expected 500 to be 200 // Object.is equality
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N4] пересекающиеся расчёты не начисляют одну смену дважды 66ms
→ подтверждение смены (предусловие, см. N2): HTTP 500 {"statusCode":500,"code":"23502","error":"Internal Server Error","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}: expected 500 to be 200 // Object.is equality
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N3] push-подписка на внутренний адрес отклоняется, сервер не подключается к 127.0.0.1 2544ms
→ подписка: HTTP 201 {"id":"01M3EA4FH3FG4Q3YEKXYQ8Y4Q5","endpoint":"https://127.0.0.1:36027/e2e-internal-admin"}: expected { status: 201, connections: 1 } to deeply equal { status: toSatisfy{…}, …(1) }
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N9] чужой push-endpoint нельзя перепривязать к другому сотруднику 44ms
→ HTTP 201 {"id":"01M3EA4J0JSPFRDF22J6E2CEY1","endpoint":"https://fcm.googleapis.com/fcm/send/e2e-d464594734e6ddf8569ec571f5832dbf"}: expected { status: 201, …(1) } to deeply equal { status: toSatisfy{…}, …(1) }
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N12] PUT pay-assignment отвергает лишние поля и нереальные суммы (400) 31ms
→ HTTP 200 {"id":"01M3EA4J1PHXWHFMAMYYVRMK3E","employee_id":"01M3EA4J151B1H9D5AKAR29AN9","org_unit_id":null,"pay_rule_id":"01M3EA4FCDRQSS6V8H5Q6XS615","pay_rule_code":"hourly","pay_rule_name":"Почасовая (стажёр, дополнительный сотрудник)","rate_minor":12345,"percent_bp":0,"guarantee_minor":0,"pool_weight_bp":0… | HTTP 200 {"id":"01M3EA4J1PHXWHFMAMYYVRMK3E","employee_id":"01M3EA4J151B1H9D5AKAR29AN9","org_unit_id":null,"pay_rule_id":"01M3EA4FCDRQSS6V8H5Q6XS615","pay_rule_code":"hourly","pay_rule_name":"Почасовая (стажёр, дополнительный сотрудник)","rate_minor":9007199254740991,"percent_bp":0,"guarantee_minor":900719925…: expected { extra: 200, huge: 200 } to deeply equal { extra: 400, huge: 400 }
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N10] терминальный токен не читает справочники профессий и точек (403) 4ms
→ expected { professions: 200, units: 200 } to deeply equal { professions: 403, units: 403 }
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [F2] standalone без токенов не выдаёт права менеджера анонимному запросу (401) 20ms
→ expected { portal: 200, payroll: 200, …(1) } to deeply equal { portal: 401, payroll: 401, …(1) }
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [F3] cookie сессии не содержит сырой токен и отзывается при выходе 8ms
→ expected { rawTokenInCookie: true, …(1) } to deeply equal { rawTokenInCookie: false, …(1) }
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [F10] мутация по cookie без Origin отклоняется (CSRF, 403) 5ms
→ HTTP 201 {"id":"01M3EA4J31CEM99Y9708PNVE90","code":"profession-01m3ea4j31cem99y9708pnve90","name":"E2E-CSRF-профессия-c30803","status":"active"}: expected 201 to be 403 // Object.is equality
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [F7] повтор Idempotency-Key с другим телом не создаёт второе событие 31ms
→ expected { first: 201, secondCreated: true } to deeply equal { first: 201, secondCreated: false }
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N11] импорт с неверным kind начисления → 400, а не 500 25ms
→ HTTP 500 {"statusCode":500,"code":"23514","error":"Internal Server Error","message":"new row for relation \"staff_payroll_ledger\" violates check constraint \"staff_payroll_ledger_kind_check\""}: expected 500 to be 400 // Object.is equality
× tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [F4] перебор ключей входа ограничивается (429 не позже 30 неверных попыток) 75ms
→ статусы: 401: expected false to be true // Object.is equality
× tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-01] менеджер точки A запускает расчёт для точки B → 403 110ms
→ C1 POST /access-grants (point_manager): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
× tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-02] менеджер точки отправляет пакет на согласование → 403 64ms
→ C1 POST /access-grants (point_manager): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
× tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-03] бухгалтер отправляет пакет → успех, каждый директор получает ровно одно уведомление 2ms
→ C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
× tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-04] бухгалтер пытается подписать пакет → 403 2ms
→ C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
× tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-05] до подписи директора в ledger нет начислений и выплат 2ms
→ C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
× tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-06] подпись директора → начисления и выплаты в ledger, пакет и смены неизменяемы 2ms
→ C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
× tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-07] смена изменена после отправки → подписать нельзя (409), пакет возвращён бухгалтеру 1ms
→ C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
× tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-08] возврат с комментарием → пакет у бухгалтера, комментарий сохранён 2ms
→ C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
× tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-09] сотрудник точки A отработал смену в точке B → смена попадает в зарплату точки B 2ms
→ C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
× tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-10] сотрудник без согласия на биометрию → сервер сообщает терминалу «регистрация запрещена» 15ms
→ C3: HTTP 404 {"message":"Route GET:/api/v1/staff/terminal/employees/01M3EA4JGPPB7M0G78QQBQBJ1M/enrollment not found","error":"Not Found","statusCode":404}: expected 404 to be 200 // Object.is equality
× tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-11] согласие отозвано → статус для терминала меняется 15ms
→ C3 PUT biometric-consent: HTTP 404 {"message":"Route PUT:/api/v1/staff/employees/01M3EA4JH57XZ361XBC2Z7SA6J/biometric-consent not found","error":"Not Found","statusCode":404}: expected 404 to be 200 // Object.is equality
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-A] устройство не может само подтвердить смену (status=confirmed отклоняется) 87ms
→ HTTP 200 {"results":[{"idempotency_key":"e2e-01M3EA4JPXC3E39GZMHFH33H92","command_type":"upsert_work_session","status":"applied","result":{"id":"01M3EA4JPXQPVQDPGEA3YVFPXV","revision":1,"status":"applied"}}]}: expected { http: 200, result: 'applied', …(1) } to deeply equal { http: 200, result: 'rejected', …(1) }
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-B] устройство не может утвердить табель (status=approved отклоняется) 32ms
→ HTTP 200 {"results":[{"idempotency_key":"e2e-01M3EA4JR4CST4PE643FC043K9","command_type":"upsert_timesheet_entry","status":"applied","result":{"id":"01M3EA4JR43V65BMVJVX5DHSV0","revision":1,"status":"applied"}}]}: expected { result: 'applied', …(1) } to deeply equal { result: 'rejected', stored: null }
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-C0] начальная загрузка (pull без курсора) работает на реальной БД (200) 39ms
→ HTTP 500 {"statusCode":500,"code":"42703","error":"Internal Server Error","message":"column \"status\" does not exist"}: expected 500 to be 200 // Object.is equality
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-C] начальная загрузка >100 сущностей отдаёт все сущности постранично 55ms
→ HTTP 500 {"statusCode":500,"code":"42703","error":"Internal Server Error","message":"column \"status\" does not exist"}: expected 500 to be 200 // Object.is equality
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-D] изменения, сделанные через портал, попадают в инкрементальный pull 41ms
→ expected false to be true // Object.is equality
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-E] отметка уволенного сотрудника через sync отклоняется 24ms
→ HTTP 200 {"results":[{"idempotency_key":"e2e-01M3EA4JXB10Y1W7WAT3QXPJXR","command_type":"attendance_event","status":"applied","result":{"event_id":"01M3EA4JXD7TMSBAMMAK6HMXK2","status":"accepted"}}]}: expected 'applied' to be 'rejected' // Object.is equality
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-F] отметка через sync сохраняет точку устройства; чужая точка в payload отклоняется 42ms
→ HTTP 200 {"results":[{"idempotency_key":"e2e-01M3EA4JYFDZ0AAZYVEF6G72T2","command_type":"attendance_event","status":"applied","result":{"event_id":"01M3EA4JYH12S10KQ4NWN232FM","status":"accepted"}},{"idempotency_key":"e2e-01M3EA4JYFDXJXPH923SG1E832","command_type":"attendance_event","status":"applied","resul…: expected { Object (ownOrgUnit, foreign) } to deeply equal { …(2) }
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-G] битая команда в пакете отклоняется по отдельности, остальные применяются (не 500) 21ms
→ HTTP 500 {"statusCode":500,"code":"22007","error":"Internal Server Error","message":"invalid input syntax for type timestamp with time zone: \"e2e-not-a-timestamp\""}: expected { http: 500, statuses: [] } to deeply equal { http: 200, statuses: [ …(2) ] }
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-H] регистрация устройства по cookie с чужим Origin отклоняется (CSRF, 403) 9ms
→ HTTP 201 {"device":{"id":"01M3EA4JZKVD04KCMNCGGW1EAH","tenant_id":"01M3EA4DJNEY3HRCYSBSX43XW0","device_code":"E2E-5J7EDPFQV6","name":"E2E-CSRF-терминал-34e01a","token_hint":"kstaff_dev_01M3E","status":"active","allowed_scopes":["attendance:sync"],"registered_at":"2026-09-26T07:33:38.935Z","created_by":"01M3E…: expected 201 to be 403 // Object.is equality
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-I] без настроенных токенов анонимный запрос не регистрирует устройство (401) 7ms
→ HTTP 201 {"device":{"id":"01M3EA4JZWQF4S3SXWCX77J9ST","tenant_id":"01M3EA4DJNEY3HRCYSBSX43XW0","device_code":"E2E-KS5GF18F83","name":"E2E-Анонимный терминал-75d36d","token_hint":"kstaff_dev_01M3E","status":"active","allowed_scopes":["attendance:sync"],"registered_at":"2026-09-26T07:33:38.940Z","created_by":"…: expected 201 to be 401 // Object.is equality
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-J] отметка через sync вне окна времени (2001 год) отклоняется, как в POST /attendance/events 24ms
→ HTTP 200 {"results":[{"idempotency_key":"e2e-01M3EA4K0JQNMDJTDAM1PZ1J8K","command_type":"attendance_event","status":"applied","result":{"event_id":"01M3EA4K0NB5RS8GACHWC7N2C2","status":"accepted"}}]}: expected 'applied' to be 'rejected' // Object.is equality
× tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-K] ack курсора из будущего (больше выданного сервером) отклоняется (400) 7ms
→ HTTP 200 {"acknowledged":true,"cursor":"cur_999999999_fd163ccb01a6","acknowledged_at":"2026-09-26T07:33:38.972Z"}: expected 200 to be 400 // Object.is equality
✓ tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-L] отозванное устройство не может синхронизироваться (403) — позитивный контроль 8ms
✓ tests/e2e/00-harness.e2e.ts > HARNESS: реальный сервер + PostgreSQL 17 > [HARNESS] сервер отвечает live/ready (ready проверяет БД) 32ms
✓ tests/e2e/00-harness.e2e.ts > HARNESS: реальный сервер + PostgreSQL 17 > [HARNESS] БД: PostgreSQL 17, приложение под ролью без SUPERUSER/BYPASSRLS, мигратор без SUPERUSER 14ms
✓ tests/e2e/00-harness.e2e.ts > HARNESS: реальный сервер + PostgreSQL 17 > [HARNESS] миграции применены мигратором, app-роль не видит schema_migrations 14ms
✓ tests/e2e/00-harness.e2e.ts > HARNESS: реальный сервер + PostgreSQL 17 > [HARNESS] токены: без токена 401, случайный токен 401, manager-токен 200 14ms
✓ tests/e2e/00-harness.e2e.ts > HARNESS: реальный сервер + PostgreSQL 17 > [HARNESS] терминал: отметка сотрудника из импорта принимается (201) 25ms
✓ tests/e2e/00-harness.e2e.ts > HARNESS: реальный сервер + PostgreSQL 17 > [CTRL] RBAC: терминал не видит портал и не создаёт сотрудников; сотрудник видит только себя 24ms
✓ tests/e2e/00-harness.e2e.ts > HARNESS: реальный сервер + PostgreSQL 17 > [CTRL] уволенный сотрудник теряет доступ (401) 23ms
× tests/e2e/40-compose-pilot.e2e.ts > deploy/pilot/compose.yaml > [PILOT-1] все подставляемые переменные обязательны: ${VAR:?сообщение} 6ms
→ переменные без :? — пустое значение молча попадёт в контейнер: expected [ 'STANDALONE_MANAGER_TOKEN', …(13) ] to deeply equal []
× tests/e2e/40-compose-pilot.e2e.ts > deploy/pilot/compose.yaml > [PILOT-2] ни один сервис не запускается с NODE_ENV=development 1ms
→ expected [ 'app' ] to deeply equal []
✓ tests/e2e/40-compose-pilot.e2e.ts > deploy/pilot/compose.yaml > [PILOT-3] у сервиса app нет учётных данных мигратора 1ms
⎯⎯⎯⎯⎯⎯ Failed Tests 38 ⎯⎯⎯⎯⎯⎯⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N1] менеджер создаёт сотрудника через POST /employees → 201
AssertionError: HTTP 500 {"statusCode":500,"code":"42P08","error":"Internal Server Error","message":"inconsistent types deduced for parameter $2"}: expected 500 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 500
❯ tests/e2e/10-core-defects.e2e.ts:55:57
53| },
54| });
55| expect(response.status, describeResponse(response)).toBe(201);
| ^
56| const rows = await dbQuery('SELECT id FROM staff_employees WHERE p…
57| number,
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N2] подтверждение смены, расчёт и утверждение зарплаты проходят (200) и начисляют 8 ч × ставка
AssertionError: подтверждение смены: HTTP 500 {"statusCode":500,"code":"23502","error":"Internal Server Error","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ tests/e2e/10-core-defects.e2e.ts:73:81
71| body: { status: 'confirmed' },
72| });
73| expect(confirm.status, `подтверждение смены: ${describeResponse(co…
| ^
74|
75| const calculate = await api('POST', '/payroll/calculate', {
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N4] пересекающиеся расчёты не начисляют одну смену дважды
AssertionError: подтверждение смены (предусловие, см. N2): HTTP 500 {"statusCode":500,"code":"23502","error":"Internal Server Error","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ tests/e2e/10-core-defects.e2e.ts:104:7
102| confirm.status,
103| `подтверждение смены (предусловие, см. N2): ${describeResponse(c…
104| ).toBe(200);
| ^
105|
106| const month = monthOf(day);
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N3] push-подписка на внутренний адрес отклоняется, сервер не подключается к 127.0.0.1
AssertionError: подписка: HTTP 201 {"id":"01M3EA4FH3FG4Q3YEKXYQ8Y4Q5","endpoint":"https://127.0.0.1:36027/e2e-internal-admin"}: expected { status: 201, connections: 1 } to deeply equal { status: toSatisfy{…}, …(1) }
- Expected
+ Received
{
- "connections": 0,
- "status": toSatisfy<[Function anonymous]>,
+ "connections": 1,
+ "status": 201,
}
❯ tests/e2e/10-core-defects.e2e.ts:161:9
159| { status: subscribe.status, connections },
160| `подписка: ${describeResponse(subscribe)}`,
161| ).toEqual({
| ^
162| status: expect.toSatisfy((s: number) => s === 400 || s === 422…
163| connections: 0,
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N9] чужой push-endpoint нельзя перепривязать к другому сотруднику
AssertionError: HTTP 201 {"id":"01M3EA4J0JSPFRDF22J6E2CEY1","endpoint":"https://fcm.googleapis.com/fcm/send/e2e-d464594734e6ddf8569ec571f5832dbf"}: expected { status: 201, …(1) } to deeply equal { status: toSatisfy{…}, …(1) }
- Expected
+ Received
{
"owner": [
- "01M3EA4HZSY982GYTPDAVP0Z0Q",
+ "01M3EA4HZTSZ12MKP3SV134FKS",
],
- "status": toSatisfy<[Function anonymous]>,
+ "status": 201,
}
❯ tests/e2e/10-core-defects.e2e.ts:191:7
189| { status: second.status, owner: owner.map((row) => row.employee_…
190| describeResponse(second),
191| ).toEqual({
| ^
192| status: expect.toSatisfy((s: number) => s === 409 || s === 403),
193| owner: [employeeA!.id],
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N12] PUT pay-assignment отвергает лишние поля и нереальные суммы (400)
AssertionError: HTTP 200 {"id":"01M3EA4J1PHXWHFMAMYYVRMK3E","employee_id":"01M3EA4J151B1H9D5AKAR29AN9","org_unit_id":null,"pay_rule_id":"01M3EA4FCDRQSS6V8H5Q6XS615","pay_rule_code":"hourly","pay_rule_name":"Почасовая (стажёр, дополнительный сотрудник)","rate_minor":12345,"percent_bp":0,"guarantee_minor":0,"pool_weight_bp":0… | HTTP 200 {"id":"01M3EA4J1PHXWHFMAMYYVRMK3E","employee_id":"01M3EA4J151B1H9D5AKAR29AN9","org_unit_id":null,"pay_rule_id":"01M3EA4FCDRQSS6V8H5Q6XS615","pay_rule_code":"hourly","pay_rule_name":"Почасовая (стажёр, дополнительный сотрудник)","rate_minor":9007199254740991,"percent_bp":0,"guarantee_minor":900719925…: expected { extra: 200, huge: 200 } to deeply equal { extra: 400, huge: 400 }
- Expected
+ Received
{
- "extra": 400,
- "huge": 400,
+ "extra": 200,
+ "huge": 200,
}
❯ tests/e2e/10-core-defects.e2e.ts:215:7
213| { extra: extra.status, huge: huge.status },
214| `${describeResponse(extra)} | ${describeResponse(huge)}`,
215| ).toEqual({
| ^
216| extra: 400,
217| huge: 400,
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N10] терминальный токен не читает справочники профессий и точек (403)
AssertionError: expected { professions: 200, units: 200 } to deeply equal { professions: 403, units: 403 }
- Expected
+ Received
{
- "professions": 403,
- "units": 403,
+ "professions": 200,
+ "units": 200,
}
❯ tests/e2e/10-core-defects.e2e.ts:224:70
222| const professions = await api('GET', '/professions', { token: ctx(…
223| const units = await api('GET', '/org-units', { token: ctx().termin…
224| expect({ professions: professions.status, units: units.status }).t…
| ^
225| professions: 403,
226| units: 403,
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [F2] standalone без токенов не выдаёт права менеджера анонимному запросу (401)
AssertionError: expected { portal: 200, payroll: 200, …(1) } to deeply equal { portal: 401, payroll: 401, …(1) }
- Expected
+ Received
{
- "payroll": 401,
- "portal": 401,
- "write": 401,
+ "payroll": 200,
+ "portal": 200,
+ "write": 201,
}
❯ tests/e2e/10-core-defects.e2e.ts:237:85
235| body: { name: synthetic('Профессия') },
236| });
237| expect({ portal: portal.status, payroll: payroll.status, write: wr…
| ^
238| portal: 401,
239| payroll: 401,
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [F3] cookie сессии не содержит сырой токен и отзывается при выходе
AssertionError: expected { rawTokenInCookie: true, …(1) } to deeply equal { rawTokenInCookie: false, …(1) }
- Expected
+ Received
{
- "afterLogout": 401,
- "rawTokenInCookie": false,
+ "afterLogout": 200,
+ "rawTokenInCookie": true,
}
❯ tests/e2e/10-core-defects.e2e.ts:255:91
253| expect(logout.status).toBe(204);
254| const reuse = await api('GET', '/portal', { headers: { cookie } });
255| expect({ rawTokenInCookie: value === ctx().managerToken, afterLogo…
| ^
256| rawTokenInCookie: false,
257| afterLogout: 401,
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [F10] мутация по cookie без Origin отклоняется (CSRF, 403)
AssertionError: HTTP 201 {"id":"01M3EA4J31CEM99Y9708PNVE90","code":"profession-01m3ea4j31cem99y9708pnve90","name":"E2E-CSRF-профессия-c30803","status":"active"}: expected 201 to be 403 // Object.is equality
- Expected
+ Received
- 403
+ 201
❯ tests/e2e/10-core-defects.e2e.ts:269:57
267| body: { name: synthetic('CSRF-профессия') },
268| });
269| expect(response.status, describeResponse(response)).toBe(403);
| ^
270| });
271|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [F7] повтор Idempotency-Key с другим телом не создаёт второе событие
AssertionError: expected { first: 201, secondCreated: true } to deeply equal { first: 201, secondCreated: false }
- Expected
+ Received
{
"first": 201,
- "secondCreated": false,
+ "secondCreated": true,
}
❯ tests/e2e/10-core-defects.e2e.ts:288:75
286| const first = await send(`e2e-${randomUlid()}`);
287| const second = await send(`e2e-${randomUlid()}`);
288| expect({ first: first.status, secondCreated: second.status === 201…
| ^
289| first: 201,
290| secondCreated: false,
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [N11] импорт с неверным kind начисления → 400, а не 500
AssertionError: HTTP 500 {"statusCode":500,"code":"23514","error":"Internal Server Error","message":"new row for relation \"staff_payroll_ledger\" violates check constraint \"staff_payroll_ledger_kind_check\""}: expected 500 to be 400 // Object.is equality
- Expected
+ Received
- 400
+ 500
❯ tests/e2e/10-core-defects.e2e.ts:311:57
309| },
310| });
311| expect(response.status, describeResponse(response)).toBe(400);
| ^
312| });
313|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/38]⎯
FAIL tests/e2e/10-core-defects.e2e.ts > Основной API на реальной PostgreSQL > [F4] перебор ключей входа ограничивается (429 не позже 30 неверных попыток)
AssertionError: статусы: 401: expected false to be true // Object.is equality
- Expected
+ Received
- true
+ false
❯ tests/e2e/10-core-defects.e2e.ts:324:84
322| if (response.status === 429) break;
323| }
324| expect(statuses.includes(429), `статусы: ${[...new Set(statuses)].…
| ^
325| });
326| });
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[13/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-A] устройство не может само подтвердить смену (status=confirmed отклоняется)
AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-01M3EA4JPXC3E39GZMHFH33H92","command_type":"upsert_work_session","status":"applied","result":{"id":"01M3EA4JPXQPVQDPGEA3YVFPXV","revision":1,"status":"applied"}}]}: expected { http: 200, result: 'applied', …(1) } to deeply equal { http: 200, result: 'rejected', …(1) }
- Expected
+ Received
{
"http": 200,
- "result": "rejected",
- "stored": null,
+ "result": "applied",
+ "stored": "confirmed",
}
❯ tests/e2e/20-sync-defects.e2e.ts:86:7
84| },
85| describeResponse(response),
86| ).toEqual({ http: 200, result: 'rejected', stored: null });
| ^
87| });
88|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[14/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-B] устройство не может утвердить табель (status=approved отклоняется)
AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-01M3EA4JR4CST4PE643FC043K9","command_type":"upsert_timesheet_entry","status":"applied","result":{"id":"01M3EA4JR43V65BMVJVX5DHSV0","revision":1,"status":"applied"}}]}: expected { result: 'applied', …(1) } to deeply equal { result: 'rejected', stored: null }
- Expected
+ Received
{
- "result": "rejected",
- "stored": null,
+ "result": "applied",
+ "stored": "approved",
}
❯ tests/e2e/20-sync-defects.e2e.ts:109:7
107| { result: response.body?.results?.[0]?.status, stored: stored[0]…
108| describeResponse(response),
109| ).toEqual({ result: 'rejected', stored: null });
| ^
110| });
111|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[15/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-C0] начальная загрузка (pull без курсора) работает на реальной БД (200)
AssertionError: HTTP 500 {"statusCode":500,"code":"42703","error":"Internal Server Error","message":"column \"status\" does not exist"}: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ tests/e2e/20-sync-defects.e2e.ts:120:57
118| body: { cursor: null },
119| });
120| expect(response.status, describeResponse(response)).toBe(200);
| ^
121| const types = new Set(
122| (response.body.changes as Array<{ entity_type: string }>).map((c…
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[16/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-C] начальная загрузка >100 сущностей отдаёт все сущности постранично
AssertionError: HTTP 500 {"statusCode":500,"code":"42703","error":"Internal Server Error","message":"column \"status\" does not exist"}: expected 500 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 500
❯ pullAll tests/e2e/20-sync-defects.e2e.ts:51:57
49| body: { cursor: next, limit: 100 },
50| });
51| expect(response.status, describeResponse(response)).toBe(200);
| ^
52| changes.push(...(response.body.changes as Array<{ entity_type: str…
53| next = response.body.next_cursor as string;
❯ tests/e2e/20-sync-defects.e2e.ts:130:25
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[17/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-D] изменения, сделанные через портал, попадают в инкрементальный pull
AssertionError: expected false to be true // Object.is equality
- Expected
+ Received
- true
+ false
❯ tests/e2e/20-sync-defects.e2e.ts:151:95
149| expect(patch.status, describeResponse(patch)).toBe(200);
150| const { changes } = await pullAll(device, cursor);
151| expect(changes.some((c) => c.entity_type === 'employee' && c.entit…
| ^
152| true,
153| );
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[18/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-E] отметка уволенного сотрудника через sync отклоняется
AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-01M3EA4JXB10Y1W7WAT3QXPJXR","command_type":"attendance_event","status":"applied","result":{"event_id":"01M3EA4JXD7TMSBAMMAK6HMXK2","status":"accepted"}}]}: expected 'applied' to be 'rejected' // Object.is equality
Expected: "rejected"
Received: "applied"
❯ tests/e2e/20-sync-defects.e2e.ts:171:77
169| }),
170| ]);
171| expect(response.body?.results?.[0]?.status, describeResponse(respo…
| ^
172| });
173|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[19/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-F] отметка через sync сохраняет точку устройства; чужая точка в payload отклоняется
AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-01M3EA4JYFDZ0AAZYVEF6G72T2","command_type":"attendance_event","status":"applied","result":{"event_id":"01M3EA4JYH12S10KQ4NWN232FM","status":"accepted"}},{"idempotency_key":"e2e-01M3EA4JYFDXJXPH923SG1E832","command_type":"attendance_event","status":"applied","resul…: expected { Object (ownOrgUnit, foreign) } to deeply equal { …(2) }
- Expected
+ Received
{
- "foreign": "rejected",
- "ownOrgUnit": "01M3EA4JXPPT6RXP11RKV1VY20",
+ "foreign": "applied",
+ "ownOrgUnit": null,
}
❯ tests/e2e/20-sync-defects.e2e.ts:202:7
200| },
201| describeResponse(response),
202| ).toEqual({ ownOrgUnit: unitA!.id, foreign: 'rejected' });
| ^
203| });
204|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[20/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-G] битая команда в пакете отклоняется по отдельности, остальные применяются (не 500)
AssertionError: HTTP 500 {"statusCode":500,"code":"22007","error":"Internal Server Error","message":"invalid input syntax for type timestamp with time zone: \"e2e-not-a-timestamp\""}: expected { http: 500, statuses: [] } to deeply equal { http: 200, statuses: [ …(2) ] }
- Expected
+ Received
{
- "http": 200,
- "statuses": [
- "applied",
- "rejected",
- ],
+ "http": 500,
+ "statuses": [],
}
❯ tests/e2e/20-sync-defects.e2e.ts:225:7
223| },
224| describeResponse(response),
225| ).toEqual({ http: 200, statuses: ['applied', 'rejected'] });
| ^
226| });
227|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[21/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-H] регистрация устройства по cookie с чужим Origin отклоняется (CSRF, 403)
AssertionError: HTTP 201 {"device":{"id":"01M3EA4JZKVD04KCMNCGGW1EAH","tenant_id":"01M3EA4DJNEY3HRCYSBSX43XW0","device_code":"E2E-5J7EDPFQV6","name":"E2E-CSRF-терминал-34e01a","token_hint":"kstaff_dev_01M3E","status":"active","allowed_scopes":["attendance:sync"],"registered_at":"2026-09-26T07:33:38.935Z","created_by":"01M3E…: expected 201 to be 403 // Object.is equality
- Expected
+ Received
- 403
+ 201
❯ tests/e2e/20-sync-defects.e2e.ts:236:57
234| body: { device_code: `E2E-${randomUlid().slice(-10)}`, name: syn…
235| });
236| expect(response.status, describeResponse(response)).toBe(403);
| ^
237| });
238|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-I] без настроенных токенов анонимный запрос не регистрирует устройство (401)
AssertionError: HTTP 201 {"device":{"id":"01M3EA4JZWQF4S3SXWCX77J9ST","tenant_id":"01M3EA4DJNEY3HRCYSBSX43XW0","device_code":"E2E-KS5GF18F83","name":"E2E-Анонимный терминал-75d36d","token_hint":"kstaff_dev_01M3E","status":"active","allowed_scopes":["attendance:sync"],"registered_at":"2026-09-26T07:33:38.940Z","created_by":"…: expected 201 to be 401 // Object.is equality
- Expected
+ Received
- 401
+ 201
❯ tests/e2e/20-sync-defects.e2e.ts:247:57
245| },
246| });
247| expect(response.status, describeResponse(response)).toBe(401);
| ^
248| });
249|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[23/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-J] отметка через sync вне окна времени (2001 год) отклоняется, как в POST /attendance/events
AssertionError: HTTP 200 {"results":[{"idempotency_key":"e2e-01M3EA4K0JQNMDJTDAM1PZ1J8K","command_type":"attendance_event","status":"applied","result":{"event_id":"01M3EA4K0NB5RS8GACHWC7N2C2","status":"accepted"}}]}: expected 'applied' to be 'rejected' // Object.is equality
Expected: "rejected"
Received: "applied"
❯ tests/e2e/20-sync-defects.e2e.ts:260:77
258| }),
259| ]);
260| expect(response.body?.results?.[0]?.status, describeResponse(respo…
| ^
261| });
262|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[24/38]⎯
FAIL tests/e2e/20-sync-defects.e2e.ts > Офлайн-синхронизация на реальной PostgreSQL > [SYNC-K] ack курсора из будущего (больше выданного сервером) отклоняется (400)
AssertionError: HTTP 200 {"acknowledged":true,"cursor":"cur_999999999_fd163ccb01a6","acknowledged_at":"2026-09-26T07:33:38.972Z"}: expected 200 to be 400 // Object.is equality
- Expected
+ Received
- 400
+ 200
❯ tests/e2e/20-sync-defects.e2e.ts:275:57
273| body: { cursor: `cur_${seq}_${hash}` },
274| });
275| expect(response.status, describeResponse(response)).toBe(400);
| ^
276| });
277|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[25/38]⎯
FAIL tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-01] менеджер точки A запускает расчёт для точки B → 403
AssertionError: C1 POST /access-grants (point_manager): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 404
❯ grant tests/e2e/30-owner-decisions.e2e.ts:28:94
26| body: { role, org_unit_ids: orgUnitIds, display_name: synthetic(ro…
27| });
28| expect(response.status, `C1 POST /access-grants (${role}): ${describ…
| ^
29| 201,
30| );
❯ tests/e2e/30-owner-decisions.e2e.ts:94:22
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[26/38]⎯
FAIL tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-02] менеджер точки отправляет пакет на согласование → 403
AssertionError: C1 POST /access-grants (point_manager): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 404
❯ grant tests/e2e/30-owner-decisions.e2e.ts:28:94
26| body: { role, org_unit_ids: orgUnitIds, display_name: synthetic(ro…
27| });
28| expect(response.status, `C1 POST /access-grants (${role}): ${describ…
| ^
29| 201,
30| );
❯ tests/e2e/30-owner-decisions.e2e.ts:105:22
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[27/38]⎯
FAIL tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-03] бухгалтер отправляет пакет → успех, каждый директор получает ровно одно уведомление
AssertionError: C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 404
❯ grant tests/e2e/30-owner-decisions.e2e.ts:28:94
26| body: { role, org_unit_ids: orgUnitIds, display_name: synthetic(ro…
27| });
28| expect(response.status, `C1 POST /access-grants (${role}): ${describ…
| ^
29| 201,
30| );
❯ tests/e2e/30-owner-decisions.e2e.ts:118:24
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[28/38]⎯
FAIL tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-04] бухгалтер пытается подписать пакет → 403
AssertionError: C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 404
❯ grant tests/e2e/30-owner-decisions.e2e.ts:28:94
26| body: { role, org_unit_ids: orgUnitIds, display_name: synthetic(ro…
27| });
28| expect(response.status, `C1 POST /access-grants (${role}): ${describ…
| ^
29| 201,
30| );
❯ tests/e2e/30-owner-decisions.e2e.ts:133:24
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[29/38]⎯
FAIL tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-05] до подписи директора в ledger нет начислений и выплат
AssertionError: C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 404
❯ grant tests/e2e/30-owner-decisions.e2e.ts:28:94
26| body: { role, org_unit_ids: orgUnitIds, display_name: synthetic(ro…
27| });
28| expect(response.status, `C1 POST /access-grants (${role}): ${describ…
| ^
29| 201,
30| );
❯ tests/e2e/30-owner-decisions.e2e.ts:141:24
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[30/38]⎯
FAIL tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-06] подпись директора → начисления и выплаты в ledger, пакет и смены неизменяемы
AssertionError: C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 404
❯ grant tests/e2e/30-owner-decisions.e2e.ts:28:94
26| body: { role, org_unit_ids: orgUnitIds, display_name: synthetic(ro…
27| });
28| expect(response.status, `C1 POST /access-grants (${role}): ${describ…
| ^
29| 201,
30| );
❯ tests/e2e/30-owner-decisions.e2e.ts:148:24
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[31/38]⎯
FAIL tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-07] смена изменена после отправки → подписать нельзя (409), пакет возвращён бухгалтеру
AssertionError: C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 404
❯ grant tests/e2e/30-owner-decisions.e2e.ts:28:94
26| body: { role, org_unit_ids: orgUnitIds, display_name: synthetic(ro…
27| });
28| expect(response.status, `C1 POST /access-grants (${role}): ${describ…
| ^
29| 201,
30| );
❯ tests/e2e/30-owner-decisions.e2e.ts:173:24
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[32/38]⎯
FAIL tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-08] возврат с комментарием → пакет у бухгалтера, комментарий сохранён
AssertionError: C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 404
❯ grant tests/e2e/30-owner-decisions.e2e.ts:28:94
26| body: { role, org_unit_ids: orgUnitIds, display_name: synthetic(ro…
27| });
28| expect(response.status, `C1 POST /access-grants (${role}): ${describ…
| ^
29| 201,
30| );
❯ tests/e2e/30-owner-decisions.e2e.ts:195:24
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[33/38]⎯
FAIL tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-09] сотрудник точки A отработал смену в точке B → смена попадает в зарплату точки B
AssertionError: C1 POST /access-grants (accountant): HTTP 404 {"message":"Route POST:/api/v1/staff/access-grants not found","error":"Not Found","statusCode":404}: expected 404 to be 201 // Object.is equality
- Expected
+ Received
- 201
+ 404
❯ grant tests/e2e/30-owner-decisions.e2e.ts:28:94
26| body: { role, org_unit_ids: orgUnitIds, display_name: synthetic(ro…
27| });
28| expect(response.status, `C1 POST /access-grants (${role}): ${describ…
| ^
29| 201,
30| );
❯ tests/e2e/30-owner-decisions.e2e.ts:213:24
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[34/38]⎯
FAIL tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-10] сотрудник без согласия на биометрию → сервер сообщает терминалу «регистрация запрещена»
AssertionError: C3: HTTP 404 {"message":"Route GET:/api/v1/staff/terminal/employees/01M3EA4JGPPB7M0G78QQBQBJ1M/enrollment not found","error":"Not Found","statusCode":404}: expected 404 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 404
❯ tests/e2e/30-owner-decisions.e2e.ts:241:66
239| token: ctx().terminalToken,
240| });
241| expect(response.status, `C3: ${describeResponse(response)}`).toBe(…
| ^
242| expect(response.body).toMatchObject({ registration_allowed: false,…
243| });
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[35/38]⎯
FAIL tests/e2e/30-owner-decisions.e2e.ts > Решения владельца: роли, пакеты зарплаты, согласие на биометрию > [OWN-11] согласие отозвано → статус для терминала меняется
AssertionError: C3 PUT biometric-consent: HTTP 404 {"message":"Route PUT:/api/v1/staff/employees/01M3EA4JH57XZ361XBC2Z7SA6J/biometric-consent not found","error":"Not Found","statusCode":404}: expected 404 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 404
❯ tests/e2e/30-owner-decisions.e2e.ts:255:86
253| api('GET', `/terminal/employees/${employee!.id}/enrollment`, { t…
254| const granted = await setConsent('granted');
255| expect(granted.status, `C3 PUT biometric-consent: ${describeRespon…
| ^
256| const before = await enrollment();
257| const revoked = await setConsent('revoked');
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[36/38]⎯
FAIL tests/e2e/40-compose-pilot.e2e.ts > deploy/pilot/compose.yaml > [PILOT-1] все подставляемые переменные обязательны: ${VAR:?сообщение}
AssertionError: переменные без :? — пустое значение молча попадёт в контейнер: expected [ 'STANDALONE_MANAGER_TOKEN', …(13) ] to deeply equal []
- Expected
+ Received
- []
+ [
+ "STANDALONE_MANAGER_TOKEN",
+ "STANDALONE_TERMINAL_TOKEN",
+ "STANDALONE_TENANT_ID",
+ "STANDALONE_ACTOR_ID",
+ "STANDALONE_TERMINAL_ACTOR_ID",
+ "VAPID_PUBLIC_KEY",
+ "VAPID_PRIVATE_KEY",
+ "VAPID_SUBJECT",
+ "POSTGRES_APP_PASSWORD",
+ "HTTPS_PFX_PASSPHRASE",
+ "POSTGRES_MIGRATION_PASSWORD",
+ "POSTGRES_APP_PASSWORD",
+ "POSTGRES_MIGRATION_PASSWORD",
+ "POSTGRES_MIGRATION_PASSWORD",
+ ]
❯ tests/e2e/40-compose-pilot.e2e.ts:34:87
32| expect(interpolations.length).toBeGreaterThan(0);
33| const optional = interpolations.filter((inner) => !/^[A-Z0-9_]+:\?…
34| expect(optional, 'переменные без :? — пустое значение молча попадё…
| ^
35| });
36|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[37/38]⎯
FAIL tests/e2e/40-compose-pilot.e2e.ts > deploy/pilot/compose.yaml > [PILOT-2] ни один сервис не запускается с NODE_ENV=development
AssertionError: expected [ 'app' ] to deeply equal []
- Expected
+ Received
- []
+ [
+ "app",
+ ]
❯ tests/e2e/40-compose-pilot.e2e.ts:41:23
39| (service) => environmentOf(service).NODE_ENV === 'development',
40| );
41| expect(offenders).toEqual([]);
| ^
42| });
43|
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[38/38]⎯
Test Files 4 failed | 1 passed (5)
Tests 38 failed | 9 passed (47)
Start at 14:33:32
Duration 7.22s (tests 95%, import 3%, transform 2%)
JSON report written to /workspace/krona-staff/tests/e2e/evidence/e2e-results.json

View file

@ -0,0 +1,44 @@
| ID | Цвет | Зелёных/всего | Вердикт |
| ------- | ----- | ------------- | ----------------------------- |
| CTRL | GREEN | 2/2 | зелёный |
| F10 | RED | 0/1 | красный (известный дефект) |
| F2 | RED | 0/1 | красный (известный дефект) |
| F3 | RED | 0/1 | красный (известный дефект) |
| F4 | RED | 0/1 | красный (известный дефект) |
| F7 | RED | 0/1 | красный (известный дефект) |
| HARNESS | GREEN | 5/5 | зелёный (позитивный контроль) |
| N1 | RED | 0/1 | красный (известный дефект) |
| N10 | RED | 0/1 | красный (известный дефект) |
| N11 | RED | 0/1 | красный (известный дефект) |
| N12 | RED | 0/1 | красный (известный дефект) |
| N2 | RED | 0/1 | красный (известный дефект) |
| N3 | RED | 0/1 | красный (известный дефект) |
| N4 | RED | 0/1 | красный (известный дефект) |
| N9 | RED | 0/1 | красный (известный дефект) |
| OWN-01 | RED | 0/1 | красный (известный дефект) |
| OWN-02 | RED | 0/1 | красный (известный дефект) |
| OWN-03 | RED | 0/1 | красный (известный дефект) |
| OWN-04 | RED | 0/1 | красный (известный дефект) |
| OWN-05 | RED | 0/1 | красный (известный дефект) |
| OWN-06 | RED | 0/1 | красный (известный дефект) |
| OWN-07 | RED | 0/1 | красный (известный дефект) |
| OWN-08 | RED | 0/1 | красный (известный дефект) |
| OWN-09 | RED | 0/1 | красный (известный дефект) |
| OWN-10 | RED | 0/1 | красный (известный дефект) |
| OWN-11 | RED | 0/1 | красный (известный дефект) |
| PILOT-1 | RED | 0/1 | красный (известный дефект) |
| PILOT-2 | RED | 0/1 | красный (известный дефект) |
| PILOT-3 | GREEN | 1/1 | зелёный |
| SYNC-A | RED | 0/1 | красный (известный дефект) |
| SYNC-B | RED | 0/1 | красный (известный дефект) |
| SYNC-C | RED | 0/1 | красный (известный дефект) |
| SYNC-C0 | RED | 0/1 | красный (известный дефект) |
| SYNC-D | RED | 0/1 | красный (известный дефект) |
| SYNC-E | RED | 0/1 | красный (известный дефект) |
| SYNC-F | RED | 0/1 | красный (известный дефект) |
| SYNC-G | RED | 0/1 | красный (известный дефект) |
| SYNC-H | RED | 0/1 | красный (известный дефект) |
| SYNC-I | RED | 0/1 | красный (известный дефект) |
| SYNC-J | RED | 0/1 | красный (известный дефект) |
| SYNC-K | RED | 0/1 | красный (известный дефект) |
| SYNC-L | GREEN | 1/1 | зелёный |

View file

@ -0,0 +1,58 @@
$ node scripts/test/n13-race.mjs --mode as-is --attempts 5
[n13] mode=as-is sessions=false N=10 attempt=1: statuses={"500":10} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":10} -> BAD
[n13] mode=as-is sessions=false N=10 attempt=2: statuses={"500":10} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":10} -> BAD
[n13] mode=as-is sessions=false N=10 attempt=3: statuses={"500":10} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":10} -> BAD
[n13] mode=as-is sessions=false N=10 attempt=4: statuses={"500":10} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":10} -> BAD
[n13] mode=as-is sessions=false N=10 attempt=5: statuses={"500":10} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":10} -> BAD
[n13] mode=as-is sessions=false N=25 attempt=1: statuses={"500":25} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":25} -> BAD
[n13] mode=as-is sessions=false N=25 attempt=2: statuses={"500":25} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":25} -> BAD
[n13] mode=as-is sessions=false N=25 attempt=3: statuses={"500":25} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":25} -> BAD
[n13] mode=as-is sessions=false N=25 attempt=4: statuses={"500":25} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":25} -> BAD
[n13] mode=as-is sessions=false N=25 attempt=5: statuses={"500":25} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":25} -> BAD
[n13] mode=as-is sessions=false N=50 attempt=1: statuses={"500":50} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":50} -> BAD
[n13] mode=as-is sessions=false N=50 attempt=2: statuses={"500":50} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":50} -> BAD
[n13] mode=as-is sessions=false N=50 attempt=3: statuses={"500":50} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":50} -> BAD
[n13] mode=as-is sessions=false N=50 attempt=4: statuses={"500":50} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":50} -> BAD
[n13] mode=as-is sessions=false N=50 attempt=5: statuses={"500":50} distinct_run_ids=0 db_runs=0 db_lines=0 phantom_run_ids=0 errors={"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint":50} -> BAD
[n13] ИТОГ mode=as-is sessions=false: попыток 15, некорректных 15
exit=1
$ node scripts/test/n13-race.mjs --mode n2-bypass --attempts 5
[n13] ДИАГНОСТИКА: staff_outbox.occurred_at DEFAULT now() (обход N2 только в этой БД)
[n13] mode=n2-bypass sessions=false N=10 attempt=1: statuses={"200":10} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=10 attempt=2: statuses={"200":10} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=10 attempt=3: statuses={"200":10} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=10 attempt=4: statuses={"200":10} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=10 attempt=5: statuses={"200":10} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=25 attempt=1: statuses={"200":25} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=25 attempt=2: statuses={"200":25} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=25 attempt=3: statuses={"200":25} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=25 attempt=4: statuses={"200":25} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=25 attempt=5: statuses={"200":25} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=50 attempt=1: statuses={"200":50} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=50 attempt=2: statuses={"200":50} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=50 attempt=3: statuses={"200":50} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=50 attempt=4: statuses={"200":50} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=false N=50 attempt=5: statuses={"200":50} distinct_run_ids=1 db_runs=1 db_lines=0 phantom_run_ids=0 errors={} -> OK
[n13] ИТОГ mode=n2-bypass sessions=false: попыток 15, некорректных 0
exit=0
$ node scripts/test/n13-race.mjs --mode n2-bypass --attempts 5 --with-sessions --db krona_staff_n13_sessions
[n13] ДИАГНОСТИКА: staff_outbox.occurred_at DEFAULT now() (обход N2 только в этой БД)
[n13] mode=n2-bypass sessions=true N=10 attempt=1: statuses={"200":10} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=10 attempt=2: statuses={"200":10} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=10 attempt=3: statuses={"200":10} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=10 attempt=4: statuses={"200":10} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=10 attempt=5: statuses={"200":10} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=25 attempt=1: statuses={"200":25} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=25 attempt=2: statuses={"200":25} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=25 attempt=3: statuses={"200":25} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=25 attempt=4: statuses={"200":25} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=25 attempt=5: statuses={"200":25} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=50 attempt=1: statuses={"200":50} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=50 attempt=2: statuses={"200":50} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=50 attempt=3: statuses={"200":50} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=50 attempt=4: statuses={"200":50} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] mode=n2-bypass sessions=true N=50 attempt=5: statuses={"200":50} distinct_run_ids=1 db_runs=1 db_lines=1 phantom_run_ids=0 errors={} -> OK
[n13] ИТОГ mode=n2-bypass sessions=true: попыток 15, некорректных 0
exit=0

View file

@ -0,0 +1,425 @@
{"level":50,"time":1790407963311,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WMRD8CMNHSB5ASJMFBS","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963325,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WMWG288RAXX5MB0GAME","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963331,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WMSF3VNWBQZ79WKKNNG","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963338,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WMXA0R6KVNMAZ62PAP6","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963345,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WN61YD42TVX52CPV29Y","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963352,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WN0ZPN48QJQF30N7F84","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963359,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WMZEPFZW4MD43ACVP7A","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963367,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WN2AXFW9XX343GSAYSW","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963374,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WN4MZ157N86APJGC2W5","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963381,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WMV8PP6Y9KPJTRXMV3B","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963412,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WR5S56NK6Z7EHTXF0AX","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963420,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WR9TTXP41YVMF089FDK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963426,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WR6BTDQAYWCVJ544482","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963432,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WR93N9FS6NJY47Z5K8T","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963441,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WR6VE5SZ9XVT27NETH8","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963446,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WR7ZW2HA8GW7X04F070","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963452,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WR7H2A888DND2A80V6D","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963458,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WR8E3C5SSTS1EZ28S0S","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963464,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WR8NK7NJQFVBXZT7NR3","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963470,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WR5QXAPDRTA7CT5WMDG","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963500,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WTW3GAAN5JX70CNESXB","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963506,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WV0FZFTXVMET1EBJZRY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963513,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WTXJJZPWPTVB1R6CCMT","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963520,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WV0PNJ2MF2VVDHCGW3C","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963532,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WTZJPMY0BR5888AQP04","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963537,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WTZWYG3FW751JS6A98B","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963543,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WTY0WE4H6HATS4ZXQS7","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963549,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WTXTTXH6FDW0K9FHXNN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963554,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WTY6460861YTBDC8JEJ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963562,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WTWVZVQK74PWS4YEYSA","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963592,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WXTQ1MQGD6ZGT6Z6NEN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963600,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WXWTA8NVDQMKDZNC4JB","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963606,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WXV4877JVGAKE8QEMH9","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963613,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WXVEJG0SDHWEA8JRHQQ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963620,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WXYC8F53J2JYPW9GYEN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963625,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WXY5QK5STGXYV8A5N72","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963632,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WXWEXYB2JJRB97TS6V6","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963638,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WXX4RZG8AT10ZR3949K","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963643,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WXXW5QCG2EN36ZABAWF","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963649,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2WXW5386STRFC2ZSVTFB","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963674,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X0DR50W08E0TW1CJDP3","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963680,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X0ETN4VJ6E5S1XMJSRM","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963686,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X0F7CNQDM7KCBYWW10Q","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963691,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X0FT5MZ86G8XCBYGVT0","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963696,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X0ES5PFCH22EDNXSRVA","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963701,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X0G5JEFCJWAZ1672ZB2","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963708,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X0F93X9X184JZ0DTAPM","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963715,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X0HG5RBXRHGAWM9YEKE","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963721,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X0HYAKNA5F7N1TM31GR","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963726,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X0G79BPG9S4WS477MEE","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963789,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X2XBGTKEMYHTVFRFT1Y","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963797,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X306DVB68DF24PN3AXY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963803,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X2YKSQR2EQPRAY1185F","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963809,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X2X8HCENQG9T653YZ7H","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963815,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X34BVPQDV95ZRJTEG8C","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43788},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963821,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X2ZY9M3A1EG0PM5M1YM","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963828,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X2YARTZ4F6WVQKG8JTT","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963834,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X33NXYG4RXTQVYM7B7M","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43774},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963841,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X3074X883NVBKAEPBH7","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963847,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X2ZBS9GGH585FQHC600","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963855,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X35PRRSCHX485RYE00R","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43792},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963861,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X36TW0RQ6GCT38D0RGA","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43812},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963869,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X30RSHEHPT6TKT4RA0A","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963876,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X35GSGZSGZ2QB53EZE9","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963882,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X37GYFQ44242WDJ925M","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43828},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963888,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X47XAAP290ZPSD1B2MY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43872},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963893,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X310PWZXZM12NDZJ05X","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963899,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X46M8YRPTZGA8W30TAK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43862},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963907,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X48EW7RG3Q5P1PFGCDV","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43882},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963913,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X38E3GA8N20AABDZVD5","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43844},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963919,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X3EQT9RSV7QYR4ZRWGF","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43848},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963925,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X3F3M3N6VJN4XGE3Y8A","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43850},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963932,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X49R4AWV6GZFZB9SDAJ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43886},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963938,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X32DFS3V6T25XBS1JCH","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43768},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963945,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X37AMJ23S5QXZTS3WPN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43834},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963978,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9TE8DMMHGT71KQTWVE","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963984,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9Y9EJQTH6B7482Q943","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963990,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9WGREC82MJZ9MP87X2","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407963996,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9X6KVXK4P7QGAHGZ3B","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964001,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9W1QH7Q0HHNHE596PK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964007,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9YRT3B6CJVGC8XBH8A","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964014,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9Z5G7KWKJWKYFRYGW3","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964025,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9X87S66PMVGPNT11B1","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964031,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA0VEPEMTCAQXWAY20C","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964037,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA0S7Z7GSVN27FK0RRF","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43792},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964043,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA0QVVZFPZNRMESZDMW","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43834},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964050,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9VDX2TF8XD2B0RV2JZ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964057,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9VB432D0EN7PY9F1KB","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964062,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA0ZD9KQHRZJ57YYG09","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43844},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964068,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA0ZNA8N42MS6Q8VAM0","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43848},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964074,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA014GN6FM8F9EVNHFC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43850},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964079,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA08CJPQ4PF92ZZE8ZC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43828},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964085,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9Z4KDSDAW5VTJ5493V","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43774},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964091,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA0PJEE6F4YVYAHKQVP","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43812},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964097,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9Z1XN8TG716AZE7EWJ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43768},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964102,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA124E0FG1PFD1K6YVY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43882},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964107,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA1VKFBCRDYMP91AZF3","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43886},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964112,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2X9Z3M0CW5407VQTF7ED","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43788},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964117,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA1EMVC43JRJ8BPK3Q1","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43872},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964124,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XA1K9ZY3FB1Q2618QY4","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43862},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964156,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFCB9SC9W9T63A1ZQ5B","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964164,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFE2FA7V3NSD66BX231","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964170,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFFMWQ79R656KA6K3E1","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964175,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFD1F3VSSC4Z4WN0N6Z","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964181,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFF61E76M61MEJ1VP02","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964187,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFERN16DRFNQGE1G33S","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964193,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFG8VZSY2YJZZC6DSSY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964198,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFD0XTA0YHQQCY5C49A","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964205,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFHVPRN3C754PSQJQZ7","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43788},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964210,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFH5057G981ES6EPYCZ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43774},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964216,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFJR26DNEYQ8ZGCNQCF","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43844},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964222,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFJQQ05FYYQT4XNDFVZ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43834},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964228,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFFJ6PKRNTQ0DWNB3RX","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964233,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFJ6RZPSD7RAAVK9SZ4","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43828},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964239,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFJ5PHMG859R0C9SB1F","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43848},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964244,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFGBZADJY58BPVKXE29","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964249,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFHNM49XG13DKEKW0NH","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43792},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964255,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFK75NJ8KA408MT2D56","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43872},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964265,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFJTAZWFKVJG5B71M63","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43812},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964271,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFKDC5FQ3M1GQVNFNDR","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43862},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964276,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFHJ4CK5H9DW9P1XGXA","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43768},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964281,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFKYCE0GHBHP5ZCMYPT","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43886},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964287,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFHW9D8GKFZ9Y3J4S8V","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964292,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFJRVBQT6YZA8NA146A","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43850},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964297,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XFKX8CPRJ5VA8C185RT","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43882},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964328,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMRN73PCR6ATE3H1PVC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964335,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMTCCQBRNQ0T67Y6HGX","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964341,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMVMVYAT2SJNK43ECSF","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964348,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMV3JJWYSX7GC1FFW2E","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964354,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMSZAHD6SBFGKJJKA8X","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964360,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMREK8AD51VMJDQF4KT","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964366,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMVADWS7XGPX2B8CDQC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964372,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMWDCPQFT4PNJ0G4ZXP","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43788},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964377,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMTXCH6GJVT8060GJAP","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964384,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMX7WQP1JKA12FHD7R8","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43828},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964390,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMX9NSEYD5PJHQWAGTP","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964395,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMS8NZVBMKQTCPEHAFP","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964401,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMWCNAJ3MGDNPG76951","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43774},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964407,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMYXAWTSH7TBPT2JDGT","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43862},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964412,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMXH1VP5ZTG3S1XXZZ4","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43848},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964418,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMXEQWXR2NKENBZ5BQM","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43792},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964423,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMXR374KPSXPF4B6QJG","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43834},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964429,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMYKTMWJ3EH8GPN92M0","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43872},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964435,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMXJN79QTBAJT3TV9ES","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43850},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964440,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMXFDPGG6QZZ4EPAMHC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43844},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964445,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMX4Q7BNE2TCVGSSB3J","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43812},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964451,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMY0M84WZKHJT2HKSV3","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43886},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964457,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMS76BPHAXCSCCKY5P2","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964462,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMWEKXMJHX51CMRA10F","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43768},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964467,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XMY50VMYKXWGDXR46TV","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43882},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964500,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT24NB574XWFWN98SR8","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964506,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT4JXC06KKSZX77M0PZ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964513,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT30G1V2198SRDW0K8C","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964520,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT4EP2GNZDRE640NBS1","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964526,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT5SVJBGQ569N278Y90","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964531,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT6Q8JKVKKPX13K68YJ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43768},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964536,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT2V7TW2N9SFGNZJZG4","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964543,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT6W7MXW2P1A0V4P9D6","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43774},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964550,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT43JQA5ZSJ04J6DTY9","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964555,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT2D0WVR5QFAYPVN9MH","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964562,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT5T50RW8M7KAM0GNVQ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964569,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT3ZEXZPBCXNEX6C4CF","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964575,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT7MA1HN042QAAHPFVD","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43844},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964581,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT6YGPWV3TRSDZGYFMM","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43792},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964587,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT7R2CZ98J7QYCQ2XZ3","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43834},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964593,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT61N79MRYCW30M2B7S","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964599,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT7JQCTPF8JT72JW5RY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43872},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964605,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT78QB837WH5WDZJW50","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43882},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964610,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT7H54YZ1B3DXS9M8FB","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43828},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964615,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT62KADS90EG49V9CEZ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43812},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964621,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT6G2FBNE7KCYVD8WTS","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43788},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964627,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT70P57ECHSJVCNGFWZ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43862},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964633,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT76C11XPFH99V7HK2S","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43850},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964639,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT7938D4BK129G6Y00D","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43886},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964647,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XT7TXS05R23GAT1QTCK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43848},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964680,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZRYDQ1RFA9J9ASAS2N","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964685,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZW50956C67KTT2DH41","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964699,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZVQN75QWJ1S2GNM24R","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964706,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZSBD9WTJ2PRTRY54BS","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964711,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZT8AK3CVEQMKV55DDW","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964717,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZV5CTRB1PZTAM3FW9Z","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964723,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZTYTSWG20Q5KAE44E5","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964728,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZXHQC3BAEAG3MGDQMY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43774},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964734,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZSXY7HT6BHVS3EES82","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964740,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZX9GTC764YTCMWGXBG","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43792},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964747,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZVE55P7BR7M1Z07H7E","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964754,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZXTE7D1QEDW8XF8H7R","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43828},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964759,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZW4WSK4XGS1R4TFRJN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964764,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZXYZSQJAWM9W564ACQ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43788},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964771,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZXTPQWVM1YET03ZQJP","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43768},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964777,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZX9X1EF4AXG4GM2KX0","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964783,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZYE18WNB3Y3NYF4QVF","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43850},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964789,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZZ0THT610YYWWJMWES","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43886},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964794,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZYBB8W0KX81ZWY3A5R","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43848},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964800,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0KWTYH51GYGY8RTQ7E","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43906},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964807,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZXDMGP4AQPM597JHRV","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43812},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964812,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0KQWYY6WRGMXRQ21D0","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43894},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964818,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZY5G9X4RQNA006SNW7","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43844},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964824,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZYMW881NSMWDX6EBSH","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43862},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964830,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0MQZ86WVEJBX4EG2A2","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43928},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964837,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0M4WRW53H1BKJGHJ5Y","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43944},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964842,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0MHNPHR49YZ2TV788K","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43918},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964848,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0KVTE5TKV6CXYC6QDC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43916},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964854,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0MJG1GT81JW3YHPPTF","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43962},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964860,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0MTTPWRDMNXRPD8HHP","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43992},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964865,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0KZSVSCQHYJES12M7Z","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43892},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964871,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZY1S5ESWG25P982Q57","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43834},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964877,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZY2JS5D989YRNRXA67","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43872},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964883,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2XZZB80CSCCHNK1GNCE5","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43882},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964889,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0NGVGYA7HPR5VTFPPF","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44014},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964895,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0NZZ5H29M3NDBP95AZ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44022},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964901,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0NX2W04XPC2AZW8E2T","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44034},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964908,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0MW9QD684TRVF69NZ2","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43978},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964914,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0N70Q70HT5DC9AVCRE","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44032},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964921,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0NFH191EAHW8N5KTKE","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44042},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964926,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0PD8CR9M02RK2ATYDE","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44090},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964931,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0MWCWGC4GKYRGZGJZJ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43948},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964936,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0PZCC413TQ6MP0TRQP","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44080},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964941,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0NQNSEWMBR0486JNWC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44054},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964947,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0NSX46DV7P73B3TRC8","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44008},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964954,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0PDBEBK3HRPSAXN7VK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44120},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964959,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0N6HNP1C8BRD0W42C0","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44070},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964965,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0PK43FJ929JGG54YQN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44128},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964970,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0P7DA2KYH6JNJ2PDA5","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44112},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407964976,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Y0PF7R7DFRVSW8T5FS3","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44102},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965016,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA36BF3P24RJ9SKX34B","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965022,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA39KYMA48Z3TPB7NAK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965028,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA6H6JQG2Q1E1RMXV6R","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965034,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA7CF5MCMDY4KDR39QP","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965039,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA8CQ0RSW12TSMDAFF4","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43774},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965045,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA4CJR8K7R1M3M82TWR","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965052,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA4TQX8RF6TV0RSQ1ZY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965057,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA5VXDVTAT12PEQBQSC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965063,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA92667DT1DH6R4R01P","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43812},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965068,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA658K4GZEPZSVWW7QX","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965074,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA7306DGWX7K1PCE5T4","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965080,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA9TMM1QFMJD91YQPTB","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43828},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965086,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA8FRY47X3P22M5D1WE","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965092,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA8TZFG6Q5CK8G54D92","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43768},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965098,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA8SGGAD06FT56WY073","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43792},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965103,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA9JHF39K08JB7XWCZE","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43872},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965109,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA92D1CFHEF6M838NHD","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43848},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965116,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA9SB4ESYZTSJW4X3Q9","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43844},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965122,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAA9SDTX0MX796MCRZN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43886},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965127,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAAZS5377NVG34RXACC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43906},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965133,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA9PDT48B3Q203S4Z2D","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43850},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965139,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAAHYZADFD8JTGF3SN2","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43882},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965144,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA963VJ505CRYSF95ME","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43834},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965150,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA8V97B41TV9RKCC3Z0","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43788},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965156,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YABVSDB8N0X3XK28Y2N","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43928},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965161,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YABW4PJ30ZBP8DBB4QM","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43918},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965168,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAA4YWNQSGSSG8RYE7M","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43916},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965173,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA56JJYYK1FE7ZY3AZK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965178,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAACHJVKGK5WJPQPRKN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43894},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965184,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YABWE5RVMA0V67YY7FX","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43944},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965190,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YABKQP0TA9C5E4E204X","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43948},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965196,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YABTBEY78C36RB8X6FZ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43978},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965201,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YA911BQMZPGY9XW6N7F","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43862},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965212,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAA4FKWGCWBWFY56T0G","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43892},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965217,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YACT1NJ7DWZWM4PS80Y","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44022},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965222,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAB3MNS49K6K991YMWH","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44014},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965227,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAB66GP4FE1Y8HAX0YH","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43992},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965233,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YABHD4GQP7WPG5CRNGT","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43962},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965238,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YACMR0RPCXY9XKF29B1","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44032},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965244,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YACRBTBTZ6KYS2BEWA3","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44034},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965250,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAC0Z83WPN3KK1KZ2G2","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44042},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965255,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YADH3FCP66EKN1XA0RR","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44102},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965260,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YADETCSN2DP6FYK619W","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44112},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965267,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAB3D9P3RQ54E5QXFG6","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44008},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965273,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YACSSAWH4ERMM10WZHW","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44080},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965279,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YADRPT6D69QPQ9HZWQV","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44128},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965284,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAC6RKR8DN5HPMEMWST","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44070},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965289,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YADC8XHDDZB7TK5EW1Y","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44090},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965293,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YADRQN6ABZ07BKN25ZB","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44120},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965299,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YAC9PRJ21A4R4HSKXQM","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44054},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965332,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM3VZYNCDHRJ08BZ28F","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965339,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM40WYDVMMMWEGF4VSD","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965344,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM74YTH1R30R204S0P3","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43768},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965351,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM7Y4NEM06JZG6H35HY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965356,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM5S6C3846JGCYM5HYA","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965362,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM6T4MCTCZ9MNGHQFNA","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965369,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM5XMP4GN9VB69XSVHB","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965375,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM6ZE3NNVGG4Z6A8R8Q","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965381,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM891SXA4N2QNNK6R35","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43812},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965388,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM5J46VAB4K9E73RM5P","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965393,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM3NS8JH2NWPZPS7PZ9","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965398,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM8JFPSGEDXNC05RMKC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43828},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965405,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM8GX0V7Q1NEQ7YK578","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43792},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965413,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM8WQJZJSXSN389JHC5","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43834},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965418,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM7XYZKDFAGVS68ZCBY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43774},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965424,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM893G0FFHQZ9X6MXS4","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43844},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965429,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM7PEFVY2D2AYT8M7P4","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43788},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965435,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM97EGNADPKJE3FR0ME","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43886},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965444,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM4K8Z8HK0X02B8J655","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965452,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM89ZK5BV2MW0CAE22X","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43848},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965458,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM87054EXYKYXE97R2Y","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43850},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965463,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM96PDVFN59EEVCPQ4T","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43892},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965469,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM91NZKEGSZXN27XS84","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43906},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965475,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM91TEDCZDKWYPBH0JQ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43918},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965480,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM8AFRQCKHSD0CJDNH5","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965486,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM9N3CR0TJ46B21PQSC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43872},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965491,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM9KZFZDCQDCR3J2A7G","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43862},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965497,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMA3XRG2ASSZF2BV7KH","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43928},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965502,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMATNGRG9XT01VDMCCK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43948},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965507,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMAFHHD3SASE6YBGNKK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43992},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965512,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMA3TJFJGYWYNNYE5H6","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43944},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965518,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM9Z758WF96P9N779RY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43916},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965524,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM9N3A0FT5NVX8JRXKR","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43882},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965529,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMB5MQMFJ00Y7RJWD81","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44034},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965535,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMB4BPY4P0PHY108ZNR","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44032},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965541,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMAPXXA6PJRJ7EJ3M74","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43962},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965547,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMBT3ETTERG26CMV8XJ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44022},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965553,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMAXFZT6X42PM7MC8TB","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44014},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965558,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMB0YBKZ6DHKCW3KVFJ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44080},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965565,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMAPMFTVDSD87TBB91F","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44008},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965570,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMBDEBD7ZND56AH840S","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44054},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965575,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMBM779ZE2DBH05NSE7","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44112},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965581,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMBNZD3PT75A3BRFV26","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44070},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965587,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YM9BW06B1N3A3R2EHP9","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43894},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965592,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMBWCFPNNC7RK170JGS","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44090},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965597,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMA3Z5S0ZZGAMFM7WJ2","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43978},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965602,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMCKW5GH6X625Q9P45X","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44120},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965608,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMCN8K7AJPPVZXSF6CT","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44128},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965613,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMB93JCRFF379W6DQBH","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44102},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965618,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YMB603133XQGGPJ09HN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44042},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965654,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY42AZZHP2CSM5QD51H","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965659,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY6705R9KDCPDYVDEYN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965665,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY5S8RAFHE0M86NQDZ4","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965670,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY671H84ETCJJHV69K7","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965681,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY7WTHBKGDDMQZBN4GB","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965686,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY8585N9VH1J3JAB2CP","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43768},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965691,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY6EGZSAXYDSFXDT16J","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965698,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY7D8FJRNS3Y4VQNFAA","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965704,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY8RNBEJTP1K5EXSKX0","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43774},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965710,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY7K36Y1Y37JX8QT5VM","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965716,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY9MXW9KK63JP34P5X9","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43828},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965722,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY9YZZ1Z4X86SC2F23N","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43834},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965727,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY9Q01D5WDCJGCSGX7M","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43812},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965732,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY8Z5P3ED5PER21T0CZ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965737,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY94NDXTWXCP20SV5A1","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43848},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965744,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY98Z1E61C98CWDH9YQ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43862},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965750,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY9ZM69E4EPBT6KWD4Z","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43844},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965756,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY8NNQS3740ZFJVQSCW","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43788},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965762,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY8ADPJD91SS7WN1CZR","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43792},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965767,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY9ZC9KFDW94X09XG0M","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43872},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965772,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYAVWKDQ9RSHVHRYAPG","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43892},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965778,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY9BCZCEG858SEYZWPJ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43850},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965783,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY4MGKKB4E8GWZ8X1C4","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965790,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYARPAGF7XA9FC72QV6","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43886},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965795,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYA7FB841BF8109WC2V","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43906},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965801,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YY5M47QR5JPYYMGKJYK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965805,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYBZJHPY029DF3975G0","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43944},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965812,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYBAWPS1WP6W8W99PWS","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43978},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965817,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYAB65BX5WE894WBV9X","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43918},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965823,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYBV62PPKJ5C57GY4E9","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43962},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965829,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYBTZP7ZYDSKRBXC0Q1","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44014},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965835,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYBBKA6ZYBE5X3ARFBX","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43948},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965840,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYAF600TEZ7EWNBW0HR","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43882},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965845,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYANH6A95DXQKQW3E4J","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43928},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965853,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYA890DXAQ252EGN38A","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43894},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965860,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYC6PMCBC8HX7HCRQ7A","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44054},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965866,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYCCES2JMHHGEM2PPAN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44042},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965872,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYB24AMATY82EAEJ1FK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44032},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965877,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYCNK1T6GVG2Y81SEW8","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44070},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965883,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYAFR6S5V4TDR9M01Z4","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43916},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965889,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYBY6G844P4EZBK70F8","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44022},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965893,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYCN7X755NRRWH7Q0VC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44090},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965899,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYBTVRDTM1XKPR1FH61","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44034},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965903,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYB759SZTK1707Y6CVM","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43992},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965909,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYBY443NXAGQ0TQ7KVX","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44008},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965915,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYCC0ECBBQT0FKPMPD3","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44112},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965921,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYCCTRMMZJ6X8SVGTZ0","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44102},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965927,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYC981T139JP60STH3D","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44128},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965934,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYCT20MN11WTC7TXND3","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44120},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965940,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2YYC8SKBX1ACPZ0X3ANT","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44080},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965979,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z82PF421QGEA433F0J5","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43656},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965984,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z853ZC384RKZ3GRCPBK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43740},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965990,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z84SZDS35KT0F0TFEXY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43726},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407965995,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z878Y4W6AXHC44H4M48","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43774},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966001,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z85449RSNZNCCXBA5SR","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43728},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966007,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z84VST39574Z9TTNSAW","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43696},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966012,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z86RSGEJB76S19ZJYTH","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43748},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966018,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z87YAM0E2W3WRXH4A2T","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966024,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z87MBW2KWDGAE4MAAAC","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43792},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966030,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z839DCTZQCDDF2G1TQP","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43668},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966036,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z866R1TF6A0V8SW5SXR","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43760},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966043,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z86VJE6A4R6HR1MZ1QN","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43768},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966049,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z87BN3E8614Q3NZZME8","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43812},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966054,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z87GPC9G8MAGDK8DHJV","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43788},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966060,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z889N4HRHA1N8HJ5DQG","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43848},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966068,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z87GCARD3FJ10KXR424","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43828},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966075,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z883G5TQ5CJGZTCK5D9","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43834},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966080,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z83J7K3GC393YWPSN0X","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43684},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966088,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z84SDHESVNJ58ZYYF1B","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43710},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966093,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8852W9KKHP616R5G2N","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43872},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966099,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z88NJ8SCF82A7YMHKHD","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43844},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966106,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z88C6A6J21GZTC139JD","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43850},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966112,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z893ZQDZDQ85VXRY5VK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43886},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966119,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z89R8297RXNR7QRGKEZ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43892},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966126,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8AS1QPV0M8860CCP91","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43944},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966131,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z89SHYVET82FT28W07F","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43882},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966136,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8AA65NVS2PQ1GAXG98","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43918},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966142,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z88KYARSKGTTPR5A99N","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43862},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966152,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z89AK2EGF0THM2QR8H9","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43916},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966158,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8BA9NNV6THDDTGCCMK","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44014},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966163,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z89S9V69EEQBAMEED5N","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43906},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966168,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8ANH9J60334K44XNPJ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43962},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966174,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8AQKJF1XN2NDDS864X","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43928},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966179,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8BDSMZMSPDB566DDBZ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44022},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966185,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8ASEVQMQ1R6GX92NND","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43978},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966190,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8B9ERJNWRZRS6419CQ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44032},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966195,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8B0QQD0RRQQTSN8P63","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44034},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966200,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8BVZ6YGQ3ZT67BXB04","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44042},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966206,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z89TKFEQ4H2SKGCQRGD","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43894},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966210,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8C3PPTDCAXG4FW46DY","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44090},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966215,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8B6WA84WC71GWYP20G","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44008},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966225,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8A319FY032CNA3VPTB","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43992},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966230,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8CV5X8CCSJNWK9ACXS","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44120},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966235,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8C07SAMHFQXX12J01F","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44102},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966240,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8CR9E6TXJ4S0V0CJNA","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44128},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966245,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8A08N2PFP6K7CC94Y6","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":43948},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966251,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8BMXA4GBCV9DTRSN93","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44070},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966260,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8C2Q0D58VJCBEQDQ46","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44080},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966265,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8CAPNAAFC9Z5H5D6BJ","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44112},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":50,"time":1790407966271,"pid":1686260,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA2Z8B7J6KW3JPGG1NMT0S","req":{"method":"POST","url":"/api/v1/staff/payroll/calculate","host":"127.0.0.1:42341","remoteAddress":"127.0.0.1","remotePort":44054},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async calculatePayrollPeriod (/workspace/krona-staff/src/domain/payroll/service.ts:770:3)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:687:24)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}

View file

@ -0,0 +1,11 @@
{"level":30,"time":1790408014423,"pid":1688835,"hostname":"grok-bot-vm-420973429","msg":"Server listening at http://127.0.0.1:33821"}
{"level":30,"time":1790408014470,"pid":1688835,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4EM59MB3QYQ7QG56R4Q6","req":{"method":"GET","url":"/api/v1/staff/ready","host":"127.0.0.1:33821","remoteAddress":"127.0.0.1","remotePort":43800},"msg":"incoming request"}
{"level":30,"time":1790408014485,"pid":1688835,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4EM59MB3QYQ7QG56R4Q6","res":{"statusCode":200},"responseTime":15.399766999999997,"msg":"request completed"}
{"level":30,"time":1790408017988,"pid":1688835,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J24H0CNE1DPZ87J7PY6","req":{"method":"GET","url":"/api/v1/staff/portal","host":"127.0.0.1:33821","remoteAddress":"127.0.0.1","remotePort":41914},"msg":"incoming request"}
{"level":30,"time":1790408017995,"pid":1688835,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J24H0CNE1DPZ87J7PY6","res":{"statusCode":200},"responseTime":7.126036999999997,"msg":"request completed"}
{"level":30,"time":1790408017997,"pid":1688835,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2CSDE96DCZ4X0TSJ1E","req":{"method":"GET","url":"/api/v1/staff/payroll","host":"127.0.0.1:33821","remoteAddress":"127.0.0.1","remotePort":41916},"msg":"incoming request"}
{"level":30,"time":1790408018000,"pid":1688835,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2CSDE96DCZ4X0TSJ1E","res":{"statusCode":200},"responseTime":3.394659000000047,"msg":"request completed"}
{"level":30,"time":1790408018001,"pid":1688835,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2HH1VC67KYM9CGFM3R","req":{"method":"POST","url":"/api/v1/staff/professions","host":"127.0.0.1:33821","remoteAddress":"127.0.0.1","remotePort":41914},"msg":"incoming request"}
{"level":30,"time":1790408018006,"pid":1688835,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2HH1VC67KYM9CGFM3R","res":{"statusCode":201},"responseTime":4.0853070000002845,"msg":"request completed"}
{"level":30,"time":1790408018939,"pid":1688835,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JZTH0S49N5WD7NP5DXV","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:33821","remoteAddress":"127.0.0.1","remotePort":41926},"msg":"incoming request"}
{"level":30,"time":1790408018943,"pid":1688835,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JZTH0S49N5WD7NP5DXV","res":{"statusCode":201},"responseTime":4.126679999999396,"msg":"request completed"}

View file

@ -0,0 +1,93 @@
{"level":30,"time":1790408014985,"pid":1688859,"hostname":"grok-bot-vm-420973429","msg":"Server listening at http://127.0.0.1:36299"}
{"level":30,"time":1790408014994,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4F4HH3VG14PERD1YSY9Y","req":{"method":"GET","url":"/api/v1/staff/ready","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":38380},"msg":"incoming request"}
{"level":30,"time":1790408015008,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4F4HH3VG14PERD1YSY9Y","res":{"statusCode":200},"responseTime":13.205045999999982,"msg":"request completed"}
{"level":30,"time":1790408018078,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J4YV0JF6R2376AEHJPT","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018085,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J4YV0JF6R2376AEHJPT","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018088,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J4YV0JF6R2376AEHJPT","res":{"statusCode":401},"responseTime":10.026388999999654,"msg":"request completed"}
{"level":30,"time":1790408018090,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5AY86FT8CXCVMZBCVE","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018092,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5AY86FT8CXCVMZBCVE","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018093,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5AY86FT8CXCVMZBCVE","res":{"statusCode":401},"responseTime":3.1223180000001776,"msg":"request completed"}
{"level":30,"time":1790408018094,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5EVV7MG8NSJEN3BEHE","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018095,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5EVV7MG8NSJEN3BEHE","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018095,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5EVV7MG8NSJEN3BEHE","res":{"statusCode":401},"responseTime":1.5804190000003473,"msg":"request completed"}
{"level":30,"time":1790408018096,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5GS3DNBZVF696K10GB","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018097,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5GS3DNBZVF696K10GB","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018098,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5GS3DNBZVF696K10GB","res":{"statusCode":401},"responseTime":1.4676269999999931,"msg":"request completed"}
{"level":30,"time":1790408018099,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5J8T6KXH5TFHHSCHVF","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018100,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5J8T6KXH5TFHHSCHVF","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018100,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5J8T6KXH5TFHHSCHVF","res":{"statusCode":401},"responseTime":1.386855000000196,"msg":"request completed"}
{"level":30,"time":1790408018101,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5NP6FY0C583X92CP43","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018102,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5NP6FY0C583X92CP43","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018102,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5NP6FY0C583X92CP43","res":{"statusCode":401},"responseTime":1.2076160000001437,"msg":"request completed"}
{"level":30,"time":1790408018103,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5Q5TRCA85QYA3H0VYQ","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018104,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5Q5TRCA85QYA3H0VYQ","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018104,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5Q5TRCA85QYA3H0VYQ","res":{"statusCode":401},"responseTime":1.1122859999995853,"msg":"request completed"}
{"level":30,"time":1790408018105,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5SA4BPNWS2DED9PXYB","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018107,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5SA4BPNWS2DED9PXYB","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018107,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5SA4BPNWS2DED9PXYB","res":{"statusCode":401},"responseTime":1.8221369999996568,"msg":"request completed"}
{"level":30,"time":1790408018108,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5WVAX2TGTKMNXF5TMG","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018110,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5WVAX2TGTKMNXF5TMG","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018110,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5WVAX2TGTKMNXF5TMG","res":{"statusCode":401},"responseTime":1.6929129999998622,"msg":"request completed"}
{"level":30,"time":1790408018111,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5ZJ0TBAM6HCKDG31ST","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018112,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5ZJ0TBAM6HCKDG31ST","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018112,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J5ZJ0TBAM6HCKDG31ST","res":{"statusCode":401},"responseTime":1.3584950000004028,"msg":"request completed"}
{"level":30,"time":1790408018113,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J61SAXX1SBMMF6K7MW7","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018114,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J61SAXX1SBMMF6K7MW7","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018115,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J61SAXX1SBMMF6K7MW7","res":{"statusCode":401},"responseTime":1.17779500000006,"msg":"request completed"}
{"level":30,"time":1790408018116,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J64PXWG5P4DSGFA9VDQ","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018117,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J64PXWG5P4DSGFA9VDQ","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018117,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J64PXWG5P4DSGFA9VDQ","res":{"statusCode":401},"responseTime":1.2440259999998489,"msg":"request completed"}
{"level":30,"time":1790408018118,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J665CYSPZZM1V2R18JN","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018119,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J665CYSPZZM1V2R18JN","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018120,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J665CYSPZZM1V2R18JN","res":{"statusCode":401},"responseTime":1.6543000000001484,"msg":"request completed"}
{"level":30,"time":1790408018120,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J681X6JYH17BSE6KS7T","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018121,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J681X6JYH17BSE6KS7T","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018121,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J681X6JYH17BSE6KS7T","res":{"statusCode":401},"responseTime":0.9558520000000499,"msg":"request completed"}
{"level":30,"time":1790408018122,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6AZB9EF2ZWRM58K33X","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018124,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6AZB9EF2ZWRM58K33X","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018124,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6AZB9EF2ZWRM58K33X","res":{"statusCode":401},"responseTime":1.3041690000000017,"msg":"request completed"}
{"level":30,"time":1790408018125,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6DANVFJ43ANCSWN2AD","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018126,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6DANVFJ43ANCSWN2AD","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018126,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6DANVFJ43ANCSWN2AD","res":{"statusCode":401},"responseTime":1.0975260000000162,"msg":"request completed"}
{"level":30,"time":1790408018127,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6FB5G9XGHEX6J2DQD9","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018128,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6FB5G9XGHEX6J2DQD9","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018128,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6FB5G9XGHEX6J2DQD9","res":{"statusCode":401},"responseTime":0.9584480000003168,"msg":"request completed"}
{"level":30,"time":1790408018129,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6HN1B0FT6JSM29WA43","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018129,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6HN1B0FT6JSM29WA43","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018130,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6HN1B0FT6JSM29WA43","res":{"statusCode":401},"responseTime":0.8860890000000836,"msg":"request completed"}
{"level":30,"time":1790408018130,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6JYZVQY0HTDDS7J417","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018131,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6JYZVQY0HTDDS7J417","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018131,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6JYZVQY0HTDDS7J417","res":{"statusCode":401},"responseTime":1.0295750000000226,"msg":"request completed"}
{"level":30,"time":1790408018132,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6MATZ7QY0BR7V8AW72","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018133,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6MATZ7QY0BR7V8AW72","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018133,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6MATZ7QY0BR7V8AW72","res":{"statusCode":401},"responseTime":0.9096939999999449,"msg":"request completed"}
{"level":30,"time":1790408018134,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6PDK66S783WHQ51ASV","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018135,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6PDK66S783WHQ51ASV","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018135,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6PDK66S783WHQ51ASV","res":{"statusCode":401},"responseTime":0.9012949999996636,"msg":"request completed"}
{"level":30,"time":1790408018136,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6R8EVAMEACB5RG5PMT","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018137,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6R8EVAMEACB5RG5PMT","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018137,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6R8EVAMEACB5RG5PMT","res":{"statusCode":401},"responseTime":0.97691500000019,"msg":"request completed"}
{"level":30,"time":1790408018137,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6S4NWEJWJSHW2QW0H1","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018138,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6S4NWEJWJSHW2QW0H1","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018139,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6S4NWEJWJSHW2QW0H1","res":{"statusCode":401},"responseTime":1.0356249999999818,"msg":"request completed"}
{"level":30,"time":1790408018139,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6V5MVSWERJFSE4H8S1","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018140,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6V5MVSWERJFSE4H8S1","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018140,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6V5MVSWERJFSE4H8S1","res":{"statusCode":401},"responseTime":0.9596630000000914,"msg":"request completed"}
{"level":30,"time":1790408018141,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6X3SS6P42S0J20JY43","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018142,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6X3SS6P42S0J20JY43","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018142,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6X3SS6P42S0J20JY43","res":{"statusCode":401},"responseTime":0.8438820000001215,"msg":"request completed"}
{"level":30,"time":1790408018143,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6ZGJ3J8AZ6CADNGANJ","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018144,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6ZGJ3J8AZ6CADNGANJ","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018144,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J6ZGJ3J8AZ6CADNGANJ","res":{"statusCode":401},"responseTime":1.0216669999999795,"msg":"request completed"}
{"level":30,"time":1790408018145,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J70HW4EQGVGGWZBSN09","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018146,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J70HW4EQGVGGWZBSN09","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018146,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J70HW4EQGVGGWZBSN09","res":{"statusCode":401},"responseTime":1.648689000000104,"msg":"request completed"}
{"level":30,"time":1790408018147,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J73XM8Q0YNRJ914G8W1","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018148,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J73XM8Q0YNRJ914G8W1","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018148,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J73XM8Q0YNRJ914G8W1","res":{"statusCode":401},"responseTime":0.967511000000286,"msg":"request completed"}
{"level":30,"time":1790408018149,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J74SQB99XZJCVDXJNMT","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34810},"msg":"incoming request"}
{"level":30,"time":1790408018149,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J74SQB99XZJCVDXJNMT","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018149,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J74SQB99XZJCVDXJNMT","res":{"statusCode":401},"responseTime":0.8698090000002594,"msg":"request completed"}
{"level":30,"time":1790408018150,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J76XMMPD5PD7AKCYR2N","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:36299","remoteAddress":"127.0.0.1","remotePort":34822},"msg":"incoming request"}
{"level":30,"time":1790408018151,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J76XMMPD5PD7AKCYR2N","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:253:23)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408018151,"pid":1688859,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J76XMMPD5PD7AKCYR2N","res":{"statusCode":401},"responseTime":1.0111910000000535,"msg":"request completed"}

View file

@ -0,0 +1,279 @@
{"level":30,"time":1790408013912,"pid":1688811,"hostname":"grok-bot-vm-420973429","msg":"Server listening at http://127.0.0.1:35389"}
{"level":30,"time":1790408013941,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4E3M5MJKAGV50FFXN9SZ","req":{"method":"GET","url":"/api/v1/staff/ready","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41352},"msg":"incoming request"}
{"level":30,"time":1790408013957,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4E3M5MJKAGV50FFXN9SZ","res":{"statusCode":200},"responseTime":16.484744000000035,"msg":"request completed"}
{"level":30,"time":1790408015166,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4F9X4201XC0AAD6DNBP5","req":{"method":"POST","url":"/api/v1/staff/employees","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":50,"time":1790408015172,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4F9X4201XC0AAD6DNBP5","req":{"method":"POST","url":"/api/v1/staff/employees","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"inconsistent types deduced for parameter $2","stack":"error: inconsistent types deduced for parameter $2\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async <anonymous> (/workspace/krona-staff/src/portal.ts:465:25)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:461:24)","length":155,"name":"error","severity":"ERROR","code":"42P08","detail":"text versus character varying","position":"150","file":"parse_param.c","line":"219","routine":"variable_coerce_param_hook"},"msg":"inconsistent types deduced for parameter $2"}
{"level":30,"time":1790408015177,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4F9X4201XC0AAD6DNBP5","res":{"statusCode":500},"responseTime":11.21852100000001,"msg":"request completed"}
{"level":30,"time":1790408015188,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FAMNJX2833KF1T4TTXN","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408015205,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FAMNJX2833KF1T4TTXN","res":{"statusCode":202},"responseTime":17.02252499999986,"msg":"request completed"}
{"level":30,"time":1790408015223,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FBQJSK6DGCRM59J8R5P","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408015232,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FBQJSK6DGCRM59J8R5P","res":{"statusCode":202},"responseTime":9.666789000000108,"msg":"request completed"}
{"level":30,"time":1790408015242,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FCAV488NV3PYX6F3FJA","req":{"method":"GET","url":"/api/v1/staff/pay-rules","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408015247,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FCAV488NV3PYX6F3FJA","res":{"statusCode":200},"responseTime":4.858270000000175,"msg":"request completed"}
{"level":30,"time":1790408015249,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FCGJF6Z76CTR188VGCN","req":{"method":"PUT","url":"/api/v1/staff/employees/01M3EA4FBZ4PJA3W2WDRQSRQSA/pay-assignment","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408015257,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FCGJF6Z76CTR188VGCN","res":{"statusCode":200},"responseTime":8.3228059999999,"msg":"request completed"}
{"level":30,"time":1790408015259,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FCVQ0FHFZTP5RX5VGFS","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408015262,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FCVQ0FHFZTP5RX5VGFS","res":{"statusCode":201},"responseTime":3.2303699999999935,"msg":"request completed"}
{"level":30,"time":1790408015264,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FCZJ2ZQZ454GQVQ000V","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408015272,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FCZJ2ZQZ454GQVQ000V","res":{"statusCode":201},"responseTime":8.185108000000128,"msg":"request completed"}
{"level":30,"time":1790408015273,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FD9GB296ZS3YK71ZE6D","req":{"method":"POST","url":"/api/v1/staff/work-sessions/reconcile","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408015279,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FD9GB296ZS3YK71ZE6D","res":{"statusCode":200},"responseTime":6.122667999999976,"msg":"request completed"}
{"level":30,"time":1790408015289,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FDSCE1FXX9KMABVM5TM","req":{"method":"PATCH","url":"/api/v1/staff/work-sessions/01M3EA4FDDGG7NT2PNT26E1QKB","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":50,"time":1790408015293,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FDSCE1FXX9KMABVM5TM","req":{"method":"PATCH","url":"/api/v1/staff/work-sessions/01M3EA4FDDGG7NT2PNT26E1QKB","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async <anonymous> (/workspace/krona-staff/src/portal.ts:1145:13)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:1053:23)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":30,"time":1790408015294,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FDSCE1FXX9KMABVM5TM","res":{"statusCode":500},"responseTime":4.745336999999836,"msg":"request completed"}
{"level":30,"time":1790408015297,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FE18FJJN9394Y3N6BJ5","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408015304,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FE18FJJN9394Y3N6BJ5","res":{"statusCode":202},"responseTime":6.942637999999988,"msg":"request completed"}
{"level":30,"time":1790408015313,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FEH4RF0G7FDCFWZYRG2","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408015320,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FEH4RF0G7FDCFWZYRG2","res":{"statusCode":202},"responseTime":6.775562000000036,"msg":"request completed"}
{"level":30,"time":1790408015329,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FF1VZ350VV5QWXTG0CR","req":{"method":"GET","url":"/api/v1/staff/pay-rules","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408015333,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FF1VZ350VV5QWXTG0CR","res":{"statusCode":200},"responseTime":3.717247000000043,"msg":"request completed"}
{"level":30,"time":1790408015334,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FF6VREYSW25ACQZKRG3","req":{"method":"PUT","url":"/api/v1/staff/employees/01M3EA4FEQWG7KW934X22C56ZR/pay-assignment","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408015340,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FF6VREYSW25ACQZKRG3","res":{"statusCode":200},"responseTime":6.012408999999934,"msg":"request completed"}
{"level":30,"time":1790408015341,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FFDF0DKJ2W7ZPPDR4DV","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408015344,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FFDF0DKJ2W7ZPPDR4DV","res":{"statusCode":201},"responseTime":2.4532470000001467,"msg":"request completed"}
{"level":30,"time":1790408015345,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FFHKWR6VMNF2WQKGBWZ","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408015346,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FFHKWR6VMNF2WQKGBWZ","res":{"statusCode":201},"responseTime":1.5671030000000883,"msg":"request completed"}
{"level":30,"time":1790408015347,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FFKMGVXC8YMD6PFV6W2","req":{"method":"POST","url":"/api/v1/staff/work-sessions/reconcile","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408015350,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FFKMGVXC8YMD6PFV6W2","res":{"statusCode":200},"responseTime":3.180074999999988,"msg":"request completed"}
{"level":30,"time":1790408015358,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FFYESE8NJFN70MAFRPV","req":{"method":"PATCH","url":"/api/v1/staff/work-sessions/01M3EA4FFN6TXZWFAV7AD8W931","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":50,"time":1790408015361,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FFYESE8NJFN70MAFRPV","req":{"method":"PATCH","url":"/api/v1/staff/work-sessions/01M3EA4FFN6TXZWFAV7AD8W931","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint","stack":"error: null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async <anonymous> (/workspace/krona-staff/src/portal.ts:1145:13)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:1053:23)","length":188,"name":"error","severity":"ERROR","code":"23502","schema":"public","table":"staff_outbox","column":"occurred_at","file":"execMain.c","line":"2022","routine":"ExecConstraints"},"msg":"null value in column \"occurred_at\" of relation \"staff_outbox\" violates not-null constraint"}
{"level":30,"time":1790408015361,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FFYESE8NJFN70MAFRPV","res":{"statusCode":500},"responseTime":2.768146999999999,"msg":"request completed"}
{"level":30,"time":1790408015363,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FG37GZKF5QXE421K1NS","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408015374,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FG37GZKF5QXE421K1NS","res":{"statusCode":202},"responseTime":10.611540999999988,"msg":"request completed"}
{"level":30,"time":1790408015383,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FGQ28S5QBWAQDRD3ENC","req":{"method":"POST","url":"/api/v1/staff/employees/01M3EA4FGC5Y20677SW81GPFB2/access-token","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408015387,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FGQ28S5QBWAQDRD3ENC","res":{"statusCode":200},"responseTime":4.416566000000103,"msg":"request completed"}
{"level":30,"time":1790408015392,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FH06VNHJY4EBW5EE2XX","req":{"method":"POST","url":"/api/v1/staff/push/subscriptions","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408015397,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FH06VNHJY4EBW5EE2XX","res":{"statusCode":201},"responseTime":4.635773999999856,"msg":"request completed"}
{"level":30,"time":1790408015398,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FH57Y74WHQVGP02939Q","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408015401,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4FH57Y74WHQVGP02939Q","res":{"statusCode":201},"responseTime":2.8056480000000192,"msg":"request completed"}
{"level":30,"time":1790408017908,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4HZMM5H00GW47QM8H57P","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408017915,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4HZMM5H00GW47QM8H57P","res":{"statusCode":202},"responseTime":6.821124000000054,"msg":"request completed"}
{"level":30,"time":1790408017927,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J070MWKRVC3R9SEXHZZ","req":{"method":"POST","url":"/api/v1/staff/employees/01M3EA4HZSY982GYTPDAVP0Z0Q/access-token","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408017932,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J070MWKRVC3R9SEXHZZ","res":{"statusCode":200},"responseTime":4.815638999999464,"msg":"request completed"}
{"level":30,"time":1790408017933,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J0D6X5ZRVMAHE2KHFP0","req":{"method":"POST","url":"/api/v1/staff/employees/01M3EA4HZTSZ12MKP3SV134FKS/access-token","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408017935,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J0D6X5ZRVMAHE2KHFP0","res":{"statusCode":200},"responseTime":2.3987600000000384,"msg":"request completed"}
{"level":30,"time":1790408017936,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J0GAPK6MYZKS6CEP69P","req":{"method":"POST","url":"/api/v1/staff/push/subscriptions","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408017938,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J0GAPK6MYZKS6CEP69P","res":{"statusCode":201},"responseTime":1.9624579999999696,"msg":"request completed"}
{"level":30,"time":1790408017939,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J0K1RMKPTCT5QNAGV7A","req":{"method":"POST","url":"/api/v1/staff/push/subscriptions","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408017941,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J0K1RMKPTCT5QNAGV7A","res":{"statusCode":201},"responseTime":2.340323000000353,"msg":"request completed"}
{"level":30,"time":1790408017952,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J10VK1XV0ZMVF812CYW","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408017958,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J10VK1XV0ZMVF812CYW","res":{"statusCode":202},"responseTime":5.686529999999948,"msg":"request completed"}
{"level":30,"time":1790408017965,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J1DG7KEQN92H5D256PE","req":{"method":"GET","url":"/api/v1/staff/pay-rules","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408017970,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J1DG7KEQN92H5D256PE","res":{"statusCode":200},"responseTime":4.494719000000259,"msg":"request completed"}
{"level":30,"time":1790408017971,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J1KMHYPJ01JH6Z2WEQK","req":{"method":"PUT","url":"/api/v1/staff/employees/01M3EA4J151B1H9D5AKAR29AN9/pay-assignment","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408017976,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J1KMHYPJ01JH6Z2WEQK","res":{"statusCode":200},"responseTime":5.194629999999961,"msg":"request completed"}
{"level":30,"time":1790408017977,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J1S0SNJZ8H7X0K9F7T1","req":{"method":"PUT","url":"/api/v1/staff/employees/01M3EA4J151B1H9D5AKAR29AN9/pay-assignment","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408017981,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J1S0SNJZ8H7X0K9F7T1","res":{"statusCode":200},"responseTime":4.459873999999218,"msg":"request completed"}
{"level":30,"time":1790408017983,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J1ZDTDW66WF28KDYB4W","req":{"method":"GET","url":"/api/v1/staff/professions","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408017984,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J1ZDTDW66WF28KDYB4W","res":{"statusCode":200},"responseTime":1.0135330000002796,"msg":"request completed"}
{"level":30,"time":1790408017985,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J208WKMDXHJERS4H6MT","req":{"method":"GET","url":"/api/v1/staff/org-units","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408017986,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J208WKMDXHJERS4H6MT","res":{"statusCode":200},"responseTime":1.3112160000000586,"msg":"request completed"}
{"level":30,"time":1790408018007,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2Q3T2JSPF95TG96N6P","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408018008,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2Q3T2JSPF95TG96N6P","res":{"statusCode":200},"responseTime":0.6348109999998996,"msg":"request completed"}
{"level":30,"time":1790408018009,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2SK303DG80T5VC5DDC","req":{"method":"DELETE","url":"/api/v1/staff/session","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408018009,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2SK303DG80T5VC5DDC","res":{"statusCode":204},"responseTime":0.33697699999993347,"msg":"request completed"}
{"level":30,"time":1790408018010,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2S1XNED469T2N44WFY","req":{"method":"GET","url":"/api/v1/staff/portal","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408018013,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2S1XNED469T2N44WFY","res":{"statusCode":200},"responseTime":3.6036009999997987,"msg":"request completed"}
{"level":30,"time":1790408018015,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2Z7TW54HTHRM9B7PFS","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408018016,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J2Z7TW54HTHRM9B7PFS","res":{"statusCode":200},"responseTime":0.40848600000026636,"msg":"request completed"}
{"level":30,"time":1790408018017,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J31AWQFE866QK3R19T8","req":{"method":"POST","url":"/api/v1/staff/professions","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408018019,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J31AWQFE866QK3R19T8","res":{"statusCode":201},"responseTime":2.3794800000005125,"msg":"request completed"}
{"level":30,"time":1790408018021,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J35B5NNN9AVW7EH7XVR","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408018027,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J35B5NNN9AVW7EH7XVR","res":{"statusCode":202},"responseTime":6.364180999999917,"msg":"request completed"}
{"level":30,"time":1790408018037,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J3NFJ32S6B487DGQF3F","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408018040,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J3NFJ32S6B487DGQF3F","res":{"statusCode":201},"responseTime":3.285291999999572,"msg":"request completed"}
{"level":30,"time":1790408018041,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J3S918GM99F9BXZKYHD","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41370},"msg":"incoming request"}
{"level":30,"time":1790408018051,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J3S918GM99F9BXZKYHD","res":{"statusCode":201},"responseTime":9.325840999999855,"msg":"request completed"}
{"level":30,"time":1790408018052,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J44HBZG5R6A7238SHNC","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":30,"time":1790408018059,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J44HBZG5R6A7238SHNC","res":{"statusCode":202},"responseTime":6.6378679999997985,"msg":"request completed"}
{"level":30,"time":1790408018068,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J4MJ6D7YHY7NJP8XW6B","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"msg":"incoming request"}
{"level":50,"time":1790408018073,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J4MJ6D7YHY7NJP8XW6B","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":41366},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"new row for relation \"staff_payroll_ledger\" violates check constraint \"staff_payroll_ledger_kind_check\"","stack":"error: new row for relation \"staff_payroll_ledger\" violates check constraint \"staff_payroll_ledger_kind_check\"\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async <anonymous> (/workspace/krona-staff/src/operations.ts:1033:13)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/operations.ts:813:22)","length":229,"name":"error","severity":"ERROR","code":"23514","schema":"public","table":"staff_payroll_ledger","constraint":"staff_payroll_ledger_kind_check","file":"execMain.c","line":"2074","routine":"ExecConstraints"},"msg":"new row for relation \"staff_payroll_ledger\" violates check constraint \"staff_payroll_ledger_kind_check\""}
{"level":30,"time":1790408018076,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4J4MJ6D7YHY7NJP8XW6B","res":{"statusCode":500},"responseTime":7.259319999999207,"msg":"request completed"}
{"level":30,"time":1790408018281,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JB912NAAC419Y02QPGD","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018289,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JB912NAAC419Y02QPGD","res":{"statusCode":202},"responseTime":7.542034999999487,"msg":"request completed"}
{"level":30,"time":1790408018310,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JC6JJ5PE5S4M8MJAPYQ","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018323,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JC6JJ5PE5S4M8MJAPYQ","res":{"statusCode":202},"responseTime":12.457030999999915,"msg":"request completed"}
{"level":30,"time":1790408018333,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JCXCHJFD211C4GCEFKB","req":{"method":"GET","url":"/api/v1/staff/pay-rules","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018338,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JCXCHJFD211C4GCEFKB","res":{"statusCode":200},"responseTime":4.526701000000685,"msg":"request completed"}
{"level":30,"time":1790408018340,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JD4NWCFKZRS9ENNQ1RR","req":{"method":"PUT","url":"/api/v1/staff/employees/01M3EA4JCJZDWYMA296ZFPY4DF/pay-assignment","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35782},"msg":"incoming request"}
{"level":30,"time":1790408018346,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JD4NWCFKZRS9ENNQ1RR","res":{"statusCode":200},"responseTime":5.515754999999444,"msg":"request completed"}
{"level":30,"time":1790408018348,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JDC28B95P2KDW019QM5","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018350,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JDC28B95P2KDW019QM5","res":{"statusCode":201},"responseTime":1.652274000000034,"msg":"request completed"}
{"level":30,"time":1790408018351,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JDFHP41V6MX75HC8BA2","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35782},"msg":"incoming request"}
{"level":30,"time":1790408018353,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JDFHP41V6MX75HC8BA2","res":{"statusCode":201},"responseTime":1.7120279999999184,"msg":"request completed"}
{"level":30,"time":1790408018354,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JDJP8QC0RWYNJG3BAWE","req":{"method":"POST","url":"/api/v1/staff/work-sessions/reconcile","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018357,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JDJP8QC0RWYNJG3BAWE","res":{"statusCode":200},"responseTime":3.009777999999642,"msg":"request completed"}
{"level":30,"time":1790408018366,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JDY7YVS8NFMK6B159M9","req":{"method":"POST","url":"/api/v1/staff/access-grants","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018367,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JDY7YVS8NFMK6B159M9","msg":"Route POST:/api/v1/staff/access-grants not found"}
{"level":30,"time":1790408018367,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JDY7YVS8NFMK6B159M9","res":{"statusCode":404},"responseTime":0.45273399999950925,"msg":"request completed"}
{"level":30,"time":1790408018373,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JE5C72SJMQT011VRYK0","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35782},"msg":"incoming request"}
{"level":30,"time":1790408018380,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JE5C72SJMQT011VRYK0","res":{"statusCode":202},"responseTime":6.309143000000404,"msg":"request completed"}
{"level":30,"time":1790408018391,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JEQ53Q7Q75D8JNWM330","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018395,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JEQ53Q7Q75D8JNWM330","res":{"statusCode":202},"responseTime":4.627241999999569,"msg":"request completed"}
{"level":30,"time":1790408018403,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JF35G4F1KTESX0J64QY","req":{"method":"GET","url":"/api/v1/staff/pay-rules","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018406,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JF35G4F1KTESX0J64QY","res":{"statusCode":200},"responseTime":2.5201289999995424,"msg":"request completed"}
{"level":30,"time":1790408018407,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JF75GCM7BPRQ93RQXGY","req":{"method":"PUT","url":"/api/v1/staff/employees/01M3EA4JETWGVJMHFN7Q38N6ZH/pay-assignment","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35782},"msg":"incoming request"}
{"level":30,"time":1790408018410,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JF75GCM7BPRQ93RQXGY","res":{"statusCode":200},"responseTime":3.6298900000001595,"msg":"request completed"}
{"level":30,"time":1790408018412,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JFB7RG1HJWMFPP628P1","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018413,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JFB7RG1HJWMFPP628P1","res":{"statusCode":201},"responseTime":1.662560000000667,"msg":"request completed"}
{"level":30,"time":1790408018414,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JFEEZ33FSBQR5V8S3XG","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35782},"msg":"incoming request"}
{"level":30,"time":1790408018422,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JFEEZ33FSBQR5V8S3XG","res":{"statusCode":201},"responseTime":7.868167999999969,"msg":"request completed"}
{"level":30,"time":1790408018423,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JFQ185WPASH3T84B2KY","req":{"method":"POST","url":"/api/v1/staff/work-sessions/reconcile","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018427,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JFQ185WPASH3T84B2KY","res":{"statusCode":200},"responseTime":3.232307000000219,"msg":"request completed"}
{"level":30,"time":1790408018435,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG3C73K6MDYG5QKZBX4","req":{"method":"POST","url":"/api/v1/staff/access-grants","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018435,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG3C73K6MDYG5QKZBX4","msg":"Route POST:/api/v1/staff/access-grants not found"}
{"level":30,"time":1790408018435,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG3C73K6MDYG5QKZBX4","res":{"statusCode":404},"responseTime":0.33230400000047666,"msg":"request completed"}
{"level":30,"time":1790408018437,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG57J9AN9YWDETCP3FJ","req":{"method":"POST","url":"/api/v1/staff/access-grants","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35782},"msg":"incoming request"}
{"level":30,"time":1790408018437,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG57J9AN9YWDETCP3FJ","msg":"Route POST:/api/v1/staff/access-grants not found"}
{"level":30,"time":1790408018437,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG57J9AN9YWDETCP3FJ","res":{"statusCode":404},"responseTime":0.2454699999998411,"msg":"request completed"}
{"level":30,"time":1790408018438,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG6X163QEGB6N85AM9P","req":{"method":"POST","url":"/api/v1/staff/access-grants","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018439,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG6X163QEGB6N85AM9P","msg":"Route POST:/api/v1/staff/access-grants not found"}
{"level":30,"time":1790408018439,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG6X163QEGB6N85AM9P","res":{"statusCode":404},"responseTime":0.2565549999999348,"msg":"request completed"}
{"level":30,"time":1790408018440,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG8B5RZ5V4K0GB12G8X","req":{"method":"POST","url":"/api/v1/staff/access-grants","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35782},"msg":"incoming request"}
{"level":30,"time":1790408018441,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG8B5RZ5V4K0GB12G8X","msg":"Route POST:/api/v1/staff/access-grants not found"}
{"level":30,"time":1790408018441,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JG8B5RZ5V4K0GB12G8X","res":{"statusCode":404},"responseTime":0.28928499999983615,"msg":"request completed"}
{"level":30,"time":1790408018442,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGAE9ZP2T630SJGVMDD","req":{"method":"POST","url":"/api/v1/staff/access-grants","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018442,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGAE9ZP2T630SJGVMDD","msg":"Route POST:/api/v1/staff/access-grants not found"}
{"level":30,"time":1790408018443,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGAE9ZP2T630SJGVMDD","res":{"statusCode":404},"responseTime":0.2572410000002492,"msg":"request completed"}
{"level":30,"time":1790408018444,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGCQ53FE88AQGRDBRZG","req":{"method":"POST","url":"/api/v1/staff/access-grants","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35782},"msg":"incoming request"}
{"level":30,"time":1790408018444,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGCQ53FE88AQGRDBRZG","msg":"Route POST:/api/v1/staff/access-grants not found"}
{"level":30,"time":1790408018444,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGCQ53FE88AQGRDBRZG","res":{"statusCode":404},"responseTime":0.2509200000004057,"msg":"request completed"}
{"level":30,"time":1790408018445,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGDK389KPYPC2PXWXYA","req":{"method":"POST","url":"/api/v1/staff/access-grants","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018446,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGDK389KPYPC2PXWXYA","msg":"Route POST:/api/v1/staff/access-grants not found"}
{"level":30,"time":1790408018446,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGDK389KPYPC2PXWXYA","res":{"statusCode":404},"responseTime":0.2959399999999732,"msg":"request completed"}
{"level":30,"time":1790408018448,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGGYYTDWN5DQXM5JY5P","req":{"method":"POST","url":"/api/v1/staff/access-grants","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35782},"msg":"incoming request"}
{"level":30,"time":1790408018448,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGGYYTDWN5DQXM5JY5P","msg":"Route POST:/api/v1/staff/access-grants not found"}
{"level":30,"time":1790408018448,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGGYYTDWN5DQXM5JY5P","res":{"statusCode":404},"responseTime":0.39974900000015623,"msg":"request completed"}
{"level":30,"time":1790408018450,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGJS6D7CH512HB9HZTM","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018455,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGJS6D7CH512HB9HZTM","res":{"statusCode":202},"responseTime":4.826310999999805,"msg":"request completed"}
{"level":30,"time":1790408018463,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGZ01CBTK1YMAHJRB18","req":{"method":"GET","url":"/api/v1/staff/terminal/employees/01M3EA4JGPPB7M0G78QQBQBJ1M/enrollment","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018463,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGZ01CBTK1YMAHJRB18","msg":"Route GET:/api/v1/staff/terminal/employees/01M3EA4JGPPB7M0G78QQBQBJ1M/enrollment not found"}
{"level":30,"time":1790408018463,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JGZ01CBTK1YMAHJRB18","res":{"statusCode":404},"responseTime":0.3378870000005918,"msg":"request completed"}
{"level":30,"time":1790408018465,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JH1A0MMMC9Y5FHG5JR3","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35782},"msg":"incoming request"}
{"level":30,"time":1790408018470,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JH1A0MMMC9Y5FHG5JR3","res":{"statusCode":202},"responseTime":5.273951000000125,"msg":"request completed"}
{"level":30,"time":1790408018478,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JHE1Z7JVRT7FTV70AXY","req":{"method":"PUT","url":"/api/v1/staff/employees/01M3EA4JH57XZ361XBC2Z7SA6J/biometric-consent","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35778},"msg":"incoming request"}
{"level":30,"time":1790408018478,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JHE1Z7JVRT7FTV70AXY","msg":"Route PUT:/api/v1/staff/employees/01M3EA4JH57XZ361XBC2Z7SA6J/biometric-consent not found"}
{"level":30,"time":1790408018478,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JHE1Z7JVRT7FTV70AXY","res":{"statusCode":404},"responseTime":0.304058000000623,"msg":"request completed"}
{"level":30,"time":1790408018606,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JNE3G43KVT3QY8K1AEW","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018612,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JNE3G43KVT3QY8K1AEW","res":{"statusCode":202},"responseTime":6.345726999999897,"msg":"request completed"}
{"level":30,"time":1790408018632,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JP8Q2M2Y2BDPFWA68K7","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018637,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JP8Q2M2Y2BDPFWA68K7","res":{"statusCode":202},"responseTime":4.942963999999847,"msg":"request completed"}
{"level":30,"time":1790408018647,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JPQHAWFX6VEZQRJADJ4","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018650,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JPQHAWFX6VEZQRJADJ4","res":{"statusCode":201},"responseTime":2.9649260000005597,"msg":"request completed"}
{"level":30,"time":1790408018654,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JPYKMHN8AV2XRK1ZT9C","req":{"method":"POST","url":"/api/v1/staff/sync/push","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":30,"time":1790408018660,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JPYKMHN8AV2XRK1ZT9C","res":{"statusCode":200},"responseTime":5.449781000000257,"msg":"request completed"}
{"level":30,"time":1790408018675,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JQKCR13BT1AW47A8GYY","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018681,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JQKCR13BT1AW47A8GYY","res":{"statusCode":202},"responseTime":5.823410999999396,"msg":"request completed"}
{"level":30,"time":1790408018690,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JR2M60V60HT7JY4DVYZ","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018691,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JR2M60V60HT7JY4DVYZ","res":{"statusCode":201},"responseTime":1.3205479999996896,"msg":"request completed"}
{"level":30,"time":1790408018693,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JR5F9GRXENA9023DH3Q","req":{"method":"POST","url":"/api/v1/staff/sync/push","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":30,"time":1790408018697,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JR5F9GRXENA9023DH3Q","res":{"statusCode":200},"responseTime":3.8750069999996413,"msg":"request completed"}
{"level":30,"time":1790408018707,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JRKGVB9KFM4GW8JCCRS","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018712,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JRKGVB9KFM4GW8JCCRS","res":{"statusCode":202},"responseTime":4.9716669999997976,"msg":"request completed"}
{"level":30,"time":1790408018722,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JS290GZAPS7A6Z5YFZZ","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018727,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JS290GZAPS7A6Z5YFZZ","res":{"statusCode":202},"responseTime":5.085656000000199,"msg":"request completed"}
{"level":30,"time":1790408018736,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JSG89R09EJQ2CDW87CW","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018738,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JSG89R09EJQ2CDW87CW","res":{"statusCode":201},"responseTime":1.3734510000003866,"msg":"request completed"}
{"level":30,"time":1790408018739,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JSKMK02GDMP23FZ2DZR","req":{"method":"POST","url":"/api/v1/staff/sync/pull","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":50,"time":1790408018743,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JSKMK02GDMP23FZ2DZR","req":{"method":"POST","url":"/api/v1/staff/sync/pull","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"column \"status\" does not exist","stack":"error: column \"status\" does not exist\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async <anonymous> (/workspace/krona-staff/src/domain/sync/service.ts:389:24)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/sync.ts:306:28)","length":106,"name":"error","severity":"ERROR","code":"42703","position":"24","file":"parse_relation.c","line":"3716","routine":"errorMissingColumn"},"msg":"column \"status\" does not exist"}
{"level":30,"time":1790408018744,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JSKMK02GDMP23FZ2DZR","res":{"statusCode":500},"responseTime":4.648181000000477,"msg":"request completed"}
{"level":30,"time":1790408018747,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JSVD8C9S834XPRJQTD2","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018785,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JSVD8C9S834XPRJQTD2","res":{"statusCode":202},"responseTime":37.420500999999604,"msg":"request completed"}
{"level":30,"time":1790408018793,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JV9WNV36C6MKDW979R6","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018796,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JV9WNV36C6MKDW979R6","res":{"statusCode":201},"responseTime":2.075665000000299,"msg":"request completed"}
{"level":30,"time":1790408018797,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JVDPWZPXAZ8HFFNX7AB","req":{"method":"POST","url":"/api/v1/staff/sync/pull","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":50,"time":1790408018799,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JVDPWZPXAZ8HFFNX7AB","req":{"method":"POST","url":"/api/v1/staff/sync/pull","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"column \"status\" does not exist","stack":"error: column \"status\" does not exist\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async <anonymous> (/workspace/krona-staff/src/domain/sync/service.ts:389:24)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/sync.ts:306:28)","length":106,"name":"error","severity":"ERROR","code":"42703","position":"24","file":"parse_relation.c","line":"3716","routine":"errorMissingColumn"},"msg":"column \"status\" does not exist"}
{"level":30,"time":1790408018799,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JVDPWZPXAZ8HFFNX7AB","res":{"statusCode":500},"responseTime":2.661884999999529,"msg":"request completed"}
{"level":30,"time":1790408018801,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JVHZF6TQCPQ6PWDKPCP","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018813,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JVHZF6TQCPQ6PWDKPCP","res":{"statusCode":201},"responseTime":12.522825000000012,"msg":"request completed"}
{"level":30,"time":1790408018814,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JVYMVC1M9CPBB2A3R39","req":{"method":"GET","url":"/api/v1/staff/sync/status","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":30,"time":1790408018817,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JVYMVC1M9CPBB2A3R39","res":{"statusCode":200},"responseTime":2.794176000000334,"msg":"request completed"}
{"level":30,"time":1790408018818,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JW2EXB5S1H9YVT9GK45","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018823,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JW2EXB5S1H9YVT9GK45","res":{"statusCode":202},"responseTime":4.881444999999985,"msg":"request completed"}
{"level":30,"time":1790408018834,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JWJVPG8V84QAPCEE014","req":{"method":"PATCH","url":"/api/v1/staff/employees/01M3EA4JW60F9X6AEXP33M4MDQ","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018836,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JWJVPG8V84QAPCEE014","res":{"statusCode":200},"responseTime":2.368786999999429,"msg":"request completed"}
{"level":30,"time":1790408018837,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JWNGP1EJHDT3VJRAMN4","req":{"method":"POST","url":"/api/v1/staff/sync/pull","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":30,"time":1790408018840,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JWNGP1EJHDT3VJRAMN4","res":{"statusCode":200},"responseTime":2.5322159999996074,"msg":"request completed"}
{"level":30,"time":1790408018842,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JWTMTYJ05Y0GV6PQS6B","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018846,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JWTMTYJ05Y0GV6PQS6B","res":{"statusCode":202},"responseTime":4.6687080000001515,"msg":"request completed"}
{"level":30,"time":1790408018853,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JX5JMS8NPRX3DHT88ZC","req":{"method":"PATCH","url":"/api/v1/staff/employees/01M3EA4JWYGKJW3S3SQW7QMCF1","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018857,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JX5JMS8NPRX3DHT88ZC","res":{"statusCode":200},"responseTime":3.251942999999301,"msg":"request completed"}
{"level":30,"time":1790408018857,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JX9M65W8D65RMHR6D9Y","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":30,"time":1790408018859,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JX9M65W8D65RMHR6D9Y","res":{"statusCode":201},"responseTime":1.2874750000000859,"msg":"request completed"}
{"level":30,"time":1790408018860,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JXC3004KR4378VKCH5G","req":{"method":"POST","url":"/api/v1/staff/sync/push","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018863,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JXC3004KR4378VKCH5G","res":{"statusCode":200},"responseTime":3.7642430000005334,"msg":"request completed"}
{"level":30,"time":1790408018866,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JXJBJV3807BHBFN5S1J","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":30,"time":1790408018871,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JXJBJV3807BHBFN5S1J","res":{"statusCode":202},"responseTime":5.396490000000085,"msg":"request completed"}
{"level":30,"time":1790408018879,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JXZX0ABKYVBY9ZTNTH9","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018885,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JXZX0ABKYVBY9ZTNTH9","res":{"statusCode":202},"responseTime":5.91953199999989,"msg":"request completed"}
{"level":30,"time":1790408018893,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JYDQA2MT149ZXET8XDC","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018895,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JYDQA2MT149ZXET8XDC","res":{"statusCode":201},"responseTime":1.6295439999994414,"msg":"request completed"}
{"level":30,"time":1790408018896,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JYGEHZECWTJNPV5CJVK","req":{"method":"POST","url":"/api/v1/staff/sync/push","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":30,"time":1790408018899,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JYGEHZECWTJNPV5CJVK","res":{"statusCode":200},"responseTime":3.3800209999999424,"msg":"request completed"}
{"level":30,"time":1790408018908,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JYWF1Z6Y8YFD24BMCNK","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018913,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JYWF1Z6Y8YFD24BMCNK","res":{"statusCode":202},"responseTime":4.775786000000153,"msg":"request completed"}
{"level":30,"time":1790408018920,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JZ8P6JQC0MCXERDQG8A","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018922,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JZ8P6JQC0MCXERDQG8A","res":{"statusCode":201},"responseTime":1.5908949999993638,"msg":"request completed"}
{"level":30,"time":1790408018923,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JZBFX4VJZTS4YKEPZRK","req":{"method":"POST","url":"/api/v1/staff/sync/push","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":50,"time":1790408018926,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JZBFX4VJZTS4YKEPZRK","req":{"method":"POST","url":"/api/v1/staff/sync/push","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"res":{"statusCode":500},"err":{"type":"DatabaseError","message":"invalid input syntax for type timestamp with time zone: \"e2e-not-a-timestamp\"","stack":"error: invalid input syntax for type timestamp with time zone: \"e2e-not-a-timestamp\"\n at /workspace/krona-staff/node_modules/pg/lib/client.js:694:17\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async SyncService.executeCommand (/workspace/krona-staff/src/domain/sync/service.ts:755:9)\n at async <anonymous> (/workspace/krona-staff/src/domain/sync/service.ts:701:33)\n at async Database.tenantTransaction (/workspace/krona-staff/src/infrastructure/database.ts:30:22)\n at async Object.<anonymous> (/workspace/krona-staff/src/sync.ts:390:25)","length":180,"name":"error","severity":"ERROR","code":"22007","where":"unnamed portal parameter $6 = '...'","file":"datetime.c","line":"4140","routine":"DateTimeParseError"},"msg":"invalid input syntax for type timestamp with time zone: \"e2e-not-a-timestamp\""}
{"level":30,"time":1790408018927,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JZBFX4VJZTS4YKEPZRK","res":{"statusCode":500},"responseTime":3.56025099999988,"msg":"request completed"}
{"level":30,"time":1790408018929,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JZHQDMJQN1239C4STY6","req":{"method":"POST","url":"/api/v1/staff/session","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018929,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JZHQDMJQN1239C4STY6","res":{"statusCode":200},"responseTime":0.275908999999956,"msg":"request completed"}
{"level":30,"time":1790408018931,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JZKAZRYGPJS1C4JH86J","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":30,"time":1790408018936,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4JZKAZRYGPJS1C4JH86J","res":{"statusCode":201},"responseTime":5.502994999999828,"msg":"request completed"}
{"level":30,"time":1790408018944,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K00QZ7RA4HCX365PH9C","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018952,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K00QZ7RA4HCX365PH9C","res":{"statusCode":202},"responseTime":7.422302000000855,"msg":"request completed"}
{"level":30,"time":1790408018960,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K0GZZ935P4K7N775AKH","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018961,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K0GZZ935P4K7N775AKH","res":{"statusCode":201},"responseTime":1.3733540000002904,"msg":"request completed"}
{"level":30,"time":1790408018962,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K0J9ZACFMJQKXWB42BF","req":{"method":"POST","url":"/api/v1/staff/sync/push","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":30,"time":1790408018966,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K0J9ZACFMJQKXWB42BF","res":{"statusCode":200},"responseTime":4.033708999999362,"msg":"request completed"}
{"level":30,"time":1790408018968,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K0R231R31H7Y82XKEFW","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018969,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K0R231R31H7Y82XKEFW","res":{"statusCode":201},"responseTime":1.091668000000027,"msg":"request completed"}
{"level":30,"time":1790408018971,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K0VXYZRT371QPNE7KZA","req":{"method":"POST","url":"/api/v1/staff/sync/ack","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":30,"time":1790408018973,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K0VXYZRT371QPNE7KZA","res":{"statusCode":200},"responseTime":2.2560160000002725,"msg":"request completed"}
{"level":30,"time":1790408018975,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K0ZTN3QWGTMYH903DYA","req":{"method":"POST","url":"/api/v1/staff/sync/devices","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018976,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K0ZTN3QWGTMYH903DYA","res":{"statusCode":201},"responseTime":1.3257619999994859,"msg":"request completed"}
{"level":30,"time":1790408018977,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K111C5QFY8DC05HAMNK","req":{"method":"POST","url":"/api/v1/staff/sync/devices/01M3EA4K0ZYSXA5WW5PZG2TNS5/revoke","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35806},"msg":"incoming request"}
{"level":30,"time":1790408018980,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K111C5QFY8DC05HAMNK","res":{"statusCode":200},"responseTime":2.1610540000001492,"msg":"request completed"}
{"level":30,"time":1790408018981,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K15V20PHSJGB9EQP4WN","req":{"method":"GET","url":"/api/v1/staff/sync/status","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35792},"msg":"incoming request"}
{"level":30,"time":1790408018982,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K15V20PHSJGB9EQP4WN","res":{"statusCode":403},"err":{"type":"ForbiddenError","message":"Устройство отозвано","stack":"ForbiddenError: Устройство отозвано\n at Object.forbidden (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:33:12)\n at handleSyncError (/workspace/krona-staff/src/sync.ts:443:39)\n at Object.<anonymous> (/workspace/krona-staff/src/sync.ts:249:9)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)","status":403,"statusCode":403,"expose":true},"msg":"Устройство отозвано"}
{"level":30,"time":1790408018982,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K15V20PHSJGB9EQP4WN","res":{"statusCode":403},"responseTime":1.4805010000000038,"msg":"request completed"}
{"level":30,"time":1790408019100,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K4VD2Y9VX05D0YVHRPQ","req":{"method":"GET","url":"/api/v1/staff/live","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35820},"msg":"incoming request"}
{"level":30,"time":1790408019100,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K4VD2Y9VX05D0YVHRPQ","res":{"statusCode":200},"responseTime":0.3551319999996849,"msg":"request completed"}
{"level":30,"time":1790408019106,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K52MQKWRNJHJ052QT1C","req":{"method":"GET","url":"/api/v1/staff/ready","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35824},"msg":"incoming request"}
{"level":30,"time":1790408019113,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K52MQKWRNJHJ052QT1C","res":{"statusCode":200},"responseTime":7.321270999999797,"msg":"request completed"}
{"level":30,"time":1790408019144,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K68VG1ZD7J17S2G4TZV","req":{"method":"GET","url":"/api/v1/staff/portal","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35820},"msg":"incoming request"}
{"level":30,"time":1790408019145,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K68VG1ZD7J17S2G4TZV","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:280:21)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408019145,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K68VG1ZD7J17S2G4TZV","res":{"statusCode":401},"responseTime":0.6766259999994872,"msg":"request completed"}
{"level":30,"time":1790408019147,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K6BA91KQ3B0K2DV1R8Z","req":{"method":"GET","url":"/api/v1/staff/portal","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35824},"msg":"incoming request"}
{"level":30,"time":1790408019149,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K6BA91KQ3B0K2DV1R8Z","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:280:21)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408019149,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K6BA91KQ3B0K2DV1R8Z","res":{"statusCode":401},"responseTime":2.714422000000013,"msg":"request completed"}
{"level":30,"time":1790408019151,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K6FC17V38828NK5AWDH","req":{"method":"GET","url":"/api/v1/staff/portal","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35820},"msg":"incoming request"}
{"level":30,"time":1790408019156,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K6FC17V38828NK5AWDH","res":{"statusCode":200},"responseTime":5.406590999999935,"msg":"request completed"}
{"level":30,"time":1790408019161,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K6SBM3C4B20HGWAFBMZ","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35824},"msg":"incoming request"}
{"level":30,"time":1790408019168,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K6SBM3C4B20HGWAFBMZ","res":{"statusCode":202},"responseTime":7.204690999999912,"msg":"request completed"}
{"level":30,"time":1790408019178,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K7AC5R9N6168RDHC6ZK","req":{"method":"POST","url":"/api/v1/staff/attendance/events","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35820},"msg":"incoming request"}
{"level":30,"time":1790408019181,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K7AC5R9N6168RDHC6ZK","res":{"statusCode":201},"responseTime":2.922958000000108,"msg":"request completed"}
{"level":30,"time":1790408019183,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K7FA1GFE2QZ11B20ZRS","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35824},"msg":"incoming request"}
{"level":30,"time":1790408019189,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K7FA1GFE2QZ11B20ZRS","res":{"statusCode":202},"responseTime":5.149693999999727,"msg":"request completed"}
{"level":30,"time":1790408019196,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K7WVTQDXRJXTNYDGR89","req":{"method":"POST","url":"/api/v1/staff/employees/01M3EA4K7MJGQJ2T2YKG46NF7B/access-token","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35820},"msg":"incoming request"}
{"level":30,"time":1790408019199,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K7WVTQDXRJXTNYDGR89","res":{"statusCode":200},"responseTime":2.3117400000001,"msg":"request completed"}
{"level":30,"time":1790408019200,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K80FDTYG9ES87Q9ZQ7W","req":{"method":"GET","url":"/api/v1/staff/portal","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35824},"msg":"incoming request"}
{"level":30,"time":1790408019200,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K80FDTYG9ES87Q9ZQ7W","res":{"statusCode":403},"err":{"type":"ForbiddenError","message":"Недостаточно прав для просмотра посещаемости.","stack":"ForbiddenError: Недостаточно прав для просмотра посещаемости.\n at Object.forbidden (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:33:12)\n at _Reply.sensibleForbidden [as forbidden] (/workspace/krona-staff/node_modules/@fastify/sensible/index.js:55:44)\n at Object.<anonymous> (/workspace/krona-staff/src/portal.ts:283:20)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)","status":403,"statusCode":403,"expose":true},"msg":"Недостаточно прав для просмотра посещаемости."}
{"level":30,"time":1790408019201,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K80FDTYG9ES87Q9ZQ7W","res":{"statusCode":403},"responseTime":0.48845000000073924,"msg":"request completed"}
{"level":30,"time":1790408019202,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K810TRXD0SQ27W7YDGR","req":{"method":"POST","url":"/api/v1/staff/employees","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35820},"msg":"incoming request"}
{"level":30,"time":1790408019202,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K810TRXD0SQ27W7YDGR","res":{"statusCode":403},"err":{"type":"ForbiddenError","message":"Недостаточно прав для этой операции.","stack":"ForbiddenError: Недостаточно прав для этой операции.\n at Object.forbidden (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:33:12)\n at requirePermission (/workspace/krona-staff/src/portal.ts:1383:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:454:23)","status":403,"statusCode":403,"expose":true},"msg":"Недостаточно прав для этой операции."}
{"level":30,"time":1790408019202,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K810TRXD0SQ27W7YDGR","res":{"statusCode":403},"responseTime":0.5087550000007468,"msg":"request completed"}
{"level":30,"time":1790408019203,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K8324R3A78MXKWG5GN2","req":{"method":"GET","url":"/api/v1/staff/portal","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35824},"msg":"incoming request"}
{"level":30,"time":1790408019205,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K8324R3A78MXKWG5GN2","res":{"statusCode":200},"responseTime":2.2520119999999224,"msg":"request completed"}
{"level":30,"time":1790408019207,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K87MB5BVVM753W72HHZ","req":{"method":"POST","url":"/api/v1/staff/imports/owner-workbook","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35820},"msg":"incoming request"}
{"level":30,"time":1790408019212,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K87MB5BVVM753W72HHZ","res":{"statusCode":202},"responseTime":5.460973000000195,"msg":"request completed"}
{"level":30,"time":1790408019220,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K8M7PQ0714YSD1M4CQP","req":{"method":"POST","url":"/api/v1/staff/employees/01M3EA4K8BXTNNKH3PQYXZJNBE/access-token","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35820},"msg":"incoming request"}
{"level":30,"time":1790408019222,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K8M7PQ0714YSD1M4CQP","res":{"statusCode":200},"responseTime":1.5780409999997573,"msg":"request completed"}
{"level":30,"time":1790408019222,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K8P75YVNTFTC53C6RE4","req":{"method":"GET","url":"/api/v1/staff/portal","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35824},"msg":"incoming request"}
{"level":30,"time":1790408019225,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K8P75YVNTFTC53C6RE4","res":{"statusCode":200},"responseTime":2.076332000000548,"msg":"request completed"}
{"level":30,"time":1790408019225,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K8S1H145G1H6N733Y63","req":{"method":"PATCH","url":"/api/v1/staff/employees/01M3EA4K8BXTNNKH3PQYXZJNBE","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35820},"msg":"incoming request"}
{"level":30,"time":1790408019227,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K8S1H145G1H6N733Y63","res":{"statusCode":200},"responseTime":1.5953489999992598,"msg":"request completed"}
{"level":30,"time":1790408019228,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K8WFVAZS9JJ3Y48JK1Z","req":{"method":"GET","url":"/api/v1/staff/portal","host":"127.0.0.1:35389","remoteAddress":"127.0.0.1","remotePort":35824},"msg":"incoming request"}
{"level":30,"time":1790408019228,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K8WFVAZS9JJ3Y48JK1Z","res":{"statusCode":401},"err":{"type":"UnauthorizedError","message":"Требуется действующий ключ доступа.","stack":"UnauthorizedError: Требуется действующий ключ доступа.\n at Object.unauthorized (/workspace/krona-staff/node_modules/@fastify/sensible/lib/httpErrors.js:25:12)\n at resolveToken (/workspace/krona-staff/src/portal.ts:1337:37)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async Object.<anonymous> (/workspace/krona-staff/src/portal.ts:280:21)","status":401,"statusCode":401,"expose":true},"msg":"Требуется действующий ключ доступа."}
{"level":30,"time":1790408019229,"pid":1688811,"hostname":"grok-bot-vm-420973429","reqId":"01M3EA4K8WFVAZS9JJ3Y48JK1Z","res":{"statusCode":401},"responseTime":0.9479200000005221,"msg":"request completed"}

View file

@ -0,0 +1,86 @@
// HTTP-клиент e2e. Тело ответа типизировано как `any` намеренно: тесты проверяют
// внешний контракт JSON, а не типы src/. Правила no-unsafe-* отключены только здесь
// и в файлах сценариев.
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */
import pg from 'pg';
import { inject } from 'vitest';
import type { E2EContext } from './context.js';
export interface ApiResponse {
status: number;
body: any;
text: string;
headers: Headers;
}
export interface RequestOptions {
token?: string | undefined;
body?: unknown;
headers?: Record<string, string>;
base?: 'secured' | 'open' | 'ratelimit';
}
export function ctx(): E2EContext {
return inject('e2e');
}
export async function api(
method: string,
path: string,
options: RequestOptions = {},
): Promise<ApiResponse> {
const context = ctx();
const base =
options.base === 'open'
? context.openBaseUrl
: options.base === 'ratelimit'
? context.rateLimitBaseUrl
: context.baseUrl;
const headers: Record<string, string> = { ...(options.headers ?? {}) };
if (options.token) headers.authorization = `Bearer ${options.token}`;
let payload: string | undefined;
if (options.body !== undefined) {
headers['content-type'] = 'application/json';
payload = JSON.stringify(options.body);
}
const url = path.startsWith('/api/') || path.startsWith('/staff') ? path : `/api/v1/staff${path}`;
const response = await fetch(`${base}${url}`, {
method,
headers,
...(payload === undefined ? {} : { body: payload }),
redirect: 'manual',
});
const text = await response.text();
let body: any = null;
try {
body = text ? JSON.parse(text) : null;
} catch {
body = null;
}
return { status: response.status, body, text, headers: response.headers };
}
/** Краткое описание ответа для сообщений assert (без токенов). */
export function describeResponse(response: ApiResponse): string {
const snippet = response.text.length > 300 ? `${response.text.slice(0, 300)}…` : response.text;
return `HTTP ${response.status} ${snippet}`;
}
/** Запрос к БД ролью приложения внутри tenant-транзакции (RLS действует). */
export async function dbQuery<T extends pg.QueryResultRow = Record<string, unknown>>(
sql: string,
params: unknown[] = [],
): Promise<T[]> {
const context = ctx();
const client = new pg.Client({ connectionString: context.appDatabaseUrl });
await client.connect();
try {
await client.query('BEGIN');
await client.query("SELECT set_config('app.tenant_id', $1, true)", [context.tenantId]);
const result = await client.query<T>(sql, params);
await client.query('COMMIT');
return result.rows;
} finally {
await client.end();
}
}

View file

@ -0,0 +1,41 @@
import { randomBytes } from 'node:crypto';
export interface E2EContext {
baseUrl: string;
openBaseUrl: string;
rateLimitBaseUrl: string;
managerToken: string;
terminalToken: string;
tenantId: string;
actorId: string;
terminalActorId: string;
appDatabaseUrl: string;
migrationDatabaseUrl: string;
}
declare module 'vitest' {
export interface ProvidedContext {
e2e: E2EContext;
}
}
const crockford = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
/** Случайный ULID (время + crypto.randomBytes), чтобы не зависеть от src/. */
export function randomUlid(): string {
let time = Date.now();
let timePart = '';
for (let i = 0; i < 10; i += 1) {
timePart = crockford[time % 32]! + timePart;
time = Math.floor(time / 32);
}
const bytes = randomBytes(16);
let randomPart = '';
for (let i = 0; i < 16; i += 1) randomPart += crockford[bytes[i]! % 32]!;
return timePart + randomPart;
}
/** Синтетическая метка для данных тестов: очевидно не реальные люди/суммы. */
export function synthetic(label: string): string {
return `E2E-${label}-${randomBytes(3).toString('hex')}`;
}

View file

@ -0,0 +1,155 @@
// Подготовка данных через публичный API. Везде только синтетические данные.
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
import { expect } from 'vitest';
import { api, ctx, dbQuery, describeResponse } from './client.js';
import { randomUlid, synthetic } from './context.js';
export interface OrgUnit {
id: string;
code: string;
}
export interface Employee {
id: string;
external_ref: string;
personnel_number: string;
}
/** Создаёт торговые точки через импорт (единственный публичный способ в текущем API). */
export async function createOrgUnits(count: number): Promise<OrgUnit[]> {
const units = Array.from({ length: count }, () => {
const code = `e2e-${randomUlid().slice(-10).toLowerCase()}`;
return { code, name: synthetic('Точка') };
});
const response = await api('POST', '/imports/owner-workbook', {
token: ctx().managerToken,
body: { source_name: synthetic('import-units'), units },
});
expect(response.status, describeResponse(response)).toBeLessThan(300);
const rows = await dbQuery<{ id: string; code: string }>(
'SELECT id, code FROM staff_org_units WHERE code = ANY($1::text[])',
[units.map((unit) => unit.code)],
);
return units.map((unit) => ({
code: unit.code,
id: rows.find((row) => row.code === unit.code)!.id,
}));
}
/**
* Создаёт сотрудников через импорт книги владельца: POST /employees на реальной БД
* сейчас падает (N1), а сценарии, не относящиеся к N1, не должны зависеть от этого дефекта.
*/
export async function importEmployees(count: number): Promise<Employee[]> {
const employees = Array.from({ length: count }, () => {
const suffix = randomUlid().slice(-8);
return {
external_ref: `e2e:${suffix}`,
personnel_number: `E2E-${suffix}`,
display_name: synthetic('Сотрудник'),
};
});
const response = await api('POST', '/imports/owner-workbook', {
token: ctx().managerToken,
body: { source_name: synthetic('import-employees'), employees },
});
expect(response.status, describeResponse(response)).toBeLessThan(300);
const rows = await dbQuery<{ id: string; external_ref: string }>(
'SELECT id, external_ref FROM staff_employees WHERE external_ref = ANY($1::text[])',
[employees.map((employee) => employee.external_ref)],
);
return employees.map((employee) => ({
...employee,
id: rows.find((row) => row.external_ref === employee.external_ref)!.id,
}));
}
export async function issueEmployeeToken(employeeId: string): Promise<string> {
const response = await api('POST', `/employees/${employeeId}/access-token`, {
token: ctx().managerToken,
});
expect(response.status, describeResponse(response)).toBe(200);
return response.body.access_token as string;
}
export async function clock(
employeeId: string,
eventType: 'check_in' | 'check_out',
occurredAt: Date,
orgUnitId?: string,
) {
return api('POST', '/attendance/events', {
token: ctx().terminalToken,
body: {
employee_id: employeeId,
event_type: eventType,
occurred_at: occurredAt.toISOString(),
source_event_id: `e2e-${randomUlid()}`,
...(orgUnitId ? { org_unit_id: orgUnitId } : {}),
},
});
}
/** Дата (UTC) N дней назад в полдень: всегда в окне терминала (<=180 дней) и не в будущем. */
export function daysAgo(days: number, hourUtc = 9): Date {
const date = new Date();
date.setUTCDate(date.getUTCDate() - days);
date.setUTCHours(hourUtc, 0, 0, 0);
return date;
}
export function isoDate(date: Date): string {
return date.toISOString().slice(0, 10);
}
/** Отработанная смена: check_in/check_out терминалом + сверка; возвращает id смены. */
export async function workedShift(
employeeId: string,
orgUnitId: string,
day: Date,
hours = 8,
): Promise<string> {
const start = new Date(day);
const end = new Date(start.getTime() + hours * 3_600_000);
const inResponse = await clock(employeeId, 'check_in', start, orgUnitId);
expect(inResponse.status, describeResponse(inResponse)).toBe(201);
const outResponse = await clock(employeeId, 'check_out', end, orgUnitId);
expect(outResponse.status, describeResponse(outResponse)).toBe(201);
const reconcile = await api('POST', '/work-sessions/reconcile', {
token: ctx().managerToken,
body: { date_from: isoDate(start), date_to: isoDate(start) },
});
expect(reconcile.status, describeResponse(reconcile)).toBe(200);
const rows = await dbQuery<{ id: string }>(
`SELECT id FROM staff_work_sessions
WHERE employee_id = $1 AND org_unit_id = $2 AND business_date = $3::date`,
[employeeId, orgUnitId, isoDate(start)],
);
expect(rows.length, 'сверка должна создать смену').toBe(1);
return rows[0]!.id;
}
export async function hourlyRuleId(): Promise<string> {
const response = await api('GET', '/pay-rules', { token: ctx().managerToken });
expect(response.status, describeResponse(response)).toBe(200);
const rules = response.body.pay_rules as Array<{ id: string; code: string }>;
const hourly = rules.find((rule) => rule.code === 'hourly') ?? rules[0];
expect(hourly, 'должно существовать хотя бы одно правило оплаты').toBeTruthy();
return hourly!.id;
}
/** Синтетическая ставка 123,45 ₽/ч (заведомо не реальная сумма). */
export const SYNTHETIC_RATE_MINOR = 12_345;
export async function assignHourly(employeeId: string, orgUnitId: string | null) {
const response = await api('PUT', `/employees/${employeeId}/pay-assignment`, {
token: ctx().managerToken,
body: {
pay_rule_id: await hourlyRuleId(),
org_unit_id: orgUnitId,
rate_minor: SYNTHETIC_RATE_MINOR,
effective_from: '2026-01-01',
},
});
expect(response.status, describeResponse(response)).toBe(200);
}

View file

@ -0,0 +1,190 @@
// Глобальная подготовка e2e: реальная PostgreSQL 17, миграции ролью мигратора
// (без SUPERUSER), реальный процесс сервера под ролью приложения, случайные секреты.
import { spawn, spawnSync, type ChildProcess } from 'node:child_process';
import { randomBytes } from 'node:crypto';
import { createWriteStream, mkdirSync, mkdtempSync, readFileSync, rmSync } from 'node:fs';
import { createServer } from 'node:net';
import { tmpdir } from 'node:os';
import path from 'node:path';
import type { TestProject } from 'vitest/node';
import { randomUlid, type E2EContext } from './context.js';
const repoRoot = path.resolve(import.meta.dirname, '../../..');
const evidenceDir = path.join(repoRoot, 'tests/e2e/evidence');
function parseEnvFile(file: string): Record<string, string> {
const result: Record<string, string> = {};
for (const line of readFileSync(file, 'utf8').split('\n')) {
const index = line.indexOf('=');
if (index > 0) result[line.slice(0, index)] = line.slice(index + 1);
}
return result;
}
async function freePort(): Promise<number> {
return new Promise((resolve, reject) => {
const server = createServer();
server.once('error', reject);
server.listen(0, '127.0.0.1', () => {
const address = server.address();
const port = typeof address === 'object' && address ? address.port : 0;
server.close(() => resolve(port));
});
});
}
function runNode(args: string[], env: NodeJS.ProcessEnv, label: string) {
const result = spawnSync(process.execPath, args, { cwd: repoRoot, env, encoding: 'utf8' });
const output = `${result.stdout}${result.stderr}`;
console.log(`[e2e] ${label}:\n${output.trim()}`);
if (result.status !== 0) throw new Error(`${label} failed with exit ${result.status}`);
return output;
}
function vapidEnv(): Record<string, string> {
const output = spawnSync(process.execPath, ['scripts/generate-vapid-keys.mjs'], {
cwd: repoRoot,
encoding: 'utf8',
}).stdout;
const env: Record<string, string> = {};
for (const line of output.split('\n')) {
const index = line.indexOf('=');
if (index > 0) env[line.slice(0, index)] = line.slice(index + 1);
}
return env;
}
interface StartedServer {
child: ChildProcess;
baseUrl: string;
}
async function startServer(name: string, env: Record<string, string>): Promise<StartedServer> {
const port = await freePort();
const logPath = path.join(evidenceDir, `server-${name}.txt`);
const log = createWriteStream(logPath, { flags: 'w' });
const tsx = path.join(repoRoot, 'node_modules/.bin/tsx');
const child = spawn(tsx, ['src/server.ts'], {
cwd: repoRoot,
env: {
PATH: process.env.PATH ?? '',
NODE_ENV: 'test',
HOST: '127.0.0.1',
PORT: String(port),
LOG_LEVEL: 'info',
STAFF_RUNTIME_MODE: 'standalone',
...env,
},
stdio: ['ignore', 'pipe', 'pipe'],
});
child.stdout?.pipe(log);
child.stderr?.pipe(log);
const baseUrl = `http://127.0.0.1:${port}`;
const deadline = Date.now() + 60_000;
while (Date.now() < deadline) {
if (child.exitCode !== null) {
throw new Error(`server ${name} exited early with ${child.exitCode}; see ${logPath}`);
}
try {
const response = await fetch(`${baseUrl}/api/v1/staff/ready`);
if (response.status === 200) {
console.log(
`[e2e] server ${name} ready at ${baseUrl} (log: ${path.relative(repoRoot, logPath)})`,
);
return { child, baseUrl };
}
} catch {
// сервер ещё не слушает порт
}
await new Promise((resolve) => setTimeout(resolve, 250));
}
child.kill('SIGKILL');
throw new Error(`server ${name} did not become ready; see ${logPath}`);
}
export default async function setup(project: TestProject) {
mkdirSync(evidenceDir, { recursive: true });
const adminUrl = process.env.E2E_PG_ADMIN_URL;
if (!adminUrl) {
throw new Error(
'E2E_PG_ADMIN_URL не задан: нужен bootstrap-админ PostgreSQL 17 (только для создания ролей и БД)',
);
}
const database = process.env.E2E_DATABASE_NAME ?? 'krona_staff_e2e';
const secretsDir = mkdtempSync(path.join(tmpdir(), 'krona-e2e-'));
const envFile = path.join(secretsDir, 'db.env');
runNode(
['scripts/test/provision-pg.mjs', '--out', envFile, '--db', database],
{ ...process.env, E2E_PG_ADMIN_URL: adminUrl },
'provision',
);
const dbEnv = parseEnvFile(envFile);
rmSync(secretsDir, { recursive: true, force: true });
const migrationUrl = dbEnv.DATABASE_MIGRATION_URL;
const appUrl = dbEnv.DATABASE_URL;
if (!migrationUrl || !appUrl) throw new Error('provision did not produce connection URLs');
const migrationMode = process.env.E2E_MIGRATIONS ?? 'up';
runNode(
['scripts/test/migrate-roundtrip.mjs', migrationMode === 'roundtrip' ? 'roundtrip' : 'up'],
{ PATH: process.env.PATH ?? '', DATABASE_MIGRATION_URL: migrationUrl },
`migrations (${migrationMode}) as krona_migrator`,
);
const tenantId = randomUlid();
const actorId = randomUlid();
const terminalActorId = randomUlid();
const managerToken = randomBytes(32).toString('hex');
const terminalToken = randomBytes(32).toString('hex');
const common = {
DATABASE_URL: appUrl,
STANDALONE_TENANT_ID: tenantId,
STANDALONE_ACTOR_ID: actorId,
...vapidEnv(),
};
const secured = await startServer('secured', {
...common,
STANDALONE_ACCESS: 'employee',
STANDALONE_MANAGER_TOKEN: managerToken,
STANDALONE_TERMINAL_TOKEN: terminalToken,
STANDALONE_TERMINAL_ACTOR_ID: terminalActorId,
});
// Второй процесс без токенов (как корневой compose.yaml), тот же tenant и БД: для F2/K-сценариев.
const open = await startServer('no-tokens', {
...common,
STANDALONE_ACCESS: 'manager',
});
// Третий процесс с собственными токенами только для F4 (перебор входа): если rate limit
// появится, он не должен блокировать вход в остальных сценариях с того же IP.
const rateLimited = await startServer('rate-limit', {
...common,
STANDALONE_ACCESS: 'employee',
STANDALONE_MANAGER_TOKEN: randomBytes(32).toString('hex'),
STANDALONE_TERMINAL_TOKEN: randomBytes(32).toString('hex'),
});
const context: E2EContext = {
baseUrl: secured.baseUrl,
openBaseUrl: open.baseUrl,
rateLimitBaseUrl: rateLimited.baseUrl,
managerToken,
terminalToken,
tenantId,
actorId,
terminalActorId,
appDatabaseUrl: appUrl,
migrationDatabaseUrl: migrationUrl,
};
project.provide('e2e', context);
return async () => {
for (const server of [secured, open, rateLimited]) {
server.child.kill('SIGTERM');
}
await new Promise((resolve) => setTimeout(resolve, 500));
for (const server of [secured, open, rateLimited]) {
if (server.child.exitCode === null) server.child.kill('SIGKILL');
}
};
}

View file

@ -0,0 +1,43 @@
{
"comment": "ID сценариев, красный цвет которых сейчас ожидаем (открытые дефекты или ещё не реализованные решения владельца). Когда дефект исправлен и все тесты ID зелёные, scripts/test/run-e2e.mjs падает, пока ID не убран отсюда. Добавлять ID сюда можно только вместе с записью в REPORT.md.",
"defects": {
"N1": "POST /employees: 42P08 inconsistent types for $2 на реальной PostgreSQL",
"N2": "подтверждение смены / расчёт / утверждение: staff_outbox.occurred_at NULL (23502)",
"N3": "SSRF через push-endpoint на внутренние адреса",
"N4": "двойное начисление при пересекающихся расчётах (сейчас блокирован N2)",
"N9": "перепривязка чужого push-endpoint",
"N10": "справочники доступны терминалу",
"N11": "импорт с неверным kind → 500",
"N12": "pay-assignment без additionalProperties:false и верхних границ",
"F2": "standalone без токенов даёт права STANDALONE_ACCESS анониму",
"F3": "cookie = сырой токен, logout не отзывает",
"F4": "нет rate limit на вход",
"F7": "Idempotency-Key не используется",
"F10": "CSRF: мутации по cookie без Origin разрешены",
"SYNC-A": "устройство само подтверждает смену через upsert_work_session",
"SYNC-B": "устройство само утверждает табель через upsert_timesheet_entry",
"SYNC-C0": "начальная загрузка /sync/pull падает 500: column status does not exist (staff_org_units)",
"SYNC-C": "начальная загрузка обрезается на 100 сущностях (сейчас также блокирована SYNC-C0)",
"SYNC-D": "изменения из портала не пишутся в staff_sync_change_log",
"SYNC-E": "отметки уволенных сотрудников принимаются через sync",
"SYNC-F": "sync не сохраняет org_unit_id отметки и принимает чужую точку",
"SYNC-G": "одна битая команда роняет весь пакет (500)",
"SYNC-H": "регистрация устройства по cookie без проверки Origin",
"SYNC-I": "без токенов анонимно регистрируется устройство",
"SYNC-J": "sync принимает отметки вне окна времени",
"SYNC-K": "ack принимает курсор больше выданного сервером",
"PILOT-1": "deploy/pilot/compose.yaml: 14 подстановок без :? (пустые токены/пароли молча проходят)",
"PILOT-2": "deploy/pilot/compose.yaml: app с NODE_ENV=development",
"OWN-01": "решение владельца: роли точки (этап 4 Codex)",
"OWN-02": "решение владельца: пакет отправляет только бухгалтер",
"OWN-03": "решение владельца: уведомления директорам",
"OWN-04": "решение владельца: подписывает только директор",
"OWN-05": "решение владельца: ledger пуст до подписи",
"OWN-06": "решение владельца: подпись → ledger, неизменяемость",
"OWN-07": "решение владельца: изменение смены после отправки возвращает пакет",
"OWN-08": "решение владельца: возврат с комментарием",
"OWN-09": "решение владельца: смена в чужой точке идёт в зарплату той точки",
"OWN-10": "решение владельца: нет согласия на биометрию → регистрация запрещена",
"OWN-11": "решение владельца: отзыв согласия меняет статус для терминала"
}
}

View file

@ -0,0 +1,18 @@
import { fileURLToPath } from 'node:url';
import { defineConfig } from 'vitest/config';
// Отдельный конфиг: e2e-файлы названы *.e2e.ts и не попадают в `npm test`
// (корневой vitest ищет только *.test.ts), поэтому `npm run check` не зависит от
// живой PostgreSQL и от известных открытых дефектов.
const root = fileURLToPath(new URL('../..', import.meta.url));
export default defineConfig({
root,
test: {
include: ['tests/e2e/**/*.e2e.ts'],
globalSetup: ['tests/e2e/harness/global-setup.ts'],
fileParallelism: false,
testTimeout: 60_000,
hookTimeout: 180_000,
},
});

View file

@ -296,7 +296,9 @@ describeDatabase('PostgreSQL tenant isolation', () => {
});
const cpVisibleToB = await database.tenantTransaction(tenantB, actorB, (client) =>
client.query('SELECT device_id FROM staff_sync_device_checkpoints WHERE device_id = $1', [deviceIdA]),
client.query('SELECT device_id FROM staff_sync_device_checkpoints WHERE device_id = $1', [
deviceIdA,
]),
);
expect(cpVisibleToB.rowCount).toBe(0);