151 lines
5.2 KiB
Python
151 lines
5.2 KiB
Python
"""
|
|
===============================================================================
|
|
FILE: core/schema.py
|
|
PROJECT: SCUD Orion AI (Unified Architecture)
|
|
ROLE: DDL-схемы таблиц, создание индексов и инициализация базы данных.
|
|
===============================================================================
|
|
"""
|
|
|
|
import logging
|
|
from core.connection import get_connection
|
|
|
|
logger = logging.getLogger("DB_SCHEMA")
|
|
|
|
|
|
def init_all_tables() -> None:
|
|
"""Инициализирует все таблицы и индексы системы."""
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
|
|
# 1. Логи СКУД
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS scud_logs (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
log_date TEXT NOT NULL,
|
|
fio TEXT NOT NULL,
|
|
fio_clean TEXT NOT NULL,
|
|
department TEXT,
|
|
position TEXT,
|
|
time_in TEXT,
|
|
first_activity TEXT DEFAULT '—',
|
|
time_out TEXT,
|
|
time_in_building TEXT,
|
|
is_present INTEGER NOT NULL,
|
|
anomaly_flag TEXT DEFAULT 'NONE',
|
|
snapshot_time TEXT DEFAULT NULL,
|
|
snapshot_id TEXT DEFAULT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
""")
|
|
|
|
# 2. Кадровые реестры 1С
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS zup_staff (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
snapshot_date TEXT NOT NULL,
|
|
fio TEXT NOT NULL,
|
|
fio_clean TEXT NOT NULL,
|
|
department TEXT,
|
|
position TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
""")
|
|
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS zup_absences (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
absence_date TEXT NOT NULL,
|
|
fio TEXT NOT NULL,
|
|
fio_clean TEXT NOT NULL,
|
|
absence_type TEXT NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
""")
|
|
|
|
# 3. Аномалии и база знаний
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS anomalies_history (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
anomaly_date TEXT NOT NULL,
|
|
fio TEXT NOT NULL,
|
|
anomaly_type TEXT NOT NULL,
|
|
details TEXT NOT NULL,
|
|
human_status TEXT DEFAULT 'Pending',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
""")
|
|
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS ai_knowledge_base (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
rule_text TEXT UNIQUE NOT NULL,
|
|
added_by TEXT DEFAULT 'Human',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
""")
|
|
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS department_synonyms (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
short_name TEXT UNIQUE NOT NULL,
|
|
full_name TEXT NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
""")
|
|
|
|
# 4. Узлы системного промпта и сессии
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS system_prompt_nodes (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
prompt_name TEXT DEFAULT 'main_agent',
|
|
section_id INTEGER NOT NULL,
|
|
item_id INTEGER NOT NULL,
|
|
content TEXT NOT NULL,
|
|
is_active INTEGER DEFAULT 1,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE(prompt_name, section_id, item_id)
|
|
);
|
|
""")
|
|
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS session_states (
|
|
session_id TEXT PRIMARY KEY,
|
|
state_type TEXT NOT NULL,
|
|
pending_data TEXT,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
""")
|
|
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS chat_messages (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
session_id TEXT NOT NULL,
|
|
role TEXT NOT NULL,
|
|
content TEXT NOT NULL,
|
|
is_ephemeral INTEGER DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
""")
|
|
|
|
# 5. Задачи
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS tasks (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
task_id TEXT,
|
|
module TEXT DEFAULT 'general',
|
|
title TEXT NOT NULL,
|
|
priority TEXT DEFAULT 'MEDIUM',
|
|
status TEXT DEFAULT 'BACKLOG',
|
|
due_date TEXT,
|
|
user_id INTEGER DEFAULT 1,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
""")
|
|
|
|
# 6. Индексы
|
|
cursor.execute("CREATE INDEX IF NOT EXISTS idx_scud_date ON scud_logs(log_date);")
|
|
cursor.execute("CREATE INDEX IF NOT EXISTS idx_scud_fio ON scud_logs(fio_clean);")
|
|
cursor.execute("CREATE INDEX IF NOT EXISTS idx_scud_snapshot ON scud_logs(snapshot_time);")
|
|
cursor.execute("CREATE INDEX IF NOT EXISTS idx_prompt_nodes ON system_prompt_nodes(prompt_name, section_id, item_id);")
|
|
|
|
conn.commit() |