-- 2023-11-14
-- Ticket 70
-- Desc: flag_data_emissao.sql
-- Dev01

ALTER TABLE ponto.tb_saidas
ADD COLUMN data_emissao date null;


UPDATE ponto.tb_saidas
SET data_emissao = data_cadastro 
WHERE data_emissao is null;




ALTER TABLE ponto.tb_financeiro_contaspagar
ADD COLUMN data_emissao date null;


UPDATE ponto.tb_financeiro_contaspagar
SET data_emissao = data_cadastro 
WHERE data_emissao is null;


ALTER TABLE ponto.tb_empresa_permissoes
ADD COLUMN mostrar_data_emissao boolean default false;



-- 2023-11-20
-- Ticket 111
-- Desc: flag ocultar status medico

alter table ponto.tb_operador add column ocultar_status_medico boolean default false;




CREATE INDEX ix_tb_auditoria_geral__data_cadastro ON ponto.tb_auditoria_geral USING btree (data_cadastro);




-- 2023-11-21
-- Ticket 119
-- Desc: Relatorio Auditoria
-- Dev01


-- criar tabela com os tipos de ação

CREATE TABLE ponto.tb_auditoria_tipo_acao (
	auditoria_tipo_acao_id serial4 NOT NULL,
	acao varchar(100) NULL,
	CONSTRAINT tb_auditoria_tipo_acao_pkey PRIMARY KEY (auditoria_tipo_acao_id)
);

INSERT INTO ponto.tb_auditoria_tipo_acao (acao) VALUES
SELECT SPLIT_PART(CONCAT(
 SPLIT_PART(replace(((json::json->'acao')::text), cast(chr(34) as varchar), ''), ' ', 1), ' ', SPLIT_PART(replace(((json::json->'acao')::text), cast(chr(34) as varchar), ''), ' ', 2), ' ', SPLIT_PART(replace(((json::json->'acao')::text), cast(chr(34) as varchar), ''), ' ', 3)
 ), '', 1)
FROM ponto.tb_auditoria_geral
GROUP BY split_part;






-- 2023-12-05
-- Ticket 170
-- Desc: Fluxo CRM
-- Dev01

ALTER TABLE ponto.tb_empresa_permissoes
ADD COLUMN fluxo_crm boolean DEFAULT false;


-- 2024-01-10
-- Ticket 
-- Desc: Tabela de armazenamento de anexo
-- Dev01


CREATE TABLE IF NOT EXISTS ponto.tb_origem(
	id_origem int UNIQUE NOT NULL,
	des_origem varchar(255) NOT NULL,
	des_tabela varchar(32) NOT NULL
);

CREATE TABLE IF NOT EXISTS tb_armazenamento(
	id_armazenamento serial4,
	id_origem int NOT NULL,
	id_tabela int NOT NULL,
	des_armazenamento varchar(255),
	des_type varchar(100),
	qtd_bytes int,
	is_ativo boolean DEFAULT TRUE,
	dta_cadastro timestamp,
	id_operador_cadastro int,
	CONSTRAINT fk_armazenamento_origem FOREIGN KEY (id_origem) REFERENCES tb_origem(id_origem)
);

-- 2024-01-11
-- Lucas
ALTER TABLE ponto.tb_ambulatorio_atendimentos_cancelamento
ADD guia_id INT4 NULL;

-- 2024-02-08
-- Dev02
ALTER TABLE ponto.tb_forma_pagamento 
ADD COLUMN ajuste_percentual BOOLEAN DEFAULT TRUE;

-- 2024-02-07
-- Dev02
ALTER TABLE ponto.tb_empresa_permissoes
ADD COLUMN painel_senha BOOLEAN DEFAULT TRUE;

-- 2024-03-12
-- Lucas
alter table ponto.tb_agenda_exames_faturar add column ajuste_percentual_faturado bool;

-- 2024-04-05
-- Lucas
alter table ponto.tb_tarefa_medico add column evolucaopaciente text null;

-- 2024-04-10
-- Lucas
alter table ponto.tb_ambulatorio_arquivos_anexados add column tarefa_medico_id int null;
alter table ponto.tb_ambulatorio_privado add column tarefa_medico_id int null;
alter table ponto.tb_ambulatorio_laudo add column tarefa_medico_id int null;
alter table ponto.tb_ambulatorio_laudo add column if not exists titulo varchar(500) null;
alter table ponto.tb_ambulatorio_terapeuticas add column nome_laudo_terapeutica text null;

-- 2024-04-12
alter table ponto.tb_empresa_permissoes add column url_login_hermes_pardini text null;




CREATE TABLE ponto.tb_ambulatorio_orcamento_item_odontologia(
	ambulatorio_orcamento_item_odontologia_id serial4,
	ambulatorio_orcamento_item_id int,
	dente_id int,
	face_esquerda boolean default false,
	face_direita boolean default false,
	face_cima boolean default false,
	face_baixo boolean default false,
	face_centro boolean default false,
	ativo boolean default true
);


CREATE TABLE ponto.tb_agenda_exame_odontologia(
	agenda_exame_odontologia_id serial4,
	agenda_exame_id int,
	ambulatorio_orcamento_item_odontologia_id int,
	dente_id int,
	face_esquerda boolean default false,
	face_direita boolean default false,
	face_cima boolean default false,
	face_baixo boolean default false,
	face_centro boolean default false,
	faturado boolean default false,
	finalizado boolean default false,
	txt_evolucao text,
	data_finalizado timestamp,
	operador_finalizado int,
	data_cadastro timestamp,
	operador_cadastro int
);


CREATE TABLE ponto.tb_paciente_odontologia_anotacoes(
	paciente_odontologia_anotacoes_id serial4,
	paciente_id int,
	dente_id int,
	anotacao text,
	data_cadastro timestamp,
	operador_cadastro int
);


alter table ponto.tb_empresa 
add column valor_odontologia boolean default false;

alter table ponto.tb_paciente
add column convenio_preferencia_id int;


alter table ponto.tb_agenda_exame_odontologia
add column data_atualizacao timestamp,
add column operador_atualizacao int;


-- 2026-04-09
-- Desc: Flag AGENDAMENTO SEMANAL
ALTER TABLE IF EXISTS ponto.tb_empresa_permissoes
ADD COLUMN IF NOT EXISTS agendamento_semanal character varying(1) DEFAULT 'f';




alter table ponto.tb_operador 
add column profissional_professor boolean default false,
add column profissional_odonto boolean default false;

create table ponto.tb_operador_disciplina(
	operador_disciplina_id serial4,
	operador_id int,
	escola_disciplina_id int,
	ativo boolean default true,
	operador_cadastro int,
	data_cadastro timestamp,
	operador_atualizacao int,
	data_atualizacao timestamp
);

create table ponto.tb_operador_turma(
	operador_turma_id serial4,
	operador_id int,
	escola_turma_id int,
	ativo boolean default true,
	operador_cadastro int,
	data_cadastro timestamp,
	operador_atualizacao int,
	data_atualizacao timestamp
);

alter table ponto.tb_escola_turma
add column operador_responsavel int,
add column disciplina_id int,
add column observacao text;


alter table ponto.tb_empresa_permissoes add column campos_cadastro_crm text NULL; 

alter table ponto.tb_agenda_exames_faturar
add column desconto_percentual int;


alter table ponto.tb_ambulatorio_laudo 
add column escola_professor_id int,
add column escola_aluno_1_id int,
add column escola_aluno_2_id int,
add column escola_disciplina_id int,
add column escola_turma_id int;

alter table ponto.tb_statuscrm
add column segundo_nivel boolean;

alter table ponto.tb_ambulatorio_crm
add column status_segundo_nivel int null;

create table ponto.tb_status_segundo_nivel(
	segnivel_id SERIAL primary key,
	statuscrm_id int not null,
	segnivel_nome varchar(100) not null
);

create table ponto.tb_ambulatorio_crm_procedimento(
	crm_id int,
	paciente_id int null,
	procedimento_convenio_id int not null
);

alter table ponto.tb_ambulatorio_crm_procedimento add column crm_item_id int null;

alter table ponto.tb_financeiro_classe add column codigo_geral text null;

alter table ponto.tb_forma_entradas_saida add column codigo_geral text null;

alter table ponto.tb_ambulatorio_crm add column data_atualizacao_status timestamp;


ALTER TABLE ponto.tb_empresa_permissoes add column dados_card text;

create table ponto.tb_locais_painel(
	id_local SERIAL primary KEY , 
	nome_local varchar(100), 
	ativo_local boolean,
	data_cadastro timestamp,
	operador_cadastro int
);
ALTER TABLE ponto.tb_locais_painel add column empresa_id int;
ALTER TABLE ponto.tb_locais_painel ALTER COLUMN ativo_local SET DEFAULT true;
create table ponto.tb_telas_painel(
	id_tela SERIAL primary KEY , 
	nome_tela varchar(100) not null, 
	ativo_tela boolean default true,
	modelo_tela int not null,
	modelo_voz text not null,
	cor_tela text null,
	empresa_id int not null,
	id_local int, 
	link_yotube text,
	data timestamp,
	operador_id int
);
ALTER TABLE ponto.tb_telas_painel RENAME COLUMN link_yotube TO link_youtube;
ALTER TABLE ponto.tb_telas_painel ALTER COLUMN modelo_voz DROP NOT NULL;

