Files
vector/backend/schemas.py
T
2026-06-06 20:59:23 +00:00

130 lines
3.6 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import Any
from pydantic import BaseModel, Field
class CaseCreate(BaseModel):
age: int | None = None
gender: str | None = None
health_flags: list[str] = Field(default_factory=list)
elapsed_hours: int | None = None
last_known_place: str | None = None
direction: str | None = None
terrain_primary: str | None = None
weather: str | None = None
resources: list[str] = Field(default_factory=list)
gps: dict[str, float] | None = None
notes: str | None = None
note: str | None = None
status: str = 'new'
found_alive: bool | None = None
found_distance_km: float | None = None
found_direction: str | None = None
found_location_type: str | None = None
found_lat: float | None = None
found_lon: float | None = None
who_found: str | None = None
mobile: bool = False
class CaseUpdate(BaseModel):
age: int | None = None
gender: str | None = None
health_flags: list[str] | None = None
elapsed_hours: int | None = None
last_known_place: str | None = None
direction: str | None = None
terrain_primary: str | None = None
weather: str | None = None
resources: list[str] | None = None
gps_lat: float | None = None
gps_lon: float | None = None
notes: str | None = None
note: str | None = None
status: str | None = None
found_alive: bool | None = None
found_distance_km: float | None = None
found_direction: str | None = None
found_location_type: str | None = None
found_lat: float | None = None
found_lon: float | None = None
who_found: str | None = None
raw_text: str | None = None
analysis_log: str | None = None
class CaseResponse(BaseModel):
id: str
created_at: datetime
updated_at: datetime
age: int | None = None
gender: str | None = None
health_flags: list[str]
elapsed_hours: int | None = None
last_known_place: str | None = None
direction: str | None = None
terrain_primary: str | None = None
weather: str | None = None
resources: list[str]
gps_lat: float | None = None
gps_lon: float | None = None
notes: str | None = None
status: str
found_alive: bool | None = None
found_distance_km: float | None = None
found_direction: str | None = None
found_location_type: str | None = None
found_lat: float | None = None
found_lon: float | None = None
who_found: str | None = None
raw_text: str | None = None
analysis_log: str | None = None
result: dict[str, Any] | None = None
class CaseListResponse(BaseModel):
items: list[CaseResponse]
total: int
page: int
page_size: int
class DashboardResponse(BaseModel):
total_cases: int
found_alive_count: int
found_deceased_count: int
unknown_outcome_count: int
median_found_distance_km: float | None
recent_activity_count: int
class RecommendationRequest(BaseModel):
age: int | None = None
gender: str | None = None
health_flags: list[str] = Field(default_factory=list)
elapsed_hours: int | None = None
terrain_primary: str | None = None
weather: str | None = None
resources: list[str] = Field(default_factory=list)
class AnalyzeResponse(BaseModel):
urgency: str
primary_zones: list[dict[str, Any]]
immediate_actions: list[str]
behavioral_prediction: str
psychotype_recommendations: dict[str, Any]
key_locations: list[str]
case_id: str
class ParseDocResponse(BaseModel):
filename: str
parsed: bool
preview: dict[str, Any]
raw_text: str | None = None