From cb36ec88406af71d799f53f803acf1810dfbbb50 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sun, 18 Oct 2026 22:52:29 +0400 Subject: [PATCH 1/2] =?UTF-8?q?=D0=9D=D0=B0=D1=80=D1=83=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BE=D0=BA?= =?UTF-8?q?:=20expected/actual=20=D0=B8=20=D0=B8=D0=BD=D0=B4=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=20=D0=BA=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA=D0=B8=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B3=D1=83=D1=82=20=D0=B1=D1=8B=D1=82=D1=8C=20null=20(#?= =?UTF-8?q?45)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Типы FailedCheckOut по API ядра (P3-30, P3-60); подпись «нет строки цели», «Без колонки» для -1/null; общий ключ списка. Co-Authored-By: Claude Opus 5.5 --- src/types/api.ts | 8 ++-- src/widgets/DocumentReview/ChecksPanel.tsx | 9 ++-- src/widgets/DocumentReview/OsvDocument.tsx | 5 ++- .../DocumentReview/StatementReview.tsx | 5 ++- src/widgets/DocumentReview/checkText.test.ts | 41 +++++++++++++++++++ src/widgets/DocumentReview/checkText.ts | 25 +++++++++++ 6 files changed, 80 insertions(+), 13 deletions(-) create mode 100644 src/widgets/DocumentReview/checkText.test.ts create mode 100644 src/widgets/DocumentReview/checkText.ts diff --git a/src/types/api.ts b/src/types/api.ts index e068d0c..05b62ea 100644 --- a/src/types/api.ts +++ b/src/types/api.ts @@ -228,10 +228,12 @@ export interface UnresolvedLineOut { line_code_text: string | null; } export interface FailedCheckOut { - column_index: number; + /** -1 в GET …/statement и null в теле 409 — нарушение без колонки (P3-60) */ + column_index: number | null; relation: string; - expected: string; - actual: string; + /** null — у связи нет строки цели (P3-30) */ + expected: string | null; + actual: string | null; codes: string[]; line_ids: string[]; } diff --git a/src/widgets/DocumentReview/ChecksPanel.tsx b/src/widgets/DocumentReview/ChecksPanel.tsx index 4955519..d626ec9 100644 --- a/src/widgets/DocumentReview/ChecksPanel.tsx +++ b/src/widgets/DocumentReview/ChecksPanel.tsx @@ -1,10 +1,7 @@ import { Alert, Button, Input, Modal, Space, Tooltip, Typography } from 'antd'; import { useState } from 'react'; import type { ChecksOut, FailedCheckOut } from '../../types/api'; -import { formatAmount } from '../../utils/money'; - -export const failureText = (f: FailedCheckOut) => - `Колонка ${f.column_index + 1}: ${f.relation} — ожидалось ${formatAmount(f.expected)}, получено ${formatAmount(f.actual)}`; +import { expectedActualText, failureKey, failureText } from './checkText'; type Props = { checks: ChecksOut; @@ -20,7 +17,7 @@ type Props = { const failureList = (list: FailedCheckOut[], onShow?: (key: string) => void) => (
{list.map((f) => ( -
+
{failureText(f)} {onShow && (f.line_ids ?? []).length > 0 && (