create table tb_chamar_senha(
	chamar_id serial4,
	senha_id int,
	confirmado boolean
);
ALTER TABLE ponto.tb_chamar_senha ADD COLUMN local_id int;
ALTER TABLE ponto.tb_chamar_senha ADD COLUMN empresa_id int;
ALTER TABLE ponto.tb_paciente_painel ALTER COLUMN num_guiche TYPE int USING num_guiche::int;

create table ponto.tb_paciente_painel(
	senha_id serial4,
	agenda_exames_id int,
	local_id int,
	num_sala int,
	guiche bool,
	data_chamada timestamp,
	data_cadastro timestamp,
	operador_id int,
	paciente_id int
);

alter table ponto.tb_telas_painel add column tamanho_fonte int;
alter table ponto.tb_paciente_painel add column confirmado boolean;
alter table ponto.tb_paciente_painel add column num_guiche boolean;
alter table ponto.tb_paciente_painel add column empresa_id int;

alter table ponto.tb_telas_painel add column cor_fonte text;
alter table ponto.tb_telas_painel add column cor_selecionar_nome text;

alter table ponto.tb_empresa_permissoes add column tela_chamada boolean;

ALTER TABLE ponto.tb_operador
ADD COLUMN data_inicio_aluno DATE DEFAULT NULL;

ALTER TABLE ponto.tb_operador
ADD COLUMN data_fim_aluno DATE DEFAULT NULL;

ALTER TABLE ponto.tb_ambulatorio_orcamento_item ADD COLUMN medico_preferencia INTEGER;

ALTER TABLE ponto.tb_agenda_exame_odontologia 
ADD COLUMN dta_evolucao date,
ADD COLUMN profissional_evolucao INTEGER;

alter table ponto.tb_ambulatorio_crm add column statuscrm_id_atual int null;

insert into ponto.tb_ambulatorio_cancelamento (ambulatorio_cancelamento_id , descricao , ativo , data_cadastro , operador_cadastro )
values (50, 'Exclusão em Lote', 't', current_timestamp, 1);

ALTER TABLE ponto.tb_paciente ADD COLUMN nome_fonetico VARCHAR(200);

CREATE EXTENSION unaccent;

ALTER EXTENSION "unaccent" SET SCHEMA public;

UPDATE ponto.tb_paciente
SET nome_fonetico = unaccent(nome)
where nome_fonetico is null;

-- Criar ou substituir a função da trigger
CREATE OR REPLACE FUNCTION ponto.atualizar_nome_fonetico()
RETURNS TRIGGER AS $$
BEGIN
    NEW.nome_fonetico := unaccent(NEW.nome);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Criar a trigger associada à tabela tb_paciente
CREATE TRIGGER tb_paciente_bi_bu
BEFORE INSERT OR UPDATE ON ponto.tb_paciente
FOR EACH ROW
EXECUTE PROCEDURE ponto.atualizar_nome_fonetico();


-- Índice na coluna empresa_id da tabela tb_ambulatorio_laudo
CREATE INDEX idx_ae_empresa_id ON ponto.tb_ambulatorio_laudo ("empresa_id");

-- Índice na coluna paciente_id, guia_id, situacao, empresa_id da tabela tb_ambulatorio_laudo
CREATE INDEX idx_al_paciente_id ON ponto.tb_ambulatorio_laudo ("paciente_id");
CREATE INDEX idx_al_guia_id ON ponto.tb_ambulatorio_laudo ("guia_id");
CREATE INDEX idx_al_situacao ON ponto.tb_ambulatorio_laudo ("situacao");
CREATE INDEX idx_al_empresa_id ON ponto.tb_ambulatorio_laudo ("empresa_id");

-- Índice na tabela tb_ambulatorio_grupo
CREATE INDEX idx_ag_nome ON ponto.tb_ambulatorio_grupo ("nome");
CREATE INDEX idx_ag_tipo ON ponto.tb_ambulatorio_grupo ("tipo");

-- Índice na tabela tb_exames
CREATE INDEX idx_ex_paciente_id ON ponto.tb_exames ("paciente_id");
CREATE INDEX idx_ex_guia_id ON ponto.tb_exames ("guia_id");
CREATE INDEX idx_ex_situacao ON ponto.tb_exames ("situacao");
CREATE INDEX idx_ex_procedimento_tuss_id ON ponto.tb_exames ("procedimento_tuss_id");

-- Índice na tabela tb_ambulatorio_grupo
CREATE INDEX idx_tag_nome ON ponto.tb_ambulatorio_grupo ("nome");
CREATE INDEX idx_tag_tipo ON ponto.tb_ambulatorio_grupo ("tipo");

-- Índice na tabela tb_ambulatorio_impressoes_laudo
CREATE INDEX idx_ail_laudo_id ON ponto.tb_ambulatorio_impressoes_laudo ("laudo_id");
CREATE INDEX idx_ail_tipo ON ponto.tb_ambulatorio_impressoes_laudo ("tipo");

-- Índice na tabela tb_ambulatorio_receituario
CREATE INDEX idx_tar_laudo_id ON ponto.tb_ambulatorio_receituario ("laudo_id");
CREATE INDEX idx_tat_laudo_id ON ponto.tb_ambulatorio_terapeuticas ("laudo_id");
CREATE INDEX idx_tare_laudo_id ON ponto.tb_ambulatorio_relatorio ("laudo_id");
CREATE INDEX idx_taro_laudo_id ON ponto.tb_ambulatorio_rotinas ("laudo_id");
CREATE INDEX idx_tad_laudo_id ON ponto.tb_ambulatorio_documento ("laudo_id");

-- Índice na tabela tb_tarefa_medico
CREATE INDEX idx_ttm_paciente_id ON ponto.tb_tarefa_medico ("paciente_id");
CREATE INDEX idx_ttm_medico_responsavel ON ponto.tb_tarefa_medico ("medico_responsavel");
CREATE INDEX idx_ttm_status ON ponto.tb_tarefa_medico ("status");

-- Índice na coluna ativo e agrupador da tabela tb_procedimento_convenio
CREATE INDEX idx_pc_ativo ON ponto.tb_procedimento_convenio ("ativo");
CREATE INDEX idx_pc_agrupador ON ponto.tb_procedimento_convenio ("agrupador");
-- Índice na coluna grupo da tabela tb_procedimento_tuss
CREATE INDEX idx_pt_grupo ON ponto.tb_procedimento_tuss ("grupo");
-- Índice na coluna ativo da tabela tb_convenio_operador_procedimento
CREATE INDEX idx_cop_ativo ON ponto.tb_convenio_operador_procedimento ("ativo");


-- Índice na coluna solicitacao_cirurgia_id e funcao da tabela tb_convenio_operador_procedimento
CREATE INDEX idx_eco_solicitacao_cirurgia_id ON ponto.tb_equipe_cirurgia_operadores ("solicitacao_cirurgia_id");
CREATE INDEX idx_eco_funcao ON ponto.tb_equipe_cirurgia_operadores ("funcao");

-- Índice na coluna solicitacao_cirurgia_id, ativo, procedimento_tuss_id da tabela tb_solicitacao_cirurgia_procedimento
CREATE INDEX idx_scc_solicitacao_cirurgia_id ON ponto.tb_solicitacao_cirurgia_procedimento ("solicitacao_cirurgia_id");
CREATE INDEX idx_scc_ativo ON ponto.tb_solicitacao_cirurgia_procedimento ("ativo");
CREATE INDEX idx_scc_procedimento_tuss_id ON ponto.tb_solicitacao_cirurgia_procedimento ("procedimento_tuss_id");

-- Índice na coluna data e tipo_consulta_id da tabela tb_agenda_exames
CREATE INDEX idx_ae_data ON ponto.tb_agenda_exames ("data");
CREATE INDEX idx_ae_tipo_consulta_id ON ponto.tb_agenda_exames ("tipo_consulta_id");


alter table tb_operador add column ocultar_status_medico boolean default false;


ALTER TABLE ponto.tb_saidas
ADD COLUMN data_emissao date null;


UPDATE ponto.tb_saidas
SET data_emissao = data_cadastro 
WHERE data_emissao is null;




ALTER TABLE ponto.tb_financeiro_contaspagar
ADD COLUMN data_emissao date null;


UPDATE ponto.tb_financeiro_contaspagar
SET data_emissao = data_cadastro 
WHERE data_emissao is null;


ALTER TABLE ponto.tb_empresa_permissoes
ADD COLUMN mostrar_data_emissao boolean default false;

ALTER TABLE ponto.tb_empresa_permissoes
ADD COLUMN fluxo_crm boolean DEFAULT false;

ALTER TABLE ponto.tb_ambulatorio_grupo
ADD COLUMN data_cadastro timestamp;

ALTER TABLE ponto.tb_ambulatorio_grupo ADD COLUMN operador_cadastro integer;

ALTER TABLE ponto.tb_ambulatorio_grupo ADD COLUMN data_atualizacao timestamp;

ALTER TABLE ponto.tb_ambulatorio_grupo ADD COLUMN operador_atualizacao integer;

ALTER TABLE ponto.tb_procedimento_tuss ALTER COLUMN codigo DROP NOT NULL;

-- 25/06/2024 Avaliação Odontologica
alter table ponto.tb_agenda_exame_odontologia
add column avaliacao boolean default false,
add column dta_avaliacao timestamp,
add column operador_avaliacao integer,
add column nota_avaliacao decimal(10,2);

