arm-web/src/utils/labels.test.ts
Andrey Epifancev f83b03543e feat(types): API формы v5.19 — статусы строк, needs_review, issues, предупреждения файла (#43)
- types/api.ts: LineStatus, Severity, IssueKind, PeriodKind, FileWarningOut, IssueOut, EditionLineOut,
  IssueCountsOut, CellTarget, LinePatch, ColumnPatch; новые поля StatementHeaderOut, ColumnOut, ValueOut,
  LineOut, FailedCheckOut, StatementOut (form_variant, issues, edition_lines), DocumentBrief (issue_counts),
  DocumentOut (issues), JobBrief.warnings — FileWarningOut[].
- statementGrid.ts: GridRow получает статус строки, номер строки, код как распознан, флаги needs_review /
  is_confirmed / codeModified; cellFlags: внимание только по needs_review, новый флаг confirmed.
- labels.ts: lineStatusLabel, severityLabel.
- фикстура __fixtures__/statement-v2.json (БАЛАНС 2025 Q3, NEEDS_CHECK): 16 строк × 2 колонки, у каждой пары ValueOut.
- тесты: переносы полей v2 и покрытие пар строка × колонка, cellFlags по needs_review, подписи; хелперы
  row() / v() / gridRow / doc() дополнены значениями по умолчанию.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
2026-10-18 13:15:29 +04:00

89 lines
3.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { describe, expect, it } from 'vitest';
import {
counterpartyTypeLabel,
documentStatusLabel,
documentTypeLabel,
fileStatusLabel,
lineStatusLabel,
matchKindLabel,
periodLabel,
quarterLabel,
severityLabel,
} from './labels';
import { osvPeriodLabel, quarterShortLabel } from './labels';
describe('labels', () => {
it('тип документа', () => {
expect(documentTypeLabel('OSV', '60.01')).toBe('ОСВ 60.01');
expect(documentTypeLabel('OSV', null)).toBe('ОСВ');
expect(documentTypeLabel('BALANCE', null)).toBe('Бух. баланс');
expect(documentTypeLabel('INCOME', null)).toBe('ОФР');
expect(documentTypeLabel('DISCLOSURE', null)).toBe('Расшифровка');
expect(documentTypeLabel('OTHER', null)).toBe('Прочее');
});
it('квартал', () => {
expect(quarterLabel('Q1')).toBe('1 квартал');
expect(quarterLabel('Q3')).toBe('3 квартал');
});
it('период', () => {
expect(periodLabel(2024, 'Q1', false)).toBe('2024 К1');
// нарастающий итог за Q1 — это и есть первый квартал (как в макете [39])
expect(periodLabel(2024, 'Q1', true)).toBe('2024 К1');
expect(periodLabel(2024, 'Q3', true)).toBe('2024 · 9 мес.');
expect(periodLabel(2024, 'Q4', true)).toBe('2024 · 12 мес.');
expect(periodLabel(2024, null, null)).toBe('период не определён');
expect(periodLabel(null, null, null)).toBe('период не определён');
});
it('статусы', () => {
expect(documentStatusLabel('NEEDS_CHECK')).toBe('Требуется проверка');
expect(documentStatusLabel('RECOGNIZED')).toBe('Требуется проверка');
expect(documentStatusLabel('CONFIRMED')).toBe('Загружен');
expect(documentStatusLabel('ERROR')).toBe('Ошибка');
expect(fileStatusLabel('UPLOADED')).toBe('Обработка');
expect(fileStatusLabel('PROCESSING')).toBe('Обработка');
expect(fileStatusLabel('PROCESSED')).toBe('Обработан');
expect(fileStatusLabel('ERROR')).toBe('Ошибка');
expect(fileStatusLabel('SUPERSEDED')).toBe('Заменён');
});
});
describe('подписи свода', () => {
it('признак контрагента', () => {
expect(counterpartyTypeLabel('GSK')).toBe('ГСК');
expect(counterpartyTypeLabel('GK')).toBe('ГК');
expect(counterpartyTypeLabel('EXTERNAL')).toBe('Внешний');
});
it('способ сопоставления', () => {
expect(matchKindLabel('INN')).toBe('по ИНН');
expect(matchKindLabel('NAME')).toBe('по имени');
expect(matchKindLabel('ALIAS')).toBe('по алиасу');
expect(matchKindLabel('MANUAL')).toBe('вручную');
expect(matchKindLabel('PROPAGATED')).toBe('автоприменение');
expect(matchKindLabel(null)).toBe('не сопоставлен');
});
});
describe('подписи периода', () => {
it('квартал коротко', () => {
expect(quarterShortLabel('Q3')).toBe('К3');
});
it('период строки свода', () => {
expect(osvPeriodLabel('2024 Q3')).toBe('9 мес. 2024 г.');
expect(osvPeriodLabel('2025 Q1')).toBe('3 мес. 2025 г.');
expect(osvPeriodLabel('странное')).toBe('странное');
});
});
describe('подписи формы v5.19', () => {
it('статус строки', () => {
expect(lineStatusLabel('ok')).toBe('Строка формы');
expect(lineStatusLabel('unreadable')).toBe('Код не распознан');
expect(lineStatusLabel('missing')).toBe('Кода нет');
expect(lineStatusLabel('detail')).toBe('Расшифровка');
});
it('уровень замечания', () => {
expect(severityLabel('error')).toBe('Ошибка');
expect(severityLabel('info')).toBe('Информация');
});
});