Correcao Sidebar Classico e Rail, Correcao Layout, Ajuste de Breakpoint para Tailwind, Ajuste AppTopbar, Ajuste Menu PopOver, Recriado Paleta de Cores, Inserido algumas animações leves, Reajuste Cor items NOVOS da tabela, Drawer Ajuda Corrigido no Logout, Whatsapp, sms, email, recursos extras
This commit is contained in:
472
database-novo/schema/04_tables/agenda.sql
Normal file
472
database-novo/schema/04_tables/agenda.sql
Normal file
@@ -0,0 +1,472 @@
|
||||
-- =============================================================================
|
||||
-- AgenciaPsi — Tables — Agenda + Recorrências + Agendador Online
|
||||
-- =============================================================================
|
||||
-- agenda_bloqueios, agenda_configuracoes, agenda_eventos, agenda_excecoes,
|
||||
-- agenda_online_slots, agenda_regras_semanais, agenda_slots_bloqueados_semanais,
|
||||
-- agenda_slots_regras, recurrence_rules, recurrence_exceptions,
|
||||
-- recurrence_rule_services, agendador_configuracoes, agendador_solicitacoes
|
||||
-- =============================================================================
|
||||
|
||||
CREATE TABLE public.agenda_bloqueios (
|
||||
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
||||
owner_id uuid NOT NULL,
|
||||
tenant_id uuid,
|
||||
tipo text NOT NULL,
|
||||
titulo text NOT NULL,
|
||||
data_inicio date NOT NULL,
|
||||
data_fim date,
|
||||
hora_inicio time without time zone,
|
||||
hora_fim time without time zone,
|
||||
recorrente boolean DEFAULT false NOT NULL,
|
||||
dia_semana smallint,
|
||||
observacao text,
|
||||
origem text DEFAULT 'manual'::text NOT NULL,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
CONSTRAINT agenda_bloqueios_tipo_check CHECK ((tipo = ANY (ARRAY['feriado_nacional'::text, 'feriado_municipal'::text, 'bloqueio'::text])))
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.agenda_bloqueios OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: agenda_configuracoes; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
CREATE TABLE public.agenda_configuracoes (
|
||||
owner_id uuid NOT NULL,
|
||||
duracao_padrao_minutos integer DEFAULT 50 NOT NULL,
|
||||
intervalo_padrao_minutos integer DEFAULT 0 NOT NULL,
|
||||
timezone text DEFAULT 'America/Sao_Paulo'::text NOT NULL,
|
||||
usar_horario_admin_custom boolean DEFAULT false NOT NULL,
|
||||
admin_inicio_visualizacao time without time zone,
|
||||
admin_fim_visualizacao time without time zone,
|
||||
admin_slot_visual_minutos integer DEFAULT 30 NOT NULL,
|
||||
online_ativo boolean DEFAULT false NOT NULL,
|
||||
online_min_antecedencia_horas integer DEFAULT 24 NOT NULL,
|
||||
online_max_dias_futuro integer DEFAULT 60 NOT NULL,
|
||||
online_cancelar_ate_horas integer DEFAULT 12 NOT NULL,
|
||||
online_reagendar_ate_horas integer DEFAULT 12 NOT NULL,
|
||||
online_limite_agendamentos_futuros integer DEFAULT 1 NOT NULL,
|
||||
online_modo text DEFAULT 'automatico'::text NOT NULL,
|
||||
online_buffer_antes_min integer DEFAULT 0 NOT NULL,
|
||||
online_buffer_depois_min integer DEFAULT 0 NOT NULL,
|
||||
online_modalidade text DEFAULT 'ambos'::text NOT NULL,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
usar_granularidade_custom boolean DEFAULT false NOT NULL,
|
||||
granularidade_min integer,
|
||||
setup_concluido boolean DEFAULT false NOT NULL,
|
||||
setup_concluido_em timestamp with time zone,
|
||||
agenda_view_mode text DEFAULT 'full_24h'::text NOT NULL,
|
||||
agenda_custom_start time without time zone,
|
||||
agenda_custom_end time without time zone,
|
||||
session_duration_min integer DEFAULT 50 NOT NULL,
|
||||
session_break_min integer DEFAULT 10 NOT NULL,
|
||||
pausas_semanais jsonb DEFAULT '[]'::jsonb NOT NULL,
|
||||
setup_clinica_concluido boolean DEFAULT false NOT NULL,
|
||||
setup_clinica_concluido_em timestamp with time zone,
|
||||
tenant_id uuid,
|
||||
jornada_igual_todos boolean DEFAULT true,
|
||||
slot_mode text DEFAULT 'fixed'::text NOT NULL,
|
||||
CONSTRAINT agenda_configuracoes_admin_slot_visual_minutos_check CHECK ((admin_slot_visual_minutos = ANY (ARRAY[5, 10, 15, 20, 30, 60]))),
|
||||
CONSTRAINT agenda_configuracoes_check CHECK (((usar_horario_admin_custom = false) OR ((admin_inicio_visualizacao IS NOT NULL) AND (admin_fim_visualizacao IS NOT NULL) AND (admin_fim_visualizacao > admin_inicio_visualizacao)))),
|
||||
CONSTRAINT agenda_configuracoes_duracao_padrao_minutos_check CHECK (((duracao_padrao_minutos >= 10) AND (duracao_padrao_minutos <= 240))),
|
||||
CONSTRAINT agenda_configuracoes_granularidade_min_check CHECK (((granularidade_min IS NULL) OR (granularidade_min = ANY (ARRAY[5, 10, 15, 20, 30, 45, 50, 60])))),
|
||||
CONSTRAINT agenda_configuracoes_intervalo_padrao_minutos_check CHECK (((intervalo_padrao_minutos >= 0) AND (intervalo_padrao_minutos <= 120))),
|
||||
CONSTRAINT agenda_configuracoes_online_buffer_antes_min_check CHECK (((online_buffer_antes_min >= 0) AND (online_buffer_antes_min <= 120))),
|
||||
CONSTRAINT agenda_configuracoes_online_buffer_depois_min_check CHECK (((online_buffer_depois_min >= 0) AND (online_buffer_depois_min <= 120))),
|
||||
CONSTRAINT agenda_configuracoes_online_cancelar_ate_horas_check CHECK (((online_cancelar_ate_horas >= 0) AND (online_cancelar_ate_horas <= 720))),
|
||||
CONSTRAINT agenda_configuracoes_online_limite_agendamentos_futuros_check CHECK (((online_limite_agendamentos_futuros >= 1) AND (online_limite_agendamentos_futuros <= 10))),
|
||||
CONSTRAINT agenda_configuracoes_online_max_dias_futuro_check CHECK (((online_max_dias_futuro >= 1) AND (online_max_dias_futuro <= 365))),
|
||||
CONSTRAINT agenda_configuracoes_online_min_antecedencia_horas_check CHECK (((online_min_antecedencia_horas >= 0) AND (online_min_antecedencia_horas <= 720))),
|
||||
CONSTRAINT agenda_configuracoes_online_modalidade_check CHECK ((online_modalidade = ANY (ARRAY['online'::text, 'presencial'::text, 'ambos'::text]))),
|
||||
CONSTRAINT agenda_configuracoes_online_modo_check CHECK ((online_modo = ANY (ARRAY['automatico'::text, 'aprovacao'::text]))),
|
||||
CONSTRAINT agenda_configuracoes_online_reagendar_ate_horas_check CHECK (((online_reagendar_ate_horas >= 0) AND (online_reagendar_ate_horas <= 720))),
|
||||
CONSTRAINT agenda_configuracoes_slot_mode_chk CHECK ((slot_mode = ANY (ARRAY['fixed'::text, 'dynamic'::text]))),
|
||||
CONSTRAINT session_break_min_chk CHECK (((session_break_min >= 0) AND (session_break_min <= 60))),
|
||||
CONSTRAINT session_duration_min_chk CHECK (((session_duration_min >= 10) AND (session_duration_min <= 240)))
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.agenda_configuracoes OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: agenda_eventos; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
CREATE TABLE public.agenda_eventos (
|
||||
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
||||
owner_id uuid NOT NULL,
|
||||
tipo public.tipo_evento_agenda DEFAULT 'sessao'::public.tipo_evento_agenda NOT NULL,
|
||||
status public.status_evento_agenda DEFAULT 'agendado'::public.status_evento_agenda NOT NULL,
|
||||
titulo text,
|
||||
observacoes text,
|
||||
inicio_em timestamp with time zone NOT NULL,
|
||||
fim_em timestamp with time zone NOT NULL,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
terapeuta_id uuid,
|
||||
tenant_id uuid NOT NULL,
|
||||
visibility_scope text DEFAULT 'public'::text NOT NULL,
|
||||
mirror_of_event_id uuid,
|
||||
mirror_source text,
|
||||
patient_id uuid,
|
||||
determined_commitment_id uuid,
|
||||
link_online text,
|
||||
titulo_custom text,
|
||||
extra_fields jsonb,
|
||||
recurrence_id uuid,
|
||||
recurrence_date date,
|
||||
modalidade text DEFAULT 'presencial'::text,
|
||||
price numeric(10,2),
|
||||
billing_contract_id uuid,
|
||||
billed boolean DEFAULT false NOT NULL,
|
||||
services_customized boolean DEFAULT false NOT NULL,
|
||||
insurance_plan_id uuid,
|
||||
insurance_guide_number text,
|
||||
insurance_value numeric(10,2),
|
||||
insurance_plan_service_id uuid,
|
||||
CONSTRAINT agenda_eventos_check CHECK ((fim_em > inicio_em))
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.agenda_eventos OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: COLUMN agenda_eventos.price; Type: COMMENT; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.agenda_eventos.price IS 'Valor da sessão em BRL. Preenchido automaticamente pela tabela professional_pricing do profissional.';
|
||||
|
||||
|
||||
--
|
||||
-- Name: agenda_excecoes; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
CREATE TABLE public.agenda_excecoes (
|
||||
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
||||
owner_id uuid NOT NULL,
|
||||
data date NOT NULL,
|
||||
hora_inicio time without time zone,
|
||||
hora_fim time without time zone,
|
||||
tipo public.tipo_excecao_agenda NOT NULL,
|
||||
motivo text,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
status public.status_excecao_agenda DEFAULT 'ativo'::public.status_excecao_agenda NOT NULL,
|
||||
fonte text DEFAULT 'manual'::text NOT NULL,
|
||||
aplicavel_online boolean DEFAULT true NOT NULL,
|
||||
tenant_id uuid NOT NULL,
|
||||
CONSTRAINT agenda_excecoes_check CHECK ((((hora_inicio IS NULL) AND (hora_fim IS NULL)) OR ((hora_inicio IS NOT NULL) AND (hora_fim IS NOT NULL) AND (hora_fim > hora_inicio)))),
|
||||
CONSTRAINT agenda_excecoes_fonte_check CHECK ((fonte = ANY (ARRAY['manual'::text, 'feriado_google'::text, 'sistema'::text])))
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.agenda_excecoes OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: agenda_online_slots; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
CREATE TABLE public.agenda_online_slots (
|
||||
id bigint NOT NULL,
|
||||
owner_id uuid NOT NULL,
|
||||
weekday integer NOT NULL,
|
||||
"time" time without time zone NOT NULL,
|
||||
enabled boolean DEFAULT true NOT NULL,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
tenant_id uuid NOT NULL,
|
||||
CONSTRAINT agenda_online_slots_weekday_check CHECK ((weekday = ANY (ARRAY[0, 1, 2, 3, 4, 5, 6])))
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.agenda_online_slots OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: agenda_online_slots_id_seq; Type: SEQUENCE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.agenda_online_slots_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER SEQUENCE public.agenda_online_slots_id_seq OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: agenda_online_slots_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.agenda_online_slots_id_seq OWNED BY public.agenda_online_slots.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: agenda_regras_semanais; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
CREATE TABLE public.agenda_regras_semanais (
|
||||
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
||||
owner_id uuid NOT NULL,
|
||||
dia_semana smallint NOT NULL,
|
||||
hora_inicio time without time zone NOT NULL,
|
||||
hora_fim time without time zone NOT NULL,
|
||||
modalidade text DEFAULT 'ambos'::text NOT NULL,
|
||||
ativo boolean DEFAULT true NOT NULL,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
tenant_id uuid NOT NULL,
|
||||
CONSTRAINT agenda_regras_semanais_check CHECK ((hora_fim > hora_inicio)),
|
||||
CONSTRAINT agenda_regras_semanais_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6))),
|
||||
CONSTRAINT agenda_regras_semanais_modalidade_check CHECK (((modalidade = ANY (ARRAY['online'::text, 'presencial'::text, 'ambos'::text])) OR (modalidade IS NULL)))
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.agenda_regras_semanais OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: agenda_slots_bloqueados_semanais; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
CREATE TABLE public.agenda_slots_bloqueados_semanais (
|
||||
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
||||
owner_id uuid NOT NULL,
|
||||
dia_semana smallint NOT NULL,
|
||||
hora_inicio time without time zone NOT NULL,
|
||||
motivo text,
|
||||
ativo boolean DEFAULT true NOT NULL,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
tenant_id uuid NOT NULL,
|
||||
CONSTRAINT agenda_slots_bloqueados_semanais_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6)))
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.agenda_slots_bloqueados_semanais OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: agenda_slots_regras; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
CREATE TABLE public.agenda_slots_regras (
|
||||
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
||||
owner_id uuid NOT NULL,
|
||||
dia_semana smallint NOT NULL,
|
||||
passo_minutos integer NOT NULL,
|
||||
offset_minutos integer DEFAULT 0 NOT NULL,
|
||||
buffer_antes_min integer DEFAULT 0 NOT NULL,
|
||||
buffer_depois_min integer DEFAULT 0 NOT NULL,
|
||||
min_antecedencia_horas integer DEFAULT 0 NOT NULL,
|
||||
ativo boolean DEFAULT true NOT NULL,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
tenant_id uuid NOT NULL,
|
||||
CONSTRAINT agenda_slots_regras_buffer_antes_min_check CHECK (((buffer_antes_min >= 0) AND (buffer_antes_min <= 240))),
|
||||
CONSTRAINT agenda_slots_regras_buffer_depois_min_check CHECK (((buffer_depois_min >= 0) AND (buffer_depois_min <= 240))),
|
||||
CONSTRAINT agenda_slots_regras_dia_semana_check CHECK (((dia_semana >= 0) AND (dia_semana <= 6))),
|
||||
CONSTRAINT agenda_slots_regras_min_antecedencia_horas_check CHECK (((min_antecedencia_horas >= 0) AND (min_antecedencia_horas <= 720))),
|
||||
CONSTRAINT agenda_slots_regras_offset_minutos_check CHECK (((offset_minutos >= 0) AND (offset_minutos <= 55))),
|
||||
CONSTRAINT agenda_slots_regras_passo_minutos_check CHECK (((passo_minutos >= 5) AND (passo_minutos <= 240)))
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.agenda_slots_regras OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: agendador_configuracoes; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
|
||||
CREATE TABLE public.agendador_configuracoes (
|
||||
owner_id uuid NOT NULL,
|
||||
tenant_id uuid,
|
||||
ativo boolean DEFAULT false NOT NULL,
|
||||
link_slug text,
|
||||
imagem_fundo_url text,
|
||||
imagem_header_url text,
|
||||
logomarca_url text,
|
||||
cor_primaria text DEFAULT '#4b6bff'::text,
|
||||
nome_exibicao text,
|
||||
endereco text,
|
||||
botao_como_chegar_ativo boolean DEFAULT true NOT NULL,
|
||||
maps_url text,
|
||||
modo_aprovacao text DEFAULT 'aprovacao'::text NOT NULL,
|
||||
modalidade text DEFAULT 'presencial'::text NOT NULL,
|
||||
tipos_habilitados jsonb DEFAULT '["primeira", "retorno"]'::jsonb NOT NULL,
|
||||
duracao_sessao_min integer DEFAULT 50 NOT NULL,
|
||||
antecedencia_minima_horas integer DEFAULT 24 NOT NULL,
|
||||
prazo_resposta_horas integer DEFAULT 2 NOT NULL,
|
||||
reserva_horas integer DEFAULT 2 NOT NULL,
|
||||
pagamento_obrigatorio boolean DEFAULT false NOT NULL,
|
||||
pix_chave text,
|
||||
pix_countdown_minutos integer DEFAULT 20 NOT NULL,
|
||||
triagem_motivo boolean DEFAULT true NOT NULL,
|
||||
triagem_como_conheceu boolean DEFAULT false NOT NULL,
|
||||
verificacao_email boolean DEFAULT false NOT NULL,
|
||||
exigir_aceite_lgpd boolean DEFAULT true NOT NULL,
|
||||
mensagem_boas_vindas text,
|
||||
texto_como_se_preparar text,
|
||||
texto_termos_lgpd text,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
pagamento_modo text DEFAULT 'sem_pagamento'::text NOT NULL,
|
||||
pagamento_metodos_visiveis text[] DEFAULT '{}'::text[] NOT NULL,
|
||||
CONSTRAINT agendador_configuracoes_antecedencia_check CHECK (((antecedencia_minima_horas >= 0) AND (antecedencia_minima_horas <= 720))),
|
||||
CONSTRAINT agendador_configuracoes_duracao_check CHECK (((duracao_sessao_min >= 10) AND (duracao_sessao_min <= 240))),
|
||||
CONSTRAINT agendador_configuracoes_modalidade_check CHECK ((modalidade = ANY (ARRAY['presencial'::text, 'online'::text, 'ambos'::text]))),
|
||||
CONSTRAINT agendador_configuracoes_modo_check CHECK ((modo_aprovacao = ANY (ARRAY['automatico'::text, 'aprovacao'::text]))),
|
||||
CONSTRAINT agendador_configuracoes_pix_countdown_check CHECK (((pix_countdown_minutos >= 5) AND (pix_countdown_minutos <= 120))),
|
||||
CONSTRAINT agendador_configuracoes_prazo_check CHECK (((prazo_resposta_horas >= 1) AND (prazo_resposta_horas <= 72))),
|
||||
CONSTRAINT agendador_configuracoes_reserva_check CHECK (((reserva_horas >= 1) AND (reserva_horas <= 48)))
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.agendador_configuracoes OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: COLUMN agendador_configuracoes.pagamento_modo; Type: COMMENT; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.agendador_configuracoes.pagamento_modo IS 'sem_pagamento | pagar_na_hora | pix_antecipado';
|
||||
|
||||
|
||||
--
|
||||
-- Name: COLUMN agendador_configuracoes.pagamento_metodos_visiveis; Type: COMMENT; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.agendador_configuracoes.pagamento_metodos_visiveis IS 'Métodos exibidos ao paciente quando pagamento_modo = pagar_na_hora. Ex: {pix, deposito, dinheiro, cartao, convenio}';
|
||||
|
||||
|
||||
--
|
||||
-- Name: agendador_solicitacoes; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
CREATE TABLE public.agendador_solicitacoes (
|
||||
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
||||
owner_id uuid NOT NULL,
|
||||
tenant_id uuid,
|
||||
paciente_nome text NOT NULL,
|
||||
paciente_sobrenome text,
|
||||
paciente_email text NOT NULL,
|
||||
paciente_celular text,
|
||||
paciente_cpf text,
|
||||
tipo text NOT NULL,
|
||||
modalidade text NOT NULL,
|
||||
data_solicitada date NOT NULL,
|
||||
hora_solicitada time without time zone NOT NULL,
|
||||
reservado_ate timestamp with time zone,
|
||||
motivo text,
|
||||
como_conheceu text,
|
||||
pix_status text DEFAULT 'pendente'::text,
|
||||
pix_pago_em timestamp with time zone,
|
||||
status text DEFAULT 'pendente'::text NOT NULL,
|
||||
recusado_motivo text,
|
||||
autorizado_em timestamp with time zone,
|
||||
autorizado_por uuid,
|
||||
user_id uuid,
|
||||
patient_id uuid,
|
||||
evento_id uuid,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
CONSTRAINT agendador_sol_modalidade_check CHECK ((modalidade = ANY (ARRAY['presencial'::text, 'online'::text]))),
|
||||
CONSTRAINT agendador_sol_pix_check CHECK (((pix_status IS NULL) OR (pix_status = ANY (ARRAY['pendente'::text, 'pago'::text, 'expirado'::text])))),
|
||||
CONSTRAINT agendador_sol_status_check CHECK ((status = ANY (ARRAY['pendente'::text, 'autorizado'::text, 'recusado'::text, 'expirado'::text, 'convertido'::text]))),
|
||||
CONSTRAINT agendador_sol_tipo_check CHECK ((tipo = ANY (ARRAY['primeira'::text, 'retorno'::text, 'reagendar'::text])))
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.agendador_solicitacoes OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: billing_contracts; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
|
||||
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
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.recurrence_exceptions OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: recurrence_rule_services; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
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))
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.recurrence_rule_services OWNER TO supabase_admin;
|
||||
|
||||
--
|
||||
-- Name: recurrence_rules; Type: TABLE; Schema: public; Owner: supabase_admin
|
||||
--
|
||||
|
||||
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))
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user