Spaces:
Sleeping
Sleeping
File size: 2,682 Bytes
f84a02d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | 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())
|