# -*- coding: utf-8 -*-
import json, os, glob, re
ROOT = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
data = json.load(open(os.path.join(ROOT,'数据','绩效_2026-09.json'), encoding='utf-8'))
FIXED = [
 "如我们电话(现场)沟通，针对本月你在绩效考核方面的问题，再总结反馈给你，具体如下：",
 "考核数据见图片！",
 "以上邮件收到后请在今天内回复“本人收到并确认考核结果”，如未回复邮件的，视为你认可绩效考核成绩结果。如对考核结果有疑问的，请回复“本人对考核结果不予确认”，并同时附上不确认的理由及依据，公司将进行进一步核实，核实后的考核结果为最终结果。",
]
allnames = [p['姓名'] for p in data['人员']]
d = os.path.join(ROOT,'经营分析','绩效邮件_2026-09')
ok = True
for p in data['人员']:
    if not isinstance(p.get('总分'), (int,float)): continue
    f = os.path.join(d, p['姓名'], '正文.txt')
    t = open(f, encoding='utf-8').read()
    prob = []
    for s in FIXED:
        if s not in t: prob.append('缺固定句: '+s[:20])
    if '{' in t or '}' in t: prob.append('残留占位符 {}')
    if re.search(r'(\{|\}|%\(|%s|TODO|占位)', t): prob.append('疑似占位符')
    if ('本月你的绩效考核成绩%s分。'% (('%g'%p['总分']))) not in t: prob.append('总分不对')
    if ('排名第 %s/%s。'%(p['排名'],p['团队人数'])) not in t: prob.append('排名句不对')
    # 他人姓名不得出现
    for n in allnames:
        if n != p['姓名'] and n in t: prob.append('出现他人姓名: '+n)
    if not t.endswith('。\n') and not t.endswith('。'): prob.append('结尾异常')
    print(('❌ ' if prob else '✅ ')+p['姓名']+('  '+'; '.join(prob) if prob else ' 固定句齐备/无占位符/无他人姓名'))
    ok &= not prob
# 图片存在性 & 无总分者不产图
for p in data['人员']:
    png = os.path.join(d, p['姓名'], '考核数据.png')
    if isinstance(p.get('总分'),(int,float)):
        assert os.path.exists(png), '缺图 '+p['姓名']
    else:
        assert not os.path.exists(png), '无总分却产了图 '+p['姓名']
print('✅ 有总分者均有图；无总分者（%d人）均无图' % sum(1 for p in data['人员'] if not isinstance(p.get('总分'),(int,float))))
print('OVERALL', 'PASS' if ok else 'FAIL')
