-- ========= АГРЕГИРОВАННЫЕ ПОКАЗАТЕЛИ NPS ПО ДОМУ И ПЕРИОДУ ========= -- Сохранение цифр NPS (score, кол-во ответов, промоутеры и т.д.) для отчетов CREATE TABLE IF NOT EXISTS nps_building_stats ( 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, total_responses INTEGER NOT NULL DEFAULT 0, nps_score INTEGER NOT NULL DEFAULT 0, -- NPS = % промоутеров - % критиков avg_score NUMERIC(4,2) NOT NULL DEFAULT 0, -- средняя оценка 0-10 promoters INTEGER NOT NULL DEFAULT 0, -- оценка 9-10 passives INTEGER NOT NULL DEFAULT 0, -- оценка 7-8 detractors INTEGER NOT NULL DEFAULT 0, -- оценка 0-6 promoter_percent NUMERIC(5,2) DEFAULT 0, detractor_percent NUMERIC(5,2) DEFAULT 0, 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_nps_building_stats_building ON nps_building_stats(building_id); CREATE INDEX IF NOT EXISTS idx_nps_building_stats_period ON nps_building_stats(period_start, period_end); COMMENT ON TABLE nps_building_stats IS 'Агрегированные показатели NPS по дому за период (для отчетов жителям)';