27 lines
1.2 KiB
MySQL
27 lines
1.2 KiB
MySQL
|
|
-- AI Ticket Analyzer — Phase 2.7 cost-guard audit log.
|
||
|
|
-- See docs/ticket-analyzer-phase2-spec.md → Section D.8.
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS analyzer_cost_audit (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
user_id TEXT REFERENCES "user"(id) ON DELETE SET NULL,
|
||
|
|
action TEXT NOT NULL,
|
||
|
|
-- e.g. 'aggregate_report' | 'analyze_ticket'
|
||
|
|
estimated_cost NUMERIC(10,4) NOT NULL,
|
||
|
|
daily_spend_before NUMERIC(10,4) NOT NULL,
|
||
|
|
decision TEXT NOT NULL
|
||
|
|
CHECK (decision IN ('approved','requires_confirmation','blocked','overridden')),
|
||
|
|
decision_reason TEXT,
|
||
|
|
context JSONB,
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_analyzer_cost_audit_user_date
|
||
|
|
ON analyzer_cost_audit (user_id, created_at DESC);
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_analyzer_cost_audit_decision
|
||
|
|
ON analyzer_cost_audit (decision, created_at DESC);
|
||
|
|
|
||
|
|
COMMENT ON TABLE analyzer_cost_audit IS
|
||
|
|
'Audit log of cost-guard decisions for analyzer LLM operations. One row per gated request '
|
||
|
|
'(approved/requires_confirmation/blocked/overridden), recording the inputs that drove the decision.';
|