-- Схема БД для элемента "Условия поверки"

-- Таблица лабораторий
CREATE TABLE laboratories (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    code VARCHAR(50) UNIQUE NOT NULL, -- Уникальный код лаборатории
    description TEXT,
    address TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Таблица типов условий поверки (температура, влажность, давление и т.д.)
CREATE TABLE condition_types (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL, -- "Температура", "Влажность", "Давление"
    unit VARCHAR(20), -- "°C", "%", "кПа"
    data_type VARCHAR(20) DEFAULT 'number', -- number, string, boolean
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Связь лаборатории с типами условий (какие условия отслеживает каждая лаборатория)
CREATE TABLE laboratory_condition_types (
    id SERIAL PRIMARY KEY,
    laboratory_id INTEGER REFERENCES laboratories(id) ON DELETE CASCADE,
    condition_type_id INTEGER REFERENCES condition_types(id) ON DELETE CASCADE,
    is_required BOOLEAN DEFAULT false, -- Обязательно ли это условие для данной лаборатории
    default_value VARCHAR(100), -- Значение по умолчанию
    min_value DECIMAL(10,3), -- Минимальное значение (для валидации)
    max_value DECIMAL(10,3), -- Максимальное значение (для валидации)
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(laboratory_id, condition_type_id)
);

-- Таблица для сохранения условий по дням
CREATE TABLE daily_conditions (
    id SERIAL PRIMARY KEY,
    laboratory_id INTEGER REFERENCES laboratories(id) ON DELETE CASCADE,
    date DATE NOT NULL,
    conditions JSONB NOT NULL, -- JSON объект с условиями: {"temperature": 23.5, "humidity": 45.2, "pressure": 101.3}
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    created_by VARCHAR(100), -- Кто создал запись
    UNIQUE(laboratory_id, date) -- Одна запись условий на день для лаборатории
);

-- Индексы для оптимизации
CREATE INDEX idx_daily_conditions_lab_date ON daily_conditions(laboratory_id, date);
CREATE INDEX idx_daily_conditions_date ON daily_conditions(date);
CREATE INDEX idx_laboratory_condition_types_lab ON laboratory_condition_types(laboratory_id);

-- Вставка начальных данных

-- Типы условий
INSERT INTO condition_types (name, unit, data_type, description) VALUES
('Температура', '°C', 'number', 'Температура окружающей среды'),
('Влажность', '%', 'number', 'Относительная влажность воздуха'),
('Атмосферное давление', 'кПа', 'number', 'Атмосферное давление'),
('Давление среды', 'МПа', 'number', 'Давление рабочей среды'),
('Напряжение сети', 'В', 'number', 'Напряжение питающей сети'),
('Частота сети', 'Гц', 'number', 'Частота питающей сети');

-- Примеры лабораторий
INSERT INTO laboratories (name, code, description) VALUES
('Лаборатория температуры', 'TEMP_LAB', 'Лаборатория поверки температурных приборов'),
('Лаборатория давления', 'PRESS_LAB', 'Лаборатория поверки приборов давления'),
('Электрическая лаборатория', 'ELEC_LAB', 'Лаборатория поверки электрических приборов');

-- Настройка условий для лабораторий
-- Лаборатория температуры
INSERT INTO laboratory_condition_types (laboratory_id, condition_type_id, is_required, default_value, min_value, max_value) VALUES
(1, 1, true, '20', 15, 30), -- Температура
(1, 2, true, '50', 30, 80), -- Влажность
(1, 3, false, '101.3', 80, 120); -- Атмосферное давление

-- Лаборатория давления  
INSERT INTO laboratory_condition_types (laboratory_id, condition_type_id, is_required, default_value, min_value, max_value) VALUES
(2, 1, true, '23', 18, 28), -- Температура
(2, 2, false, '45', 20, 70), -- Влажность
(2, 3, true, '101.3', 90, 110), -- Атмосферное давление
(2, 4, true, '0.1', 0, 100); -- Давление среды

-- Электрическая лаборатория
INSERT INTO laboratory_condition_types (laboratory_id, condition_type_id, is_required, default_value, min_value, max_value) VALUES
(3, 1, true, '22', 20, 25), -- Температура
(3, 2, true, '60', 40, 70), -- Влажность
(3, 5, true, '220', 198, 242), -- Напряжение сети
(3, 6, true, '50', 49.5, 50.5); -- Частота сети 