Files
alert-contract-expiring-hr/examples/performance_sample.csv
taojianmin 06c053d7d7 v1.1.0: 实现核心业务逻辑(扫描/任务书/派发/状态机)
新增(scripts/ 分层完整实现):
- scripts/util/{constants,date_util,runtime_paths,logging_setup}.py
- scripts/db/{connection,seed_data,repository}.py(SQLite + 5 张表 + 50 份样例合同)
- scripts/service/{scanner,task_generator,dispatcher,html_renderer}.py
- scripts/cli/app.py(argparse 子命令)
- scripts/templates/task.html.j2(Jinja2 渲染,无 jinja2 时降级到 str.replace)
- examples/{contracts_sample,performance_sample}.csv(本地样例数据)

修改:
- scripts/main.py:argparse + jiangchang_skill_core 降级
- SKILL.md:version 1.0.1 → 1.1.0
- CHANGELOG.md:加 v1.1.0 条目
- .env.example:加 DB_PATH / HTML_OUTPUT_DIR / JIANGCHANG_DATA_DIR

本地验证(9 个 CLI 命令全部 exit code = 0):
- health / version / config-path / init-db:基础 4 命令
- scan-expiring-contracts --thresholds 90,60,30:42 份可续聘 → 红 10 / 橙 10 / 黄 10,生成 30 任务
- render-html:写 output/<task_id>.html(4.9 KB)
- generate-renewal-task:单份合同任务书生成
- mark-contract-renewed:状态机更新 + 关闭 open alerts
- dispatch-task-notice:按单位/月份派发 payload(dry-run 模式)

业务规则(AI 续聘建议本地版,规则顺序判断):
1. 师德 < 60 → non_renew
2. 近 3 年考核有不合格(< 60)→ observe
3. 全部 >= 80 且逐年上升 → renew
4. 其他 → observe

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-14 14:17:43 +08:00

4.2 KiB

1record_idcontract_idyearperformance_scoremoral_teaching_scoreresearch_scoreteaching_score
2R0001C001202389939384
3R0002C001202487938486
4R0003C001202577937179
5R0004C002202375938470
6R0005C002202480939080
7R0006C002202595938998
8R0007C003202380867781
9R0008C003202476868078
10R0009C003202593868788
11R0010C004202388789090
12R0011C004202490789188
13R0012C004202577787777
14R0013C005202392979188
15R0014C005202482977686
16R0015C005202576978381
17R0016C006202392999891
18R0017C006202493999188
19R0018C006202581998085
20R0019C007202379936974
21R0020C007202476937075
22R0021C007202591939688
23R0022C008202375918278
24R0023C008202475917480
25R0024C008202595919894
26R0025C009202378878482
27R0026C009202486879686
28R0027C0092025958710094
29R0028C010202384807880
30R0029C010202479808176
31R0030C010202593809995
32R0031C011202383888178
33R0032C011202478887675
34R0033C011202584889379
35R0034C012202391888393
36R0035C012202482887781
37R0036C012202577887975
38R0037C013202377988277
39R0038C013202476988573
40R0039C013202585989480
41R0040C014202391879692
42R0041C014202485879090
43R0042C014202593878491
44R0043C015202386888486
45R0044C015202479887179
46R0045C015202591888395
47R0046C016202394789493
48R0047C016202490788885
49R0048C016202555785551
50R0049C017202393789692
51R0050C017202479788678
52R0051C017202585787685
53R0052C018202380767779
54R0053C018202484767783
55R0054C0182025957688100
56R0055C019202385819089
57R0056C019202486817984
58R0057C019202594819395
59R0058C020202382768278
60R0059C020202490769289
61R0060C020202575768474
62R0061C021202383907779
63R0062C021202479908581
64R0063C021202577907479
65R0064C022202393769796
66R0065C022202481768586
67R0066C022202591768694
68R0067C023202385998281
69R0068C023202486998982
70R0069C023202583997786
71R0070C024202377957477
72R0071C024202478957277
73R0072C024202589958894
74R0073C025202375976880
75R0074C025202482977887
76R0075C025202590979894
77R0076C026202379757574
78R0077C026202493758491
79R0078C026202590758087
80R0079C027202380767585
81R0080C027202494769895
82R0081C027202577767477
83R0082C028202383769281
84R0083C028202479767483
85R0084C028202581768677
86R0085C029202390848095
87R0086C029202481847677
88R0087C029202575846575
89R0088C030202392799095
90R0089C030202484797586
91R0090C030202594799695
92R0091C031202390919393
93R0092C031202479918384
94R0093C031202584918587
95R0094C032202385887882
96R0095C032202492889095
97R0096C032202591889991
98R0097C033202388989088
99R0098C033202483989087
100R0099C033202586988581
101R0100C034202380978384
102R0101C034202494979089
103R0102C034202595978696
104R0103C035202382769079
105R0104C035202490768695
106R0105C035202577767373
107R0106C036202383918387
108R0107C0362024959110098
109R0108C036202576918674
110R0109C037202379987884
111R0110C037202494989398
112R0111C037202575986774
113R0112C038202395898696
114R0113C038202487898787
115R0114C038202592898892
116R0115C039202390919691
117R0116C039202486917989
118R0117C039202581918482
119R0118C040202376988481
120R0119C040202482987280
121R0120C040202591988492
122R0121C041202384997681
123R0122C041202485997883
124R0123C041202581997982
125R0124C042202382998678
126R0125C042202480997079
127R0126C042202579997978
128R0127C043202394829899
129R0128C043202477827178
130R0129C043202591829793
131R0130C044202375827973
132R0131C044202478827383
133R0132C044202588827983
134R0133C0452023939410097
135R0134C045202476947773
136R0135C045202579948280
137R0136C046202381867186
138R0137C046202482868282
139R0138C046202578868276
140R0139C047202379837378
141R0140C047202489839786
142R0141C047202592839093
143R0142C048202392818791
144R0143C048202484818983
145R0144C048202585817881
146R0145C049202381868080
147R0146C049202477868082
148R0147C049202587869383
149R0148C050202376968275
150R0149C050202494969392
151R0150C0502025939610093