## 1. Типы контракта, клиент API, флаг фейка - [x] 1.1 Типы `src/types/corrections.ts` по контракту `docs/dev/api-contract-corrections.md` - [x] 1.2 Клиент `src/services/api/corrections.ts` (таблица, сохранение, отмена, разнесение, экспорт) и флаг `Config.CORRECTIONS_MOCK` ## 2. Фейк контракта и модель таблицы - [x] 2.1 Фейк `correctionsFake` и данные дизайна `mockData` / `mockCalc` под флагом `REACT_APP_CORRECTIONS_MOCK` - [x] 2.2 Чистая модель таблицы `tableModel.ts`: строки, фильтры, пресет правила, итоги ## 3. Модель окна корректировки и черновик - [x] 3.1 `editorModel.ts`: состояние окна, проверки ввода, контроль баланса, кандидаты для выбора строки - [x] 3.2 Деньги копейками в `utils/money.ts`, черновик в `draftStorage.ts` ## 4. Вкладка и таблица только на чтение - [x] 4.1 Вкладка «Таблица корректировки»: загрузка, ошибка с «Повторить», пусто, экспорт, полный экран - [x] 4.2 Таблица с группами колонок, раскрытием агрегата, нераспределёнными записями, «Итого» - [x] 4.3 Панель: отображение, пресет правила, тип записи, единицы, знаки, сброс фильтров, настройка таблицы; фильтры в заголовках ## 5. Решения по строкам, отмена корректировки, только чтение - [x] 5.1 Флажок «Учитывать в КФО» и меню строки (перенос в правило, убрать из правила, вернуть к автоматике) - [x] 5.2 Отмена корректировки с комментарием, подсказки режима «только чтение», обработка 409 ## 6. Окно «Корректировка операции» - [x] 6.1 Окно: стороны, строки ОСВ, распределение корректировки, контроль баланса, комментарий, сохранение - [x] 6.2 Выбор нераспределённой строки (picker), черновик, плашки конфликта, доступность с клавиатуры ## 7. Сверка с дизайном, проверки, документация - [x] 7.1 Проход сценариев спеки в браузере на фейке (ширина 1920, headless Chrome по CDP) и сверка частей экрана с дизайном. Проверено: таблица и группы колонок, панель, фильтры в заголовках, раскрытие, нераспределённые, пресет, настройка таблицы, окно корректировки, решения по строкам (в т.ч. повторный INCLUDE), «Убрать из правила», ошибка загрузки с «Повторить», экспорт, `composition_changed` и «черновик». Не проверено — вынесено в 8.1: полный экран, 409 / `CORRECTION_VERSION_CONFLICT`, недоступный `localStorage`, «Вернуть к автоматике» внутри агрегата, реальный API - [x] 7.2 `make web-check`, `npm test`, `npm run lint`, `openspec validate corrections-table-ui --strict` - [x] 7.3 README (флаг фейка) и ARCHITECTURE (виджет `CorrectionTable`) ## 8. Подключение к API (после слияния AURORA-1540) - [x] 8.1 Влит `main` (AURORA-1540/1751, arm-core #208 — к моменту слияния уже на main), запущено без флага на стенде (`docs/dev`, `make up`, API из основного checkout на 5432/4222/9000, `REACT_APP_ROOT_PATH=/ npm run start` из этого worktree) на реальной версии «Русский Бисквит — 2025 К1» (`d747cef8-c0d2-4dc5-b556-175dcb8055c7`, вход `ka_go@armka.local`). Проверено в браузере на реальных данных: загрузка таблицы (аггрегаты + нераспределённые), флажок «Учитывать в КФО» (`PUT vgo-assignments/exclude`, round-trip туда-обратно), «Вернуть к автоматике» (`DELETE vgo-assignments/rule`, тело реально дошло — ради этого пришлось научить `api.del` отправлять тело, см. 8.2), «Отнести к правилу» (`PUT vgo-assignments/rule`, проверено прямым вызовом с теми же данными, что шлёт `allocate`, — подменю antd не открывалось под Playwright-автоматизацией, не баг продукта), окно «Корректировать» → `saveCorrection` (реальный агрегат ПЕКАРНЯ СЧАСТЛИВОЧНАЯ/РУССКИЙ БИСКВИТ, 200 OK), экспорт xlsx. Консоль браузера чистая на всех шагах. Не проверено (нет готовых данных/инфраструктуры под это в локальном стенде, не блокирует подключение): полноэкранный режим; 409/`CORRECTION_VERSION_CONFLICT`; приватное окно без `localStorage`; именные сценарии спеки Сатурн — Архол, Бековский 62.01/60.02/62.03/76.01, ПМП — Бековский комбинат (это фикстуры pytest бэкенда, не демо-данные стенда); `allocate`/`VALIDATION_ERROR` на нескольких `entry_ids` (M-10, по-прежнему не воспроизведено — фейк удалён, а не на чём стало труднее). Оставляю как переносимый пункт проверки на QA/контур, не блокер PR. - [x] 8.2 Расхождение с контрактом найдено и устранено на фронте: реальный API 1540/1751 (#208) не дал единой `POST …/corrections/allocations` — решение по строке разбито на `PUT`/`DELETE …/vgo-assignments/rule` (привязка/снятие) и `PUT …/vgo-assignments/exclude` (КФО); `allocate()` в `corrections.ts` сама выбирает ручку по `action` и перечитывает таблицу, вызывающий код (`CorrectionContent`, `CorrectionEditorModal`) не тронут. `api.del` (`api/client.ts`) научен отправлять тело — раньше только `DELETE` без тела. Попутно R-35 (design.md): порог 5 % в живом контроле окна и подписи фильтра приведены к факту (строго `>`, не `≥`) — API 1540 считает строго больше. Фейк контракта (`correctionsFake.ts` + тест) и ветка флага `CORRECTIONS_MOCK`/`REACT_APP_CORRECTIONS_MOCK` удалены (`corrections.ts`, `config.ts`); `mockData`/`mockCalc` остались тестовыми фикстурами (R-27), не тронуты. README/ARCHITECTURE/spec.md обновлены под реальный контракт. - [x] 8.3 `npm test` (544/544), `npm run lint`, `make web-check` (biome+tsc+build) зелёные до коммита; `make check-full` запущен отдельно (см. итог прогона в PR) — не блокирует коммит правок, PR открыт по готовности. ## 9. Ответы Лысенко 29.10 (AURORA-1395, #9920570) и WIP API 1540 (arm-core #208) - [x] 9.1 Убрать отзыв корректировки и `status` из тела `PUT` (п. 9; R-29, R-30) - [x] 9.2 «Учитывать в КФО»: агрегат закреплён, у строк агрегата флажка нет, у нераспределённых — `EXCLUDE` / `INCLUDE`; `excluded` у строки агрегата убран (п. 4; R-31, R-32) - [x] 9.3 Строка баланса владельца у нераспределённой (`line_code`), фильтр «Строка баланса» по ней (п. 11; R-33) - [x] 9.4 Фейк: `ENTRY_ALLOCATED` для `EXCLUDE`/`INCLUDE` строки агрегата, `ENTRY_EXCLUDED` для `ASSIGN` исключённой; проверка на фейке в браузере (агрегат, раскрытие, нераспределённые, «×» в окне) - [x] 9.5 Спека, design.md, README/ARCHITECTURE; контракт docs — отдельным PR