Files
2026-09-03 15:35:23 +08:00

307 lines
23 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
读取 db/menu_map.json, 结合领域释义, 构建功能树写入 SQLite(features 表)。
层级: level0=顶层模块, level1=分组, level2=菜单页(叶子)
并为每个叶子分配期望截图路径 screenshots/<序号_模块>/<分组>/<名称>.jpg
"""
import json, os, re, sqlite3
BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MAP = os.path.join(BASE, "db", "menu_map.json")
DB = os.path.join(BASE, "db", "research.db")
ORIGIN = "https://2haohr.com"
# ---- 模块级 释义/理解 ----
MOD = {
"工作台": ("HR 登录后的首页驾驶舱,聚合日程、待办、招聘/考勤/入离职概况、快捷入口、人事提醒与常用工具。", "系统门户与导航中枢,是使用频率最高的页面;开发时应做成可配置卡片式仪表盘。"),
"人事": ("员工全生命周期管理中心,含员工档案、花名册、入转调离、合同、奖惩等员工关系事务。", "HR 系统的核心主数据模块,其它模块(薪酬/考勤/社保)都依赖此处的员工主数据。"),
"组织": ("企业组织架构管理,含部门、岗位、职务、职级、工作地点、员工标签等组织主数据。", "组织与岗位主数据是权限、审批流、薪酬绩效归属的基础,须优先建设。"),
"招聘": ("从职位发布、简历/候选人管理、面试到入职的全流程招聘管理(ATS)。", "可独立成招聘子系统;与人事入职管理衔接形成招录闭环。"),
"考勤假期": ("考勤打卡、排班、考勤统计与假期(休假/余额/方案)管理。", "规则复杂度高(排班/加班/假期计算),是薪酬核算的关键数据来源。"),
"薪酬": ("工资表核算、发放、员工薪资档案、计薪规则与薪酬报表分析。", "涉及资金与个税,准确性与权限要求最高;依赖考勤与社保数据。"),
"审批": ("企业内各类事务的审批流引擎,含表单、模板库、代理、记录与交接。", "是贯穿全系统的通用能力(入职/请假/报销等都走审批),应做成可配置工作流平台。"),
"培训学习": ("线下培训、在线学习(课程/直播)、考试练习一体化的企业培训管理。", "偏 LMS 学习管理系统,可作为增值模块,与绩效/晋升联动。"),
"绩效": ("绩效考核方案、试用期/晋升考核、绩效档案与面谈记录管理。", "考核模板与指标库配置复杂;结果可回流薪酬(绩效工资)与人事(晋升)。"),
"社保公积金": ("参保账单、账单核对、参保档案与社保报表分析。", "地区政策差异大;数据对接社保代理或电子税务局,与薪酬个税强相关。"),
"行政管理": ("企业公告、制度、新闻、证明开具、会议室预定、问卷调查等行政 OA 事务。", "轻量 OA 能力,提升全员协作体验,非 HR 核心但常用。"),
"电子合同": ("劳动合同在线签署、合同档案库、印章与合同模板管理。", "需对接第三方 CA/电子签名平台,具法律效力,替代纸质合同。"),
"背景调查": ("入职前的第三方背景调查服务入口(学历/工作履历/征信等核验)。", "属增值付费服务,通常对接外部背调供应商,单页服务入口。"),
"人才测评": ("岗位胜任力/性格等人才测评的第三方服务入口。", "增值付费服务,对接外部测评供应商,用于招聘与人才盘点。"),
"员工福利": ("员工福利商城、积分管理、商品专区与健康(平安好医生)等福利运营。", "员工激励与福利发放渠道,偏运营,可作为增值模块。"),
"人事仪表盘": ("自定义人事数据看板与面向管理层的经营报告。", "BI 可视化能力,聚合各模块指标,服务决策。"),
"第三方对接": ("与企业微信、钉钉、飞书、携程商旅等外部平台的对接配置。", "集成能力,实现组织同步/消息推送/差旅等,是生态打通的关键。"),
"培训商城": ("外部培训课程商城入口(采购付费课程)。", "疑似外部商城,映射异常;实际为付费课程采购入口,按单页外链处理。"),
"短信发送": ("批量短信发送与发送记录查询。", "通知触达通道,需短信通道额度,常被审批/考勤等模块调用。"),
"电子工资条": ("工资条在线发送、员工确认反馈、发放记录与统计。", "解决工资条保密发放与确认留痕,依赖薪酬工资表数据。"),
"智能薪酬": ("新一代薪酬核算平台:数据采集、薪酬档案、个税、成本、报表全流程。", "比传统‘薪酬’模块更完整,含数据采集与成本分析,是薪酬能力的升级版。"),
"个税对接": ("人员信息报送、个税申报、纳税单位管理,对接自然人电子税务局。", "合规刚需,与薪酬核算联动完成代扣代缴。"),
"AI员工助手": ("面向员工的 AI 问答助手、知识库管理与使用统计。", "AI 能力,降低 HR 重复答疑成本;知识库质量决定效果。"),
"应用管理": ("企业已开通应用/增值服务的管理与开通入口。", "应用中心/权限开关,管理各功能模块的启用状态。"),
}
# 单页模块(无侧边栏)——给它们补一个叶子指向落地页
SINGLE_PAGE = {
"工作台": ("工作台首页", "/desk"),
"背景调查": ("背景调查服务", "/hrService/background-investigation/entry"),
"人才测评": ("人才测评服务", "/hrService/employee-assessment/"),
"应用管理": ("应用管理", "/application-manage/application/list"),
"培训商城": ("培训商城(外部课程采购)", "/training-mall"),
}
# 映射异常需忽略其抓到的错误分组的模块
FORCE_SINGLE = {"培训商城"}
# ---- 叶子级 释义/理解, 键: "名称" 或 "模块/名称"(消歧) ----
DESC = {
# 人事/员工管理
"员工花名册": ("全体员工的核心名册列表,支持按部门/状态筛选、字段自定义、批量导入导出。", "员工主数据入口,几乎所有人事操作从此发起;字段可配置是关键需求。"),
"员工档案库": ("员工完整电子档案(证件/合同/学历/家庭等)的集中存储与调阅。", "360°档案,强调附件管理与字段完整率统计。"),
"人事/统计分析": ("按维度对在职/结构/异动等人事数据的图表统计分析。", "偏 BI 图表,服务人事盘点。"),
"人事报表": ("各类标准人事报表(在职、异动、合同到期等)的生成与导出。", "满足周期性上报需求,需支持自定义与导出。"),
"万能人事表格": ("自定义字段与筛选组合生成任意人事数据表格。", "灵活取数工具,降低对开发出报表的依赖。"),
"人事动态": ("入职/转正/离职/生日等人事事件的动态时间线。", "事件流,可驱动关怀通知与提醒。"),
"入职管理": ("待入职/入职办理流程,含入职登记、资料收集与开通账号。", "与招聘‘已入职’衔接;支持员工自助填写(AI 辅助)。"),
"转正管理": ("试用期到期提醒与转正申请/审批办理。", "与绩效试用期考核联动。"),
"离职管理": ("离职申请、离职办理、交接与离职档案。", "涉及权限回收、薪酬结算、社保停缴等联动。"),
"人事异动": ("部门/岗位/职级调动等异动记录与审批。", "组织变动留痕,影响薪酬与汇报关系。"),
"关怀通知": ("生日/周年/证件到期等关怀提醒与自动通知。", "员工体验运营,可配置触发规则与文案。"),
"人事/合同管理": ("劳动合同签订、续签、到期提醒与合同台账。", "与电子合同模块可打通;合同到期预警是刚需。"),
"沟通记录": ("HR 与员工的沟通/谈话记录留存。", "员工关系管理留痕,支撑争议处理。"),
"任职记录": ("员工历史任职(岗位/部门)变化记录。", "履历追溯,来源于人事异动。"),
"培训经历": ("员工参加培训的经历记录。", "与培训模块数据互通。"),
"奖惩记录": ("员工奖励与处罚记录管理。", "影响绩效与晋升评估。"),
"考察期管理": ("特定员工考察期的设置与跟踪。", "试用/观察期管理的补充。"),
"实习生管理": ("实习生专项档案与转正管理。", "针对实习用工的差异化流程。"),
# 组织
"组织管理": ("部门树的增删改与部门负责人、编制等管理。", "组织主数据根节点,权限与审批的部门维度基础。"),
"架构图": ("可视化组织架构图展示与调整。", "直观呈现汇报关系,支持导出。"),
"工作地点": ("企业办公/工作地点的维护。", "关联考勤打卡范围与员工工作城市。"),
"岗位管理": ("岗位设置、岗位职责与编制管理。", "岗位是招聘/薪酬/绩效的归属维度。"),
"职务管理": ("职务序列与职务信息管理。", "与职级配合构成职级体系。"),
"员工标签": ("为员工打自定义标签用于分组/筛选。", "灵活分群,服务精细化运营与权限。"),
"职级管理": ("职级/职等体系维护。", "薪酬带宽与晋升通道的基础。"),
"组织报表": ("组织维度(编制/人数/结构)的报表。", "支持组织盘点。"),
# 招聘
"招聘/概览": ("招聘整体数据概览(职位/候选人/面试等看板)。", "招聘经理入口页。"),
"招聘中": ("处于招聘流程中的候选人列表与阶段管理。", "ATS 核心看板,支持阶段流转。"),
"已入职": ("已录用入职的候选人。", "与人事入职管理衔接。"),
"已淘汰": ("被淘汰候选人归档。", "复用人才库,支持再激活。"),
"招聘职位": ("招聘岗位(JD)的发布与管理。", "对接招聘门户与渠道分发。"),
"招聘门户": ("企业招聘官网/微信招聘门户配置。", "候选人投递入口,支持自定义。"),
"面试日程": ("面试安排、通知与面试评价。", "支持面试官协同与日程提醒。"),
"人才库": ("企业人才储备库。", "沉淀历史候选人,降低复招成本。"),
"招聘报表": ("招聘漏斗/周期/渠道效果报表。", "衡量招聘效率。"),
"招聘分析": ("招聘数据多维分析。", "优化招聘策略。"),
"招聘团队": ("招聘协作团队与角色权限设置。", "多角色协同招聘。"),
"招聘工具": ("招聘相关工具(如筛选/AI)配置。", "提效工具集。"),
"招聘渠道": ("招聘发布渠道与聚合配置。", "对接外部招聘网站。"),
"招聘/模板设置": ("招聘环节的邮件/短信/评价模板。", "标准化沟通。"),
"更多设置": ("招聘模块其它设置项。", "杂项配置。"),
# 考勤
"每日考勤": ("按日展示全员打卡与异常。", "考勤日常监控入口。"),
"月考勤表": ("按月汇总的考勤统计表。", "薪酬核算的考勤依据。"),
"明细记录": ("原始打卡明细记录查询。", "异常核查与申诉依据。"),
"考勤/考勤报表": ("各类考勤统计报表。", "周期性考勤上报。"),
"字段管理": ("考勤表字段自定义。", "适配企业统计口径。"),
"考勤确认": ("月末考勤结果确认锁定。", "确认后进入薪酬核算。"),
"考勤分组": ("按人群划分考勤规则分组。", "不同班制人群差异化管理。"),
"排班管理": ("排班表编制与发布。", "复杂班制的核心,支持轮班。"),
"考勤规则": ("上下班/加班/迟到等规则配置。", "考勤计算引擎的规则中心。"),
"打卡方式": ("GPS/WiFi/人脸等打卡方式配置。", "决定打卡合规与防作弊。"),
"考勤设置": ("考勤模块的其它设置。", "杂项配置。"),
"休假一览": ("全员请假记录总览。", "假期使用监控。"),
"手动调整": ("手动调整假期余额/记录。", "异常修正入口。"),
"假期余额": ("各员工各类假期余额。", "请假审批的额度依据。"),
"假期方案": ("年假/事病假等假期规则方案。", "假期计算的规则中心。"),
"假期设置": ("假期模块其它设置。", "杂项配置。"),
# 薪酬(传统)
"月工资表": ("按月生成的工资核算表。", "薪酬核算主表,支持公式与批量。"),
"工资发放": ("工资发放确认与银行代发。", "对接银行代发,资金安全关键。"),
"员工薪资": ("员工薪资档案(基本工资/结构)。", "计薪基础数据。"),
"薪酬/薪酬报表": ("薪酬相关报表。", "成本与发放统计。"),
"薪酬/薪酬分析": ("薪酬多维分析。", "人力成本洞察。"),
"计薪规则": ("计薪周期与规则配置。", "薪酬引擎规则。"),
"薪酬/薪酬设置": ("薪酬模块设置。", "结构/权限配置。"),
"年终奖计算": ("年终奖专项计税计算。", "年度一次性奖金个税处理。"),
"发送工资条": ("发送电子工资条(跳转电子工资条模块)。", "与电子工资条模块共用。"),
# 审批
"审批表单": ("各类审批单据的发起与列表。", "通用审批入口。"),
"审批模板库": ("预置审批流程模板。", "快速套用标准流程。"),
"审批代理": ("审批人不在时的代理设置。", "保障流程不中断。"),
"审批记录": ("历史审批记录查询。", "留痕与追溯。"),
"审批交接": ("审批任务交接处理。", "人员变动时的流程转交。"),
# 培训
"培训计划": ("线下培训计划制定与管理。", "培训组织入口。"),
"开课日程": ("培训课程排期日程。", "线下课程时间管理。"),
"培训记录": ("培训完成记录。", "回流员工培训经历。"),
"课程库": ("在线课程资源库。", "LMS 内容中心。"),
"学习计划": ("为员工指派学习计划。", "驱动在线学习。"),
"在线直播": ("在线直播课安排。", "远程培训能力。"),
"学习进度": ("员工学习进度跟踪。", "学习效果监控。"),
"学习记录": ("在线学习历史记录。", "留痕与统计。"),
"题库管理": ("考试题目库维护。", "考试基础数据。"),
"试卷管理": ("试卷组卷与管理。", "考试内容配置。"),
"考试安排": ("考试计划安排。", "组织在线考试。"),
"考试记录": ("考试成绩记录。", "培训效果评估。"),
"讲师设置": ("培训讲师维护。", "线下培训资源。"),
"团队设置": ("培训管理团队设置。", "权限协作。"),
"培训学习/自定义设置": ("培训模块自定义设置。", "杂项配置。"),
# 绩效
"绩效/概览": ("绩效整体概览看板。", "绩效经理入口。"),
"绩效考核": ("发起与管理绩效考核方案。", "绩效核心,含指标与流程。"),
"历史绩效考核": ("历史考核归档查询。", "结果追溯。"),
"试用期考核": ("试用期专项考核。", "与转正联动。"),
"晋升考核": ("晋升评估考核。", "与职级晋升联动。"),
"考核组管理": ("考核分组管理。", "按人群组织考核。"),
"员工绩效档案": ("员工历史绩效档案。", "绩效履历。"),
"绩效考核记录": ("考核过程与结果记录。", "留痕。"),
"绩效面谈记录": ("绩效面谈内容记录。", "改进跟踪。"),
"指标库": ("绩效指标(KPI/OKR)库。", "考核内容基础。"),
"考核模板库": ("考核表模板库。", "快速套用。"),
"考核团队": ("绩效管理团队设置。", "权限协作。"),
"绩效/自定义设置": ("绩效模块自定义设置。", "杂项配置。"),
# 社保
"参保账单": ("每月社保公积金参保账单。", "缴费核对入口。"),
"账单核对": ("账单与实缴核对。", "差异排查。"),
"参保档案": ("员工参保档案。", "参保状态主数据。"),
"社保报表": ("社保缴纳报表。", "上报与统计。"),
"社保分析": ("社保成本分析。", "成本洞察。"),
"参保规则": ("参保基数/比例规则。", "地区政策配置核心。"),
# 行政
"企业公告": ("企业公告发布与阅读。", "全员触达。"),
"企业制度": ("企业规章制度发布。", "制度沉淀。"),
"新闻动态": ("企业新闻动态。", "文化运营。"),
"开具证明": ("在职/收入等证明在线开具。", "员工自助高频需求。"),
"会议预定记录": ("会议室预定记录。", "资源使用查询。"),
"会议室管理": ("会议室资源维护。", "行政资源管理。"),
"会议操作记录": ("会议室操作日志。", "留痕。"),
"问卷管理": ("企业问卷调查发起与统计。", "满意度/调研工具。"),
"问卷模板库": ("问卷模板库。", "快速创建。"),
"问卷操作记录": ("问卷操作日志。", "留痕。"),
# 电子合同
"电子合同/概览": ("电子合同数据概览。", "签署情况看板。"),
"签署中": ("签署流程进行中的合同。", "待办跟踪。"),
"已签署": ("已完成签署合同。", "生效合同管理。"),
"已作废": ("作废合同归档。", "留痕。"),
"合同档案库": ("电子合同档案库。", "集中存储与检索。"),
"企业印章": ("企业电子印章管理。", "签署授权核心。"),
"合同模板": ("合同模板管理。", "标准化签署。"),
"合同包": ("合同套餐/额度包。", "计费额度管理。"),
# 员工福利
"员工福利概况": ("福利运营数据概览。", "福利运营入口。"),
"员工积分管理": ("员工积分发放与管理。", "激励体系。"),
"商品专区管理": ("福利商城商品管理。", "福利兑换运营。"),
"平安好医生": ("对接平安好医生健康服务。", "健康福利增值。"),
# 仪表盘
"我的仪表盘": ("个人自定义数据看板。", "BI 自助看板。"),
"报告老板": ("面向管理层的经营人事报告。", "高层决策报告。"),
# 第三方对接
"企业微信": ("对接企业微信(组织同步/消息)。", "生态集成。"),
"钉钉": ("对接钉钉。", "生态集成。"),
"飞书": ("对接飞书。", "生态集成。"),
"携程商旅": ("对接携程商旅(差旅)。", "差旅报销联动。"),
# 短信
"短信发送": ("批量发送短信通知。", "触达通道。"),
"发送记录": ("短信发送记录。", "留痕与计费。"),
# 电子工资条
"电子工资条/发送工资条": ("发送电子工资条给员工。", "保密发放。"),
"发放记录": ("工资条发放记录。", "留痕。"),
"反馈记录": ("员工对工资条的确认/异议。", "确认闭环。"),
"电子工资条/统计分析": ("工资条发送与确认统计。", "触达率监控。"),
# 智能薪酬
"智能薪酬/概览": ("智能薪酬数据概览。", "薪酬看板。"),
"薪酬核算": ("智能化薪酬核算。", "核心核算引擎。"),
"员工考勤": ("采集考勤数据用于计薪。", "数据采集环节。"),
"业务提报": ("采集业务提成/绩效等计薪数据。", "数据采集环节。"),
"薪酬档案": ("员工薪酬档案。", "计薪基础。"),
"减除费用确认": ("个税减除费用确认。", "个税计算前置。"),
"税前扣除": ("专项附加扣除等税前扣除。", "个税合规。"),
"个税记录": ("个税计算记录。", "代扣代缴留痕。"),
"成本明细": ("人力成本明细。", "成本核算。"),
"薪酬报表": ("智能薪酬报表。", "统计。"),
"薪酬分析": ("智能薪酬分析。", "成本洞察。"),
"薪酬结构": ("薪酬结构(薪资项)配置。", "计薪规则基础。"),
"基础设置": ("智能薪酬基础设置。", "公司级配置。"),
"成本设置": ("成本核算规则设置。", "成本分摊配置。"),
# 个税
"人员信息报送": ("向税务报送人员信息。", "个税申报前置。"),
"个税申报": ("个人所得税申报。", "合规刚需。"),
"纳税单位管理": ("纳税主体单位管理。", "多主体申报。"),
# AI
"AI员工助手/AI员工助手": ("面向员工的 AI 问答助手。", "降低 HR 答疑成本。"),
"知识库管理": ("AI 助手知识库维护。", "决定回答质量。"),
"员工助手设置": ("AI 助手行为设置。", "配置。"),
"总体使用情况": ("AI 助手使用统计。", "效果度量。"),
}
def desc_for(module, group, name):
for k in (f"{module}/{name}", name):
if k in DESC:
return DESC[k]
return (f"{module}模块下「{name}」相关功能页。", "映射自侧边栏菜单,待补充细化。")
def sanitize(s):
s = re.sub(r'[\\/:*?"<>|]', "_", s).strip()
return s[:40] or "page"
def main():
data = json.load(open(MAP))
conn = sqlite3.connect(DB); conn.row_factory = sqlite3.Row
cur = conn.cursor()
# 先清空(可重复执行)
cur.execute("DELETE FROM features")
def up(obj):
keys = list(obj.keys()); cols = ",".join(keys); ph = ",".join(["?"]*len(keys))
cur.execute(f"INSERT OR REPLACE INTO features ({cols}) VALUES ({ph})", [obj[k] for k in keys])
mod_order = list(data.keys())
for mi, module in enumerate(mod_order, 1):
v = data[module]
md, mu = MOD.get(module, (f"{module}模块。", ""))
mod_key = f"mod::{module}"
seq_mod = f"{mi:02d}_{sanitize(module)}"
up(dict(node_key=mod_key, parent_key="", level=0, name=module,
full_path=module, url=v.get("loc",""), description=md, understanding=mu,
sort_order=mi, keep=1))
groups = v.get("groups", [])
if module in FORCE_SINGLE:
groups = []
# 单页模块补叶子
if not groups and module in SINGLE_PAGE:
nm, path = SINGLE_PAGE[module]
d, u = desc_for(module, "", nm)
leaf_key = f"{module}::{path}"
rel = f"screenshots/{seq_mod}/{sanitize(nm)}.jpg"
up(dict(node_key=leaf_key, parent_key=mod_key, level=2, name=nm,
full_path=f"{module} / {nm}", url=ORIGIN+path if path.startswith('/') else path,
description=d, understanding=u, screenshot_path=rel, sort_order=1, keep=1))
continue
gi = 0
for g in groups:
gtitle = g.get("title") or "常规"
gi += 1
grp_key = f"{mod_key}::grp::{gi}_{gtitle}"
up(dict(node_key=grp_key, parent_key=mod_key, level=1, name=gtitle,
full_path=f"{module} / {gtitle}", url="", description=f"{module}模块下「{gtitle}」功能分组。",
understanding="", sort_order=gi, keep=1))
for ii, it in enumerate(g["items"], 1):
nm = it["name"]; href = it["href"]
url = href if href.startswith("http") else ORIGIN + href
d, u = desc_for(module, gtitle, nm)
leaf_key = f"{module}::{href}"
rel = f"screenshots/{seq_mod}/{sanitize(gtitle)}/{ii:02d}_{sanitize(nm)}.jpg"
up(dict(node_key=leaf_key, parent_key=grp_key, level=2, name=nm,
full_path=f"{module} / {gtitle} / {nm}", url=url,
description=d, understanding=u, screenshot_path=rel, sort_order=ii, keep=1))
conn.commit()
# 统计
for lv in (0,1,2):
n = cur.execute("SELECT COUNT(*) FROM features WHERE level=?", (lv,)).fetchone()[0]
print(f"level{lv}: {n}")
print("total:", cur.execute("SELECT COUNT(*) FROM features").fetchone()[0])
conn.close()
if __name__ == "__main__":
main()