Files
mkd/backend/migrate_resident_report_data.sql
2026-02-04 00:17:04 +05:00

61 lines
2.6 KiB
SQL
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ========= ДАННЫЕ ОТЧЕТОВ ДЛЯ ЖИТЕЛЕЙ =========
-- Одна запись на дом + период (например: дом 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, январь)';