Compare commits
12 commits
ba59a48ffd
...
421da722c0
| Author | SHA1 | Date | |
|---|---|---|---|
| 421da722c0 | |||
| 3388b90bfa | |||
| 1e325a6dfd | |||
| a19c06b574 | |||
| f59be3adf9 | |||
| 9bdfb66a53 | |||
| 32ced4b100 | |||
| 518494d03c | |||
| cf7f6f4510 | |||
| d7e9008b8c | |||
| 88fc7491b6 | |||
| 29fefc1933 |
32 changed files with 6427 additions and 28 deletions
|
|
@ -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
30
scripts/test/ci-local.sh
Executable 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
|
||||
46
scripts/test/migrate-roundtrip.mjs
Normal file
46
scripts/test/migrate-roundtrip.mjs
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
#!/usr/bin/env node
|
||||
// up -> откат ВСЕХ миграций по одной -> up -> повторный up (идемпотентность).
|
||||
// Запускается ролью мигратора (DATABASE_MIGRATION_URL), без SUPERUSER.
|
||||
import { spawnSync } from 'node:child_process';
|
||||
|
||||
function run(direction) {
|
||||
const result = spawnSync(process.execPath, ['scripts/migrate.mjs', direction], {
|
||||
env: { ...process.env, ALLOW_MIGRATION_DOWN: direction === 'down' ? 'true' : 'false' },
|
||||
encoding: 'utf8',
|
||||
});
|
||||
process.stdout.write(result.stdout);
|
||||
process.stderr.write(result.stderr);
|
||||
if (result.status !== 0) {
|
||||
console.error(`migrate ${direction} failed with exit ${result.status}`);
|
||||
process.exit(result.status ?? 1);
|
||||
}
|
||||
return result.stdout;
|
||||
}
|
||||
|
||||
const mode = process.argv[2] ?? 'roundtrip';
|
||||
console.log('== migrate up (1)');
|
||||
const first = run('up');
|
||||
if (mode === 'up') process.exit(0);
|
||||
const applied = (first.match(/^applied /gm) ?? []).length;
|
||||
console.log(`== rollback all (applied now: ${applied})`);
|
||||
let rolledBack = 0;
|
||||
for (let i = 0; i < 1000; i += 1) {
|
||||
const out = run('down');
|
||||
if (/no migration to roll back/.test(out)) break;
|
||||
rolledBack += 1;
|
||||
}
|
||||
console.log(`== rolled back ${rolledBack} migrations`);
|
||||
console.log('== migrate up (2)');
|
||||
const second = run('up');
|
||||
const reapplied = (second.match(/^applied /gm) ?? []).length;
|
||||
console.log('== migrate up (3, must be no-op)');
|
||||
const third = run('up');
|
||||
if ((third.match(/^applied /gm) ?? []).length !== 0) {
|
||||
console.error('third up applied migrations again: not idempotent');
|
||||
process.exit(1);
|
||||
}
|
||||
if (rolledBack === 0 || reapplied !== rolledBack) {
|
||||
console.error(`rollback/reapply mismatch: rolledBack=${rolledBack} reapplied=${reapplied}`);
|
||||
process.exit(1);
|
||||
}
|
||||
console.log(`== roundtrip OK: rolledBack=${rolledBack} reapplied=${reapplied}`);
|
||||
298
scripts/test/n13-race.mjs
Normal file
298
scripts/test/n13-race.mjs
Normal 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');
|
||||
}
|
||||
117
scripts/test/provision-pg.mjs
Normal file
117
scripts/test/provision-pg.mjs
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
#!/usr/bin/env node
|
||||
// Тестовый стенд PostgreSQL, повторяющий роли pilot, но без суперпользователя-мигратора:
|
||||
// * bootstrap-админ (E2E_PG_ADMIN_URL) используется ТОЛЬКО здесь, как DBA/entrypoint образа;
|
||||
// * krona_migrator — NOSUPERUSER NOCREATEDB NOCREATEROLE, владелец БД и схемы public;
|
||||
// * krona_staff_app — NOSUPERUSER NOBYPASSRLS NOINHERIT, права выдают миграции 0003+.
|
||||
// Пароли генерируются crypto.randomBytes и пишутся только в env-файл с правами 0600.
|
||||
// Печатаются имена ролей/БД, но не пароли.
|
||||
import { randomBytes } from 'node:crypto';
|
||||
import { writeFileSync } from 'node:fs';
|
||||
import pg from 'pg';
|
||||
|
||||
const args = new Map();
|
||||
for (let i = 2; i < process.argv.length; i += 2) args.set(process.argv[i], process.argv[i + 1]);
|
||||
const adminUrl = process.env.E2E_PG_ADMIN_URL;
|
||||
const envFile = args.get('--out');
|
||||
const database = args.get('--db') ?? 'krona_staff_e2e';
|
||||
if (!adminUrl || !envFile) {
|
||||
console.error(
|
||||
'Usage: E2E_PG_ADMIN_URL=... node scripts/test/provision-pg.mjs --out <env-path> [--db name]',
|
||||
);
|
||||
process.exit(2);
|
||||
}
|
||||
if (!/^[a-z_][a-z0-9_]{0,62}$/.test(database)) throw new Error('Invalid database name');
|
||||
|
||||
export async function provision() {
|
||||
const migratorPassword = randomBytes(24).toString('hex');
|
||||
const appPassword = randomBytes(24).toString('hex');
|
||||
const admin = new pg.Client({
|
||||
connectionString: adminUrl,
|
||||
application_name: 'krona-e2e-provision',
|
||||
});
|
||||
await admin.connect();
|
||||
try {
|
||||
await admin.query(`
|
||||
DO $$ BEGIN
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'krona_migrator') THEN
|
||||
CREATE ROLE krona_migrator LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE NOBYPASSRLS;
|
||||
END IF;
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'krona_staff_app') THEN
|
||||
CREATE ROLE krona_staff_app LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT NOBYPASSRLS;
|
||||
END IF;
|
||||
END $$`);
|
||||
const alterMigrator = await admin.query(
|
||||
"SELECT format('ALTER ROLE krona_migrator WITH LOGIN PASSWORD %L NOSUPERUSER NOCREATEDB NOCREATEROLE NOBYPASSRLS', $1::text) AS sql",
|
||||
[migratorPassword],
|
||||
);
|
||||
await admin.query(alterMigrator.rows[0].sql);
|
||||
const alterApp = await admin.query(
|
||||
"SELECT format('ALTER ROLE krona_staff_app WITH LOGIN PASSWORD %L NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT NOBYPASSRLS', $1::text) AS sql",
|
||||
[appPassword],
|
||||
);
|
||||
await admin.query(alterApp.rows[0].sql);
|
||||
await admin.query(
|
||||
`SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = $1 AND pid <> pg_backend_pid()`,
|
||||
[database],
|
||||
);
|
||||
await admin.query(`DROP DATABASE IF EXISTS ${database}`);
|
||||
await admin.query(
|
||||
`CREATE DATABASE ${database} OWNER krona_migrator ENCODING 'UTF8' TEMPLATE template0`,
|
||||
);
|
||||
} finally {
|
||||
await admin.end();
|
||||
}
|
||||
const dbAdminUrl = new URL(adminUrl);
|
||||
dbAdminUrl.pathname = `/${database}`;
|
||||
const dbAdmin = new pg.Client({ connectionString: dbAdminUrl.toString() });
|
||||
await dbAdmin.connect();
|
||||
try {
|
||||
await dbAdmin.query('ALTER SCHEMA public OWNER TO krona_migrator');
|
||||
await dbAdmin.query('REVOKE CREATE ON SCHEMA public FROM PUBLIC');
|
||||
await dbAdmin.query(`REVOKE ALL ON DATABASE ${database} FROM PUBLIC`);
|
||||
await dbAdmin.query(`GRANT CONNECT ON DATABASE ${database} TO krona_staff_app`);
|
||||
} finally {
|
||||
await dbAdmin.end();
|
||||
}
|
||||
const base = new URL(adminUrl);
|
||||
const url = (user, password) => {
|
||||
const u = new URL(base.toString());
|
||||
u.username = user;
|
||||
u.password = password;
|
||||
u.pathname = `/${database}`;
|
||||
return u.toString();
|
||||
};
|
||||
const migratorUrl = url('krona_migrator', migratorPassword);
|
||||
const appUrl = url('krona_staff_app', appPassword);
|
||||
const lines = [
|
||||
`DATABASE_MIGRATION_URL=${migratorUrl}`,
|
||||
`DATABASE_TEST_MIGRATION_URL=${migratorUrl}`,
|
||||
`DATABASE_TEST_URL=${appUrl}`,
|
||||
`DATABASE_URL=${appUrl}`,
|
||||
`POSTGRES_APP_PASSWORD=${appPassword}`,
|
||||
'',
|
||||
];
|
||||
writeFileSync(envFile, lines.join('\n'), { mode: 0o600 });
|
||||
// Проверяем атрибуты ролей и печатаем их (без паролей) как доказательство.
|
||||
const check = new pg.Client({ connectionString: migratorUrl });
|
||||
await check.connect();
|
||||
try {
|
||||
const roles = await check.query(
|
||||
`SELECT rolname, rolsuper, rolcreaterole, rolcreatedb, rolbypassrls
|
||||
FROM pg_roles WHERE rolname IN ('krona_migrator','krona_staff_app') ORDER BY rolname`,
|
||||
);
|
||||
const version = await check.query('SHOW server_version');
|
||||
console.log(
|
||||
`provisioned database=${database} server_version=${version.rows[0].server_version}`,
|
||||
);
|
||||
for (const r of roles.rows) {
|
||||
console.log(
|
||||
`role=${r.rolname} super=${r.rolsuper} createrole=${r.rolcreaterole} createdb=${r.rolcreatedb} bypassrls=${r.rolbypassrls}`,
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
await check.end();
|
||||
}
|
||||
}
|
||||
|
||||
await provision();
|
||||
128
scripts/test/run-e2e.mjs
Normal file
128
scripts/test/run-e2e.mjs
Normal 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
119
tests/e2e/00-harness.e2e.ts
Normal 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);
|
||||
});
|
||||
});
|
||||
326
tests/e2e/10-core-defects.e2e.ts
Normal file
326
tests/e2e/10-core-defects.e2e.ts
Normal 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);
|
||||
});
|
||||
});
|
||||
287
tests/e2e/20-sync-defects.e2e.ts
Normal file
287
tests/e2e/20-sync-defects.e2e.ts
Normal 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);
|
||||
});
|
||||
});
|
||||
270
tests/e2e/30-owner-decisions.e2e.ts
Normal file
270
tests/e2e/30-owner-decisions.e2e.ts
Normal 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',
|
||||
});
|
||||
});
|
||||
});
|
||||
56
tests/e2e/40-compose-pilot.e2e.ts
Normal file
56
tests/e2e/40-compose-pilot.e2e.ts
Normal 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: [] });
|
||||
});
|
||||
});
|
||||
141
tests/e2e/NOTES-FOR-EXECUTORS.md
Normal file
141
tests/e2e/NOTES-FOR-EXECUTORS.md
Normal 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
225
tests/e2e/REPORT.md
Normal 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 — гипотеза по коду.
|
||||
1138
tests/e2e/evidence/ci-local.txt
Normal file
1138
tests/e2e/evidence/ci-local.txt
Normal file
File diff suppressed because it is too large
Load diff
669
tests/e2e/evidence/e2e-results.json
Normal file
669
tests/e2e/evidence/e2e-results.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
941
tests/e2e/evidence/e2e-run.txt
Normal file
941
tests/e2e/evidence/e2e-run.txt
Normal 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
|
||||
44
tests/e2e/evidence/e2e-table.md
Normal file
44
tests/e2e/evidence/e2e-table.md
Normal 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 | зелёный |
|
||||
58
tests/e2e/evidence/n13-race.txt
Normal file
58
tests/e2e/evidence/n13-race.txt
Normal 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
|
||||
22
tests/e2e/evidence/n5-after.txt
Normal file
22
tests/e2e/evidence/n5-after.txt
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
== run 1: DATABASE_TEST_URL=<krona_staff_app@127.0.0.1:55433/krona_staff_e2e> DATABASE_TEST_MIGRATION_URL=<krona_migrator@...> npx vitest run tests/integration/tenant-isolation.test.ts
|
||||
|
||||
RUN v5.0.1 /workspace/krona-staff
|
||||
|
||||
|
||||
Test Files 1 passed (1)
|
||||
Tests 1 passed (1)
|
||||
Start at 14:20:56
|
||||
Duration 275ms (tests 63%, transform 23%, import 12%, worker 1%)
|
||||
|
||||
exit=0
|
||||
== run 2: DATABASE_TEST_URL=<krona_staff_app@127.0.0.1:55433/krona_staff_e2e> DATABASE_TEST_MIGRATION_URL=<krona_migrator@...> npx vitest run tests/integration/tenant-isolation.test.ts
|
||||
|
||||
RUN v5.0.1 /workspace/krona-staff
|
||||
|
||||
|
||||
Test Files 1 passed (1)
|
||||
Tests 1 passed (1)
|
||||
Start at 14:20:57
|
||||
Duration 260ms (tests 62%, transform 23%, import 13%, worker 2%)
|
||||
|
||||
exit=0
|
||||
30
tests/e2e/evidence/n5-before.txt
Normal file
30
tests/e2e/evidence/n5-before.txt
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
== DATABASE_TEST_URL=<krona_staff_app@127.0.0.1:55433/krona_staff_e2e> npx vitest run tests/integration/tenant-isolation.test.ts (база 778ba2d, до исправления)
|
||||
|
||||
RUN v5.0.1 /workspace/krona-staff
|
||||
|
||||
❯ tests/integration/tenant-isolation.test.ts (1 test) 114ms
|
||||
|
||||
⎯⎯⎯⎯⎯⎯ Failed Suites 1 ⎯⎯⎯⎯⎯⎯⎯
|
||||
|
||||
FAIL tests/integration/tenant-isolation.test.ts > PostgreSQL tenant isolation
|
||||
error: permission denied for table staff_employees
|
||||
❯ node_modules/pg/lib/client.js:694:17
|
||||
❯ tests/integration/tenant-isolation.test.ts:40:7
|
||||
38| await client.query('DELETE FROM staff_outbox WHERE id = $1', [ev…
|
||||
39| await client.query('DELETE FROM staff_professions WHERE id = $1'…
|
||||
40| await client.query('DELETE FROM staff_employees WHERE id = $1', …
|
||||
| ^
|
||||
41| });
|
||||
42| await database.close();
|
||||
❯ Database.tenantTransaction src/infrastructure/database.ts:30:22
|
||||
❯ tests/integration/tenant-isolation.test.ts:31:5
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯
|
||||
|
||||
|
||||
Test Files 1 failed (1)
|
||||
Tests 1 passed (1)
|
||||
Start at 14:20:47
|
||||
Duration 265ms (tests 62%, transform 23%, import 14%, worker 1%)
|
||||
|
||||
exit=1
|
||||
425
tests/e2e/evidence/server-n13-as-is.txt
Normal file
425
tests/e2e/evidence/server-n13-as-is.txt
Normal 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"}
|
||||
0
tests/e2e/evidence/server-n13-n2-bypass.txt
Normal file
0
tests/e2e/evidence/server-n13-n2-bypass.txt
Normal file
11
tests/e2e/evidence/server-no-tokens.txt
Normal file
11
tests/e2e/evidence/server-no-tokens.txt
Normal 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"}
|
||||
93
tests/e2e/evidence/server-rate-limit.txt
Normal file
93
tests/e2e/evidence/server-rate-limit.txt
Normal 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"}
|
||||
279
tests/e2e/evidence/server-secured.txt
Normal file
279
tests/e2e/evidence/server-secured.txt
Normal 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"}
|
||||
86
tests/e2e/harness/client.ts
Normal file
86
tests/e2e/harness/client.ts
Normal 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();
|
||||
}
|
||||
}
|
||||
41
tests/e2e/harness/context.ts
Normal file
41
tests/e2e/harness/context.ts
Normal 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')}`;
|
||||
}
|
||||
155
tests/e2e/harness/fixtures.ts
Normal file
155
tests/e2e/harness/fixtures.ts
Normal 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);
|
||||
}
|
||||
190
tests/e2e/harness/global-setup.ts
Normal file
190
tests/e2e/harness/global-setup.ts
Normal 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');
|
||||
}
|
||||
};
|
||||
}
|
||||
43
tests/e2e/known-defects.json
Normal file
43
tests/e2e/known-defects.json
Normal 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": "решение владельца: отзыв согласия меняет статус для терминала"
|
||||
}
|
||||
}
|
||||
18
tests/e2e/vitest.e2e.config.ts
Normal file
18
tests/e2e/vitest.e2e.config.ts
Normal 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,
|
||||
},
|
||||
});
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
import pg from 'pg';
|
||||
import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
||||
import { Database } from '../../src/infrastructure/database.js';
|
||||
import { newUlid, parseUlid } from '../../src/core/ids.js';
|
||||
|
|
@ -5,6 +6,23 @@ import { newUlid, parseUlid } from '../../src/core/ids.js';
|
|||
const connectionString = process.env.DATABASE_TEST_URL;
|
||||
const describeDatabase = connectionString ? describe : describe.skip;
|
||||
|
||||
// Роль приложения намеренно не имеет DELETE на staff_employees и ряде других таблиц,
|
||||
// поэтому очистка идёт соединением роли мигратора (владельца таблиц). FORCE RLS действует
|
||||
// и на владельца, поэтому внутри транзакции выставляется app.tenant_id.
|
||||
const migrationConnectionString =
|
||||
process.env.DATABASE_TEST_MIGRATION_URL ?? process.env.DATABASE_MIGRATION_URL;
|
||||
const cleanupTables = [
|
||||
'staff_sync_device_checkpoints',
|
||||
'staff_sync_command_inbox',
|
||||
'staff_sync_change_log',
|
||||
'staff_sync_devices',
|
||||
'staff_notification_deliveries',
|
||||
'staff_push_subscriptions',
|
||||
'staff_outbox',
|
||||
'staff_professions',
|
||||
'staff_employees',
|
||||
] as const;
|
||||
|
||||
describeDatabase('PostgreSQL tenant isolation', () => {
|
||||
const database = new Database(connectionString!);
|
||||
const tenantA = parseUlid('01J0000000000000000000000A');
|
||||
|
|
@ -20,26 +38,51 @@ describeDatabase('PostgreSQL tenant isolation', () => {
|
|||
const changeIdA = newUlid();
|
||||
const commandIdA = newUlid();
|
||||
|
||||
async function cleanupAsMigrator() {
|
||||
if (!migrationConnectionString) {
|
||||
throw new Error(
|
||||
'DATABASE_TEST_MIGRATION_URL (или DATABASE_MIGRATION_URL) обязателен вместе с DATABASE_TEST_URL: очистка выполняется ролью мигратора',
|
||||
);
|
||||
}
|
||||
const migrator = new pg.Client({
|
||||
connectionString: migrationConnectionString,
|
||||
application_name: 'krona-staff-test-cleanup',
|
||||
});
|
||||
await migrator.connect();
|
||||
try {
|
||||
for (const tenant of [tenantA, tenantB]) {
|
||||
await migrator.query('BEGIN');
|
||||
try {
|
||||
await migrator.query("SELECT set_config('app.tenant_id', $1, true)", [tenant]);
|
||||
for (const table of cleanupTables) {
|
||||
await migrator.query(`DELETE FROM ${table} WHERE tenant_id = $1`, [tenant]);
|
||||
}
|
||||
await migrator.query('COMMIT');
|
||||
} catch (error) {
|
||||
await migrator.query('ROLLBACK');
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
await migrator.end();
|
||||
}
|
||||
}
|
||||
|
||||
beforeAll(async () => {
|
||||
const role = await database.pool.query(
|
||||
'SELECT rolsuper, rolbypassrls FROM pg_roles WHERE rolname = current_user',
|
||||
);
|
||||
expect(role.rows[0]).toEqual({ rolsuper: false, rolbypassrls: false });
|
||||
// Остатки прошлого упавшего прогона иначе ломают уникальные ключи (EMP-PUSH-1, DEV-A).
|
||||
await cleanupAsMigrator();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await database.tenantTransaction(tenantA, actorA, async (client) => {
|
||||
await client.query('DELETE FROM staff_sync_device_checkpoints WHERE tenant_id = $1', [tenantA]);
|
||||
await client.query('DELETE FROM staff_sync_command_inbox WHERE tenant_id = $1', [tenantA]);
|
||||
await client.query('DELETE FROM staff_sync_change_log WHERE tenant_id = $1', [tenantA]);
|
||||
await client.query('DELETE FROM staff_sync_devices WHERE tenant_id = $1', [tenantA]);
|
||||
await client.query('DELETE FROM staff_notification_deliveries WHERE id = $1', [deliveryIdA]);
|
||||
await client.query('DELETE FROM staff_push_subscriptions WHERE id = $1', [subscriptionIdA]);
|
||||
await client.query('DELETE FROM staff_outbox WHERE id = $1', [eventId]);
|
||||
await client.query('DELETE FROM staff_professions WHERE id = $1', [professionId]);
|
||||
await client.query('DELETE FROM staff_employees WHERE id = $1', [employeeIdA]);
|
||||
});
|
||||
await database.close();
|
||||
try {
|
||||
await cleanupAsMigrator();
|
||||
} finally {
|
||||
await database.close();
|
||||
}
|
||||
});
|
||||
|
||||
it('prevents reads and writes across two tenants', async () => {
|
||||
|
|
@ -253,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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue