Source code for imednet.models.triage

from __future__ import annotations

from datetime import datetime
from enum import Enum
from typing import Optional

from pydantic import Field, field_validator

from imednet.models.json_base import JsonModel


[docs]class TriageStatus(str, Enum): NEW = "NEW" UNDER_REVIEW = "UNDER_REVIEW" RESOLVED = "RESOLVED"
[docs]class TriageAnnotation(JsonModel): """Reviewer note attached to a triage item.""" annotation_id: str = Field(..., min_length=1) user_id: str = Field(..., min_length=1) comment: str = Field(..., min_length=1) timestamp: datetime
[docs]class TriageHistoryEntry(JsonModel): """Status transition audit entry for a triage item.""" transition_id: str = Field(..., min_length=1) from_status: TriageStatus to_status: TriageStatus user_id: str = Field(..., min_length=1) comment: Optional[str] = None timestamp: datetime @field_validator("comment", mode="before") @classmethod def _normalise_comment(cls, value: object) -> object: if value is None: return None text = str(value).strip() return text or None
[docs]class TriageItem(JsonModel): """Core triage item used by queue and reviewer workflows.""" item_id: str = Field(..., min_length=1) study_key: str = Field(..., min_length=1) status: TriageStatus = TriageStatus.NEW assignee: Optional[str] = None severity: str = Field(..., min_length=1) annotations: list[TriageAnnotation] = Field(default_factory=list) history: list[TriageHistoryEntry] = Field(default_factory=list)