-- Tables: outros -- Gerado automaticamente em 2026-04-21T23:16:34.954Z -- Total: 17 CREATE TABLE public._db_migrations ( id integer NOT NULL, filename text NOT NULL, hash text NOT NULL, category text DEFAULT 'migration'::text NOT NULL, applied_at timestamp with time zone DEFAULT now() NOT NULL ); CREATE TABLE public.audit_logs ( id bigint NOT NULL, tenant_id uuid NOT NULL, user_id uuid, entity_type text NOT NULL, entity_id text, action text NOT NULL, old_values jsonb, new_values jsonb, changed_fields text[], metadata jsonb DEFAULT '{}'::jsonb NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT audit_logs_action_check CHECK ((action = ANY (ARRAY['insert'::text, 'update'::text, 'delete'::text]))) ); CREATE TABLE public.dev_auditoria_items ( id bigint NOT NULL, categoria character varying(120), titulo text NOT NULL, descricao_problema text, solucao text, severidade character varying(20), status character varying(20) DEFAULT 'aberto'::character varying NOT NULL, resolvido_em date, sessao_resolucao character varying(160), arquivo_afetado text, tags text[] DEFAULT '{}'::text[], created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, ordem integer DEFAULT 0 NOT NULL, CONSTRAINT dev_auditoria_items_severidade_check CHECK (((severidade IS NULL) OR ((severidade)::text = ANY ((ARRAY['critico'::character varying, 'alto'::character varying, 'medio'::character varying, 'baixo'::character varying])::text[])))), CONSTRAINT dev_auditoria_items_status_check CHECK (((status)::text = ANY ((ARRAY['aberto'::character varying, 'em_analise'::character varying, 'resolvido'::character varying, 'wontfix'::character varying, 'duplicado'::character varying])::text[]))) ); CREATE TABLE public.dev_comparison_competitor_status ( id bigint NOT NULL, comparison_id bigint NOT NULL, competitor_id bigint NOT NULL, status character varying(20) DEFAULT 'a_definir'::character varying NOT NULL, nota text, fonte character varying(20), created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT dev_comparison_competitor_status_fonte_check CHECK (((fonte IS NULL) OR ((fonte)::text = ANY ((ARRAY['fetched'::character varying, 'observacao'::character varying, 'publico'::character varying, 'hipotese'::character varying])::text[])))), CONSTRAINT dev_comparison_competitor_status_status_check CHECK (((status)::text = ANY ((ARRAY['tem'::character varying, 'parcial'::character varying, 'gap'::character varying, 'na'::character varying, 'a_definir'::character varying])::text[]))) ); CREATE TABLE public.dev_comparison_matrix ( id bigint NOT NULL, dominio character varying(120), feature text NOT NULL, nosso_status character varying(20) DEFAULT 'a_definir'::character varying NOT NULL, nossa_nota text, importancia character varying(20), ordem integer DEFAULT 0 NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT dev_comparison_matrix_importancia_check CHECK (((importancia IS NULL) OR ((importancia)::text = ANY ((ARRAY['alta'::character varying, 'media'::character varying, 'baixa'::character varying])::text[])))), CONSTRAINT dev_comparison_matrix_nosso_status_check CHECK (((nosso_status)::text = ANY ((ARRAY['tem'::character varying, 'parcial'::character varying, 'gap'::character varying, 'na'::character varying, 'a_definir'::character varying])::text[]))) ); CREATE TABLE public.dev_competitor_features ( id bigint NOT NULL, competitor_id bigint NOT NULL, categoria character varying(120), nome text NOT NULL, descricao text, fonte character varying(20) DEFAULT 'publico'::character varying NOT NULL, fonte_url text, data_fonte date, destaque boolean DEFAULT false NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, ordem integer DEFAULT 0 NOT NULL, CONSTRAINT dev_competitor_features_fonte_check CHECK (((fonte)::text = ANY ((ARRAY['fetched'::character varying, 'observacao'::character varying, 'publico'::character varying, 'hipotese'::character varying])::text[]))) ); CREATE TABLE public.dev_competitors ( id bigint NOT NULL, slug character varying(80) NOT NULL, nome character varying(160) NOT NULL, pais character varying(40), foco character varying(160), pricing text, posicionamento text, url text, ultima_pesquisa date, notas text, ativo boolean DEFAULT true NOT NULL, ordem integer DEFAULT 0 NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL ); CREATE TABLE public.dev_generation_log ( id bigint NOT NULL, tipo character varying(40) NOT NULL, comando text, sucesso boolean DEFAULT false NOT NULL, stdout text, stderr text, duration_ms integer, metadata jsonb DEFAULT '{}'::jsonb, trigger_user_id uuid, created_at timestamp with time zone DEFAULT now() NOT NULL ); CREATE TABLE public.dev_roadmap_items ( id bigint NOT NULL, phase_id bigint NOT NULL, numero integer, bloco character varying(160), feature text NOT NULL, descricao text, esforco character varying(4), prioridade character varying(20), status character varying(20) DEFAULT 'pendente'::character varying NOT NULL, notas text, assignee character varying(120), data_inicio date, data_conclusao date, ordem integer DEFAULT 0 NOT NULL, tags text[] DEFAULT '{}'::text[], created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT dev_roadmap_items_esforco_check CHECK (((esforco IS NULL) OR ((esforco)::text = ANY ((ARRAY['S'::character varying, 'M'::character varying, 'L'::character varying, 'XL'::character varying])::text[])))), CONSTRAINT dev_roadmap_items_prioridade_check CHECK (((prioridade IS NULL) OR ((prioridade)::text = ANY ((ARRAY['bloqueador'::character varying, 'alta'::character varying, 'media'::character varying, 'diferencial'::character varying])::text[])))), CONSTRAINT dev_roadmap_items_status_check CHECK (((status)::text = ANY ((ARRAY['pendente'::character varying, 'em_andamento'::character varying, 'concluido'::character varying, 'cancelado'::character varying, 'bloqueado'::character varying])::text[]))) ); CREATE TABLE public.dev_roadmap_phases ( id bigint NOT NULL, numero integer NOT NULL, nome character varying(160) NOT NULL, objetivo text, timeline_sugerida character varying(160), criterio_saida text, status character varying(20) DEFAULT 'planejada'::character varying NOT NULL, data_inicio date, data_fim date, ordem integer DEFAULT 0 NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT dev_roadmap_phases_status_check CHECK (((status)::text = ANY ((ARRAY['planejada'::character varying, 'em_andamento'::character varying, 'concluida'::character varying, 'arquivada'::character varying])::text[]))) ); CREATE TABLE public.dev_test_items ( id bigint NOT NULL, area character varying(80) NOT NULL, categoria character varying(120), titulo text NOT NULL, arquivo text, descricao text, total_tests integer DEFAULT 0, passing integer DEFAULT 0, failing integer DEFAULT 0, skipped integer DEFAULT 0, cobertura_pct numeric(5,2), status character varying(20) DEFAULT 'ok'::character varying NOT NULL, last_run_at timestamp with time zone, sessao_criacao character varying(160), notas text, tags text[] DEFAULT '{}'::text[], ordem integer DEFAULT 0 NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT dev_test_items_status_check CHECK (((status)::text = ANY ((ARRAY['ok'::character varying, 'falhando'::character varying, 'pendente'::character varying, 'obsoleto'::character varying, 'a_escrever'::character varying])::text[]))) ); CREATE TABLE public.dev_verificacoes_items ( id bigint NOT NULL, area character varying(80) NOT NULL, categoria character varying(120), titulo text NOT NULL, descricao text, resultado text, acao_sugerida text, severidade character varying(20), status character varying(20) DEFAULT 'pendente'::character varying NOT NULL, verificado_em date, sessao_verificacao character varying(160), arquivo_afetado text, auditoria_item_id bigint, tags text[] DEFAULT '{}'::text[], ordem integer DEFAULT 0 NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT dev_verificacoes_items_severidade_check CHECK (((severidade IS NULL) OR ((severidade)::text = ANY ((ARRAY['critico'::character varying, 'alto'::character varying, 'medio'::character varying, 'baixo'::character varying])::text[])))), CONSTRAINT dev_verificacoes_items_status_check CHECK (((status)::text = ANY ((ARRAY['pendente'::character varying, 'verificando'::character varying, 'ok'::character varying, 'problema'::character varying, 'corrigido'::character varying, 'wontfix'::character varying])::text[]))) ); CREATE TABLE public.math_challenges ( id uuid DEFAULT gen_random_uuid() NOT NULL, question text NOT NULL, answer integer NOT NULL, used boolean DEFAULT false NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, expires_at timestamp with time zone DEFAULT (now() + '00:05:00'::interval) NOT NULL ); CREATE TABLE public.patient_invite_attempts ( id uuid DEFAULT gen_random_uuid() NOT NULL, token text NOT NULL, ok boolean NOT NULL, error_code text, error_msg text, client_info text, owner_id uuid, tenant_id uuid, created_at timestamp with time zone DEFAULT now() NOT NULL ); CREATE TABLE public.public_submission_attempts ( id uuid DEFAULT gen_random_uuid() NOT NULL, endpoint text NOT NULL, ip_hash text, success boolean NOT NULL, error_code text, error_msg text, blocked_by text, user_agent text, metadata jsonb, created_at timestamp with time zone DEFAULT now() NOT NULL ); CREATE TABLE public.saas_security_config ( id boolean DEFAULT true NOT NULL, honeypot_enabled boolean DEFAULT true NOT NULL, rate_limit_enabled boolean DEFAULT true NOT NULL, rate_limit_window_min integer DEFAULT 10 NOT NULL, rate_limit_max_attempts integer DEFAULT 5 NOT NULL, captcha_after_failures integer DEFAULT 3 NOT NULL, captcha_required_globally boolean DEFAULT false NOT NULL, block_duration_min integer DEFAULT 30 NOT NULL, captcha_required_window_min integer DEFAULT 60 NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, updated_by uuid, CONSTRAINT saas_security_config_singleton CHECK ((id = true)) ); CREATE TABLE public.saas_twilio_config ( id boolean DEFAULT true NOT NULL, account_sid text, whatsapp_webhook_url text, usd_brl_rate numeric(10,4) DEFAULT 5.5 NOT NULL, margin_multiplier numeric(10,4) DEFAULT 1.4 NOT NULL, notes text, updated_at timestamp with time zone DEFAULT now() NOT NULL, updated_by uuid, CONSTRAINT saas_twilio_config_mult_chk CHECK (((margin_multiplier >= (1)::numeric) AND (margin_multiplier <= (10)::numeric))), CONSTRAINT saas_twilio_config_rate_chk CHECK (((usd_brl_rate > (0)::numeric) AND (usd_brl_rate < (100)::numeric))), CONSTRAINT saas_twilio_config_sid_chk CHECK (((account_sid IS NULL) OR (account_sid ~ '^AC[a-zA-Z0-9]{32}$'::text))), CONSTRAINT saas_twilio_config_singleton CHECK ((id = true)), CONSTRAINT saas_twilio_config_url_chk CHECK (((whatsapp_webhook_url IS NULL) OR (whatsapp_webhook_url ~ '^https?://'::text))) );