AndesOps-AI / backend /app /models /tender_detail.py
脕lvaro Valenzuela Valdes
deploy: clean build for hf
e418416
from sqlalchemy import Column, String, DateTime, JSON, Text, ForeignKey
from app.database import Base
from datetime import datetime
class TenderDetailTabModel(Base):
"""Store extracted detail tabs from tender pages"""
__tablename__ = "tender_detail_tabs"
id = Column(String(100), primary_key=True) # "{tender_code}_{tab_name}"
tender_code = Column(String(50), ForeignKey('tenders.code'), index=True)
tab_name = Column(String(100)) # Preguntas, Historial, Apertura, Adjudicaci贸n, Antecedentes, etc.
tab_type = Column(String(50)) # questions, history, opening, adjudication, attachments, criteria
content_summary = Column(Text) # Summary of tab content
tab_metadata = Column(JSON, nullable=True) # Tab-specific data (counts, dates, etc.)
attachment_urls = Column(JSON, nullable=True) # List of attachment URLs for this tab
last_fetched = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
html_content = Column(Text, nullable=True) # Optional: store raw HTML for later parsing
class TenderAttachmentDetailModel(Base):
"""Detailed information about tender attachments"""
__tablename__ = "tender_attachment_details"
id = Column(String(100), primary_key=True) # Unique hash of URL
tender_code = Column(String(50), ForeignKey('tenders.code'), index=True)
attachment_name = Column(String(255), index=True)
attachment_url = Column(Text)
tab_category = Column(String(100)) # Administrativo, T茅cnico, Econ贸mico, etc.
file_type = Column(String(50)) # PDF, DOC, XLS, etc.
estimated_size = Column(String(50), nullable=True) # For reference
last_updated = Column(DateTime, default=datetime.utcnow)
is_accessible = Column(JSON, nullable=True) # Track if URL is still valid