Files
boc/landvex-admin-v2/schema-notifications-reports.sql
T
Bernt 48ea61cdcc docs: add quixzoom-auth-core product to AAMOS
- Product documentation in docs/products/
- Updated MEMORY.md with product info
- quiXzoom Auth Core as AAMOS Identity product
2026-07-14 09:58:53 +00:00

124 lines
5.4 KiB
SQL

-- ═══════════════════════════════════════════════════════════════════════════
-- AAMOS Admin v2 — Notifications & Reports Schema
-- ═══════════════════════════════════════════════════════════════════════════
-- ── Notifications ──────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS notifications (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
type TEXT NOT NULL, -- 'lead'|'invoice'|'payment'|'ticket'|'employee'|'contract'|'system'
title TEXT NOT NULL,
message TEXT NOT NULL,
entity_type TEXT, -- 'customer'|'invoice'|'ticket'|'lead'|'employee'|'contract'
entity_id UUID,
priority TEXT NOT NULL DEFAULT 'normal', -- 'low'|'normal'|'high'|'urgent'
read_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_notifications_read ON notifications (read_at);
CREATE INDEX IF NOT EXISTS idx_notifications_type ON notifications (type);
CREATE INDEX IF NOT EXISTS idx_notifications_created ON notifications (created_at DESC);
-- ── Notification Settings ──────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS notification_settings (
id INTEGER PRIMARY KEY DEFAULT 1,
settings JSONB NOT NULL DEFAULT '{
"email_notifications": true,
"push_notifications": true,
"notify_on_new_lead": true,
"notify_on_new_invoice": true,
"notify_on_overdue_invoice": true,
"notify_on_new_ticket": true,
"notify_on_ticket_assigned": true,
"notify_on_new_employee": true,
"notify_on_contract_ending": true,
"daily_summary": true,
"weekly_summary": true
}',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
INSERT INTO notification_settings (id) VALUES (1) ON CONFLICT (id) DO NOTHING;
-- ── Module Settings ────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS module_settings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
module TEXT NOT NULL UNIQUE, -- 'crm'|'billing'|'ledger'|'support'|'hr'|'mail'|'automations'
settings JSONB NOT NULL DEFAULT '{}',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Insert default settings for each module
INSERT INTO module_settings (module, settings) VALUES
('crm', '{
"auto_convert_leads": false,
"lead_assignment": "manual",
"default_customer_type": "company",
"require_org_nr": true
}'),
('billing', '{
"default_payment_terms": 30,
"default_vat_rate": 25,
"invoice_prefix": "F-",
"reminder_fee": 60,
"interest_rate": 8
}'),
('ledger', '{
"fiscal_year_start": "01-01",
"base_currency": "SEK",
"auto_reconcile": false,
"require_approval": true
}'),
('support', '{
"auto_assign": false,
"default_priority": "medium",
"sla_response_hours": 24,
"sla_resolution_hours": 72
}'),
('hr', '{
"probation_months": 6,
"vacation_days": 25,
"sick_days": 14,
"notice_period_months": 3
}'),
('mail', '{
"auto_create_leads": true,
"forward_to_support": false,
"archive_after_days": 90
}'),
('automations', '{
"max_retries": 3,
"retry_interval_minutes": 60,
"log_retention_days": 30
}')
ON CONFLICT (module) DO NOTHING;
-- ── Scheduled Reports ──────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS scheduled_reports (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
report_type TEXT NOT NULL,
frequency TEXT NOT NULL, -- 'daily'|'weekly'|'monthly'|'quarterly'
recipients TEXT[] NOT NULL DEFAULT '{}',
last_run_at TIMESTAMPTZ,
next_run_at TIMESTAMPTZ,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- ── Report History ─────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS report_history (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
report_name TEXT NOT NULL,
report_type TEXT NOT NULL,
parameters JSONB NOT NULL DEFAULT '{}',
result_url TEXT,
status TEXT NOT NULL DEFAULT 'completed', -- 'running'|'completed'|'failed'
error_message TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
completed_at TIMESTAMPTZ
);
CREATE INDEX IF NOT EXISTS idx_report_history_type ON report_history (report_type);
CREATE INDEX IF NOT EXISTS idx_report_history_created ON report_history (created_at DESC);