techprotrade's picture
Full stack ATOM backend + AIMONEYFLOW clients (port 7860) (part 5)
f84a02d 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())