feat: HR Portal - Complete Multi-Tenant System with Redis Session Storage
Major Features: - ✅ Multi-tenant architecture (tenant isolation) - ✅ Employee CRUD with lifecycle management (onboarding/offboarding) - ✅ Department tree structure with email domain management - ✅ Company info management (single-record editing) - ✅ System functions CRUD (permission management) - ✅ Email account management (multi-account per employee) - ✅ Keycloak SSO integration (auth.lab.taipei) - ✅ Redis session storage (10.1.0.254:6379) - Solves Cookie 4KB limitation - Cross-system session sharing - Sliding expiration (8 hours) - Automatic token refresh Technical Stack: Backend: - FastAPI + SQLAlchemy - PostgreSQL 16 (10.1.0.20:5433) - Keycloak Admin API integration - Docker Mailserver integration (SSH) - Alembic migrations Frontend: - Next.js 14 (App Router) - NextAuth 4 with Keycloak Provider - Redis session storage (ioredis) - Tailwind CSS Infrastructure: - Redis 7 (10.1.0.254:6379) - Session + Cache - Keycloak 26.1.0 (auth.lab.taipei) - Docker Mailserver (10.1.0.254) Architecture Highlights: - Session管理由 Keycloak + Redis 統一控制 - 支援多系統 (HR/WebMail/Calendar/Drive/Office) 共享 session - Token 自動刷新,異質服務整合 - 未來可無縫遷移到雲端 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
543
BUSINESS-STRUCTURE.md
Normal file
543
BUSINESS-STRUCTURE.md
Normal file
@@ -0,0 +1,543 @@
|
||||
# 🏢 公司組織架構與業務配置
|
||||
|
||||
## 公司概況
|
||||
|
||||
**Porsche World** - 智慧能源與碳權管理解決方案提供商
|
||||
|
||||
---
|
||||
|
||||
## 🎯 業務部門
|
||||
|
||||
### 1. 玄鐵風能授權服務事業部
|
||||
**Business Unit**: Wind Energy Licensing
|
||||
|
||||
#### 業務內容
|
||||
- 風力發電技術授權
|
||||
- 風能系統設計與諮詢
|
||||
- 風場評估與規劃
|
||||
- 技術培訓服務
|
||||
|
||||
#### 組織架構
|
||||
```
|
||||
玄鐵風能授權服務事業部
|
||||
├── 技術授權部
|
||||
│ ├── 授權商務組
|
||||
│ └── 技術支援組
|
||||
├── 風場評估部
|
||||
│ ├── 資源評估組
|
||||
│ └── 場域規劃組
|
||||
└── 客戶服務部
|
||||
├── 技術培訓組
|
||||
└── 售後服務組
|
||||
```
|
||||
|
||||
#### 主要客戶類型
|
||||
- 風電開發商
|
||||
- 能源公司
|
||||
- 政府機構
|
||||
- 研究機構
|
||||
|
||||
---
|
||||
|
||||
### 2. 國際碳權申請服務事業部
|
||||
**Business Unit**: Carbon Credit Services
|
||||
|
||||
#### 業務內容
|
||||
- 碳權申請諮詢
|
||||
- 碳足跡盤查
|
||||
- 碳減排專案開發
|
||||
- 碳權交易媒合
|
||||
- 國際碳權認證 (CDM, VCS, Gold Standard)
|
||||
|
||||
#### 組織架構
|
||||
```
|
||||
國際碳權申請服務事業部
|
||||
├── 碳權申請部
|
||||
│ ├── 專案開發組
|
||||
│ └── 文件審查組
|
||||
├── 碳盤查部
|
||||
│ ├── 盤查執行組
|
||||
│ └── 數據分析組
|
||||
└── 碳交易部
|
||||
├── 市場分析組
|
||||
└── 交易媒合組
|
||||
```
|
||||
|
||||
#### 主要服務
|
||||
- ISO 14064 碳盤查
|
||||
- PAS 2060 碳中和認證
|
||||
- 碳權專案開發
|
||||
- 碳權買賣仲介
|
||||
|
||||
---
|
||||
|
||||
### 3. 智能研發服務事業部
|
||||
**Business Unit**: Smart R&D Services
|
||||
|
||||
#### 業務內容
|
||||
- AI/ML 解決方案開發
|
||||
- IoT 智能監控系統
|
||||
- 能源管理系統 (EMS)
|
||||
- 數據分析平台
|
||||
- 系統整合服務
|
||||
|
||||
#### 組織架構
|
||||
```
|
||||
智能研發服務事業部
|
||||
├── 軟體研發部
|
||||
│ ├── 前端開發組
|
||||
│ ├── 後端開發組
|
||||
│ └── AI/ML 組
|
||||
├── 硬體研發部
|
||||
│ ├── IoT 設備組
|
||||
│ └── 系統整合組
|
||||
└── 產品管理部
|
||||
├── 產品企劃組
|
||||
└── 專案管理組
|
||||
```
|
||||
|
||||
#### 技術領域
|
||||
- Python, FastAPI, React
|
||||
- TensorFlow, PyTorch
|
||||
- LoRaWAN, MQTT
|
||||
- Time-series Database
|
||||
- Edge Computing
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 公司組織架構
|
||||
|
||||
### 完整組織圖
|
||||
|
||||
```
|
||||
Porsche World
|
||||
│
|
||||
├── 執行長室
|
||||
│ └── 特助
|
||||
│
|
||||
├── 管理部門
|
||||
│ ├── 人力資源部
|
||||
│ │ ├── 招募組
|
||||
│ │ ├── 訓練發展組
|
||||
│ │ └── 薪酬福利組
|
||||
│ ├── 財務部
|
||||
│ │ ├── 會計組
|
||||
│ │ └── 財務分析組
|
||||
│ ├── 行政部
|
||||
│ │ ├── 總務組
|
||||
│ │ └── 採購組
|
||||
│ └── 資訊部 (IT)
|
||||
│ ├── 系統維運組
|
||||
│ ├── 資安組
|
||||
│ └── 開發支援組
|
||||
│
|
||||
├── 業務部門
|
||||
│ ├── 玄鐵風能授權服務事業部
|
||||
│ │ ├── 技術授權部
|
||||
│ │ ├── 風場評估部
|
||||
│ │ └── 客戶服務部
|
||||
│ │
|
||||
│ ├── 國際碳權申請服務事業部
|
||||
│ │ ├── 碳權申請部
|
||||
│ │ ├── 碳盤查部
|
||||
│ │ └── 碳交易部
|
||||
│ │
|
||||
│ └── 智能研發服務事業部
|
||||
│ ├── 軟體研發部
|
||||
│ ├── 硬體研發部
|
||||
│ └── 產品管理部
|
||||
│
|
||||
└── 營運支援
|
||||
├── 法務部
|
||||
├── 品質管理部
|
||||
└── 業務發展部
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 👥 職位體系
|
||||
|
||||
### 管理職
|
||||
- **C-Level**: CEO, CTO, CFO, COO
|
||||
- **VP**: 副總經理
|
||||
- **Director**: 部門總監
|
||||
- **Manager**: 經理
|
||||
- **Supervisor**: 主管
|
||||
|
||||
### 專業職
|
||||
- **Principal**: 首席專家
|
||||
- **Senior**: 資深專員
|
||||
- **Staff**: 專員
|
||||
- **Associate**: 助理專員
|
||||
- **Junior**: 初階專員
|
||||
|
||||
### 技術職 (研發部門)
|
||||
- **Architect**: 架構師
|
||||
- **Tech Lead**: 技術主管
|
||||
- **Senior Engineer**: 資深工程師
|
||||
- **Engineer**: 工程師
|
||||
- **Junior Engineer**: 初階工程師
|
||||
|
||||
---
|
||||
|
||||
## 📧 電子郵件命名規則
|
||||
|
||||
### 網域配置
|
||||
- **porscheworld.tw**: 對外官方信箱
|
||||
- **ease.taipei**: 業務與專案使用
|
||||
- **lab.taipei**: 技術研發使用
|
||||
|
||||
### 部門郵箱
|
||||
|
||||
#### 管理部門 (@porscheworld.tw)
|
||||
```
|
||||
admin@porscheworld.tw - 管理部
|
||||
hr@porscheworld.tw - 人資部
|
||||
finance@porscheworld.tw - 財務部
|
||||
it@porscheworld.tw - 資訊部
|
||||
legal@porscheworld.tw - 法務部
|
||||
```
|
||||
|
||||
#### 玄鐵風能授權服務 (@ease.taipei)
|
||||
```
|
||||
wind@ease.taipei - 部門總信箱
|
||||
wind-licensing@ease.taipei - 技術授權部
|
||||
wind-assessment@ease.taipei - 風場評估部
|
||||
wind-service@ease.taipei - 客戶服務部
|
||||
```
|
||||
|
||||
#### 國際碳權申請服務 (@ease.taipei)
|
||||
```
|
||||
carbon@ease.taipei - 部門總信箱
|
||||
carbon-apply@ease.taipei - 碳權申請部
|
||||
carbon-audit@ease.taipei - 碳盤查部
|
||||
carbon-trade@ease.taipei - 碳交易部
|
||||
```
|
||||
|
||||
#### 智能研發服務 (@lab.taipei)
|
||||
```
|
||||
dev@lab.taipei - 研發部總信箱
|
||||
software@lab.taipei - 軟體研發部
|
||||
hardware@lab.taipei - 硬體研發部
|
||||
product@lab.taipei - 產品管理部
|
||||
git@lab.taipei - Gitea 通知
|
||||
ci@lab.taipei - CI/CD 通知
|
||||
```
|
||||
|
||||
### 個人郵箱規則
|
||||
```
|
||||
格式: 名.姓@網域
|
||||
|
||||
範例:
|
||||
john.doe@ease.taipei - 業務人員
|
||||
jane.smith@lab.taipei - 研發人員
|
||||
michael.chen@porscheworld.tw - 管理人員
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💾 網路硬碟配置
|
||||
|
||||
### 部門共享空間
|
||||
|
||||
#### 玄鐵風能授權服務 (NAS)
|
||||
```
|
||||
/volume1/departments/wind-energy/
|
||||
├── /projects/ - 專案資料
|
||||
├── /technical-docs/ - 技術文件
|
||||
├── /contracts/ - 合約文件
|
||||
└── /training-materials/ - 培訓教材
|
||||
```
|
||||
|
||||
#### 國際碳權申請服務 (NAS)
|
||||
```
|
||||
/volume1/departments/carbon-credit/
|
||||
├── /applications/ - 申請文件
|
||||
├── /audits/ - 盤查報告
|
||||
├── /certifications/ - 認證文件
|
||||
└── /trading-records/ - 交易記錄
|
||||
```
|
||||
|
||||
#### 智能研發服務 (NAS)
|
||||
```
|
||||
/volume1/departments/smart-rd/
|
||||
├── /source-code/ - 原始碼 (輔助備份)
|
||||
├── /documentation/ - 技術文件
|
||||
├── /design-files/ - 設計檔案
|
||||
└── /test-data/ - 測試資料
|
||||
```
|
||||
|
||||
### 個人空間配額
|
||||
|
||||
| 職級 | 配額 | 說明 |
|
||||
|------|------|------|
|
||||
| C-Level | 50 GB | 高階主管 |
|
||||
| VP/Director | 30 GB | 中階主管 |
|
||||
| Manager | 20 GB | 經理級 |
|
||||
| 一般員工 | 10 GB | 專員、工程師 |
|
||||
| 約聘/臨時 | 5 GB | 約聘人員 |
|
||||
|
||||
---
|
||||
|
||||
## 🔐 系統權限配置
|
||||
|
||||
### 基本權限 (所有員工)
|
||||
- ✅ Keycloak SSO 帳號
|
||||
- ✅ 電子郵件
|
||||
- ✅ 網路硬碟 (個人空間)
|
||||
- ✅ HR Portal (個人資訊)
|
||||
- ✅ Webmail 訪問
|
||||
|
||||
### 部門權限
|
||||
|
||||
#### 玄鐵風能授權服務
|
||||
- ✅ 專案管理系統
|
||||
- ✅ 客戶關係管理 (CRM)
|
||||
- ✅ 文件管理系統
|
||||
- ✅ 部門共享硬碟
|
||||
|
||||
#### 國際碳權申請服務
|
||||
- ✅ 碳權管理平台
|
||||
- ✅ 盤查數據系統
|
||||
- ✅ 認證文件庫
|
||||
- ✅ 部門共享硬碟
|
||||
|
||||
#### 智能研發服務
|
||||
- ✅ Gitea (代碼管理)
|
||||
- ✅ Drone CI/CD
|
||||
- ✅ Portainer (容器管理)
|
||||
- ✅ 開發工具授權
|
||||
- ✅ 部門共享硬碟
|
||||
|
||||
### 管理權限
|
||||
|
||||
#### 人資部
|
||||
- ✅ HR Portal (管理端)
|
||||
- ✅ 薪資系統
|
||||
- ✅ 考勤系統
|
||||
- ✅ 所有員工資料
|
||||
|
||||
#### 資訊部
|
||||
- ✅ Keycloak 管理
|
||||
- ✅ Traefik 管理
|
||||
- ✅ 伺服器管理
|
||||
- ✅ 所有系統管理權限
|
||||
|
||||
#### 財務部
|
||||
- ✅ ERP 系統
|
||||
- ✅ 財務報表系統
|
||||
- ✅ 發票系統
|
||||
|
||||
---
|
||||
|
||||
## 📊 HR Portal 資料庫擴充
|
||||
|
||||
### 新增欄位設計
|
||||
|
||||
#### employees 表擴充
|
||||
|
||||
```sql
|
||||
ALTER TABLE employees ADD COLUMN IF NOT EXISTS
|
||||
business_unit VARCHAR(50), -- 事業部: wind-energy, carbon-credit, smart-rd
|
||||
division VARCHAR(100), -- 部門: 技術授權部, 軟體研發部 等
|
||||
team VARCHAR(100), -- 組別: 授權商務組, 前端開發組 等
|
||||
job_level VARCHAR(20), -- 職級: C-Level, VP, Director, Manager 等
|
||||
employee_type VARCHAR(20); -- 員工類型: full-time, part-time, contractor, intern
|
||||
|
||||
-- 索引
|
||||
CREATE INDEX idx_employees_business_unit ON employees(business_unit);
|
||||
CREATE INDEX idx_employees_division ON employees(division);
|
||||
```
|
||||
|
||||
#### business_units 表 (新增)
|
||||
|
||||
```sql
|
||||
CREATE TABLE business_units (
|
||||
id SERIAL PRIMARY KEY,
|
||||
code VARCHAR(50) UNIQUE NOT NULL,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
name_en VARCHAR(100),
|
||||
description TEXT,
|
||||
manager_id INTEGER REFERENCES employees(id),
|
||||
email_domain VARCHAR(50), -- 主要使用的郵件網域
|
||||
is_active BOOLEAN DEFAULT TRUE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 初始資料
|
||||
INSERT INTO business_units (code, name, name_en, email_domain) VALUES
|
||||
('wind-energy', '玄鐵風能授權服務事業部', 'Wind Energy Licensing', 'ease.taipei'),
|
||||
('carbon-credit', '國際碳權申請服務事業部', 'Carbon Credit Services', 'ease.taipei'),
|
||||
('smart-rd', '智能研發服務事業部', 'Smart R&D Services', 'lab.taipei'),
|
||||
('management', '管理部門', 'Management', 'porscheworld.tw');
|
||||
```
|
||||
|
||||
#### divisions 表 (新增)
|
||||
|
||||
```sql
|
||||
CREATE TABLE divisions (
|
||||
id SERIAL PRIMARY KEY,
|
||||
business_unit_id INTEGER REFERENCES business_units(id),
|
||||
code VARCHAR(50) UNIQUE NOT NULL,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
name_en VARCHAR(100),
|
||||
manager_id INTEGER REFERENCES employees(id),
|
||||
email VARCHAR(100), -- 部門信箱
|
||||
is_active BOOLEAN DEFAULT TRUE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 範例資料
|
||||
INSERT INTO divisions (business_unit_id, code, name, name_en, email) VALUES
|
||||
-- 玄鐵風能
|
||||
(1, 'wind-licensing', '技術授權部', 'Technical Licensing', 'wind-licensing@ease.taipei'),
|
||||
(1, 'wind-assessment', '風場評估部', 'Wind Assessment', 'wind-assessment@ease.taipei'),
|
||||
(1, 'wind-service', '客戶服務部', 'Customer Service', 'wind-service@ease.taipei'),
|
||||
|
||||
-- 國際碳權
|
||||
(2, 'carbon-apply', '碳權申請部', 'Carbon Application', 'carbon-apply@ease.taipei'),
|
||||
(2, 'carbon-audit', '碳盤查部', 'Carbon Audit', 'carbon-audit@ease.taipei'),
|
||||
(2, 'carbon-trade', '碳交易部', 'Carbon Trading', 'carbon-trade@ease.taipei'),
|
||||
|
||||
-- 智能研發
|
||||
(3, 'software-dev', '軟體研發部', 'Software Development', 'software@lab.taipei'),
|
||||
(3, 'hardware-dev', '硬體研發部', 'Hardware Development', 'hardware@lab.taipei'),
|
||||
(3, 'product-mgmt', '產品管理部', 'Product Management', 'product@lab.taipei');
|
||||
```
|
||||
|
||||
#### projects 表 (新增 - 專案管理)
|
||||
|
||||
```sql
|
||||
CREATE TABLE projects (
|
||||
id SERIAL PRIMARY KEY,
|
||||
business_unit_id INTEGER REFERENCES business_units(id),
|
||||
project_code VARCHAR(50) UNIQUE NOT NULL,
|
||||
project_name VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
client_name VARCHAR(200),
|
||||
|
||||
-- 專案狀態
|
||||
status VARCHAR(20) DEFAULT 'planning', -- planning, active, on-hold, completed, cancelled
|
||||
|
||||
-- 專案經理與團隊
|
||||
project_manager_id INTEGER REFERENCES employees(id),
|
||||
|
||||
-- 時間
|
||||
start_date DATE,
|
||||
end_date DATE,
|
||||
|
||||
-- 預算 (可選)
|
||||
budget_amount DECIMAL(15,2),
|
||||
budget_currency VARCHAR(10) DEFAULT 'TWD',
|
||||
|
||||
-- 專案空間
|
||||
nas_path VARCHAR(500), -- NAS 專案資料夾路徑
|
||||
git_repo VARCHAR(200), -- Gitea repository
|
||||
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX idx_projects_business_unit ON projects(business_unit_id);
|
||||
CREATE INDEX idx_projects_status ON projects(status);
|
||||
```
|
||||
|
||||
#### project_members 表 (專案成員)
|
||||
|
||||
```sql
|
||||
CREATE TABLE project_members (
|
||||
id SERIAL PRIMARY KEY,
|
||||
project_id INTEGER REFERENCES projects(id) ON DELETE CASCADE,
|
||||
employee_id INTEGER REFERENCES employees(id) ON DELETE CASCADE,
|
||||
role VARCHAR(50), -- project-manager, developer, consultant, support
|
||||
allocation_percentage INTEGER DEFAULT 100, -- 投入比例 0-100%
|
||||
joined_date DATE DEFAULT CURRENT_DATE,
|
||||
left_date DATE,
|
||||
|
||||
UNIQUE(project_id, employee_id)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_project_members_project ON project_members(project_id);
|
||||
CREATE INDEX idx_project_members_employee ON project_members(employee_id);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎨 HR Portal 功能擴充
|
||||
|
||||
### 新增管理功能
|
||||
|
||||
#### 1. 組織架構管理
|
||||
- 事業部管理
|
||||
- 部門管理
|
||||
- 團隊管理
|
||||
- 組織圖視覺化
|
||||
|
||||
#### 2. 專案管理
|
||||
- 專案建立與追蹤
|
||||
- 專案成員分配
|
||||
- 專案資源配置
|
||||
- 專案儀表板
|
||||
|
||||
#### 3. 權限模板
|
||||
- 依事業部設定預設權限
|
||||
- 依職級設定資源配額
|
||||
- 批量權限調整
|
||||
|
||||
#### 4. 報表功能
|
||||
- 部門人力統計
|
||||
- 專案人力分布
|
||||
- 資源使用報表
|
||||
- 離職率分析
|
||||
|
||||
---
|
||||
|
||||
## 📋 入職流程範例
|
||||
|
||||
### 案例: 智能研發服務事業部 - 前端工程師
|
||||
|
||||
```
|
||||
1. HR 在系統建立員工
|
||||
- 姓名: Alice Wang
|
||||
- 事業部: 智能研發服務
|
||||
- 部門: 軟體研發部
|
||||
- 團隊: 前端開發組
|
||||
- 職級: Engineer
|
||||
- 郵箱: alice.wang@lab.taipei
|
||||
|
||||
2. 系統自動執行
|
||||
✓ Keycloak 創建帳號: alice.wang
|
||||
✓ 郵箱: alice.wang@lab.taipei (1GB)
|
||||
✓ 個人硬碟: 10GB
|
||||
✓ 授予權限:
|
||||
- Gitea (developer role)
|
||||
- Drone CI (view access)
|
||||
- 軟體研發部共享硬碟 (讀寫)
|
||||
- 智能研發服務共享硬碟 (唯讀)
|
||||
|
||||
3. 發送歡迎郵件
|
||||
- 登入資訊
|
||||
- 部門介紹
|
||||
- 相關系統連結
|
||||
- IT 支援聯絡方式
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 調動/轉調流程
|
||||
|
||||
### 案例: 從碳權申請部 → 碳交易部
|
||||
|
||||
```
|
||||
系統處理:
|
||||
1. 更新員工部門資訊
|
||||
2. 調整郵件群組
|
||||
3. 移除碳權申請部共享硬碟權限
|
||||
4. 授予碳交易部共享硬碟權限
|
||||
5. 保留個人資料與郵箱
|
||||
6. 記錄異動日誌
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**這份文件將作為 HR Portal 開發的業務需求基礎!** 🎯
|
||||
Reference in New Issue
Block a user