CREATE TABLE IF NOT EXISTS perfis_acesso (id INTEGER PRIMARY KEY AUTOINCREMENT,empresa_id INTEGER NOT NULL,codigo TEXT NOT NULL,descricao TEXT NOT NULL,administrador INTEGER NOT NULL DEFAULT 0,permissoes TEXT NOT NULL DEFAULT '{}',ativo INTEGER NOT NULL DEFAULT 1,criado_em TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,atualizado_em TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,excluido_em TEXT,FOREIGN KEY(empresa_id) REFERENCES empresas(id),UNIQUE(empresa_id,codigo));
CREATE TABLE IF NOT EXISTS usuarios (id INTEGER PRIMARY KEY AUTOINCREMENT,grupo_matriz_id INTEGER NOT NULL,pessoa_id INTEGER NOT NULL,empresa_padrao_id INTEGER NOT NULL,perfil_acesso_id INTEGER NOT NULL,login TEXT NOT NULL,senha_hash TEXT NOT NULL,trocar_senha INTEGER NOT NULL DEFAULT 1,ultimo_acesso_em TEXT,ativo INTEGER NOT NULL DEFAULT 1,criado_em TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,atualizado_em TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,excluido_em TEXT,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(grupo_matriz_id,login),UNIQUE(grupo_matriz_id,pessoa_id));
CREATE TABLE IF NOT EXISTS pessoa_colaboradores (id INTEGER PRIMARY KEY AUTOINCREMENT,pessoa_id INTEGER NOT NULL,empresa_id INTEGER NOT NULL,grupo_pessoa_id INTEGER,matricula TEXT,cargo TEXT,departamento TEXT,tipo_vinculo TEXT NOT NULL DEFAULT 'clt',data_admissao TEXT,data_desligamento TEXT,carga_horaria_semanal NUMERIC NOT NULL DEFAULT 44,usuario_id INTEGER,salario_base NUMERIC NOT NULL DEFAULT 0,bloqueado INTEGER NOT NULL DEFAULT 0,motivo_bloqueio TEXT,ativo INTEGER NOT NULL DEFAULT 1,criado_em TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,atualizado_em TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,excluido_em TEXT,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(pessoa_id,empresa_id),UNIQUE(empresa_id,matricula));
CREATE INDEX IF NOT EXISTS idx_colaboradores_empresa ON pessoa_colaboradores(empresa_id,ativo);
CREATE INDEX IF NOT EXISTS idx_usuarios_login ON usuarios(grupo_matriz_id,login,ativo);
INSERT OR IGNORE INTO perfis_acesso(empresa_id,codigo,descricao,administrador,permissoes,ativo) SELECT id,'1','ADMINISTRADOR',1,'{"todos":true}',1 FROM empresas WHERE excluido_em IS NULL;
