docs(web): таблица корректировок — README, ARCHITECTURE, tasks (#206)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-28 22:05:02 +04:00
parent 0667bca196
commit b499787d10
4 changed files with 85 additions and 0 deletions

View File

@ -200,3 +200,7 @@
| 28.10.2026 | R-18: суммы в окне показываются в рублях (`1 000 000,00`) независимо от единиц панели, а в полях ввода — как есть (`1000000.00`, пробелы запрещены R-4); у строки контроля без процента (`percent = null`, одна сторона 0) процент не пишется, у равенства — «= 0,00» | единицы панели — про таблицу; дизайн показывает «(100%)» там, где процент к меньшей стороне не определён, фронт его не выдумывает | расхождение с дизайном в тексте контроля |
| 28.10.2026 | R-19: агрегат исчез из ответа — окно открыто, стороны «—», «Сохранить» неактивна, пояснение в плашке; ключ PUT берётся из ответа, поэтому без агрегата сохранить нельзя | Review Focus плана | — |
| 28.10.2026 | R-20: в окне нет названий статей рядом с кодом («дт 1230 Дебиторская задолженность» в дизайне) | в ответе API названий статей нет, а фронт их не выдумывает | добавить поле `article_name` в контракт и показать |
| 28.10.2026 | R-21: код фейка (`correctionsFake`, `mockData`, `mockCalc`, ~20 КБ исходников) остаётся в прод-бандле при сборке без флага; сам не вырезал | `Config.CORRECTIONS_MOCK` — обычное чтение `process.env.REACT_APP_CORRECTIONS_MOCK`, импорты статические: `npm run build` без флага даёт строку «Требуется сверка» в `index_script`; вырезание требует динамического импорта фейка или `define`-константы в rsbuild — не мелкая правка; Task 8 фейк всё равно удаляет | лишние ~8 КБ gzip в бандле до Task 8; вопрос владельцу: делать ли вырезание сейчас |
| 28.10.2026 | R-22: Prettier и ESLint применены к файлам задачи (`npm run lint` падал на форматировании 17 файлов, на вложенных тернарниках окна и BOM-литерале в фейке); BOM — `\uFEFF`, поведение то же | `npm run lint` — шаг проверки Task 7 | — |
| 28.10.2026 | R-23: «Вернуть к автоматике» на нераспределённой строке в фейке только снимает «исключена» и не возвращает строку в правило | фейк не знает, какое правило было автоматическим; настоящее поведение — на бэкенде (1540) | аналитик на демо на фейке не увидит возврата; проверить при подключении API |
| 28.10.2026 | R-24: у агрегата флажок «Учитывать в КФО» — серый неактивный индикатор «Да / Частично / Нет», а в дизайне зелёный | решение 28.10 (флажок ставится на строках, у агрегата производное) | ответ по п. 4 «на агрегат» |

View File

@ -0,0 +1,42 @@
## 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)
- [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)
- [ ] 8.1 Влить `main`, запустить без флага на стенде на реальной версии, пройти сценарии спеки
- [ ] 8.2 Расхождения ответа с контрактом — правка фейка и типов или замечание в PR 1540; убрать фейк (`correctionsFake`, `mockData`, `mockCalc`) и флаг
- [ ] 8.3 `make check-full`, PR в `main`

View File

@ -39,6 +39,35 @@ SPA поверх API arm-core (`/api/v1`). Своих данных и бизне
| `NewConsoleModal/` (`CompanyOptionRow.tsx`) | [42] | «Новая консолидация»; строка ЮЛ с ИНН отдельной колонкой |
| `StatusChangeModal/ChangeStatusModal.tsx` | [33-01] | «Изменить статус» (`POST …/status`); открывается из шапки `layouts/ConsolidationReportPage.tsx` |
### Виджет «Таблица корректировки» (`widgets/CorrectionTable/`)
Требования — `../openspec/changes/corrections-table-ui/` (спека `corrections-table-ui`, решения — `design.md`). Контракт —
`../../docs/dev/api-contract-corrections.md`, типы — `src/types/corrections.ts`, вызовы — `src/services/api/corrections.ts`
(под флагом `REACT_APP_CORRECTIONS_MOCK` вместо HTTP — `correctionsFake.ts`, см. README).
Поток данных: страница отчёта → `CorrectionContent` (вкладка: загрузка, ошибка с «Повторить», экспорт, полный экран)
→ хук `useCorrectionTable` (запрос; применяется только ответ последнего запроса, `latestOnly`) → таблица целиком хранится в
родителе; `CorrectionTable` только рисует, фильтры/раскрытие/колонки — состояние родителя. Решение по строке (флажок,
меню) → `allocate` → таблица заменяется ответом; «Корректировать» → `CorrectionEditorModal` → `saveCorrection`
(`PUT`, `expected_version_no`) → подмена одного агрегата; отмена — `RevokeModal` → `revokeCorrection`. Черновик окна —
`localStorage` (`draftStorage`).
| Файл | Тип | Что делает |
|---|---|---|
| `tableModel.ts` | чистый | строки таблицы (агрегат, его строки ОСВ, нераспределённые), фильтры, пресет правила, итоги |
| `editorModel.ts` | чистый | состояние окна: исходное из агрегата, проверки ввода, контроль баланса, кандидаты в picker, пересборка |
| `editorView.ts` | чистый | тексты окна: ошибки сохранения, плашка черновика, строка контроля, подпись «Выбрать» |
| `readOnly.ts` | чистый | подсказки «только чтение», меню строки (`allocationMenu`), тело запроса разнесения |
| `draftStorage.ts` | чистый | черновик окна в `localStorage` (ключ: пользователь + версия + агрегат) |
| `columns.ts` | чистый | ключи и группы колонок для «Настройки таблицы» |
| `useCorrectionTable.ts` | хук | загрузка, `reload`/`replace`/`replaceAggregate` |
| `CorrectionContent.tsx`, `CorrectionToolbar.tsx`, `CorrectionTable.tsx`, `HeaderFilter.tsx` | компоненты | вкладка, панель, таблица с группами колонок, воронки в заголовках |
| `CorrectionEditorModal.tsx`, `EditorSide.tsx`, `AllocationPicker.tsx`, `RevokeModal.tsx` | компоненты | окно «Корректировка операции», сторона окна, выбор нераспределённой строки, отмена |
| `mockData.ts`, `mockCalc.ts` | фейк | данные дизайна и пересчёт агрегата; вырезаются при подключении API |
| `../../utils/money.ts` | чистый | деньги копейками (`toCents`, `percentOfSmaller`, порог 5 %) |
Чистые модули покрыты vitest (`*.test.ts`); компоненты тестов не имеют (нет DOM-библиотеки), их проверяют в браузере.
## Границы
- Сетевые запросы — только через `src/api/client.ts`; `fetch` напрямую не вызывается.
- `components/` не знают про store и API; `types/` ни от чего не зависят.

View File

@ -65,6 +65,16 @@ SPA кредитного аналитика поверх API `arm-core` (`/api/v
«Разберите строки без кода: N» ведёт к первой); панель файлов ЮЛ показывает счётчик предупреждений файла и документа.
Карта модулей — `ARCHITECTURE.md`.
## Таблица корректировок на фейке (`REACT_APP_CORRECTIONS_MOCK`)
Вкладка «Таблица корректировки» отчёта версии ждёт API `…/corrections` (AURORA-1540). Пока его нет, фронт работает на
**фейке контракта**: `REACT_APP_CORRECTIONS_MOCK=true npm run start` — вместо HTTP-запросов вызываются функции
`src/services/api/correctionsFake.ts` с данными из дизайна 23.10 (`widgets/CorrectionTable/mockData.ts`). Состояние
фейка живёт в памяти страницы и сбрасывается перезагрузкой; решения по строкам, сохранение и отмена корректировки,
экспорт (CSV вместо xlsx) работают. Без флага (по умолчанию, в том числе в `npm run build`) фронт ходит в настоящий API.
Флаг читается при сборке из `Config.CORRECTIONS_MOCK` (`src/conf/config.ts`), но код фейка в бандл попадает всегда
(не вырезается) — см. design.md, R-21. Черновики окна корректировки лежат в `localStorage` браузера.
## Ограничения
- Нет блокировки версии («Взять в работу»), сопоставления контрагентов, экрана чек-листа, комментариев, удаления файлов,