-- Создание ENUM типов
CREATE TYPE legal_form_enum AS ENUM (
    'ИП',
    'ООО',
    'ОАО',
    'ПАО',
    'смешанное'
);

CREATE TYPE document_type_enum AS ENUM (
    'информационный',
    'организационно-распорядительный',
    'запросно-ответный',
    'инициативный',
    'другой'
);

-- Таблица organization (организация)
CREATE TABLE organization (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64) UNIQUE NOT NULL,
    legal_form legal_form_enum NOT NULL
);

-- Таблица employee (сотрудники)
CREATE TABLE employee (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64) NOT NULL,
    lastname VARCHAR(64) NOT NULL,
    patronymic VARCHAR(64),
    organization_id INTEGER NOT NULL REFERENCES organization(id) ON DELETE RESTRICT
);

-- Таблица correspondence (корреспонденция)
CREATE TABLE correspondence (
    id SERIAL PRIMARY KEY,
    document_type document_type_enum NOT NULL,
    document_number VARCHAR(256) UNIQUE NOT NULL,
    receipt_date DATE NOT NULL DEFAULT CURRENT_DATE,
    execution_date DATE, -- Может быть NULL, если документ ещё не исполнен
    employee_id INTEGER NOT NULL REFERENCES employee(id) ON DELETE RESTRICT,
    
    -- Проверка что execution_date позже receipt_date или NULL
    CONSTRAINT check_execution_date CHECK (
        execution_date IS NULL OR execution_date >= receipt_date
    )
);
