dba595fd2d
Migration 20260511000001 adiciona campo 'notes' (Observacao, textarea, sort_order=30) como campo extra default no commitment determinado 'Sessao'. Antes Sessao era a unica excecao entre os nativos — Leitura/Supervisao/ Aula/Analise ja tinham. Padroniza pra que a Observacao da sessao siga o mesmo mecanismo de extra_fields dos outros, e o frontend remova a textarea hardcoded do AgendaEventDialog (proximo commit). Backfill: insere 'notes' em TODOS os commitments Sessao ja existentes (idempotente). Forward-fix: substitui a funcao seed_determined_commitments incluindo o bloco de Sessao + 'notes' pra novos tenants. Schema regenerado via db.cjs schema-export pra refletir o estado pos- migration. agenciapsi-db-dashboard.html regenerado pelo generate-dashboard.cjs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
137 lines
5.3 KiB
SQL
137 lines
5.3 KiB
SQL
-- Tables: Addons / Créditos
|
|
-- Gerado automaticamente em 2026-05-11T16:53:50.927Z
|
|
-- Total: 7
|
|
|
|
CREATE TABLE public.addon_credits (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
tenant_id uuid NOT NULL,
|
|
owner_id uuid,
|
|
addon_type text NOT NULL,
|
|
balance integer DEFAULT 0 NOT NULL,
|
|
total_purchased integer DEFAULT 0 NOT NULL,
|
|
total_consumed integer DEFAULT 0 NOT NULL,
|
|
low_balance_threshold integer DEFAULT 10,
|
|
low_balance_notified boolean DEFAULT false,
|
|
daily_limit integer,
|
|
hourly_limit integer,
|
|
daily_used integer DEFAULT 0,
|
|
hourly_used integer DEFAULT 0,
|
|
daily_reset_at timestamp with time zone,
|
|
hourly_reset_at timestamp with time zone,
|
|
from_number_override text,
|
|
expires_at timestamp with time zone,
|
|
is_active boolean DEFAULT true,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now(),
|
|
CONSTRAINT addon_credits_balance_nonneg_chk CHECK ((balance >= 0)),
|
|
CONSTRAINT addon_credits_consumed_nonneg_chk CHECK ((total_consumed >= 0)),
|
|
CONSTRAINT addon_credits_purchased_nonneg_chk CHECK ((total_purchased >= 0))
|
|
);
|
|
|
|
CREATE TABLE public.addon_products (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
slug text NOT NULL,
|
|
name text NOT NULL,
|
|
description text,
|
|
addon_type text NOT NULL,
|
|
icon text DEFAULT 'pi pi-box'::text,
|
|
credits_amount integer DEFAULT 0,
|
|
price_cents integer DEFAULT 0 NOT NULL,
|
|
currency text DEFAULT 'BRL'::text,
|
|
is_active boolean DEFAULT true,
|
|
is_visible boolean DEFAULT true,
|
|
sort_order integer DEFAULT 0,
|
|
metadata jsonb DEFAULT '{}'::jsonb,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now(),
|
|
deleted_at timestamp with time zone
|
|
);
|
|
|
|
CREATE TABLE public.addon_transactions (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
tenant_id uuid NOT NULL,
|
|
owner_id uuid,
|
|
addon_type text NOT NULL,
|
|
type text NOT NULL,
|
|
amount integer NOT NULL,
|
|
balance_before integer DEFAULT 0 NOT NULL,
|
|
balance_after integer DEFAULT 0 NOT NULL,
|
|
product_id uuid,
|
|
queue_id uuid,
|
|
description text,
|
|
admin_user_id uuid,
|
|
payment_method text,
|
|
payment_reference text,
|
|
price_cents integer,
|
|
currency text DEFAULT 'BRL'::text,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
metadata jsonb DEFAULT '{}'::jsonb
|
|
);
|
|
|
|
CREATE TABLE public.whatsapp_credit_packages (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
name text NOT NULL,
|
|
description text,
|
|
credits integer NOT NULL,
|
|
price_brl numeric(10,2) NOT NULL,
|
|
is_active boolean DEFAULT true NOT NULL,
|
|
is_featured boolean DEFAULT false NOT NULL,
|
|
"position" integer DEFAULT 100 NOT NULL,
|
|
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
CONSTRAINT whatsapp_credit_packages_credits_check CHECK ((credits > 0)),
|
|
CONSTRAINT whatsapp_credit_packages_name_check CHECK (((length(name) > 0) AND (length(name) <= 100))),
|
|
CONSTRAINT whatsapp_credit_packages_price_brl_check CHECK ((price_brl > (0)::numeric))
|
|
);
|
|
|
|
CREATE TABLE public.whatsapp_credit_purchases (
|
|
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
tenant_id uuid NOT NULL,
|
|
package_id uuid,
|
|
package_name text NOT NULL,
|
|
credits integer NOT NULL,
|
|
amount_brl numeric(10,2) NOT NULL,
|
|
status text DEFAULT 'pending'::text NOT NULL,
|
|
asaas_customer_id text,
|
|
asaas_payment_id text,
|
|
asaas_payment_link text,
|
|
asaas_pix_qrcode text,
|
|
asaas_pix_copy_paste text,
|
|
paid_at timestamp with time zone,
|
|
expires_at timestamp with time zone,
|
|
failed_at timestamp with time zone,
|
|
created_by uuid,
|
|
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
CONSTRAINT whatsapp_credit_purchases_amount_brl_check CHECK ((amount_brl > (0)::numeric)),
|
|
CONSTRAINT whatsapp_credit_purchases_credits_check CHECK ((credits > 0)),
|
|
CONSTRAINT whatsapp_credit_purchases_status_check CHECK ((status = ANY (ARRAY['pending'::text, 'paid'::text, 'failed'::text, 'expired'::text, 'refunded'::text, 'cancelled'::text])))
|
|
);
|
|
|
|
CREATE TABLE public.whatsapp_credits_balance (
|
|
tenant_id uuid NOT NULL,
|
|
balance integer DEFAULT 0 NOT NULL,
|
|
lifetime_purchased integer DEFAULT 0 NOT NULL,
|
|
lifetime_used integer DEFAULT 0 NOT NULL,
|
|
low_balance_threshold integer DEFAULT 20 NOT NULL,
|
|
low_balance_alerted_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
CONSTRAINT whatsapp_credits_balance_balance_check CHECK ((balance >= 0)),
|
|
CONSTRAINT whatsapp_credits_balance_low_balance_threshold_check CHECK ((low_balance_threshold >= 0))
|
|
);
|
|
|
|
CREATE TABLE public.whatsapp_credits_transactions (
|
|
id bigint NOT NULL,
|
|
tenant_id uuid NOT NULL,
|
|
kind text NOT NULL,
|
|
amount integer NOT NULL,
|
|
balance_after integer NOT NULL,
|
|
conversation_message_id bigint,
|
|
purchase_id uuid,
|
|
admin_id uuid,
|
|
note text,
|
|
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
CONSTRAINT whatsapp_credits_transactions_kind_check CHECK ((kind = ANY (ARRAY['purchase'::text, 'usage'::text, 'topup_manual'::text, 'refund'::text, 'adjustment'::text])))
|
|
);
|