Andrey Epifancev 7e8b035b17 Task 8: подключение таблицы корректировок к реальному API (#208)
Реальный контракт AURORA-1540/1751 не дал единой POST .../allocations:
решение по строке разбито на PUT/DELETE .../vgo-assignments/rule
(привязка/снятие правила) и PUT .../vgo-assignments/exclude (КФО),
ответ — список VgoAssignmentOut, а не вся таблица. allocate()
маршрутизирует по action и перечитывает таблицу сама — вызывающий код
(CorrectionContent, CorrectionEditorModal) не менялся.

Фейк контракта (CORRECTIONS_MOCK) убран — API уже есть. mockData/mockCalc
остаются тестовыми фикстурами (R-27).

Проверено на реальном стенде (Русский Бисквит — 2025 К1): загрузка
таблицы, EXCLUDE/INCLUDE, ASSIGN, снятие правила, сохранение
корректировки, экспорт — без ошибок в консоли.
2026-11-02 21:08:20 +04:00

8.9 KiB
Raw Blame History

1. Типы контракта, клиент API, флаг фейка

  • 1.1 Типы src/types/corrections.ts по контракту docs/dev/api-contract-corrections.md
  • 1.2 Клиент src/services/api/corrections.ts (таблица, сохранение, отмена, разнесение, экспорт) и флаг Config.CORRECTIONS_MOCK

2. Фейк контракта и модель таблицы

  • 2.1 Фейк correctionsFake и данные дизайна mockData / mockCalc под флагом REACT_APP_CORRECTIONS_MOCK
  • 2.2 Чистая модель таблицы tableModel.ts: строки, фильтры, пресет правила, итоги

3. Модель окна корректировки и черновик

  • 3.1 editorModel.ts: состояние окна, проверки ввода, контроль баланса, кандидаты для выбора строки
  • 3.2 Деньги копейками в utils/money.ts, черновик в draftStorage.ts

4. Вкладка и таблица только на чтение

  • 4.1 Вкладка «Таблица корректировки»: загрузка, ошибка с «Повторить», пусто, экспорт, полный экран
  • 4.2 Таблица с группами колонок, раскрытием агрегата, нераспределёнными записями, «Итого»
  • 4.3 Панель: отображение, пресет правила, тип записи, единицы, знаки, сброс фильтров, настройка таблицы; фильтры в заголовках

5. Решения по строкам, отмена корректировки, только чтение

  • 5.1 Флажок «Учитывать в КФО» и меню строки (перенос в правило, убрать из правила, вернуть к автоматике)
  • 5.2 Отмена корректировки с комментарием, подсказки режима «только чтение», обработка 409

6. Окно «Корректировка операции»

  • 6.1 Окно: стороны, строки ОСВ, распределение корректировки, контроль баланса, комментарий, сохранение
  • 6.2 Выбор нераспределённой строки (picker), черновик, плашки конфликта, доступность с клавиатуры

7. Сверка с дизайном, проверки, документация

  • 7.1 Проход сценариев спеки в браузере на фейке (ширина 1920, headless Chrome по CDP) и сверка частей экрана с дизайном. Проверено: таблица и группы колонок, панель, фильтры в заголовках, раскрытие, нераспределённые, пресет, настройка таблицы, окно корректировки, решения по строкам (в т.ч. повторный INCLUDE), «Убрать из правила», ошибка загрузки с «Повторить», экспорт, composition_changed и «черновик». Не проверено — вынесено в 8.1: полный экран, 409 / CORRECTION_VERSION_CONFLICT, недоступный localStorage, «Вернуть к автоматике» внутри агрегата, реальный API
  • 7.2 make web-check, npm test, npm run lint, openspec validate corrections-table-ui --strict
  • 7.3 README (флаг фейка) и ARCHITECTURE (виджет CorrectionTable)

8. Подключение к API (после слияния AURORA-1540)

  • 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.
  • 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 обновлены под реальный контракт.
  • 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)

  • 9.1 Убрать отзыв корректировки и status из тела PUT (п. 9; R-29, R-30)
  • 9.2 «Учитывать в КФО»: агрегат закреплён, у строк агрегата флажка нет, у нераспределённых — EXCLUDE / INCLUDE; excluded у строки агрегата убран (п. 4; R-31, R-32)
  • 9.3 Строка баланса владельца у нераспределённой (line_code), фильтр «Строка баланса» по ней (п. 11; R-33)
  • 9.4 Фейк: ENTRY_ALLOCATED для EXCLUDE/INCLUDE строки агрегата, ENTRY_EXCLUDED для ASSIGN исключённой; проверка на фейке в браузере (агрегат, раскрытие, нераспределённые, «×» в окне)
  • 9.5 Спека, design.md, README/ARCHITECTURE; контракт docs — отдельным PR