feat(performance-alerts): rules-engine-driven alerts, persisted as PerformanceAlert

Phase A+B of the alerts overhaul:

- New PerformanceFactsProvider exposes agent.idleMinutes (from
  AgentSession), agent.busyMinutes, agent.totalCallsToday,
  agent.bookedCallsToday, agent.conversionPercent
- Implement EscalateActionHandler (was a stub): persists a
  PerformanceAlert row, dedupes per agent+type+IST date so a 5-min
  cron can't spam, updates value if it changes
- New PerformanceConsumer: setInterval every 5 min, reads on_schedule
  rules referencing agent.* facts, evaluates per agent, dispatches
  escalate actions
- Two starter rules in hospital-starter.json: excessive-idle (>60min)
  and low-conversion (<15% with >10 calls today). NPS deferred — no
  source signal exists yet
- New PerformanceAlertsController: GET /api/supervisor/performance-alerts
  (active list), POST /:id/dismiss, POST /dismiss-all
- Rules engine now injects EscalateActionHandler via DI so the action
  has access to PlatformGraphqlService for persistence

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-15 09:02:02 +05:30
parent 5b40f49b65
commit 8dcfa5a72f
8 changed files with 451 additions and 10 deletions

View File

@@ -1,14 +1,26 @@
// src/rules-engine/rules-engine.module.ts
import { Module } from '@nestjs/common';
import { PlatformModule } from '../platform/platform.module';
import { RulesEngineController } from './rules-engine.controller';
import { RulesEngineService } from './rules-engine.service';
import { RulesStorageService } from './rules-storage.service';
import { WorklistConsumer } from './consumers/worklist.consumer';
import { PerformanceConsumer } from './consumers/performance.consumer';
import { EscalateActionHandler } from './actions/escalate.action';
import { PerformanceFactsProvider } from './facts/performance-facts.provider';
@Module({
imports: [PlatformModule],
controllers: [RulesEngineController],
providers: [RulesEngineService, RulesStorageService, WorklistConsumer],
exports: [RulesEngineService, RulesStorageService, WorklistConsumer],
providers: [
RulesEngineService,
RulesStorageService,
WorklistConsumer,
PerformanceConsumer,
EscalateActionHandler,
PerformanceFactsProvider,
],
exports: [RulesEngineService, RulesStorageService, WorklistConsumer, PerformanceConsumer],
})
export class RulesEngineModule {}