from sqlalchemy import Column, String, Integer, DateTime, Enum, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.core.database import Base import enum class RiskLevel(str, enum.Enum): LOW = "low" MEDIUM = "medium" HIGH = "high" CRITICAL = "critical" class ScheduleStatus(str, enum.Enum): ON_TRACK = "on_track" AT_RISK = "at_risk" DELAYED = "delayed" class ResourceStatus(str, enum.Enum): ADEQUATE = "adequate" CONSTRAINED = "constrained" OVERLOADED = "overloaded" class ProjectHealth(Base): __tablename__ = "pjctrl_project_health" id = Column(String(36), primary_key=True) project_id = Column(String(36), ForeignKey("pjctrl_projects.id", ondelete="CASCADE"), nullable=False, unique=True) health_score = Column(Integer, default=100, nullable=False) # 0-100 risk_level = Column( Enum("low", "medium", "high", "critical", name="risk_level_enum"), default="low", nullable=False ) schedule_status = Column( Enum("on_track", "at_risk", "delayed", name="schedule_status_enum"), default="on_track", nullable=False ) resource_status = Column( Enum("adequate", "constrained", "overloaded", name="resource_status_enum"), default="adequate", nullable=False ) last_updated = Column(DateTime, server_default=func.now(), onupdate=func.now(), nullable=False) # Relationships project = relationship("Project", back_populates="health")