Spaces:
Paused
Paused
| #!/usr/bin/env python3 | |
| """ | |
| Database Schema for Catacomb - Innovation Allocation and Asset Underwriting Engine. | |
| This module defines the SQLAlchemy models for persistent storage of: | |
| - Assets and evaluations | |
| - Professional review cards | |
| - Audit logs | |
| - Job descriptions and competency graph | |
| - Users and authentication | |
| """ | |
| from sqlalchemy import Column, String, Integer, Float, Boolean, DateTime, Text, JSON, ForeignKey, Enum as SQLEnum | |
| from sqlalchemy.ext.declarative import declarative_base | |
| from sqlalchemy.orm import relationship | |
| from datetime import datetime | |
| import enum | |
| Base = declarative_base() | |
| class UserRole(enum.Enum): | |
| """User roles for three-tier product model.""" | |
| PUBLIC = "public" | |
| PROFESSIONAL = "professional" | |
| ADMIN = "admin" | |
| class AssetClassification(enum.Enum): | |
| """Asset classification types.""" | |
| REAL_PRODUCTION_SYSTEM = "real_production_system" | |
| WORKING_PROTOTYPE = "working_prototype" | |
| RESEARCH_PROTOTYPE = "research_prototype" | |
| INTERNAL_TOOL = "internal_tool" | |
| API_SERVICE = "api_service" | |
| FRONTEND_PRODUCT = "frontend_product" | |
| BACKEND_SERVICE = "backend_service" | |
| SMART_CONTRACT_PROTOCOL = "smart_contract_protocol" | |
| TRADING_ENGINE = "trading_engine" | |
| DATA_PIPELINE = "data_pipeline" | |
| HUGGING_FACE_SPACE = "hugging_face_space" | |
| PROMPT_SYSTEM = "prompt_system" | |
| AGENT_WORKFLOW = "agent_workflow" | |
| DOCUMENTATION_PACKAGE = "documentation_package" | |
| VALUATION_LEDGER = "valuation_ledger" | |
| PROOF_LEDGER = "proof_ledger" | |
| SALES_OUTREACH_TOOL = "sales_outreach_tool" | |
| FORK_TEMPLATE = "fork_template" | |
| SCAFFOLD = "scaffold" | |
| DUPLICATE = "duplicate" | |
| JUNK = "junk" | |
| RISK_BLOCKED = "risk_blocked" | |
| class User(Base): | |
| """User accounts for authentication and role-based access.""" | |
| __tablename__ = "users" | |
| id = Column(Integer, primary_key=True, index=True) | |
| email = Column(String(255), unique=True, nullable=False, index=True) | |
| password_hash = Column(String(255), nullable=False) | |
| role = Column(SQLEnum(UserRole), default=UserRole.PUBLIC, nullable=False) | |
| created_at = Column(DateTime, default=datetime.utcnow, nullable=False) | |
| updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) | |
| is_active = Column(Boolean, default=True, nullable=False) | |
| # Relationships | |
| assets = relationship("Asset", back_populates="owner") | |
| evaluations = relationship("Evaluation", back_populates="user") | |
| class Asset(Base): | |
| """Software assets for evaluation and underwriting.""" | |
| __tablename__ = "assets" | |
| id = Column(Integer, primary_key=True, index=True) | |
| asset_id = Column(String(255), unique=True, nullable=False, index=True) | |
| asset_name = Column(String(255), nullable=False) | |
| classification = Column(SQLEnum(AssetClassification), nullable=False) | |
| # Technical metadata | |
| primary_language = Column(String(50)) | |
| file_count = Column(Integer, default=0) | |
| has_tests = Column(Boolean, default=False) | |
| has_ci_cd = Column(Boolean, default=False) | |
| has_documentation = Column(Boolean, default=False) | |
| code_quality_score = Column(Float, default=0.0) | |
| build_status = Column(String(50)) | |
| test_status = Column(String(50)) | |
| deployment_status = Column(String(50)) | |
| # Ownership and license | |
| has_license = Column(Boolean, default=False) | |
| license_type = Column(String(100)) | |
| is_fork = Column(Boolean, default=False) | |
| ownership_clarity = Column(String(50)) | |
| # Links | |
| repo_url = Column(String(500)) | |
| deployment_url = Column(String(500)) | |
| # Additional metadata as JSON | |
| metadata = Column(JSON, default={}) | |
| # Timestamps | |
| created_at = Column(DateTime, default=datetime.utcnow, nullable=False) | |
| updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) | |
| # Foreign keys | |
| owner_id = Column(Integer, ForeignKey("users.id"), nullable=True) | |
| # Relationships | |
| owner = relationship("User", back_populates="assets") | |
| evaluations = relationship("Evaluation", back_populates="asset", cascade="all, delete-orphan") | |
| review_cards = relationship("ReviewCard", back_populates="asset", cascade="all, delete-orphan") | |
| class Evaluation(Base): | |
| """Professional evaluation results for assets.""" | |
| __tablename__ = "evaluations" | |
| id = Column(Integer, primary_key=True, index=True) | |
| evaluation_id = Column(String(255), unique=True, nullable=False, index=True) | |
| # Grades | |
| production_grade = Column(String(5)) | |
| commercial_grade = Column(String(5)) | |
| collateral_grade = Column(String(5)) | |
| financeability_score = Column(Integer, default=0) | |
| proof_level = Column(Integer, default=0) | |
| # Strategic classification | |
| strategic_value = Column(String(50)) | |
| buyer_today_value = Column(String(50)) | |
| collateral_support = Column(String(50)) | |
| # Committee results | |
| committee_results = Column(JSON, default={}) | |
| # Capital translation | |
| capital_translation = Column(JSON, default={}) | |
| # Liquidification plan | |
| liquidification_plan = Column(JSON, default={}) | |
| # Next action | |
| next_action = Column(JSON, default={}) | |
| # Evidence | |
| evidence = Column(JSON, default={}) | |
| # Timestamps | |
| created_at = Column(DateTime, default=datetime.utcnow, nullable=False) | |
| # Foreign keys | |
| asset_id = Column(Integer, ForeignKey("assets.id"), nullable=False) | |
| user_id = Column(Integer, ForeignKey("users.id"), nullable=True) | |
| # Relationships | |
| asset = relationship("Asset", back_populates="evaluations") | |
| user = relationship("User", back_populates="evaluations") | |
| audit_entries = relationship("AuditEntry", back_populates="evaluation", cascade="all, delete-orphan") | |
| class ReviewCard(Base): | |
| """Professional review cards for assets.""" | |
| __tablename__ = "review_cards" | |
| id = Column(Integer, primary_key=True, index=True) | |
| card_id = Column(String(255), unique=True, nullable=False, index=True) | |
| # Card content | |
| classification = Column(String(255)) | |
| production_grade = Column(String(5)) | |
| commercial_grade = Column(String(5)) | |
| collateral_grade = Column(String(5)) | |
| financeability_score = Column(Integer, default=0) | |
| proof_level = Column(Integer, default=0) | |
| strategic_value = Column(String(50)) | |
| buyer_today_value = Column(String(50)) | |
| collateral_support = Column(String(50)) | |
| # Blockers and action | |
| main_blockers = Column(JSON, default=[]) | |
| best_next_action = Column(String(500)) | |
| likely_route = Column(JSON, default=[]) | |
| packet_readiness = Column(Text) | |
| # Disclaimers and evidence | |
| disclaimers = Column(JSON, default=[]) | |
| evidence_links = Column(JSON, default={}) | |
| # Card format | |
| format_type = Column(String(20), default="text") # text, markdown, json | |
| # Timestamps | |
| created_at = Column(DateTime, default=datetime.utcnow, nullable=False) | |
| # Foreign keys | |
| asset_id = Column(Integer, ForeignKey("assets.id"), nullable=False) | |
| # Relationships | |
| asset = relationship("Asset", back_populates="review_cards") | |
| class AuditEntry(Base): | |
| """Audit log entries for decision tracking.""" | |
| __tablename__ = "audit_entries" | |
| id = Column(Integer, primary_key=True, index=True) | |
| entry_id = Column(String(255), unique=True, nullable=False, index=True) | |
| # Decision details | |
| evaluator_name = Column(String(255), nullable=False) | |
| decision_type = Column(String(100), nullable=False) | |
| decision_value = Column(JSON, nullable=False) | |
| evidence = Column(JSON, default={}) | |
| reasoning = Column(Text, nullable=False) | |
| confidence = Column(Float, default=1.0) | |
| # Integrity | |
| entry_hash = Column(String(64), nullable=False) # SHA-256 hash | |
| # Metadata | |
| metadata = Column(JSON, default={}) | |
| # Timestamps | |
| timestamp = Column(DateTime, default=datetime.utcnow, nullable=False) | |
| # Foreign keys | |
| evaluation_id = Column(Integer, ForeignKey("evaluations.id"), nullable=True) | |
| # Relationships | |
| evaluation = relationship("Evaluation", back_populates="audit_entries") | |
| class JobDescription(Base): | |
| """Job descriptions for competency graph mining.""" | |
| __tablename__ = "job_descriptions" | |
| id = Column(Integer, primary_key=True, index=True) | |
| job_id = Column(String(255), unique=True, nullable=False, index=True) | |
| # Job details | |
| role_family = Column(String(255), nullable=False, index=True) | |
| title = Column(String(255)) | |
| company = Column(String(255)) | |
| description = Column(Text) | |
| requirements = Column(JSON, default=[]) | |
| skills = Column(JSON, default=[]) | |
| tools = Column(JSON, default=[]) | |
| deliverables = Column(JSON, default=[]) | |
| # Source | |
| source = Column(String(100), nullable=False) | |
| url = Column(String(500)) | |
| salary_range = Column(String(100)) | |
| location = Column(String(255)) | |
| posted_date = Column(DateTime) | |
| # Metadata | |
| extracted_at = Column(DateTime, default=datetime.utcnow, nullable=False) | |
| # Competency extraction | |
| extracted_competencies = Column(JSON, default=[]) | |
| class Competency(Base): | |
| """Competencies extracted from job descriptions.""" | |
| __tablename__ = "competencies" | |
| id = Column(Integer, primary_key=True, index=True) | |
| competency_id = Column(String(255), unique=True, nullable=False, index=True) | |
| # Competency details | |
| name = Column(String(255), nullable=False) | |
| description = Column(Text) | |
| domain = Column(String(100), nullable=False, index=True) | |
| # Signals and evidence | |
| signals = Column(JSON, default=[]) | |
| evidence_types = Column(JSON, default=[]) | |
| scoring_rules = Column(JSON, default={}) | |
| artifacts = Column(JSON, default=[]) | |
| # Role mapping | |
| role_families = Column(JSON, default=[]) | |
| # Metadata | |
| version = Column(String(20), default="1.0") | |
| created_at = Column(DateTime, default=datetime.utcnow, nullable=False) | |
| updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) | |
| class CompetencyGraph(Base): | |
| """Competency graph versions.""" | |
| __tablename__ = "competency_graphs" | |
| id = Column(Integer, primary_key=True, index=True) | |
| graph_id = Column(String(255), unique=True, nullable=False, index=True) | |
| # Graph details | |
| name = Column(String(255), nullable=False) | |
| description = Column(Text) | |
| # Graph structure | |
| competencies = Column(JSON, default={}) # competency_id -> competency data | |
| role_competency_map = Column(JSON, default={}) # role_family -> competency_ids | |
| domain_competency_map = Column(JSON, default={}) # domain -> competency_ids | |
| # Metadata | |
| version = Column(String(20), default="1.0") | |
| created_at = Column(DateTime, default=datetime.utcnow, nullable=False) | |
| last_updated = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) | |
| # Active flag | |
| is_active = Column(Boolean, default=True, nullable=False) | |
| class Outcome(Base): | |
| """Verified intervention outcomes for transformation law extraction.""" | |
| __tablename__ = "outcomes" | |
| id = Column(Integer, primary_key=True, index=True) | |
| outcome_id = Column(String(255), unique=True, nullable=False, index=True) | |
| # Outcome details | |
| intervention_type = Column(String(255), nullable=False) | |
| asset_id = Column(String(255), nullable=False) | |
| # Results | |
| pre_intervention_value = Column(Float) | |
| post_intervention_value = Column(Float) | |
| value_delta = Column(Float) | |
| value_delta_percent = Column(Float) | |
| # Verification | |
| is_verified = Column(Boolean, default=False) | |
| verified_by = Column(String(255)) | |
| verified_at = Column(DateTime) | |
| # Metadata | |
| outcome_date = Column(DateTime, default=datetime.utcnow, nullable=False) | |
| notes = Column(Text) | |