add-preset-shahmatka #141

Merged
aep merged 24 commits from add-preset-shahmatka into main 2026-10-22 17:57:14 +03:00
Showing only changes of commit 02d67ff733 - Show all commits

View File

@ -110,7 +110,7 @@ def _source_row(entry: OsvEntry) -> domain.SourceRow:
def _candidate_ids(rows: Sequence[domain.SourceRow], index: CounterpartyIndex) -> set[uuid.UUID]:
"""Идентификаторы контрагентов, имена которых понадобятся `build`: хранимые `counterparty_id` и результат дорезолва
"""Идентификаторы контрагентов для `build_with_members`: хранимые `counterparty_id` и результат дорезолва
для строк без него (`resolve` — по словарям индекса, без обращений к БД; ключ склейки включает имя и ИНН, поэтому
результат для представителя группы равен результату для любой её строки)."""
ids: set[uuid.UUID] = set()
@ -147,12 +147,8 @@ class ConsolidatedOsvService:
self._session = session
self._scope = scope
async def build(self, version_id: uuid.UUID) -> ConsolidatedOsvBuildResult:
"""Свод версии и данные его расчёта; версия вне видимости — 404."""
return await self.build_with_members(version_id)
async def build_with_members(self, version_id: uuid.UUID) -> ConsolidatedOsvBuildResult:
"""Свод и участники периметра, загруженные при его расчёте."""
"""Свод и участники периметра, загруженные при его расчёте; версия вне видимости — 404."""
found = await repo.get_version(self._session, self._scope, version_id)
if found is None:
raise NotFoundError(VERSION_NOT_FOUND)
@ -191,7 +187,7 @@ class ConsolidatedOsvService:
async def page(self, version_id: uuid.UUID, f: OsvFilters, page: OsvPageParams) -> Page[ConsolidatedRowOut]:
"""Страница свода после фильтров: `total` — число строк после фильтра, срез — в памяти (порядок D-16)."""
result = await self.build(version_id)
result = await self.build_with_members(version_id)
rows = domain.apply_filter(result.consolidated.rows, domain_filter(f))
window = rows[page.offset : page.offset + page.limit]
return Page[ConsolidatedRowOut](
@ -202,7 +198,7 @@ class ConsolidatedOsvService:
"""xlsx сводной ОСВ (spec «Экспорт xlsx», D-14): строки после тех же фильтров, что у `page`, без пагинации, в
порядке D-16; лист пробелов — по своду целиком. Имя файла — `svod-osv_<ГК>_<год>-<квартал>_v<n>.xlsx` (без
percent-кодирования: оно в маршруте). `audit_event(EXPORT)` пишется после сборки книги, в транзакции запроса."""
result = await self.build(version_id)
result = await self.build_with_members(version_id)
rows = domain.apply_filter(result.consolidated.rows, domain_filter(f))
content = await run_in_threadpool(build_workbook, result.consolidated, rows)
group_name = (
@ -228,7 +224,7 @@ class ConsolidatedOsvService:
async def summary(self, version_id: uuid.UUID) -> OsvSummaryOut:
"""Сводка: строки, несопоставленные, автосопоставленные по имени/алиасу, ОСВ-документы версии и пробелы."""
result = await self.build(version_id)
result = await self.build_with_members(version_id)
rows_total, unmapped_total, auto_matched_total = domain.summary(result.consolidated)
return OsvSummaryOut(
rows_total=rows_total,
@ -241,7 +237,7 @@ class ConsolidatedOsvService:
async def row_for_entry(self, version_id: uuid.UUID, entry_id: uuid.UUID) -> ConsolidatedRowOut | None:
"""Строка свода, в `entry_ids` которой есть `entry_id`; `None` — строка в своде не участвует (пара с пробелом
или документ не выбран источником при наличии нарастающего)."""
result = await self.build(version_id)
result = await self.build_with_members(version_id)
row = next((row for row in result.consolidated.rows if entry_id in row.entry_ids), None)
return None if row is None else row_out(row)