50 lines
3.3 KiB
Python
50 lines
3.3 KiB
Python
from datetime import datetime, timezone
|
|
from typing import Any, Optional
|
|
|
|
from sqlalchemy import DateTime, JSON, String, Text
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.db import Base
|
|
|
|
|
|
class ClauseRecommendation(Base):
|
|
__tablename__ = "clause_recommendations"
|
|
|
|
id: Mapped[str] = mapped_column(String(64), primary_key=True)
|
|
tenant_id: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
|
|
recommendation_run_id: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
|
|
contract_id: Mapped[Optional[str]] = mapped_column(String(64), nullable=True, index=True)
|
|
source_type: Mapped[str] = mapped_column(String(64), nullable=False, default="contract_text", index=True)
|
|
document_type_code: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
|
|
contract_type: Mapped[Optional[str]] = mapped_column(String(64), nullable=True, index=True)
|
|
clause_key: Mapped[str] = mapped_column(String(100), nullable=False, index=True)
|
|
clause_title: Mapped[str] = mapped_column(String(255), nullable=False)
|
|
clause_type: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
|
|
recommendation_kind: Mapped[str] = mapped_column(String(64), nullable=False, index=True)
|
|
basis_type: Mapped[Optional[str]] = mapped_column(String(64), nullable=True)
|
|
priority: Mapped[str] = mapped_column(String(32), nullable=False, default="medium", index=True)
|
|
confidence: Mapped[str] = mapped_column(String(32), nullable=False, default="medium")
|
|
insert_strategy: Mapped[str] = mapped_column(String(64), nullable=False)
|
|
insert_anchor_text: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
suggested_text: Mapped[str] = mapped_column(Text, nullable=False)
|
|
reason: Mapped[str] = mapped_column(Text, nullable=False)
|
|
legal_basis: Mapped[str] = mapped_column(Text, nullable=False)
|
|
practice_basis: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
legal_article_refs_json: Mapped[Optional[list[dict[str, Any]]]] = mapped_column(JSON, nullable=True)
|
|
source_rule: Mapped[str] = mapped_column(String(128), nullable=False, index=True)
|
|
source_types_json: Mapped[Optional[list[str]]] = mapped_column(JSON, nullable=True)
|
|
prompt_runtime_json: Mapped[Optional[dict[str, Any]]] = mapped_column(JSON, nullable=True)
|
|
action_status: Mapped[str] = mapped_column(String(32), nullable=False, default="shown", index=True)
|
|
action_note: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
action_detail_json: Mapped[Optional[dict[str, Any]]] = mapped_column(JSON, nullable=True)
|
|
applied_contract_version_id: Mapped[Optional[str]] = mapped_column(String(64), nullable=True, index=True)
|
|
created_by: Mapped[Optional[str]] = mapped_column(String(64), nullable=True, index=True)
|
|
updated_by: Mapped[Optional[str]] = mapped_column(String(64), nullable=True, index=True)
|
|
acted_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True, index=True)
|
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), index=True)
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True),
|
|
default=lambda: datetime.now(timezone.utc),
|
|
onupdate=lambda: datetime.now(timezone.utc),
|
|
)
|