diff --git a/dev/frontend-api-guide.md b/dev/frontend-api-guide.md index d50a6a1..30471df 100644 --- a/dev/frontend-api-guide.md +++ b/dev/frontend-api-guide.md @@ -658,10 +658,10 @@ variance_percent?, exceeds_threshold, one_sided, skipped_osv_entry_count, osv_en заголовка `Content-Disposition` (RFC 5987, UTF-8, percent-кодировка); `filename=` там — ASCII-заглушка (`file.pdf`, `checklist.csv`, `svod-osv.xlsx`). -**Кросс-доменно заголовок не виден.** CORS ядра не выставляет `Access-Control-Expose-Headers`, поэтому при `npm run start` -(фронт на `:3000`, API на `:8000`) `res.headers.get('Content-Disposition')` вернёт `null`. В сборке, которую раздаёт само ядро -(SPA и API на одном источнике), заголовок читается. Пока это не исправлено (§10 п. 9), держите запасное имя на клиенте — -его можно собрать из того, что уже есть на экране (`checklist-<ГК>-<год>-<квартал>.csv`, `svod-osv_<ГК>_<год>-_v.xlsx`, +**Кросс-доменно заголовок открыт с arm-core #173.** CORS ядра выставляет `Access-Control-Expose-Headers: Content-Disposition`, +поэтому и при `npm run start` (фронт на `:3000`, API на `:8000`) `res.headers.get('Content-Disposition')` читается; в сборке, +которую раздаёт само ядро (SPA и API на одном источнике), он читался всегда. Запасное имя на клиенте всё равно держите (ядро +старше #173, прокси без заголовка) — его можно собрать из того, что уже есть на экране (`checklist-<ГК>-<год>-<квартал>.csv`, `svod-osv_<ГК>_<год>-_v.xlsx`, `FileOut.original_name`). ```ts @@ -778,8 +778,8 @@ async function download(path: string, fallbackName: string): Promise { и элиминация (AURORA-1536), КФО и ЕХ (Срезы 6–7), «Добавить версию», гудвилл, журнал аудита, шапка формы ОКЕИ/ОПФ/форма собственности/аудит (П-4). 8. **В проде нет `/openapi.json`** — генерируйте типы со стенда разработки. -9. **`Content-Disposition` не читается кросс-доменно** (нет `Access-Control-Expose-Headers` в CORS ядра): при фронте на - другом порту/домене имя скачиваемого файла берите запасное (§7). Нужна правка в arm-core (`expose_headers=["Content-Disposition"]`). +9. **`Content-Disposition` кросс-доменно** — открыт с arm-core #173 (`Access-Control-Expose-Headers`); на ядре старше — запасное + имя файла (§7). --- diff --git a/dev/qa-guide.md b/dev/qa-guide.md index d2fce89..1399ed2 100644 --- a/dev/qa-guide.md +++ b/dev/qa-guide.md @@ -865,23 +865,25 @@ PDF из `fixtures/ocr` — отчётность других компаний ( | № | Шаги | Ожидание | |---|---|---| -| W29 | В строке версии «К отчётности →» | экран «Русский Бисквит — 2024 К3», крошки «Отчётность › Русский Бисквит › 2024 · К3», справа «Статус отчёта» «Коррекция данных»; активна вкладка «ОСВ»; «Шахматка», «Таблица корректировки», «Гудвилл», «КФО», «КФО Общий», «Подтверждение КФО клиента» неактивны (подсказка «Будет в следующих срезах») | +| W29 | В строке версии «К отчётности →» | экран «Русский Бисквит — 2024 К3», крошки «Отчётность › Русский Бисквит › 2024 · К3», справа «Статус отчёта» «Корректировка данных» и «Изменить статус»; активна вкладка «ОСВ», «Шахматка» доступна; «Таблица корректировки», «Гудвилл», «КФО», «КФО Общий», «Подтверждение КФО клиента» неактивны (подсказка «Будет в следующих срезах») | | W30 | Сводка | под таблицей «Строк: 1385» (= `rows_total`, 7.2); жёлтый баннер «Требуется указать соответствия … Осталось: 1236.» (= `unmapped_total`); свёрнутый блок «Пробелы: 7 — по этим счетам нет ОСВ за часть кварталов, их строк в своде нет», раскрыть — 7 строк «<ЮЛ> — счёт <код> — нет кварталов: Q1, Q2»: РБ 01, 58.03, 66, 67, 76; Счастливочная 01, 02 | | W31 | Колонка «Период», суммы | у всех строк «9 мес. 2024 г.»; суммы с запятой и пробелами, ноль — «—»; по 500 строк на страницу | +| W31a | После W32 над таблицей: «Единицы» = «тыс. руб.», затем «Знаков после запятой» = 0; затем «млн руб.» и 3 знака | строка `60.01` Счастливочной: «4 454,15», «128 058,14», «125 950,45», «2 346,46»; с 0 знаков — «4 454», «128 058», «125 950», «2 346»; в млн и 3 знака — «4,454», «128,058», «125,950», «2,346»; «—» остаётся «—». Меняется только показ: «Строк», фильтры и экспорт те же (суммы в xlsx — в рублях) | | W32 | Фильтр «Компания ГК» (воронка в заголовке) = «ПЕКАРНЯ СЧАСТЛИВОЧНАЯ, ООО» → «Применить»; фильтр «Контрагенты» = `бисквит` → «Применить» | «Строк: 6» — `60.01`, `60.02`, `62.01`, `62.02`, `76.06`, `76.АВ`, контрагент «РУССКИЙ БИСКВИТ, АО», ИНН 3528052718. Суммы — как в 7.2, на экране с запятой: `60.01` — «—», «4 454 151,93», «128 058 143,65», «125 950 450,77», «—», «2 346 459,05»; `60.02` — «—» везде, кроме оборотов «9 745 019,62» / «9 745 019,62»; `62.01` — «40 211 938,00», «—», «398 018 012,46», «330 517 504,00», «107 712 446,46», «—»; `62.02` — «—», «24 100 000,00», «9 900 000,00», «—», «—», «14 200 000,00»; в последней колонке «Тип контрагента» у всех шести — синий бейдж «ГСК». Окно фильтра закрывается после «Применить», иконка активного фильтра зелёная | -| W32a | Сбросить фильтры; прокрутить таблицу вправо; фильтр на колонке «Тип контрагента» по очереди «ГСК», «ГК», «Внешний» → «Применить» | у каждой строки бейдж: «ГСК» — синий, «ГК» — зелёный, «Внешний» — серый (как в макете [30]); «Строк»: «ГСК» — 10, «ГК» — 26, «Внешний» — 1349, в сумме 1385. «Внешний» больше «Осталось» в баннере (1236): строки с ИНН из файла, которого нет в справочнике, — «Внешний», но не «несопоставленные» (отмена П-1, 7.2); «Осталось» = W34. «Сбросить» в окне фильтра возвращает все строки и закрывает окно | -| W33 | Сбросить фильтры; «Счёт» = `62` | «Строк: 387»; `60.01` — 0 строк (фильтр принимает только корень счёта, ограничение прототипа) | +| W32a | Сбросить фильтры («Сбросить» в окне каждого активного фильтра; общей кнопки нет, как и в макете [30]); прокрутить таблицу вправо; фильтр на колонке «Тип контрагента» по очереди «ГСК», «ГК», «Внешний» → «Применить» | у каждой строки бейдж: «ГСК» — синий, «ГК» — зелёный, «Внешний» — серый (как в макете [30]); «Строк»: «ГСК» — 10, «ГК» — 26, «Внешний» — 1349, в сумме 1385. «Внешний» больше «Осталось» в баннере (1236): строки с ИНН из файла, которого нет в справочнике, — «Внешний», но не «несопоставленные» (отмена П-1, 7.2); «Осталось» = W34. «Сбросить» в окне фильтра возвращает все строки и закрывает окно | +| W33 | Сбросить фильтры (как в W32a); «Счёт» = `62` | «Строк: 387»; `60.01` — 0 строк (фильтр принимает только корень счёта, ограничение прототипа) | | W34 | «Показать ЮЛ без ИНН» | только строки без связи с ЮЛ и без ИНН, «Строк» = «Осталось»; в ячейке ИНН — только красное «Указать» на подсвеченном фоне (макет [32-osv-no-inn]); воронка колонки «ИНН» зелёная; кнопка сменилась на «Показать все строки» | | W34a | Ячейка ИНН без фильтров (arm-web #17) | строка с ИНН в файле — просто ИНН моноширинным шрифтом, «Указать» нет (даже если такой организации нет в справочнике); строка, связанная без ИНН в файле (например, РБ → «Юг-Финанс / ПЕКАРНЯ СЧАСТЛИВОЧНАЯ» на данных 2025 К1), — серая «таблетка» с ИНН организации справочника; клик по ней открывает «Выбор организации для связи с …», у текущей организации — неактивное «Связано», у остальных — «Связать» | -| W35 | «Экспорт» (с фильтрами и без) | файл `svod-osv_Русский Бисквит_2024-Q3_v1.xlsx` по текущим фильтрам; содержимое — по 7.3 | +| W35 | «Экспорт» (с фильтрами и без) | файл `svod-osv_Русский Бисквит_2024-Q3_v1.xlsx` по текущим фильтрам; содержимое — по 7.3. Имя `Сводная_ОСВ_Русский_Бисквит_2024_Q3.xlsx` — запасное: ядро без arm-core #173 не открывает фронту `Content-Disposition` (видно только при фронте на другом порту, `npm run start`) | Если на стенде раньше делали ручное сопоставление контрагентов (K14), «Осталось» меньше 1236: алиасы переживают версии. Остальные цифры от этого не меняются. ### 8.7 Что в UI не считать багом (прототип) -- Нет «Взять в работу», смены периметра, ручных переходов статусов, сопоставления контрагентов, экрана чек-листа, - комментариев, удаления файлов, «Добавить версию» — это проверяется через API (разделы 6.6, 6.9, 7). +- Нет смены периметра, экрана чек-листа, комментариев, удаления файлов, «Добавить версию» — это проверяется через API + (разделы 6.6, 6.9, 7). «Взять в работу» и «Изменить статус» (arm-core #166) и сопоставление контрагентов в своде (W34a) — + уже в UI. - В своде не показываются «документов: 22» и колонка «Способ сопоставления» (её нет и в макете [30]; значение — в экспорте); фильтр «Тип контрагента» — одно значение, а не галочки, как в макете (API принимает один признак); фильтр «Счёт» принимает только корень (`60`, не `60.01`).