Spaces:
Sleeping
Sleeping
File size: 3,960 Bytes
e6ecc60 |
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import enum
db = SQLAlchemy()
class Country(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), unique=True, nullable=False)
region = db.Column(db.String(100), nullable=False)
cases = db.relationship("Case", backref="country_context", lazy=True)
reports = db.relationship("Report", backref="report_country_context", lazy=True)
def __repr__(self):
return f"<Country {self.name}>"
class CaseStatus(enum.Enum):
ACTIVE = "Active"
PENDING = "Pending"
COMPLETED = "Completed"
CLOSED = "Closed"
class Case(db.Model):
id = db.Column(db.Integer, primary_key=True)
case_id_display = db.Column(db.String(50), unique=True, nullable=False)
case_type = db.Column(db.String(100), nullable=False)
suspect_name = db.Column(db.String(150), nullable=False)
profile_details = db.Column(db.Text, nullable=True)
evidence_summary = db.Column(db.Text, nullable=True)
status = db.Column(db.Enum(CaseStatus), default=CaseStatus.PENDING, nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
country_id = db.Column(db.Integer, db.ForeignKey("country.id"), nullable=True) # For recommendation context
interrogation_sessions = db.relationship("InterrogationSession", backref="case", lazy=True, cascade="all, delete-orphan")
reports = db.relationship("Report", backref="case", lazy=True, cascade="all, delete-orphan")
def __repr__(self):
return f"<Case {self.case_id_display}>"
class InterrogationSession(db.Model):
id = db.Column(db.Integer, primary_key=True)
case_id = db.Column(db.Integer, db.ForeignKey("case.id"), nullable=False)
session_date = db.Column(db.DateTime, default=datetime.utcnow)
summary_notes = db.Column(db.Text, nullable=True)
generated_questions = db.relationship("GeneratedQuestion", backref="session", lazy=True, cascade="all, delete-orphan")
def __repr__(self):
return f"<InterrogationSession {self.id} for Case {self.case_id}>"
class GeneratedQuestion(db.Model):
id = db.Column(db.Integer, primary_key=True)
interrogation_session_id = db.Column(db.Integer, db.ForeignKey("interrogation_session.id"), nullable=False)
question_text = db.Column(db.Text, nullable=False)
category = db.Column(db.String(100), nullable=True)
generated_at = db.Column(db.DateTime, default=datetime.utcnow)
responses = db.relationship("InterrogationResponse", backref="question", lazy=True, cascade="all, delete-orphan")
def __repr__(self):
return f"<GeneratedQuestion {self.id}>"
class InterrogationResponse(db.Model):
id = db.Column(db.Integer, primary_key=True)
generated_question_id = db.Column(db.Integer, db.ForeignKey("generated_question.id"), nullable=False)
response_text = db.Column(db.Text, nullable=True)
tags = db.Column(db.String(200), nullable=True) # e.g., "evasiveness,contradiction"
responded_at = db.Column(db.DateTime, default=datetime.utcnow)
def __repr__(self):
return f"<InterrogationResponse {self.id} for Question {self.generated_question_id}>"
class Report(db.Model):
id = db.Column(db.Integer, primary_key=True)
case_id = db.Column(db.Integer, db.ForeignKey("case.id"), nullable=False)
generated_at = db.Column(db.DateTime, default=datetime.utcnow)
llm_json_output = db.Column(db.Text, nullable=True) # Raw JSON from LLM
report_content_summary = db.Column(db.Text, nullable=True) # Processed summary for display
recommendations = db.Column(db.Text, nullable=True) # Country-specific recommendations
country_id = db.Column(db.Integer, db.ForeignKey("country.id"), nullable=True) # Context for recommendations
def __repr__(self):
return f"<Report {self.id} for Case {self.case_id}>"
|