evaluation.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. from __future__ import annotations
  2. from datetime import datetime
  3. from pydantic import BaseModel, Field
  4. from app.schemas.common import ORMModel
  5. class EvaluationIndicatorCreate(BaseModel):
  6. mine_id: str | None = None
  7. parent_id: str | None = None
  8. code: str
  9. name: str
  10. dimension: str
  11. indicator_type: str = "quantitative"
  12. unit: str = ""
  13. formula: str = ""
  14. data_source: str = ""
  15. weight: float = 0
  16. min_value: float | None = None
  17. max_value: float | None = None
  18. target_value: float | None = None
  19. weight_method: str = "static"
  20. enabled: bool = True
  21. sort_order: int = 0
  22. config: dict = Field(default_factory=dict)
  23. class EvaluationIndicatorRead(ORMModel):
  24. id: str
  25. mine_id: str | None
  26. parent_id: str | None
  27. code: str
  28. name: str
  29. dimension: str
  30. indicator_type: str
  31. unit: str
  32. formula: str
  33. data_source: str
  34. weight: float
  35. min_value: float | None
  36. max_value: float | None
  37. target_value: float | None
  38. weight_method: str
  39. enabled: bool
  40. sort_order: int
  41. config: dict
  42. class EvaluationRunCreate(BaseModel):
  43. mine_id: str
  44. period_start: datetime | None = None
  45. period_end: datetime | None = None
  46. created_by: str = ""
  47. input_snapshot: dict = Field(default_factory=dict)
  48. use_agent: bool = True
  49. class EvaluationScoreRead(ORMModel):
  50. id: str
  51. run_id: str
  52. indicator_id: str
  53. raw_value: float | None
  54. score: float | None
  55. weighted_score: float | None
  56. weight: float | None
  57. level: str
  58. evidence: str
  59. metadata: dict = Field(validation_alias="metadata_json")
  60. class EvaluationRunRead(ORMModel):
  61. id: str
  62. mine_id: str
  63. run_no: str
  64. period_start: datetime | None
  65. period_end: datetime | None
  66. status: str
  67. total_score: float | None
  68. grade: str
  69. summary: str
  70. recommendations: list
  71. weight_snapshot: dict
  72. input_snapshot: dict
  73. model_output: dict
  74. started_at: datetime | None
  75. finished_at: datetime | None
  76. created_by: str
  77. created_at: datetime
  78. updated_at: datetime
  79. class EvaluationRunDetail(EvaluationRunRead):
  80. scores: list[EvaluationScoreRead] = Field(default_factory=list)
  81. class EvaluationRunRequest(BaseModel):
  82. mine_id: str
  83. period_start: datetime | None = None
  84. period_end: datetime | None = None
  85. requested_by: str = ""
  86. context: dict = Field(default_factory=dict)