搜尋開發指南

試試「多租戶」、「啟動」或「outbox」。
搜尋僅使用本站文件,不會傳送至外部服務。

文件目錄

NEXUSPRO / HANDBOOK

功能全景與實作索引

從真實路由登錄與前端頁面追蹤目前已開發的功能,區分程式碼、介面及部署證據。

內容核對 2026-09-28·圖文指南

本章目標與前置條件

回答「有哪些功能、在哪裡開發、如何判斷完成度」。先閱讀技術架構,並取得與目前工作區相符的前後端來源。此索引核對後端 4cdf9822、前端 85b7de0 所在工作區,不代表遠端或部署環境版本。

如何閱讀功能狀態

已實作(原始碼層級) 表示有可追蹤的路由/handler/service;下表「後端」欄只列這一層。測試檔存在不是測試已通過,flag 宣告不是環境已啟用,選單可見不是操作已授權。

「前端/限制」欄依前端 app/、features/、hooks/api/ 的非測試程式碼判斷,同樣只到原始碼層級:

  • 已接 API:有頁面或 hook 呼叫已登錄的 /v1/** 路由,不代表已聯調。
  • 僅後端:路由已登錄,但前端沒有頁面,也沒有非測試引用。
  • 前端 fixture/RoutePlaceholder:畫面存在,資料卻是示意資料或佔位頁。

待核實表示需要憑證、資料或實際環境才能確認,不等同「未開發」。沒有將舊計畫的完成率當作事實。

功能板塊地圖

板塊後端(原始碼層級)前端/限制開發入口
身分與 IAM目前身分與選單、授權判定與存取預覽、帳號目錄、角色、群組、角色綁定與可承擔者、升權會話、權限目錄與選單節點、欄位政策、資料範圍(唯讀)已接 API:/iam/roles、/iam/groups、/iam/access、/iam/catalog。僅後端:升權的申請/撤銷與欄位政策;HR 畫面連往的 /iam/elevation 沒有 page.tsxIAM 指南
組織與人資員工列表、建立、查詢與更新,個人資料、異動(transitions)、帳號啟用、密碼重設、批次調任、統計、員工請假紀錄;組織單位與組織圖、職位、流動分析;eHRMS 同步與 source-sync 設定/初始化已接 API:/workspace/employees(含同步控制)、/hr/org、/hr/positions、/workspace/turnover。真實 eHRMS 上游連線待核實人資指南
考勤出勤制度(版本化 policy)、工作地點與地理圍欄、行事曆與匯入、打卡與打卡紀錄、每日投影(days、daily-records)、eHRMS 同步批次、Google Calendar 整合、摘要規則與月彙總。沒有排班(班表)管理 API:排班區間來自 policy、eHRMS 或行事曆已接 API:首頁打卡、/workspace/clock、/workspace/attendance、/workspace/leave-policy(制度、地點、行事曆與整合)。僅後端:摘要規則、月彙總、eHRMS 同步批次;摘要 job 另需 ATTENDANCE_DIGEST_ENABLED(預設 false)考勤指南
假勤假別政策、員工假別目錄、餘額、本人請假紀錄。請假與銷假以表單送審;考勤服務負責准入(admission,快照假別政策版本)、依餘額批次扣抵(lot allocation)與銷假(cancellation)已接 API:/myleave(餘額、紀錄,並帶範本進 /forms 申請)與 /workspace/leave-policy 的假別設定假勤指南
表單範本設計、驗證、發布與版本、欄位型別與資料來源;草稿、提交、撤回、複製、刪除草稿、清單、匯出;配額政策與用量、流程預覽、管理取消;approve/reject/return 簽核動作已接 API:/forms(申請)、/workspace/forms(設計器)表單指南
審批與工作流待辦審核與批次動作(/workflows/reviews,合併表單與 JML 卡片)、審核角色與解析預覽、JML 流程實例與動作(/workflow-runs)。表單審批用 PostgreSQL 內的審批引擎,只有 JML 走 Temporal已接 API:/notifications(待辦審核)、/workspace/approval-roles。僅後端:/workflow-runs;前端 review schema 只接受 source: 'form',出現 JML 卡片時會觸發 schema 錯誤工作流指南
知識庫文件與版本的發布/撤銷、空間與文件綁定、可見性政策與 override、受眾候選審核僅後端:沒有頁面,前端也沒有引用 /v1/documents 或 /v1/knowledge知識庫指南
AI Agentrun 建立、本人歷史與查詢;worker 依 outbox 事件執行 executor、工具與結果狀態前端 fixture:聊天面板讀 app/(platform)/_fixtures/aiChat.ts,沒有呼叫 /v1/agents/runs;/assistants 是 RoutePlaceholderAgent 指南
工作紀錄工作項目、月摘要、選項、個人待辦;更新與刪除以 base_version 偵測版本衝突已接 API:/tasks(features/worklog)工作紀錄指南
附件兩段式上傳:POST /v1/attachments 建立 pending,PUT /v1/attachments/:id/content 串流上傳、定稿校驗後標記 stored;另有下載與 DELETE 撤銷。沒有獨立權限點,由 service 依宿主資源判定已接 API:表單附件、員工大頭照(features/forms、features/hr-employees)附件指南
通知收件匣、未讀數、單筆與全部已讀;worker 處理 outbox 事件寫入通知已接 API:頂欄鈴鐺與收件匣(features/notifications)。/notifications 路由其實是待辦審核頁通知指南
工作台管理總覽與總覽待辦(/workspace/overview、/workspace/overview/todos)。registry 沒有審計查詢路由已接 API:/workspace 總覽、首頁 / 的打卡與表單入口。前端 fixture:/workspace/audit-log。RoutePlaceholder:/dashboard工作台指南
平台整合internal/platform/:eHRMS、Keycloak、LLM(LiteLLM)、物件儲存(SFTPGo)、Google Calendar、Google 地理編碼、Redis、PostgreSQL、Temporal。多個開關預設為 false,如 TEMPORAL_ENABLED、REDIS_ENABLED、GOOGLE_GEOCODING_ENABLED前端自有整合:app/api/auth/*(Keycloak OIDC)、app/api/geo/current-context(Open-Meteo、Nominatim)與瀏覽器端 Google Maps JS。真實外部連線待核實整合指南

「前端/限制」依非測試程式碼的 /v1/** 引用與 page.tsx 判斷,只證明原始碼接線,不是聯調結果。前端 components/chat/AiChatPanel.tsx 的註解仍寫 /v1/agents/** 不在 registry.golden,已與目前快照不符;以快照為準。

已登錄 API 清單

此表從 internal/route/testdata/registry.golden 產生,對照 internal/api/v1/routes.go 的註冊入口閱讀。它是程式碼契約快照,不是對 live server 執行探測。「授權宣告」欄就是 golden 的 policy 字串;api/openapi.yaml 沒有結構化的權限 metadata(沒有 x- 擴充欄位,只有少數 description 以文字提及),權限點、risk、page 與 tenant_wide 一律以 golden 為準。:id 是 Gin 參數表示法;完整欄位、分頁、錯誤碼以 api/openapi.yaml 為準,不由清單猜測。

GET /healthz、GET /readyz 歸在部署與排查。OPTIONS /v1/*path 是 CORS preflight 的萬用路由:只在設定 CORS origin 白名單時註冊、固定回 204;索引把它歸在「平台整合」,但它不是整合 API。與整合相關的業務路由(如 calendar-integration、/hr/ehrms/sync)歸在各自的業務板塊。

目前快照:201 筆路由(包含健康檢查及 OPTIONS),不是測試通過數。

AI Agent · 3 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
GET/v1/agents/runspoint app=agent resource=agent.run action=read risk=normal page= target_employee= resource_id= tenant_wide=false
GET/v1/agents/runs/:runIdpoint app=agent resource=agent.run action=read risk=normal page= target_employee= resource_id=runId tenant_wide=false
POST/v1/agents/runspoint app=agent resource=agent.run action=create risk=normal page= target_employee= resource_id= tenant_wide=false
附件與兩段式物件儲存 · 5 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
DELETE/v1/attachments/:idauth_only
GET/v1/attachments/:idauth_only
GET/v1/attachments/:id/contentauth_only
POST/v1/attachmentsauth_only
PUT/v1/attachments/:id/contentauth_only
考勤與出勤 · 26 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
DELETE/v1/attendance/calendar/days/:calendarDayIdpoint app=attendance resource=attendance.calendar action=delete risk=high page=attendance.policy target_employee= resource_id=calendarDayId tenant_wide=true
GET/v1/attendance/calendarpoint app=attendance resource=attendance.calendar action=read risk=normal page=attendance.policy target_employee= resource_id= tenant_wide=true
GET/v1/attendance/calendar-integrationpoint app=attendance resource=attendance.calendar_integration action=read risk=normal page=attendance.policy target_employee= resource_id= tenant_wide=true
GET/v1/attendance/calendar/yearspoint app=attendance resource=attendance.calendar action=read risk=normal page=attendance.policy target_employee= resource_id= tenant_wide=true
GET/v1/attendance/clock-recordspoint app=attendance resource=attendance.clock action=read risk=normal page=attendance.clock target_employee= resource_id= tenant_wide=false
GET/v1/attendance/clock-statuspoint app=attendance resource=attendance.clock action=read risk=normal page=attendance.clock target_employee= resource_id= tenant_wide=false
GET/v1/attendance/daily-recordspoint app=attendance resource=attendance.day action=read risk=normal page=attendance.day target_employee= resource_id= tenant_wide=false
GET/v1/attendance/dayspoint app=attendance resource=attendance.day action=read risk=normal page=attendance.day target_employee= resource_id= tenant_wide=false
GET/v1/attendance/digest-rulespoint app=attendance resource=attendance.digest action=read risk=normal page=attendance.policy target_employee= resource_id= tenant_wide=true
GET/v1/attendance/ehrms/sync-runs/:runIdpoint app=attendance resource=attendance.day action=sync risk=high page=attendance.day target_employee= resource_id= tenant_wide=true
GET/v1/attendance/ehrms/sync-runs/:runId/itemspoint app=attendance resource=attendance.day action=sync risk=high page=attendance.day target_employee= resource_id= tenant_wide=true
GET/v1/attendance/monthly-summarypoint app=attendance resource=attendance.day action=read risk=normal page=attendance.day target_employee= resource_id= tenant_wide=false
GET/v1/attendance/policypoint app=attendance resource=attendance.policy action=read risk=normal page=attendance.policy target_employee= resource_id= tenant_wide=true
GET/v1/attendance/policy/optionspoint app=attendance resource=attendance.policy action=read risk=normal page=attendance.policy target_employee= resource_id= tenant_wide=true
GET/v1/attendance/worksitespoint app=attendance resource=attendance.worksite action=read risk=normal page=attendance.policy target_employee= resource_id= tenant_wide=true
POST/v1/attendance/calendar-integration/verifypoint app=attendance resource=attendance.calendar_integration action=update risk=high page=attendance.policy target_employee= resource_id= tenant_wide=true
POST/v1/attendance/calendar/dayspoint app=attendance resource=attendance.calendar action=create risk=high page=attendance.policy target_employee= resource_id= tenant_wide=true
POST/v1/attendance/calendar/importpoint app=attendance resource=attendance.calendar action=import risk=high page=attendance.policy target_employee= resource_id= tenant_wide=true
POST/v1/attendance/clockpoint app=attendance resource=attendance.clock action=create risk=high page=attendance.clock target_employee= resource_id= tenant_wide=false
POST/v1/attendance/ehrms/sync-runspoint app=attendance resource=attendance.day action=sync risk=high page=attendance.day target_employee= resource_id= tenant_wide=true
POST/v1/attendance/ehrms/sync-runs/:runId/retrypoint app=attendance resource=attendance.day action=sync risk=high page=attendance.day target_employee= resource_id= tenant_wide=true
POST/v1/attendance/worksitespoint app=attendance resource=attendance.worksite action=create risk=high page=attendance.policy target_employee= resource_id= tenant_wide=true
PUT/v1/attendance/calendar-integrationpoint app=attendance resource=attendance.calendar_integration action=update risk=high page=attendance.policy target_employee= resource_id= tenant_wide=true
PUT/v1/attendance/digest-rulespoint app=attendance resource=attendance.digest action=update risk=high page=attendance.policy target_employee= resource_id= tenant_wide=true
PUT/v1/attendance/policypoint app=attendance resource=attendance.policy action=update risk=high page=attendance.policy target_employee= resource_id= tenant_wide=true
PUT/v1/attendance/worksites/:worksiteIdpoint app=attendance resource=attendance.worksite action=update risk=high page=attendance.policy target_employee= resource_id=worksiteId tenant_wide=true
部署、設定與交付驗證 · 2 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
GET/healthzpublic
GET/readyzpublic
表單與申請 · 30 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
DELETE/v1/forms/:formInstanceIdpoint app=workflow resource=workflow.run action=delete risk=high page=workflow.form target_employee= resource_id=formInstanceId tenant_wide=false
GET/v1/formspoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id= tenant_wide=false
GET/v1/forms/:formInstanceIdpoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id=formInstanceId tenant_wide=false
GET/v1/forms/:formInstanceId/definitionpoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id=formInstanceId tenant_wide=false
GET/v1/forms/:formInstanceId/exportpoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id=formInstanceId tenant_wide=false
GET/v1/forms/:formInstanceId/workflowpoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id=formInstanceId tenant_wide=false
GET/v1/forms/data-sources/:formDataSourceKeypoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id= tenant_wide=false
GET/v1/forms/field-typespoint app=workflow resource=workflow.form_definition action=read risk=normal page=workflow.form_definition target_employee= resource_id= tenant_wide=true
GET/v1/forms/templatespoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id= tenant_wide=false
GET/v1/forms/templates/:formTemplateIdpoint app=workflow resource=workflow.form_definition action=read risk=normal page=workflow.form_definition target_employee= resource_id=formTemplateId tenant_wide=true
GET/v1/forms/templates/:formTemplateId/publishedpoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id=formTemplateId tenant_wide=false
GET/v1/forms/templates/:formTemplateId/quotapoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id=formTemplateId tenant_wide=false
GET/v1/forms/templates/:formTemplateId/quota-policypoint app=workflow resource=workflow.form_definition action=read risk=normal page=workflow.form_definition target_employee= resource_id=formTemplateId tenant_wide=true
GET/v1/forms/templates/:formTemplateId/versionspoint app=workflow resource=workflow.form_definition action=read risk=normal page=workflow.form_definition target_employee= resource_id=formTemplateId tenant_wide=true
POST/v1/forms/:formInstanceId/admin-cancelpoint app=workflow resource=workflow.run action=admin_cancel risk=high page=workflow.form target_employee= resource_id=formInstanceId tenant_wide=true
POST/v1/forms/:formInstanceId/approvepoint app=workflow resource=workflow.action action=approve risk=high page=workflow.approval target_employee= resource_id=formInstanceId tenant_wide=false
POST/v1/forms/:formInstanceId/duplicatepoint app=workflow resource=workflow.run action=create risk=high page=workflow.form target_employee= resource_id=formInstanceId tenant_wide=false
POST/v1/forms/:formInstanceId/rejectpoint app=workflow resource=workflow.action action=reject risk=high page=workflow.approval target_employee= resource_id=formInstanceId tenant_wide=false
POST/v1/forms/:formInstanceId/returnpoint app=workflow resource=workflow.action action=return risk=high page=workflow.approval target_employee= resource_id=formInstanceId tenant_wide=false
POST/v1/forms/:formInstanceId/submitpoint app=workflow resource=workflow.run action=start risk=high page=workflow.form target_employee= resource_id=formInstanceId tenant_wide=false
POST/v1/forms/:formInstanceId/withdrawpoint app=workflow resource=workflow.run action=withdraw risk=high page=workflow.form target_employee= resource_id=formInstanceId tenant_wide=false
POST/v1/forms/:formInstanceId/workflow/previewpoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id=formInstanceId tenant_wide=false
POST/v1/forms/draftspoint app=workflow resource=workflow.run action=create risk=high page=workflow.form target_employee= resource_id= tenant_wide=false
POST/v1/forms/templatespoint app=workflow resource=workflow.form_definition action=create risk=high page=workflow.form_definition target_employee= resource_id= tenant_wide=true
POST/v1/forms/templates/:formTemplateId/previewpoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id=formTemplateId tenant_wide=false
POST/v1/forms/templates/:formTemplateId/publishpoint app=workflow resource=workflow.form_definition action=publish risk=high page=workflow.form_definition target_employee= resource_id=formTemplateId tenant_wide=true
POST/v1/forms/templates/:formTemplateId/validatepoint app=workflow resource=workflow.form_definition action=update risk=high page=workflow.form_definition target_employee= resource_id=formTemplateId tenant_wide=true
PUT/v1/forms/:formInstanceIdpoint app=workflow resource=workflow.run action=update risk=high page=workflow.form target_employee= resource_id=formInstanceId tenant_wide=false
PUT/v1/forms/templates/:formTemplateIdpoint app=workflow resource=workflow.form_definition action=update risk=high page=workflow.form_definition target_employee= resource_id=formTemplateId tenant_wide=true
PUT/v1/forms/templates/:formTemplateId/quota-policypoint app=workflow resource=workflow.form_definition action=update risk=high page=workflow.form_definition target_employee= resource_id=formTemplateId tenant_wide=true
組織與員工 · 27 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
DELETE/v1/hr/positions/:positionIdpoint app=hr resource=hr.position action=delete risk=high page=hr.positions target_employee= resource_id= tenant_wide=true
GET/v1/hr/employeespoint app=hr resource=hr.employee action=read risk=normal page=hr.employees target_employee= resource_id= tenant_wide=false
GET/v1/hr/employees/:employeeIdpoint app=hr resource=hr.employee action=read risk=normal page=hr.employees target_employee=employeeId resource_id= tenant_wide=false
GET/v1/hr/employees/:employeeId/leave-recordspoint app=hr resource=hr.employee action=read risk=normal page=hr.employees target_employee=employeeId resource_id= tenant_wide=false
GET/v1/hr/employees/:employeeId/profilepoint app=hr resource=hr.employee action=read risk=normal page=hr.employees target_employee=employeeId resource_id= tenant_wide=false
GET/v1/hr/employees/statspoint app=hr resource=hr.employee action=read risk=normal page=hr.employees target_employee= resource_id= tenant_wide=false
GET/v1/hr/org-chartpoint app=hr resource=hr.org_unit action=read risk=normal page=hr.org target_employee= resource_id= tenant_wide=true
GET/v1/hr/org-unitspoint app=hr resource=hr.org_unit action=read risk=normal page=hr.org target_employee= resource_id= tenant_wide=true
GET/v1/hr/positionspoint app=hr resource=hr.position action=read risk=normal page=hr.positions target_employee= resource_id= tenant_wide=true
GET/v1/hr/positions/:positionIdpoint app=hr resource=hr.position action=read risk=normal page=hr.positions target_employee= resource_id= tenant_wide=true
GET/v1/hr/source-syncpoint app=hr resource=hr.employee action=sync risk=high page=hr.employees target_employee= resource_id= tenant_wide=true
GET/v1/hr/turnover/annualpoint app=hr resource=hr.turnover action=read risk=normal page=hr.turnover target_employee= resource_id= tenant_wide=true
GET/v1/hr/turnover/monthlypoint app=hr resource=hr.turnover action=read risk=normal page=hr.turnover target_employee= resource_id= tenant_wide=true
POST/v1/hr/ehrms/syncpoint app=hr resource=hr.employee action=sync risk=high page=hr.employees target_employee= resource_id= tenant_wide=true
POST/v1/hr/employeespoint app=hr resource=hr.employee action=create risk=normal page=hr.employees target_employee= resource_id= tenant_wide=false
POST/v1/hr/employees/:employeeId/password-resetpoint app=hr resource=hr.employee action=reset_password risk=high page=hr.employees target_employee=employeeId resource_id= tenant_wide=false
POST/v1/hr/employees/:employeeId/transitionspoint app=hr resource=hr.employee action=transition risk=high page=hr.employees target_employee=employeeId resource_id= tenant_wide=false
POST/v1/hr/employees/activate-accountspoint app=hr resource=hr.employee action=activate_account risk=high page=hr.employees target_employee= resource_id= tenant_wide=false
POST/v1/hr/employees/bulk-reassignpoint app=hr resource=hr.employee action=update risk=high page=hr.employees target_employee= resource_id= tenant_wide=true
POST/v1/hr/org-unitspoint app=hr resource=hr.org_unit action=create risk=normal page=hr.org target_employee= resource_id= tenant_wide=true
POST/v1/hr/positionspoint app=hr resource=hr.position action=create risk=normal page=hr.positions target_employee= resource_id= tenant_wide=true
POST/v1/hr/source-sync/initializepoint app=hr resource=hr.employee action=sync risk=high page=hr.employees target_employee= resource_id= tenant_wide=true
PUT/v1/hr/employees/:employeeIdpoint app=hr resource=hr.employee action=update risk=normal page=hr.employees target_employee=employeeId resource_id= tenant_wide=false
PUT/v1/hr/employees/:employeeId/profilepoint app=hr resource=hr.employee action=update risk=normal page=hr.employees target_employee=employeeId resource_id= tenant_wide=false
PUT/v1/hr/org-units/:orgUnitIdpoint app=hr resource=hr.org_unit action=update risk=normal page=hr.org target_employee= resource_id= tenant_wide=true
PUT/v1/hr/positions/:positionIdpoint app=hr resource=hr.position action=update risk=normal page=hr.positions target_employee= resource_id= tenant_wide=true
PUT/v1/hr/source-syncpoint app=hr resource=hr.employee action=sync risk=high page=hr.employees target_employee= resource_id= tenant_wide=true
身分、IAM 與權限目錄 · 42 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
DELETE/v1/iam/catalog/groups/:sectionpoint app=iam resource=iam.catalog action=delete risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
DELETE/v1/iam/catalog/pages/:pageKeypoint app=iam resource=iam.catalog action=delete risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
DELETE/v1/iam/catalog/points/:idpoint app=iam resource=iam.catalog action=delete risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
DELETE/v1/iam/catalog/points/:id/bindingpoint app=iam resource=iam.catalog action=update risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
DELETE/v1/iam/elevation-sessions/:idpoint app=iam resource=iam.elevation_session action=delete risk=high page=iam.elevation target_employee= resource_id= tenant_wide=true
DELETE/v1/iam/roles/:idpoint app=iam resource=iam.role action=delete risk=high page=iam.roles target_employee= resource_id= tenant_wide=true
DELETE/v1/iam/roles/:id/assumers/:accountIdpoint app=iam resource=iam.role_assumer action=delete risk=critical page=iam.roles target_employee= resource_id= tenant_wide=true
DELETE/v1/iam/roles/:id/members/:bidpoint app=iam resource=iam.role_binding action=delete risk=high page=iam.roles target_employee= resource_id= tenant_wide=true
DELETE/v1/iam/user-groups/:id/members/:midpoint app=iam resource=iam.user_group_member action=delete risk=high page=iam.groups target_employee= resource_id= tenant_wide=true
GET/v1/iam/accountspoint app=iam resource=iam.account action=read risk=normal page=iam.access target_employee= resource_id= tenant_wide=true
GET/v1/iam/accounts/:id/accesspoint app=iam resource=iam.access action=read risk=normal page=iam.access target_employee= resource_id= tenant_wide=true
GET/v1/iam/catalogpoint app=iam resource=iam.catalog action=read risk=normal page=iam.catalog target_employee= resource_id= tenant_wide=true
GET/v1/iam/data-scopespoint app=iam resource=iam.data_scope action=read risk=normal page= target_employee= resource_id= tenant_wide=true
GET/v1/iam/elevation-sessionspoint app=iam resource=iam.elevation_session action=read risk=normal page=iam.elevation target_employee= resource_id= tenant_wide=true
GET/v1/iam/elevation-sessions/:idpoint app=iam resource=iam.elevation_session action=read risk=normal page=iam.elevation target_employee= resource_id= tenant_wide=true
GET/v1/iam/field-policiespoint app=iam resource=iam.field_policy action=read risk=normal page=iam.catalog target_employee= resource_id= tenant_wide=true
GET/v1/iam/rolespoint app=iam resource=iam.role action=read risk=normal page=iam.roles target_employee= resource_id= tenant_wide=true
GET/v1/iam/roles/:id/assumerspoint app=iam resource=iam.role_assumer action=read risk=normal page=iam.roles target_employee= resource_id= tenant_wide=true
GET/v1/iam/roles/:id/memberspoint app=iam resource=iam.role_binding action=read risk=normal page=iam.roles target_employee= resource_id= tenant_wide=true
GET/v1/iam/user-groupspoint app=iam resource=iam.user_group action=read risk=normal page=iam.groups target_employee= resource_id= tenant_wide=true
GET/v1/iam/user-groups/:id/memberspoint app=iam resource=iam.user_group_member action=read risk=normal page=iam.groups target_employee= resource_id= tenant_wide=true
GET/v1/iam/user-groups/:id/rolespoint app=iam resource=iam.role_binding action=read risk=normal page=iam.groups target_employee= resource_id= tenant_wide=true
GET/v1/meauth_only
GET/v1/me/menusauth_only
POST/v1/authz/checkauth_only
POST/v1/iam/access/previewpoint app=iam resource=iam.access action=read risk=normal page=iam.access target_employee= resource_id= tenant_wide=true
POST/v1/iam/catalog/conversionspoint app=iam resource=iam.catalog action=delete risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
POST/v1/iam/catalog/conversions/previewpoint app=iam resource=iam.catalog action=read risk=normal page=iam.catalog target_employee= resource_id= tenant_wide=true
POST/v1/iam/catalog/groupspoint app=iam resource=iam.catalog action=create risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
POST/v1/iam/catalog/pagespoint app=iam resource=iam.catalog action=create risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
POST/v1/iam/catalog/pointspoint app=iam resource=iam.catalog action=create risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
POST/v1/iam/elevation-sessionspoint app=iam resource=iam.elevation_session action=assume risk=critical page=iam.elevation target_employee= resource_id= tenant_wide=true
POST/v1/iam/rolespoint app=iam resource=iam.role action=create risk=high page=iam.roles target_employee= resource_id= tenant_wide=true
POST/v1/iam/roles/:id/memberspoint app=iam resource=iam.role_binding action=create risk=high page=iam.roles target_employee= resource_id= tenant_wide=true
POST/v1/iam/user-groupspoint app=iam resource=iam.user_group action=create risk=normal page=iam.groups target_employee= resource_id= tenant_wide=true
POST/v1/iam/user-groups/:id/memberspoint app=iam resource=iam.user_group_member action=create risk=high page=iam.groups target_employee= resource_id= tenant_wide=true
PUT/v1/iam/catalog/groups/:sectionpoint app=iam resource=iam.catalog action=update risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
PUT/v1/iam/catalog/pages/:pageKeypoint app=iam resource=iam.catalog action=update risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
PUT/v1/iam/catalog/points/:id/bindingpoint app=iam resource=iam.catalog action=update risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
PUT/v1/iam/field-policiespoint app=iam resource=iam.field_policy action=update risk=high page=iam.catalog target_employee= resource_id= tenant_wide=true
PUT/v1/iam/roles/:idpoint app=iam resource=iam.role action=update risk=high page=iam.roles target_employee= resource_id= tenant_wide=true
PUT/v1/iam/roles/:id/assumers/:accountIdpoint app=iam resource=iam.role_assumer action=update risk=critical page=iam.roles target_employee= resource_id= tenant_wide=true
外部系統與平台適配層 · 1 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
OPTIONS/v1/*pathpublic
知識庫與內容治理 · 26 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
DELETE/v1/documents/:documentId/visibility-overridepoint app=knowledge resource=knowledge.override action=delete risk=high page=knowledge.documents target_employee= resource_id= tenant_wide=true
DELETE/v1/knowledge/spaces/:spaceId/documents/:documentIdpoint app=knowledge resource=knowledge.space_document action=delete risk=high page=knowledge.spaces target_employee= resource_id= tenant_wide=true
DELETE/v1/knowledge/visibility-policies/:policyId/selectors/:selectorIdpoint app=knowledge resource=knowledge.visibility_policy action=update risk=high page=knowledge.spaces target_employee= resource_id= tenant_wide=true
GET/v1/documentspoint app=knowledge resource=knowledge.document action=read risk=normal page=knowledge.documents target_employee= resource_id= tenant_wide=true
GET/v1/documents/:documentIdpoint app=knowledge resource=knowledge.document action=read risk=normal page=knowledge.documents target_employee= resource_id= tenant_wide=true
GET/v1/documents/:documentId/versionspoint app=knowledge resource=knowledge.document action=read risk=normal page=knowledge.documents target_employee= resource_id= tenant_wide=true
GET/v1/documents/:documentId/versions/:versionIdpoint app=knowledge resource=knowledge.document action=read risk=normal page=knowledge.documents target_employee= resource_id= tenant_wide=true
GET/v1/documents/:documentId/visibility-overridepoint app=knowledge resource=knowledge.override action=read risk=normal page=knowledge.documents target_employee= resource_id= tenant_wide=true
GET/v1/knowledge/audience-candidatespoint app=knowledge resource=knowledge.audience action=read risk=normal page=knowledge.documents target_employee= resource_id= tenant_wide=true
GET/v1/knowledge/spacespoint app=knowledge resource=knowledge.space action=read risk=normal page=knowledge.spaces target_employee= resource_id= tenant_wide=true
GET/v1/knowledge/spaces/:spaceIdpoint app=knowledge resource=knowledge.space action=read risk=normal page=knowledge.spaces target_employee= resource_id= tenant_wide=true
GET/v1/knowledge/spaces/:spaceId/audience-scopespoint app=knowledge resource=knowledge.audience action=read risk=normal page=knowledge.spaces target_employee= resource_id= tenant_wide=true
GET/v1/knowledge/spaces/:spaceId/documentspoint app=knowledge resource=knowledge.space_document action=read risk=normal page=knowledge.spaces target_employee= resource_id= tenant_wide=true
GET/v1/knowledge/visibility-policiespoint app=knowledge resource=knowledge.visibility_policy action=read risk=normal page=knowledge.spaces target_employee= resource_id= tenant_wide=true
GET/v1/knowledge/visibility-policies/:policyIdpoint app=knowledge resource=knowledge.visibility_policy action=read risk=normal page=knowledge.spaces target_employee= resource_id= tenant_wide=true
POST/v1/documentspoint app=knowledge resource=knowledge.document action=create risk=normal page=knowledge.documents target_employee= resource_id= tenant_wide=true
POST/v1/documents/:documentId/versions/:versionId/publishpoint app=knowledge resource=knowledge.document_version action=publish risk=high page=knowledge.documents target_employee= resource_id= tenant_wide=true
POST/v1/documents/:documentId/versions/:versionId/revokepoint app=knowledge resource=knowledge.document_version action=revoke risk=high page=knowledge.documents target_employee= resource_id= tenant_wide=true
POST/v1/knowledge/spacespoint app=knowledge resource=knowledge.space action=create risk=normal page=knowledge.spaces target_employee= resource_id= tenant_wide=true
POST/v1/knowledge/spaces/:spaceId/documentspoint app=knowledge resource=knowledge.space_document action=create risk=high page=knowledge.spaces target_employee= resource_id= tenant_wide=true
POST/v1/knowledge/visibility-policiespoint app=knowledge resource=knowledge.visibility_policy action=create risk=high page=knowledge.spaces target_employee= resource_id= tenant_wide=true
POST/v1/knowledge/visibility-policies/:policyId/retirepoint app=knowledge resource=knowledge.visibility_policy action=delete risk=high page=knowledge.spaces target_employee= resource_id= tenant_wide=true
POST/v1/knowledge/visibility-policies/:policyId/revisionspoint app=knowledge resource=knowledge.visibility_policy action=update risk=high page=knowledge.spaces target_employee= resource_id= tenant_wide=true
POST/v1/knowledge/visibility-policies/:policyId/selectorspoint app=knowledge resource=knowledge.visibility_policy action=update risk=high page=knowledge.spaces target_employee= resource_id= tenant_wide=true
PUT/v1/documents/:documentId/visibility-overridepoint app=knowledge resource=knowledge.override action=update risk=high page=knowledge.documents target_employee= resource_id= tenant_wide=true
PUT/v1/knowledge/spaces/:spaceIdpoint app=knowledge resource=knowledge.space action=update risk=high page=knowledge.spaces target_employee= resource_id= tenant_wide=true
假勤管理 · 8 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
GET/v1/attendance/leave-type-form-optionspoint app=attendance resource=attendance.leave_type action=read risk=normal page=attendance.policy target_employee= resource_id= tenant_wide=true
GET/v1/attendance/leave-typespoint app=attendance resource=attendance.leave_type action=read risk=normal page=attendance.policy target_employee= resource_id= tenant_wide=true
GET/v1/attendance/leave-types/:leaveTypeIdpoint app=attendance resource=attendance.leave_type action=read risk=normal page=attendance.policy target_employee= resource_id=leaveTypeId tenant_wide=true
GET/v1/leave/balancespoint app=attendance resource=attendance.leave action=read risk=normal page=attendance.myleave target_employee= resource_id= tenant_wide=false
GET/v1/leave/recordspoint app=attendance resource=attendance.leave action=read risk=normal page=attendance.myleave target_employee= resource_id= tenant_wide=false
GET/v1/leave/typespoint app=attendance resource=attendance.leave action=read risk=normal page=attendance.myleave target_employee= resource_id= tenant_wide=false
POST/v1/attendance/leave-typespoint app=attendance resource=attendance.leave_type action=create risk=high page=attendance.policy target_employee= resource_id= tenant_wide=true
PUT/v1/attendance/leave-types/:leaveTypeIdpoint app=attendance resource=attendance.leave_type action=update risk=high page=attendance.policy target_employee= resource_id=leaveTypeId tenant_wide=true
通知中心與持久化投遞 · 4 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
GET/v1/me/notificationsauth_only
GET/v1/me/notifications/unread-countauth_only
POST/v1/me/notifications/:notificationId/readauth_only
POST/v1/me/notifications/read-allauth_only
工作流與審批 · 15 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
GET/v1/workflow-runspoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id= tenant_wide=false
GET/v1/workflow-runs/:workflowRunIdpoint app=workflow resource=workflow.run action=read risk=normal page=workflow.form target_employee= resource_id=workflowRunId tenant_wide=false
GET/v1/workflows/approval-rolespoint app=workflow resource=workflow.approval_role action=read risk=normal page=workflow.approval_role target_employee= resource_id= tenant_wide=true
GET/v1/workflows/approval-roles/:approvalRoleIdpoint app=workflow resource=workflow.approval_role action=read risk=normal page=workflow.approval_role target_employee= resource_id= tenant_wide=true
GET/v1/workflows/approval-roles/departmentspoint app=workflow resource=workflow.approval_role action=read risk=normal page=workflow.approval_role target_employee= resource_id= tenant_wide=true
GET/v1/workflows/reviewspoint app=workflow resource=workflow.action action=read risk=normal page=workflow.approval target_employee= resource_id= tenant_wide=false
POST/v1/knowledge/audience-candidates/:candidateId/reviewpoint app=knowledge resource=knowledge.audience action=approve risk=normal page=knowledge.documents target_employee= resource_id= tenant_wide=true
POST/v1/workflow-runs/:workflowRunId/approvepoint app=workflow resource=workflow.action action=approve risk=high page=workflow.approval target_employee= resource_id=workflowRunId tenant_wide=false
POST/v1/workflow-runs/:workflowRunId/rejectpoint app=workflow resource=workflow.action action=reject risk=high page=workflow.approval target_employee= resource_id=workflowRunId tenant_wide=false
POST/v1/workflow-runs/:workflowRunId/returnpoint app=workflow resource=workflow.action action=return risk=high page=workflow.approval target_employee= resource_id=workflowRunId tenant_wide=false
POST/v1/workflow-runs/:workflowRunId/withdrawpoint app=workflow resource=workflow.run action=withdraw risk=high page=workflow.form target_employee= resource_id=workflowRunId tenant_wide=true
POST/v1/workflows/approval-rolespoint app=workflow resource=workflow.approval_role action=create risk=high page=workflow.approval_role target_employee= resource_id= tenant_wide=true
POST/v1/workflows/approval-roles/:approvalRoleId/previewpoint app=workflow resource=workflow.approval_role action=read risk=normal page=workflow.approval_role target_employee= resource_id= tenant_wide=true
POST/v1/workflows/reviews/bulk-actionpoint app=workflow resource=workflow.action action=batch risk=high page=workflow.approval target_employee= resource_id= tenant_wide=false
PUT/v1/workflows/approval-roles/:approvalRoleIdpoint app=workflow resource=workflow.approval_role action=update risk=high page=workflow.approval_role target_employee= resource_id= tenant_wide=true
工作紀錄與待辦 · 10 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
DELETE/v1/me/todos/:todoIdpoint app=worklog resource=worklog.todo action=delete risk=high page=workflow.task target_employee= resource_id=todoId tenant_wide=false
DELETE/v1/me/worklogs/:entryIdpoint app=worklog resource=worklog.entry action=delete risk=high page=workflow.task target_employee= resource_id=entryId tenant_wide=false
GET/v1/me/todospoint app=worklog resource=worklog.todo action=read risk=normal page=workflow.task target_employee= resource_id= tenant_wide=false
GET/v1/me/worklog-optionspoint app=worklog resource=worklog.entry action=read risk=normal page=workflow.task target_employee= resource_id= tenant_wide=false
GET/v1/me/worklogspoint app=worklog resource=worklog.entry action=read risk=normal page=workflow.task target_employee= resource_id= tenant_wide=false
GET/v1/me/worklogs/summarypoint app=worklog resource=worklog.entry action=read risk=normal page=workflow.task target_employee= resource_id= tenant_wide=false
POST/v1/me/todospoint app=worklog resource=worklog.todo action=create risk=normal page=workflow.task target_employee= resource_id= tenant_wide=false
POST/v1/me/worklogspoint app=worklog resource=worklog.entry action=create risk=normal page=workflow.task target_employee= resource_id= tenant_wide=false
PUT/v1/me/todos/:todoIdpoint app=worklog resource=worklog.todo action=update risk=normal page=workflow.task target_employee= resource_id=todoId tenant_wide=false
PUT/v1/me/worklogs/:entryIdpoint app=worklog resource=worklog.entry action=update risk=normal page=workflow.task target_employee= resource_id=entryId tenant_wide=false
工作台、個人資訊與審計入口 · 2 筆路由

閱讀板塊開發指南 →

方法路徑授權宣告
GET/v1/workspace/overviewpoint app=hr resource=hr.workspace_overview action=read risk=normal page= target_employee= resource_id= tenant_wide=false
GET/v1/workspace/overview/todospoint app=hr resource=hr.workspace_todo action=read risk=normal page= target_employee= resource_id= tenant_wide=false

前端頁面清單

Route group 括號不構成 URL;例如 app/(platform)/iam/roles/page.tsx 的路徑是 /iam/roles。catch-all 會區分宣告頁待開發、目錄落點、未登錄節點與不存在路徑,不能把它渲染成功當成功能完成。

page.tsx 存在也不等於已接 API:/assistants、/dashboard、/history 是 RoutePlaceholder 佔位頁;/workspace/audit-log 讀 _fixtures/ 示意資料;/notifications 渲染的是待辦審核(features/reviews),通知收件匣在頂欄鈴鐺。

已找到 33 個 page.tsx,包括公開頁、設計系統與 catch-all。

  • app/(auth)/login/page.tsx
  • app/(auth)/register/page.tsx
  • app/(platform)/(home)/page.tsx
  • app/(platform)/[...segments]/page.tsx
  • app/(platform)/assistants/page.tsx
  • app/(platform)/dashboard/page.tsx
  • app/(platform)/forms/page.tsx
  • app/(platform)/history/page.tsx
  • app/(platform)/hr/org/page.tsx
  • app/(platform)/hr/positions/page.tsx
  • app/(platform)/iam/access/page.tsx
  • app/(platform)/iam/catalog/page.tsx
  • app/(platform)/iam/groups/page.tsx
  • app/(platform)/iam/roles/page.tsx
  • app/(platform)/myleave/page.tsx
  • app/(platform)/notifications/page.tsx
  • app/(platform)/tasks/page.tsx
  • app/(platform)/workspace/(overview)/page.tsx
  • app/(platform)/workspace/approval-roles/page.tsx
  • app/(platform)/workspace/attendance/page.tsx
  • app/(platform)/workspace/audit-log/page.tsx
  • app/(platform)/workspace/clock/page.tsx
  • app/(platform)/workspace/employees/page.tsx
  • app/(platform)/workspace/forms/page.tsx
  • app/(platform)/workspace/leave-policy/page.tsx
  • app/(platform)/workspace/turnover/page.tsx
  • app/(public)/403/page.tsx
  • app/(public)/404/page.tsx
  • app/(public)/privacy/page.tsx
  • app/(public)/terms/page.tsx
  • app/design-system/cards/page.tsx
  • app/design-system/feedback/page.tsx
  • app/design-system/page.tsx

更新索引的操作步驟

在文件站根目錄執行以下命令。兩個業務 checkout 必須位於相鄰目錄;命令僅讀取路由快照與檔案路徑,不啟動服務、不讀 .env。

bash
node scripts/inventory.mjs --check

若有漂移,先閱讀新路由實作、補上對應章節與狀態,再執行 node scripts/inventory.mjs 更新快照。新路徑若沒有章節映射會明確失敗,禁止把新功能偷偷塞進「其他」。

預期結果與驗證

每個登錄路由應能回到一篇開發指南;每個主要業務板塊都能在上表指出後端範圍、前端證據與限制,並在各章找到驗證案例。透過本站搜尋實際函式名或 API 路徑時,應能找到有正文說明的章節。查不到請先核對該路徑是否只有清單、尚未被教學提及。

清單中的 API 路徑也會進入對應章節的搜尋索引;這是檢索入口,不冒充逐端點教學。完整 wire schema 仍需讀 OpenAPI。--check 驗證快照與來源一致,內容測試驗證映射章節存在。

常見錯誤

  • 看到知識庫空間或 JML run 的路由與資料表就認定有 UI:兩者目前僅後端,請再核對前端頁面與 hook。
  • 把 RoutePlaceholder、fixture 頁面或 catch-all 的「待開發」畫面當成功能完成。
  • 看到測試名稱就寫「聯調完成」:沒有本輪執行證據只能寫測試入口。
  • 從 API 清單直接複製寫入請求到共享環境:先取得授權、確認租戶及可恢復測試資料。
  • 因為過期任務板寫「未開始」就刪掉已有功能文件:以當前原始碼為準。

相關文件

前端開發 · 測試策略 · 部署與排查 · 功能實戰

內容來源與核實範圍

以下路徑相對於所列業務倉庫;核實層級為「已讀原始碼」,不是本輪業務測試或部署驗收。

  • nexus-pro-be-plus/internal/api/v1/routes.go
  • nexus-pro-be-plus/internal/route/testdata/registry.golden
  • nexus-pro-be-plus/internal/route/whitelist.go
  • nexus-pro-be-plus/internal/api/v1/attachments.go
  • nexus-pro-be-plus/internal/domain/attendance/admission.go
  • nexus-pro-be-plus/internal/domain/attendance/clock.go
  • nexus-pro-be-plus/api/config-reference.md
  • nexus-pro-web-plus/libs/navigation/routeResolver.ts
  • nexus-pro-web-plus/app/(platform)/_components/RoutePlaceholder.tsx
  • nexus-pro-web-plus/app/(platform)/_fixtures/aiChat.ts
  • nexus-pro-web-plus/app/(platform)/workspace/audit-log/page.tsx
  • nexus-pro-web-plus/features/reviews/api.ts
  • nexus-pro-web-plus/app/api/geo/current-context/route.ts
NexusPro 開發指南以程式碼為準 · 以驗證為據