7.3 KiB
Proposal
Why
На форме 4 (FORM_4, на фронте «Проектная деятельность») иерархия листа жёсткая: раздел (лист AHR/CAP/OPER) → программа → проект → расходы. Проект без программы создать нельзя: интерфейс требует выделить программу, v3.add_form4_project отвергает вызов без p_program_id, у проекта нет своего раздела (ограничение chk_form4_project_section_code), а лист находит проекты только через программу. Пользователю приходится заводить программу-обёртку ради одного проекта.
Замечание тестировщика AURORA-1984 (Gitea #305): проект можно создать прямо в разделе, без программы. Человек (08.11.2026): «всё то же самое, как и сейчас, только нет уровня программы»; в разделе программы и самостоятельные проекты стоят вперемешку в порядке создания.
В той же ветке закрываются три смежных замечания по ПД: AURORA-1979 (подпись «программа»/«проект» в третьем столбце), AURORA-1980 (переименование программы и проекта), AURORA-1989 (окно выбора расхода: номер статьи, сортировка, поиск).
What Changes
- Самостоятельный проект. Запись
v3.form4_projectсlevel='project',parent_id IS NULL, собственнымиsection_codeиform_id. Ограничениеchk_form4_project_section_codeослабляется: раздел обязателен у программы и у проекта без родителя, запрещён у проекта в программе. - Создание.
v3.add_form4_projectпринимает либо программу (как сейчас), либо форму и раздел. WS-событиеproject_addedпринимаетprogram_idнеобязательно; без него проект создаётся в разделе текущего листа соединения. - Лист.
v3.v_form4_sheet_jsonbвыводит самостоятельный проект строкой ITEM прямо под ROOT раздела (без GROUP), с расходами под ним. Порядок на втором уровне — по id верхнего узла (программы или самостоятельного проекта), то есть в порядке создания. Суммы проекта входят в ROOT один раз; фиктивной GROUP сprogram_id = NULLнет. - Правка и удаление.
v3.upd_form4_projectиv3.del_form4_projectработают и без родителя: раздел берётся у проекта, в ответе нет GROUP. Запрет удалять проект с расходами — прежний. - Фронт. «Добавить проект»: выделена программа → внутри неё; выделена строка раздела или ничего → в разделе; выделен проект или расход → рядом, в той же программе или в разделе. Вставка нового ITEM под ROOT. Удаление (AURORA-1978) уже работает по
project_id. - AURORA-1979. В третьем столбце листов ПД у программы «программа», у проекта (в программе и самостоятельного) «проект» вместо кода раздела; так же в выгрузке Excel. Коды статей у строк расходов и ROOT не меняются.
- AURORA-1980. Действие «Переименовать» для выделенной программы или проекта: окно с текущим названием, события
program_updated/project_updated(сервер уже поддерживает). Пустое название и пробелы не сохраняются; при ошибке окно остаётся открытым с введённым текстом. - AURORA-1989. Окно выбора расхода: «номер статьи — название», сортировка по номеру статьи с учётом числовых частей (2 раньше 10), поиск по номеру и названию.
- Новая миграция
0059_form4_standalone_project(номер — следующий после 0058 на момент ветки).
Не меняется:
- существующие данные: все проекты остаются в своих программах, перенос проекта в программу и из неё не делается;
- своды, листы SMETA и STRUCTURE (не читают программы и проекты);
- права: создание самостоятельного проекта проверяется так же, как у программы (
v3.can_editпо форме и разделу), переименование и удаление — тоже как у программы (членство в форме,_validate_form4_node_access); - контракт строк листа для программ и проектов в программах.
Capabilities
New Capabilities
form4-programs-projects: программы и проекты листов AHR/CAP/OPER формы 4 — создание (в программе и в разделе), переименование, удаление, место в листе и в итогах, подпись типа в третьем столбце, выбор расхода для проекта.
Modified Capabilities
Нет.
Impact
- SQL: миграция
0059_*.py+sql/0059_*.sql: ограничениеform4_project,v3.add_form4_project(новая сигнатура — DROP/CREATE),v3.upd_form4_project,v3.del_form4_project,v3.v_form4_sheet_jsonb(тело — от версии 0053). - Python:
websocket.py(__add_project),SheetService.add_project(проверка доступа по форме без программы),SheetRepository.add_project, ORMform4_project.py; export_service — новыйForm4DepthRowNormalizer(подпись «программа»/«проект» в третьем столбце). - Фронт:
RealtimeTable.jsx,RealtimeContext.js,useRealtimeData.js,utils/cellUtils.js,utils/rowUtils.js,tableColumns.jsx,SettingPanel.jsx, модалки создания/переименования,SelectExpenseItemModal.jsx, конфиг колонок FORM_4. - Тесты: интеграционные (лист, итоги, создание/правка/удаление самостоятельного проекта, ответ
_form_affected_rows), unit фронта (node --test), живая проверка на стенде.