智能周历系统。支持法定假日、补班日、轮休系统(跳过/不跳过法定假双模式)、特殊休息(公休/临修)、个人日程管理。
---
name: workday-calendar
author: wUwproject
license: MIT
tags: ['calendar', 'workday', 'holiday', 'schedule', 'rotation', 'gongxiu', 'linxiu', 'excel-export']
version: 2.2.0
description: 智能周历系统。支持法定假日、补班日、轮休系统(跳过/不跳过法定假双模式)、特殊休息(公休/临修)、个人日程管理。
sensitive_access: false
critical_write: false
permission_weight: LOW
data_dir: ../.standardization/workday-calendar/data/
trigger: 法定假日|周历|工作日|调休|补班|节假日|假日区间|年度工日|日程|安排|空闲时间|轮休|公休|临修|排班
trigger_negative: true
external_data_dir: true
h1_position: true
meta_field_sync: true
create_permissions_md: true
---
# 智能周历系统 (Workday Calendar)
## 触发条件
**正向触发:**
- 查询或管理**法定假日**、**补班日**、**调休**安排
- 计算**年度工作日**、**工作日统计**
- 生成**周历**、**日程安排**
- 查询某天的**空闲时间**、**日程安排**
- 添加、更新、删除**日程事件**
- 说出关键词:"周历"、"工作日"、"假日区间"、"日程"、"安排"
- 用户讨论日历 UI 组件设计(如"帮我画一个日历组件"),应触发 drawiodo 而非本技能
- 用户要求操作其他日历应用(如 Google Calendar、Outlook 日历),本技能仅管理本地数据
### 否定条件(不触发)
- 用户只是询问日期(如"今天几号"),无假日/工作日/日程管理意图
- 用户讨论日历 UI 组件设计(如"帮我画一个日历组件"),应触发 drawiodo 而非本技能
- 用户要求操作其他日历应用(如 Google Calendar、Outlook 日历),本技能仅管理本地数据
## 核心能力
> 📚 **渐进式加载**:本技能采用渐进式 MD 体系,`SKILL.md` 为入口(≤230行),详细内容拆分到 `references/*.md` 按需加载。
| 能力 | 说明 |
| ------ |------|
| **法定假日管理** | 区间形式存储节假日,支持 AI 批量导入 |
| **补班日管理** | 单独记录调休上班日期 |
| **周末规则可配置** | 双休/单休/单双休/自定义周几 |
| **工作日计算** | 自动计算年度总工日,含所有休息类型统计 |
| **轮休系统** | skip/add 双模式,可配置周期,跨年缓存 |
| **特殊休息** | 公休/临修,支持单日和区间,最高优先级 |
| **个人日程** | 添加/删除/更新/查询/冲突检测 |
| **排班时段** | 15 分钟粒度,支持岗位+人员多赋值 |
| **HTML 导出** | 排班周历 / 日程周历 / 排班表(周/月/日期范围) |
| **定时任务** | 自动化配置,Markdown 输出 |
| **配置中心** | Web 界面(settings.py,端口 8765) |
### 渐进式文件索引
| 文件名 | 分类 | 包含内容 | 审计关联 |
| -------- |------| ---------- |----------|
| `references/LICENSE.md` | 许可协议 | MIT 许可证完整文本 | R-26 |
| `references/antipatterns.md` | 规范指南 | 常见反模式与避坑指引 | R-18 |
| `references/changelog.md` | 版本管理 | 版本更新日志 | R-24 |
| `references/cli.md` | 命令参考 | CLI 命令完整列表 | 无 |
| `references/data_format.md` | 参考文档 | JSON 数据格式说明 | 无 |
| `references/examples.md` | 使用示例 | 各场景完整交互示例 | R-25 C-17 |
| `references/faq.md` | 常见问题 | 常见疑问与解答 | R-19, R-25 C-19 |
| `references/guide.md` | 使用指南 | Python API 使用示例 | 无 |
| `references/permissions.md` | 权限与测试 | 权限扫描说明与测试结论 | R-15, R-16 |
| `references/test-report.md` | 测试报告 | skill-function-test 测试结论 | 无 |
## 工作流程
### 首次使用 / 新年份
当某年没有法定假日数据时(`load_holiday_intervals(year)` 返回空列表),**必须主动联网查询**国务院办公厅放假安排通知:
1. **联网查询** — 输入:年份 → 搜索"国务院办公厅 20XX年 放假安排" → 输出:法定假日日期范围、补班日、假期名称
2. **组织规则模板 JSON** — 输入:查询结果 → 按 `export_rules_template` 格式组织 JSON → 输出:标准规则模板
3. **导入** — 输入:规则模板 → 调用 `import_rules_from_template()` → 输出:数据写入 JSON 文件
4. **核对** — 输入:已导入数据 → 运行 `python scripts/workday_calendar.py rules 20XX` → 输出:规则确认表
5. **计算** — 输入:确认无误的数据 → 调用 `calculate_total_workdays(20XX)` → 输出:年度工日统计
**联网查询要求:**
- 搜索关键词:"国务院办公厅 20XX 年 放假安排"
- 获取:法定假日日期范围、调休上班日(补班)、假期名称
- 确认该年周末规则(通常为标准双休日六日)
**组织规则模板(`export_rules_template` 格式):**
```json
{
"version": "1.0",
"year": 2027,
"base_type": "holiday",
"rules": {
"weekend_config": {"weekends": [0, 6]},
"holiday_intervals": [
{"name": "元旦", "start": "2027-01-01", "end": "2027-01-03"}
],
"compensatory_days": [
{"date": "2027-01-04", "note": "元旦补班"}
],
"rotation_configs": [],
"special_rests": []
}
}
```
**执行导入:**
```python
template = {上面组织好的 JSON}
import_rules_from_template(template)
```
**导入后核对:**
```bash
python scripts/workday_calendar.py rules 2027
```
⚠️ **核对步骤必须执行**:节假日日期、补班日必须与国务院通知完全一致。
### 四层数据架构
```text
底板(法定假休, 永远不变)
└→ weekend_config(双休/单休/自定义周几)
└→ 排班规则(轮休/公休/临修, 始终叠在 weekend_config 上)
├─ toggle OFF → 假休保留(不受排班影响)
└─ toggle ON → 排班全面覆盖(包括假休)
└→ 个人日程(记事本, 永远最上层)
```
### 日期类型优先级
| 优先级 | 类型 | 规则 |
| -------- |------| ------ |
| 1 | **补班日** | 强制计为工作日 |
| 2 | **临修** | 强制计为休息日 |
| 3 | **公休** | 强制计为休息日 |
| 4 | **轮休** | 按配置生成的休息日 |
| 5 | **法定假日** | 强制计为休息日 |
| 6 | **周末** | 按配置的周末规则 |
| 7 | **工作日** | 其他日期 |
### 日程冲突检测
- 添加日程时自动检测时间冲突
- 更新日程时重新检测冲突,冲突则自动还原
- `scripts/workday_calendar.py` — 核心逻辑
- `scripts/settings.py` — 配置中心 Web 服务器
don't have the plugin yet? install it then click "run inline in claude" again.