complexity_classifier.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from __future__ import annotations
  2. from typing import Any
  3. def classify_complexity(elements: dict[str, Any], evidence_count: int = 0) -> dict[str, Any]:
  4. """
  5. 简单/中等/复杂:
  6. - 要素数量:<5 简单;5-10 中等;>10 复杂
  7. - 事实清晰度:入/离职时间完整、加班事实描述是否具体
  8. - 证据完备度:证据材料数量(用 evidence_count 近似)
  9. """
  10. present = 0
  11. for k, v in (elements or {}).items():
  12. if v is None:
  13. continue
  14. if isinstance(v, str) and not v.strip():
  15. continue
  16. if isinstance(v, (list, dict)) and len(v) == 0:
  17. continue
  18. present += 1
  19. entry_ok = bool(elements.get("entry_date"))
  20. leave_ok = bool(elements.get("leave_date"))
  21. overtime_desc = elements.get("overtime_desc") or ""
  22. overtime_ok = len(str(overtime_desc).strip()) >= 10
  23. clarity = 0
  24. clarity += 1 if entry_ok else 0
  25. clarity += 1 if leave_ok else 0
  26. clarity += 1 if overtime_ok else 0
  27. evidence_ok = evidence_count >= 3
  28. # 规则融合
  29. if present < 5 and clarity <= 1 and evidence_count <= 1:
  30. level = "简单"
  31. elif present > 10 or clarity == 3 or evidence_ok:
  32. level = "复杂" if (present > 10 and (clarity >= 2 or evidence_ok)) else "中等"
  33. else:
  34. level = "中等"
  35. reasons = {
  36. "elements_count": present,
  37. "timeline_complete": entry_ok and leave_ok,
  38. "overtime_desc_specific": overtime_ok,
  39. "evidence_count": evidence_count,
  40. }
  41. return {"level": level, "reasons": reasons}