# 劳动合同模板组装规则

## 一、模块组成体系

劳动合同由四类模块拼接而成，每个模块对应一个 `.docx` 文件，通过 Word 自动编号（`numId=7`）实现章节号与条款号的统一编排。

### 1.1 模块来源

| 模块类别 | 文件夹 | 说明 |
|---|---|---|
| **核心模板** | `核心模板/` | 固定不变的基础条款（01-10） |
| **模块_A（工时）** | `模块_A（工时）/` | 工作时间制度（A1-A8） |
| **模块_B（薪酬）** | `模块_B（薪酬）/` | 薪酬制度（B1-B6） |
| **模块_C（行业）** | `模块_C（行业）/` | 行业特定劳动纪律条款（C1-C5） |

### 1.2 编号规则

合同文件名命名格式：
```
劳动合同-{风格}-{A编号}-{B编号}-{C编号}.docx
```

示例：
- `劳动合同-通用-A1-单休制-B1-纯固定月薪（无加班费）-C1-贸易销售.docx`
- `劳动合同-驻点-A2-单双周制-B2-底薪+提成（无加班费）-C2-服装制造.docx`

其中「风格」用于选择 `03-工作岗位地点` 的版本：
- `通用` → 使用 `03-工作岗位地点（通用）.docx`
- `驻点` → 使用 `03-工作岗位地点（驻点）.docx`

### 1.3 组装顺序

各模块按以下顺序拼接，形成完整合同：

| 序号 | 章节标题 | 来源模块 | Word编号级别 |
|---|---|---|---|
| — | 标题「劳动合同」 | 程序生成 | 无（单独居中） |
| — | 当事人信息 | `01-当事人信息.docx` | 无 |
| — | 前言段落 | `01-当事人信息.docx` | 无 |
| 一 | 劳动合同期限 | `02-劳动合同期限.docx` | `ilvl=0`（中文大写） |
| 二 | 工作岗位、工作地点 | `03-工作岗位地点（通用/驻点）.docx` | `ilvl=0` |
| 三 | 工作时间和休息休假 | `模块_A/` 中的对应文件 | `ilvl=0` |
| 四 | 劳动报酬和福利津贴 | `模块_B/` 中的对应文件 | `ilvl=0` |
| 五 | 社会保险 | `04-社会保险.docx` | `ilvl=0` |
| 六 | 劳动保护、劳动条件和职业危害防护 | `05-劳动保护.docx` | `ilvl=0` |
| 七 | 劳动纪律及奖惩 | `模块_C/` 中的对应文件 | `ilvl=0` |
| 八 | 商业秘密及知识产权 | `06-商业秘密及知识产权.docx` | `ilvl=0` |
| 九 | 合同的变更、解除及终止 | `07-合同的变更解除终止.docx` | `ilvl=0` |
| 十 | 纠纷解决办法 | `08-纠纷解决办法.docx` | `ilvl=0` |
| 十一 | 通知和送达 | `09-通知和送达.docx` | `ilvl=0` |
| 十二 | 其他 | `10-其他.docx` | `ilvl=0` |
| — | 签章区 | 程序生成 | 无 |

### 1.4 模块内容引用规则

- 模块文件中的**节标题**（如「三、工作时间和休息休假」）在最终合同中去掉中文序号前缀（「三、」），改为通过 Word 自动编号 `ilvl=0` 生成「三、」
- 模块文件中**带 left=425 缩进的内容段落**（A/B/C 类模块的子条款）在最终合同中改为 `ilvl=1` 阿拉伯数字编号 + `firstLine=420` 首行缩进
- 模块文件中**不带缩进的简短内容段落**（如各核心模板中的单一句子）在最终合同中保留为无编号段落 + `firstLine=420` 首行缩进

## 二、格式规范

### 2.1 字体

| 范围 | 字体 | 强制方式 |
|---|---|---|
| 全文中文字符 | 宋体 | `rFonts ascii/hAnsi/eastAsia` 均设为「宋体」 |
| 全文英文/数字 | 宋体 | 同上 |

### 2.2 字号

| 范围 | 字号 | Word值 | EMU值 |
|---|---|---|---|
| 标题「劳动合同」 | 二号（22pt） | `sz="44"` | 279400 |
| 全部正文（包括节标题、条款内容、签章） | 五号（10.5pt） | `sz="21"` | 133350 |

### 2.3 对齐

| 范围 | 对齐方式 | XML值 |
|---|---|---|
| 标题「劳动合同」 | 居中对齐 | `jc val="center"` |
| 全部正文（含签章区） | **两端对齐** | `jc val="both"` |

### 2.4 行距

| 属性 | 值 | XML |
|---|---|---|
| 行距 | **固定值22磅** | `spacing line="440" lineRule="exact"` |
| 段前 | **0磅** | `spacing before="0"` |
| 段后 | **0磅** | `spacing after="0"` |

### 2.5 缩进

| 段落类型 | 缩进 | XML值 | 说明 |
|---|---|---|---|
| 标题「劳动合同」 | 无缩进 | 不设 `ind` | 居中对齐无需首行缩进 |
| 全部正文段落 | **首行缩进2字符（420缇）** | `ind firstLine="420"` | 约2个五号宋体字符宽度 |
| 模块原始 `.docx` 中的 left=425（左缩进） | 在最终合同中**转换为**首行缩进420缇 | — | 统一为标准格式 |

### 2.6 编号体系

共用 `abstractNum id=6`，映射到 `numId=7`，定义如下：

| 级别 | 编号格式 | 字形 | 显示效果 | 用途 |
|---|---|---|---|---|
| `ilvl=0` | `chineseCounting` | **加粗** | 一、二、三、…、十二 | 十二个节标题 |
| `ilvl=1` | `decimal` | 常规（不加粗） | 1．2．3．… | 多条款节的内容段落 |

编号的字体和字号在 `abstractNum` 的 `lvl/rPr` 中定义：
- `ilvl=0`：`<b/>`（加粗）、`<rFonts ascii="宋体" hAnsi="宋体" eastAsia="宋体"/>`、`<sz val="21"/>`（五号）
- `ilvl=1`：无 `<b/>`（不加粗）、`<rFonts>` 同上、`<sz val="21"/>`（五号）

编号格式（`lvlText`）：
- `ilvl=0`：`%1、`（如「一、」「二、」）
- `ilvl=1`：`%2．`（如「1．」「2．」）

## 三、签章区格式

签章区共7个段落，顺序如下：

```
（空行）
（空行）
甲方（盖章）：
签订日期：
（空行）
乙方（签字）：
签订日期：
```

共保留**两个「签订日期：」**，甲方一个、乙方一个，行距、字体、字号与正文一致。

## 四、页面设置

| 属性 | 值 |
|---|---|
| 页边距（上下左右） | 1英寸（1440000 EMU） |

## 五、生成方式

合同由程序通过 `python-docx` + `lxml` 生成，步骤：
1. 复制一个已有合同（含有完整 `numId=7` 编号定义的 `.docx`）作为模板
2. 删除全部 `<w:p>` 段落元素
3. 按上述格式规范逐个插入段落，设置 `pPr`（编号、对齐、缩进、行距）和 `rPr`（字体、字号、加粗）
4. 保存为新的 `.docx` 文件
