diff --git a/src/widgets/DocumentReview/statementDraft.test.ts b/src/widgets/DocumentReview/statementDraft.test.ts index d6b41e2..b9f21bf 100644 --- a/src/widgets/DocumentReview/statementDraft.test.ts +++ b/src/widgets/DocumentReview/statementDraft.test.ts @@ -116,7 +116,20 @@ describe('колонки', () => { describe('шапка', () => { it('organization_name обрезается', () => { - expect(bodyOf({ header: { organization_name: ' ООО Ромашка ' } })?.header).toEqual({ organization_name: 'ООО Ромашка' }); + expect(bodyOf({ header: { organization_name: ' ООО Ромашка-2 ' } })?.header).toEqual({ organization_name: 'ООО Ромашка-2' }); + }); + it('значение, равное текущему (после обрезки), не отправляется', () => { + expect(bodyOf({ header: { organization_name: ' ООО Ромашка ' } })).toBeNull(); + expect(bodyOf({ header: { inn: '7700000000', units: ' тыс. руб. ' } })).toBeNull(); + }); + it('введено и стёрто — тела нет', () => { + expect(bodyOf({ header: { inn: ' ', organization_name: '' } })).toBeNull(); + }); + it('дата из needs_review_fields с тем же значением — подтверждение, уходит', () => { + expect(bodyOf({ header: { report_date: '2025-09-30' } })?.header).toEqual({ report_date: '2025-09-30' }); + const noReview = { rows, header: { ...statement.header, needs_review_fields: [] } }; + const res = buildStatementPatch(draftOf({ header: { report_date: '2025-09-30' } }), noReview); + expect(res).toEqual({ ok: true, body: null }); }); it('длиннее 1000 символов — ошибка header', () => { expect(errorsOf({ header: { organization_name: 'я'.repeat(1001) } })[0]).toMatchObject({ kind: 'header', key: 'organization_name' }); diff --git a/src/widgets/DocumentReview/statementDraft.ts b/src/widgets/DocumentReview/statementDraft.ts index 2de2b26..102f50d 100644 --- a/src/widgets/DocumentReview/statementDraft.ts +++ b/src/widgets/DocumentReview/statementDraft.ts @@ -115,7 +115,12 @@ export function buildStatementPatch( const header: NonNullable = {}; for (const field of ['organization_name', 'inn', 'report_date', 'units'] as const) { const text = draft.header[field]?.trim(); - if (text) header[field] = text; + if (!text) continue; + const current = field === 'organization_name' ? ctx.header.organization_name : ctx.header[field].value; + // То же значение не шлём; исключение — дата из needs_review_fields: там то же значение и есть подтверждение (P6-11) + const confirmsDate = field === 'report_date' && (ctx.header.needs_review_fields ?? []).includes('report_date'); + if (text === current?.trim() && !confirmsDate) continue; + header[field] = text; } if (draft.header.confirm_report_date && !header.report_date && ctx.header.report_date.value) { header.report_date = ctx.header.report_date.value;