本卡屬 FR-147(母卡見清單),棒 2 第一張。建一支讀寫流程圖方塊三欄的純函式 helper,並讓專案啟動長任務時三欄從方塊帶進任務列。3a 會共用這支 helper。
顧問在資源庫替評估目標的預設任務填了名稱、描述、指南(存在流程圖的方塊上)。專案啟動時系統從流程圖長任務,現在任務名稱寫死「控制碼 / AO 收證據」、描述指南不帶。本卡改成:方塊有名稱就用方塊名稱、描述指南照方塊上的屬性帶進任務。沒填的資源庫行為不變。
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/app/flow_control/service/prep_job_generation_service.py:103 _first_user_task_id:只取第一個 userTask(維持)
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/app/flow_control/service/prep_job_generation_service.py:229 task_job_id = ...
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/app/flow_control/service/prep_job_generation_service.py:241 label = f"{cid} / {ao_part_id} 收證據" ← 名稱寫死處
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/app/flow_control/service/prep_job_generation_service.py:248 JobExecutionEntity(... name=label ...) ← 要加 description/guide
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/app/flow_control/service/flow_apply_to_tasks_service.py:40 rebase_xml_onto_target:xmltodict parse/unparse 與 _strip_uid 的寫法參考
~/Projects/Jedicogy/module/jedi-python-package/jedi-flow-engine/jedi_flow_engine/common/utils/bpmn_uilts.py:48 BpmnUtils.get_jobs() 回 JobDTO(含 properties)
app/flow_control/service/task_node_props.py,純函式不碰 DB:read_first_task(xml) -> dict|None(回 {node_id, name, description, guide},第一個 userTask 的定義與 _first_user_task_id 一致;描述指南從 camunda 屬性 task_description/task_guide 取);write_first_task(xml, name, description, guide) -> str(只改第一個 userTask 的 name 與那兩個屬性,不動方塊 id、線、其他屬性含 job_execution_uid;值為空就拿掉該屬性,<camunda:properties> 清到空整段拿掉——空節點會讓 BpmnUtils 解析炸,見 _strip_uid 註解)。用 xmltodict,照 flow_apply_to_tasks_service.py 的手法。generate() 專案啟動模式(reclone_from_props=False):clone 後 read_first_task(cloned.xml),name 有值就當 label,否則維持原 f-string;description/guide 寫進 JobExecutionEntity。workflow_execution 的 name 維持原 label(它是流程實例名,不是任務名)。覆核輪模式本卡不動(2b 處理)。JobExecutionEntity(jedi-flow-engine domain entity)有沒有 description/guide 欄位——ORM model 有(job_execution.py L30、L34),entity 若沒有就回寫問決策者,不要繞過去直接 UPDATE。test/test_task_node_props.py——① 讀:含兩個屬性的 xml 讀回三欄;沒屬性讀回空字串;② 寫:寫入後再讀回一致;寫空值屬性消失且 <camunda:properties> 不留空殼;③ 寫入不動 job_execution_uid 與方塊 id(斷言字串仍在)。write_first_task 改成不拿掉空屬性,③ 的空殼斷言要紅。UPDATE compliance.workflow_templates SET xml=... WHERE uid=...,翻譯表同步改;或等 3a 做完用 API 填)→ 重啟 BE → 用它啟動專案 → 規劃頁該 AO 任務名稱「盤點帳號」、描述指南有值;其他 AO 任務名稱仍「控制碼 / AO 收證據」。ModuleFrameTemplateEditView.vue 1,954 行、job_import_service.py 546 行)一律新開檔再一行呼叫,不往裡塞。python main.py),驗收打端點用 curl;不開任何瀏覽器視窗,前端只用 vite build/dev server 取 SFC 200 驗編譯,畫面留給決策者複測。