CREATE TABLE ponto.tb_agenda_exame_odontologia_anotacoes (
	odontologia_anotacoes_id serial primary key NOT NULL,
	agenda_exame_odontologia_id int4 NULL,
	anotacao text NULL,
	data_cadastro timestamp NULL,
	operador_cadastro int4 NULL
);

alter table ponto.tb_empresa_permissoes add column email_integracao text;
alter table ponto.tb_empresa_permissoes add column data_email_integracao timestamp;
alter table ponto.tb_empresa_digisac add column mensagem_faltoso text;
alter table ponto.tb_empresa_digisac add column diadepoisfaltoso int4;
alter table ponto.tb_empresa_whatsapp add column mensagem_faltoso text;
alter table ponto.tb_empresa_permissoes add column senha_integracao varchar(40);

alter table ponto.tb_operador add column agenda_ordem_chegada boolean default false;

ALTER TABLE ponto.tb_estoque_produto ADD COLUMN aparelho_odonto BOOLEAN DEFAULT FALSE;

CREATE TABLE ponto.tb_estoque_produto_pacote(
	estoque_produto_pacote_id SERIAL PRIMARY KEY,
	descricao VARCHAR(120),
	codigo VARCHAR(20),
	ativo BOOLEAN DEFAULT TRUE,
	operador_cadastro INTEGER,
	data_cadastro timestamp,
	operador_atualizacao INTEGER,
	data_atualizacao timestamp
);


CREATE TABLE ponto.tb_estoque_produto_pacote_produtos(
	estoque_produto_pacote_produto_id SERIAL PRIMARY KEY,
	estoque_produto_id INTEGER,
	estoque_produto_pacote_id INTEGER,
	qtde integer,
	ativo BOOLEAN DEFAULT TRUE,
	operador_cadastro INTEGER,
	data_cadastro timestamp,
	operador_atualizacao INTEGER,
	data_atualizacao timestamp
);


create table ponto.tb_config_ficha_painel (
	painel_ficha_id serial4,
	nome text,
	texto text
);
alter table ponto.tb_config_ficha_painel add column empresa_id int4;

alter table ponto.tb_operador add column sala_id int4;
alter table ponto.tb_entradas add column tipo_numero text;
alter table ponto.tb_saidas add column tipo_numero text;

insert into ponto.tb_perfil (perfil_id, nome, ativo)values(41, 'Supervisor', 't');
insert into ponto.tb_perfil (perfil_id, nome, ativo)values(42, 'Coordenador', 't');

alter table ponto.tb_estoque_saida add column estoque_ambulatorio_id int4;

CREATE TABLE ponto.tb_estoque_ambulatorio (
	estoque_ambulatorio_id serial4 NOT NULL,
	paciente_id int4 NULL,
	ativo bool DEFAULT true NULL,
	data_cadastro timestamp NULL,
	operador_cadastro int4 NULL,
	data_atualizacao timestamp NULL,
	operador_atualizacao int4 NULL,
	CONSTRAINT tb_estoque_ambulatorio_pkey PRIMARY KEY (estoque_ambulatorio_id)
);

create table ponto.tb_estoque_ambulatorio_item(
	estoque_ambulatorio_item_id serial4 NOT null,
	estoque_ambulatorio_id int4 null,
	produto_id int4,
	quantidade int,
	ativo bool default true,
	confirmado bool default true,
	data_cadastro timestamp NULL,
	operador_cadastro int4 NULL
);

ALTER TABLE ponto.tb_agenda_exame_odontologia ADD COLUMN observacao VARCHAR(1000);

alter table ponto.tb_ambulatorio_orcamento_item_odontologia add column observacao varchar(1000);

alter table ponto.tb_ambulatorio_orcamento add column status_odonto varchar(30);

alter table ponto.tb_ambulatorio_orcamento 
add column operador_status integer,
add column data_status timestamp;

alter table ponto.tb_empresa_permissoes add column editar_valor_atendimento bool;

alter table ponto.tb_toten_menu add column siglasenha text;
alter table ponto.tb_toten_menu_btn add column siglasenha text;
alter table ponto.tb_toten_menu_btn3 add column siglasenha text;

insert into ponto.tb_perfil (perfil_id, nome, ativo)values(43, 'RECEPÇÃO 3', 't');

insert into ponto.tb_perfil (perfil_id, nome, ativo)values(44, 'RECEPÇÃO 4', 't');

insert into ponto.tb_perfil (perfil_id, nome, ativo)values(45, 'CAIXA/RECEPÇÃO 1', 't');



-- CheckList
CREATE TABLE ponto.tb_modelo_personalizado (
    modelo_personalizado_id SERIAL NOT NULL PRIMARY KEY,
    descricao varchar(100),
    empresa_id INTEGER,
    modelo_personalizado VARCHAR(30),
    ativo BOOLEAN DEFAULT TRUE,
    data_cadastro TIMESTAMP,
    operador_cadastro INTEGER,
    data_atualizacao TIMESTAMP,
    operador_atualizacao INTEGER
);

CREATE TABLE ponto.tb_modelo_personalizado_medico (
    modelo_personalizado_medico_id SERIAL NOT NULL PRIMARY KEY,
    modelo_personalizado_id INTEGER NOT NULL,
    operador_responsavel INTEGER,
    ativo BOOLEAN DEFAULT TRUE,
    data_cadastro TIMESTAMP,
    operador_cadastro INTEGER,
    data_atualizacao TIMESTAMP,
    operador_atualizacao INTEGER
);

CREATE TABLE ponto.tb_modelo_personalizado_procedimento (
    modelo_personalizado_procedimento_id SERIAL NOT NULL PRIMARY KEY,
    procedimento_tuss_id INTEGER,
    ativo BOOLEAN DEFAULT TRUE,
    data_cadastro TIMESTAMP,
    operador_cadastro INTEGER,
    data_atualizacao TIMESTAMP,
    operador_atualizacao INTEGER
);

CREATE TABLE ponto.tb_modelo_personalizado_tipo_pergunta(
	modelo_personalizado_tipo_pergunta_id SERIAL NOT NULL PRIMARY KEY,
	descricao VARCHAR(40),
	ativo BOOLEAN DEFAULT TRUE
);

INSERT INTO ponto.tb_modelo_personalizado_tipo_pergunta(modelo_personalizado_tipo_pergunta_id, descricao) VALUES 
(1, 'Texto Curto'),
(2, 'Texto Longo'),
(3, 'Caixa de Seleção (Checkbox)'),
(4, 'Campo Data'),
(5, 'Campo Hora'),
(6, 'Campo Data e Hora'),
(7, 'Campo Número Inteiro'),
(8, 'Campo Número Decimal'),
(9, 'Campo CPF'),
(10, 'Campo Telefone'),
(11, 'Escolha Multipla (Radio Button)');

CREATE TABLE ponto.tb_modelo_personalizado_regras(
	modelo_personalizado_regra_id SERIAL NOT NULL PRIMARY KEY,
	descricao VARCHAR(80),
	ativo BOOLEAN DEFAULT TRUE
);

INSERT INTO ponto.tb_modelo_personalizado_regras(modelo_personalizado_regra_id, descricao) VALUES 
(1, 'Obrigatório'),
(2, 'Apenas Letras'),
(3, 'Apenas Números'),
(4, 'Quantidade Minina de Caracteres'),
(5, 'Quantidade Maxima de Caracteres'),
(6, 'Valor Negativo'),
(7, 'Valor Zerado'),
(8, 'Valor Minimo'),
(9, 'Valor Maximo');


CREATE TABLE ponto.tb_modelo_personalizado_perguntas (
    modelo_personalizado_pergunta_id SERIAL NOT NULL PRIMARY KEY,
    modelo_personalizado_id INTEGER,
    tipo_pergunta INTEGER,
    descricao_pergunta VARCHAR(140),
    ordem_pergunta INTEGER,
    posicao_pergunta VARCHAR(30),
    ativo BOOLEAN DEFAULT TRUE,
    data_cadastro TIMESTAMP,
    operador_cadastro INTEGER,
    data_atualizacao TIMESTAMP,
    operador_atualizacao INTEGER
);

CREATE TABLE ponto.tb_modelo_personalizado_pergunta_regra(
	modelo_personalizado_pergunta_regra_id SERIAL NOT NULL PRIMARY KEY,
	modelo_personalizado_pergunta_id INTEGER,
	regra_id INTEGER,
	extra_info VARCHAR(30),
	ativo BOOLEAN DEFAULT TRUE,
    data_cadastro TIMESTAMP,
    operador_cadastro INTEGER,
    data_atualizacao TIMESTAMP,
    operador_atualizacao INTEGER
);

CREATE TABLE ponto.tb_modelo_personalizado_perguntas_style(
    modelo_personalizado_pergunta_style_id SERIAL NOT NULL PRIMARY KEY,
    modelo_personalizado_pergunta_id INTEGER,
    style VARCHAR(100),
    ativo BOOLEAN DEFAULT TRUE,
    data_cadastro TIMESTAMP,
    operador_cadastro INTEGER,
    data_atualizacao TIMESTAMP,
    operador_atualizacao INTEGER
);

/*

- Negrito
- Italico
- Sublime
- Tamanho da Fonte (Px)
- Cor da Fonte
- Alinhado a Direita
- Centralizado
- Alinhado a Esquerda

*/

