Files
vector/backend/migrations/001_create_cases_table.sql
2026-06-06 18:31:55 +00:00

79 lines
2.7 KiB
SQL

-- Миграция: создание таблицы cases согласно §10 контекста
DROP TABLE IF EXISTS search_results CASCADE;
DROP TABLE IF EXISTS search_cases CASCADE;
CREATE TABLE IF NOT EXISTS cases (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
created_at TIMESTAMP DEFAULT NOW(),
status VARCHAR(20) DEFAULT 'active',
child_name VARCHAR(255),
age_years INTEGER NOT NULL,
gender CHAR(1),
clothes_description TEXT,
special_marks TEXT,
phone_status VARCHAR(20),
has_diagnosis BOOLEAN DEFAULT FALSE,
diagnosis_type VARCHAR[],
fitness_level VARCHAR(20),
has_transport VARCHAR(20) DEFAULT 'none',
cant_swim BOOLEAN DEFAULT FALSE,
psychotype VARCHAR(50),
psychotype_answers JSONB,
loss_reason VARCHAR(100),
loss_time TIMESTAMP,
elapsed_hours FLOAT,
last_seen_direction VARCHAR(10),
last_seen_reliability VARCHAR(20),
last_seen_description TEXT,
behavior_description TEXT,
familiar_places TEXT,
lost_before VARCHAR(20),
season VARCHAR(20),
temperature_c FLOAT,
precipitation VARCHAR(20),
visibility VARCHAR(20),
wind VARCHAR(20),
terrain VARCHAR[],
tnp_lat FLOAT,
tnp_lon FLOAT,
tnp_address TEXT,
teams_count INTEGER,
team_size INTEGER,
has_dog BOOLEAN DEFAULT FALSE,
extra_resources VARCHAR[],
found_alive BOOLEAN,
found_distance_km FLOAT,
found_direction VARCHAR(10),
found_location_type VARCHAR(50),
found_lat FLOAT,
found_lon FLOAT,
search_duration_hours FLOAT,
who_found VARCHAR(50),
confidence_avg FLOAT,
raw_text TEXT,
analysis_log JSONB
);
CREATE INDEX IF NOT EXISTS idx_cases_coords ON cases (found_lat, found_lon);
CREATE INDEX IF NOT EXISTS idx_cases_age_season ON cases (age_years, season);
CREATE INDEX IF NOT EXISTS idx_cases_status ON cases (status);
DROP TABLE IF EXISTS raw_documents CASCADE;
CREATE TABLE IF NOT EXISTS raw_documents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
filename VARCHAR(255) NOT NULL,
raw_text TEXT,
extracted_json JSONB,
created_at TIMESTAMP DEFAULT NOW()
);