from typing import Annotated
from pydantic import AwareDatetime, Field
from ska_oso_pdm._shared import Metadata, PdmObject, ProposalID
from ska_oso_pdm._shared.atoms import TerseStrEnum
from ska_oso_pdm._shared.ids import ReviewerID
[docs]
class ReviewStatus(TerseStrEnum):
IN_PROGRESS = "in progress"
DECIDED = "decided"
TO_DO = "to do"
[docs]
class Conflict(PdmObject):
has_conflict: bool = False
reason: str | None = None
[docs]
class PanelReview(PdmObject):
"""
SKA review of a proposal by a panel.
"""
# Add validation here for the submitted_on and submitted_by fields
metadata: Metadata = Field(
default_factory=Metadata, description="The metadata of this Review."
)
panel_id: str
review_id: ReviewerID
cycle: str | None = None
reviewer_id: str
prsl_id: ProposalID
rank: Annotated[int | None, Field(ge=0, le=9)] = None
conflict: Conflict
comments: str | None = None
submitted_on: AwareDatetime | None = None
submitted_by: str | None = None
status: ReviewStatus = ReviewStatus.TO_DO