diff --git a/api/src/parser/classify.py b/api/src/parser/classify.py index 61dd630..f768d7f 100644 --- a/api/src/parser/classify.py +++ b/api/src/parser/classify.py @@ -112,8 +112,8 @@ def _find_total(sheet: Sheet, header: TableHeader, rows: Sequence[int], rules: R строкой «Итого»), поэтому «корневой уровень» проверяется по оформлению: outline level и отступ строки не больше, чем у любой другой строки таблицы. Так контрагент «Итого-Сервис» в середине данных не TOTAL (за ним есть настоящее «Итого»), а последний «Итого-Сервис» под счётом с outline/отступом — тоже не TOTAL (T3.3). - Вторая итоговая строка («Итого развернутое», `total_row_secondary`) основной не бывает: основная — «Итого» перед ней; - без обычной «Итого» вторая строка служит единственной итоговой. + Вторая итоговая строка («Итого развернутое», `total_row_secondary`) основной не бывает: основная — «Итого» + перед ней; без обычной «Итого» вторая строка служит единственной итоговой. Известный риск: на листе без outline и отступов последняя строка-контрагент «Итого-…» при отсутствии настоящего «Итого» станет TOTAL; это ловит проверка «TOTAL = корень» (§1.4). """ diff --git a/api/src/parser/hierarchy.py b/api/src/parser/hierarchy.py index 1ce8a1e..fcc9ef6 100644 --- a/api/src/parser/hierarchy.py +++ b/api/src/parser/hierarchy.py @@ -269,7 +269,8 @@ def resolve_levels(rows: Sequence[BodyRow], total_row: int | None, deadline: Dea """Первая стратегия каскада, давшая непротиворечивое дерево; иначе `InvalidFormatError`. «Итого» (`total_row`) и строки после неё (вторые итоговые) в стратегии не передаются и получают уровень 0: это - контрольная сумма документа, а не ребёнок последнего счёта. Меньше двух строк, кроме «Итого», — тривиальное дерево корней `TRIVIAL_STRATEGY`. + контрольная сумма документа, а не ребёнок последнего счёта. Меньше двух строк, кроме «Итого», — тривиальное + дерево корней `TRIVIAL_STRATEGY`. """ # «Итого» и вторые итоговые строки за ней («Итого развернутое») — не данные: уровень 0 без участия стратегий totals = [] if total_row is None else [item for item in rows if item.row >= total_row]