Appearance
Workflow Governance — Technical Map
Route / page map
| Surface | Main page / shell |
|---|---|
| Dashboard report permission | DashboardReportPermission.tsx |
| Approver matrix | ApproverPage.tsx + SettingApprover* wrappers |
| Custom permission | CustomPermission.tsx, CustomPermissionDetail.tsx |
| Task status / tag / group / subtask | TaskStatus.tsx, TaskTag.tsx, TaskTagGroup.tsx, SubTask.tsx |
| Project label | ProjectLabel.tsx |
| Knowledge base question | KnowledgeQuestion.tsx |
| Complaint config | ComplaintSetting.tsx |
Data model map
| Surface | Model chính |
|---|---|
| Custom permission | module, group_role, role_module |
| Report permission | report, dashboard, report_role, role_module |
| Approver matrix | request_approver |
| Task status | project_workflow, project_workflow_status |
| Task tag / group | project_task_tag, project_task_group_tag, tag_tour_money |
| Subtask | subtask, service_subtask |
| Project label | project_label, project_label_user, relationship tables |
| Knowledge base | knowledge_question, knowledge_question_tag |
| Complaint config | complaint GraphQL models từ module complaint |
Boundary với module khác
| Module | Boundary kỹ thuật |
|---|---|
projects | consume workflow/tag/label trong create/edit task/project |
report | consume report_role và related permission rows |
complaint | config page dùng GraphQL của module complaint |
ecommerce | approver request types và subtask/service_subtask models |
crm | knowledge base storage và trigger keywords |
Rủi ro / Findings kỹ thuật
| Mức | Finding |
|---|---|
| Cao | Wrapper approver bị copy-paste sai name component ở nhiều request type, làm devtools/debug rất khó tin cậy. |
| Cao | request_approver đang drift schema giữa metadata ecommerce và hrm. |
| Cao | DashboardReportPermission hardcode map report -> module và còn có biến tính ra nhưng không dùng. |
| Trung bình | KnowledgeTable quyết định scope theo roles[0], không theo effective role set. |
| Trung bình | TaskTagTable validate xóa bằng service_subtask nhưng wording/domain lại là “Tiền tour”; cột status cũng dùng field lệch disable. |