| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from __future__ import annotations
- from typing import Any
- def classify_complexity(elements: dict[str, Any], evidence_count: int = 0) -> dict[str, Any]:
- """
- 简单/中等/复杂:
- - 要素数量:<5 简单;5-10 中等;>10 复杂
- - 事实清晰度:入/离职时间完整、加班事实描述是否具体
- - 证据完备度:证据材料数量(用 evidence_count 近似)
- """
- present = 0
- for k, v in (elements or {}).items():
- if v is None:
- continue
- if isinstance(v, str) and not v.strip():
- continue
- if isinstance(v, (list, dict)) and len(v) == 0:
- continue
- present += 1
- entry_ok = bool(elements.get("entry_date"))
- leave_ok = bool(elements.get("leave_date"))
- overtime_desc = elements.get("overtime_desc") or ""
- overtime_ok = len(str(overtime_desc).strip()) >= 10
- clarity = 0
- clarity += 1 if entry_ok else 0
- clarity += 1 if leave_ok else 0
- clarity += 1 if overtime_ok else 0
- evidence_ok = evidence_count >= 3
- # 规则融合
- if present < 5 and clarity <= 1 and evidence_count <= 1:
- level = "简单"
- elif present > 10 or clarity == 3 or evidence_ok:
- level = "复杂" if (present > 10 and (clarity >= 2 or evidence_ok)) else "中等"
- else:
- level = "中等"
- reasons = {
- "elements_count": present,
- "timeline_complete": entry_ok and leave_ok,
- "overtime_desc_specific": overtime_ok,
- "evidence_count": evidence_count,
- }
- return {"level": level, "reasons": reasons}
|