-- DDL PostgreSQL gerado por scripts/gerar-ddl-postgres.php
-- Decisões em docs/f1-3-conversao-schema.md e docs/f1-2-decisao-saas.md
--
-- NÃO EDITE À MÃO: regenere. Ajustes vão no gerador.

CREATE SCHEMA IF NOT EXISTS bvip;
SET search_path = bvip, public;

CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA bvip;

DO $$ BEGIN
    EXECUTE format('ALTER DATABASE %I SET search_path = bvip, public', current_database());

    -- O FUSO TAMBEM VAI NO BANCO, e pelo mesmo motivo do search_path: toda
    -- sessao precisa dele, e nenhuma deve ter de lembrar.
    --
    -- As 133 colunas de data sao 'timestamp with time zone', e o dump do
    -- MySQL traz HORA LOCAL sem fuso: '2017-05-13 18:34:51'. Numa sessao em
    -- UTC -- que e o padrao do contêiner -- o PostgreSQL le isso como 18:34
    -- UTC, ou seja, 15:34 em Sao Paulo. Tres horas a menos em TODA data do
    -- sistema.
    --
    -- O defeito e invisivel enquanto a aplicacao tambem estiver em UTC: ida e
    -- volta ficam consistentes e os digitos exibidos batem. Ele aparece no dia
    -- em que alguem corrige o fuso -- que e justamente o que se faz ao ir para
    -- producao.
    EXECUTE format('ALTER DATABASE %I SET timezone = ''America/Sao_Paulo''', current_database());
END $$;

-- O nível novo: o inquilino. A Barbearia VIP é o de id 1.
CREATE TABLE inquilinos (
    id           integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    nome         varchar(120) NOT NULL,
    fuso_horario varchar(60)  NOT NULL DEFAULT 'America/Sao_Paulo',
    status       boolean      NOT NULL DEFAULT true,
    data_criacao timestamptz  NOT NULL DEFAULT now()
);

INSERT INTO inquilinos (id, nome) VALUES (1, 'Barbearia VIP');

-- Sessão no banco, para a promoção de failover não deslogar todo mundo.
--
-- SEM inquilino_id e SEM RLS, de propósito: a sessão nasce no login, ANTES
-- de existir contexto de inquilino. Uma política aqui tornaria o login
-- impossível — a consulta não enxergaria a própria sessão que acabou de
-- criar.
CREATE TABLE sessoes (
    id          varchar(128) NOT NULL,
    nome        varchar(128) NOT NULL,
    dados       text,
    duracao     integer      NOT NULL,
    alterado_em integer      NOT NULL,
    PRIMARY KEY (id, nome)
);

CREATE INDEX sessoes_expiracao ON sessoes (alterado_em);