CREATE TABLE ponto.tb_modelo_personalizado_perguntas_magicas (
    modelo_personalizado_pergunta_magica_id SERIAL NOT NULL PRIMARY KEY,
    modelo_personalizado_pergunta_id INTEGER,
    descricao_magica VARCHAR(100),
    ativo BOOLEAN DEFAULT TRUE,
    data_cadastro TIMESTAMP,
    operador_cadastro INTEGER,
    data_atualizacao TIMESTAMP,
    operador_atualizacao INTEGER
);

CREATE TABLE ponto.tb_modelo_personalizado_perguntas_respostas (
    modelo_personalizado_pergunta_resposta_id SERIAL NOT NULL PRIMARY KEY,
    modelo_personalizado_pergunta_id INTEGER,
    modelo_personalizado_id INTEGER,
    resposta VARCHAR(3000),
    laudo_id INTEGER,
    data_cadastro TIMESTAMP,
    operador_cadastro INTEGER,
    data_atualizacao TIMESTAMP,
    operador_atualizacao INTEGER
);


INSERT INTO ponto.tb_modelo_personalizado_tipo_pergunta(modelo_personalizado_tipo_pergunta_id, descricao) VALUES 
(12, 'Titulo (Sem Campo de Resposta)');


alter table ponto.tb_empresa_permissoes add column medicina_do_trabalho bool;

create table ponto.tb_empresa_aso(
	empresa_aso_id serial4,
	nome text not NULL,
	data_cadastro timestamp NULL,
	data_atualizacao timestamp NULL,
	operador_atualizacao int4 NULL,
	operador_cadastro int4 NULL
);

create table ponto.tb_funcoes_empresa_aso(
	funcao_id serial4,
	nome text not NULL,
	data_cadastro timestamp NULL,
	data_atualizacao timestamp NULL,
	operador_atualizacao int4 NULL,
	operador_cadastro int4 NULL
);

create table ponto.rel_empresa_funcoes_aso(
	rel_id serial4,
	funcao_id int,
	empresa_aso_id int,
	data_cadastro timestamp NULL,
	operador_cadastro int4 NULL
);

alter table ponto.tb_empresa_aso add column ativo bool;

alter table ponto.tb_agenda_exames add column empresa_aso_id int;
alter table ponto.tb_agenda_exames add column funcao_aso_id int;
alter table ponto.tb_agenda_exames add column tipo_aso_id int;

create table ponto.tb_tipos_aso(
	tipo_aso_id serial4,
	nome text
);

insert into ponto.tb_tipos_aso(nome)values('Demissional'), ('Admissional'), ('Periódico'), ('Mudança Categoria'), ('Retorno Trabalho');

create table ponto.tb_modelo_ficha_aso(
	ficha_aso_id serial4,
	nome_ficha_aso text,
	data_cadastro timestamp NULL,
	operador_cadastro int4 NULL,
	data_atualizacao timestamp NULL,
	operador_atualizacao int4 NULL,
	ativo bool DEFAULT true NULL
);

alter table ponto.tb_modelo_ficha_aso add column texto_aso text;


CREATE TABLE ponto.tb_auditoria_database (
	auditoria_database_id serial4 NOT NULL,
	tabela varchar NULL,
	acao varchar(32) NULL,
	id int NULL,
	query text NULL,
	empresa_id int NULL,
	operador_cadastro int4 NULL,
	data_cadastro timestamp NULL,
	json_original jsonb NULL,
	json_alteracao jsonb null,
	ip_address varchar(50),
	request_uri varchar,
	params text,
	CONSTRAINT tb_auditoria_database_pkey PRIMARY KEY (auditoria_database_id)
);

alter table ponto.tb_statuscrm add column status_final bool;

UPDATE ponto.tb_perfil
	SET nome='SUPERVISOR'
	WHERE perfil_id=41;
	
UPDATE ponto.tb_perfil
	SET nome='COORDENADOR'
	WHERE perfil_id=42;

alter table ponto.tb_modelo_ficha_aso 
add column cabecalho boolean default false,
add column rodape boolean default false;

alter table ponto.tb_ambulatorio_orcamento add column data_vencimento date;

ALTER TABLE ponto.tb_paciente_painel ADD COLUMN senha_guiche VARCHAR(255);

ALTER TABLE ponto.tb_empresa ADD COLUMN hash_id VARCHAR(30);

UPDATE tb_empresa SET hash_id = UPPER(RIGHT(MD5(empresa_id), 8)) where empresa_id is not null;

-- Criar ou substituir a função da trigger
CREATE OR REPLACE FUNCTION ponto.criar_hash_empresa()
RETURNS TRIGGER AS $$
begin
	update ponto.tb_empresa set hash_id = UPPER(RIGHT(MD5(NEW.empresa_id::varchar), 8)) where empresa_id = new.empresa_id;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Criar a trigger associada à tabela tb_paciente
CREATE TRIGGER tb_empresa_ai
BEFORE INSERT OR UPDATE ON ponto.tb_empresa
FOR EACH ROW
EXECUTE PROCEDURE ponto.criar_hash_empresa();

ALTER TABLE ponto.tb_estoque_solicitacao_cliente ADD COLUMN responsavel INTEGER;

alter table ponto.tb_agenda_exames add column paciente_portal bool default 'f';

ALTER TABLE ponto.tb_operador ADD COLUMN data_sala DATE;

DROP TRIGGER tb_empresa_ai ON ponto.tb_empresa;

-- Criar a trigger associada à tabela tb_paciente
CREATE TRIGGER tb_empresa_ai
BEFORE INSERT ON ponto.tb_empresa
FOR EACH ROW
EXECUTE PROCEDURE ponto.criar_hash_empresa();

alter table ponto.tb_empresa_permissoes add column portal_paciente bool;

CREATE TABLE password_resets (
    id serial4 PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    token VARCHAR(64) NOT NULL,
    expires timestamp NOT NULL
);


CREATE TABLE tb_email_enviado_redefinir_senha (
    id serial4 PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    token VARCHAR(64) NOT NULL,
    assunto VARCHAR(64) ,
    texto VARCHAR(255) ,
    data_envio timestamp
);

alter table ponto.tb_empresa_permissoes add column add_procedimento_lista bool;

ALTER TABLE ponto.tb_convenio
ADD COLUMN tipo_financeiro VARCHAR(200),
ADD COLUMN classe_financeiro VARCHAR(200);

-- Table: "ponto".tb_chamar_senha

-- DROP TABLE "ponto".tb_chamar_senha;

