techprotrade's picture
Deploy ATOM FastAPI command center runtime (part 6)
383cb38 verified
Raw
History Blame Contribute Delete
2.68 kB
import uuid
from sqlalchemy import JSON, Boolean, Column, DateTime, Float, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from core.database import Base
class ClientHealthScore(Base):
__tablename__ = "intelligence_client_health"
id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
workspace_id = Column(String, ForeignKey("workspaces.id"), nullable=False)
client_entity_id = Column(String, ForeignKey("accounting_entities.id"), nullable=False)
overall_score = Column(Float, default=0.0) # 0-100
# Component Scores
sentiment_score = Column(Float, default=0.0)
financial_score = Column(Float, default=0.0)
usage_score = Column(Float, default=0.0)
calculated_at = Column(DateTime(timezone=True), server_default=func.now())
metadata_json = Column(JSON, nullable=True) # Drill-down reasons
class ResourceRole(Base):
__tablename__ = "intelligence_resource_roles"
id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
workspace_id = Column(String, ForeignKey("workspaces.id"), nullable=False)
name = Column(String, nullable=False) # e.g. "Senior Dev"
hourly_cost = Column(Float, default=0.0)
billable_target = Column(Float, default=0.80) # % utilization target
created_at = Column(DateTime(timezone=True), server_default=func.now())
class CapacityPlan(Base):
__tablename__ = "intelligence_capacity_plans"
id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
workspace_id = Column(String, ForeignKey("workspaces.id"), nullable=False)
role_id = Column(String, ForeignKey("intelligence_resource_roles.id"), nullable=False)
period_start = Column(DateTime(timezone=True), nullable=False)
period_end = Column(DateTime(timezone=True), nullable=False)
available_hours = Column(Float, default=0.0) # Total headcount capacity
created_at = Column(DateTime(timezone=True), server_default=func.now())
# Relationships
role = relationship("ResourceRole")
class BusinessScenario(Base):
__tablename__ = "intelligence_business_scenarios"
id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
workspace_id = Column(String, ForeignKey("workspaces.id"), nullable=False)
name = Column(String, nullable=False)
description = Column(Text, nullable=True)
parameters_json = Column(JSON, nullable=True) # Input: {"hires": 5}
impact_json = Column(JSON, nullable=True) # Output: {"cash_burn": 50000}
created_at = Column(DateTime(timezone=True), server_default=func.now())