diff --git a/web/src/utils/consolidations.test.ts b/web/src/utils/consolidations.test.ts index 1624a9e..1c74617 100644 --- a/web/src/utils/consolidations.test.ts +++ b/web/src/utils/consolidations.test.ts @@ -214,10 +214,17 @@ describe('counterPairsWarning', () => { expect(w.headline).toBe('Нет встречных записей: 1 пара у 1 участника.'); expect(w.details.endsWith('Ещё 1260 строк без ИНН учтены как внешние.')).toBe(true); }); - it('пять пар у трёх участников', () => { - const ps = [pair('a', 'b'), pair('a', 'c'), pair('a', 'd'), pair('e', 'b'), pair('f', 'c')]; + it('пять пар у трёх участников (M — разные missing_id)', () => { + const ps = [pair('a', 'c'), pair('a', 'd'), pair('a', 'e'), pair('b', 'c'), pair('b', 'd')]; expect(counterPairsWarning(ps, 5).headline).toBe('Нет встречных записей: 5 пар у 3 участников.'); }); + it('M считает missing_id, а не holder_id', () => { + const ps = [pair('a', 'b'), pair('a', 'c'), pair('d', 'b'), pair('e', 'b'), pair('f', 'b')]; + expect(counterPairsWarning(ps, 5).headline).toBe('Нет встречных записей: 5 пар у 2 участников.'); + }); + it('две пары у двух участников', () => { + expect(counterPairsWarning([pair('a', 'b'), pair('a', 'c')], 1).headline).toBe('Нет встречных записей: 2 пары у 2 участников.'); + }); it('без строк без ИНН', () => { expect(counterPairsWarning([pair('a', 'b')], 0).details).toBe( 'Возможно, контрагент среди строк без ИНН, его ИНН не найден в справочнике или это пропуск в учёте.', diff --git a/web/src/utils/consolidations.ts b/web/src/utils/consolidations.ts index bf42a44..8a23293 100644 --- a/web/src/utils/consolidations.ts +++ b/web/src/utils/consolidations.ts @@ -150,13 +150,10 @@ export const rememberCounterPairsShown = ( /** Тексты модалки «Проверьте встречные записи участников». */ export const counterPairsWarning = (pairs: readonly CounterPairOut[], unmappedTotal: number): { headline: string; details: string } => { - const holders = new Set(pairs.map((p) => p.holder_id)).size; + const missing = new Set(pairs.map((p) => p.missing_id)).size; const base = 'Возможно, контрагент среди строк без ИНН, его ИНН не найден в справочнике или это пропуск в учёте.'; return { - headline: `Нет встречных записей: ${pairs.length} ${pluralRu(pairs.length, ['пара', 'пары', 'пар'])} у ${holders} ${pluralRu(holders, ['участника', 'участников', 'участников'])}.`, - details: - unmappedTotal > 0 - ? `${base} Ещё ${unmappedTotal} ${pluralRu(unmappedTotal, ['строка', 'строки', 'строк'])} без ИНН учтены как внешние.` - : base, + headline: `Нет встречных записей: ${pairs.length} ${pluralRu(pairs.length, ['пара', 'пары', 'пар'])} у ${missing} ${pluralRu(missing, ['участника', 'участников', 'участников'])}.`, + details: unmappedTotal > 0 ? `${base} Ещё ${unmappedTotal} строк без ИНН учтены как внешние.` : base, }; };