CREATE TABLE "ponto".tb_chamar_senha
(
  chamar_id serial NOT NULL,
  senha_id integer,
  confirmado boolean,
  local_id integer,
  empresa_id integer
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "ponto".tb_chamar_senha
  OWNER TO postgres;

  -- Column: data_sala

-- ALTER TABLE ponto.tb_agenda_exames DROP COLUMN data_sala;

ALTER TABLE ponto.tb_agenda_exames ADD COLUMN data_sala timestamp without time zone;

-- Column: painel_id

-- ALTER TABLE ponto.tb_exame_sala DROP COLUMN painel_id;

ALTER TABLE ponto.tb_exame_sala ADD COLUMN painel_id integer;

alter table ponto.tb_empresa_permissoes add column faturamento_manual bool;

ALTER TABLE tb_paciente
ALTER COLUMN numero TYPE VARCHAR(30);

alter table ponto.tb_estoque_cliente add column empresa_id int;

alter table ponto.tb_estoque_armazem add column empresa_id int;

-- Table: "ponto".tb_chamar_senha

-- DROP TABLE "ponto".tb_chamar_senha;

CREATE TABLE "ponto".tb_chamar_senha
(
  chamar_id serial NOT NULL,
  senha_id integer,
  confirmado boolean,
  local_id integer,
  empresa_id integer
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "ponto".tb_chamar_senha
  OWNER TO postgres;
  
ALTER TABLE ponto.tb_agenda_exames ADD COLUMN data_sala timestamp without time zone;

ALTER TABLE ponto.tb_exame_sala ADD COLUMN painel_id integer;

ALTER TABLE ponto.tb_exame_sala_painel ADD COLUMN tela_painel_id integer;

ALTER TABLE ponto.tb_operador ADD COLUMN data_sala date;

ALTER TABLE ponto.tb_operador 
ADD COLUMN aba_add_tratamento BOOLEAN DEFAULT TRUE,
ADD COLUMN aba_odontograma BOOLEAN DEFAULT TRUE,
ADD COLUMN aba_evolucoes BOOLEAN DEFAULT TRUE,
ADD COLUMN aba_tratamento BOOLEAN DEFAULT TRUE;

alter table ponto.tb_ambulatorio_laudoadd add column escola_professor_id int;
alter table ponto.tb_ambulatorio_laudoadd add column escola_aluno_1_id int;
alter table ponto.tb_ambulatorio_laudoadd add column escola_aluno_2_id int;
alter table ponto.tb_ambulatorio_laudoadd add column escola_disciplina_id int;
alter table ponto.tb_ambulatorio_laudo add column escola_turma_id int;

insert into ponto.tb_perfil(perfil_id, nome, ativo)values(46, 'RECEPÇÃO POPULAR', true);
insert into ponto.tb_perfil(perfil_id, nome, ativo)values(47, 'CAIXA POPULAR', true);

alter table ponto.tb_toten_menu add column qrcodetoten bool;
alter table ponto.tb_toten_senhas_nova add column token text;

alter table ponto.tb_agenda_exames add column situacao_consultorio integer default 1;
alter table ponto.tb_agenda_exames add column operador_situacao_consultorio integer;
alter table ponto.tb_agenda_exames add column data_situacao_consultorio timestamp;

alter table ponto.tb_empresa_permissoes add column link_sem_url bool;

CREATE TABLE IF NOT EXISTS ponto.tb_medicamentos_receitas(
	medicamento_id SERIAL PRIMARY KEY NOT NULL,
	composicao  VARCHAR(1500),
	apresentacao  VARCHAR(1500),
	tipo varchar(30),
	tarja varchar(40),
	ativo BOOLEAN DEFAULT TRUE,
	operador_cadastro INTEGER,
	data_cadastro TIMESTAMP,
	operador_atualizacao INTEGER,
	data_atualizacao TIMESTAMP
);

CREATE TABLE IF NOT EXISTS ponto.tb_ambulatorio_laudo_receita_new(
	receita_id SERIAL PRIMARY KEY NOT NULL,
	laudo_id INTEGER NOT NULL,
	des_composicao VARCHAR(1500),
	des_apresentacao VARCHAR(1500),
	qtd_composicao VARCHAR(100),
	des_posologia VARCHAR(500),
	obs_observavao VARCHAR(500),
	obs_livre TEXT,
	id_especial BOOLEAN DEFAULT FALSE,
	ativo BOOLEAN DEFAULT TRUE,
	operador_cadastro INTEGER,
	data_cadastro TIMESTAMP,
	operador_atualizacao INTEGER,
	data_atualizacao TIMESTAMP
);

ALTER TABLE ponto.tb_ambulatorio_laudo_receita_new ADD COLUMN grupo_impressao VARCHAR(10);
DELETE FROM ponto.tb_forma_pagamento WHERE forma_pagamento_id = 2000;

alter table ponto.tb_solicitacao_sadt_guiaexterna 
add column codigoprocguiaexterna varchar(30);

alter table ponto.tb_agenda_exames add column confirmado_portal bool;

alter table ponto.tb_convenio add column cod_convenio_liga int;

alter table ponto.tb_agenda_exames add column integracao_lab bool;


alter table ponto.tb_empresa add column agendamento_online bool;

alter table ponto.tb_procedimento_tuss add column modelo_laudo int;

alter table ponto.tb_empresa_permissoes add column agendamento_online bool;

ALTER TABLE ponto.tb_procedimento_percentual_medico_convenio ADD COLUMN valorminimo DECIMAL(10,2);

ALTER TABLE ponto.tb_procedimento_tuss ADD COLUMN valorminimo DECIMAL(10,2);

ALTER TABLE ponto.tb_agenda_exames ADD COLUMN valor_medico_piso DECIMAL(10,2);

alter table ponto.tb_movimentacao_atendimento add column valor_medico_piso numeric(10,2);

alter table ponto.tb_ambulatorio_guia add column pendencia_guia boolean default false;
alter table ponto.tb_ambulatorio_guia add column operador_pendencia integer;
alter table ponto.tb_ambulatorio_guia add column data_pedencia timestamp;

ALTER TABLE ponto.tb_agenda_exames ADD COLUMN agenda_exames_pendencia integer;
ALTER TABLE ponto.tb_agenda_exames ADD COLUMN pedencia_agendada boolean default false;

ALTER TABLE ponto.tb_operador ADD COLUMN rqe int;

ALTER TABLE ponto.tb_operador ADD COLUMN tratamento VARCHAR(50); 

ALTER TABLE ponto.tb_empresa_permissoes add column conciliacao boolean default false;

ALTER TABLE ponto.tb_forma_entradas_saida ADD COLUMN conciliacao VARCHAR(255);

CREATE TABLE ponto.tb_extratos (
    id_extratos SERIAL PRIMARY KEY,
    data_entrada DATE,
    tipo_transacao VARCHAR(50),
    tipo_operacao VARCHAR(50),
    valor NUMERIC(15, 2),
    titulo VARCHAR(255),
    descricao TEXT,
    classe VARCHAR(255),
    tipo VARCHAR(255),
    criado_em TIMESTAMP DEFAULT NOW(),
    pagar CHAR(1) DEFAULT 'f',
    receber CHAR(1) DEFAULT 'f',
    ativo BOOLEAN DEFAULT TRUE,
    financeiro_contaspagar_id INT NULL,
    financeiro_contasreceber_id INT NULL,
    forma_entradas_saida_id INT,
    habilitar_conciliar BOOLEAN DEFAULT false,
    status VARCHAR(20) DEFAULT 'Em aberto',
    habilitar_cadastro_manual BOOLEAN DEFAULT false,
    empresa_id INT NULL
);

ALTER TABLE ponto.tb_empresa_permissoes ADD COLUMN btn_agenda_consulta_exames BOOLEAN DEFAULT TRUE;

ALTER TABLE ponto.tb_empresa_permissoes ADD COLUMN btn_agenda_medico_especialidade BOOLEAN DEFAULT TRUE;

alter table ponto.tb_ambulatorio_orcamento add column data_autorizacao timestamp;
alter table ponto.tb_ambulatorio_orcamento_item add column recusado bool;
alter table ponto.pacientes_historico_formatado add column id int;

ALTER TABLE ponto.tb_ambulatorio_orcamento_item
ALTER COLUMN recusado SET DEFAULT false;

update ponto.tb_ambulatorio_orcamento_item set recusado = 'f' where recusado is null;

alter table ponto.tb_empresa_permissoes add column financiro_individual bool;

alter table ponto.tb_financeiro_contasreceber_temp alter column tipo type varchar(200);
alter table ponto.tb_entradas alter column tipo type varchar(200);
alter table ponto.tb_financeiro_contasreceber alter column tipo type varchar(200);

alter table ponto.tb_financeiro_contasreceber_temp alter column classe type varchar(200);
alter table ponto.tb_entradas alter column classe type varchar(200);
alter table ponto.tb_financeiro_contasreceber alter column classe type varchar(200);

alter table ponto.tb_financeiro_credor_devedor add column paciente bool default 'f';

ALTER TABLE ponto.tb_estoque_entrada
ALTER COLUMN valor_compra TYPE numeric(10, 3)

alter table ponto.tb_empresa_permissoes add column login_tots varchar(100);
alter table ponto.tb_empresa_permissoes add column senha_tots varchar(100);
alter table ponto.tb_empresa_permissoes add column link_integracao_tots varchar(500);
alter table ponto.tb_empresa_permissoes add column cod_ligada_tots varchar(100);

alter table ponto.tb_paciente add column codigo_tots varchar(300);

alter table ponto.tb_empresa_permissoes
add column cod_centro_custo_tots varchar(100);

alter table ponto.tb_ambulatorio_guia
add column idmov_tots varchar(100);

alter table ponto.tb_agenda_exames
add column idmov_tots varchar(100);

alter table ponto.tb_ambulatorio_guia
add column resultado_tots text;

alter table ponto.tb_agenda_exames
add column resultado_tots text;

alter table ponto.tb_empresa_digisac add column flag_wp_oficial boolean default false;
alter table ponto.tb_empresa_digisac add column id_template_msg_aniversario text;
alter table ponto.tb_empresa_digisac add column id_template_msg_confirmacao text;
alter table ponto.tb_empresa_digisac add column id_template_msg_paciente_faltoso text;
alter table ponto.tb_empresa_digisac add column id_template_msg_agradecimento text;
alter table ponto.tb_empresa_digisac add column id_template_msg_receita text;
alter table ponto.tb_empresa_digisac add column id_template_msg_preparo text;
alter table ponto.tb_empresa_digisac add column id_template_msg_completar_cadastro text;
alter table ponto.tb_empresa_digisac add column id_template_msg_link_online text;
alter table ponto.tb_empresa_digisac add column id_template_msg_enviada text;
alter table ponto.tb_empresa_digisac add column flag_envio_agendamento bool default false;


alter table ponto.tb_empresa_digisac add column template_msg_aniversario text;
alter table ponto.tb_empresa_digisac add column template_msg_confirmacao text;
alter table ponto.tb_empresa_digisac add column template_msg_paciente_faltoso text;
alter table ponto.tb_empresa_digisac add column template_msg_agradecimento text;
alter table ponto.tb_empresa_digisac add column template_msg_receita text;
alter table ponto.tb_empresa_digisac add column template_msg_preparo text;
alter table ponto.tb_empresa_digisac add column template_msg_completar_cadastro text;
alter table ponto.tb_empresa_digisac add column template_msg_link_online text;
alter table ponto.tb_empresa_digisac add column template_msg_enviada text;


alter table ponto.tb_empresa_digisac_registro add column msg_aniversario bool default false;

alter table ponto.tb_empresa_digisac_registro add column msg_faltante bool default false;

ALTER TABLE ponto.tb_ambulatorio_guia ADD COLUMN qrcode_tots text;
ALTER TABLE ponto.tb_ambulatorio_guia ADD COLUMN qrcode_copia_cola_tots text;

alter table ponto.tb_ambulatorio_laudo add column txtCICPrimario2 text;
alter table ponto.tb_ambulatorio_laudo add column txtCICSecundario2 text;

CREATE TABLE ponto.tb_procedimento_percentual_grupo_convenio (
	procedimento_percentual_grupo_convenio_id serial primary key NOT NULL,
	procedimento_percentual_grupo_id int4 NULL,
	grupo int4 not null,
	convenio int4 not null,
	valor numeric(10, 2) NULL,
	percentual bool DEFAULT true NULL,
	ativo bool DEFAULT true NULL,
	data_cadastro timestamp NULL,
	operador_cadastro int4 NULL,
	data_atualizacao timestamp NULL,
	operador_atualizacao int4 NULL
);
alter table ponto.tb_empresa_digisac add column mensagem_agendamento text;
alter table ponto.tb_empresa_digisac add column ordem_chegada_agenda text;

INSERT INTO ponto.tb_perfil (perfil_id, nome, ativo)
VALUES (48, 'ADMINISTRADOR 2', true);

insert into ponto.tb_perfil (perfil_id, nome)values(49, 'COORDENADOR 1');
insert into ponto.tb_perfil (perfil_id, nome)values(50, 'GERENTE DE RECEPÇÃO 2');


alter table ponto.tb_paciente add column grau_parentesco1 text;
alter table ponto.tb_paciente add column grau_parentesco2 text;
alter table ponto.tb_paciente add column grau_parentesco3 text;
alter table ponto.tb_paciente add column grau_parentesco4 text;

alter table ponto.tb_ambulatorio_guia add column data_vencimento timestamp;


CREATE INDEX tb_agenda_exames_grupo_tipo_agenda_idex ON tb_agenda_exames (grupo_tipo_agenda);
CREATE INDEX tb_agenda_exames_medico_id_multiplo_idex ON tb_agenda_exames (medico_id_multiplo);
CREATE INDEX tb_agenda_exames_tipo_agenda_idex ON tb_agenda (tipo_agenda);
CREATE INDEX tb_agenda_grupo_tipo_agenda_idex ON tb_agenda (grupo_tipo_agenda);
CREATE INDEX idx_agenda_exames_medico_tipo_data ON ponto.tb_agenda_exames (medico_agenda, tipo_consulta_id, data);
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX idx_agenda_exames_grupo_trgm ON ponto.tb_agenda_exames USING gin (grupo_tipo_agenda gin_trgm_ops);
CREATE INDEX idx_agenda_grupo_trgm ON ponto.tb_agenda USING gin (grupo_tipo_agenda gin_trgm_ops);

ALTER TABLE ponto.tb_agenda_exames ADD COLUMN status_fisioterapia VARCHAR(40);

create table ponto.tb_etiquetas_paciente(
	etiquetas_paciente_id serial primary key,
	paciente_id int,
	descricao_etiqueta text,
	operador_cadastro int,
	data_cadastro timestamp
);

CREATE TABLE ponto.tb_anotacoes_laudo (
    anotacao_id serial PRIMARY KEY,
    laudo_id INT NOT NULL,
    paciente_id INT NOT NULL,
    operador_id INT NOT NULL,
    texto TEXT NOT NULL,
    data_cadastro timestamp DEFAULT CURRENT_TIMESTAMP
);

alter table ponto.tb_agenda_exames add column data_vencimento timestamp;

alter table ponto.tb_horarioagenda add column repetir_horario int;

CREATE TABLE ponto.rel_filas_operador(
	rel_filas_operador_id serial PRIMARY KEY,
	operador_id INT NOT NULL,
	toten_menu_id int not null,
	data_inicio timestamp DEFAULT CURRENT_TIMESTAMP,
	data_fim timestamp,
	ativo BOOLEAN DEFAULT TRUE,
	empresa_id INT NOT NULL
);

alter table ponto.tb_ambulatorio_grupo add column nao_disparar_digisac boolean default false;

alter table ponto.tb_empresa_digisac add column mensagem_cancelamento text;

create table ponto.tb_log_digisac(
	id serial primary key,
	tipo text,
	paciente_id int,
	mensagem text,
	response text,
	empresa_id int,
	data_enviado timestamp 
);

alter table ponto.tb_empresa_permissoes add column valor_por_sessao boolean default false;

ALTER TABLE ponto.tb_agenda_exames ALTER COLUMN quantidade SET DEFAULT 1;

ALTER TABLE ponto.tb_procedimento_percentual_medico_convenio ADD COLUMN formula varchar(300);

ALTER TABLE ponto.tb_agenda_exames ADD COLUMN formula_medico varchar(300);

ALTER TABLE ponto.tb_movimentacao_atendimento ADD COLUMN formula_medico varchar(300);

alter table ponto.tb_empresa_permissoes add column animati_url text;

alter table ponto.tb_empresa_permissoes add column animati_token text;


CREATE TABLE ponto.tb_envios_animati (
    id SERIAL PRIMARY KEY,  
    operacao VARCHAR(50),
    paciente_id BIGINT,
    paciente_nome VARCHAR(255),
    paciente_nascimento DATE,
    paciente_sexo CHAR(1),
    paciente_telefone VARCHAR(20),
    paciente_celular VARCHAR(20),
    accession_number VARCHAR(50),
    atendimento_id BIGINT,
    solicitante_crm VARCHAR(20),
    solicitante_crm_uf CHAR(2),
    solicitante_nome VARCHAR(255),
    exame_tipo VARCHAR(50),
    exame_descricao VARCHAR(255),
    exame_codigo VARCHAR(50),
    exame_datahora TIMESTAMP,
    exame_convenio VARCHAR(100),
    paciente_altura NUMERIC(5,2),
    paciente_email VARCHAR(255),
    patient_social VARCHAR(255),
    paciente_peso NUMERIC(5,2),
    paciente_situacao VARCHAR(100),
    paciente_leito VARCHAR(100),
    data_envio TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE ponto.laudos_importados (
    id SERIAL PRIMARY KEY,
    accession_number VARCHAR(50) NOT NULL,
    paciente_id VARCHAR(50) NOT NULL,
    study_instance_uid VARCHAR(100),
    laudo_conteudo TEXT,
    laudo_datahora TIMESTAMP,
    realizante_nome VARCHAR(255),
    realizante_crm VARCHAR(20),
    realizante_crm_uf VARCHAR(5),
    realizante_assinatura TEXT,
    revisor_nome VARCHAR(255),
    revisor_crm VARCHAR(20),
    revisor_crm_uf VARCHAR(5),
    revisor_assinatura TEXT,
    status VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

alter table ponto.tb_ambulatorio_grupo add column classe_id integer;

alter table ponto.tb_operador add column ocupacao_descricao text;

alter table ponto.tb_paciente_credito_faturar add column estorno boolean default false;

alter table ponto.tb_empresa_permissoes add column veterinario boolean default false;

CREATE TABLE ponto.tb_veterinario_especie (
	especie_id SERIAL PRIMARY KEY NOT NULL,
	nome VARCHAR(255),
	ativo BOOLEAN DEFAULT TRUE,
	data_cadastro TIMESTAMP,
	operador_cadastro INTEGER,
	data_atualizacao TIMESTAMP,
	operador_atualizacao INTEGER
);

CREATE TABLE ponto.tb_veterinario_raca (
	raca_id SERIAL PRIMARY KEY NOT NULL,
	nome VARCHAR(255),
	ativo BOOLEAN DEFAULT TRUE,
	data_cadastro TIMESTAMP,
	operador_cadastro INTEGER,
	data_atualizacao TIMESTAMP,
	operador_atualizacao INTEGER
);

CREATE TABLE ponto.tb_veterinario_pelagem (
	pelagem_id SERIAL PRIMARY KEY NOT NULL,
	nome VARCHAR(255),
	ativo BOOLEAN DEFAULT TRUE,
	data_cadastro TIMESTAMP,
	operador_cadastro INTEGER,
	data_atualizacao TIMESTAMP,
	operador_atualizacao INTEGER
);

insert into ponto.tb_perfil (perfil_id, nome)values(52, 'RECEPÇÃO 5');

alter table ponto.tb_procedimento_tuss add column possui_resultado_pos_laudo boolean default false;

alter table ponto.tb_agenda_exames add column poslaudo text;

alter table ponto.tb_agenda_exames add column operador_poslaudo integer;

alter table ponto.tb_agenda_exames add column data_poslaudo timestamp;

alter table ponto.tb_paciente
ADD COLUMN especie_id INTEGER,
ADD COLUMN raca_id INTEGER,
ADD COLUMN pelagem_id INTEGER;

alter table ponto.tb_empresa_permissoes add column portal_agendamento boolean default true;

alter table ponto.tb_empresa_permissoes add column portal_exames boolean default true;

alter table ponto.tb_empresa_permissoes add column dta_inicial_exames date default '2025-12-01';

create table ponto.tb_escola_curso(
	escola_curso_id serial primary key,
	nome varchar(255),
	ativo boolean default true,
	qntd_max_alunos integer,
	operador_cadastro integer,
	data_cadastro timestamp
);

ALTER TABLE ponto.tb_escola_disciplina ADD COLUMN escola_curso_id INT DEFAULT NULL;
ALTER TABLE ponto.tb_escola_disciplina ADD COLUMN qntd_max_alunos INT DEFAULT NULL;

alter table ponto.tb_escola_turma add column data_inicio timestamp;
alter table ponto.tb_escola_turma add column data_fim timestamp;


CREATE OR REPLACE FUNCTION trg_upper_nome_paciente()
RETURNS TRIGGER AS $$
BEGIN
    NEW.nome := UPPER(NEW.nome);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER before_insert_update_tb_paciente_upper
BEFORE INSERT OR UPDATE
ON ponto.tb_paciente
FOR EACH ROW
EXECUTE PROCEDURE trg_upper_nome_paciente();

ALTER TABLE ponto.tb_empresa ADD COLUMN mensagem_portal text DEFAULT 'Você está prestes a agendar o horário de @horario com o médico @medico na unidade @empresa, deseja confirmar?';

ALTER TABLE ponto.tb_empresa ADD COLUMN mensagem_ordemchegada_portal text DEFAULT 'Você está prestes a agendar Por Ordem de Chegada, a partir do horario @horario com o médico @medico na unidade @empresa, deseja confirmar? \n\n Atenção: Este agendamento é exclusivo para consultas. Retornos devem ser agendados diretamente pelo nosso chat.';

alter table ponto.tb_empresa_permissoes ADD COLUMN grupo_empresa BOOLEAN DEFAULT FALSE;

CREATE TABLE ponto.tb_empresa_grupo(
	empresa_grupo_id SERIAL PRIMARY KEY NOT NULL,
	nome VARCHAR(255),
	json_empresa text,
	ativo BOOLEAN DEFAULT TRUE,
	data_cadastro TIMESTAMP,
	operador_cadastro INTEGER,
	data_atualizacao TIMESTAMP,
	operador_atualizacao INTEGER
);
ALTER TABLE ponto.tb_paciente ADD COLUMN peso varchar(20);
ALTER TABLE ponto.tb_paciente ADD COLUMN idade_animal varchar(20);
ALTER TABLE ponto.tb_paciente ADD COLUMN sexo_animal varchar(1);

SELECT setval(
  'tb_conselho_ans_conselho_ans_id_seq',
  (SELECT MAX(conselho_ans_id) FROM tb_conselho_ans)
);


INSERT INTO ponto.tb_conselho_ans (termo)
SELECT 'Conselho Regional de Medicina Veterinária (CRMV)'
WHERE NOT EXISTS (
    SELECT 1 FROM ponto.tb_conselho_ans WHERE termo = 'Conselho Regional de Medicina Veterinária (CRMV)'
);

ALTER TABLE ponto.tb_procedimento_tuss ADD COLUMN valor_custo numeric(10,2) DEFAULT 0;


CREATE TABLE IF NOT EXISTS tb_veterinario_especie (
    veterinario_especie_id SERIAL PRIMARY KEY,
    nome VARCHAR(255) NOT NULL,
    ativo BOOLEAN DEFAULT TRUE,
    data_cadastro TIMESTAMP DEFAULT NOW(),
    operador_cadastro INTEGER
);

CREATE TABLE IF NOT EXISTS tb_veterinario_raca (
    veterinario_raca_id SERIAL PRIMARY KEY,
    veterinario_especie_id INTEGER REFERENCES tb_veterinario_especie(veterinario_especie_id),
    nome VARCHAR(255) NOT NULL,
    ativo BOOLEAN DEFAULT TRUE,
    data_cadastro TIMESTAMP DEFAULT NOW(),
    operador_cadastro INTEGER
);

CREATE TABLE IF NOT EXISTS tb_veterinario_pelagem (
    veterinario_pelagem_id SERIAL PRIMARY KEY,
    nome VARCHAR(255) NOT NULL,
    ativo BOOLEAN DEFAULT TRUE,
    data_cadastro TIMESTAMP DEFAULT NOW(),
    operador_cadastro INTEGER
);

ALTER TABLE tb_paciente ADD COLUMN IF NOT EXISTS veterinario_especie_id INTEGER REFERENCES tb_veterinario_especie(veterinario_especie_id);
ALTER TABLE tb_paciente ADD COLUMN IF NOT EXISTS veterinario_raca_id INTEGER REFERENCES tb_veterinario_raca(veterinario_raca_id);
ALTER TABLE tb_paciente ADD COLUMN IF NOT EXISTS veterinario_pelagem_id INTEGER REFERENCES tb_veterinario_pelagem(veterinario_pelagem_id);


CREATE TABLE ponto.tb_rps_nota (
    id SERIAL PRIMARY KEY, -- Lote
    numero_rps VARCHAR(20) NOT NULL,
    serie_rps VARCHAR(10) DEFAULT '1',
    tipo_rps SMALLINT DEFAULT 1, -- 1=RPS, 2=Nota Conjugada, 3=Cupom

    data_emissao TIMESTAMP NOT NULL DEFAULT now(),
    optante_simples_nacional SMALLINT DEFAULT 2, -- 1=Sim, 2=Não
    incentivador_cultural SMALLINT DEFAULT 2,     -- 1=Sim, 2=Não
    status SMALLINT DEFAULT 1, -- 1=Normal, 2=Cancelada

    paciente_id INTEGER,
    empresa_id INTEGER,

    -- Serviço
    item_lista_servico VARCHAR(10),
    codigo_tributacao_municipio VARCHAR(30),
    discriminacao TEXT,
    codigo_municipio VARCHAR(25),

    -- Valores
    valor_servicos NUMERIC(15,2),
    valor_liquido_nfse NUMERIC(15,2),

    -- Controle de lote
    protocolo_envio VARCHAR(30),

    data_cadastro TIMESTAMP DEFAULT now(),
    data_atualizacao TIMESTAMP
);


ALTER TABLE ponto.tb_codigo_nfe ADD COLUMN cnae varchar(30) NOT NULL;
ALTER TABLE ponto.tb_codigo_nfe ADD COLUMN item_lista_servico varchar(10) NULL;
ALTER TABLE ponto.tb_codigo_nfe ADD COLUMN aliquota varchar NULL;
ALTER TABLE ponto.tb_codigo_nfe ADD COLUMN codigo_nbs varchar(9) NULL;
ALTER TABLE ponto.tb_codigo_nfe ADD COLUMN codigo_indicador_operacao varchar(6) NULL;
ALTER TABLE ponto.tb_codigo_nfe ADD COLUMN cst_padrao varchar(3) NULL;
ALTER TABLE ponto.tb_codigo_nfe ADD COLUMN class_trib_padrao varchar(6) NULL;


alter table ponto.tb_rps_nota add column status_nota varchar(40) default 'aguardando';
alter table ponto.tb_rps_nota add column mensagem_retorno varchar default '';
alter table ponto.tb_rps_nota add column tipo varchar(12);
alter table ponto.tb_rps_nota add column info_id INTEGER;
alter table ponto.tb_rps_nota add column tipo_nota varchar(25) default 'comum';
alter table ponto.tb_rps_nota add column numero_nfe INTEGER;
alter table ponto.tb_rps_nota add column operador_id INTEGER;
alter table ponto.tb_rps_nota add column ativo BOOLEAN DEFAULT TRUE;
alter table ponto.tb_rps_nota add column cancelado BOOLEAN DEFAULT FALSE;
alter table ponto.tb_rps_nota add column operador_cadastro INTEGER;
alter table ponto.tb_rps_nota add column data_cadastro TIMESTAMP;

ALTER TABLE ponto.tb_rps_nota ADD COLUMN finalidade_nfse VARCHAR(1);
ALTER TABLE ponto.tb_rps_nota ADD COLUMN operacao_consumo_pessoal VARCHAR(1);
ALTER TABLE ponto.tb_rps_nota ADD COLUMN indicador_destino VARCHAR(1);
ALTER TABLE ponto.tb_rps_nota ADD COLUMN cst VARCHAR(3);                      -- CST do IBS/CBS 
ALTER TABLE ponto.tb_rps_nota ADD COLUMN class_trib VARCHAR(6);               -- CodigoClassTrib do IBS/CBS 
ALTER TABLE ponto.tb_rps_nota ADD COLUMN codigo_nbs_emissao VARCHAR(9);       -- NBS utilizado na nota

alter table ponto.tb_empresa_permissoes add column senha_iss varchar default 0;
alter table ponto.tb_empresa_permissoes add column cert_a1 text;

alter table ponto.tb_operador add column senha_iss varchar default 0;
alter table ponto.tb_operador add column cert_a1 text;
alter table ponto.tb_operador add column cnpj_medico varchar default 0;
alter table ponto.tb_operador add column inscri_municipal_medico varchar default 0;

alter table ponto.tb_empresa_permissoes add column tipo_nota_iss boolean default false;

alter table ponto.tb_empresa add column optante_simples_nacional BOOLEAN default 'f';
ALTER TABLE ponto.tb_ambulatorio_guia ADD COLUMN tipo_emissor_nota varchar(30) DEFAULT NULL;
ALTER TABLE ponto.tb_agenda_exames ADD COLUMN tipo_emissor_nota varchar(30) DEFAULT NULL;

alter table ponto.tb_empresa add column inscri_municipal varchar(100);

-- ALTER SEQUENCE ponto.tb_rps_nota_id_seq RESTART WITH 10000;

SELECT setval(
    'ponto.tb_rps_nota_id_seq',
    GREATEST((SELECT COALESCE(MAX(id),0) FROM ponto.tb_rps_nota), 10000)
);

-- */15 * * * * wget -q -O /dev/null "https://{BASE_URL}/iss_nfe/Cron/verificar_status_lotes"
ALTER TABLE ponto.tb_saidas ADD COLUMN data_vencimento TIMESTAMP;

CREATE TABLE ponto.tb_paciente_tag (
    paciente_tag_id SERIAL PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    cor VARCHAR(10) DEFAULT '#337ab7',
    empresa_id INTEGER,
    ativo BOOLEAN DEFAULT TRUE,
    data_cadastro TIMESTAMP DEFAULT NOW(),
    operador_cadastro INTEGER
);

CREATE TABLE ponto.tb_paciente_tag_relacao (
    paciente_tag_relacao_id SERIAL PRIMARY KEY,
    paciente_id INTEGER NOT NULL,
    tag_id INTEGER NOT NULL,
    data_cadastro TIMESTAMP DEFAULT NOW(),
    operador_cadastro INTEGER
);

ALTER TABLE ponto.tb_empresa_permissoes ADD COLUMN ocultar_producao_caixa boolean DEFAULT 'f';
ALTER TABLE ponto.tb_ambulatorio_grupo ADD COLUMN msg_confirmacao_wpp text;

ALTER TABLE ponto.tb_forma_pagamento ADD COLUMN IF NOT EXISTS refletir_financeiro boolean DEFAULT false;
UPDATE ponto.tb_forma_pagamento SET refletir_financeiro = false WHERE refletir_financeiro IS NULL;

ALTER TABLE ponto.tb_entradas ADD COLUMN IF NOT EXISTS forma_pagamento_id integer;
ALTER TABLE ponto.tb_saidas ADD COLUMN IF NOT EXISTS forma_pagamento_id integer;
ALTER TABLE ponto.tb_financeiro_contaspagar ADD COLUMN IF NOT EXISTS forma_pagamento_id integer;
ALTER TABLE ponto.tb_financeiro_contasreceber ADD COLUMN IF NOT EXISTS forma_pagamento_id integer;

ALTER TABLE "ponto"."tb_empresa" 
  ADD COLUMN IF NOT EXISTS "integraicp_channel_id" INTEGER,
  ADD COLUMN IF NOT EXISTS "integraicp_base_url" TEXT,
  ADD COLUMN IF NOT EXISTS "birdid_client_id" TEXT,
  ADD COLUMN IF NOT EXISTS "birdid_client_secret" TEXT,
  ADD COLUMN IF NOT EXISTS "birdid_location" TEXT;

ALTER TABLE ponto.tb_empresa ADD COLUMN exigir_senha_desconto boolean DEFAULT true;

CREATE TABLE ponto.tb_estoque_operador_armazem (
    estoque_operador_armazem_id serial PRIMARY KEY,
    operador_id integer REFERENCES ponto.tb_operador(operador_id),
    armazem_id integer REFERENCES ponto.tb_estoque_armazem(estoque_armazem_id),
    ativo boolean DEFAULT true,
    data_cadastro timestamp without time zone DEFAULT now(),
    operador_cadastro integer,
    data_atualizacao timestamp without time zone,
    operador_atualizacao integer
);

CREATE TABLE ponto.tb_estoque_transferencia_temp (
    estoque_transferencia_temp_id serial PRIMARY KEY,
    produto_id integer REFERENCES ponto.tb_estoque_produto(estoque_produto_id),
    armazem_origem_id integer REFERENCES ponto.tb_estoque_armazem(estoque_armazem_id),
    armazem_destino_id integer REFERENCES ponto.tb_estoque_armazem(estoque_armazem_id),
    entrada_id text,
    quantidade numeric(10,2),
    operador_id integer REFERENCES ponto.tb_operador(operador_id),
    ativo boolean DEFAULT true,
    data_cadastro timestamp without time zone DEFAULT now(),
    data_atualizacao timestamp without time zone,
    operador_atualizacao integer
);


-- 2026-03-18
-- Comunicação interna entre operadores - tarefas internas
CREATE TABLE IF NOT EXISTS ponto.tb_tarefa_interna (
	tarefa_interna_id serial4 PRIMARY KEY,
	titulo varchar(255) NOT NULL,
	descricao text NOT NULL,
	prioridade int4 DEFAULT 2,
	status varchar(30) DEFAULT 'NOVA',
	remetente_operador_id int4 NOT NULL,
	destinatario_operador_id int4 NOT NULL,
	prazo timestamp NULL,
	data_leitura timestamp NULL,
	data_conclusao timestamp NULL,
	empresa_id int4,
	ativo boolean DEFAULT true,
	data_cadastro timestamp DEFAULT current_timestamp,
	operador_cadastro int4,
	data_atualizacao timestamp NULL,
	operador_atualizacao int4
);

CREATE TABLE IF NOT EXISTS ponto.tb_tarefa_interna_mensagem (
	tarefa_interna_mensagem_id serial4 PRIMARY KEY,
	tarefa_interna_id int4 NOT NULL,
	operador_id int4 NOT NULL,
	mensagem text NOT NULL,
	visualizada boolean DEFAULT false,
	ativo boolean DEFAULT true,
	data_cadastro timestamp DEFAULT current_timestamp
);

CREATE TABLE IF NOT EXISTS ponto.tb_tarefa_interna_anexo (
	tarefa_interna_anexo_id serial4 PRIMARY KEY,
	tarefa_interna_id int4 NOT NULL,
	tarefa_interna_mensagem_id int4 NOT NULL,
	nome_original varchar(255) NOT NULL,
	nome_arquivo varchar(255) NOT NULL,
	caminho_arquivo text NOT NULL,
	tipo_mime varchar(150),
	tamanho_bytes int8,
	ativo boolean DEFAULT true,
	data_cadastro timestamp DEFAULT current_timestamp,
	operador_cadastro int4
);

CREATE INDEX IF NOT EXISTS idx_ti_destinatario_status ON ponto.tb_tarefa_interna (destinatario_operador_id, status);
CREATE INDEX IF NOT EXISTS idx_ti_remetente_data ON ponto.tb_tarefa_interna (remetente_operador_id, data_cadastro);
CREATE INDEX IF NOT EXISTS idx_ti_empresa_ativo ON ponto.tb_tarefa_interna (empresa_id, ativo);

CREATE INDEX IF NOT EXISTS idx_tim_tarefa_data ON ponto.tb_tarefa_interna_mensagem (tarefa_interna_id, data_cadastro);
CREATE INDEX IF NOT EXISTS idx_tim_visualizada ON ponto.tb_tarefa_interna_mensagem (visualizada, ativo);
CREATE INDEX IF NOT EXISTS idx_tia_tarefa ON ponto.tb_tarefa_interna_anexo (tarefa_interna_id, ativo);
CREATE INDEX IF NOT EXISTS idx_tia_mensagem ON ponto.tb_tarefa_interna_anexo (tarefa_interna_mensagem_id, ativo);

ALTER TABLE "ponto"."tb_ambulatorio_exame" 
ADD COLUMN "token_validacao" VARCHAR(10);

ALTER TABLE "ponto"."tb_ambulatorio_atestado" 
ADD COLUMN "token_validacao" VARCHAR(50);

ALTER TABLE ponto.tb_operador ADD COLUMN ordenacao_fila integer;

INSERT INTO ponto.tb_perfil
(perfil_id, nome, ativo)
VALUES(53, 'ADMINISTRADOR TOTAL MASTER', true);

alter table ponto.tb_agenda_exames add column sem_poslaudo boolean default false;

ALTER TABLE ponto.tb_ambulatorio_documento 
ADD COLUMN token_validacao VARCHAR(50); -- Ajuste o tipo e tamanho se necessário

ALTER TABLE ponto.tb_empresa ADD COLUMN IF NOT EXISTS tuotempo_user VARCHAR(255);
ALTER TABLE ponto.tb_empresa ADD COLUMN IF NOT EXISTS tuotempo_password VARCHAR(255);

-- 2026-04-07
-- Flags Painel de Senhas / Liberar Card Medico
ALTER TABLE ponto.tb_empresa_permissoes
ADD COLUMN IF NOT EXISTS atend_painel_senhas boolean DEFAULT false;

ALTER TABLE ponto.tb_empresa_permissoes
ADD COLUMN IF NOT EXISTS liberar_card_medico boolean DEFAULT false;


ALTER TABLE ponto.tb_convenio ADD COLUMN IF NOT EXISTS agendamento_online_wpp BOOLEAN DEFAULT FALSE;
ALTER TABLE ponto.tb_convenio ADD COLUMN IF NOT EXISTS agendamento_online_wpp_numero VARCHAR(11);
ALTER TABLE "ponto"."tb_empresa_permissoes" 
ADD COLUMN "nao_permitir_edicao_portal" BOOLEAN DEFAULT FALSE;

-- 2026-04-20
-- Flags de apresentacao no painel de senhas
ALTER TABLE ponto.tb_operador
ADD COLUMN IF NOT EXISTS apresentacao_painel BOOLEAN DEFAULT FALSE;

ALTER TABLE ponto.tb_convenio
ADD COLUMN IF NOT EXISTS apresentacao_painel BOOLEAN DEFAULT FALSE;

ALTER TABLE ponto.tb_exame_sala
ADD COLUMN IF NOT EXISTS apresentacao_painel BOOLEAN DEFAULT FALSE;

-- Ajuste inicial: iniciar desabilitado em Convenio e Sala
UPDATE ponto.tb_convenio
SET apresentacao_painel = FALSE
WHERE COALESCE(apresentacao_painel, FALSE) = TRUE;

UPDATE ponto.tb_exame_sala
SET apresentacao_painel = FALSE
WHERE COALESCE(apresentacao_painel, FALSE) = TRUE;


CREATE TABLE IF NOT EXISTS pontousuario_certificado (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id  INT         NOT NULL,
    empresa_id  INT         NOT NULL,
    provider    VARCHAR(20) NOT NULL DEFAULT 'BIRDID',
    expira_em   DATETIME    NOT NULL,
    criado_em   DATETIME    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    atualizado_em DATETIME  NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_usuario_empresa (usuario_id, empresa_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
