docs(openspec): решение №20 Среза 3b — отозвано (присутствие цели §7 осталось как в tabular-parser)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
This commit is contained in:
parent
51d322c8a7
commit
669719467f
@ -179,6 +179,6 @@ seed-dev` с нуля.
|
||||
| 17 | 2026-10-07 | R-7: список нарушений `CHECKS_NOT_PASSED` отдаётся в `detail.failures` (строки сумм), не в отдельном ключе `details` | единый формат ошибок ядра `{"detail": {"code","message", **extra}}` | — |
|
||||
| 18 | 2026-10-07 | R-8: при удалении файла (`DELETE /files/{id}`) комментарии `comment(object_type='document')` удалённых документов остаются в таблице | связь полиморфная, FK нет; чтение идёт через видимый документ, наружу строки не попадают; спека о судьбе комментариев молчит | осиротевшие строки `comment` (единицы на файл); чистка — отдельной задачей. **Закрыто (fix wave, T8.2): комментарии удаляются вместе с документами** в `delete_file_rows` — удаление файла и так обязано чистить зависимые от документов строки (формы ББ/ОФР, C-1), лишний `DELETE` дёшев, а осиротевшие строки не нужны никому |
|
||||
| 19 | 2026-10-07 | R-9: значения ячеек CSV чек-листа (название ЮЛ, ИНН) не нейтрализуются от формул Excel (`=`, `+`, `-`, `@`) | спека не требует; названия из справочника ЕЦП внутреннего контура | теоретическая формула в названии ЮЛ откроется в Excel как формула |
|
||||
| 20 | 2026-10-07 | R-11: цель проверки §7 присутствует в колонке, только если сумма в этой колонке не `NULL`; пустая ячейка цели — соотношение пропускается (как в tabular-parser при отсутствии значения), отсутствующий член правой части = 0 | ядро создаёт ячейку на каждую пару «строка × колонка» (D-2), по БД «нет записи значения» и «запись с `NULL`» неразличимы; иначе пустая ячейка итога давала бы ложное жёсткое нарушение | у tabular-parser запись значения с `amount = null` считается присутствующей (0); в ядре такая ячейка — отсутствующая |
|
||||
| 20 | 2026-10-07 | R-11 (отозван): предложенное финальным ревью изменение «цель §7 присутствует в колонке, только если сумма не `NULL`» отклонено и откатано; присутствие цели — наличие строки в форме, пустая сумма (`NULL`) = 0, как `_amounts` в tabular-parser | оба производителя (tabular-parser `lines.py`, scan-gateway `normalizer/ocr/document.py`) отдают значение на каждую колонку каждой кодированной строки, пустая ячейка — `amount = null`; парсер считает такую запись присутствующей, при ненулевых слагаемых даёт жёсткое нарушение; иное поведение отключало бы проверку итога правкой `amount = null` в обход акцепта | — (поведение не менялось; тест фиксирует нарушение при пустой цели) |
|
||||
| 21 | 2026-10-07 | R-12: `PATCH header.inn = null` → 422 `INVALID_INN` (очистить ИНН нельзя) | иначе очистка ИНН переключала бы `counterparty_check` на сверку по имени и обходила `MISMATCH`; спека: «10 или 12 цифр, иначе 422» | аналитик не может стереть мусорный ИНН — только заменить корректным |
|
||||
| 22 | 2026-10-07 | R-13: при повторе `column_index` в `columns[]` результата или повторе пары (строка, колонка) в `values[]` оставляется первое, пишется предупреждение маппинга (документ `NEEDS_CHECK`) | контракт повтор не запрещает; без этого `IntegrityError` ронял маппинг всего файла (I-1 финального ревью) | потеря второго значения при ошибке парсера (виден в предупреждении) |
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user