From e8c6d27979b6c52950be51179cb7fb3c7ad196ef Mon Sep 17 00:00:00 2001 From: selfrelease Date: Sat, 15 Aug 2026 15:51:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=8C=97=E4=BA=AC?= =?UTF-8?q?=E8=A7=A3=E8=81=98=E5=90=88=E8=A7=84=E6=80=A7=E7=8E=AF=E8=8A=82?= =?UTF-8?q?=EF=BC=88=E9=80=9A=E7=9F=A5=E5=B7=A5=E4=BC=9A=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?+=E6=96=87=E6=A1=A3=E6=A0=B7=E6=9C=AC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 依据《规范用人单位单方解除劳动合同工作指引(试行)》 后端: - 合规检查增加"通知工会"和"工会回执"检查项(FAULT/NONFAULT/LAYOFF) - 检查项标注北京地区要求:提前5个工作日书面通知工会 - 模板系统新增3个文档样本: · 拟解除劳动合同通知工会函(附件1样式) · 工会回执(附件2样式) · 工会劳动法律监督提示函(附件3样式) 前端: - 过错解除/非过错解除/裁员三种方式的步骤说明增加工会通知程序 - 确认提交步骤展示工会通知状态(已通知/未通知/已收到回执) Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- backend/src/services/template.service.ts | 94 +++++++++++++++++++++ backend/src/services/termination.service.ts | 24 +++++- frontend/src/pages/Termination.tsx | 25 ++++-- 3 files changed, 135 insertions(+), 8 deletions(-) diff --git a/backend/src/services/template.service.ts b/backend/src/services/template.service.ts index 77952e3..907060a 100644 --- a/backend/src/services/template.service.ts +++ b/backend/src/services/template.service.ts @@ -278,6 +278,100 @@ ____年__月__日 签收人:____________ 日期:____年__月__日`, }, + { + id: 'tpl_union_termination_notice', + name: '拟解除劳动合同通知工会函(北京)', + category: 'NOTICE', + description: '北京地区单方解除劳动合同前通知工会的函件样式(依据《规范用人单位单方解除劳动合同工作指引》)', + variables: ['companyName', 'employeeName', 'employeeGender', 'employeeAge', 'idCard', 'employeePosition', 'workYears', 'contractPeriod', 'employeePhone', 'terminationReason', 'legalBasis', 'contactPerson', 'contactPhone', 'companyAddress'], + content: `拟解除劳动合同通知工会函 + +{{companyName}}拟解除{{employeeName}}劳动合同的函 + +{{companyName}}工会(或上一级工会): + +我单位拟单方解除与{{employeeName}}(劳动者姓名)的劳动合同,具体情况如下: + +一、劳动者基本情况 + +姓名:{{employeeName}} +性别:{{employeeGender}} +年龄:{{employeeAge}} +身份证号:{{idCard}} +工作岗位:{{employeePosition}} +在本单位工作年限:{{workYears}} +劳动合同期限:{{contractPeriod}} +联系方式:{{employeePhone}} + +二、解除劳动合同的事由 + +{{terminationReason}} + +三、解除劳动合同的依据 + +{{legalBasis}} + +联系人:{{contactPerson}} +电话:{{contactPhone}} +地址:{{companyAddress}} + +附件:其他证据材料 + +{{companyName}}(盖章) +____年__月__日`, + }, + { + id: 'tpl_union_receipt', + name: '工会回执(北京)', + category: 'OTHER', + description: '工会收到用人单位单方解除劳动合同通知后的书面回执样式', + variables: ['receiptNo', 'companyName', 'employeeName', 'unionContactPerson', 'unionContactPhone', 'unionAddress'], + content: `回执 + +编号:{{receiptNo}} + +{{companyName}}: + +你单位送交的单方解除与{{employeeName}}劳动合同通知工会的相关材料已收到。 + +你单位单方解除劳动合同,应严格遵守《中华人民共和国劳动法》《中华人民共和国劳动合同法》《北京市实施〈中华人民共和国工会法〉办法》等法律法规规定,做到事实清楚、程序合法、依据充分,并依法履行出具解除劳动合同证明、支付经济补偿等法定义务,切实维护职工合法权益。因提供虚假或不完整材料,产生的相关法律后果由你单位自行承担。 + +联系人:{{unionContactPerson}} +电话:{{unionContactPhone}} +地址:{{unionAddress}} + +(盖章) +____年__月__日`, + }, + { + id: 'tpl_union_supervision_letter', + name: '工会劳动法律监督提示函(北京)', + category: 'NOTICE', + description: '工会认为用人单位违反法律法规时提出的意见建议函件样式', + variables: ['letterNo', 'companyName', 'employeeName', 'supervisionIssues', 'supervisionOpinions', 'unionContactPerson', 'unionContactPhone', 'unionAddress'], + content: `工会劳动法律监督提示函 + +{{letterNo}} + +{{companyName}}: + +你单位送交的单方解除与{{employeeName}}劳动合同通知工会的相关文本材料已收到。经审查,发现你单位存在下列问题: + +{{supervisionIssues}} + +就以上问题,我会提出以下意见: + +{{supervisionOpinions}} + +请你单位收函后认真研究,将处理结果书面通知本会。 + +联系人:{{unionContactPerson}} +电话:{{unionContactPhone}} +地址:{{unionAddress}} + +(盖章) +____年__月__日`, + }, ] /** diff --git a/backend/src/services/termination.service.ts b/backend/src/services/termination.service.ts index c7ae034..fb521ff 100644 --- a/backend/src/services/termination.service.ts +++ b/backend/src/services/termination.service.ts @@ -33,7 +33,14 @@ export function getChecklistForReason(reason: string, employee?: any): Checklist return [ { key: 'has_rules', label: '是否有规章制度依据', autoChecked: null }, { key: 'has_evidence', label: '是否有违纪证据', autoChecked: null }, - { key: 'notify_union', label: '是否事先通知工会', autoChecked: null }, + { + key: 'notify_union', + label: '是否提前5个工作日书面通知工会', + autoChecked: null, + suggestion: '北京地区要求:单方解除劳动合同须提前5个工作日将理由书面通知本单位工会;未建立工会的通知上一级工会(用人单位实际经营地的乡镇/街道/园区/开发区总工会)。可在「文本模板库」中使用《拟解除劳动合同通知工会函》模板。', + suggestionType: 'required', + }, + { key: 'union_receipt', label: '是否收到工会书面回执', autoChecked: null }, { key: 'written_notice', label: '是否出具书面解除通知', autoChecked: null }, ] case 'NONFAULT': { @@ -86,12 +93,27 @@ export function getChecklistForReason(reason: string, employee?: any): Checklist suggestionType: 'required', }) + // 通知工会 — 北京地区单方解除必经程序 + items.push({ + key: 'notify_union', + label: '是否提前5个工作日书面通知工会', + autoChecked: null, + suggestion: '北京地区要求:单方解除须提前5个工作日将理由书面通知本单位工会;未建立工会的通知上一级工会。可在「文本模板库」中使用《拟解除劳动合同通知工会函》模板。', + suggestionType: 'required', + }) + items.push({ + key: 'union_receipt', + label: '是否收到工会书面回执', + autoChecked: null, + }) + return items } case 'LAYOFF': return [ { key: 'advance_notice_30', label: '是否提前30天向工会或全体职工说明', autoChecked: null }, { key: 'listen_opinions', label: '是否听取工会或职工意见', autoChecked: null }, + { key: 'union_receipt', label: '是否收到工会书面回执', autoChecked: null }, { key: 'report_labor_dept', label: '是否向劳动行政部门报告', autoChecked: null }, { key: 'compensation_paid', label: '是否支付经济补偿金', diff --git a/frontend/src/pages/Termination.tsx b/frontend/src/pages/Termination.tsx index 43906ab..d36598d 100644 --- a/frontend/src/pages/Termination.tsx +++ b/frontend/src/pages/Termination.tsx @@ -42,9 +42,10 @@ const REASONS = [ steps: [ '第一步:收集并固化证据(违纪事实、制度依据、证人证言等)', '第二步:确认规章制度经过民主程序制定并已向员工公示(签收记录)', - '第三步:将解除理由通知工会,工会提出意见后书面回复工会', + '第三步:提前5个工作日将解除理由书面通知工会(北京地区必经程序),工会提出意见后书面回复工会', '第四步:向员工送达《解除劳动合同通知书》,注明解除依据和事实', '第五步:办理工作交接、社保减员、档案转移', + '⚠ 北京地区:单方解除须提前5个工作日书面通知工会,未建立工会的通知上一级工会(经营地乡镇/街道/园区/开发区总工会)。可在「文本模板库」使用《拟解除劳动合同通知工会函》模板', '⚠ 注意:证据不足或制度未公示可能导致违法解除,建议咨询律师', ], }, @@ -58,9 +59,11 @@ const REASONS = [ '第一步(不胜任):进行绩效考核,确认不胜任事实', '第二步(医疗期满):另行安排合适岗位,员工仍不能胜任', '第二步(不胜任):进行培训或调岗,再次考核仍不胜任', - '第三步:提前30天书面通知员工,或额外支付1个月代通知金', - '第四步:支付经济补偿金(N)', - '第五步:出具解除证明,办理交接、社保减员', + '第三步:提前5个工作日书面通知工会(北京地区必经程序),收到工会回执后再解除', + '第四步:提前30天书面通知员工,或额外支付1个月代通知金', + '第五步:支付经济补偿金(N)', + '第六步:出具解除证明,办理交接、社保减员', + '⚠ 北京地区:单方解除须提前5个工作日书面通知工会,可在「文本模板库」使用《拟解除劳动合同通知工会函》模板', ], }, { @@ -71,11 +74,13 @@ const REASONS = [ steps: [ '第一步:确认符合法定裁员情形,准备相关证明材料', '第二步:提前30天向工会或全体职工说明情况(书面会议记录)', - '第三步:听取工会或职工意见,形成意见处理方案', + '第三步:听取工会或职工意见,形成意见处理方案,收到工会书面回执', '第四步:向当地劳动行政部门报告裁员方案', '第五步:确定裁员名单(优先留用法定保护人员)', - '第六步:向员工送达解除通知,支付经济补偿金(N)', - '第七步:办理交接、社保减员、档案转移', + '第六步:提前5个工作日书面通知工会拟解除名单(北京地区必经程序)', + '第七步:向员工送达解除通知,支付经济补偿金(N)', + '第八步:办理交接、社保减员、档案转移', + '⚠ 北京地区:裁员属单方解除,须提前5个工作日书面通知工会,可在「文本模板库」使用《拟解除劳动合同通知工会函》模板', ], }, { @@ -1887,6 +1892,12 @@ ${items} )}
工作交接:{handoverItems.filter(i => i.done).length}/{handoverItems.length} 项完成
+ {checklistItems?.some(item => item.key === 'notify_union') && ( +
+ 工会通知:{checklist['notify_union'] ? '已通知' : '⚠ 未通知工会(北京地区单方解除必经程序)'} + {checklist['notify_union'] && checklist['union_receipt'] ? ' · 已收到回执' : checklist['notify_union'] ? ' · 未收到回执' : ''} +
+ )} {/* 风险提示 */}