-- Tables: Financeiro -- Gerado automaticamente em 2026-04-17T12:23:05.228Z -- Total: 10 CREATE TABLE public.financial_records ( id uuid DEFAULT gen_random_uuid() NOT NULL, owner_id uuid NOT NULL, tenant_id uuid, type public.financial_record_type DEFAULT 'receita'::public.financial_record_type NOT NULL, amount numeric(10,2) NOT NULL, description text, category text, payment_method text, paid_at timestamp with time zone, due_date date, installments smallint DEFAULT 1, installment_number smallint DEFAULT 1, installment_group uuid, agenda_evento_id uuid, patient_id uuid, clinic_fee_pct numeric(5,2) DEFAULT 0, clinic_fee_amount numeric(10,2) DEFAULT 0, net_amount numeric(10,2) GENERATED ALWAYS AS ((amount - clinic_fee_amount)) STORED, insurance_plan_id uuid, notes text, tags text[], created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, deleted_at timestamp with time zone, discount_amount numeric(10,2) DEFAULT 0 NOT NULL, final_amount numeric(10,2) DEFAULT 0 NOT NULL, status text DEFAULT 'pending'::text NOT NULL, category_id uuid, CONSTRAINT financial_records_amount_check CHECK ((amount >= (0)::numeric)), CONSTRAINT financial_records_clinic_fee_amount_check CHECK ((clinic_fee_amount >= (0)::numeric)), CONSTRAINT financial_records_clinic_fee_pct_check CHECK (((clinic_fee_pct >= (0)::numeric) AND (clinic_fee_pct <= (100)::numeric))), CONSTRAINT financial_records_discount_amount_check CHECK ((discount_amount >= (0)::numeric)), CONSTRAINT financial_records_final_amount_check CHECK ((final_amount >= (0)::numeric)), CONSTRAINT financial_records_installments_check CHECK ((installments >= 1)), CONSTRAINT financial_records_status_check CHECK ((status = ANY (ARRAY['pending'::text, 'paid'::text, 'partial'::text, 'overdue'::text, 'cancelled'::text, 'refunded'::text]))) ); CREATE TABLE public.therapist_payouts ( id uuid DEFAULT gen_random_uuid() NOT NULL, owner_id uuid NOT NULL, tenant_id uuid NOT NULL, period_start date NOT NULL, period_end date NOT NULL, total_sessions integer DEFAULT 0 NOT NULL, gross_amount numeric(10,2) DEFAULT 0 NOT NULL, clinic_fee_total numeric(10,2) DEFAULT 0 NOT NULL, net_amount numeric(10,2) DEFAULT 0 NOT NULL, status text DEFAULT 'pending'::text NOT NULL, paid_at timestamp with time zone, notes text, created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT therapist_payouts_clinic_fee_total_check CHECK ((clinic_fee_total >= (0)::numeric)), CONSTRAINT therapist_payouts_gross_amount_check CHECK ((gross_amount >= (0)::numeric)), CONSTRAINT therapist_payouts_net_amount_check CHECK ((net_amount >= (0)::numeric)), CONSTRAINT therapist_payouts_period_chk CHECK ((period_end >= period_start)), CONSTRAINT therapist_payouts_status_check CHECK ((status = ANY (ARRAY['pending'::text, 'paid'::text, 'cancelled'::text]))) ); CREATE TABLE public.financial_categories ( id uuid DEFAULT gen_random_uuid() NOT NULL, user_id uuid NOT NULL, name text NOT NULL, type public.financial_record_type DEFAULT 'receita'::public.financial_record_type NOT NULL, color text DEFAULT '#6366f1'::text, icon text DEFAULT 'pi pi-tag'::text, sort_order integer DEFAULT 0, created_at timestamp with time zone DEFAULT now() NOT NULL ); CREATE TABLE public.financial_exceptions ( id uuid DEFAULT gen_random_uuid() NOT NULL, owner_id uuid, tenant_id uuid NOT NULL, exception_type text NOT NULL, charge_mode text NOT NULL, charge_value numeric(10,2), charge_pct numeric(5,2), min_hours_notice integer, created_at timestamp with time zone DEFAULT now(), updated_at timestamp with time zone DEFAULT now(), CONSTRAINT financial_exceptions_charge_chk CHECK ((charge_mode = ANY (ARRAY['none'::text, 'full'::text, 'fixed_fee'::text, 'percentage'::text]))), CONSTRAINT financial_exceptions_type_chk CHECK ((exception_type = ANY (ARRAY['patient_no_show'::text, 'patient_cancellation'::text, 'professional_cancellation'::text]))) ); CREATE TABLE public.payment_settings ( id uuid DEFAULT gen_random_uuid() NOT NULL, owner_id uuid NOT NULL, tenant_id uuid, pix_ativo boolean DEFAULT false NOT NULL, pix_tipo text DEFAULT 'cpf'::text NOT NULL, pix_chave text DEFAULT ''::text NOT NULL, pix_nome_titular text DEFAULT ''::text NOT NULL, deposito_ativo boolean DEFAULT false NOT NULL, deposito_banco text DEFAULT ''::text NOT NULL, deposito_agencia text DEFAULT ''::text NOT NULL, deposito_conta text DEFAULT ''::text NOT NULL, deposito_tipo_conta text DEFAULT 'corrente'::text NOT NULL, deposito_titular text DEFAULT ''::text NOT NULL, deposito_cpf_cnpj text DEFAULT ''::text NOT NULL, dinheiro_ativo boolean DEFAULT false NOT NULL, cartao_ativo boolean DEFAULT false NOT NULL, cartao_instrucao text DEFAULT ''::text NOT NULL, convenio_ativo boolean DEFAULT false NOT NULL, convenio_lista text DEFAULT ''::text NOT NULL, observacoes_pagamento text DEFAULT ''::text NOT NULL, created_at timestamp with time zone DEFAULT now(), updated_at timestamp with time zone DEFAULT now() ); CREATE TABLE public.professional_pricing ( id uuid DEFAULT gen_random_uuid() NOT NULL, owner_id uuid NOT NULL, tenant_id uuid NOT NULL, determined_commitment_id uuid, price numeric(10,2) NOT NULL, notes text, created_at timestamp with time zone DEFAULT now(), updated_at timestamp with time zone DEFAULT now() ); CREATE TABLE public.recurrence_exceptions ( id uuid DEFAULT gen_random_uuid() NOT NULL, recurrence_id uuid NOT NULL, tenant_id uuid NOT NULL, original_date date NOT NULL, type public.recurrence_exception_type NOT NULL, new_date date, new_start_time time without time zone, new_end_time time without time zone, modalidade text, observacoes text, titulo_custom text, extra_fields jsonb, reason text, agenda_evento_id uuid, created_at timestamp with time zone DEFAULT now() NOT NULL ); CREATE TABLE public.recurrence_rule_services ( id uuid DEFAULT gen_random_uuid() NOT NULL, rule_id uuid NOT NULL, service_id uuid NOT NULL, quantity integer DEFAULT 1 NOT NULL, unit_price numeric(10,2) NOT NULL, discount_pct numeric(5,2) DEFAULT 0, discount_flat numeric(10,2) DEFAULT 0, final_price numeric(10,2) NOT NULL, created_at timestamp with time zone DEFAULT now(), CONSTRAINT recurrence_rule_services_disc_flat_chk CHECK ((discount_flat >= (0)::numeric)), CONSTRAINT recurrence_rule_services_disc_pct_chk CHECK (((discount_pct >= (0)::numeric) AND (discount_pct <= (100)::numeric))), CONSTRAINT recurrence_rule_services_final_price_chk CHECK ((final_price >= (0)::numeric)), CONSTRAINT recurrence_rule_services_quantity_chk CHECK ((quantity > 0)) ); CREATE TABLE public.recurrence_rules ( id uuid DEFAULT gen_random_uuid() NOT NULL, tenant_id uuid NOT NULL, owner_id uuid NOT NULL, therapist_id uuid, patient_id uuid, determined_commitment_id uuid, type public.recurrence_type DEFAULT 'weekly'::public.recurrence_type NOT NULL, "interval" smallint DEFAULT 1 NOT NULL, weekdays smallint[] DEFAULT '{}'::smallint[] NOT NULL, start_time time without time zone NOT NULL, end_time time without time zone NOT NULL, timezone text DEFAULT 'America/Sao_Paulo'::text NOT NULL, duration_min smallint DEFAULT 50 NOT NULL, start_date date NOT NULL, end_date date, max_occurrences integer, open_ended boolean DEFAULT true NOT NULL, modalidade text DEFAULT 'presencial'::text, titulo_custom text, observacoes text, extra_fields jsonb, status text DEFAULT 'ativo'::text NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, price numeric(10,2), insurance_plan_id uuid, insurance_guide_number text, insurance_value numeric(10,2), insurance_plan_service_id uuid, CONSTRAINT recurrence_rules_dates_chk CHECK (((end_date IS NULL) OR (end_date >= start_date))), CONSTRAINT recurrence_rules_interval_chk CHECK (("interval" >= 1)), CONSTRAINT recurrence_rules_status_check CHECK ((status = ANY (ARRAY['ativo'::text, 'pausado'::text, 'cancelado'::text]))), CONSTRAINT recurrence_rules_times_chk CHECK ((end_time > start_time)) ); CREATE TABLE public.therapist_payout_records ( payout_id uuid NOT NULL, financial_record_id uuid NOT NULL );