Files
agenciapsilmno/database-novo/agenciapsi-db-dashboard.html

490 lines
85 KiB
HTML

<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AgenciaPsi — Database Dashboard</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;600&family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
:root {
--bg: #0b0d12;
--bg2: #111520;
--bg3: #181e2d;
--border: #1e2740;
--border2: #263050;
--text: #e2e8f8;
--text2: #7d8fb3;
--text3: #4a5a80;
--accent: #4f8cff;
--accent2: #6ee7b7;
--pk: #fbbf24;
--fk: #f472b6;
--c1: #4f8cff; /* SaaS */
--c2: #6ee7b7; /* Tenants */
--c3: #f472b6; /* Pacientes */
--c4: #fb923c; /* Agenda */
--c5: #a78bfa; /* Financeiro */
--c6: #34d399; /* Serviços */
--c7: #38bdf8; /* Notif */
--c8: #fbbf24; /* Email */
--c9: #94a3b8; /* Admin */
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: var(--bg);
color: var(--text);
font-family: 'Space Grotesk', sans-serif;
min-height: 100vh;
overflow-x: hidden;
}
/* ── TOP BAR ── */
.topbar {
position: sticky; top: 0; z-index: 100;
background: rgba(11,13,18,0.92);
backdrop-filter: blur(12px);
border-bottom: 1px solid var(--border);
padding: 0 28px;
height: 56px;
display: flex; align-items: center; gap: 24px;
}
.topbar-brand { font-weight: 700; font-size: 15px; color: var(--text); letter-spacing: -.3px; }
.topbar-brand span { color: var(--accent); }
.topbar-stats { display: flex; gap: 20px; margin-left: auto; }
.stat-pill {
display: flex; align-items: center; gap: 7px;
font-size: 12px; color: var(--text2);
background: var(--bg3); border: 1px solid var(--border);
border-radius: 20px; padding: 4px 12px;
}
.stat-pill strong { color: var(--text); font-size: 13px; }
.search-bar {
background: var(--bg3); border: 1px solid var(--border);
border-radius: 8px; padding: 6px 12px;
color: var(--text); font-family: 'Space Grotesk', sans-serif;
font-size: 13px; outline: none; width: 200px;
transition: border-color .2s, width .2s;
}
.search-bar:focus { border-color: var(--accent); width: 280px; }
.search-bar::placeholder { color: var(--text3); }
/* ── LAYOUT ── */
.layout { display: flex; height: calc(100vh - 56px); }
/* ── SIDEBAR ── */
.sidebar {
width: 240px; flex-shrink: 0;
background: var(--bg2); border-right: 1px solid var(--border);
overflow-y: auto; padding: 16px 0;
}
.sidebar::-webkit-scrollbar { width: 4px; }
.sidebar::-webkit-scrollbar-thumb { background: var(--border2); border-radius: 2px; }
.sidebar-section { margin-bottom: 6px; }
.sidebar-heading {
font-size: 10px; font-weight: 600; letter-spacing: 1px;
text-transform: uppercase; color: var(--text3);
padding: 8px 20px 4px;
}
.sidebar-item {
display: flex; align-items: center; gap: 10px;
padding: 7px 20px; cursor: pointer;
font-size: 13px; color: var(--text2);
border-left: 2px solid transparent;
transition: all .15s;
}
.sidebar-item:hover { color: var(--text); background: var(--bg3); }
.sidebar-item.active { color: var(--text); border-left-color: var(--accent); background: rgba(79,140,255,.08); }
.sidebar-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.sidebar-count { margin-left: auto; font-size: 11px; color: var(--text3); font-family: 'IBM Plex Mono', monospace; }
/* ── MAIN ── */
.main { flex: 1; overflow-y: auto; }
.main::-webkit-scrollbar { width: 5px; }
.main::-webkit-scrollbar-thumb { background: var(--border2); border-radius: 2px; }
/* ── OVERVIEW PANEL ── */
.overview {
padding: 32px 36px;
border-bottom: 1px solid var(--border);
}
.overview-title {
font-size: 22px; font-weight: 700; margin-bottom: 6px;
}
.overview-sub { font-size: 14px; color: var(--text2); margin-bottom: 28px; }
.domain-grid {
display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 14px;
}
.domain-card {
background: var(--bg3); border: 1px solid var(--border);
border-radius: 12px; padding: 16px 18px;
cursor: pointer; transition: all .2s;
position: relative; overflow: hidden;
}
.domain-card::before {
content: ''; position: absolute; top: 0; left: 0;
right: 0; height: 3px;
background: var(--dcolor);
}
.domain-card:hover { border-color: var(--border2); transform: translateY(-1px); }
.domain-card.selected { border-color: var(--dcolor); background: rgba(255,255,255,.03); }
.domain-card-name { font-size: 14px; font-weight: 600; margin-bottom: 6px; }
.domain-card-count { font-size: 12px; color: var(--text2); font-family: 'IBM Plex Mono', monospace; }
.domain-card-count span { color: var(--dcolor); font-weight: 600; }
/* ── TABLES SECTION ── */
.tables-section { padding: 28px 36px; }
.section-header { display: flex; align-items: center; gap: 14px; margin-bottom: 20px; }
.section-title { font-size: 18px; font-weight: 700; }
.section-badge {
font-size: 11px; font-family: 'IBM Plex Mono', monospace;
background: var(--bg3); border: 1px solid var(--border);
border-radius: 20px; padding: 3px 10px; color: var(--text2);
}
.views-badge {
font-size: 11px; color: var(--text3); margin-left: auto;
font-family: 'IBM Plex Mono', monospace;
}
/* ── TABLE CARDS ── */
.tables-grid { display: flex; flex-direction: column; gap: 10px; }
.table-card {
background: var(--bg3); border: 1px solid var(--border);
border-radius: 10px; overflow: hidden;
transition: border-color .15s;
}
.table-card:hover { border-color: var(--border2); }
.table-card.highlighted { border-color: var(--accent); }
.table-card.hidden { display: none; }
.table-header {
display: flex; align-items: center; gap: 12px;
padding: 12px 16px; cursor: pointer;
user-select: none;
}
.table-name {
font-family: 'IBM Plex Mono', monospace;
font-size: 13px; font-weight: 600; color: var(--text);
}
.table-col-count { font-size: 11px; color: var(--text3); font-family: 'IBM Plex Mono', monospace; }
.table-fk-count {
font-size: 11px; color: var(--fk);
font-family: 'IBM Plex Mono', monospace;
margin-left: 4px;
}
.table-toggle { margin-left: auto; color: var(--text3); font-size: 12px; transition: transform .2s; }
.table-toggle.open { transform: rotate(180deg); }
.table-body { display: none; border-top: 1px solid var(--border); }
.table-body.open { display: block; }
.col-list { padding: 8px 0; }
.col-row {
display: flex; align-items: center; gap: 10px;
padding: 5px 16px; font-size: 12px;
font-family: 'IBM Plex Mono', monospace;
color: var(--text2);
}
.col-row:hover { background: rgba(255,255,255,.02); }
.col-badge {
font-size: 9px; font-weight: 700; letter-spacing: .5px;
padding: 1px 5px; border-radius: 3px;
}
.col-badge.pk { background: rgba(251,191,36,.15); color: var(--pk); }
.col-badge.fk { background: rgba(244,114,182,.15); color: var(--fk); }
.col-name { color: var(--text); }
.col-type { color: var(--text3); margin-left: auto; font-size: 11px; }
.fk-section { border-top: 1px solid var(--border); padding: 10px 16px; }
.fk-title { font-size: 10px; font-weight: 600; letter-spacing: 1px; color: var(--text3); text-transform: uppercase; margin-bottom: 8px; }
.fk-row {
display: flex; align-items: center; gap: 8px;
font-size: 12px; font-family: 'IBM Plex Mono', monospace;
color: var(--text2); padding: 3px 0;
}
.fk-arrow { color: var(--fk); }
.fk-target { color: var(--accent); cursor: pointer; }
.fk-target:hover { text-decoration: underline; }
/* ── VIEWS SECTION ── */
.views-section { padding: 0 36px 32px; }
.views-grid { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.view-chip {
background: rgba(110,231,183,.08); border: 1px solid rgba(110,231,183,.2);
border-radius: 6px; padding: 5px 12px;
font-size: 12px; font-family: 'IBM Plex Mono', monospace;
color: var(--accent2);
}
/* ── SEARCH RESULTS ── */
.no-results { padding: 40px; text-align: center; color: var(--text3); font-size: 14px; }
/* ── SCROLLBAR ── */
.main::-webkit-scrollbar-track { background: var(--bg); }
</style>
</head>
<body>
<div class="topbar">
<div class="topbar-brand">Agência<span>Psi</span> DB</div>
<input class="search-bar" id="searchInput" placeholder="Buscar tabela ou coluna..." oninput="handleSearch(this.value)">
<div class="topbar-stats">
<div class="stat-pill"><strong id="statTables">86</strong> tabelas</div>
<div class="stat-pill"><strong>82</strong> FKs</div>
<div class="stat-pill"><strong>24</strong> views</div>
</div>
</div>
<div class="layout">
<nav class="sidebar" id="sidebar"></nav>
<main class="main" id="main"></main>
</div>
<script>
const DATA = {"tables":{"subscriptions":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"user_id","type":"uuid","pk":false},{"name":"plan_id","type":"uuid","pk":false},{"name":"status","type":"text","pk":false},{"name":"current_period_start","type":"timestamp with time zone","pk":false},{"name":"current_period_end","type":"timestamp with time zone","pk":false},{"name":"cancel_at_period_end","type":"boolean","pk":false},{"name":"provider","type":"text","pk":false},{"name":"provider_customer_id","type":"text","pk":false},{"name":"provider_subscription_id","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"plan_key","type":"text","pk":false},{"name":"source","type":"text","pk":false},{"name":"started_at","type":"timestamp with time zone","pk":false},{"name":"canceled_at","type":"timestamp with time zone","pk":false},{"name":"activated_at","type":"timestamp with time zone","pk":false},{"name":"past_due_since","type":"timestamp with time zone","pk":false},{"name":"suspended_at","type":"timestamp with time zone","pk":false},{"name":"suspended_reason","type":"text","pk":false},{"name":"cancelled_at","type":"timestamp with time zone","pk":false},{"name":"cancel_reason","type":"text","pk":false},{"name":"expired_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"plan_id","to_table":"plans","to_col":"id"}]},"financial_records":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"amount","type":"numeric","pk":false},{"name":"description","type":"text","pk":false},{"name":"category","type":"text","pk":false},{"name":"payment_method","type":"text","pk":false},{"name":"paid_at","type":"timestamp with time zone","pk":false},{"name":"due_date","type":"date","pk":false},{"name":"installments","type":"smallint","pk":false},{"name":"installment_number","type":"smallint","pk":false},{"name":"installment_group","type":"uuid","pk":false},{"name":"agenda_evento_id","type":"uuid","pk":false},{"name":"patient_id","type":"uuid","pk":false},{"name":"clinic_fee_pct","type":"numeric","pk":false},{"name":"clinic_fee_amount","type":"numeric","pk":false},{"name":"net_amount","type":"numeric","pk":false},{"name":"insurance_plan_id","type":"uuid","pk":false},{"name":"notes","type":"text","pk":false},{"name":"tags","type":"text[]","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"deleted_at","type":"timestamp with time zone","pk":false},{"name":"discount_amount","type":"numeric","pk":false},{"name":"final_amount","type":"numeric","pk":false},{"name":"status","type":"text","pk":false},{"name":"category_id","type":"uuid","pk":false}],"fks":[{"from_col":"agenda_evento_id","to_table":"agenda_eventos","to_col":"id"},{"from_col":"category_id","to_table":"financial_categories","to_col":"id"},{"from_col":"insurance_plan_id","to_table":"insurance_plans","to_col":"id"},{"from_col":"patient_id","to_table":"patients","to_col":"id"},{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"therapist_payouts":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"period_start","type":"date","pk":false},{"name":"period_end","type":"date","pk":false},{"name":"total_sessions","type":"integer","pk":false},{"name":"gross_amount","type":"numeric","pk":false},{"name":"clinic_fee_total","type":"numeric","pk":false},{"name":"net_amount","type":"numeric","pk":false},{"name":"status","type":"text","pk":false},{"name":"paid_at","type":"timestamp with time zone","pk":false},{"name":"notes","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"tenant_members":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"user_id","type":"uuid","pk":false},{"name":"role","type":"text","pk":false},{"name":"status","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"_db_migrations":{"columns":[{"name":"id","type":"integer","pk":true},{"name":"filename","type":"text","pk":false},{"name":"hash","type":"text","pk":false},{"name":"category","type":"text","pk":false},{"name":"applied_at","type":"timestamp with time zone","pk":false}],"fks":[]},"addon_credits":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"addon_type","type":"text","pk":false},{"name":"balance","type":"integer","pk":false},{"name":"total_purchased","type":"integer","pk":false},{"name":"total_consumed","type":"integer","pk":false},{"name":"low_balance_threshold","type":"integer","pk":false},{"name":"low_balance_notified","type":"boolean","pk":false},{"name":"daily_limit","type":"integer","pk":false},{"name":"hourly_limit","type":"integer","pk":false},{"name":"daily_used","type":"integer","pk":false},{"name":"hourly_used","type":"integer","pk":false},{"name":"daily_reset_at","type":"timestamp with time zone","pk":false},{"name":"hourly_reset_at","type":"timestamp with time zone","pk":false},{"name":"from_number_override","type":"text","pk":false},{"name":"expires_at","type":"timestamp with time zone","pk":false},{"name":"is_active","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"addon_products":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"slug","type":"text","pk":false},{"name":"name","type":"text","pk":false},{"name":"description","type":"text","pk":false},{"name":"addon_type","type":"text","pk":false},{"name":"icon","type":"text","pk":false},{"name":"credits_amount","type":"integer","pk":false},{"name":"price_cents","type":"integer","pk":false},{"name":"currency","type":"text","pk":false},{"name":"is_active","type":"boolean","pk":false},{"name":"is_visible","type":"boolean","pk":false},{"name":"sort_order","type":"integer","pk":false},{"name":"metadata","type":"jsonb","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"deleted_at","type":"timestamp with time zone","pk":false}],"fks":[]},"addon_transactions":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"addon_type","type":"text","pk":false},{"name":"type","type":"text","pk":false},{"name":"amount","type":"integer","pk":false},{"name":"balance_before","type":"integer","pk":false},{"name":"balance_after","type":"integer","pk":false},{"name":"product_id","type":"uuid","pk":false},{"name":"queue_id","type":"uuid","pk":false},{"name":"description","type":"text","pk":false},{"name":"admin_user_id","type":"uuid","pk":false},{"name":"payment_method","type":"text","pk":false},{"name":"payment_reference","type":"text","pk":false},{"name":"price_cents","type":"integer","pk":false},{"name":"currency","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"metadata","type":"jsonb","pk":false}],"fks":[{"from_col":"product_id","to_table":"addon_products","to_col":"id"},{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"agenda_bloqueios":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"tipo","type":"text","pk":false},{"name":"titulo","type":"text","pk":false},{"name":"data_inicio","type":"date","pk":false},{"name":"data_fim","type":"date","pk":false},{"name":"hora_inicio","type":"time without time zone","pk":false},{"name":"hora_fim","type":"time without time zone","pk":false},{"name":"recorrente","type":"boolean","pk":false},{"name":"dia_semana","type":"smallint","pk":false},{"name":"observacao","type":"text","pk":false},{"name":"origem","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"agenda_configuracoes":{"columns":[{"name":"owner_id","type":"uuid","pk":false},{"name":"duracao_padrao_minutos","type":"integer","pk":false},{"name":"intervalo_padrao_minutos","type":"integer","pk":false},{"name":"timezone","type":"text","pk":false},{"name":"usar_horario_admin_custom","type":"boolean","pk":false},{"name":"admin_inicio_visualizacao","type":"time without time zone","pk":false},{"name":"admin_fim_visualizacao","type":"time without time zone","pk":false},{"name":"admin_slot_visual_minutos","type":"integer","pk":false},{"name":"online_ativo","type":"boolean","pk":false},{"name":"online_min_antecedencia_horas","type":"integer","pk":false},{"name":"online_max_dias_futuro","type":"integer","pk":false},{"name":"online_cancelar_ate_horas","type":"integer","pk":false},{"name":"online_reagendar_ate_horas","type":"integer","pk":false},{"name":"online_limite_agendamentos_futuros","type":"integer","pk":false},{"name":"online_modo","type":"text","pk":false},{"name":"online_buffer_antes_min","type":"integer","pk":false},{"name":"online_buffer_depois_min","type":"integer","pk":false},{"name":"online_modalidade","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"usar_granularidade_custom","type":"boolean","pk":false},{"name":"granularidade_min","type":"integer","pk":false},{"name":"setup_concluido","type":"boolean","pk":false},{"name":"setup_concluido_em","type":"timestamp with time zone","pk":false},{"name":"agenda_view_mode","type":"text","pk":false},{"name":"agenda_custom_start","type":"time without time zone","pk":false},{"name":"agenda_custom_end","type":"time without time zone","pk":false},{"name":"session_duration_min","type":"integer","pk":false},{"name":"session_break_min","type":"integer","pk":false},{"name":"pausas_semanais","type":"jsonb","pk":false},{"name":"setup_clinica_concluido","type":"boolean","pk":false},{"name":"setup_clinica_concluido_em","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"jornada_igual_todos","type":"boolean","pk":false},{"name":"slot_mode","type":"text","pk":false},{"name":"atendimento_mode","type":"text","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"agenda_eventos":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"titulo","type":"text","pk":false},{"name":"observacoes","type":"text","pk":false},{"name":"inicio_em","type":"timestamp with time zone","pk":false},{"name":"fim_em","type":"timestamp with time zone","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"terapeuta_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"visibility_scope","type":"text","pk":false},{"name":"mirror_of_event_id","type":"uuid","pk":false},{"name":"mirror_source","type":"text","pk":false},{"name":"patient_id","type":"uuid","pk":false},{"name":"determined_commitment_id","type":"uuid","pk":false},{"name":"link_online","type":"text","pk":false},{"name":"titulo_custom","type":"text","pk":false},{"name":"extra_fields","type":"jsonb","pk":false},{"name":"recurrence_id","type":"uuid","pk":false},{"name":"recurrence_date","type":"date","pk":false},{"name":"modalidade","type":"text","pk":false},{"name":"price","type":"numeric","pk":false},{"name":"billing_contract_id","type":"uuid","pk":false},{"name":"billed","type":"boolean","pk":false},{"name":"services_customized","type":"boolean","pk":false},{"name":"insurance_plan_id","type":"uuid","pk":false},{"name":"insurance_guide_number","type":"text","pk":false},{"name":"insurance_value","type":"numeric","pk":false},{"name":"insurance_plan_service_id","type":"uuid","pk":false}],"fks":[{"from_col":"billing_contract_id","to_table":"billing_contracts","to_col":"id"},{"from_col":"determined_commitment_id","to_table":"determined_commitments","to_col":"id"},{"from_col":"insurance_plan_id","to_table":"insurance_plans","to_col":"id"},{"from_col":"insurance_plan_service_id","to_table":"insurance_plan_services","to_col":"id"},{"from_col":"patient_id","to_table":"patients","to_col":"id"},{"from_col":"recurrence_id","to_table":"recurrence_rules","to_col":"id"}]},"agenda_excecoes":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"data","type":"date","pk":false},{"name":"hora_inicio","type":"time without time zone","pk":false},{"name":"hora_fim","type":"time without time zone","pk":false},{"name":"motivo","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"fonte","type":"text","pk":false},{"name":"aplicavel_online","type":"boolean","pk":false},{"name":"tenant_id","type":"uuid","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"agenda_online_slots":{"columns":[{"name":"id","type":"bigint","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"weekday","type":"integer","pk":false},{"name":"enabled","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"agenda_regras_semanais":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"dia_semana","type":"smallint","pk":false},{"name":"hora_inicio","type":"time without time zone","pk":false},{"name":"hora_fim","type":"time without time zone","pk":false},{"name":"modalidade","type":"text","pk":false},{"name":"ativo","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"agenda_slots_bloqueados_semanais":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"dia_semana","type":"smallint","pk":false},{"name":"hora_inicio","type":"time without time zone","pk":false},{"name":"motivo","type":"text","pk":false},{"name":"ativo","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"agenda_slots_regras":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"dia_semana","type":"smallint","pk":false},{"name":"passo_minutos","type":"integer","pk":false},{"name":"offset_minutos","type":"integer","pk":false},{"name":"buffer_antes_min","type":"integer","pk":false},{"name":"buffer_depois_min","type":"integer","pk":false},{"name":"min_antecedencia_horas","type":"integer","pk":false},{"name":"ativo","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"agendador_configuracoes":{"columns":[{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"ativo","type":"boolean","pk":false},{"name":"link_slug","type":"text","pk":false},{"name":"imagem_fundo_url","type":"text","pk":false},{"name":"imagem_header_url","type":"text","pk":false},{"name":"logomarca_url","type":"text","pk":false},{"name":"cor_primaria","type":"text","pk":false},{"name":"nome_exibicao","type":"text","pk":false},{"name":"endereco","type":"text","pk":false},{"name":"botao_como_chegar_ativo","type":"boolean","pk":false},{"name":"maps_url","type":"text","pk":false},{"name":"modo_aprovacao","type":"text","pk":false},{"name":"modalidade","type":"text","pk":false},{"name":"tipos_habilitados","type":"jsonb","pk":false},{"name":"duracao_sessao_min","type":"integer","pk":false},{"name":"antecedencia_minima_horas","type":"integer","pk":false},{"name":"prazo_resposta_horas","type":"integer","pk":false},{"name":"reserva_horas","type":"integer","pk":false},{"name":"pagamento_obrigatorio","type":"boolean","pk":false},{"name":"pix_chave","type":"text","pk":false},{"name":"pix_countdown_minutos","type":"integer","pk":false},{"name":"triagem_motivo","type":"boolean","pk":false},{"name":"triagem_como_conheceu","type":"boolean","pk":false},{"name":"verificacao_email","type":"boolean","pk":false},{"name":"exigir_aceite_lgpd","type":"boolean","pk":false},{"name":"mensagem_boas_vindas","type":"text","pk":false},{"name":"texto_como_se_preparar","type":"text","pk":false},{"name":"texto_termos_lgpd","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"pagamento_modo","type":"text","pk":false},{"name":"pagamento_metodos_visiveis","type":"text[]","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"agendador_solicitacoes":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"paciente_nome","type":"text","pk":false},{"name":"paciente_sobrenome","type":"text","pk":false},{"name":"paciente_email","type":"text","pk":false},{"name":"paciente_celular","type":"text","pk":false},{"name":"paciente_cpf","type":"text","pk":false},{"name":"tipo","type":"text","pk":false},{"name":"modalidade","type":"text","pk":false},{"name":"data_solicitada","type":"date","pk":false},{"name":"hora_solicitada","type":"time without time zone","pk":false},{"name":"reservado_ate","type":"timestamp with time zone","pk":false},{"name":"motivo","type":"text","pk":false},{"name":"como_conheceu","type":"text","pk":false},{"name":"pix_status","type":"text","pk":false},{"name":"pix_pago_em","type":"timestamp with time zone","pk":false},{"name":"status","type":"text","pk":false},{"name":"recusado_motivo","type":"text","pk":false},{"name":"autorizado_em","type":"timestamp with time zone","pk":false},{"name":"autorizado_por","type":"uuid","pk":false},{"name":"user_id","type":"uuid","pk":false},{"name":"patient_id","type":"uuid","pk":false},{"name":"evento_id","type":"uuid","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"billing_contracts":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"patient_id","type":"uuid","pk":false},{"name":"type","type":"text","pk":false},{"name":"total_sessions","type":"integer","pk":false},{"name":"sessions_used","type":"integer","pk":false},{"name":"package_price","type":"numeric","pk":false},{"name":"amount","type":"numeric","pk":false},{"name":"billing_interval","type":"text","pk":false},{"name":"active_from","type":"timestamp with time zone","pk":false},{"name":"active_to","type":"timestamp with time zone","pk":false},{"name":"status","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"patient_id","to_table":"patients","to_col":"id"}]},"commitment_services":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"commitment_id","type":"uuid","pk":false},{"name":"service_id","type":"uuid","pk":false},{"name":"quantity","type":"integer","pk":false},{"name":"unit_price","type":"numeric","pk":false},{"name":"discount_pct","type":"numeric","pk":false},{"name":"discount_flat","type":"numeric","pk":false},{"name":"final_price","type":"numeric","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"commitment_id","to_table":"agenda_eventos","to_col":"id"},{"from_col":"service_id","to_table":"services","to_col":"id"}]},"commitment_time_logs":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"commitment_id","type":"uuid","pk":false},{"name":"calendar_event_id","type":"uuid","pk":false},{"name":"started_at","type":"timestamp with time zone","pk":false},{"name":"ended_at","type":"timestamp with time zone","pk":false},{"name":"minutes","type":"integer","pk":false},{"name":"created_by","type":"uuid","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"calendar_event_id","to_table":"agenda_eventos","to_col":"id"},{"from_col":"commitment_id","to_table":"determined_commitments","to_col":"id"},{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"company_profiles":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"nome_fantasia","type":"text","pk":false},{"name":"razao_social","type":"text","pk":false},{"name":"tipo_empresa","type":"text","pk":false},{"name":"cnpj","type":"text","pk":false},{"name":"ie","type":"text","pk":false},{"name":"im","type":"text","pk":false},{"name":"cep","type":"text","pk":false},{"name":"logradouro","type":"text","pk":false},{"name":"numero","type":"text","pk":false},{"name":"complemento","type":"text","pk":false},{"name":"bairro","type":"text","pk":false},{"name":"cidade","type":"text","pk":false},{"name":"estado","type":"text","pk":false},{"name":"email","type":"text","pk":false},{"name":"telefone","type":"text","pk":false},{"name":"site","type":"text","pk":false},{"name":"logo_url","type":"text","pk":false},{"name":"redes_sociais","type":"jsonb","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"determined_commitment_fields":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"commitment_id","type":"uuid","pk":false},{"name":"key","type":"text","pk":false},{"name":"label","type":"text","pk":false},{"name":"required","type":"boolean","pk":false},{"name":"sort_order","type":"integer","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"commitment_id","to_table":"determined_commitments","to_col":"id"},{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"determined_commitments":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"created_by","type":"uuid","pk":false},{"name":"is_native","type":"boolean","pk":false},{"name":"native_key","type":"text","pk":false},{"name":"is_locked","type":"boolean","pk":false},{"name":"active","type":"boolean","pk":false},{"name":"name","type":"text","pk":false},{"name":"description","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"bg_color","type":"text","pk":false},{"name":"text_color","type":"text","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"dev_user_credentials":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"user_id","type":"uuid","pk":false},{"name":"email","type":"text","pk":false},{"name":"password_dev","type":"text","pk":false},{"name":"kind","type":"text","pk":false},{"name":"note","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[]},"email_layout_config":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"header_config","type":"jsonb","pk":false},{"name":"footer_config","type":"jsonb","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[]},"email_templates_global":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"key","type":"text","pk":false},{"name":"domain","type":"text","pk":false},{"name":"channel","type":"text","pk":false},{"name":"subject","type":"text","pk":false},{"name":"body_html","type":"text","pk":false},{"name":"body_text","type":"text","pk":false},{"name":"version","type":"integer","pk":false},{"name":"is_active","type":"boolean","pk":false},{"name":"variables","type":"jsonb","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[]},"email_templates_tenant":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"template_key","type":"text","pk":false},{"name":"subject","type":"text","pk":false},{"name":"body_html","type":"text","pk":false},{"name":"body_text","type":"text","pk":false},{"name":"enabled","type":"boolean","pk":false},{"name":"synced_version","type":"integer","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[]},"entitlements_invalidation":{"columns":[{"name":"owner_id","type":"uuid","pk":false},{"name":"changed_at","type":"timestamp with time zone","pk":false}],"fks":[]},"features":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"key","type":"text","pk":false},{"name":"description","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"descricao","type":"text","pk":false},{"name":"name","type":"text","pk":false}],"fks":[]},"feriados":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"tipo","type":"text","pk":false},{"name":"nome","type":"text","pk":false},{"name":"data","type":"date","pk":false},{"name":"cidade","type":"text","pk":false},{"name":"estado","type":"text","pk":false},{"name":"observacao","type":"text","pk":false},{"name":"bloqueia_sessoes","type":"boolean","pk":false},{"name":"criado_em","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"financial_categories":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"user_id","type":"uuid","pk":false},{"name":"name","type":"text","pk":false},{"name":"color","type":"text","pk":false},{"name":"icon","type":"text","pk":false},{"name":"sort_order","type":"integer","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[]},"financial_exceptions":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"exception_type","type":"text","pk":false},{"name":"charge_mode","type":"text","pk":false},{"name":"charge_value","type":"numeric","pk":false},{"name":"charge_pct","type":"numeric","pk":false},{"name":"min_hours_notice","type":"integer","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[]},"global_notices":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"title","type":"text","pk":false},{"name":"message","type":"text","pk":false},{"name":"variant","type":"text","pk":false},{"name":"roles","type":"text[]","pk":false},{"name":"contexts","type":"text[]","pk":false},{"name":"starts_at","type":"timestamp with time zone","pk":false},{"name":"ends_at","type":"timestamp with time zone","pk":false},{"name":"is_active","type":"boolean","pk":false},{"name":"priority","type":"integer","pk":false},{"name":"dismissible","type":"boolean","pk":false},{"name":"persist_dismiss","type":"boolean","pk":false},{"name":"dismiss_scope","type":"text","pk":false},{"name":"show_once","type":"boolean","pk":false},{"name":"max_views","type":"integer","pk":false},{"name":"cooldown_minutes","type":"integer","pk":false},{"name":"version","type":"integer","pk":false},{"name":"action_type","type":"text","pk":false},{"name":"action_label","type":"text","pk":false},{"name":"action_url","type":"text","pk":false},{"name":"action_route","type":"text","pk":false},{"name":"views_count","type":"integer","pk":false},{"name":"clicks_count","type":"integer","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"created_by","type":"uuid","pk":false},{"name":"content_align","type":"text","pk":false},{"name":"link_target","type":"text","pk":false}],"fks":[]},"insurance_plan_services":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"insurance_plan_id","type":"uuid","pk":false},{"name":"name","type":"text","pk":false},{"name":"value","type":"numeric","pk":false},{"name":"active","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"insurance_plan_id","to_table":"insurance_plans","to_col":"id"}]},"insurance_plans":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"name","type":"text","pk":false},{"name":"notes","type":"text","pk":false},{"name":"default_value","type":"numeric","pk":false},{"name":"active","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[]},"login_carousel_slides":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"title","type":"text","pk":false},{"name":"body","type":"text","pk":false},{"name":"icon","type":"text","pk":false},{"name":"ordem","type":"integer","pk":false},{"name":"ativo","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[]},"module_features":{"columns":[{"name":"module_id","type":"uuid","pk":false},{"name":"feature_id","type":"uuid","pk":false},{"name":"enabled","type":"boolean","pk":false},{"name":"limits","type":"jsonb","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"feature_id","to_table":"features","to_col":"id"},{"from_col":"module_id","to_table":"modules","to_col":"id"}]},"modules":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"key","type":"text","pk":false},{"name":"name","type":"text","pk":false},{"name":"description","type":"text","pk":false},{"name":"is_active","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[]},"notice_dismissals":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"notice_id","type":"uuid","pk":false},{"name":"user_id","type":"uuid","pk":false},{"name":"version","type":"integer","pk":false},{"name":"dismissed_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"notice_id","to_table":"global_notices","to_col":"id"}]},"notification_channels":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"channel","type":"text","pk":false},{"name":"provider","type":"text","pk":false},{"name":"is_active","type":"boolean","pk":false},{"name":"display_name","type":"text","pk":false},{"name":"sender_address","type":"text","pk":false},{"name":"credentials","type":"jsonb","pk":false},{"name":"connection_status","type":"text","pk":false},{"name":"last_health_check","type":"timestamp with time zone","pk":false},{"name":"metadata","type":"jsonb","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"deleted_at","type":"timestamp with time zone","pk":false},{"name":"twilio_subaccount_sid","type":"text","pk":false},{"name":"twilio_phone_number","type":"text","pk":false},{"name":"twilio_phone_sid","type":"text","pk":false},{"name":"webhook_url","type":"text","pk":false},{"name":"cost_per_message_usd","type":"numeric","pk":false},{"name":"price_per_message_brl","type":"numeric","pk":false},{"name":"provisioned_at","type":"timestamp with time zone","pk":false}],"fks":[]},"notification_logs":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"queue_id","type":"uuid","pk":false},{"name":"agenda_evento_id","type":"uuid","pk":false},{"name":"patient_id","type":"uuid","pk":false},{"name":"channel","type":"text","pk":false},{"name":"template_key","type":"text","pk":false},{"name":"schedule_key","type":"text","pk":false},{"name":"recipient_address","type":"text","pk":false},{"name":"resolved_message","type":"text","pk":false},{"name":"resolved_vars","type":"jsonb","pk":false},{"name":"status","type":"text","pk":false},{"name":"provider","type":"text","pk":false},{"name":"provider_message_id","type":"text","pk":false},{"name":"provider_status","type":"text","pk":false},{"name":"provider_response","type":"jsonb","pk":false},{"name":"sent_at","type":"timestamp with time zone","pk":false},{"name":"delivered_at","type":"timestamp with time zone","pk":false},{"name":"read_at","type":"timestamp with time zone","pk":false},{"name":"failed_at","type":"timestamp with time zone","pk":false},{"name":"failure_reason","type":"text","pk":false},{"name":"estimated_cost_brl","type":"numeric","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"queue_id","to_table":"notification_queue","to_col":"id"}]},"notification_preferences":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"patient_id","type":"uuid","pk":false},{"name":"whatsapp_opt_in","type":"boolean","pk":false},{"name":"email_opt_in","type":"boolean","pk":false},{"name":"sms_opt_in","type":"boolean","pk":false},{"name":"preferred_time_start","type":"time without time zone","pk":false},{"name":"preferred_time_end","type":"time without time zone","pk":false},{"name":"lgpd_consent_given","type":"boolean","pk":false},{"name":"lgpd_consent_date","type":"timestamp with time zone","pk":false},{"name":"lgpd_consent_version","type":"text","pk":false},{"name":"lgpd_consent_ip","type":"inet","pk":false},{"name":"lgpd_opt_out_date","type":"timestamp with time zone","pk":false},{"name":"lgpd_opt_out_reason","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"deleted_at","type":"timestamp with time zone","pk":false}],"fks":[]},"notification_queue":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"agenda_evento_id","type":"uuid","pk":false},{"name":"patient_id","type":"uuid","pk":false},{"name":"channel","type":"text","pk":false},{"name":"template_key","type":"text","pk":false},{"name":"schedule_key","type":"text","pk":false},{"name":"resolved_vars","type":"jsonb","pk":false},{"name":"recipient_address","type":"text","pk":false},{"name":"status","type":"text","pk":false},{"name":"scheduled_at","type":"timestamp with time zone","pk":false},{"name":"sent_at","type":"timestamp with time zone","pk":false},{"name":"next_retry_at","type":"timestamp with time zone","pk":false},{"name":"attempts","type":"integer","pk":false},{"name":"max_attempts","type":"integer","pk":false},{"name":"last_error","type":"text","pk":false},{"name":"idempotency_key","type":"text","pk":false},{"name":"provider_message_id","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[]},"notification_schedules":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"schedule_key","type":"text","pk":false},{"name":"event_type","type":"text","pk":false},{"name":"trigger_type","type":"text","pk":false},{"name":"offset_minutes","type":"integer","pk":false},{"name":"whatsapp_enabled","type":"boolean","pk":false},{"name":"email_enabled","type":"boolean","pk":false},{"name":"sms_enabled","type":"boolean","pk":false},{"name":"allowed_time_start","type":"time without time zone","pk":false},{"name":"allowed_time_end","type":"time without time zone","pk":false},{"name":"skip_weekends","type":"boolean","pk":false},{"name":"skip_holidays","type":"boolean","pk":false},{"name":"is_active","type":"boolean","pk":false},{"name":"sort_order","type":"integer","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"deleted_at","type":"timestamp with time zone","pk":false}],"fks":[]},"notification_templates":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"key","type":"text","pk":false},{"name":"domain","type":"text","pk":false},{"name":"channel","type":"text","pk":false},{"name":"event_type","type":"text","pk":false},{"name":"body_text","type":"text","pk":false},{"name":"meta_template_name","type":"text","pk":false},{"name":"meta_template_namespace","type":"text","pk":false},{"name":"meta_components","type":"jsonb","pk":false},{"name":"meta_status","type":"text","pk":false},{"name":"variables","type":"jsonb","pk":false},{"name":"version","type":"integer","pk":false},{"name":"is_active","type":"boolean","pk":false},{"name":"is_default","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"deleted_at","type":"timestamp with time zone","pk":false}],"fks":[]},"notifications":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"type","type":"text","pk":false},{"name":"ref_id","type":"uuid","pk":false},{"name":"ref_table","type":"text","pk":false},{"name":"payload","type":"jsonb","pk":false},{"name":"read_at","type":"timestamp with time zone","pk":false},{"name":"archived","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[]},"plan_features":{"columns":[{"name":"plan_id","type":"uuid","pk":false},{"name":"feature_id","type":"uuid","pk":false},{"name":"enabled","type":"boolean","pk":false},{"name":"limits","type":"jsonb","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"feature_id","to_table":"features","to_col":"id"},{"from_col":"plan_id","to_table":"plans","to_col":"id"}]},"tenant_modules":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"module_id","type":"uuid","pk":false},{"name":"status","type":"text","pk":false},{"name":"settings","type":"jsonb","pk":false},{"name":"provider","type":"text","pk":false},{"name":"provider_item_id","type":"text","pk":false},{"name":"installed_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"module_id","to_table":"modules","to_col":"id"}]},"owner_users":{"columns":[{"name":"owner_id","type":"uuid","pk":false},{"name":"user_id","type":"uuid","pk":false},{"name":"role","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[]},"patient_discounts":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"patient_id","type":"uuid","pk":false},{"name":"discount_pct","type":"numeric","pk":false},{"name":"discount_flat","type":"numeric","pk":false},{"name":"reason","type":"text","pk":false},{"name":"active","type":"boolean","pk":false},{"name":"active_from","type":"timestamp with time zone","pk":false},{"name":"active_to","type":"timestamp with time zone","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"patient_id","to_table":"patients","to_col":"id"}]},"patient_group_patient":{"columns":[{"name":"patient_group_id","type":"uuid","pk":false},{"name":"patient_id","type":"uuid","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false}],"fks":[{"from_col":"patient_id","to_table":"patients","to_col":"id"},{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"patient_groups":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"nome","type":"text","pk":false},{"name":"descricao","type":"text","pk":false},{"name":"cor","type":"text","pk":false},{"name":"is_active","type":"boolean","pk":false},{"name":"is_system","type":"boolean","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"therapist_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"patient_intake_requests":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"token","type":"text","pk":false},{"name":"consent","type":"boolean","pk":false},{"name":"status","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"converted_patient_id","type":"uuid","pk":false},{"name":"rejected_reason","type":"text","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"cpf","type":"text","pk":false},{"name":"rg","type":"text","pk":false},{"name":"cep","type":"text","pk":false},{"name":"nome_completo","type":"text","pk":false},{"name":"email_principal","type":"text","pk":false},{"name":"telefone","type":"text","pk":false},{"name":"pais","type":"text","pk":false},{"name":"cidade","type":"text","pk":false},{"name":"estado","type":"text","pk":false},{"name":"endereco","type":"text","pk":false},{"name":"numero","type":"text","pk":false},{"name":"bairro","type":"text","pk":false},{"name":"complemento","type":"text","pk":false},{"name":"data_nascimento","type":"date","pk":false},{"name":"naturalidade","type":"text","pk":false},{"name":"genero","type":"text","pk":false},{"name":"estado_civil","type":"text","pk":false},{"name":"onde_nos_conheceu","type":"text","pk":false},{"name":"encaminhado_por","type":"text","pk":false},{"name":"observacoes","type":"text","pk":false},{"name":"notas_internas","type":"text","pk":false},{"name":"email_alternativo","type":"text","pk":false},{"name":"telefone_alternativo","type":"text","pk":false},{"name":"profissao","type":"text","pk":false},{"name":"escolaridade","type":"text","pk":false},{"name":"nacionalidade","type":"text","pk":false},{"name":"avatar_url","type":"text","pk":false},{"name":"tenant_id","type":"uuid","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"patient_invites":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"token","type":"text","pk":false},{"name":"active","type":"boolean","pk":false},{"name":"expires_at","type":"timestamp with time zone","pk":false},{"name":"max_uses","type":"integer","pk":false},{"name":"uses","type":"integer","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"patient_patient_tag":{"columns":[{"name":"owner_id","type":"uuid","pk":false},{"name":"patient_id","type":"uuid","pk":false},{"name":"tag_id","type":"uuid","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false}],"fks":[{"from_col":"tag_id","to_table":"patient_tags","to_col":"id"},{"from_col":"tenant_id","to_table":"tenants","to_col":"id"},{"from_col":"patient_id","to_table":"patients","to_col":"id"}]},"patient_tags":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"nome","type":"text","pk":false},{"name":"cor","type":"text","pk":false},{"name":"is_padrao","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"patients":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"nome_completo","type":"text","pk":false},{"name":"email_principal","type":"text","pk":false},{"name":"telefone","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"avatar_url","type":"text","pk":false},{"name":"status","type":"text","pk":false},{"name":"last_attended_at","type":"timestamp with time zone","pk":false},{"name":"is_native","type":"boolean","pk":false},{"name":"naturalidade","type":"text","pk":false},{"name":"data_nascimento","type":"date","pk":false},{"name":"rg","type":"text","pk":false},{"name":"cpf","type":"text","pk":false},{"name":"identification_color","type":"text","pk":false},{"name":"genero","type":"text","pk":false},{"name":"estado_civil","type":"text","pk":false},{"name":"email_alternativo","type":"text","pk":false},{"name":"pais","type":"text","pk":false},{"name":"cep","type":"text","pk":false},{"name":"cidade","type":"text","pk":false},{"name":"estado","type":"text","pk":false},{"name":"endereco","type":"text","pk":false},{"name":"numero","type":"text","pk":false},{"name":"bairro","type":"text","pk":false},{"name":"complemento","type":"text","pk":false},{"name":"escolaridade","type":"text","pk":false},{"name":"profissao","type":"text","pk":false},{"name":"nome_parente","type":"text","pk":false},{"name":"grau_parentesco","type":"text","pk":false},{"name":"telefone_alternativo","type":"text","pk":false},{"name":"onde_nos_conheceu","type":"text","pk":false},{"name":"encaminhado_por","type":"text","pk":false},{"name":"nome_responsavel","type":"text","pk":false},{"name":"telefone_responsavel","type":"text","pk":false},{"name":"cpf_responsavel","type":"text","pk":false},{"name":"observacao_responsavel","type":"text","pk":false},{"name":"cobranca_no_responsavel","type":"boolean","pk":false},{"name":"observacoes","type":"text","pk":false},{"name":"notas_internas","type":"text","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"telefone_parente","type":"text","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"responsible_member_id","type":"uuid","pk":false},{"name":"user_id","type":"uuid","pk":false},{"name":"patient_scope","type":"text","pk":false},{"name":"therapist_member_id","type":"uuid","pk":false}],"fks":[{"from_col":"responsible_member_id","to_table":"tenant_members","to_col":"id"},{"from_col":"tenant_id","to_table":"tenants","to_col":"id"},{"from_col":"therapist_member_id","to_table":"tenant_members","to_col":"id"}]},"payment_settings":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"pix_ativo","type":"boolean","pk":false},{"name":"pix_tipo","type":"text","pk":false},{"name":"pix_chave","type":"text","pk":false},{"name":"pix_nome_titular","type":"text","pk":false},{"name":"deposito_ativo","type":"boolean","pk":false},{"name":"deposito_banco","type":"text","pk":false},{"name":"deposito_agencia","type":"text","pk":false},{"name":"deposito_conta","type":"text","pk":false},{"name":"deposito_tipo_conta","type":"text","pk":false},{"name":"deposito_titular","type":"text","pk":false},{"name":"deposito_cpf_cnpj","type":"text","pk":false},{"name":"dinheiro_ativo","type":"boolean","pk":false},{"name":"cartao_ativo","type":"boolean","pk":false},{"name":"cartao_instrucao","type":"text","pk":false},{"name":"convenio_ativo","type":"boolean","pk":false},{"name":"convenio_lista","type":"text","pk":false},{"name":"observacoes_pagamento","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"plan_prices":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"plan_id","type":"uuid","pk":false},{"name":"currency","type":"text","pk":false},{"name":"amount_cents","type":"integer","pk":false},{"name":"is_active","type":"boolean","pk":false},{"name":"active_from","type":"timestamp with time zone","pk":false},{"name":"active_to","type":"timestamp with time zone","pk":false},{"name":"source","type":"text","pk":false},{"name":"provider","type":"text","pk":false},{"name":"provider_price_id","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"plan_id","to_table":"plans","to_col":"id"}]},"plan_public":{"columns":[{"name":"plan_id","type":"uuid","pk":false},{"name":"public_name","type":"text","pk":false},{"name":"public_description","type":"text","pk":false},{"name":"badge","type":"text","pk":false},{"name":"is_featured","type":"boolean","pk":false},{"name":"is_visible","type":"boolean","pk":false},{"name":"sort_order","type":"integer","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"plan_id","to_table":"plans","to_col":"id"}]},"plan_public_bullets":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"plan_id","type":"uuid","pk":false},{"name":"text","type":"text","pk":false},{"name":"sort_order","type":"integer","pk":false},{"name":"highlight","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"plan_id","to_table":"plans","to_col":"id"}]},"plans":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"key","type":"text","pk":false},{"name":"name","type":"text","pk":false},{"name":"description","type":"text","pk":false},{"name":"is_active","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"price_cents","type":"integer","pk":false},{"name":"currency","type":"text","pk":false},{"name":"billing_interval","type":"text","pk":false},{"name":"target","type":"text","pk":false},{"name":"max_supervisees","type":"integer","pk":false}],"fks":[]},"professional_pricing":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"determined_commitment_id","type":"uuid","pk":false},{"name":"price","type":"numeric","pk":false},{"name":"notes","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[]},"profiles":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"role","type":"text","pk":false},{"name":"full_name","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"avatar_url","type":"text","pk":false},{"name":"phone","type":"text","pk":false},{"name":"bio","type":"text","pk":false},{"name":"language","type":"text","pk":false},{"name":"timezone","type":"text","pk":false},{"name":"notify_system_email","type":"boolean","pk":false},{"name":"notify_reminders","type":"boolean","pk":false},{"name":"notify_news","type":"boolean","pk":false},{"name":"account_type","type":"text","pk":false},{"name":"platform_roles","type":"text[]","pk":false},{"name":"nickname","type":"text","pk":false},{"name":"work_description","type":"text","pk":false},{"name":"work_description_other","type":"text","pk":false},{"name":"site_url","type":"text","pk":false},{"name":"social_instagram","type":"text","pk":false},{"name":"social_youtube","type":"text","pk":false},{"name":"social_facebook","type":"text","pk":false},{"name":"social_x","type":"text","pk":false},{"name":"social_custom","type":"jsonb","pk":false}],"fks":[]},"recurrence_exceptions":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"recurrence_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"original_date","type":"date","pk":false},{"name":"new_date","type":"date","pk":false},{"name":"new_start_time","type":"time without time zone","pk":false},{"name":"new_end_time","type":"time without time zone","pk":false},{"name":"modalidade","type":"text","pk":false},{"name":"observacoes","type":"text","pk":false},{"name":"titulo_custom","type":"text","pk":false},{"name":"extra_fields","type":"jsonb","pk":false},{"name":"reason","type":"text","pk":false},{"name":"agenda_evento_id","type":"uuid","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"agenda_evento_id","to_table":"agenda_eventos","to_col":"id"},{"from_col":"recurrence_id","to_table":"recurrence_rules","to_col":"id"}]},"recurrence_rule_services":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"rule_id","type":"uuid","pk":false},{"name":"service_id","type":"uuid","pk":false},{"name":"quantity","type":"integer","pk":false},{"name":"unit_price","type":"numeric","pk":false},{"name":"discount_pct","type":"numeric","pk":false},{"name":"discount_flat","type":"numeric","pk":false},{"name":"final_price","type":"numeric","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"rule_id","to_table":"recurrence_rules","to_col":"id"},{"from_col":"service_id","to_table":"services","to_col":"id"}]},"recurrence_rules":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"therapist_id","type":"uuid","pk":false},{"name":"patient_id","type":"uuid","pk":false},{"name":"determined_commitment_id","type":"uuid","pk":false},{"name":"weekdays","type":"smallint[]","pk":false},{"name":"start_time","type":"time without time zone","pk":false},{"name":"end_time","type":"time without time zone","pk":false},{"name":"timezone","type":"text","pk":false},{"name":"duration_min","type":"smallint","pk":false},{"name":"start_date","type":"date","pk":false},{"name":"end_date","type":"date","pk":false},{"name":"max_occurrences","type":"integer","pk":false},{"name":"open_ended","type":"boolean","pk":false},{"name":"modalidade","type":"text","pk":false},{"name":"titulo_custom","type":"text","pk":false},{"name":"observacoes","type":"text","pk":false},{"name":"extra_fields","type":"jsonb","pk":false},{"name":"status","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"price","type":"numeric","pk":false},{"name":"insurance_plan_id","type":"uuid","pk":false},{"name":"insurance_guide_number","type":"text","pk":false},{"name":"insurance_value","type":"numeric","pk":false},{"name":"insurance_plan_service_id","type":"uuid","pk":false}],"fks":[{"from_col":"insurance_plan_id","to_table":"insurance_plans","to_col":"id"},{"from_col":"insurance_plan_service_id","to_table":"insurance_plan_services","to_col":"id"}]},"saas_admins":{"columns":[{"name":"user_id","type":"uuid","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[]},"saas_doc_votos":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"doc_id","type":"uuid","pk":false},{"name":"user_id","type":"uuid","pk":false},{"name":"util","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"doc_id","to_table":"saas_docs","to_col":"id"}]},"saas_docs":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"titulo","type":"text","pk":false},{"name":"conteudo","type":"text","pk":false},{"name":"medias","type":"jsonb","pk":false},{"name":"tipo_acesso","type":"text","pk":false},{"name":"pagina_path","type":"text","pk":false},{"name":"docs_relacionados","type":"uuid[]","pk":false},{"name":"ativo","type":"boolean","pk":false},{"name":"ordem","type":"integer","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"categoria","type":"text","pk":false},{"name":"exibir_no_faq","type":"boolean","pk":false},{"name":"votos_util","type":"integer","pk":false},{"name":"votos_nao_util","type":"integer","pk":false}],"fks":[]},"saas_faq":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"pergunta","type":"text","pk":false},{"name":"categoria","type":"text","pk":false},{"name":"publico","type":"boolean","pk":false},{"name":"votos","type":"integer","pk":false},{"name":"titulo","type":"text","pk":false},{"name":"conteudo","type":"text","pk":false},{"name":"tipo_acesso","type":"text","pk":false},{"name":"pagina_path","type":"text","pk":false},{"name":"pagina_label","type":"text","pk":false},{"name":"medias","type":"jsonb","pk":false},{"name":"faqs_relacionados","type":"uuid[]","pk":false},{"name":"ativo","type":"boolean","pk":false},{"name":"ordem","type":"integer","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[]},"saas_faq_itens":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"doc_id","type":"uuid","pk":false},{"name":"pergunta","type":"text","pk":false},{"name":"resposta","type":"text","pk":false},{"name":"ordem","type":"integer","pk":false},{"name":"ativo","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"doc_id","to_table":"saas_docs","to_col":"id"}]},"services":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"owner_id","type":"uuid","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"name","type":"text","pk":false},{"name":"description","type":"text","pk":false},{"name":"price","type":"numeric","pk":false},{"name":"duration_min","type":"integer","pk":false},{"name":"active","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[]},"subscription_events":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"subscription_id","type":"uuid","pk":false},{"name":"owner_id","type":"uuid","pk":false},{"name":"event_type","type":"text","pk":false},{"name":"old_plan_id","type":"uuid","pk":false},{"name":"new_plan_id","type":"uuid","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"created_by","type":"uuid","pk":false},{"name":"source","type":"text","pk":false},{"name":"reason","type":"text","pk":false},{"name":"metadata","type":"jsonb","pk":false},{"name":"owner_type","type":"text","pk":false},{"name":"owner_ref","type":"uuid","pk":false}],"fks":[{"from_col":"subscription_id","to_table":"subscriptions","to_col":"id"}]},"subscription_intents_personal":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"user_id","type":"uuid","pk":false},{"name":"created_by_user_id","type":"uuid","pk":false},{"name":"email","type":"text","pk":false},{"name":"plan_id","type":"uuid","pk":false},{"name":"plan_key","type":"text","pk":false},{"name":"amount_cents","type":"integer","pk":false},{"name":"currency","type":"text","pk":false},{"name":"status","type":"text","pk":false},{"name":"source","type":"text","pk":false},{"name":"notes","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"paid_at","type":"timestamp with time zone","pk":false},{"name":"subscription_id","type":"uuid","pk":false}],"fks":[{"from_col":"subscription_id","to_table":"subscriptions","to_col":"id"},{"from_col":"plan_id","to_table":"plans","to_col":"id"}]},"subscription_intents_tenant":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"user_id","type":"uuid","pk":false},{"name":"created_by_user_id","type":"uuid","pk":false},{"name":"email","type":"text","pk":false},{"name":"plan_id","type":"uuid","pk":false},{"name":"plan_key","type":"text","pk":false},{"name":"amount_cents","type":"integer","pk":false},{"name":"currency","type":"text","pk":false},{"name":"status","type":"text","pk":false},{"name":"source","type":"text","pk":false},{"name":"notes","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"paid_at","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"subscription_id","type":"uuid","pk":false}],"fks":[{"from_col":"subscription_id","to_table":"subscriptions","to_col":"id"},{"from_col":"plan_id","to_table":"plans","to_col":"id"}]},"subscription_intents_legacy":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"user_id","type":"uuid","pk":false},{"name":"email","type":"text","pk":false},{"name":"plan_key","type":"text","pk":false},{"name":"amount_cents","type":"integer","pk":false},{"name":"currency","type":"text","pk":false},{"name":"status","type":"text","pk":false},{"name":"source","type":"text","pk":false},{"name":"notes","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"paid_at","type":"timestamp with time zone","pk":false},{"name":"tenant_id","type":"uuid","pk":false},{"name":"created_by_user_id","type":"uuid","pk":false}],"fks":[]},"support_sessions":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"admin_id","type":"uuid","pk":false},{"name":"token","type":"text","pk":false},{"name":"expires_at","type":"timestamp with time zone","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"tenant_feature_exceptions_log":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"feature_key","type":"text","pk":false},{"name":"enabled","type":"boolean","pk":false},{"name":"reason","type":"text","pk":false},{"name":"created_by","type":"uuid","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[]},"tenant_features":{"columns":[{"name":"tenant_id","type":"uuid","pk":false},{"name":"feature_key","type":"text","pk":false},{"name":"enabled","type":"boolean","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"tenant_invites":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"email","type":"text","pk":false},{"name":"role","type":"text","pk":false},{"name":"token","type":"uuid","pk":false},{"name":"invited_by","type":"uuid","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"expires_at","type":"timestamp with time zone","pk":false},{"name":"accepted_at","type":"timestamp with time zone","pk":false},{"name":"accepted_by","type":"uuid","pk":false},{"name":"revoked_at","type":"timestamp with time zone","pk":false},{"name":"revoked_by","type":"uuid","pk":false}],"fks":[{"from_col":"tenant_id","to_table":"tenants","to_col":"id"}]},"tenants":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"name","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"kind","type":"text","pk":false}],"fks":[]},"therapist_payout_records":{"columns":[{"name":"payout_id","type":"uuid","pk":false},{"name":"financial_record_id","type":"uuid","pk":false}],"fks":[{"from_col":"financial_record_id","to_table":"financial_records","to_col":"id"},{"from_col":"payout_id","to_table":"therapist_payouts","to_col":"id"}]},"twilio_subaccount_usage":{"columns":[{"name":"id","type":"uuid","pk":true},{"name":"tenant_id","type":"uuid","pk":false},{"name":"channel_id","type":"uuid","pk":false},{"name":"twilio_subaccount_sid","type":"text","pk":false},{"name":"period_start","type":"date","pk":false},{"name":"period_end","type":"date","pk":false},{"name":"messages_sent","type":"integer","pk":false},{"name":"messages_delivered","type":"integer","pk":false},{"name":"messages_failed","type":"integer","pk":false},{"name":"cost_usd","type":"numeric","pk":false},{"name":"cost_brl","type":"numeric","pk":false},{"name":"revenue_brl","type":"numeric","pk":false},{"name":"margin_brl","type":"numeric","pk":false},{"name":"usd_brl_rate","type":"numeric","pk":false},{"name":"synced_at","type":"timestamp with time zone","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false}],"fks":[{"from_col":"channel_id","to_table":"notification_channels","to_col":"id"}]},"user_settings":{"columns":[{"name":"user_id","type":"uuid","pk":false},{"name":"theme_mode","type":"text","pk":false},{"name":"preset","type":"text","pk":false},{"name":"primary_color","type":"text","pk":false},{"name":"surface_color","type":"text","pk":false},{"name":"menu_mode","type":"text","pk":false},{"name":"created_at","type":"timestamp with time zone","pk":false},{"name":"updated_at","type":"timestamp with time zone","pk":false},{"name":"layout_variant","type":"text","pk":false}],"fks":[]}},"views":["current_tenant_id","owner_feature_entitlements","subscription_intents","v_auth_users_public","v_commitment_totals","v_patient_groups_with_counts","v_plan_active_prices","v_public_pricing","v_subscription_feature_mismatch","v_subscription_health","v_subscription_health_v2","v_tag_patient_counts","v_tenant_active_subscription","v_tenant_entitlements","v_tenant_entitlements_full","v_tenant_entitlements_json","v_tenant_feature_exceptions","v_tenant_feature_mismatch","v_tenant_members_with_profiles","v_tenant_people","v_tenant_staff","v_twilio_whatsapp_overview","v_user_active_subscription","v_user_entitlements"],"domains":{"SaaS / Planos":["plans","plan_features","plan_prices","plan_public","plan_public_bullets","features","modules","module_features","subscriptions","subscription_events","subscription_intents_personal","subscription_intents_tenant","subscription_intents_legacy","addon_products","addon_credits","addon_transactions","tenant_features","tenant_modules","entitlements_invalidation","tenant_feature_exceptions_log"],"Tenants / Multi-tenant":["tenants","tenant_members","tenant_invites","owner_users","profiles","company_profiles","billing_contracts","payment_settings","support_sessions"],"Pacientes":["patients","patient_groups","patient_group_patient","patient_tags","patient_patient_tag","patient_discounts","patient_invites","patient_intake_requests"],"Agenda":["agenda_eventos","agenda_configuracoes","agenda_bloqueios","agenda_excecoes","agenda_online_slots","agenda_regras_semanais","agenda_slots_bloqueados_semanais","agenda_slots_regras","agendador_configuracoes","agendador_solicitacoes","feriados","recurrence_rules","recurrence_exceptions","recurrence_rule_services"],"Financeiro":["financial_records","financial_categories","financial_exceptions","therapist_payouts","therapist_payout_records","insurance_plans","insurance_plan_services","professional_pricing"],"Serviços / Commitments":["services","determined_commitments","determined_commitment_fields","commitment_services","commitment_time_logs"],"Notificações":["notifications","notification_channels","notification_templates","notification_queue","notification_logs","notification_preferences","notification_schedules","twilio_subaccount_usage"],"Email / Comunicação":["email_templates_global","email_templates_tenant","email_layout_config","global_notices","notice_dismissals","login_carousel_slides"],"SaaS Admin":["saas_admins","saas_docs","saas_doc_votos","saas_faq","saas_faq_itens","user_settings","dev_user_credentials","_db_migrations"]}};
const DOMAIN_COLORS = {
'SaaS / Planos': '#4f8cff',
'Tenants / Multi-tenant': '#6ee7b7',
'Pacientes': '#f472b6',
'Agenda': '#fb923c',
'Financeiro': '#a78bfa',
'Serviços / Commitments': '#34d399',
'Notificações': '#38bdf8',
'Email / Comunicação': '#fbbf24',
'SaaS Admin': '#94a3b8',
};
// Build reverse domain map
const tableToDomaim = {};
Object.entries(DATA.domains).forEach(([domain, tables]) => {
tables.forEach(t => tableToDomaim[t] = domain);
});
let currentDomain = null;
let currentSearch = '';
function getColor(domain) { return DOMAIN_COLORS[domain] || '#6b7280'; }
function buildSidebar() {
const sb = document.getElementById('sidebar');
let html = `<div class="sidebar-section">
<div class="sidebar-heading">Visão Geral</div>
<div class="sidebar-item ${!currentDomain ? 'active' : ''}" onclick="selectDomain(null)">
<div class="sidebar-dot" style="background:#4f8cff"></div>
Todos os domínios
<span class="sidebar-count">${Object.keys(DATA.tables).length}</span>
</div>
</div>
<div class="sidebar-section">
<div class="sidebar-heading">Domínios</div>`;
Object.entries(DATA.domains).forEach(([domain, tables]) => {
const color = getColor(domain);
const active = currentDomain === domain ? 'active' : '';
html += `<div class="sidebar-item ${active}" onclick="selectDomain('${domain.replace(/'/g,"\\'")}')">
<div class="sidebar-dot" style="background:${color}"></div>
${domain}
<span class="sidebar-count">${tables.length}</span>
</div>`;
});
html += `</div>`;
sb.innerHTML = html;
}
function buildMain() {
const main = document.getElementById('main');
const domains = currentDomain ? {[currentDomain]: DATA.domains[currentDomain]} : DATA.domains;
let html = '';
if (!currentDomain && !currentSearch) {
// Overview grid
html += `<div class="overview">
<div class="overview-title">AgenciaPsi — Banco de Dados</div>
<div class="overview-sub">Schema público · ${Object.keys(DATA.tables).length} tabelas · 82 foreign keys · 24 views</div>
<div class="domain-grid">`;
Object.entries(DATA.domains).forEach(([domain, tables]) => {
const color = getColor(domain);
const fkCount = tables.reduce((acc, t) => acc + (DATA.tables[t]?.fks?.length || 0), 0);
html += `<div class="domain-card" style="--dcolor:${color}" onclick="selectDomain('${domain.replace(/'/g,"\\'")}')">
<div class="domain-card-name">${domain}</div>
<div class="domain-card-count"><span>${tables.length}</span> tabelas · ${fkCount} FKs</div>
</div>`;
});
html += `</div></div>`;
}
// Tables
if (currentSearch) {
// Search across all tables
const q = currentSearch.toLowerCase();
const matches = Object.entries(DATA.tables).filter(([name, t]) => {
return name.includes(q) || t.columns.some(c => c.name.includes(q));
});
html += `<div class="tables-section">
<div class="section-header">
<div class="section-title">Resultados: "${currentSearch}"</div>
<div class="section-badge">${matches.length} tabelas</div>
</div>
<div class="tables-grid">`;
if (matches.length === 0) {
html += `<div class="no-results">Nenhuma tabela ou coluna encontrada.</div>`;
} else {
matches.forEach(([name, t]) => {
html += renderTableCard(name, t, q);
});
}
html += `</div></div>`;
} else {
Object.entries(domains).forEach(([domain, tableNames]) => {
const color = getColor(domain);
html += `<div class="tables-section">
<div class="section-header">
<div class="section-title" style="color:${color}">${domain}</div>
<div class="section-badge">${tableNames.length} tabelas</div>
</div>
<div class="tables-grid">`;
tableNames.forEach(name => {
const t = DATA.tables[name];
if (t) html += renderTableCard(name, t, '');
});
html += `</div></div>`;
});
// Views
if (!currentDomain) {
html += `<div class="views-section">
<div class="section-header">
<div class="section-title" style="color:#6ee7b7">Views</div>
<div class="section-badge">${DATA.views.length} views</div>
</div>
<div class="views-grid">`;
DATA.views.forEach(v => {
html += `<div class="view-chip">${v}</div>`;
});
html += `</div></div>`;
}
}
main.innerHTML = html;
}
function renderTableCard(name, t, highlight) {
const fkCols = new Set(t.fks.map(f => f.from_col));
const colCount = t.columns.length;
const fkCount = t.fks.length;
const domain = tableToDomaim[name];
const color = domain ? getColor(domain) : '#6b7280';
let colsHtml = '';
t.columns.forEach(c => {
const isPk = c.pk;
const isFk = fkCols.has(c.name);
let nameHtml = c.name;
if (highlight && c.name.includes(highlight)) {
nameHtml = c.name.replace(new RegExp(`(${highlight})`, 'gi'), `<mark style="background:rgba(79,140,255,.3);color:#fff;border-radius:2px">$1</mark>`);
}
colsHtml += `<div class="col-row">
${isPk ? `<span class="col-badge pk">PK</span>` : isFk ? `<span class="col-badge fk">FK</span>` : '<span style="width:26px"></span>'}
<span class="col-name">${nameHtml}</span>
<span class="col-type">${c.type}</span>
</div>`;
});
let fksHtml = '';
if (t.fks.length > 0) {
fksHtml = `<div class="fk-section">
<div class="fk-title">Foreign Keys</div>`;
t.fks.forEach(fk => {
fksHtml += `<div class="fk-row">
<span>${fk.from_col}</span>
<span class="fk-arrow">→</span>
<span class="fk-target" onclick="jumpToTable('${fk.to_table}')">${fk.to_table}.${fk.to_col}</span>
</div>`;
});
fksHtml += `</div>`;
}
const highlightClass = highlight && name.includes(highlight) ? 'highlighted' : '';
return `<div class="table-card ${highlightClass}" id="tc-${name}">
<div class="table-header" onclick="toggleTable('${name}')">
<div style="width:8px;height:8px;border-radius:50%;background:${color};flex-shrink:0"></div>
<div class="table-name">${name}</div>
<span class="table-col-count">${colCount} cols</span>
${fkCount > 0 ? `<span class="table-fk-count">${fkCount} FK</span>` : ''}
<span class="table-toggle" id="toggle-${name}">▼</span>
</div>
<div class="table-body" id="body-${name}">
<div class="col-list">${colsHtml}</div>
${fksHtml}
</div>
</div>`;
}
function toggleTable(name) {
const body = document.getElementById(`body-${name}`);
const tog = document.getElementById(`toggle-${name}`);
if (!body) return;
const open = body.classList.toggle('open');
tog.classList.toggle('open', open);
}
function selectDomain(domain) {
currentDomain = domain;
currentSearch = '';
document.getElementById('searchInput').value = '';
buildSidebar();
buildMain();
document.getElementById('main').scrollTop = 0;
}
function jumpToTable(name) {
// Find domain and navigate
const domain = tableToDomaim[name] || null;
currentDomain = domain;
currentSearch = '';
document.getElementById('searchInput').value = '';
buildSidebar();
buildMain();
setTimeout(() => {
const el = document.getElementById(`tc-${name}`);
if (el) {
el.scrollIntoView({ behavior: 'smooth', block: 'center' });
// Open it
const body = document.getElementById(`body-${name}`);
const tog = document.getElementById(`toggle-${name}`);
if (body && !body.classList.contains('open')) {
body.classList.add('open');
tog.classList.add('open');
}
el.style.borderColor = '#4f8cff';
setTimeout(() => { el.style.borderColor = ''; }, 2000);
}
}, 80);
}
let searchTimer;
function handleSearch(val) {
clearTimeout(searchTimer);
currentSearch = val.trim();
searchTimer = setTimeout(() => {
currentDomain = null;
buildSidebar();
buildMain();
}, 200);
}
// Init
buildSidebar();
buildMain();
</script>
</body>
</html>