backup: 完成 HR_position_ 表格前綴重命名與欄位對照表整理

變更內容:
- 所有資料表加上 HR_position_ 前綴
- 整理完整欄位顯示名稱與 ID 對照表
- 模組化 JS 檔案 (admin.js, ai.js, csv.js 等)
- 專案結構優化 (docs/, scripts/, tests/ 等)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-09 12:05:20 +08:00
parent a068ef9704
commit a6af297623
82 changed files with 8685 additions and 4933 deletions

349
import_hierarchy_data.py Normal file
View File

@@ -0,0 +1,349 @@
"""
組織階層資料匯入模組
從 Markdown 表格解析組織階層資料,供 Flask API 使用
"""
def import_to_memory():
"""
解析組織階層資料並返回結構化資料
Returns: dict 包含所有階層資料
"""
# 原始資料(從 excel_table copy.md 提取,共 313 筆記錄)
raw_data = [
("半導體事業群", "半導體事業群", "", "營運長"),
("半導體事業群", "半導體事業群", "", "營運長助理"),
("汽車事業體", "汽車事業體", "", "副總經理"),
("汽車事業體", "汽車事業體", "", "專案經理"),
("法務室", "法務室", "", "經副理"),
("法務室", "法務室", "", "法務專員"),
("法務室", "法務室", "", "專利工程師"),
("岡山製造事業體", "生產處", "", "處長"),
("岡山製造事業體", "生產處", "", "專員"),
("岡山製造事業體", "生產處", "生產部", "經副理"),
("岡山製造事業體", "生產處", "生產部", "課長"),
("岡山製造事業體", "生產處", "生產部", "組長"),
("岡山製造事業體", "生產處", "生產部", "班長"),
("岡山製造事業體", "生產處", "生產部", "副班長"),
("岡山製造事業體", "生產處", "生產部", "作業員"),
("岡山製造事業體", "生產處", "生產企劃部", "經副理"),
("岡山製造事業體", "生產處", "生產企劃部", "課長"),
("岡山製造事業體", "生產處", "生產企劃部", "專員"),
("岡山製造事業體", "生產處", "生產企劃部", "工程師"),
("岡山製造事業體", "岡山製造事業體", "岡山品質管制部", "經副理"),
("岡山製造事業體", "岡山製造事業體", "岡山品質管制部", "課長"),
("岡山製造事業體", "岡山製造事業體", "岡山品質管制部", "工程師"),
("岡山製造事業體", "岡山製造事業體", "岡山品質管制部", "組長"),
("岡山製造事業體", "岡山製造事業體", "岡山品質管制部", "班長"),
("岡山製造事業體", "岡山製造事業體", "岡山品質管制部", "副班長"),
("岡山製造事業體", "岡山製造事業體", "岡山品質管制部", "作業員"),
("岡山製造事業體", "岡山製造事業體", "岡山品質管制部", "副總經理"),
("岡山製造事業體", "岡山製造事業體", "岡山品質管制部", "副總經理助理"),
("岡山製造事業體", "封裝工程處", "", "處長"),
("岡山製造事業體", "封裝工程處", "", "專員"),
("岡山製造事業體", "封裝工程處", "", "工程師"),
("岡山製造事業體", "封裝工程處", "製程工程一部", "經副理"),
("岡山製造事業體", "封裝工程處", "製程工程二部", "經副理"),
("岡山製造事業體", "封裝工程處", "製程工程二部", "課長"),
("岡山製造事業體", "封裝工程處", "製程工程二部", "工程師"),
("岡山製造事業體", "封裝工程處", "設備一部", "經副理"),
("岡山製造事業體", "封裝工程處", "設備二部", "經副理"),
("岡山製造事業體", "封裝工程處", "設備二部", "課長"),
("岡山製造事業體", "封裝工程處", "設備二部", "工程師"),
("岡山製造事業體", "副總辦公室", "工業工程部", "經副理"),
("岡山製造事業體", "副總辦公室", "工業工程部", "工程師"),
("岡山製造事業體", "副總辦公室", "工業工程部", "課長"),
("岡山製造事業體", "副總辦公室", "工業工程部", "副理"),
("岡山製造事業體", "測試工程與研發處", "", "處長"),
("岡山製造事業體", "測試工程與研發處", "", "專員"),
("岡山製造事業體", "測試工程與研發處", "測試工程部", "經副理"),
("岡山製造事業體", "測試工程與研發處", "測試工程部", "課長"),
("岡山製造事業體", "測試工程與研發處", "測試工程部", "工程師"),
("岡山製造事業體", "測試工程與研發處", "新產品導入部", "經副理"),
("岡山製造事業體", "測試工程與研發處", "新產品導入部", "專員"),
("岡山製造事業體", "測試工程與研發處", "新產品導入部", "工程師"),
("岡山製造事業體", "測試工程與研發處", "研發部", "經副理"),
("岡山製造事業體", "測試工程與研發處", "研發部", "課長"),
("岡山製造事業體", "測試工程與研發處", "研發部", "工程師"),
("岡山製造事業體", "測試工程與研發處", "研發部", "專員"),
("岡山製造事業體", "資材處", "", "處長"),
("岡山製造事業體", "資材處", "採購部", "經副理"),
("岡山製造事業體", "資材處", "採購部", "課長"),
("岡山製造事業體", "資材處", "採購部", "專員"),
("岡山製造事業體", "資材處", "外部資源部", "專員"),
("岡山製造事業體", "資材處", "生管部", "經副理"),
("岡山製造事業體", "資材處", "生管部", "課長"),
("岡山製造事業體", "資材處", "生管部", "專員"),
("岡山製造事業體", "資材處", "生管部", "班長"),
("岡山製造事業體", "資材處", "生管部", "副班長"),
("岡山製造事業體", "資材處", "生管部", "作業員"),
("岡山製造事業體", "資材處", "原物料控制部", "經副理"),
("岡山製造事業體", "資材處", "原物料控制部", "課長"),
("岡山製造事業體", "資材處", "原物料控制部", "專員"),
("岡山製造事業體", "資材處", "原物料控制部", "班長"),
("岡山製造事業體", "資材處", "原物料控制部", "副班長"),
("岡山製造事業體", "資材處", "原物料控制部", "作業員"),
("岡山製造事業體", "廠務與環安衛管理處", "", "處長"),
("岡山製造事業體", "廠務與環安衛管理處", "", "工程師"),
("岡山製造事業體", "廠務與環安衛管理處", "廠務部", "經副理"),
("岡山製造事業體", "廠務與環安衛管理處", "廠務部", "課長"),
("岡山製造事業體", "廠務與環安衛管理處", "廠務部", "工程師"),
("岡山製造事業體", "廠務與環安衛管理處", "廠務部", "專員"),
("產品事業體", "產品事業體", "廠務部", "處長"),
("產品事業體", "先進產品事業處", "", "處長"),
("產品事業體", "先進產品事業處", "產品管理部(APD)", "經副理"),
("產品事業體", "先進產品事業處", "產品管理部(APD)", "工程師"),
("產品事業體", "成熟產品事業處", "", "處長"),
("產品事業體", "成熟產品事業處", "產品管理部(MPD)", "經副理"),
("產品事業體", "成熟產品事業處", "產品管理部(MPD)", "專案經副理"),
("產品事業體", "成熟產品事業處", "產品管理部(MPD)", "工程師"),
("晶圓三廠", "晶圓三廠", "產品管理部(MPD)", "顧問"),
("晶圓三廠", "晶圓三廠", "產品管理部(MPD)", "專員"),
("晶圓三廠", "晶圓三廠", "品質部", "經副理"),
("晶圓三廠", "晶圓三廠", "品質部", "工程師"),
("晶圓三廠", "晶圓三廠", "品質部", "作業員"),
("晶圓三廠", "晶圓三廠", "製造部", "經副理"),
("晶圓三廠", "晶圓三廠", "製造部", "課長"),
("晶圓三廠", "晶圓三廠", "製造部", "班長"),
("晶圓三廠", "晶圓三廠", "製造部", "副班長"),
("晶圓三廠", "晶圓三廠", "製造部", "作業員"),
("晶圓三廠", "晶圓三廠", "廠務部(Fab3)", "經副理"),
("晶圓三廠", "晶圓三廠", "廠務部(Fab3)", "工程師"),
("晶圓三廠", "製程工程處", "工程一部", "經副理"),
("晶圓三廠", "製程工程處", "工程一部", "工程師"),
("晶圓三廠", "製程工程處", "工程二部", "經副理"),
("晶圓三廠", "製程工程處", "工程二部", "工程師"),
("晶圓三廠", "製程工程處", "工程三部", "經副理"),
("晶圓三廠", "製程工程處", "工程三部", "工程師"),
("晶圓三廠", "製程工程處", "製程整合部(Fab3)", "經副理"),
("晶圓三廠", "製程工程處", "製程整合部(Fab3)", "工程師"),
("集團人資行政事業體", "集團人資行政事業體", "製程整合部(Fab3)", "人資長"),
("集團人資行政事業體", "集團人資行政事業體", "行政總務管理部", "經副理"),
("集團人資行政事業體", "集團人資行政事業體", "行政總務管理部", "專員"),
("集團人資行政事業體", "集團人資行政事業體", "行政總務管理部", "助理"),
("集團人資行政事業體", "集團人資行政事業體", "招募任用部", "經副理"),
("集團人資行政事業體", "集團人資行政事業體", "招募任用部", "專員"),
("集團人資行政事業體", "集團人資行政事業體", "訓練發展部", "經副理"),
("集團人資行政事業體", "集團人資行政事業體", "訓練發展部", "專員"),
("集團人資行政事業體", "集團人資行政事業體", "薪酬管理部", "經副理"),
("集團人資行政事業體", "集團人資行政事業體", "薪酬管理部", "專員"),
("集團財務事業體", "集團財務事業體", "薪酬管理部", "財務長"),
("集團財務事業體", "岡山強茂財務處", "", "處長"),
("集團財務事業體", "岡山強茂財務處", "岡山強茂財務部", "經副理"),
("集團財務事業體", "岡山強茂財務處", "岡山強茂財務部", "課長"),
("集團財務事業體", "岡山強茂財務處", "岡山強茂財務部", "專員"),
("集團財務事業體", "集團財務事業體", "岡山強茂財務部", "專案副理"),
("集團會計事業體", "集團會計事業體", "岡山強茂財務部", "會計長"),
("集團會計事業體", "岡山會計處", "", "處長"),
("集團會計事業體", "岡山會計處", "會計部", "經副理"),
("集團會計事業體", "岡山會計處", "會計部", "課長"),
("集團會計事業體", "岡山會計處", "會計部", "專員"),
("集團會計事業體", "岡山會計處", "管理會計部", "經副理"),
("集團會計事業體", "岡山會計處", "管理會計部", "課長"),
("集團會計事業體", "岡山會計處", "管理會計部", "專員"),
("集團會計事業體", "集團會計處", "", "處長"),
("集團會計事業體", "集團會計處", "集團合併報表部", "經副理"),
("集團會計事業體", "集團會計處", "集團合併報表部", "專員"),
("集團資訊事業體", "集團資訊事業體", "集團合併報表部", "資訊長"),
("集團資訊事業體", "資安行動小組", "集團合併報表部", "課長"),
("集團資訊事業體", "資訊一處", "應用系統部", "經副理"),
("集團資訊事業體", "資訊一處", "應用系統部", "工程師"),
("集團資訊事業體", "資訊一處", "電腦整合製造部", "經副理"),
("集團資訊事業體", "資訊一處", "電腦整合製造部", "工程師"),
("集團資訊事業體", "資訊一處", "系統網路服務部", "經副理"),
("集團資訊事業體", "資訊一處", "系統網路服務部", "工程師"),
("集團資訊事業體", "資訊二處", "", "處長"),
("新創事業體", "新創事業體", "", "處長"),
("新創事業體", "新創事業體", "資源管理部", "經副理"),
("新創事業體", "新創事業體", "資源管理部", "專員"),
("新創事業體", "中低壓產品研發處", "", "經副理"),
("新創事業體", "研發中心", "", "工程師"),
("新創事業體", "高壓產品研發處", "", "經副理"),
("新創事業體", "研發中心", "", "工程師"),
("稽核室", "稽核室", "", "主任"),
("稽核室", "稽核室", "", "專員"),
("總經理室", "總經理室", "", "總裁"),
("總經理室", "總經理室", "", "總經理"),
("總經理室", "ESG專案辦公室", "", "經副理"),
("總經理室", "ESG專案辦公室", "", "課長"),
("總經理室", "ESG專案辦公室", "", "專員/工程師"),
("總經理室", "專案管理室", "", "副總經理"),
("總經理室", "專案管理室", "", "經副理"),
("總經理室", "專案管理室", "", "專員/工程師"),
("總品質事業體", "總品質事業體", "", "處長"),
("總品質事業體", "總品質事業體", "客戶品質管理部", "經副理"),
("總品質事業體", "總品質事業體", "客戶品質管理部", "課長"),
("總品質事業體", "總品質事業體", "客戶品質管理部", "工程師"),
("總品質事業體", "總品質事業體", "客戶品質管理部", "專員"),
("總品質事業體", "總品質事業體", "產品品質管理部", "經副理"),
("總品質事業體", "總品質事業體", "產品品質管理部", "課長"),
("總品質事業體", "總品質事業體", "產品品質管理部", "工程師"),
("總品質事業體", "總品質事業體", "產品品質管理部", "班長"),
("總品質事業體", "總品質事業體", "產品品質管理部", "作業員"),
("總品質事業體", "總品質事業體", "品質系統及客戶工程整合部", "經副理"),
("總品質事業體", "總品質事業體", "品質系統及客戶工程整合部", "課長"),
("總品質事業體", "總品質事業體", "品質系統及客戶工程整合部", "工程師"),
("總品質事業體", "總品質事業體", "封測外包品質管理部", "經副理"),
("總品質事業體", "總品質事業體", "封測外包品質管理部", "課長"),
("總品質事業體", "總品質事業體", "封測外包品質管理部", "工程師"),
("總品質事業體", "總品質事業體", "品質保證部", "經副理"),
("總品質事業體", "總品質事業體", "品質保證部", "課長"),
("總品質事業體", "總品質事業體", "品質保證部", "工程師"),
("總品質事業體", "總品質事業體", "品質保證部", "班長"),
("總品質事業體", "總品質事業體", "品質保證部", "副班長"),
("總品質事業體", "總品質事業體", "品質保證部", "作業員"),
("營業事業體", "營業事業體", "品質保證部", "副總經理"),
("營業事業體", "營業事業體", "品質保證部", "副總經理助理"),
("營業事業體", "商業開發暨市場應用處", "", "處長"),
("營業事業體", "商業開發暨市場應用處", "", "經理"),
("營業事業體", "商業開發暨市場應用處", "", "工程師"),
("營業事業體", "海外銷售事業處", "", "處長"),
("營業事業體", "海外銷售事業處", "日本區暨代工業務部", "經副理"),
("營業事業體", "海外銷售事業處", "日本區暨代工業務部", "課長"),
("營業事業體", "海外銷售事業處", "日本區暨代工業務部", "專員"),
("營業事業體", "海外銷售事業處", "日本區暨代工業務部", "助理"),
("營業事業體", "海外銷售事業處", "歐亞區業務部", "經副理"),
("營業事業體", "海外銷售事業處", "歐亞區業務部", "課長"),
("營業事業體", "海外銷售事業處", "歐亞區業務部", "專員"),
("營業事業體", "海外銷售事業處", "歐亞區業務部", "助理"),
("營業事業體", "海外銷售事業處", "韓國區業務部-韓國區", "經副理"),
("營業事業體", "海外銷售事業處", "韓國區業務部-韓國區", "課長"),
("營業事業體", "海外銷售事業處", "韓國區業務部-韓國區", "專員"),
("營業事業體", "海外銷售事業處", "韓國區業務部-韓國區", "助理"),
("營業事業體", "海外銷售事業處", "韓國區業務部-韓國區", "專案經理"),
("營業事業體", "海外銷售事業處", "美洲區業務部", "經副理"),
("營業事業體", "海外銷售事業處", "美洲區業務部", "課長"),
("營業事業體", "海外銷售事業處", "美洲區業務部", "專員"),
("營業事業體", "海外銷售事業處", "美洲區業務部", "助理"),
("營業事業體", "全球技術服務處", "", "處長"),
("營業事業體", "全球技術服務處", "", "工程師"),
("營業事業體", "全球技術服務處", "", "助理"),
("營業事業體", "全球技術服務處", "應用工程部(GTS)", "經副理"),
("營業事業體", "全球技術服務處", "應用工程部(GTS)", "專案經副理"),
("營業事業體", "全球技術服務處", "應用工程部(GTS)", "技術經副理"),
("營業事業體", "全球技術服務處", "應用工程部(GTS)", "工程師"),
("營業事業體", "全球技術服務處", "系統工程部", "經副理"),
("營業事業體", "全球技術服務處", "系統工程部", "工程師"),
("營業事業體", "全球技術服務處", "特性測試部", "經副理"),
("營業事業體", "全球技術服務處", "特性測試部", "課長"),
("營業事業體", "全球技術服務處", "特性測試部", "工程師"),
("營業事業體", "全球行銷暨業務支援處", "", "副總經理"),
("營業事業體", "全球行銷暨業務支援處", "業務生管部", "經副理"),
("營業事業體", "全球行銷暨業務支援處", "業務生管部", "課長"),
("營業事業體", "全球行銷暨業務支援處", "業務生管部", "專員"),
("營業事業體", "全球行銷暨業務支援處", "市場行銷企劃部", "處長"),
("營業事業體", "全球行銷暨業務支援處", "市場行銷企劃部", "經理"),
("營業事業體", "全球行銷暨業務支援處", "市場行銷企劃部", "專員"),
("營業事業體", "全球行銷暨業務支援處", "MOSFET晶圓採購部", "經副理"),
("營業事業體", "全球行銷暨業務支援處", "MOSFET晶圓採購部", "課長"),
("營業事業體", "全球行銷暨業務支援處", "MOSFET晶圓採購部", "專員"),
("營業事業體", "大中華區銷售事業處", "", "處長"),
("營業事業體", "大中華區銷售事業處", "台灣區業務部", "專員"),
("營業事業體", "大中華區銷售事業處", "台灣區業務部", "助理"),
("營業事業體", "大中華區銷售事業處", "業務一部", "處長/資深經理"),
("營業事業體", "大中華區銷售事業處", "業務一部", "經副理"),
("營業事業體", "大中華區銷售事業處", "業務一部", "專員"),
("營業事業體", "大中華區銷售事業處", "業務一部", "助理"),
("營業事業體", "大中華區銷售事業處", "業務二部", "處長/資深經理"),
("營業事業體", "大中華區銷售事業處", "業務二部", "經副理"),
("營業事業體", "大中華區銷售事業處", "業務二部", "專員"),
("營業事業體", "大中華區銷售事業處", "業務二部", "助理"),
]
# 建立結構化資料
HR_position_business_units = {} # 事業體
HR_position_divisions = {} # 處級單位
HR_position_departments = {} # 部級單位
HR_position_organization_positions = [] # 完整組織崗位關聯
# 關聯映射
businessToDivision = {} # 事業體 -> 處級單位列表
divisionToDepartment = {} # 處級單位 -> 部級單位列表
departmentToPosition = {} # 部級單位 -> 崗位列表
business_id = 1
division_id = 1
department_id = 1
position_id = 1
for business, division, department, position in raw_data:
# 處理事業體
if business and business not in HR_position_business_units:
HR_position_business_units[business] = {
'id': business_id,
'code': f'BU{str(business_id).zfill(3)}',
'name': business
}
business_id += 1
businessToDivision[business] = []
# 處理處級單位
if division and division not in HR_position_divisions:
HR_position_divisions[division] = {
'id': division_id,
'code': f'DIV{str(division_id).zfill(3)}',
'name': division,
'business': business
}
division_id += 1
divisionToDepartment[division] = []
# 建立事業體到處級的關聯
if business and division and division not in businessToDivision.get(business, []):
if business not in businessToDivision:
businessToDivision[business] = []
businessToDivision[business].append(division)
# 處理部級單位(可能為空)
dept_key = department if department else f"(直屬){division}"
if dept_key not in HR_position_departments:
HR_position_departments[dept_key] = {
'id': department_id,
'code': f'DEPT{str(department_id).zfill(3)}',
'name': department if department else '(直屬)',
'division': division
}
department_id += 1
departmentToPosition[dept_key] = []
# 建立處級到部級的關聯
if division and dept_key not in divisionToDepartment.get(division, []):
if division not in divisionToDepartment:
divisionToDepartment[division] = []
divisionToDepartment[division].append(dept_key)
# 處理崗位(去重)
if position and position not in departmentToPosition.get(dept_key, []):
departmentToPosition[dept_key].append(position)
# 建立完整組織崗位關聯
HR_position_organization_positions.append({
'id': position_id,
'business': business,
'division': division,
'department': department if department else '(直屬)',
'position': position
})
position_id += 1
return {
'HR_position_business_units': HR_position_business_units,
'HR_position_divisions': HR_position_divisions,
'HR_position_departments': HR_position_departments,
'HR_position_organization_positions': HR_position_organization_positions,
'businessToDivision': businessToDivision,
'divisionToDepartment': divisionToDepartment,
'departmentToPosition': departmentToPosition
}
if __name__ == '__main__':
# 測試
data = import_to_memory()
print(f"事業體數量: {len(data['HR_position_business_units'])}")
print(f"處級單位數量: {len(data['HR_position_divisions'])}")
print(f"部級單位數量: {len(data['HR_position_departments'])}")
print(f"組織崗位關聯數量: {len(data['HR_position_organization_positions'])}")
print()
print("事業體列表:")
for name, info in data['HR_position_business_units'].items():
print(f" - {info['id']}: {name}")