255af519d2
Phase 1 紧急修复(8项): - 社保城市选择改为可输入 - 社保上下限拆分(三险/医保独立基数) - 公积金试算结果展示修复 - 花名册合同保存修复(日期ISO格式) - 薪酬批次创建失败修复(城市过滤+错误处理) - 证据链查看修复 - 个税计算修复(blank_employees读取基本工资) - 加班费倍率读取配置 Phase 2 功能完善(3项): - 批量导入per-row异常捕获+导入按钮 - 单人发薪UI入口优化 - 解除协议模板补充(员工提出离职版) Phase 3 后期规划(4项): - 工资表导入功能(POST /import/payroll + 前端入口) - 大病险/长护险附加险种(extraInsurances JSON + 计算适配) - 专项附加扣除按月录入(SpecialDeductionRecord模型 + 前端Tab) - 预置河北省社保政策(seed数据)
317 lines
12 KiB
TypeScript
317 lines
12 KiB
TypeScript
/**
|
||
* 用工文本模板库
|
||
* 提供合同、制度、通知等常用文本模板,HR 可基于模板快速生成文档
|
||
*/
|
||
|
||
export interface DocumentTemplate {
|
||
id: string
|
||
name: string
|
||
category: 'CONTRACT' | 'RULES' | 'NOTICE' | 'AGREEMENT' | 'OTHER'
|
||
description: string
|
||
content: string
|
||
variables: string[] // 模板变量列表,如 ['employeeName', 'startDate', 'salary']
|
||
}
|
||
|
||
export const documentTemplates: DocumentTemplate[] = [
|
||
{
|
||
id: 'tpl_fixed_term_contract',
|
||
name: '固定期限劳动合同',
|
||
category: 'CONTRACT',
|
||
description: '标准固定期限劳动合同模板,适用于大多数正式员工',
|
||
variables: ['companyName', 'employeeName', 'idCard', 'address', 'phone', 'startDate', 'endDate', 'position', 'workplace', 'probationMonths', 'monthlySalary', 'socialInsBase'],
|
||
content: `劳动合同书
|
||
|
||
甲方(用人单位):{{companyName}}
|
||
乙方(劳动者):{{employeeName}}
|
||
|
||
根据《中华人民共和国劳动合同法》及相关法律法规,甲乙双方在平等自愿、协商一致的基础上,签订本劳动合同。
|
||
|
||
第一条 合同期限
|
||
本合同为固定期限劳动合同,自{{startDate}}起至{{endDate}}止,其中试用期{{probationMonths}}个月。
|
||
|
||
第二条 工作内容和工作地点
|
||
乙方担任{{position}}岗位,工作地点为{{workplace}}。
|
||
|
||
第三条 工作时间和休息休假
|
||
甲方执行标准工时制度,乙方每日工作时间不超过8小时,每周不超过40小时。
|
||
|
||
第四条 劳动报酬
|
||
乙方试用期月工资为人民币{{monthlySalary}}元,转正后月工资为人民币{{monthlySalary}}元,甲方于每月15日前支付上月工资。
|
||
|
||
第五条 社会保险和福利
|
||
甲方依法为乙方缴纳社会保险,缴费基数为{{socialInsBase}}元。
|
||
|
||
第六条 劳动保护、劳动条件和职业危害防护
|
||
甲方为乙方提供符合国家规定的劳动保护条件。
|
||
|
||
第七条 合同解除和终止
|
||
双方解除和终止劳动合同,应严格按照《劳动合同法》的规定执行。
|
||
|
||
第八条 违约责任
|
||
任何一方违反本合同约定,应承担相应的违约责任。
|
||
|
||
第九条 争议解决
|
||
因履行本合同发生的争议,双方应协商解决;协商不成的,可向劳动争议仲裁委员会申请仲裁。
|
||
|
||
第十条 其他
|
||
本合同一式两份,甲乙双方各执一份,自双方签字盖章之日起生效。
|
||
|
||
甲方(盖章):____________ 乙方(签字):____________
|
||
日期:____年__月__日 日期:____年__月__日`,
|
||
},
|
||
{
|
||
id: 'tpl_open_ended_contract',
|
||
name: '无固定期限劳动合同',
|
||
category: 'CONTRACT',
|
||
description: '无固定期限劳动合同模板,适用于符合签订条件的情况',
|
||
variables: ['companyName', 'employeeName', 'startDate', 'position', 'monthlySalary'],
|
||
content: `无固定期限劳动合同书
|
||
|
||
甲方(用人单位):{{companyName}}
|
||
乙方(劳动者):{{employeeName}}
|
||
|
||
根据《中华人民共和国劳动合同法》及相关法律法规,甲乙双方在平等自愿、协商一致的基础上,签订无固定期限劳动合同。
|
||
|
||
第一条 合同期限
|
||
本合同为无固定期限劳动合同,自{{startDate}}起生效,至法定终止条件出现时终止。
|
||
|
||
第二条 工作内容
|
||
乙方担任{{position}}岗位。
|
||
|
||
第三条 劳动报酬
|
||
乙方月工资为人民币{{monthlySalary}}元。
|
||
|
||
(其余条款参照固定期限劳动合同模板)
|
||
|
||
甲方(盖章):____________ 乙方(签字):____________
|
||
日期:____年__月__日 日期:____年__月__日`,
|
||
},
|
||
{
|
||
id: 'tpl_termination_agreement',
|
||
name: '解除劳动合同协议书',
|
||
category: 'AGREEMENT',
|
||
description: '协商一致解除劳动合同协议书模板(用人单位提出)',
|
||
variables: ['companyName', 'employeeName', 'idCard', 'terminationDate', 'compensation', 'lastWorkDay', 'socialInsEndMonth', 'housingFundEndMonth'],
|
||
content: `解除劳动合同协议书
|
||
|
||
甲方(用人单位):{{companyName}}
|
||
乙方(劳动者):{{employeeName}},身份证号:{{idCard}}
|
||
|
||
甲乙双方经协商一致,就解除劳动合同事宜达成如下协议:
|
||
|
||
一、解除日期
|
||
双方同意于{{terminationDate}}解除劳动合同,乙方最后工作日为{{lastWorkDay}}。
|
||
|
||
二、经济补偿
|
||
甲方同意向乙方支付经济补偿金人民币{{compensation}}元,于乙方办理完工作交接手续后__个工作日内一次性支付。
|
||
|
||
三、工资结算
|
||
甲方结清乙方截至解除日的所有工资、加班费等劳动报酬。
|
||
|
||
四、社会保险和公积金
|
||
甲方为乙方缴纳社会保险至{{socialInsEndMonth}}月,住房公积金缴存至{{housingFundEndMonth}}月。
|
||
|
||
五、工作交接
|
||
乙方应在解除日前完成工作交接,归还甲方所有财物和资料。
|
||
|
||
六、保密义务
|
||
乙方解除劳动合同后,仍应遵守保密义务,不得泄露甲方商业秘密。
|
||
|
||
七、争议解决
|
||
本协议履行过程中如发生争议,双方应协商解决;协商不成的,可向劳动争议仲裁委员会申请仲裁。
|
||
|
||
八、其他
|
||
本协议一式两份,甲乙双方各执一份,自双方签字盖章之日起生效。
|
||
|
||
甲方(盖章):____________ 乙方(签字):____________
|
||
日期:____年__月__日 日期:____年__月__日`,
|
||
},
|
||
{
|
||
id: 'tpl_termination_agreement_employee',
|
||
name: '解除劳动合同协议书(员工提出离职)',
|
||
category: 'AGREEMENT',
|
||
description: '员工主动提出离职的解除劳动合同协议书模板',
|
||
variables: ['companyName', 'employeeName', 'idCard', 'terminationDate', 'lastWorkDay', 'socialInsEndMonth', 'housingFundEndMonth', 'resignationReason'],
|
||
content: `解除劳动合同协议书
|
||
|
||
甲方(用人单位):{{companyName}}
|
||
乙方(劳动者):{{employeeName}},身份证号:{{idCard}}
|
||
|
||
乙方因个人原因主动提出离职,经甲乙双方友好协商,就解除劳动合同事宜达成如下协议:
|
||
|
||
一、离职原因
|
||
乙方因{{resignationReason}},自愿提出解除劳动合同。
|
||
|
||
二、解除日期
|
||
双方同意于{{terminationDate}}解除劳动合同,乙方最后工作日为{{lastWorkDay}}。
|
||
|
||
三、工资结算
|
||
甲方结清乙方截至解除日的所有工资、加班费等劳动报酬,于乙方办理完工作交接手续后__个工作日内一次性支付。
|
||
|
||
四、社会保险和公积金
|
||
甲方为乙方缴纳社会保险至{{socialInsEndMonth}}月,住房公积金缴存至{{housingFundEndMonth}}月。
|
||
|
||
五、工作交接
|
||
乙方应在最后工作日前完成工作交接,归还甲方所有财物和资料。
|
||
|
||
六、经济补偿
|
||
因乙方主动提出离职,甲方无需向乙方支付经济补偿金。乙方确认对此无异议。
|
||
|
||
七、保密义务
|
||
乙方解除劳动合同后,仍应遵守保密义务,不得泄露甲方商业秘密。
|
||
|
||
八、竞业限制
|
||
如双方另行签有竞业限制协议,乙方应继续履行竞业限制义务。
|
||
|
||
九、争议解决
|
||
本协议履行过程中如发生争议,双方应协商解决;协商不成的,可向劳动争议仲裁委员会申请仲裁。
|
||
|
||
十、其他
|
||
1. 本协议签订后,双方劳动关系即告终止,双方不再存在任何劳动争议。
|
||
2. 本协议一式两份,甲乙双方各执一份,自双方签字盖章之日起生效。
|
||
|
||
甲方(盖章):____________ 乙方(签字):____________
|
||
日期:____年__月__日 日期:____年__月__日`,
|
||
},
|
||
{
|
||
id: 'tpl_employee_handbook_notice',
|
||
name: '员工手册公示通知',
|
||
category: 'NOTICE',
|
||
description: '员工手册公示通知模板,用于民主程序第四步公示',
|
||
variables: ['companyName', 'publishDate', 'effectiveDate'],
|
||
content: `关于发布《员工手册》的通知
|
||
|
||
致全体员工:
|
||
|
||
经职工代表大会讨论通过,并经与工会平等协商,{{companyName}}现正式发布《员工手册》({{publishDate}}版),自{{effectiveDate}}起施行。
|
||
|
||
请全体员工认真阅读并遵守《员工手册》的各项规定。如有疑问,请联系人力资源部。
|
||
|
||
特此通知。
|
||
|
||
{{companyName}}
|
||
{{publishDate}}`,
|
||
},
|
||
{
|
||
id: 'tpl_rules_discussion_notice',
|
||
name: '规章制度讨论通知',
|
||
category: 'NOTICE',
|
||
description: '规章制度职工讨论通知,用于民主程序第二步',
|
||
variables: ['companyName', 'meetingDate', 'meetingLocation', 'policyTitle'],
|
||
content: `关于召开职工代表大会讨论{{policyTitle}}的通知
|
||
|
||
致全体职工代表:
|
||
|
||
根据《劳动合同法》第四条规定,用人单位制定规章制度应当经职工代表大会或全体职工讨论。现定于{{meetingDate}}在{{meetingLocation}}召开职工代表大会,讨论《{{policyTitle}}》草案。
|
||
|
||
请各位职工代表准时出席,充分发表意见和建议。
|
||
|
||
特此通知。
|
||
|
||
{{companyName}}
|
||
____年__月__日`,
|
||
},
|
||
{
|
||
id: 'tpl_disciplinary_notice',
|
||
name: '违纪处分通知书',
|
||
category: 'NOTICE',
|
||
description: '员工违纪处分通知书模板',
|
||
variables: ['employeeName', 'department', 'violationDate', 'violationDescription', 'disciplineType', 'policyBasis', 'companyName'],
|
||
content: `违纪处分通知书
|
||
|
||
{{employeeName}}({{department}}):
|
||
|
||
经查,你于{{violationDate}}存在以下违纪行为:
|
||
{{violationDescription}}
|
||
|
||
上述行为违反了公司《{{policyBasis}}》的相关规定。根据公司规章制度,决定给予你以下处分:
|
||
{{disciplineType}}
|
||
|
||
如对本处分决定有异议,你可以在收到本通知之日起__日内向人力资源部提出书面申诉。
|
||
|
||
特此通知。
|
||
|
||
{{companyName}}
|
||
____年__月__日
|
||
|
||
签收人:____________ 日期:____年__月__日`,
|
||
},
|
||
{
|
||
id: 'tpl_probation_notice',
|
||
name: '试用期转正通知书',
|
||
category: 'NOTICE',
|
||
description: '试用期考核合格转正通知',
|
||
variables: ['employeeName', 'position', 'probationEndDate', 'regularDate', 'monthlySalary', 'companyName'],
|
||
content: `试用期转正通知书
|
||
|
||
{{employeeName}}:
|
||
|
||
经考核,你在试用期内表现合格,符合岗位要求。现通知你:
|
||
|
||
一、自{{regularDate}}起正式转正,担任{{position}}岗位。
|
||
二、转正后月工资为人民币{{monthlySalary}}元。
|
||
三、试用期至{{probationEndDate}}结束。
|
||
|
||
请继续遵守公司各项规章制度,努力工作。
|
||
|
||
{{companyName}}
|
||
____年__月__日`,
|
||
},
|
||
{
|
||
id: 'tpl_contract_expiry_notice',
|
||
name: '合同到期不续签通知书',
|
||
category: 'NOTICE',
|
||
description: '合同到期公司决定不续签的通知',
|
||
variables: ['employeeName', 'contractEndDate', 'companyName', 'compensation', 'lastWorkDay'],
|
||
content: `劳动合同到期不续签通知书
|
||
|
||
{{employeeName}}:
|
||
|
||
你与公司签订的劳动合同将于{{contractEndDate}}到期。经公司研究决定,合同到期后不再与你续签劳动合同。
|
||
|
||
请你于{{lastWorkDay}}前完成工作交接手续。公司将在你完成交接后,依法支付经济补偿金人民币{{compensation}}元。
|
||
|
||
特此通知。
|
||
|
||
{{companyName}}
|
||
____年__月__日
|
||
|
||
签收人:____________ 日期:____年__月__日`,
|
||
},
|
||
]
|
||
|
||
/**
|
||
* 获取所有模板
|
||
*/
|
||
export function getAllTemplates() {
|
||
return documentTemplates.map(({ content, ...rest }) => rest)
|
||
}
|
||
|
||
/**
|
||
* 获取模板详情(含内容)
|
||
*/
|
||
export function getTemplateById(id: string) {
|
||
return documentTemplates.find(t => t.id === id) || null
|
||
}
|
||
|
||
/**
|
||
* 按分类获取模板
|
||
*/
|
||
export function getTemplatesByCategory(category: string) {
|
||
return documentTemplates.filter(t => t.category === category)
|
||
}
|
||
|
||
/**
|
||
* 渲染模板(替换变量)
|
||
*/
|
||
export function renderTemplate(id: string, variables: Record<string, string>): string | null {
|
||
const template = getTemplateById(id)
|
||
if (!template) return null
|
||
|
||
let content = template.content
|
||
for (const [key, value] of Object.entries(variables)) {
|
||
content = content.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), value)
|
||
}
|
||
return content
|
||
}
|