ska_oso_pdm.proposal_management.panel

../../_images/ska_oso_pdm_proposal_management_panel.svg

Class diagram for an OSO proposal management panel

A current example of Panel json is presented below:

{
    "panel_id": "PANEL-2025A-001",
    "name": "STARGAZERS",
    "cycle": "2025A",
    "proposals": [{"prsl_id": "PR-002", "assigned_on": "2025-06-04T14:00:00Z"}],
    "reviewers": [{"reviewer_id": "RV-001", "assigned_on": "2025-06-04T14:00:00Z", "status": "accepted"}]

}
class Panel(*, metadata: ~ska_oso_pdm._shared.metadata.Metadata = <factory>, panel_id: str, name: str, cycle: str | None = None, expiry_date: ~pydantic.types.AwareDatetime | None = None, proposals: list[~ska_oso_pdm.proposal_management.panel.ProposalAssignment] = <factory>, sci_reviewers: list[~ska_oso_pdm.proposal_management.panel.ReviewerAssignment] = <factory>, tech_reviewers: list[~ska_oso_pdm.proposal_management.panel.ReviewerAssignment] = <factory>)[source]
add_proposal(prsl_id: str) None[source]

Appends a proposal only if not already present.

classmethod ensure_unique_proposals(proposals: list[ProposalAssignment]) list[ProposalAssignment][source]

Ensure that proposals list contains only unique prsl_ids, and preserves the first occurrence.

class ProposalAssignment(*, prsl_id: str, assigned_on: ~pydantic.types.AwareDatetime = <factory>)[source]
class ReviewerAssignment(*, reviewer_id: str, assigned_on: ~pydantic.types.AwareDatetime = <factory>, status: ~ska_oso_pdm.proposal_management.panel.ReviewerStatus = ReviewerStatus.PENDING)[source]
class ReviewerStatus(value)[source]

An enumeration.