joseph njoroge kariuki
Deploy Senti AI to Hugging Face Spaces
021e065
Raw
History Blame Contribute Delete
3.21 kB
from sqlalchemy import (
Column, String, Boolean, DateTime, Integer,
Float, Text, Date, Index
)
from sqlalchemy.sql import func
from .base import Base
class UserGoal(Base):
__tablename__ = "user_goals"
id = Column(Integer, primary_key=True)
goal_id = Column(String(36), unique=True, nullable=False, index=True)
user_hash = Column(String(64), nullable=False, index=True)
name = Column(String(200), nullable=False)
goal_type = Column(String(30))
# savings | debt_payoff | investment | expense | emergency_fund
target_amount = Column(Float, nullable=False)
current_amount = Column(Float, default=0)
target_date = Column(Date, nullable=True)
monthly_contribution = Column(Float)
status = Column(String(20), default="active")
priority = Column(Integer, default=1)
# 1=low, 2=medium, 3=high
notes = Column(Text)
linked_project_id = Column(String(36), nullable=True)
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, onupdate=func.now())
completed_at = Column(DateTime, nullable=True)
__table_args__ = (
Index("ix_goals_user", "user_hash"),
Index("ix_goals_status", "status"),
)
class RecurringBill(Base):
__tablename__ = "recurring_bills"
id = Column(Integer, primary_key=True)
bill_id = Column(String(36), unique=True, nullable=False, index=True)
user_hash = Column(String(64), nullable=False, index=True)
name = Column(String(200), nullable=False)
amount = Column(Float, nullable=False)
currency = Column(String(5), default="KES")
frequency = Column(String(20), default="monthly")
# monthly | weekly | quarterly | annual
day_of_month = Column(Integer)
# 1-31, which day to pay
category = Column(String(50))
# rent | utilities | insurance | loan | subscription | other
is_active = Column(Boolean, default=True)
last_paid_date = Column(Date, nullable=True)
next_due_date = Column(Date, nullable=True)
created_at = Column(DateTime, server_default=func.now())
__table_args__ = (
Index("ix_bills_user", "user_hash"),
Index("ix_bills_next_due", "next_due_date"),
)
class DebtRecord(Base):
__tablename__ = "debt_records"
id = Column(Integer, primary_key=True)
debt_id = Column(String(36), unique=True, nullable=False, index=True)
user_hash = Column(String(64), nullable=False, index=True)
name = Column(String(200), nullable=False)
# "Fuliza" | "SACCO Loan" | "Bank Loan"
debt_type = Column(String(30))
# mobile_loan | sacco | bank | hire_purchase | personal | other
original_amount = Column(Float)
current_balance = Column(Float, nullable=False)
interest_rate_annual = Column(Float)
monthly_payment = Column(Float)
# For payoff planning
payoff_strategy = Column(String(20), default="minimum")
# minimum | avalanche | snowball
start_date = Column(Date)
expected_payoff_date = Column(Date, nullable=True)
is_active = Column(Boolean, default=True)
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, onupdate=func.now())
__table_args__ = (
Index("ix_debts_user", "user_hash"),
Index("ix_debts_active", "is_active"),
)