61 lines
2.6 KiB
SQL
Executable File
61 lines
2.6 KiB
SQL
Executable File
-- ========= ДАННЫЕ ОТЧЕТОВ ДЛЯ ЖИТЕЛЕЙ =========
|
||
-- Одна запись на дом + период (например: дом 12, январь 2026).
|
||
-- Все собранные данные отчета сохраняются здесь.
|
||
|
||
CREATE TABLE IF NOT EXISTS resident_report_data (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
building_id VARCHAR(50) NOT NULL REFERENCES buildings(id) ON DELETE CASCADE,
|
||
period_start DATE NOT NULL,
|
||
period_end DATE NOT NULL,
|
||
period_month INTEGER NOT NULL, -- 1-12
|
||
period_year INTEGER NOT NULL,
|
||
|
||
-- NPS
|
||
nps_score INTEGER NOT NULL DEFAULT 0,
|
||
nps_total_responses INTEGER NOT NULL DEFAULT 0,
|
||
nps_avg_score NUMERIC(4,2) DEFAULT 0,
|
||
nps_promoters INTEGER NOT NULL DEFAULT 0,
|
||
nps_passives INTEGER NOT NULL DEFAULT 0,
|
||
nps_detractors INTEGER NOT NULL DEFAULT 0,
|
||
|
||
-- Заявки
|
||
apps_total INTEGER NOT NULL DEFAULT 0,
|
||
apps_completed INTEGER NOT NULL DEFAULT 0,
|
||
apps_quality INTEGER NOT NULL DEFAULT 0,
|
||
|
||
-- Задачи (календарный план)
|
||
tasks_total INTEGER NOT NULL DEFAULT 0,
|
||
tasks_completed INTEGER NOT NULL DEFAULT 0,
|
||
|
||
-- Финансы
|
||
funds_collected NUMERIC(14,2) NOT NULL DEFAULT 0,
|
||
funds_spent NUMERIC(14,2) NOT NULL DEFAULT 0,
|
||
funds_balance NUMERIC(14,2) NOT NULL DEFAULT 0,
|
||
|
||
-- Долги
|
||
debt_cases_won INTEGER NOT NULL DEFAULT 0,
|
||
debt_collected NUMERIC(14,2) NOT NULL DEFAULT 0,
|
||
|
||
-- Расходы (итог и по категориям — JSON)
|
||
expenses_total NUMERIC(14,2) NOT NULL DEFAULT 0,
|
||
expenses_by_category JSONB,
|
||
|
||
-- Доп. данные в JSON (мероприятия, фото, план)
|
||
events JSONB,
|
||
work_photos JSONB,
|
||
plan_items JSONB,
|
||
|
||
-- Полный снимок отчета (как в content) — на случай расширения
|
||
snapshot JSONB,
|
||
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
|
||
UNIQUE(building_id, period_start, period_end)
|
||
);
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_resident_report_data_building ON resident_report_data(building_id);
|
||
CREATE INDEX IF NOT EXISTS idx_resident_report_data_period ON resident_report_data(period_year, period_month);
|
||
|
||
COMMENT ON TABLE resident_report_data IS 'Собранные данные отчетов для жителей: дом + период (напр. дом 12, январь)';
|