CREATE TABLE IF NOT EXISTS perfis_acesso (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,empresa_id BIGINT UNSIGNED NOT NULL,codigo VARCHAR(20) NOT NULL,descricao VARCHAR(100) NOT NULL,administrador TINYINT(1) NOT NULL DEFAULT 0,permissoes JSON NOT NULL,ativo TINYINT(1) NOT NULL DEFAULT 1,criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,atualizado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,excluido_em TIMESTAMP NULL,FOREIGN KEY(empresa_id) REFERENCES empresas(id),UNIQUE KEY uk_perfil_empresa_codigo(empresa_id,codigo));
CREATE TABLE IF NOT EXISTS usuarios (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,grupo_matriz_id BIGINT UNSIGNED NOT NULL,pessoa_id BIGINT UNSIGNED NOT NULL,empresa_padrao_id BIGINT UNSIGNED NOT NULL,perfil_acesso_id BIGINT UNSIGNED NOT NULL,login VARCHAR(80) NOT NULL,senha_hash VARCHAR(255) NOT NULL,trocar_senha TINYINT(1) NOT NULL DEFAULT 1,ultimo_acesso_em TIMESTAMP NULL,ativo TINYINT(1) NOT NULL DEFAULT 1,criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,atualizado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,excluido_em TIMESTAMP NULL,FOREIGN KEY(grupo_matriz_id) REFERENCES empresas(id),FOREIGN KEY(pessoa_id) REFERENCES pessoas(id),FOREIGN KEY(empresa_padrao_id) REFERENCES empresas(id),FOREIGN KEY(perfil_acesso_id) REFERENCES perfis_acesso(id),UNIQUE KEY uk_usuario_login(grupo_matriz_id,login),UNIQUE KEY uk_usuario_pessoa(grupo_matriz_id,pessoa_id));
CREATE TABLE IF NOT EXISTS pessoa_colaboradores (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,pessoa_id BIGINT UNSIGNED NOT NULL,empresa_id BIGINT UNSIGNED NOT NULL,grupo_pessoa_id BIGINT UNSIGNED NULL,matricula VARCHAR(30),cargo VARCHAR(100),departamento VARCHAR(100),tipo_vinculo VARCHAR(20) NOT NULL DEFAULT 'clt',data_admissao DATE,data_desligamento DATE,carga_horaria_semanal DECIMAL(6,2) NOT NULL DEFAULT 44,usuario_id BIGINT UNSIGNED NULL,salario_base DECIMAL(15,2) NOT NULL DEFAULT 0,bloqueado TINYINT(1) NOT NULL DEFAULT 0,motivo_bloqueio TEXT,ativo TINYINT(1) NOT NULL DEFAULT 1,criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,atualizado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,excluido_em TIMESTAMP NULL,FOREIGN KEY(pessoa_id) REFERENCES pessoas(id),FOREIGN KEY(empresa_id) REFERENCES empresas(id),FOREIGN KEY(grupo_pessoa_id) REFERENCES grupos_pessoa(id),FOREIGN KEY(usuario_id) REFERENCES usuarios(id),UNIQUE KEY uk_colaborador_pessoa_empresa(pessoa_id,empresa_id),UNIQUE KEY uk_colaborador_matricula(empresa_id,matricula),INDEX idx_colaboradores_empresa(empresa_id,ativo));
INSERT IGNORE INTO perfis_acesso(empresa_id,codigo,descricao,administrador,permissoes,ativo) SELECT id,'1','ADMINISTRADOR',1,JSON_OBJECT('todos',TRUE),1 FROM empresas WHERE excluido_em IS NULL;
