Files
agenciapsilmno/database-novo/schema/04_tables/addons_cr_ditos.sql
T
Leonardo dba595fd2d db: migration session_default_notes_field + schema regenerado
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>
2026-05-11 16:56:59 -03:00

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])))
);