INCISIONAdmin

Database Management

genesis

Database StatusInitialized
Manage the database schema for this tenant's Supabase project

Schema Version

40

Initialized

1/6/2026, 12:46:44 PM

Last Migration

10/14/2026, 2:14:43 PM

Migration History
Record of all schema migrations applied to this database

v1: 001_initial_schema (validated)

Applied: 1/6/2026, 12:46:44 PM

completed

v2: 002_add_vendor_ratings

Applied: 1/15/2026, 1:16:51 PM

completed

v3: 003_add_agile_projects

Applied: 1/15/2026, 1:17:04 PM

completed

v4: 004_add_agile_releases

Applied: 1/15/2026, 1:17:22 PM

completed

v5: 005_fix_profile_trigger

Applied: 1/15/2026, 1:17:30 PM

completed

v6: 006_fix_audit_logs

Applied: 1/15/2026, 1:17:36 PM

completed

v7: 007_add_feature_flags

Applied: 10/14/2026, 2:01:26 PM

completed

v8: 008_add_target_location

Applied: 10/14/2026, 2:01:43 PM

completed

v9: 009_meeting_reports_complete

Applied: 10/14/2026, 2:01:55 PM

completed

v10: 010_add_vendor_management_columns

Applied: 10/14/2026, 2:02:06 PM

completed

v11: 011_add_vendor_portal_columns

Applied: 10/14/2026, 2:02:20 PM

completed

v12: 012_add_qa_feature_columns

Applied: 10/14/2026, 2:02:32 PM

completed

v13: 013_add_qa_notification_columns

Applied: 10/14/2026, 2:02:43 PM

completed

v14: 014_add_milestones

Applied: 10/14/2026, 2:03:00 PM

completed

v15: 015_add_task_relations

Applied: 10/14/2026, 2:03:29 PM

completed

v16: 016_add_qa_answer_approval

Applied: 10/14/2026, 2:03:40 PM

completed

v17: 017_add_qa_consistency_check

Applied: 10/14/2026, 2:03:51 PM

completed

v18: 018_add_meeting_report_hero_images

Applied: 10/14/2026, 2:08:16 PM

completed

v19: 019_align_tenant_schema_with_app

Applied: 10/14/2026, 2:08:41 PM

completed

v20: 020_full_align_with_reference

Applied: 10/14/2026, 2:08:55 PM

completed

v21: 021_add_configurable_options

Applied: 10/14/2026, 2:09:07 PM

completed

v22: 022_tender_parity_golf

Applied: 10/14/2026, 2:09:18 PM

completed

v23: 023_tender_aggregation_trigger

Applied: 10/14/2026, 2:09:30 PM

completed

v24: 024_add_design_v2_flag

Applied: 10/14/2026, 2:09:40 PM

completed

v25: 025_add_rfq_quotation

Applied: 10/14/2026, 2:09:52 PM

completed

v26: 026_add_rfq_tender_type

Applied: 10/14/2026, 2:10:03 PM

completed

v27: 027_rfq_rev03_phase_a

Applied: 10/14/2026, 2:10:14 PM

completed

v28: 028_rfq_plants

Applied: 10/14/2026, 2:10:26 PM

completed

v29: 029_rfq_documents

Applied: 10/14/2026, 2:10:42 PM

completed

v30: 030_rfq_suppliers

Applied: 10/14/2026, 2:10:52 PM

completed

v31: 031_rfq_collaboration

Applied: 10/14/2026, 2:11:03 PM

completed

v32: 032_rfq_activity

Applied: 10/14/2026, 2:11:15 PM

completed

v33: 033_rfq_negotiation

Applied: 10/14/2026, 2:11:26 PM

completed

v34: 034_rfq_awarding

Applied: 10/14/2026, 2:11:39 PM

completed

v35: 035_rfq_realtime_quotes

Applied: 10/14/2026, 2:11:53 PM

completed

v36: 036_allow_excluded_participation_status

Applied: 10/14/2026, 2:12:05 PM

completed

v37: 037_project_html_documents

Applied: 10/14/2026, 2:12:28 PM

completed

v38: 038_fix_report_translations

Applied: 10/14/2026, 2:14:13 PM

completed

v39: 039_workshop_scorecard

Applied: 10/14/2026, 2:14:25 PM

completed

v40: 040_security_hardening

Applied: 10/14/2026, 2:14:43 PM

completed
Initial Schema SQLDownload Full SQL
Preview of the SQL that will be executed to initialize the tenant database
-- INCISION Tenant Database Initial Schema
-- Version: 1
-- This script creates all required tables for a new tenant database

