- 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
89 lines
3.8 KiB
TypeScript
89 lines
3.8 KiB
TypeScript
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('Информация');
|
||
});
|
||
});
|