-- Tables: Addons / Créditos -- Gerado automaticamente em 2026-04-21T23:16:34.955Z -- 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]))) );