-- =====================================================
-- EXTENSIONS
-- =====================================================
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

-- =====================================================
-- ENUM TYPES
-- =====================================================

-- User role enum
DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'user_role') THEN
        CREATE TYPE user_role AS ENUM ('admin', 'manager', 'viewer', 'vendor');
    END IF;
END $$;

-- Cost types
DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'cost_type') THEN
        CREATE TYPE cost_type AS ENUM ('one_time', 'recurring', 'variable');
    END IF;
END $$;

DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'cost_frequency') THEN
        CREATE TYPE cost_frequency AS ENUM ('one_time', 'monthly', 'quarterly', 'annually');
    END IF;
END $$;

-- RAID log enums
DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'raid_category') THEN
        CREATE TYPE raid_category AS ENUM ('technical', 'operational', 'financial', 'legal', 'resource', 'external', 'strategic');
    END IF;
END $$;

DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'risk_severity') THEN
        CREATE TYPE risk_severity AS ENUM ('critical', 'high', 'medium', 'low');
    END IF;
END $$;

DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'risk_likelihood') THEN
        CREATE TYPE risk_likelihood AS ENUM ('very_high', 'high', 'medium', 'low', 'very_low');
    END IF;
END $$;

DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'risk_impact') THEN
        CREATE TYPE risk_impact AS ENUM ('critical', 'high', 'medium', 'low', 'minimal');
    END IF;
END $$;

DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'raid_status') THEN
        CREATE TYPE raid_status AS ENUM ('open', 'in_progress', 'mitigated', 'resolved', 'closed', 'accepted');
    END IF;
END $$;

-- Q&A enums
DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'qa_question_status') THEN
        CREATE TYPE qa_question_status AS ENUM ('pending', 'assigned', 'draft_answer', 'answered', 'published', 'rejected', 'deferred');
    END IF;
END $$;

DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'qa_question_category') THEN
        CREATE TYPE qa_question_category AS ENUM ('technical', 'commercial', 'legal', 'compliance', 'general');
    END IF;
END $$;

DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'qa_question_priority') THEN
        CREATE TYPE qa_question_priority AS ENUM ('low', 'normal', 'high', 'urgent');
    END IF;
END $$;

-- =====================================================
-- CORE TABLES
-- =====================================================

-- Profiles table (extends auth.users)
CREATE TABLE IF NOT EXISTS public.profiles (
  id UUID PRIMARY KEY REFERENCES auth.users(id) ON DELETE CASCADE,
  email TEXT NOT NULL,
  full_name TEXT,
  role user_role DEFAULT 'viewer',
  bio TEXT,
  permissions JSONB DEFAULT '{}',
  avatar_url TEXT,
  phone_number TEXT,
  department TEXT,
  job_title TEXT,
  is_approved BOOLEAN DEFAULT false,
  is_suspended BOOLEAN DEFAULT false,
  is_archived BOOLEAN DEFAULT false,
  must_change_password BOOLEAN DEFAULT false,
  approved_by UUID REFERENCES auth.users(id),
  approved_at TIMESTAMPTZ,
  theme_preference TEXT DEFAULT 'light',
  email_notifications JSONB DEFAULT '{"qa_new_question": true, "qa_answer_published": true, "qa_new_published": true}'::jsonb,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Feature flags table
CREATE TABLE IF NOT EXISTS public.feature_flags (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  feature_name TEXT NOT NULL UNIQUE,
  is_enabled BOOLEAN DEFAULT false,
  description TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Projects table
CREATE TABLE IF NOT EXISTS public.projects (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  name TEXT NOT NULL,
  description TEXT,
  status TEXT DEFAULT 'active' CHECK (status IN ('active', 'on_hold', 'completed', 'archived')),
  start_date DATE,
  end_date DATE,
  owner_id UUID REFERENCES public.profiles(id),
  is_archived BOOLEAN DEFAULT false,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- TSA Services table
CREATE TABLE IF NOT EXISTS public.tsa_services (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  service_id TEXT UNIQUE NOT NULL,
  service_code TEXT,
  service_name TEXT NOT NULL,
  description TEXT,
  category TEXT,
  provider TEXT,
  recipient TEXT,
  service_owner TEXT,
  responsible_person TEXT,
  contact_person TEXT,
  contact_email TEXT,
  service_level_agreement TEXT,
  monthly_cost DECIMAL(12, 2) DEFAULT 0,
  status 

... (truncated)
Quick Links
Access the tenant's Supabase dashboard