test(e2e): синтетические суммы кратны рублю (учёт округления расчёта)

Зачем: на ветке codex/fix-live-database цепочка подтверждение → расчёт →
утверждение впервые дошла до конца, и K3/N2 остался красным не из-за
дефекта, а из-за теста: 8 ч × 123,45 ₽ = 98760 коп., а расчёт округляет
строку до rounding_unit_minor (по умолчанию 100 коп., service.ts:695) и
начисляет 98800. Округление до рубля — настройка продукта, не дефект;
тест не должен от него зависеть.

Что: SYNTHETIC_RATE_MINOR 12345 → 12300 (123,00 ₽/ч), оплата смены
официанта в K9 111111 → 111100. Суммы остаются заведомо синтетическими.
This commit is contained in:
grok 2026-09-26 15:25:47 +07:00
parent ac8ab3cc02
commit 3475133b10
2 changed files with 7 additions and 3 deletions

View file

@ -175,7 +175,7 @@ describe('Деньги, S9, A4 и даты на реальной PostgreSQL', ()
it('[K9/D3] официант по пресету получает оплату смены из параметров пресета', async () => { it('[K9/D3] официант по пресету получает оплату смены из параметров пресета', async () => {
const [unit] = await createOrgUnits(1); const [unit] = await createOrgUnits(1);
const [employee] = await importEmployees(1); const [employee] = await importEmployees(1);
const shiftRate = 111_111; // синтетические 1 111,11 ₽ за смену const shiftRate = 111_100; // синтетические 1 111,00 ₽ за смену (кратно рублю, см. округление)
// Предполагаемый контракт: параметры пресета передаются объектом `params` // Предполагаемый контракт: параметры пресета передаются объектом `params`
// (ключи — param_declarations правила). // (ключи — param_declarations правила).
const assign = await api('PUT', `/employees/${employee!.id}/pay-assignment`, { const assign = await api('PUT', `/employees/${employee!.id}/pay-assignment`, {

View file

@ -138,8 +138,12 @@ export async function hourlyRuleId(): Promise<string> {
return hourly!.id; return hourly!.id;
} }
/** Синтетическая ставка 123,45 ₽/ч (заведомо не реальная сумма). */ /**
export const SYNTHETIC_RATE_MINOR = 12_345; * Синтетическая ставка 123,00 ₽/ч (заведомо не реальная сумма). Кратна рублю: расчёт
* округляет строку до rounding_unit_minor (по умолчанию 100 коп.), и 8 ч × ставка
* должны совпадать с начислением без учёта округления.
*/
export const SYNTHETIC_RATE_MINOR = 12_300;
export async function assignHourly(employeeId: string, orgUnitId: string | null) { export async function assignHourly(employeeId: string, orgUnitId: string | null) {
const response = await api('PUT', `/employees/${employeeId}/pay-assignment`, { const response = await api('PUT', `/employees/${employeeId}/pay-assignment`, {