fix(web): шахматка красит и пару без встречной стороны (one_sided), как API и xlsx (AURORA-1651, ревью #158)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-22 23:47:07 +04:00
parent 2812897858
commit 814929819a
2 changed files with 8 additions and 2 deletions

View File

@ -25,7 +25,8 @@
Экран SHALL загружать матрицу при открытии вкладки (`GET /consolidations/versions/{id}/intercompany-matrix/all`) и показывать
таблицу: первая колонка «ДБ / КТ» (закреплена слева) — компании периметра в порядке ответа (`companies[]`), остальные колонки —
те же компании. В ячейке пары (строка A, колонка Б) SHALL быть три числа друг под другом: сумма `amount_a`, сумма `amount_b`
и расхождение `variance_amount` в скобках; расхождение выделяется красным, если `exceeds_threshold = true`. Если у пары есть
и расхождение `variance_amount` в скобках; расхождение выделяется красным, если `exceeds_threshold = true` или
`one_sided = true` (пара без встречной стороны; правило подсветки — как в API и xlsx, AURORA-1651). Если у пары есть
строки ОСВ без сопоставленного счёта (`skipped_osv_entry_count > 0`), рядом с первым числом SHALL показываться значок
предупреждения с подсказкой «Строк ОСВ без сопоставленного счёта: N; в суммы не вошли». Если ячейки пары в ответе нет
(в том числе на диагонали), SHALL показываться прочерк «—» на приглушённом фоне. Ниже таблицы закреплена строка «Итого»: до
@ -38,6 +39,10 @@
- **WHEN** для пары `(A, Б)` сервер вернул `exceeds_threshold = true`
- **THEN** третье число ячейки (расхождение) показано красным, первые два — обычным цветом
#### Scenario: Пара без встречной стороны
- **WHEN** для пары `(A, Б)` сервер вернул `amount_b = 0`, `one_sided = true`, `exceeds_threshold = false`
- **THEN** третье число ячейки (расхождение) показано красным
#### Scenario: Пары нет в ответе
- **WHEN** в `cells[]` нет ячейки для пары компаний
- **THEN** на их пересечении показан прочерк «—»

View File

@ -79,7 +79,8 @@ export const ConsolidationChessTable: React.FC<ConsolidationChessTableI> = ({
{chessTableCellFormatValue(cell.amount_a, units, decimals)}
</span>
<span>{chessTableCellFormatValue(cell.amount_b, units, decimals)}</span>
<span style={{ color: cell.exceeds_threshold ? 'red' : 'inherit' }}>
{/* подсветка как в API и xlsx: порог > 5 % или пара без встречной стороны (AURORA-1651) */}
<span style={{ color: cell.exceeds_threshold || cell.one_sided ? 'red' : 'inherit' }}>
({chessTableCellFormatValue(cell.variance_amount, units, decimals)})
</span>
</div>