-- ----------------------------------------------------------------------
CREATE TABLE agendas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               bigint GENERATED BY DEFAULT AS IDENTITY,
    id_pai                           integer DEFAULT NULL,
    colaborador                      integer NOT NULL,
    cliente                          integer DEFAULT NULL,
    produto                          integer DEFAULT NULL,
    fechamento                       integer DEFAULT NULL,
    hora                             varchar(5) NOT NULL,
    data                             timestamptz NOT NULL,
    observacao                       varchar(255) DEFAULT NULL,
    origem                           varchar(5) NOT NULL,
    checkin                          boolean NOT NULL DEFAULT false,
    checkout                         boolean NOT NULL,
    add_comanda                      boolean DEFAULT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE agendas_exclusoes (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    id_pai                           integer DEFAULT NULL,
    colaborador                      integer NOT NULL,
    cliente                          integer DEFAULT NULL,
    produto                          integer DEFAULT NULL,
    fechamento                       integer DEFAULT NULL,
    hora                             varchar(5) NOT NULL,
    data                             timestamptz NOT NULL,
    observacao                       varchar(255) DEFAULT NULL,
    origem                           varchar(5) NOT NULL,
    checkin                          boolean NOT NULL DEFAULT false,
    checkout                         boolean NOT NULL,
    add_comanda                      boolean DEFAULT NULL,
    status                           integer NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    usuario_exclusao                 integer DEFAULT NULL,
    cliente_exclusao                 integer DEFAULT NULL,
    data_exclusao                    timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE agendas_fechamentos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    colaborador                      integer DEFAULT NULL,
    data_inicio                      timestamptz NOT NULL,
    data_fim                         timestamptz NOT NULL,
    motivo                           varchar(100) NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE app_banners (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    descricao                        varchar(100) NOT NULL,
    arquivo                          varchar(100) NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE areas_atuacao (
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    nome                             varchar(100) NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE arquivos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    categoria                        integer NOT NULL,
    subcategoria                     varchar(100) DEFAULT NULL,
    descricao                        varchar(255) DEFAULT NULL,
    nome                             varchar(255) DEFAULT NULL,
    nome_original                    varchar(255) DEFAULT NULL,
    nome_personalizado               varchar(255) DEFAULT NULL,
    extensao                         varchar(10) DEFAULT NULL,
    hash                             varchar(255) NOT NULL,
    link                             boolean NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE arquivos_acessos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    arquivo                          integer NOT NULL,
    usuario                          integer NOT NULL,
    em_nome_de                       integer DEFAULT NULL,
    unidade                          integer DEFAULT NULL,
    acao                             varchar(6) NOT NULL,
    aberto_em                        timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE arquivos_categorias (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    nome                             varchar(100) NOT NULL,
    status                           boolean DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE assistentes (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    nome                             varchar(100) NOT NULL,
    descricao                        text,
    capa                             varchar(100) NOT NULL,
    status                           integer NOT NULL,
    iframe                           text NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    instrucoes                       text,
    modelo                           varchar(40) NOT NULL DEFAULT 'claude-haiku-5-5',
    esforco                          varchar(10) NOT NULL DEFAULT 'low',
    limite_de_tokens                 integer NOT NULL DEFAULT '4096',
    pagina_publica                   varchar(30) DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE assistentes_conversas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    assistente                       integer NOT NULL,
    usuario                          integer NOT NULL,
    unidade                          integer NOT NULL,
    pagina                           varchar(30) DEFAULT NULL,
    sistema                          text NOT NULL,
    modelo                           varchar(40) NOT NULL,
    descartar_blocos                 boolean NOT NULL DEFAULT false,
    data_criacao                     timestamptz NOT NULL,
    data_ultima                      timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE assistentes_cota (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    dia                              date NOT NULL,
    chave                            varchar(80) NOT NULL,
    usados                           integer NOT NULL DEFAULT '0',
    PRIMARY KEY (inquilino_id, dia, chave)
);

-- ----------------------------------------------------------------------
CREATE TABLE assistentes_grupos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    assistente                       integer NOT NULL,
    grupo                            integer NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE assistentes_mensagens (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    conversa                         integer NOT NULL,
    papel                            varchar(10) NOT NULL,
    conteudo                         text NOT NULL,
    motivo_de_parada                 varchar(30) DEFAULT NULL,
    modelo_que_respondeu             varchar(40) DEFAULT NULL,
    fora_do_historico                boolean NOT NULL DEFAULT false,
    data_criacao                     timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE assistentes_unidades (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    assistente                       integer NOT NULL,
    unidade                          integer NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE assistentes_uso (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    dia                              date NOT NULL,
    assistente                       integer NOT NULL,
    usuario                          integer DEFAULT NULL,
    unidade                          integer DEFAULT NULL,
    pagina                           varchar(30) DEFAULT NULL,
    pedidos                          integer NOT NULL DEFAULT '0',
    tokens_entrada                   integer NOT NULL DEFAULT '0',
    tokens_saida                     integer NOT NULL DEFAULT '0',
    tokens_cache_lidos               integer NOT NULL DEFAULT '0',
    tokens_cache_gravados            integer NOT NULL DEFAULT '0',
    custo_estimado_usd               numeric(12,6) NOT NULL DEFAULT '0.000000',
    recusas                          integer NOT NULL DEFAULT '0',
    erros                            integer NOT NULL DEFAULT '0',
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE bairros (
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    cidade                           integer NOT NULL,
    nome                             varchar(100) NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE caixas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    usuario                          integer NOT NULL,
    valor_inicial                    double precision NOT NULL,
    valor_final                      double precision DEFAULT NULL,
    valor_contado                    double precision DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    status                           boolean NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE caixas_retiradas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    caixa                            integer NOT NULL,
    saida                            integer DEFAULT NULL,
    motivo                           varchar(100) NOT NULL,
    valor                            double precision NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    status                           boolean NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE cidades (
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    estado                           integer NOT NULL,
    nome                             varchar(100) NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE clientes (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    responsavel                      integer DEFAULT NULL,
    convenio                         integer DEFAULT NULL,
    unidade                          integer NOT NULL,
    nome                             varchar(100) NOT NULL,
    cpf                              varchar(30) DEFAULT NULL,
    rg                               varchar(30) DEFAULT NULL,
    profissao                        varchar(100) DEFAULT NULL,
    telefone                         varchar(30) DEFAULT NULL,
    telefone_sem_mascara             varchar(30) DEFAULT NULL,
    telefone_bkp                     varchar(20) DEFAULT NULL,
    email                            varchar(100) DEFAULT NULL,
    pais                             varchar(100) DEFAULT NULL,
    cep                              varchar(20) DEFAULT NULL,
    estado                           varchar(2) DEFAULT NULL,
    cidade                           varchar(100) DEFAULT NULL,
    bairro                           varchar(100) DEFAULT NULL,
    logradouro                       varchar(100) DEFAULT NULL,
    numero                           varchar(100) DEFAULT NULL,
    complemento                      varchar(100) DEFAULT NULL,
    data_nascimento                  timestamptz DEFAULT NULL,
    ultima_visita                    timestamptz DEFAULT NULL,
    ultima_visita_unidade            integer DEFAULT NULL,
    ultima_visita_colaborador        integer DEFAULT NULL,
    ultimo_acesso_app                timestamptz DEFAULT NULL,
    data_ultimo_envio_nps            timestamptz DEFAULT NULL,
    bloqueio_agendamento_app         boolean NOT NULL DEFAULT false,
    anotacoes                        text,
    hash                             varchar(255) DEFAULT NULL,
    tags                             text,
    consumo                          double precision DEFAULT NULL,
    programa_fidelidade              boolean NOT NULL,
    origem                           varchar(30) DEFAULT NULL,
    indicacao                        integer DEFAULT NULL,
    codigo_app                       varchar(10) DEFAULT NULL,
    cadastro_restricao_agendamento   boolean NOT NULL,
    fidelizado_colaborador           boolean NOT NULL,
    fidelizado_unidade               boolean NOT NULL,
    nps                              double precision DEFAULT NULL,
    pesquisa_satisfacao_whatsapp     boolean NOT NULL,
    estilo_predominante              varchar(100) DEFAULT NULL,
    estilos_apoio                    varchar(100) DEFAULT NULL,
    marketing                        boolean NOT NULL DEFAULT true,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE clientes_aparelhos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    cliente                          integer NOT NULL,
    telefone                         varchar(30) NOT NULL,
    identificador                    varchar(255) NOT NULL,
    tipo                             varchar(10) NOT NULL,
    plataforma                       varchar(10) NOT NULL,
    versao_app                       varchar(30) DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_atualizacao                 timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE clientes_creditos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    cliente                          integer NOT NULL,
    valor                            double precision NOT NULL,
    valor_pf                         double precision NOT NULL,
    pontuacao                        integer DEFAULT NULL,
    pontuacao_validade               date DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE clientes_creditos_devolucoes (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    cliente                          integer NOT NULL,
    unidade                          integer NOT NULL,
    valor                            double precision NOT NULL,
    autorizado_por                   integer NOT NULL,
    gravado_por                      integer DEFAULT NULL,
    em_nome_de                       integer DEFAULT NULL,
    retirada                         integer NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    desfeita_por                     integer DEFAULT NULL,
    desfeita_em                      timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE clientes_debitos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    cliente                          integer NOT NULL,
    venda                            bigint NOT NULL,
    valor                            double precision NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE clientes_pacotes (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    venda                            bigint NOT NULL,
    cliente                          integer NOT NULL,
    item                             integer NOT NULL,
    quantidade_contratada            integer NOT NULL,
    valor_sessao                     double precision NOT NULL,
    quantidade_restante              integer NOT NULL,
    validade                         date DEFAULT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE clientes_sessoes (
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    telefone                         varchar(30) NOT NULL,
    codigo_hash                      varchar(255) NOT NULL,
    tentativas                       integer NOT NULL DEFAULT '0',
    token_hash                       varchar(64) DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    codigo_expira_em                 timestamptz NOT NULL,
    confirmado_em                    timestamptz DEFAULT NULL,
    token_expira_em                  timestamptz DEFAULT NULL,
    encerrada_em                     timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE clientes_validacoes_cadastrais (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    cliente                          integer NOT NULL,
    venda                            integer NOT NULL,
    usuario                          integer NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE colunas_gravadas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    nome                             varchar(40) NOT NULL,
    desde                            timestamptz NOT NULL,
    PRIMARY KEY (inquilino_id, nome)
);

-- ----------------------------------------------------------------------
CREATE TABLE confirmacoes (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    usuario                          integer NOT NULL,
    chave                            varchar(64) NOT NULL,
    unidade                          integer NOT NULL,
    rota                             varchar(150) NOT NULL,
    pedido                           varchar(64) NOT NULL,
    situacao                         smallint DEFAULT NULL,
    resposta                         text,
    data                             timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE convenios (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    nome                             varchar(100) NOT NULL,
    porcentagem                      double precision NOT NULL,
    contato                          varchar(100) DEFAULT NULL,
    cidade                           varchar(100) DEFAULT NULL,
    telefone                         varchar(20) DEFAULT NULL,
    email                            varchar(100) DEFAULT NULL,
    descricao                        varchar(250) DEFAULT NULL,
    data_ultima_venda                timestamptz DEFAULT NULL,
    contrato_data_vencimento         date DEFAULT NULL,
    contrato_vencido                 boolean NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE convenios_unidades (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    convenio                         integer NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE cupons (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    usuario                          integer DEFAULT NULL,
    regra                            varchar(30) NOT NULL,
    produto_regra                    integer NOT NULL,
    produto_oferecido                integer NOT NULL,
    nome                             varchar(100) NOT NULL,
    desconto                         integer NOT NULL,
    validade                         integer NOT NULL,
    data_limite                      date DEFAULT NULL,
    momento                          varchar(10) NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE cupons_clientes (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    cupom                            integer NOT NULL,
    venda                            bigint DEFAULT NULL,
    cliente                          integer NOT NULL,
    validade                         date NOT NULL,
    usado                            boolean NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    desconto                         integer DEFAULT NULL,
    produto_oferecido                integer DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE dashboard_colaboradores (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    colaborador                      integer NOT NULL,
    ano                              integer NOT NULL,
    mes                              integer NOT NULL,
    nps                              integer DEFAULT NULL,
    total_vendas                     double precision DEFAULT NULL,
    total_servicos_realizados        integer DEFAULT NULL,
    total_produtos_vendidos          integer DEFAULT NULL,
    total_produtos_vendidos_reais    double precision DEFAULT NULL,
    total_produtos_vip_vendidos      varchar(255) DEFAULT NULL,
    total_produtos_vip_vendidos_reais varchar(255) DEFAULT NULL,
    media_servicos_cliente           double precision DEFAULT NULL,
    media_produtos_cliente           double precision DEFAULT NULL,
    media_itens_cliente              double precision DEFAULT NULL,
    media_consumo_cliente            double precision DEFAULT NULL,
    total_clientes_novos             integer DEFAULT NULL,
    total_clientes_antigos           integer DEFAULT NULL,
    total_clientes_geral             integer DEFAULT NULL,
    total_agendamentos_app           integer DEFAULT NULL,
    total_agendamentos_web           integer DEFAULT NULL,
    total_agendamentos_geral         integer DEFAULT NULL,
    agenda_horarios_disponiveis      integer DEFAULT NULL,
    agenda_ocupacao                  double precision DEFAULT NULL,
    fidelizacao                      double precision DEFAULT NULL,
    estrela                          integer DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE dashboard_faturamento (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    ano                              integer NOT NULL,
    mes                              integer NOT NULL,
    total_clientes_novos             integer DEFAULT NULL,
    total_clientes_antigos           integer DEFAULT NULL,
    total_servicos_realizados        integer DEFAULT NULL,
    total_servicos_base              integer DEFAULT NULL,
    total_servicos_extra             integer DEFAULT NULL,
    total_produtos_vendidos          integer DEFAULT NULL,
    total_produtos_cabelo            integer DEFAULT NULL,
    total_produtos_barba             integer DEFAULT NULL,
    total_vendas                     double precision DEFAULT NULL,
    quantidade_vendas                integer DEFAULT NULL,
    media_servico_cliente            double precision DEFAULT NULL,
    media_produto_cliente            double precision DEFAULT NULL,
    gasto_por_cliente                double precision DEFAULT NULL,
    ticket_medio_por_venda           double precision DEFAULT NULL,
    crescimento_mes_porcentagem      double precision DEFAULT NULL,
    crescimento_mes_reais            double precision DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE dashboard_movimentos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    ano                              integer NOT NULL,
    mes                              integer NOT NULL,
    data_inicio                      date DEFAULT NULL,
    data_fim                         date DEFAULT NULL,
    faturamento_segunda              double precision DEFAULT NULL,
    faturamento_terca                double precision DEFAULT NULL,
    faturamento_quarta               double precision DEFAULT NULL,
    faturamento_quinta               double precision DEFAULT NULL,
    faturamento_sexta                double precision DEFAULT NULL,
    faturamento_sabado               double precision DEFAULT NULL,
    faturamento_domingo              double precision DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE estados (
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    uf                               varchar(2) NOT NULL,
    nome                             varchar(100) NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE formas_pagamentos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    nome                             varchar(100) NOT NULL,
    tipo                             varchar(3) NOT NULL,
    abreviacao                       varchar(10) NOT NULL,
    ordenacao                        integer NOT NULL DEFAULT '1',
    status                           boolean NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE funcionalidades (
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    nome                             varchar(100) NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE gorjetas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    venda                            bigint NOT NULL,
    colaborador                      integer NOT NULL,
    valor                            double precision DEFAULT NULL,
    data                             timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE grupos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    nome                             varchar(100) NOT NULL,
    administrador                    boolean DEFAULT NULL,
    gerente                          boolean NOT NULL,
    caixa                            boolean NOT NULL,
    colaborador                      boolean NOT NULL,
    status                           boolean NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE indicacoes (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    cliente                          integer NOT NULL,
    convidado                        integer NOT NULL,
    porta                            varchar(12) NOT NULL DEFAULT 'aplicativo',
    url                              varchar(255) NOT NULL,
    data_convite                     timestamptz NOT NULL,
    data_adesao                      timestamptz DEFAULT NULL,
    data_venda                       timestamptz DEFAULT NULL,
    comissao                         double precision DEFAULT NULL,
    primeira_venda                   bigint DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE logradouros (
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    bairro                           integer NOT NULL,
    tipo                             integer NOT NULL,
    nome                             varchar(100) NOT NULL,
    cep                              varchar(20) NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE mensagens (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    titulo                           varchar(100) NOT NULL,
    conteudo                         text,
    data                             date DEFAULT NULL,
    cor                              varchar(20) NOT NULL,
    status                           integer DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE mensagens_grupos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    mensagem                         integer NOT NULL,
    grupo                            integer NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE mensagens_unidades (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    mensagem                         integer NOT NULL,
    unidade                          integer NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE notificacoes (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    usuario                          integer NOT NULL,
    tipo                             varchar(30) NOT NULL,
    destinatario                     varchar(30) NOT NULL,
    data                             timestamptz NOT NULL,
    titulo                           varchar(100) NOT NULL,
    conteudo                         text,
    link                             text,
    clientes_ids                     text NOT NULL,
    total_clientes                   integer NOT NULL,
    total_envios                     integer NOT NULL,
    primeiro_envio                   timestamptz DEFAULT NULL,
    ultimo_envio                     timestamptz DEFAULT NULL,
    status                           varchar(30) NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE notificacoes_clientes (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    notificacao                      integer NOT NULL,
    cliente                          integer NOT NULL,
    data                             timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE nps (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    cliente                          integer NOT NULL,
    nota_recepcao                    integer NOT NULL,
    nota_experiencia                 integer NOT NULL,
    nota_media                       double precision NOT NULL DEFAULT '0',
    contabilizado                    boolean NOT NULL DEFAULT false,
    data                             timestamptz NOT NULL,
    envio                            varchar(32) DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE nps_itens (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    nps                              integer NOT NULL,
    venda                            bigint NOT NULL,
    colaborador                      integer NOT NULL,
    nota                             integer NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE nps_resultados_colaboradores (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    colaborador                      integer NOT NULL,
    mes                              integer NOT NULL,
    ano                              integer NOT NULL,
    nota                             double precision NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE nps_resultados_unidades (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    mes                              integer NOT NULL,
    ano                              integer NOT NULL,
    nota_geral                       double precision NOT NULL,
    nota_colaboradores               double precision NOT NULL,
    nota_recepcao                    double precision NOT NULL,
    nota_experiencia                 double precision NOT NULL,
    total_pesquisas_realizadas       integer NOT NULL,
    total_promotores                 integer NOT NULL,
    total_passivos                   integer NOT NULL,
    total_detratores                 integer NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE pacotes_itens (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    pacote                           integer NOT NULL,
    item                             integer NOT NULL,
    quantidade                       integer NOT NULL,
    valor_sessao                     double precision NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE pesquisas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    titulo                           varchar(100) DEFAULT NULL,
    hash                             varchar(30) DEFAULT NULL,
    programa_fidelidade              smallint NOT NULL,
    status                           smallint NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE pesquisas_perguntas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    pesquisa                         integer NOT NULL,
    conteudo                         varchar(150) DEFAULT NULL,
    ordem                            integer NOT NULL,
    status                           smallint NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE pesquisas_respostas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    pergunta                         integer NOT NULL,
    conteudo                         varchar(100) DEFAULT NULL,
    ordem                            integer NOT NULL,
    total                            integer NOT NULL,
    status                           smallint NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE pontuacoes_historicos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    cliente                          integer NOT NULL,
    unidade                          integer NOT NULL,
    venda                            bigint DEFAULT NULL,
    total                            integer NOT NULL,
    descricao                        varchar(200) NOT NULL,
    status                           varchar(20) DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    autorizado_por                   integer DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE privilegios (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    grupo                            integer NOT NULL,
    funcionalidade                   integer NOT NULL,
    ler                              boolean NOT NULL,
    escrever                         boolean NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE privilegios_usuarios (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    usuario                          integer NOT NULL,
    funcionalidade                   integer NOT NULL,
    ler                              boolean NOT NULL,
    escrever                         boolean NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE produtos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    area                             integer DEFAULT NULL,
    tag                              integer DEFAULT NULL,
    tipo                             varchar(15) NOT NULL,
    categoria                        varchar(15) DEFAULT NULL,
    nome                             varchar(100) NOT NULL,
    valor_compra                     double precision NOT NULL,
    valor_venda                      double precision NOT NULL,
    quantidade                       double precision DEFAULT NULL,
    visivel_app                      boolean NOT NULL,
    linha_vip                        boolean NOT NULL DEFAULT true,
    insumo                           boolean NOT NULL,
    periodos                         integer NOT NULL DEFAULT '1',
    pacote_validade_dias             integer DEFAULT NULL,
    cota_parte_pacote                double precision NOT NULL DEFAULT '0',
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE produtos_estoque (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    operacao                         varchar(5) NOT NULL,
    produto                          integer NOT NULL,
    usuario                          integer NOT NULL,
    solicitado_por                   integer DEFAULT NULL,
    quantidade                       double precision NOT NULL,
    cancelamento_motivo              text,
    motivo                           varchar(12) DEFAULT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE produtos_tags (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    nome                             varchar(100) NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE push_app (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    tipo                             varchar(10) NOT NULL,
    destinatario                     varchar(100) NOT NULL,
    titulo                           varchar(100) NOT NULL,
    conteudo                         text NOT NULL,
    link                             varchar(255) DEFAULT NULL,
    data                             timestamptz NOT NULL,
    unidade_whatsapp_api_key         varchar(100) DEFAULT NULL,
    unidade_whatsapp_instancia       varchar(100) DEFAULT NULL,
    unidade_whatsapp_provedor        varchar(20) NOT NULL DEFAULT 'evolution',
    cronjob                          varchar(100) NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE royalties (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    data                             date NOT NULL,
    fat_ser                          double precision NOT NULL,
    fat_lavavip                      double precision NOT NULL,
    fat_probar                       double precision NOT NULL,
    fat_proemp                       double precision NOT NULL,
    fat_total                        double precision NOT NULL,
    ret_ser                          double precision NOT NULL,
    ret_lavavip                      double precision NOT NULL,
    ret_probar                       double precision NOT NULL,
    ret_proemp                       double precision NOT NULL,
    ret_total                        double precision NOT NULL,
    cred_prog_fide_valor             double precision NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE royalties_aliquotas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    ciclo_inicial                    varchar(7) DEFAULT NULL,
    servico                          double precision NOT NULL,
    produto_barbearia                double precision NOT NULL,
    produto_emporio                  double precision NOT NULL,
    lavavip                          double precision NOT NULL,
    gravado_por                      integer DEFAULT NULL,
    em_nome_de                       integer DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE royalties_faturas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    valor                            double precision NOT NULL,
    vencimento                       date DEFAULT NULL,
    descricao                        varchar(100) DEFAULT NULL,
    asaas_id                         varchar(100) DEFAULT NULL,
    asaas_status                     varchar(100) DEFAULT NULL,
    asaas_link_cobranca              varchar(255) DEFAULT NULL,
    asaas_link_boleto                varchar(255) DEFAULT NULL,
    asaas_erro                       varchar(255) DEFAULT NULL,
    quitada                          boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE saidas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    tipo                             integer DEFAULT NULL,
    descricao                        varchar(100) NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    excluida_por                     integer DEFAULT NULL,
    excluida_em_nome_de              integer DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE saidas_parcelas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    saida                            integer NOT NULL,
    valor_previsto                   double precision NOT NULL,
    valor_pago                       double precision DEFAULT NULL,
    data_vencimento                  date NOT NULL,
    quitada                          boolean NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    quitacao_motivo                  varchar(100) DEFAULT NULL,
    excluida_por                     integer DEFAULT NULL,
    excluida_em_nome_de              integer DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE saidas_parcelas_pagamentos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    parcela                          integer NOT NULL,
    valor                            double precision DEFAULT NULL,
    data                             date DEFAULT NULL,
    observacoes                      varchar(100) DEFAULT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    estorno_motivo                   varchar(100) DEFAULT NULL,
    estornado_por                    integer DEFAULT NULL,
    estornado_em_nome_de             integer DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE saidas_tipos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    nome                             varchar(100) NOT NULL,
    status                           boolean NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE sorteios (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    ganhador                         integer DEFAULT NULL,
    nome                             varchar(100) NOT NULL,
    descricao                        text,
    data_inicio                      date NOT NULL,
    data_fim                         date NOT NULL,
    data_sorteio                     timestamptz DEFAULT NULL,
    usuario_sorteio                  integer DEFAULT NULL,
    tipo_sorteio                     varchar(30) DEFAULT NULL,
    status                           varchar(30) NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    regra_cupom                      varchar(10) NOT NULL DEFAULT 'venda',
    valor_cupom                      numeric(10,2) DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE sorteios_vendas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    sorteio                          integer DEFAULT NULL,
    venda                            bigint DEFAULT NULL,
    data                             timestamptz NOT NULL,
    ganhador                         boolean NOT NULL,
    numero                           integer NOT NULL DEFAULT '1',
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE testes_estilhos_colunas (
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    nome                             varchar(100) NOT NULL,
    estilo                           varchar(100) NOT NULL,
    status                           smallint NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE testes_estilhos_opcoes (
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    coluna                           integer NOT NULL,
    nome                             varchar(100) NOT NULL,
    status                           smallint NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE unidades (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    id_yungas                        integer DEFAULT NULL,
    tipo                             varchar(30) NOT NULL,
    pais                             varchar(100) NOT NULL,
    estado                           varchar(2) DEFAULT NULL,
    cidade                           varchar(100) NOT NULL,
    bairro                           varchar(100) NOT NULL,
    endereco                         varchar(100) NOT NULL,
    numero                           varchar(20) NOT NULL,
    nome                             varchar(255) DEFAULT NULL,
    ddi                              integer DEFAULT NULL,
    telefone                         varchar(20) DEFAULT NULL,
    email                            varchar(100) DEFAULT NULL,
    segunda_sexta_abertura           time DEFAULT NULL,
    segunda_sexta_fechamento         time DEFAULT NULL,
    sabado_abertura                  time DEFAULT NULL,
    sabado_fechamento                time DEFAULT NULL,
    domingo_abertura                 time DEFAULT NULL,
    domingo_fechamento               time DEFAULT NULL,
    convenio_segunda                 boolean NOT NULL DEFAULT true,
    convenio_terca                   boolean NOT NULL DEFAULT true,
    convenio_quarta                  boolean NOT NULL DEFAULT true,
    convenio_quinta                  boolean NOT NULL DEFAULT true,
    convenio_sexta                   boolean NOT NULL DEFAULT true,
    convenio_sabado                  boolean NOT NULL DEFAULT true,
    convenio_domingo                 boolean NOT NULL DEFAULT true,
    royltes_produto_barbearia        double precision NOT NULL,
    royltes_produto_emporio          double precision NOT NULL,
    royltes_servico                  double precision NOT NULL,
    royltes_lavavip                  double precision NOT NULL,
    observacao                       varchar(250) DEFAULT NULL,
    latitude                         varchar(100) DEFAULT NULL,
    longitude                        varchar(100) DEFAULT NULL,
    potencial_franquia               double precision DEFAULT NULL,
    visivel_app                      boolean NOT NULL,
    nps                              double precision DEFAULT NULL,
    reducao_potencial                double precision NOT NULL,
    link_boas_vindas                 varchar(200) DEFAULT NULL,
    clientes_atualizar               integer DEFAULT NULL,
    indicacao_comissao               integer DEFAULT NULL,
    data_inauguracao                 date DEFAULT NULL,
    agenda_primeiro_nome             boolean NOT NULL,
    relatorio_dashboard_colaboradores timestamptz DEFAULT NULL,
    relatorio_atendimentos           timestamptz DEFAULT NULL,
    fidelizacao_unidade_dias         integer NOT NULL,
    fidelizacao_unidade_visitas      integer NOT NULL,
    pontuacao_validade_dias          integer NOT NULL DEFAULT '365',
    cashback                         integer NOT NULL,
    faturamento_nome                 varchar(100) DEFAULT NULL,
    faturamento_documento            varchar(100) DEFAULT NULL,
    faturamento_email                varchar(100) DEFAULT NULL,
    faturamento_telefone             varchar(100) DEFAULT NULL,
    faturamento_cep                  varchar(100) DEFAULT NULL,
    faturamento_logradouro           varchar(100) DEFAULT NULL,
    faturamento_numero               varchar(100) DEFAULT NULL,
    faturamento_complemento          varchar(100) DEFAULT NULL,
    faturamento_bairro               varchar(100) DEFAULT NULL,
    faturamento_socio_adm_nome       varchar(100) DEFAULT NULL,
    faturamento_socio_adm_cpf        varchar(100) DEFAULT NULL,
    asaas_id                         varchar(100) DEFAULT NULL,
    whatsapp_ativo                   boolean NOT NULL,
    whatsapp_api_key                 varchar(100) DEFAULT NULL,
    whatsapp_instancia               varchar(100) DEFAULT NULL,
    whatsapp_provedor                varchar(20) NOT NULL DEFAULT 'evolution',
    hash                             varchar(100) NOT NULL,
    hash_anterior                    varchar(100) DEFAULT NULL,
    hash_anterior_expira_em          timestamptz DEFAULT NULL,
    hash_anterior_usado_em           timestamptz DEFAULT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE unidades_mensagerias (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    aniversario_whatsapp             text,
    aniversario_app                  text,
    pesquisa_satisfacao_whatsapp     text,
    pesquisa_satisfacao_app          text,
    sentimos_sua_falta_whatsapp      text,
    sentimos_sua_falta_app           text,
    cliente_chegou_whatsapp          text,
    programa_fidelidade_resgate_codigo_whatsapp text,
    programa_fidelidade_resgate_codigo_app text,
    programa_fidelidade_resgate_realizado_whatsapp text,
    programa_fidelidade_resgate_realizado_app text,
    programa_fidelidade_consumo_whatsapp text,
    programa_fidelidade_consumo_app  text,
    cupom_gerado_whatsapp            text,
    cupom_gerado_app                 text,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE unidades_socios (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer DEFAULT NULL,
    nome                             varchar(100) NOT NULL,
    cpf                              varchar(30) DEFAULT NULL,
    profissao                        varchar(100) DEFAULT NULL,
    telefone                         varchar(30) DEFAULT NULL,
    telefone_sem_mascara             varchar(30) DEFAULT NULL,
    email                            varchar(100) DEFAULT NULL,
    pais                             varchar(100) DEFAULT NULL,
    cep                              varchar(20) DEFAULT NULL,
    estado                           varchar(2) DEFAULT NULL,
    cidade                           varchar(100) DEFAULT NULL,
    bairro                           varchar(100) DEFAULT NULL,
    logradouro                       varchar(100) DEFAULT NULL,
    numero                           varchar(100) DEFAULT NULL,
    complemento                      varchar(100) DEFAULT NULL,
    data_nascimento                  timestamptz DEFAULT NULL,
    tags                             text,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE unidades_whatsapp_eventos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    evento                           varchar(20) NOT NULL,
    resultado                        varchar(10) NOT NULL,
    motivo                           varchar(30) DEFAULT NULL,
    gravado_por                      integer NOT NULL,
    em_nome_de                       integer DEFAULT NULL,
    data                             timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE usuarios (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    unidade                          integer NOT NULL,
    grupo                            integer NOT NULL,
    nome                             varchar(100) NOT NULL,
    telefone                         varchar(30) DEFAULT NULL,
    telefone_sem_mascara             varchar(30) DEFAULT NULL,
    telefone_bkp                     varchar(20) DEFAULT NULL,
    data_nascimento                  date DEFAULT NULL,
    data_contratacao                 date DEFAULT NULL,
    email                            varchar(100) NOT NULL,
    login                            varchar(100) NOT NULL,
    sexo                             varchar(1) NOT NULL,
    cor                              varchar(10) DEFAULT NULL,
    cor_letra                        varchar(10) DEFAULT NULL,
    comissao_produto                 double precision DEFAULT NULL,
    comissao_servico                 double precision DEFAULT NULL,
    tempo_atendimento                double precision DEFAULT NULL,
    segunda_abertura                 time DEFAULT NULL,
    segunda_fechamento               time DEFAULT NULL,
    segunda_almoco_inicio            time DEFAULT NULL,
    segunda_almoco_fim               time DEFAULT NULL,
    terca_abertura                   time DEFAULT NULL,
    terca_fechamento                 time DEFAULT NULL,
    terca_almoco_inicio              time DEFAULT NULL,
    terca_almoco_fim                 time DEFAULT NULL,
    quarta_abertura                  time DEFAULT NULL,
    quarta_fechamento                time DEFAULT NULL,
    quarta_almoco_inicio             time DEFAULT NULL,
    quarta_almoco_fim                time DEFAULT NULL,
    quinta_abertura                  time DEFAULT NULL,
    quinta_fechamento                time DEFAULT NULL,
    quinta_almoco_inicio             time DEFAULT NULL,
    quinta_almoco_fim                time DEFAULT NULL,
    sexta_abertura                   time DEFAULT NULL,
    sexta_fechamento                 time DEFAULT NULL,
    sexta_almoco_inicio              time DEFAULT NULL,
    sexta_almoco_fim                 time DEFAULT NULL,
    sabado_abertura                  time DEFAULT NULL,
    sabado_fechamento                time DEFAULT NULL,
    sabado_almoco_inicio             time DEFAULT NULL,
    sabado_almoco_fim                time DEFAULT NULL,
    domingo_abertura                 time DEFAULT NULL,
    domingo_fechamento               time DEFAULT NULL,
    domingo_almoco_inicio            time DEFAULT NULL,
    domingo_almoco_fim               time DEFAULT NULL,
    ferias_inicio                    date DEFAULT NULL,
    ferias_fim                       date DEFAULT NULL,
    senha                            varchar(255) NOT NULL,
    salt                             varchar(255) DEFAULT NULL,
    token_web                        text,
    token_trocar_senha               text,
    imagem                           varchar(100) DEFAULT 'padrao.png',
    visivel_agenda                   varchar(10) NOT NULL,
    visivel_pdv                      boolean NOT NULL,
    visivel_dashboard                boolean NOT NULL DEFAULT true,
    tema                             varchar(10) DEFAULT NULL,
    nps                              double precision DEFAULT NULL,
    relatorio_dashboard_colaboradores timestamptz DEFAULT NULL,
    ordernacao_app                   integer NOT NULL,
    onesignal_id                     varchar(100) DEFAULT NULL,
    cep                              varchar(20) DEFAULT NULL,
    estado                           varchar(2) DEFAULT NULL,
    cidade                           varchar(100) DEFAULT NULL,
    bairro                           varchar(100) DEFAULT NULL,
    logradouro                       varchar(100) DEFAULT NULL,
    numero                           varchar(100) DEFAULT NULL,
    complemento                      varchar(100) DEFAULT NULL,
    cpf                              varchar(100) DEFAULT NULL,
    cnpj                             varchar(100) DEFAULT NULL,
    inss                             varchar(100) DEFAULT NULL,
    status                           integer NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE usuarios_acessos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    usuario                          integer NOT NULL,
    local                            varchar(255) NOT NULL DEFAULT '',
    data                             timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE usuarios_areas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    usuario                          integer NOT NULL,
    area                             integer NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE usuarios_comissoes_extras (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    usuario                          integer NOT NULL,
    produto                          integer NOT NULL,
    comissao                         double precision NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE usuarios_horarios (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    usuario                          integer NOT NULL,
    vigente_desde                    timestamptz NOT NULL,
    porta                            varchar(10) NOT NULL,
    gravado_por                      integer DEFAULT NULL,
    em_nome_de                       integer DEFAULT NULL,
    status                           integer NOT NULL,
    visivel_agenda                   varchar(10) NOT NULL,
    tempo_atendimento                double precision DEFAULT NULL,
    segunda_abertura                 time DEFAULT NULL,
    segunda_fechamento               time DEFAULT NULL,
    segunda_almoco_inicio            time DEFAULT NULL,
    segunda_almoco_fim               time DEFAULT NULL,
    terca_abertura                   time DEFAULT NULL,
    terca_fechamento                 time DEFAULT NULL,
    terca_almoco_inicio              time DEFAULT NULL,
    terca_almoco_fim                 time DEFAULT NULL,
    quarta_abertura                  time DEFAULT NULL,
    quarta_fechamento                time DEFAULT NULL,
    quarta_almoco_inicio             time DEFAULT NULL,
    quarta_almoco_fim                time DEFAULT NULL,
    quinta_abertura                  time DEFAULT NULL,
    quinta_fechamento                time DEFAULT NULL,
    quinta_almoco_inicio             time DEFAULT NULL,
    quinta_almoco_fim                time DEFAULT NULL,
    sexta_abertura                   time DEFAULT NULL,
    sexta_fechamento                 time DEFAULT NULL,
    sexta_almoco_inicio              time DEFAULT NULL,
    sexta_almoco_fim                 time DEFAULT NULL,
    sabado_abertura                  time DEFAULT NULL,
    sabado_fechamento                time DEFAULT NULL,
    sabado_almoco_inicio             time DEFAULT NULL,
    sabado_almoco_fim                time DEFAULT NULL,
    domingo_abertura                 time DEFAULT NULL,
    domingo_fechamento               time DEFAULT NULL,
    domingo_almoco_inicio            time DEFAULT NULL,
    domingo_almoco_fim               time DEFAULT NULL,
    ferias_inicio                    date DEFAULT NULL,
    ferias_fim                       date DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE usuarios_servicos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    usuario                          integer NOT NULL,
    produto                          integer NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE vendas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               bigint GENERATED BY DEFAULT AS IDENTITY,
    usuario                          integer NOT NULL,
    autorizado_por                   integer DEFAULT NULL,
    autorizado_em                    timestamptz DEFAULT NULL,
    cliente                          integer DEFAULT NULL,
    caixa                            integer DEFAULT NULL,
    convenio                         integer DEFAULT NULL,
    debito                           integer DEFAULT NULL,
    valor_total                      double precision DEFAULT NULL,
    valor_recebido                   double precision DEFAULT NULL,
    valor_troco                      double precision DEFAULT NULL,
    desconto_motivo                  varchar(100) DEFAULT NULL,
    desconto_total                   double precision DEFAULT NULL,
    cancelado_motivo                 varchar(100) DEFAULT NULL,
    cancelado_em                     timestamptz DEFAULT NULL,
    cancelado_por                    integer DEFAULT NULL,
    venda_credito                    integer DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    comanda_temp                     boolean NOT NULL,
    nps_notificacao                  smallint NOT NULL DEFAULT '0',
    nps_respondido                   smallint NOT NULL DEFAULT '0',
    msg_rel_sem_retorno              smallint NOT NULL DEFAULT '0',
    nps                              double precision DEFAULT NULL,
    status                           integer DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE vendas_pagamentos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    venda                            bigint NOT NULL,
    forma_pagamento                  integer NOT NULL,
    valor                            double precision NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE vendas_produtos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               bigint GENERATED BY DEFAULT AS IDENTITY,
    venda                            bigint NOT NULL,
    colaborador                      integer NOT NULL,
    produto                          integer NOT NULL,
    pacote                           integer DEFAULT NULL,
    quantidade                       double precision NOT NULL,
    valor_unitario                   double precision NOT NULL,
    custo_unitario                   double precision DEFAULT NULL,
    valor_desconto                   double precision DEFAULT '0',
    desconto_motivo                  varchar(100) DEFAULT NULL,
    desconto_lancado_por             integer DEFAULT NULL,
    valor_total                      double precision NOT NULL,
    valor_total_relatorio            double precision NOT NULL,
    comissao                         double precision NOT NULL,
    vendedor_do_pacote               integer DEFAULT NULL,
    cota_do_vendedor                 double precision DEFAULT NULL,
    pacote_recusado                  boolean NOT NULL DEFAULT false,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE vipclass (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    requisito                        integer DEFAULT NULL,
    nome                             varchar(100) NOT NULL,
    descricao                        text,
    carga_horaria                    integer NOT NULL,
    capa                             varchar(100) DEFAULT NULL,
    certificado                      varchar(100) DEFAULT NULL,
    hash                             varchar(100) DEFAULT NULL,
    status                           integer DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE vipclass_aulas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    vipclass                         integer NOT NULL,
    plataforma                       varchar(10) NOT NULL,
    descricao                        varchar(100) NOT NULL,
    link                             varchar(255) NOT NULL,
    hash                             varchar(100) NOT NULL,
    ordenacao                        integer NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE vipclass_checkpoints_perguntas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    vipclass                         integer NOT NULL,
    pergunta                         varchar(255) NOT NULL,
    hash                             varchar(100) NOT NULL,
    ordenacao                        integer NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE vipclass_checkpoints_respostas (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    pergunta                         integer NOT NULL,
    resposta                         varchar(255) NOT NULL,
    resposta_correta                 boolean NOT NULL,
    hash                             varchar(100) NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE vipclass_checkpoints_usuarios (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    vipclass                         integer NOT NULL,
    usuario                          integer NOT NULL,
    nota                             double precision NOT NULL,
    data                             timestamptz NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE vipclass_grupos (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    vipclass                         integer NOT NULL,
    grupo                            integer NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE vipclass_materiais (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    vipclass                         integer NOT NULL,
    descricao                        varchar(100) NOT NULL,
    arquivo                          varchar(100) NOT NULL,
    extensao                         varchar(10) NOT NULL,
    nome_original                    varchar(100) NOT NULL,
    hash                             varchar(100) NOT NULL,
    status                           boolean NOT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE vipclass_unidades (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    vipclass                         integer NOT NULL,
    unidade                          integer NOT NULL,
    PRIMARY KEY (id)
);

-- ----------------------------------------------------------------------
CREATE TABLE visagismo (
    inquilino_id                     integer NOT NULL DEFAULT current_setting('app.inquilino_id')::integer,
    id                               integer GENERATED BY DEFAULT AS IDENTITY,
    usuario                          integer NOT NULL,
    cliente                          integer DEFAULT NULL,
    imagem                           varchar(100) DEFAULT NULL,
    imagem_detectface                varchar(100) DEFAULT NULL,
    resposta                         text,
    feedback_nota                    integer DEFAULT NULL,
    feedback_texto                   varchar(255) DEFAULT NULL,
    tempo                            integer NOT NULL,
    nome                             varchar(100) DEFAULT NULL,
    telefone                         varchar(100) DEFAULT NULL,
    status                           varchar(20) DEFAULT NULL,
    data_criacao                     timestamptz NOT NULL,
    data_alteracao                   timestamptz DEFAULT NULL,
    PRIMARY KEY (id)
);


-- ======================================================================
-- Índices. Em tabela com escopo, TODO índice começa por inquilino_id: um
-- índice que não lidere por ele faz o banco varrer dados de todos os
-- inquilinos para responder sobre um.
-- ======================================================================

CREATE INDEX agendas_FK_AGENDAS_colaborador ON agendas (inquilino_id, colaborador, data);
CREATE INDEX agendas_FK_AGENDAS_cliente ON agendas (inquilino_id, cliente);
CREATE INDEX agendas_FK_AGENDAS_produto ON agendas (inquilino_id, produto);
CREATE INDEX agendas_FK_AGENDAS_fechamento ON agendas (inquilino_id, fechamento);
CREATE INDEX agendas_IDX_AGENDAS_id_pai ON agendas (inquilino_id, id_pai);
CREATE INDEX agendas_exclusoes_idx_agendas_exclusoes_data_exclusao ON agendas_exclusoes (inquilino_id, data_exclusao);
CREATE INDEX agendas_fechamentos_FK_AGENDAS_FECHAMENTOS_colaborador ON agendas_fechamentos (inquilino_id, colaborador);
CREATE INDEX agendas_fechamentos_FK_AGENDAS_FECHAMENTOS_unidade ON agendas_fechamentos (inquilino_id, unidade);
CREATE INDEX arquivos_FK_ARQUIVOS_categoria ON arquivos (inquilino_id, categoria);
CREATE INDEX arquivos_acessos_IDX_ARQUIVOS_ACESSOS_arquivo_aberto_em ON arquivos_acessos (inquilino_id, arquivo, aberto_em);
CREATE INDEX arquivos_acessos_FK_ARQUIVOS_ACESSOS_unidade ON arquivos_acessos (inquilino_id, unidade);
CREATE UNIQUE INDEX assistentes_UNQ_ASSISTENTES_pagina_publica ON assistentes (inquilino_id, pagina_publica);
CREATE INDEX assistentes_conversas_IDX_ASSISTENTES_CONVERSAS_usuario_data ON assistentes_conversas (inquilino_id, usuario, data_ultima);
CREATE INDEX assistentes_conversas_FK_ASSISTENTES_CONVERSAS_assistente ON assistentes_conversas (inquilino_id, assistente);
CREATE INDEX assistentes_conversas_FK_ASSISTENTES_CONVERSAS_unidade ON assistentes_conversas (inquilino_id, unidade);
CREATE INDEX assistentes_grupos_FK_ASSISTENTES_GRUPO_assistente ON assistentes_grupos (inquilino_id, assistente);
CREATE INDEX assistentes_grupos_FK_ASSISTENTES_GRUPO_grupo ON assistentes_grupos (inquilino_id, grupo);
CREATE INDEX assistentes_mensagens_FK_ASSISTENTES_MENSAGENS_conversa ON assistentes_mensagens (inquilino_id, conversa);
CREATE INDEX assistentes_unidades_FK_ASSISTENTES_UNIDADES_assistente ON assistentes_unidades (inquilino_id, assistente);
CREATE INDEX assistentes_unidades_FK_ASSISTENTES_UNIDADES_unidade ON assistentes_unidades (inquilino_id, unidade);
CREATE INDEX assistentes_uso_IDX_ASSISTENTES_USO_dia ON assistentes_uso (inquilino_id, dia);
CREATE INDEX assistentes_uso_FK_ASSISTENTES_USO_assistente ON assistentes_uso (inquilino_id, assistente);
CREATE INDEX bairros_FK_TB_BAIRRO_bai_cid_id ON bairros (cidade);
CREATE INDEX caixas_FK_CAIXAS_usuario ON caixas (inquilino_id, usuario);
CREATE INDEX caixas_retiradas_FK_CAIXAS_RETIRADAS_caixa ON caixas_retiradas (inquilino_id, caixa);
CREATE INDEX caixas_retiradas_FK_CAIXAS_RETIRADAS_saida ON caixas_retiradas (inquilino_id, saida);
CREATE INDEX cidades_FK_CIDADE_estado ON cidades (estado);
CREATE INDEX clientes_FK_CLIENTES_convenio ON clientes (inquilino_id, convenio);
CREATE INDEX clientes_FK_CLIENTES_unidade ON clientes (inquilino_id, unidade);
CREATE INDEX clientes_FK_CLIENTES_responsavel ON clientes (inquilino_id, responsavel);
CREATE INDEX clientes_FK_CLIENTES_ultima_visita_unidade ON clientes (inquilino_id, ultima_visita_unidade);
CREATE INDEX clientes_FK_CLIENTES_ultima_visita_colaborador ON clientes (inquilino_id, ultima_visita_colaborador);
CREATE INDEX clientes_FK_CLIENTES_indicacao ON clientes (inquilino_id, indicacao);
CREATE UNIQUE INDEX clientes_aparelhos_uq_clientes_aparelhos_identificador ON clientes_aparelhos (inquilino_id, identificador);
CREATE INDEX clientes_aparelhos_idx_clientes_aparelhos_cliente ON clientes_aparelhos (inquilino_id, cliente);
CREATE INDEX clientes_creditos_FK_CLIENTES_CREDITOS_unidade ON clientes_creditos (inquilino_id, unidade);
CREATE INDEX clientes_creditos_FK_CLIENTES_CREDITOS_cliente ON clientes_creditos (inquilino_id, cliente);
CREATE INDEX clientes_creditos_devolucoes_FK_CLIENTES_CREDITOS_DEVOL_54a4071 ON clientes_creditos_devolucoes (inquilino_id, cliente, unidade);
CREATE INDEX clientes_creditos_devolucoes_FK_CLIENTES_CREDITOS_DEVOL_4e010ac ON clientes_creditos_devolucoes (inquilino_id, unidade);
CREATE INDEX clientes_creditos_devolucoes_FK_CLIENTES_CREDITOS_DEVOL_4f4aa97 ON clientes_creditos_devolucoes (inquilino_id, autorizado_por);
CREATE INDEX clientes_creditos_devolucoes_FK_CLIENTES_CREDITOS_DEVOL_66bb5e9 ON clientes_creditos_devolucoes (inquilino_id, retirada);
CREATE INDEX clientes_debitos_FK_CLIENTES_DEBITOS_unidade ON clientes_debitos (inquilino_id, unidade);
CREATE INDEX clientes_debitos_FK_CLIENTES_DEBITOS_cliente ON clientes_debitos (inquilino_id, cliente);
CREATE INDEX clientes_debitos_FK_CLIENTES_DEBITOS_venda ON clientes_debitos (inquilino_id, venda);
CREATE INDEX clientes_pacotes_FK_CLIENTES_PACOTES_item ON clientes_pacotes (inquilino_id, item);
CREATE INDEX clientes_pacotes_FK_CLIENTES_PACOTES_venda ON clientes_pacotes (inquilino_id, venda);
CREATE INDEX clientes_pacotes_FK_CLIENTES_PACOTES_unidade ON clientes_pacotes (inquilino_id, unidade);
CREATE INDEX clientes_pacotes_FK_CLIENTES_PACOTES_cliente ON clientes_pacotes (inquilino_id, cliente);
CREATE UNIQUE INDEX clientes_sessoes_uq_clientes_sessoes_token ON clientes_sessoes (token_hash);
CREATE INDEX clientes_sessoes_idx_clientes_sessoes_telefone ON clientes_sessoes (telefone);
CREATE INDEX clientes_validacoes_cadastrais_idx_clientes_validacoes_cliente ON clientes_validacoes_cadastrais (inquilino_id, cliente);
CREATE INDEX clientes_validacoes_cadastrais_idx_clientes_validacoes_venda ON clientes_validacoes_cadastrais (inquilino_id, venda);
CREATE INDEX clientes_validacoes_cadastrais_idx_clientes_validacoes_usuario ON clientes_validacoes_cadastrais (inquilino_id, usuario);
CREATE UNIQUE INDEX confirmacoes_UNQ_CONFIRMACOES_usuario_chave ON confirmacoes (inquilino_id, usuario, chave);
CREATE INDEX confirmacoes_IDX_CONFIRMACOES_data ON confirmacoes (inquilino_id, data);
CREATE INDEX convenios_unidades_FK_CONVENIOS_UNIDADES_unidade ON convenios_unidades (inquilino_id, unidade);
CREATE INDEX convenios_unidades_FK_CONVENIOS_UNIDADES_convenio ON convenios_unidades (inquilino_id, convenio);
CREATE INDEX cupons_FK_CUPONS_unidade ON cupons (inquilino_id, unidade);
CREATE INDEX cupons_FK_CUPONS_produto_regra ON cupons (inquilino_id, produto_regra);
CREATE INDEX cupons_FK_CUPONS_produto_oferecido ON cupons (inquilino_id, produto_oferecido);
CREATE INDEX cupons_clientes_FK_CUPONS_CLIENTES_cupom ON cupons_clientes (inquilino_id, cupom);
CREATE INDEX cupons_clientes_FK_CUPONS_CLIENTES_venda ON cupons_clientes (inquilino_id, venda);
CREATE INDEX cupons_clientes_FK_CUPONS_CLIENTES_cliente ON cupons_clientes (inquilino_id, cliente);
CREATE INDEX cupons_clientes_FK_CUPONS_CLIENTES_produto_oferecido ON cupons_clientes (inquilino_id, produto_oferecido);
CREATE INDEX dashboard_colaboradores_FK_DASHBOARD_COLABORADORES_unidade ON dashboard_colaboradores (inquilino_id, unidade);
CREATE INDEX dashboard_colaboradores_FK_DASHBOARD_COLABORADORES_colaborador ON dashboard_colaboradores (inquilino_id, colaborador);
CREATE INDEX dashboard_faturamento_FK_DASHBOARD_FATURAMENTOS_unidade ON dashboard_faturamento (inquilino_id, unidade);
CREATE INDEX dashboard_movimentos_FK_DASHBOARD_MOVIMENTOS_unidade ON dashboard_movimentos (inquilino_id, unidade);
CREATE INDEX gorjetas_FK_GORJETAS_venda ON gorjetas (inquilino_id, venda);
CREATE INDEX gorjetas_FK_GORJETAS_colaborador ON gorjetas (inquilino_id, colaborador);
CREATE INDEX indicacoes_FFK_INDICACOES_unidade ON indicacoes (inquilino_id, unidade);
CREATE INDEX indicacoes_FFK_INDICACOES_cliente ON indicacoes (inquilino_id, cliente);
CREATE INDEX indicacoes_FFK_INDICACOES_convidado ON indicacoes (inquilino_id, convidado);
CREATE INDEX indicacoes_FK_INDICACOES_primeira_venda ON indicacoes (inquilino_id, primeira_venda);
CREATE INDEX logradouros_FK_LOGRADOURO_bairro ON logradouros (bairro);
CREATE INDEX mensagens_grupos_FK_MENSAGENS_GRUPOS_mensagem ON mensagens_grupos (inquilino_id, mensagem);
CREATE INDEX mensagens_grupos_FK_MENSAGENS_GRUPOS_grupo ON mensagens_grupos (inquilino_id, grupo);
CREATE INDEX mensagens_unidades_FK_MENSAGENS_UNIDADES_mensagem ON mensagens_unidades (inquilino_id, mensagem);
CREATE INDEX mensagens_unidades_FK_MENSAGENS_UNIDADES_unidade ON mensagens_unidades (inquilino_id, unidade);
CREATE INDEX notificacoes_FK_NOTIFICACOES_unidade ON notificacoes (inquilino_id, unidade);
CREATE INDEX notificacoes_FK_NOTIFICACOES_usuario ON notificacoes (inquilino_id, usuario);
CREATE INDEX notificacoes_clientes_FK_NOTIFICACOES_CLIENTES_notificacao ON notificacoes_clientes (inquilino_id, notificacao);
CREATE INDEX notificacoes_clientes_FK_NOTIFICACOES_CLIENTES_cliente ON notificacoes_clientes (inquilino_id, cliente);
CREATE INDEX nps_FK_NPS_unidade ON nps (inquilino_id, unidade);
CREATE INDEX nps_FK_NPS_cliente ON nps (inquilino_id, cliente);
CREATE INDEX nps_itens_FK_NPS_ITENS_nps ON nps_itens (inquilino_id, nps);
CREATE INDEX nps_itens_FK_NPS_ITENS_venda ON nps_itens (inquilino_id, venda);
CREATE INDEX nps_itens_FK_NPS_ITENS_colaborador ON nps_itens (inquilino_id, colaborador);
CREATE INDEX nps_resultados_colaboradores_FK_NPS_RESULTADOS_COLABORA_69b370e ON nps_resultados_colaboradores (inquilino_id, colaborador);
CREATE INDEX nps_resultados_unidades_FK_NPS_RESULTADOS_UNIDADES_unidade ON nps_resultados_unidades (inquilino_id, unidade);
CREATE INDEX pacotes_itens_FK_PACOTES_ITENS_item ON pacotes_itens (inquilino_id, item);
CREATE INDEX pacotes_itens_FK_PACOTES_ITENS_pacote ON pacotes_itens (inquilino_id, pacote);
CREATE INDEX pesquisas_perguntas_FK_PESQUISAS_PERGUNTAS_pesquisa ON pesquisas_perguntas (inquilino_id, pesquisa);
CREATE INDEX pesquisas_respostas_FK_PESQUISAS_RESPOSTAS_pergunta ON pesquisas_respostas (inquilino_id, pergunta);
CREATE INDEX pontuacoes_historicos_FK_PONTUACOES_HISTORICOS_autorizado_por ON pontuacoes_historicos (inquilino_id, autorizado_por);
CREATE INDEX pontuacoes_historicos_FK_PONTUACOES_HISTORICOS_cliente ON pontuacoes_historicos (inquilino_id, cliente);
CREATE INDEX pontuacoes_historicos_FK_PONTUACOES_HISTORICOS_unidade ON pontuacoes_historicos (inquilino_id, unidade);
CREATE INDEX pontuacoes_historicos_FK_PONTUACOES_HISTORICOS_venda ON pontuacoes_historicos (inquilino_id, venda);
CREATE INDEX privilegios_FK_PRIVILEGIOS_grupo ON privilegios (inquilino_id, grupo);
CREATE INDEX privilegios_FK_PRIVILEGIOS_funcionalidade ON privilegios (inquilino_id, funcionalidade);
CREATE INDEX privilegios_usuarios_FK_PRIVILEGIOS_USUARIOS_usuario ON privilegios_usuarios (inquilino_id, usuario);
CREATE INDEX privilegios_usuarios_FK_PRIVILEGIOS_USUARIOS_funcionalidade ON privilegios_usuarios (inquilino_id, funcionalidade);
CREATE INDEX produtos_FK_PRODUTOS_unidade ON produtos (inquilino_id, unidade);
CREATE INDEX produtos_FK_PRODUTOS_area ON produtos (inquilino_id, area);
CREATE INDEX produtos_FK_PRODUTOS_tag ON produtos (inquilino_id, tag);
CREATE INDEX produtos_estoque_FK_PRODUTOS_ENTRADAS_produto ON produtos_estoque (inquilino_id, produto);
CREATE INDEX produtos_estoque_FK_PRODUTOS_ENTRADAS_usuario ON produtos_estoque (inquilino_id, usuario);
CREATE INDEX produtos_estoque_FK_PRODUTOS_ENTRADAS_solicitado_por ON produtos_estoque (inquilino_id, solicitado_por);
CREATE INDEX produtos_estoque_IDX_PRODUTOS_ESTOQUE_data_criacao ON produtos_estoque (inquilino_id, data_criacao);
CREATE INDEX royalties_FK_ROYALTIES_unidade ON royalties (inquilino_id, unidade);
CREATE INDEX royalties_aliquotas_FK_ROYALTIES_ALIQUOTAS_unidade ON royalties_aliquotas (inquilino_id, unidade, ciclo_inicial);
CREATE INDEX royalties_faturas_FK_ROYALTIES_FATURAS_unidade ON royalties_faturas (inquilino_id, unidade);
CREATE INDEX saidas_FK_SAIDAS_tipo ON saidas (inquilino_id, tipo);
CREATE INDEX saidas_FK_SAIDAS_unidade ON saidas (inquilino_id, unidade);
CREATE INDEX saidas_parcelas_FK_SAIDAS_PARCELAS_saida ON saidas_parcelas (inquilino_id, saida);
CREATE INDEX saidas_parcelas_pagamentos_FK_SAIDAS_PARCELAS_PAGAMENTO_971b8fc ON saidas_parcelas_pagamentos (inquilino_id, parcela);
CREATE INDEX sorteios_FK_SORTEIOS_ganhador ON sorteios (inquilino_id, ganhador);
CREATE INDEX sorteios_FK_SORTEIOS_usuario_sorteio ON sorteios (inquilino_id, usuario_sorteio);
CREATE INDEX sorteios_vendas_FK_SORTEIOS_VENDAS_sorteio ON sorteios_vendas (inquilino_id, sorteio);
CREATE INDEX sorteios_vendas_FK_SORTEIOS_VENDAS_venda ON sorteios_vendas (inquilino_id, venda);
CREATE INDEX testes_estilhos_opcoes_FK_TESTES_ESTILHOS_coluna ON testes_estilhos_opcoes (coluna);
CREATE INDEX unidades_idx_unidade_status ON unidades (inquilino_id, status);
CREATE INDEX unidades_idx_unidade_pais_estado_cidade_bairro ON unidades (inquilino_id, pais, estado, cidade, bairro);
CREATE INDEX unidades_mensagerias_FK_UNIDADES_MENSAGERIA_unidade ON unidades_mensagerias (inquilino_id, unidade);
CREATE INDEX unidades_socios_FK_UNIDADES_SOCIOS_unidade ON unidades_socios (inquilino_id, unidade);
CREATE INDEX unidades_whatsapp_eventos_IDX_WHATSAPP_EVENTOS_unidade_data ON unidades_whatsapp_eventos (inquilino_id, unidade, data);
CREATE INDEX usuarios_FK_USUARIOS_grupo ON usuarios (inquilino_id, grupo);
CREATE INDEX usuarios_FK_USUARIOS_unidade ON usuarios (inquilino_id, unidade);
CREATE INDEX usuarios_idx_usuarios_unidade ON usuarios (inquilino_id, unidade);
CREATE INDEX usuarios_acessos_FK_USUARIOS_ACESSOS_usuario ON usuarios_acessos (inquilino_id, usuario);
CREATE INDEX usuarios_acessos_idx_acesso_usuario_data ON usuarios_acessos (inquilino_id, usuario, data);
CREATE INDEX usuarios_areas_FK_USUARIOS_AREAS_usuario ON usuarios_areas (inquilino_id, usuario);
CREATE INDEX usuarios_areas_FK_USUARIOS_AREAS_area ON usuarios_areas (inquilino_id, area);
CREATE INDEX usuarios_comissoes_extras_FK_USUARIOS_COMISSOES_EXTRAS_usuario ON usuarios_comissoes_extras (inquilino_id, usuario);
CREATE INDEX usuarios_comissoes_extras_FK_USUARIOS_COMISSOES_EXTRAS_produto ON usuarios_comissoes_extras (inquilino_id, produto);
CREATE INDEX usuarios_horarios_FK_USUARIOS_HORARIOS_usuario ON usuarios_horarios (inquilino_id, usuario, vigente_desde);
CREATE INDEX usuarios_servicos_FK_USUARIOS_SERVICOS_usuario ON usuarios_servicos (inquilino_id, usuario);
CREATE INDEX usuarios_servicos_FK_USUARIOS_SERVICOS_produto ON usuarios_servicos (inquilino_id, produto);
CREATE INDEX vendas_FK_VENDAS_usuario ON vendas (inquilino_id, usuario);
CREATE INDEX vendas_FK_VENDAS_autorizado_por ON vendas (inquilino_id, autorizado_por);
CREATE INDEX vendas_FK_VENDAS_cancelado_por ON vendas (inquilino_id, cancelado_por);
CREATE INDEX vendas_FK_VENDAS_cliente ON vendas (inquilino_id, cliente, status, data_criacao);
CREATE INDEX vendas_FK_VENDAS_caixa ON vendas (inquilino_id, caixa);
CREATE INDEX vendas_FK_VENDAS_convenio ON vendas (inquilino_id, convenio);
CREATE INDEX vendas_FK_VENDAS_debito ON vendas (inquilino_id, debito);
CREATE INDEX vendas_idx_vendas_data_status ON vendas (inquilino_id, data_criacao, status, comanda_temp);
CREATE INDEX vendas_pagamentos_FK_VENDAS_PAGAMENTOS_venda ON vendas_pagamentos (inquilino_id, venda);
CREATE INDEX vendas_pagamentos_FK_VENDAS_PAGAMENTOS_forma_pagamento ON vendas_pagamentos (inquilino_id, forma_pagamento);
CREATE INDEX vendas_produtos_FK_VENDAS_PRODUTOS_venda ON vendas_produtos (inquilino_id, venda);
CREATE INDEX vendas_produtos_FK_VENDAS_PRODUTOS_colaborador ON vendas_produtos (inquilino_id, colaborador);
CREATE INDEX vendas_produtos_FK_VENDAS_PRODUTOS_produto ON vendas_produtos (inquilino_id, produto);
CREATE INDEX vendas_produtos_FK_VENDAS_PRODUTOS_pacote ON vendas_produtos (inquilino_id, pacote);
CREATE INDEX vendas_produtos_FK_VENDAS_PRODUTOS_desconto_lancado_por ON vendas_produtos (inquilino_id, desconto_lancado_por);
CREATE INDEX vendas_produtos_FK_VENDAS_PRODUTOS_vendedor_do_pacote ON vendas_produtos (inquilino_id, vendedor_do_pacote);
CREATE INDEX vipclass_FK_VIPCLASS_requisito ON vipclass (inquilino_id, requisito);
CREATE INDEX vipclass_aulas_FK_VIPCLASS_AULAS_vipclass ON vipclass_aulas (inquilino_id, vipclass);
CREATE INDEX vipclass_checkpoints_perguntas_FK_VIPCLASS_CHECKPOINTS__bd04c4a ON vipclass_checkpoints_perguntas (inquilino_id, vipclass);
CREATE INDEX vipclass_checkpoints_respostas_FK_VIPCLASS_CHECKPOINTS__7ac7db0 ON vipclass_checkpoints_respostas (inquilino_id, pergunta);
CREATE INDEX vipclass_checkpoints_usuarios_FK_VIPCLASS_CHECKPOINTS_U_9b31873 ON vipclass_checkpoints_usuarios (inquilino_id, vipclass);
CREATE INDEX vipclass_checkpoints_usuarios_FK_VIPCLASS_CHECKPOINTS_U_129fec5 ON vipclass_checkpoints_usuarios (inquilino_id, usuario);
CREATE INDEX vipclass_grupos_FK_VIPCLASS_GRUPO_vipclass ON vipclass_grupos (inquilino_id, vipclass);
CREATE INDEX vipclass_grupos_FK_VIPCLASS_GRUPO_grupo ON vipclass_grupos (inquilino_id, grupo);
CREATE INDEX vipclass_materiais_FK_VIPCLASS_MATERIAIS_vipclass ON vipclass_materiais (inquilino_id, vipclass);
CREATE INDEX vipclass_unidades_FK_VIPCLASS_UNIDADES_vipclass ON vipclass_unidades (inquilino_id, vipclass);
CREATE INDEX vipclass_unidades_FK_VIPCLASS_UNIDADES_unidade ON vipclass_unidades (inquilino_id, unidade);
CREATE INDEX visagismo_FK_VISAGISMO_usuario ON visagismo (inquilino_id, usuario);
CREATE INDEX visagismo_FK_VISAGISMO_cliente ON visagismo (inquilino_id, cliente);


-- ======================================================================
-- Índices que o MySQL não tem. A medição de cada um está no gerador.
-- ======================================================================

CREATE INDEX logradouros_cep ON logradouros (cep);
CREATE INDEX logradouros_nome_trigrama ON logradouros USING gin (LOWER(nome) gin_trgm_ops);


-- ======================================================================
-- Chaves estrangeiras, depois de todas as tabelas existirem.
-- ======================================================================

ALTER TABLE agendas ADD CONSTRAINT FK_AGENDAS_cliente FOREIGN KEY (cliente) REFERENCES clientes (id);
ALTER TABLE agendas ADD CONSTRAINT FK_AGENDAS_colaborador FOREIGN KEY (colaborador) REFERENCES usuarios (id);
ALTER TABLE agendas ADD CONSTRAINT FK_AGENDAS_fechamento FOREIGN KEY (fechamento) REFERENCES agendas_fechamentos (id) ON DELETE CASCADE;
ALTER TABLE agendas ADD CONSTRAINT FK_AGENDAS_produto FOREIGN KEY (produto) REFERENCES produtos (id);
ALTER TABLE agendas_fechamentos ADD CONSTRAINT FK_AGENDAS_FECHAMENTOS_colaborador FOREIGN KEY (colaborador) REFERENCES usuarios (id);
ALTER TABLE agendas_fechamentos ADD CONSTRAINT FK_AGENDAS_FECHAMENTOS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE arquivos ADD CONSTRAINT FK_ARQUIVOS_categoria FOREIGN KEY (categoria) REFERENCES arquivos_categorias (id);
ALTER TABLE arquivos_acessos ADD CONSTRAINT FK_ARQUIVOS_ACESSOS_arquivo FOREIGN KEY (arquivo) REFERENCES arquivos (id);
ALTER TABLE arquivos_acessos ADD CONSTRAINT FK_ARQUIVOS_ACESSOS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE assistentes_conversas ADD CONSTRAINT FK_ASSISTENTES_CONVERSAS_assistente FOREIGN KEY (assistente) REFERENCES assistentes (id);
ALTER TABLE assistentes_conversas ADD CONSTRAINT FK_ASSISTENTES_CONVERSAS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE assistentes_conversas ADD CONSTRAINT FK_ASSISTENTES_CONVERSAS_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id);
ALTER TABLE assistentes_grupos ADD CONSTRAINT FK_ASSISTENTES_GRUPO_assistente FOREIGN KEY (assistente) REFERENCES assistentes (id);
ALTER TABLE assistentes_grupos ADD CONSTRAINT FK_ASSISTENTES_GRUPO_grupo FOREIGN KEY (grupo) REFERENCES grupos (id);
ALTER TABLE assistentes_mensagens ADD CONSTRAINT FK_ASSISTENTES_MENSAGENS_conversa FOREIGN KEY (conversa) REFERENCES assistentes_conversas (id) ON DELETE CASCADE;
ALTER TABLE assistentes_unidades ADD CONSTRAINT FK_ASSISTENTES_UNIDADES_assistente FOREIGN KEY (assistente) REFERENCES assistentes (id);
ALTER TABLE assistentes_unidades ADD CONSTRAINT FK_ASSISTENTES_UNIDADES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE assistentes_uso ADD CONSTRAINT FK_ASSISTENTES_USO_assistente FOREIGN KEY (assistente) REFERENCES assistentes (id);
ALTER TABLE bairros ADD CONSTRAINT FK_BAIRRO_cidade FOREIGN KEY (cidade) REFERENCES cidades (id);
ALTER TABLE caixas ADD CONSTRAINT FK_CAIXAS_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id);
ALTER TABLE caixas_retiradas ADD CONSTRAINT FK_CAIXAS_RETIRADAS_caixa FOREIGN KEY (caixa) REFERENCES caixas (id);
ALTER TABLE caixas_retiradas ADD CONSTRAINT FK_CAIXAS_RETIRADAS_saida FOREIGN KEY (saida) REFERENCES saidas (id);
ALTER TABLE cidades ADD CONSTRAINT FK_CIDADE_estado FOREIGN KEY (estado) REFERENCES estados (id);
ALTER TABLE clientes ADD CONSTRAINT FK_CLIENTES_convenio FOREIGN KEY (convenio) REFERENCES convenios (id);
ALTER TABLE clientes ADD CONSTRAINT FK_CLIENTES_indicacao FOREIGN KEY (indicacao) REFERENCES indicacoes (id) ON DELETE CASCADE ON UPDATE RESTRICT;
ALTER TABLE clientes ADD CONSTRAINT FK_CLIENTES_responsavel FOREIGN KEY (responsavel) REFERENCES clientes (id);
ALTER TABLE clientes ADD CONSTRAINT FK_CLIENTES_ultima_visita_colaborador FOREIGN KEY (ultima_visita_colaborador) REFERENCES usuarios (id);
ALTER TABLE clientes ADD CONSTRAINT FK_CLIENTES_ultima_visita_unidade FOREIGN KEY (ultima_visita_unidade) REFERENCES unidades (id);
ALTER TABLE clientes ADD CONSTRAINT FK_CLIENTES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE clientes_aparelhos ADD CONSTRAINT FK_CLIENTES_APARELHOS_cliente FOREIGN KEY (cliente) REFERENCES clientes (id) ON DELETE CASCADE ON UPDATE RESTRICT;
ALTER TABLE clientes_creditos ADD CONSTRAINT FK_CLIENTES_CREDITOS_cliente FOREIGN KEY (cliente) REFERENCES clientes (id) ON DELETE CASCADE ON UPDATE RESTRICT;
ALTER TABLE clientes_creditos ADD CONSTRAINT FK_CLIENTES_CREDITOS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE clientes_creditos_devolucoes ADD CONSTRAINT FK_CLIENTES_CREDITOS_DEVOLUCOES_autorizado_por FOREIGN KEY (autorizado_por) REFERENCES usuarios (id);
ALTER TABLE clientes_creditos_devolucoes ADD CONSTRAINT FK_CLIENTES_CREDITOS_DEVOLUCOES_cliente FOREIGN KEY (cliente) REFERENCES clientes (id);
ALTER TABLE clientes_creditos_devolucoes ADD CONSTRAINT FK_CLIENTES_CREDITOS_DEVOLUCOES_retirada FOREIGN KEY (retirada) REFERENCES caixas_retiradas (id);
ALTER TABLE clientes_creditos_devolucoes ADD CONSTRAINT FK_CLIENTES_CREDITOS_DEVOLUCOES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE clientes_debitos ADD CONSTRAINT FK_CLIENTES_DEBITOS_cliente FOREIGN KEY (cliente) REFERENCES clientes (id);
ALTER TABLE clientes_debitos ADD CONSTRAINT FK_CLIENTES_DEBITOS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE clientes_debitos ADD CONSTRAINT FK_CLIENTES_DEBITOS_venda FOREIGN KEY (venda) REFERENCES vendas (id);
ALTER TABLE clientes_pacotes ADD CONSTRAINT FK_CLIENTES_PACOTES_cliente FOREIGN KEY (cliente) REFERENCES clientes (id);
ALTER TABLE clientes_pacotes ADD CONSTRAINT FK_CLIENTES_PACOTES_item FOREIGN KEY (item) REFERENCES pacotes_itens (id) ON DELETE CASCADE;
ALTER TABLE clientes_pacotes ADD CONSTRAINT FK_CLIENTES_PACOTES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE clientes_pacotes ADD CONSTRAINT FK_CLIENTES_PACOTES_venda FOREIGN KEY (venda) REFERENCES vendas (id) ON DELETE CASCADE;
ALTER TABLE convenios_unidades ADD CONSTRAINT FK_CONVENIOS_UNIDADES_convenio FOREIGN KEY (convenio) REFERENCES convenios (id);
ALTER TABLE convenios_unidades ADD CONSTRAINT FK_CONVENIOS_UNIDADES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE cupons ADD CONSTRAINT FK_CUPONS_produto_oferecido FOREIGN KEY (produto_oferecido) REFERENCES produtos (id);
ALTER TABLE cupons ADD CONSTRAINT FK_CUPONS_produto_regra FOREIGN KEY (produto_regra) REFERENCES produtos (id);
ALTER TABLE cupons ADD CONSTRAINT FK_CUPONS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE cupons_clientes ADD CONSTRAINT FK_CUPONS_CLIENTES_cliente FOREIGN KEY (cliente) REFERENCES clientes (id);
ALTER TABLE cupons_clientes ADD CONSTRAINT FK_CUPONS_CLIENTES_cupom FOREIGN KEY (cupom) REFERENCES cupons (id);
ALTER TABLE cupons_clientes ADD CONSTRAINT FK_CUPONS_CLIENTES_produto_oferecido FOREIGN KEY (produto_oferecido) REFERENCES produtos (id);
ALTER TABLE cupons_clientes ADD CONSTRAINT FK_CUPONS_CLIENTES_venda FOREIGN KEY (venda) REFERENCES vendas (id);
ALTER TABLE dashboard_colaboradores ADD CONSTRAINT FK_DASHBOARD_COLABORADORES_colaborador FOREIGN KEY (colaborador) REFERENCES usuarios (id) ON DELETE CASCADE;
ALTER TABLE dashboard_colaboradores ADD CONSTRAINT FK_DASHBOARD_COLABORADORES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id) ON DELETE CASCADE;
ALTER TABLE dashboard_faturamento ADD CONSTRAINT FK_DASHBOARD_FATURAMENTOS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id) ON DELETE CASCADE;
ALTER TABLE dashboard_movimentos ADD CONSTRAINT FK_DASHBOARD_MOVIMENTOS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id) ON DELETE CASCADE;
ALTER TABLE gorjetas ADD CONSTRAINT FK_GORJETAS_colaborador FOREIGN KEY (colaborador) REFERENCES usuarios (id);
ALTER TABLE gorjetas ADD CONSTRAINT FK_GORJETAS_venda FOREIGN KEY (venda) REFERENCES vendas (id);
ALTER TABLE indicacoes ADD CONSTRAINT FFK_INDICACOES_convidado FOREIGN KEY (convidado) REFERENCES clientes (id) ON DELETE CASCADE ON UPDATE RESTRICT;
ALTER TABLE indicacoes ADD CONSTRAINT FFK_INDICACOES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE indicacoes ADD CONSTRAINT FK_INDICACOES_cliente FOREIGN KEY (cliente) REFERENCES clientes (id);
ALTER TABLE indicacoes ADD CONSTRAINT FK_INDICACOES_primeira_venda FOREIGN KEY (primeira_venda) REFERENCES vendas (id) ON DELETE SET NULL ON UPDATE RESTRICT;
ALTER TABLE logradouros ADD CONSTRAINT FK_LOGRADOURO_bairro FOREIGN KEY (bairro) REFERENCES bairros (id);
ALTER TABLE mensagens_grupos ADD CONSTRAINT FK_MENSAGENS_GRUPOS_grupo FOREIGN KEY (grupo) REFERENCES grupos (id);
ALTER TABLE mensagens_grupos ADD CONSTRAINT FK_MENSAGENS_GRUPOS_mensagem FOREIGN KEY (mensagem) REFERENCES mensagens (id);
ALTER TABLE mensagens_unidades ADD CONSTRAINT FK_MENSAGENS_UNIDADES_mensagem FOREIGN KEY (mensagem) REFERENCES mensagens (id);
ALTER TABLE mensagens_unidades ADD CONSTRAINT FK_MENSAGENS_UNIDADES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE notificacoes ADD CONSTRAINT FK_NOTIFICACOES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE notificacoes ADD CONSTRAINT FK_NOTIFICACOES_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id);
ALTER TABLE notificacoes_clientes ADD CONSTRAINT FK_NOTIFICACOES_CLIENTES_notificacao FOREIGN KEY (notificacao) REFERENCES notificacoes (id) ON DELETE CASCADE;
ALTER TABLE nps ADD CONSTRAINT FK_NPS_cliente FOREIGN KEY (cliente) REFERENCES clientes (id);
ALTER TABLE nps ADD CONSTRAINT FK_NPS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE nps_itens ADD CONSTRAINT FK_NPS_ITENS_colaborador FOREIGN KEY (colaborador) REFERENCES usuarios (id);
ALTER TABLE nps_itens ADD CONSTRAINT FK_NPS_ITENS_nps FOREIGN KEY (nps) REFERENCES nps (id) ON DELETE CASCADE;
ALTER TABLE nps_itens ADD CONSTRAINT FK_NPS_ITENS_venda FOREIGN KEY (venda) REFERENCES vendas (id);
ALTER TABLE nps_resultados_colaboradores ADD CONSTRAINT FK_NPS_RESULTADOS_COLABORADORES_colaborador FOREIGN KEY (colaborador) REFERENCES usuarios (id);
ALTER TABLE nps_resultados_unidades ADD CONSTRAINT FK_NPS_RESULTADOS_UNIDADES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE pacotes_itens ADD CONSTRAINT FK_PACOTES_ITENS_item FOREIGN KEY (item) REFERENCES produtos (id);
ALTER TABLE pacotes_itens ADD CONSTRAINT FK_PACOTES_ITENS_pacote FOREIGN KEY (pacote) REFERENCES produtos (id);
ALTER TABLE pesquisas_perguntas ADD CONSTRAINT FK_PESQUISAS_PERGUNTAS_pesquisa FOREIGN KEY (pesquisa) REFERENCES pesquisas (id) ON DELETE CASCADE;
ALTER TABLE pesquisas_respostas ADD CONSTRAINT FK_PESQUISAS_RESPOSTAS_pergunta FOREIGN KEY (pergunta) REFERENCES pesquisas_perguntas (id) ON DELETE CASCADE;
ALTER TABLE pontuacoes_historicos ADD CONSTRAINT FK_PONTUACOES_HISTORICOS_autorizado_por FOREIGN KEY (autorizado_por) REFERENCES usuarios (id);
ALTER TABLE pontuacoes_historicos ADD CONSTRAINT FK_PONTUACOES_HISTORICOS_cliente FOREIGN KEY (cliente) REFERENCES clientes (id) ON DELETE CASCADE ON UPDATE RESTRICT;
ALTER TABLE pontuacoes_historicos ADD CONSTRAINT FK_PONTUACOES_HISTORICOS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE pontuacoes_historicos ADD CONSTRAINT FK_PONTUACOES_HISTORICOS_venda FOREIGN KEY (venda) REFERENCES vendas (id);
ALTER TABLE privilegios ADD CONSTRAINT FK_PRIVILEGIOS_funcionalidade FOREIGN KEY (funcionalidade) REFERENCES funcionalidades (id) ON DELETE CASCADE;
ALTER TABLE privilegios ADD CONSTRAINT FK_PRIVILEGIOS_grupo FOREIGN KEY (grupo) REFERENCES grupos (id) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE privilegios_usuarios ADD CONSTRAINT FK_PRIVILEGIOS_USUARIOS_funcionalidade FOREIGN KEY (funcionalidade) REFERENCES funcionalidades (id) ON DELETE CASCADE;
ALTER TABLE privilegios_usuarios ADD CONSTRAINT FK_PRIVILEGIOS_USUARIOS_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id) ON DELETE CASCADE;
ALTER TABLE produtos ADD CONSTRAINT FK_PRODUTOS_area FOREIGN KEY (area) REFERENCES areas_atuacao (id);
ALTER TABLE produtos ADD CONSTRAINT FK_PRODUTOS_tag FOREIGN KEY (tag) REFERENCES produtos_tags (id);
ALTER TABLE produtos ADD CONSTRAINT FK_PRODUTOS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE produtos_estoque ADD CONSTRAINT FK_PRODUTOS_ENTRADAS_produto FOREIGN KEY (produto) REFERENCES produtos (id) ON DELETE CASCADE;
ALTER TABLE produtos_estoque ADD CONSTRAINT FK_PRODUTOS_ENTRADAS_solicitado_por FOREIGN KEY (solicitado_por) REFERENCES usuarios (id);
ALTER TABLE produtos_estoque ADD CONSTRAINT FK_PRODUTOS_ENTRADAS_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id);
ALTER TABLE royalties ADD CONSTRAINT FK_ROYALTIES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE royalties_aliquotas ADD CONSTRAINT FK_ROYALTIES_ALIQUOTAS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE royalties_faturas ADD CONSTRAINT FK_ROYALTIES_FATURAS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE saidas ADD CONSTRAINT FK_SAIDAS_tipo FOREIGN KEY (tipo) REFERENCES saidas_tipos (id);
ALTER TABLE saidas ADD CONSTRAINT FK_SAIDAS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id) ON DELETE CASCADE;
ALTER TABLE saidas_parcelas ADD CONSTRAINT FK_SAIDAS_PARCELAS_saida FOREIGN KEY (saida) REFERENCES saidas (id) ON DELETE CASCADE;
ALTER TABLE saidas_parcelas_pagamentos ADD CONSTRAINT FK_SAIDAS_PARCELAS_PAGAMENTOS_parcela FOREIGN KEY (parcela) REFERENCES saidas_parcelas (id) ON DELETE CASCADE;
ALTER TABLE sorteios ADD CONSTRAINT FK_SORTEIOS_ganhador FOREIGN KEY (ganhador) REFERENCES sorteios_vendas (id);
ALTER TABLE sorteios ADD CONSTRAINT FK_SORTEIOS_usuario_sorteio FOREIGN KEY (usuario_sorteio) REFERENCES usuarios (id);
ALTER TABLE sorteios_vendas ADD CONSTRAINT FK_SORTEIOS_VENDAS_sorteio FOREIGN KEY (sorteio) REFERENCES sorteios (id);
ALTER TABLE sorteios_vendas ADD CONSTRAINT FK_SORTEIOS_VENDAS_venda FOREIGN KEY (venda) REFERENCES vendas (id);
ALTER TABLE testes_estilhos_opcoes ADD CONSTRAINT FK_TESTES_ESTILHOS_coluna FOREIGN KEY (coluna) REFERENCES testes_estilhos_colunas (id);
ALTER TABLE unidades_mensagerias ADD CONSTRAINT FK_UNIDADES_MENSAGERIA_unidade FOREIGN KEY (unidade) REFERENCES unidades (id) ON DELETE CASCADE;
ALTER TABLE unidades_socios ADD CONSTRAINT FK_UNIDADES_SOCIOS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE unidades_whatsapp_eventos ADD CONSTRAINT FK_UNIDADES_WHATSAPP_EVENTOS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE usuarios ADD CONSTRAINT FK_USUARIOS_grupo FOREIGN KEY (grupo) REFERENCES grupos (id);
ALTER TABLE usuarios ADD CONSTRAINT FK_USUARIOS_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE usuarios_acessos ADD CONSTRAINT FK_USUARIOS_ACESSOS_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id);
ALTER TABLE usuarios_areas ADD CONSTRAINT FK_USUARIOS_AREAS_area FOREIGN KEY (area) REFERENCES areas_atuacao (id);
ALTER TABLE usuarios_areas ADD CONSTRAINT FK_USUARIOS_AREAS_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id) ON DELETE CASCADE;
ALTER TABLE usuarios_comissoes_extras ADD CONSTRAINT FK_USUARIOS_COMISSOES_EXTRAS_produto FOREIGN KEY (produto) REFERENCES produtos (id);
ALTER TABLE usuarios_comissoes_extras ADD CONSTRAINT FK_USUARIOS_COMISSOES_EXTRAS_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id);
ALTER TABLE usuarios_horarios ADD CONSTRAINT FK_USUARIOS_HORARIOS_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id);
ALTER TABLE usuarios_servicos ADD CONSTRAINT FK_USUARIOS_SERVICOS_produto FOREIGN KEY (produto) REFERENCES produtos (id);
ALTER TABLE usuarios_servicos ADD CONSTRAINT FK_USUARIOS_SERVICOS_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id);
ALTER TABLE vendas ADD CONSTRAINT FK_VENDAS_caixa FOREIGN KEY (caixa) REFERENCES caixas (id);
ALTER TABLE vendas ADD CONSTRAINT FK_VENDAS_cliente FOREIGN KEY (cliente) REFERENCES clientes (id);
ALTER TABLE vendas ADD CONSTRAINT FK_VENDAS_convenio FOREIGN KEY (convenio) REFERENCES convenios (id);
ALTER TABLE vendas ADD CONSTRAINT FK_VENDAS_debito FOREIGN KEY (debito) REFERENCES clientes_debitos (id);
ALTER TABLE vendas ADD CONSTRAINT FK_VENDAS_autorizado_por FOREIGN KEY (autorizado_por) REFERENCES usuarios (id);
ALTER TABLE vendas ADD CONSTRAINT FK_VENDAS_cancelado_por FOREIGN KEY (cancelado_por) REFERENCES usuarios (id);
ALTER TABLE vendas ADD CONSTRAINT FK_VENDAS_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id);
ALTER TABLE vendas_pagamentos ADD CONSTRAINT FK_VENDAS_PAGAMENTOS_forma_pagamento FOREIGN KEY (forma_pagamento) REFERENCES formas_pagamentos (id);
ALTER TABLE vendas_pagamentos ADD CONSTRAINT FK_VENDAS_PAGAMENTOS_venda FOREIGN KEY (venda) REFERENCES vendas (id) ON DELETE CASCADE;
ALTER TABLE vendas_produtos ADD CONSTRAINT FK_VENDAS_PRODUTOS_colaborador FOREIGN KEY (colaborador) REFERENCES usuarios (id);
ALTER TABLE vendas_produtos ADD CONSTRAINT FK_VENDAS_PRODUTOS_pacote FOREIGN KEY (pacote) REFERENCES clientes_pacotes (id);
ALTER TABLE vendas_produtos ADD CONSTRAINT FK_VENDAS_PRODUTOS_produto FOREIGN KEY (produto) REFERENCES produtos (id);
ALTER TABLE vendas_produtos ADD CONSTRAINT FK_VENDAS_PRODUTOS_venda FOREIGN KEY (venda) REFERENCES vendas (id) ON DELETE CASCADE;
ALTER TABLE vendas_produtos ADD CONSTRAINT FK_VENDAS_PRODUTOS_desconto_lancado_por FOREIGN KEY (desconto_lancado_por) REFERENCES usuarios (id);
ALTER TABLE vendas_produtos ADD CONSTRAINT FK_VENDAS_PRODUTOS_vendedor_do_pacote FOREIGN KEY (vendedor_do_pacote) REFERENCES usuarios (id);
ALTER TABLE vipclass ADD CONSTRAINT FK_VIPCLASS_requisito FOREIGN KEY (requisito) REFERENCES vipclass (id);
ALTER TABLE vipclass_aulas ADD CONSTRAINT FK_VIPCLASS_AULAS_vipclass FOREIGN KEY (vipclass) REFERENCES vipclass (id);
ALTER TABLE vipclass_checkpoints_perguntas ADD CONSTRAINT FK_VIPCLASS_CHECKPOINTS_PERGUNTAS_vipclass FOREIGN KEY (vipclass) REFERENCES vipclass (id);
ALTER TABLE vipclass_checkpoints_respostas ADD CONSTRAINT FK_VIPCLASS_CHECKPOINTS_RESPOSTAS_pergunta FOREIGN KEY (pergunta) REFERENCES vipclass_checkpoints_perguntas (id) ON DELETE CASCADE;
ALTER TABLE vipclass_checkpoints_usuarios ADD CONSTRAINT FK_VIPCLASS_CHECKPOINTS_USUARIOS_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id);
ALTER TABLE vipclass_checkpoints_usuarios ADD CONSTRAINT FK_VIPCLASS_CHECKPOINTS_USUARIOS_vipclass FOREIGN KEY (vipclass) REFERENCES vipclass (id);
ALTER TABLE vipclass_grupos ADD CONSTRAINT FK_VIPCLASS_GRUPO_grupo FOREIGN KEY (grupo) REFERENCES grupos (id);
ALTER TABLE vipclass_grupos ADD CONSTRAINT FK_VIPCLASS_GRUPO_vipclass FOREIGN KEY (vipclass) REFERENCES vipclass (id);
ALTER TABLE vipclass_materiais ADD CONSTRAINT FK_VIPCLASS_MATERIAIS_vipclass FOREIGN KEY (vipclass) REFERENCES vipclass (id);
ALTER TABLE vipclass_unidades ADD CONSTRAINT FK_VIPCLASS_UNIDADES_unidade FOREIGN KEY (unidade) REFERENCES unidades (id);
ALTER TABLE vipclass_unidades ADD CONSTRAINT FK_VIPCLASS_UNIDADES_vipclass FOREIGN KEY (vipclass) REFERENCES vipclass (id);
ALTER TABLE visagismo ADD CONSTRAINT FK_VISAGISMO_cliente FOREIGN KEY (cliente) REFERENCES clientes (id);
ALTER TABLE visagismo ADD CONSTRAINT FK_VISAGISMO_usuario FOREIGN KEY (usuario) REFERENCES usuarios (id);


-- ======================================================================
-- Unicidade. O MySQL de origem não tem nenhuma (D29); estas entram porque
-- há evidência de que a duplicata é erro.
--
-- A carga FALHA se os dados ainda tiverem duplicatas. É de propósito:
-- scripts/pre-migracao-limpeza.sql roda antes, e falhar aqui é melhor que
-- migrar o problema.
-- ======================================================================

ALTER TABLE dashboard_colaboradores ADD CONSTRAINT dashboard_colaboradores_inquilino_id_colaborador_unidad_3db90c9 UNIQUE (inquilino_id, colaborador, unidade, mes, ano);
ALTER TABLE privilegios ADD CONSTRAINT privilegios_inquilino_id_grupo_funcionalidade_unico UNIQUE (inquilino_id, grupo, funcionalidade);
ALTER TABLE privilegios_usuarios ADD CONSTRAINT privilegios_usuarios_inquilino_id_usuario_funcionalidade_unico UNIQUE (inquilino_id, usuario, funcionalidade);
ALTER TABLE sorteios_vendas ADD CONSTRAINT sorteios_vendas_inquilino_id_sorteio_venda_numero_unico UNIQUE (inquilino_id, sorteio, venda, numero);
ALTER TABLE vipclass_checkpoints_usuarios ADD CONSTRAINT vipclass_checkpoints_usuarios_inquilino_id_vipclass_usu_691ae94 UNIQUE (inquilino_id, vipclass, usuario);
ALTER TABLE royalties ADD CONSTRAINT royalties_inquilino_id_unidade_data_unico UNIQUE (inquilino_id, unidade, data);
ALTER TABLE royalties_faturas ADD CONSTRAINT royalties_faturas_inquilino_id_unidade_vencimento_unico UNIQUE (inquilino_id, unidade, vencimento);
ALTER TABLE funcionalidades ADD CONSTRAINT funcionalidades_nome_unico UNIQUE (nome);


-- ======================================================================
-- Isolamento por inquilino. FORCE é obrigatório: sem ele o dono da tabela
-- escapa da política e enxerga tudo.
-- ======================================================================

ALTER TABLE agendas ADD CONSTRAINT agendas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE agendas ENABLE ROW LEVEL SECURITY;
ALTER TABLE agendas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON agendas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE agendas_exclusoes ADD CONSTRAINT agendas_exclusoes_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE agendas_exclusoes ENABLE ROW LEVEL SECURITY;
ALTER TABLE agendas_exclusoes FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON agendas_exclusoes
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE agendas_fechamentos ADD CONSTRAINT agendas_fechamentos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE agendas_fechamentos ENABLE ROW LEVEL SECURITY;
ALTER TABLE agendas_fechamentos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON agendas_fechamentos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE app_banners ADD CONSTRAINT app_banners_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE app_banners ENABLE ROW LEVEL SECURITY;
ALTER TABLE app_banners FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON app_banners
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE arquivos ADD CONSTRAINT arquivos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE arquivos ENABLE ROW LEVEL SECURITY;
ALTER TABLE arquivos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON arquivos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE arquivos_acessos ADD CONSTRAINT arquivos_acessos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE arquivos_acessos ENABLE ROW LEVEL SECURITY;
ALTER TABLE arquivos_acessos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON arquivos_acessos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE arquivos_categorias ADD CONSTRAINT arquivos_categorias_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE arquivos_categorias ENABLE ROW LEVEL SECURITY;
ALTER TABLE arquivos_categorias FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON arquivos_categorias
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE assistentes ADD CONSTRAINT assistentes_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE assistentes ENABLE ROW LEVEL SECURITY;
ALTER TABLE assistentes FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON assistentes
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE assistentes_conversas ADD CONSTRAINT assistentes_conversas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE assistentes_conversas ENABLE ROW LEVEL SECURITY;
ALTER TABLE assistentes_conversas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON assistentes_conversas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE assistentes_cota ADD CONSTRAINT assistentes_cota_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE assistentes_cota ENABLE ROW LEVEL SECURITY;
ALTER TABLE assistentes_cota FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON assistentes_cota
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE assistentes_grupos ADD CONSTRAINT assistentes_grupos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE assistentes_grupos ENABLE ROW LEVEL SECURITY;
ALTER TABLE assistentes_grupos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON assistentes_grupos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE assistentes_mensagens ADD CONSTRAINT assistentes_mensagens_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE assistentes_mensagens ENABLE ROW LEVEL SECURITY;
ALTER TABLE assistentes_mensagens FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON assistentes_mensagens
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE assistentes_unidades ADD CONSTRAINT assistentes_unidades_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE assistentes_unidades ENABLE ROW LEVEL SECURITY;
ALTER TABLE assistentes_unidades FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON assistentes_unidades
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE assistentes_uso ADD CONSTRAINT assistentes_uso_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE assistentes_uso ENABLE ROW LEVEL SECURITY;
ALTER TABLE assistentes_uso FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON assistentes_uso
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE caixas ADD CONSTRAINT caixas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE caixas ENABLE ROW LEVEL SECURITY;
ALTER TABLE caixas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON caixas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE caixas_retiradas ADD CONSTRAINT caixas_retiradas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE caixas_retiradas ENABLE ROW LEVEL SECURITY;
ALTER TABLE caixas_retiradas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON caixas_retiradas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE clientes ADD CONSTRAINT clientes_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE clientes ENABLE ROW LEVEL SECURITY;
ALTER TABLE clientes FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON clientes
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE clientes_aparelhos ADD CONSTRAINT clientes_aparelhos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE clientes_aparelhos ENABLE ROW LEVEL SECURITY;
ALTER TABLE clientes_aparelhos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON clientes_aparelhos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE clientes_creditos ADD CONSTRAINT clientes_creditos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE clientes_creditos ENABLE ROW LEVEL SECURITY;
ALTER TABLE clientes_creditos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON clientes_creditos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE clientes_creditos_devolucoes ADD CONSTRAINT clientes_creditos_devolucoes_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE clientes_creditos_devolucoes ENABLE ROW LEVEL SECURITY;
ALTER TABLE clientes_creditos_devolucoes FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON clientes_creditos_devolucoes
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE clientes_debitos ADD CONSTRAINT clientes_debitos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE clientes_debitos ENABLE ROW LEVEL SECURITY;
ALTER TABLE clientes_debitos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON clientes_debitos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE clientes_pacotes ADD CONSTRAINT clientes_pacotes_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE clientes_pacotes ENABLE ROW LEVEL SECURITY;
ALTER TABLE clientes_pacotes FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON clientes_pacotes
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE clientes_validacoes_cadastrais ADD CONSTRAINT clientes_validacoes_cadastrais_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE clientes_validacoes_cadastrais ENABLE ROW LEVEL SECURITY;
ALTER TABLE clientes_validacoes_cadastrais FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON clientes_validacoes_cadastrais
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE colunas_gravadas ADD CONSTRAINT colunas_gravadas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE colunas_gravadas ENABLE ROW LEVEL SECURITY;
ALTER TABLE colunas_gravadas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON colunas_gravadas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE confirmacoes ADD CONSTRAINT confirmacoes_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE confirmacoes ENABLE ROW LEVEL SECURITY;
ALTER TABLE confirmacoes FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON confirmacoes
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE convenios ADD CONSTRAINT convenios_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE convenios ENABLE ROW LEVEL SECURITY;
ALTER TABLE convenios FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON convenios
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE convenios_unidades ADD CONSTRAINT convenios_unidades_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE convenios_unidades ENABLE ROW LEVEL SECURITY;
ALTER TABLE convenios_unidades FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON convenios_unidades
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE cupons ADD CONSTRAINT cupons_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE cupons ENABLE ROW LEVEL SECURITY;
ALTER TABLE cupons FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON cupons
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE cupons_clientes ADD CONSTRAINT cupons_clientes_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE cupons_clientes ENABLE ROW LEVEL SECURITY;
ALTER TABLE cupons_clientes FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON cupons_clientes
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE dashboard_colaboradores ADD CONSTRAINT dashboard_colaboradores_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE dashboard_colaboradores ENABLE ROW LEVEL SECURITY;
ALTER TABLE dashboard_colaboradores FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON dashboard_colaboradores
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE dashboard_faturamento ADD CONSTRAINT dashboard_faturamento_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE dashboard_faturamento ENABLE ROW LEVEL SECURITY;
ALTER TABLE dashboard_faturamento FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON dashboard_faturamento
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE dashboard_movimentos ADD CONSTRAINT dashboard_movimentos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE dashboard_movimentos ENABLE ROW LEVEL SECURITY;
ALTER TABLE dashboard_movimentos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON dashboard_movimentos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE formas_pagamentos ADD CONSTRAINT formas_pagamentos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE formas_pagamentos ENABLE ROW LEVEL SECURITY;
ALTER TABLE formas_pagamentos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON formas_pagamentos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE gorjetas ADD CONSTRAINT gorjetas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE gorjetas ENABLE ROW LEVEL SECURITY;
ALTER TABLE gorjetas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON gorjetas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE grupos ADD CONSTRAINT grupos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE grupos ENABLE ROW LEVEL SECURITY;
ALTER TABLE grupos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON grupos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE indicacoes ADD CONSTRAINT indicacoes_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE indicacoes ENABLE ROW LEVEL SECURITY;
ALTER TABLE indicacoes FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON indicacoes
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE mensagens ADD CONSTRAINT mensagens_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE mensagens ENABLE ROW LEVEL SECURITY;
ALTER TABLE mensagens FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON mensagens
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE mensagens_grupos ADD CONSTRAINT mensagens_grupos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE mensagens_grupos ENABLE ROW LEVEL SECURITY;
ALTER TABLE mensagens_grupos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON mensagens_grupos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE mensagens_unidades ADD CONSTRAINT mensagens_unidades_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE mensagens_unidades ENABLE ROW LEVEL SECURITY;
ALTER TABLE mensagens_unidades FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON mensagens_unidades
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE notificacoes ADD CONSTRAINT notificacoes_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE notificacoes ENABLE ROW LEVEL SECURITY;
ALTER TABLE notificacoes FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON notificacoes
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE notificacoes_clientes ADD CONSTRAINT notificacoes_clientes_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE notificacoes_clientes ENABLE ROW LEVEL SECURITY;
ALTER TABLE notificacoes_clientes FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON notificacoes_clientes
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE nps ADD CONSTRAINT nps_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE nps ENABLE ROW LEVEL SECURITY;
ALTER TABLE nps FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON nps
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE nps_itens ADD CONSTRAINT nps_itens_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE nps_itens ENABLE ROW LEVEL SECURITY;
ALTER TABLE nps_itens FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON nps_itens
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE nps_resultados_colaboradores ADD CONSTRAINT nps_resultados_colaboradores_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE nps_resultados_colaboradores ENABLE ROW LEVEL SECURITY;
ALTER TABLE nps_resultados_colaboradores FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON nps_resultados_colaboradores
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE nps_resultados_unidades ADD CONSTRAINT nps_resultados_unidades_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE nps_resultados_unidades ENABLE ROW LEVEL SECURITY;
ALTER TABLE nps_resultados_unidades FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON nps_resultados_unidades
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE pacotes_itens ADD CONSTRAINT pacotes_itens_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE pacotes_itens ENABLE ROW LEVEL SECURITY;
ALTER TABLE pacotes_itens FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON pacotes_itens
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE pesquisas ADD CONSTRAINT pesquisas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE pesquisas ENABLE ROW LEVEL SECURITY;
ALTER TABLE pesquisas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON pesquisas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE pesquisas_perguntas ADD CONSTRAINT pesquisas_perguntas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE pesquisas_perguntas ENABLE ROW LEVEL SECURITY;
ALTER TABLE pesquisas_perguntas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON pesquisas_perguntas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE pesquisas_respostas ADD CONSTRAINT pesquisas_respostas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE pesquisas_respostas ENABLE ROW LEVEL SECURITY;
ALTER TABLE pesquisas_respostas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON pesquisas_respostas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE pontuacoes_historicos ADD CONSTRAINT pontuacoes_historicos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE pontuacoes_historicos ENABLE ROW LEVEL SECURITY;
ALTER TABLE pontuacoes_historicos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON pontuacoes_historicos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE privilegios ADD CONSTRAINT privilegios_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE privilegios ENABLE ROW LEVEL SECURITY;
ALTER TABLE privilegios FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON privilegios
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE privilegios_usuarios ADD CONSTRAINT privilegios_usuarios_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE privilegios_usuarios ENABLE ROW LEVEL SECURITY;
ALTER TABLE privilegios_usuarios FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON privilegios_usuarios
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE produtos ADD CONSTRAINT produtos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE produtos ENABLE ROW LEVEL SECURITY;
ALTER TABLE produtos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON produtos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE produtos_estoque ADD CONSTRAINT produtos_estoque_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE produtos_estoque ENABLE ROW LEVEL SECURITY;
ALTER TABLE produtos_estoque FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON produtos_estoque
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE produtos_tags ADD CONSTRAINT produtos_tags_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE produtos_tags ENABLE ROW LEVEL SECURITY;
ALTER TABLE produtos_tags FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON produtos_tags
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE push_app ADD CONSTRAINT push_app_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE push_app ENABLE ROW LEVEL SECURITY;
ALTER TABLE push_app FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON push_app
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE royalties ADD CONSTRAINT royalties_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE royalties ENABLE ROW LEVEL SECURITY;
ALTER TABLE royalties FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON royalties
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE royalties_aliquotas ADD CONSTRAINT royalties_aliquotas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE royalties_aliquotas ENABLE ROW LEVEL SECURITY;
ALTER TABLE royalties_aliquotas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON royalties_aliquotas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE royalties_faturas ADD CONSTRAINT royalties_faturas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE royalties_faturas ENABLE ROW LEVEL SECURITY;
ALTER TABLE royalties_faturas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON royalties_faturas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE saidas ADD CONSTRAINT saidas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE saidas ENABLE ROW LEVEL SECURITY;
ALTER TABLE saidas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON saidas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE saidas_parcelas ADD CONSTRAINT saidas_parcelas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE saidas_parcelas ENABLE ROW LEVEL SECURITY;
ALTER TABLE saidas_parcelas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON saidas_parcelas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE saidas_parcelas_pagamentos ADD CONSTRAINT saidas_parcelas_pagamentos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE saidas_parcelas_pagamentos ENABLE ROW LEVEL SECURITY;
ALTER TABLE saidas_parcelas_pagamentos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON saidas_parcelas_pagamentos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE saidas_tipos ADD CONSTRAINT saidas_tipos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE saidas_tipos ENABLE ROW LEVEL SECURITY;
ALTER TABLE saidas_tipos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON saidas_tipos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE sorteios ADD CONSTRAINT sorteios_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE sorteios ENABLE ROW LEVEL SECURITY;
ALTER TABLE sorteios FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON sorteios
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE sorteios_vendas ADD CONSTRAINT sorteios_vendas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE sorteios_vendas ENABLE ROW LEVEL SECURITY;
ALTER TABLE sorteios_vendas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON sorteios_vendas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE unidades ADD CONSTRAINT unidades_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE unidades ENABLE ROW LEVEL SECURITY;
ALTER TABLE unidades FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON unidades
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE unidades_mensagerias ADD CONSTRAINT unidades_mensagerias_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE unidades_mensagerias ENABLE ROW LEVEL SECURITY;
ALTER TABLE unidades_mensagerias FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON unidades_mensagerias
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE unidades_socios ADD CONSTRAINT unidades_socios_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE unidades_socios ENABLE ROW LEVEL SECURITY;
ALTER TABLE unidades_socios FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON unidades_socios
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE unidades_whatsapp_eventos ADD CONSTRAINT unidades_whatsapp_eventos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE unidades_whatsapp_eventos ENABLE ROW LEVEL SECURITY;
ALTER TABLE unidades_whatsapp_eventos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON unidades_whatsapp_eventos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE usuarios ADD CONSTRAINT usuarios_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE usuarios ENABLE ROW LEVEL SECURITY;
ALTER TABLE usuarios FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON usuarios
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE usuarios_acessos ADD CONSTRAINT usuarios_acessos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE usuarios_acessos ENABLE ROW LEVEL SECURITY;
ALTER TABLE usuarios_acessos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON usuarios_acessos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE usuarios_areas ADD CONSTRAINT usuarios_areas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE usuarios_areas ENABLE ROW LEVEL SECURITY;
ALTER TABLE usuarios_areas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON usuarios_areas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE usuarios_comissoes_extras ADD CONSTRAINT usuarios_comissoes_extras_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE usuarios_comissoes_extras ENABLE ROW LEVEL SECURITY;
ALTER TABLE usuarios_comissoes_extras FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON usuarios_comissoes_extras
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE usuarios_horarios ADD CONSTRAINT usuarios_horarios_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE usuarios_horarios ENABLE ROW LEVEL SECURITY;
ALTER TABLE usuarios_horarios FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON usuarios_horarios
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE usuarios_servicos ADD CONSTRAINT usuarios_servicos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE usuarios_servicos ENABLE ROW LEVEL SECURITY;
ALTER TABLE usuarios_servicos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON usuarios_servicos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE vendas ADD CONSTRAINT vendas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE vendas ENABLE ROW LEVEL SECURITY;
ALTER TABLE vendas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON vendas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE vendas_pagamentos ADD CONSTRAINT vendas_pagamentos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE vendas_pagamentos ENABLE ROW LEVEL SECURITY;
ALTER TABLE vendas_pagamentos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON vendas_pagamentos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE vendas_produtos ADD CONSTRAINT vendas_produtos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE vendas_produtos ENABLE ROW LEVEL SECURITY;
ALTER TABLE vendas_produtos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON vendas_produtos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE vipclass ADD CONSTRAINT vipclass_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE vipclass ENABLE ROW LEVEL SECURITY;
ALTER TABLE vipclass FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON vipclass
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE vipclass_aulas ADD CONSTRAINT vipclass_aulas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE vipclass_aulas ENABLE ROW LEVEL SECURITY;
ALTER TABLE vipclass_aulas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON vipclass_aulas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE vipclass_checkpoints_perguntas ADD CONSTRAINT vipclass_checkpoints_perguntas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE vipclass_checkpoints_perguntas ENABLE ROW LEVEL SECURITY;
ALTER TABLE vipclass_checkpoints_perguntas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON vipclass_checkpoints_perguntas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE vipclass_checkpoints_respostas ADD CONSTRAINT vipclass_checkpoints_respostas_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE vipclass_checkpoints_respostas ENABLE ROW LEVEL SECURITY;
ALTER TABLE vipclass_checkpoints_respostas FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON vipclass_checkpoints_respostas
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE vipclass_checkpoints_usuarios ADD CONSTRAINT vipclass_checkpoints_usuarios_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE vipclass_checkpoints_usuarios ENABLE ROW LEVEL SECURITY;
ALTER TABLE vipclass_checkpoints_usuarios FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON vipclass_checkpoints_usuarios
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE vipclass_grupos ADD CONSTRAINT vipclass_grupos_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE vipclass_grupos ENABLE ROW LEVEL SECURITY;
ALTER TABLE vipclass_grupos FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON vipclass_grupos
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE vipclass_materiais ADD CONSTRAINT vipclass_materiais_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE vipclass_materiais ENABLE ROW LEVEL SECURITY;
ALTER TABLE vipclass_materiais FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON vipclass_materiais
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE vipclass_unidades ADD CONSTRAINT vipclass_unidades_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE vipclass_unidades ENABLE ROW LEVEL SECURITY;
ALTER TABLE vipclass_unidades FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON vipclass_unidades
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

ALTER TABLE visagismo ADD CONSTRAINT visagismo_inquilino_fk
    FOREIGN KEY (inquilino_id) REFERENCES inquilinos (id);
ALTER TABLE visagismo ENABLE ROW LEVEL SECURITY;
ALTER TABLE visagismo FORCE  ROW LEVEL SECURITY;
CREATE POLICY inquilino_isolado ON visagismo
    USING      (inquilino_id = current_setting('app.inquilino_id')::integer)
    WITH CHECK (inquilino_id = current_setting('app.inquilino_id')::integer);

-- ======================================================================
-- Papel da aplicação.
--
-- NOSUPERUSER e NOBYPASSRLS não são zelo excessivo: **superusuário ignora
-- RLS sempre**, e nem ENABLE nem FORCE valem alguma coisa para ele. Se a
-- aplicação conectar com um usuário superusuário, o isolamento entre
-- inquilinos simplesmente não existe — e não existe em silêncio, sem erro
-- nenhum, até um cliente enxergar dado de outro.
--
-- Provado em postgres/teste-rls.sql, primeira asserção.
-- ======================================================================

DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'bvip_app') THEN
        CREATE ROLE bvip_app NOSUPERUSER NOBYPASSRLS NOCREATEDB NOCREATEROLE LOGIN;
    END IF;
END $$;

GRANT USAGE ON SCHEMA bvip TO bvip_app;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES    IN SCHEMA bvip TO bvip_app;
GRANT USAGE, SELECT                  ON ALL SEQUENCES IN SCHEMA bvip TO bvip_app;

-- Sem isto, tabela criada depois nasce inacessível para a aplicação.
ALTER DEFAULT PRIVILEGES IN SCHEMA bvip
    GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO bvip_app;
ALTER DEFAULT PRIVILEGES IN SCHEMA bvip
    GRANT USAGE, SELECT ON SEQUENCES TO bvip_app;

