Andrey Epifancev 8513a8d10e feat(#195): типы и правила показа пар без встречных записей (web)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 18:51:45 +04:00

41 lines
1.9 KiB
TypeScript

import { api, apiFetchBlob } from '../../api/client';
import type {
CandidateOut,
ConsolidatedRowOut,
MapCounterpartyIn,
MapCounterpartyOut,
OsvFilters,
OsvSummaryOut,
Page,
} from '../../types/api';
export function buildOsvQuery(filters: OsvFilters, page?: { limit: number; offset: number }): string {
const params = new URLSearchParams();
if (filters.legal_entity_id) params.set('legal_entity_id', filters.legal_entity_id);
if (filters.account_root) params.set('account_root', filters.account_root);
if (filters.counterparty_type) params.set('counterparty_type', filters.counterparty_type);
if (filters.unmapped) params.set('unmapped', 'true');
if (filters.counterparty_id) params.set('counterparty_id', filters.counterparty_id);
const q = filters.q?.trim();
if (q) params.set('q', q);
if (page) {
params.set('limit', String(page.limit));
params.set('offset', String(page.offset));
}
const s = params.toString();
return s ? `?${s}` : '';
}
const base = (versionId: string) => `/consolidations/versions/${versionId}/osv`;
export const getConsolidatedOsv = (versionId: string, filters: OsvFilters, limit: number, offset: number) =>
api.get<Page<ConsolidatedRowOut>>(`${base(versionId)}${buildOsvQuery(filters, { limit, offset })}`);
export const getOsvSummary = (versionId: string) => api.get<OsvSummaryOut>(`${base(versionId)}/summary`);
export const exportOsv = (versionId: string, filters: OsvFilters) => apiFetchBlob(`${base(versionId)}/export${buildOsvQuery(filters)}`);
/** `query` — из `buildCandidatesQuery` (виджет ConsolidatedOsv). */
export const getCounterpartyCandidates = (versionId: string, query: string) =>
api.get<CandidateOut[]>(`/consolidations/versions/${versionId}/counterparty-candidates${query}`);
export const mapCounterparty = (versionId: string, entryId: string, body: MapCounterpartyIn) =>
api.post<MapCounterpartyOut>(`${base(versionId)}/entries/${entryId}/counterparty`, body);