674 lines
15 KiB
Transact-SQL
674 lines
15 KiB
Transact-SQL
-- ================================
|
|
-- CRIAR DATABASE
|
|
-- ================================
|
|
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'LevelOS')
|
|
BEGIN
|
|
CREATE DATABASE LevelOS;
|
|
END
|
|
GO
|
|
|
|
USE LevelOS;
|
|
GO
|
|
|
|
-- ================================
|
|
-- TABELA EMPRESA
|
|
-- ================================
|
|
CREATE TABLE Empresa (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
|
|
-- Dados básicos
|
|
Nome VARCHAR(255) NOT NULL,
|
|
CNPJ VARCHAR(20) NOT NULL UNIQUE,
|
|
TipoEmpresa VARCHAR(20) NOT NULL,
|
|
RegimeTributario VARCHAR(30) NOT NULL,
|
|
CNAE VARCHAR(20) NOT NULL,
|
|
|
|
-- Endereço
|
|
Cep VARCHAR(15) NOT NULL,
|
|
Endereco VARCHAR(255) NOT NULL,
|
|
Numero INT NOT NULL,
|
|
Complemento VARCHAR(255),
|
|
Bairro VARCHAR(255) NOT NULL,
|
|
Cidade VARCHAR(255) NOT NULL,
|
|
UF CHAR(2) NOT NULL,
|
|
Pais VARCHAR(50),
|
|
|
|
-- Contatos
|
|
Telefone1 VARCHAR(20),
|
|
Telefone2 VARCHAR(20),
|
|
Celular VARCHAR(20),
|
|
Whatsapp VARCHAR(20),
|
|
Email VARCHAR(150) NOT NULL,
|
|
Site VARCHAR(255),
|
|
|
|
-- Fiscal
|
|
InscricaoEstadual VARCHAR(20) UNIQUE,
|
|
InscricaoMunicipal VARCHAR(20) UNIQUE,
|
|
|
|
-- Contador
|
|
CNPJCPF_Contador VARCHAR(20),
|
|
Nome_Contador VARCHAR(255),
|
|
|
|
-- Sistema
|
|
TextoParaRecibo VARCHAR(MAX),
|
|
|
|
-- Controle
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE()
|
|
);
|
|
GO
|
|
|
|
-- ================================
|
|
-- CONFIGURAÇÕES
|
|
-- ================================
|
|
CREATE TABLE Empresa_config (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
|
|
-- Aparência
|
|
NomeSistema VARCHAR(255),
|
|
CorPrimaria VARCHAR(20),
|
|
CorSecundaria VARCHAR(20),
|
|
Logo VARCHAR(255),
|
|
Favicon VARCHAR(255),
|
|
|
|
-- OS
|
|
ExibirCPFCliente BIT DEFAULT 1,
|
|
ExibirTelefoneCliente BIT DEFAULT 1,
|
|
ExibirGarantia BIT DEFAULT 1,
|
|
DiasGarantiaPadrao INT DEFAULT 90,
|
|
|
|
-- Financeiro
|
|
GerarReciboAutomatico BIT DEFAULT 1,
|
|
ExibirValoresOS BIT DEFAULT 1,
|
|
|
|
-- Comunicação
|
|
EnviarEmailAutomatico BIT DEFAULT 0,
|
|
EnviarWhatsappAutomatico BIT DEFAULT 0,
|
|
|
|
-- Sistema
|
|
ModoEscuro BIT DEFAULT 0,
|
|
PermitirEdicaoOSFinalizada BIT DEFAULT 0,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
CONSTRAINT FK_ConfigEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE,
|
|
|
|
CONSTRAINT UQ_ConfigEmpresa UNIQUE (EmpresaId)
|
|
);
|
|
GO
|
|
|
|
-- ================================
|
|
-- FUNCIONÁRIOS
|
|
-- ================================
|
|
CREATE TABLE Funcionarios (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
|
|
-- Dados pessoais
|
|
Nome VARCHAR(255) NOT NULL,
|
|
CPF VARCHAR(14),
|
|
DataNascimento DATE,
|
|
|
|
-- Contato
|
|
Telefone VARCHAR(20),
|
|
Celular VARCHAR(20),
|
|
Email VARCHAR(150) NOT NULL,
|
|
|
|
-- Login
|
|
Usuario VARCHAR(50) NOT NULL,
|
|
SenhaHash VARCHAR(255) NOT NULL,
|
|
|
|
-- Permissão
|
|
TipoConta VARCHAR(20) NOT NULL DEFAULT 'Atendente',
|
|
|
|
-- Controle
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
UltimoLogin DATETIME,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
-- Constraints
|
|
CONSTRAINT FK_FuncionarioEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE,
|
|
|
|
CONSTRAINT UQ_LoginEmpresa UNIQUE (EmpresaId, Usuario)
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- FORNECEDORES
|
|
-- ================================
|
|
|
|
CREATE TABLE Fornecedores (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
|
|
-- Dados básicos
|
|
Nome VARCHAR(255) NOT NULL,
|
|
TipoPessoa VARCHAR(2) NOT NULL, -- PF ou PJ
|
|
Documento VARCHAR(20) NOT NULL, -- CPF ou CNPJ
|
|
|
|
-- Contato
|
|
Telefone VARCHAR(20),
|
|
Celular VARCHAR(20),
|
|
Whatsapp VARCHAR(20),
|
|
Email VARCHAR(150),
|
|
|
|
-- Endereço
|
|
Cep VARCHAR(15),
|
|
Endereco VARCHAR(255),
|
|
Numero INT,
|
|
Complemento VARCHAR(255),
|
|
Bairro VARCHAR(255),
|
|
Cidade VARCHAR(255),
|
|
UF CHAR(2),
|
|
|
|
-- Dados adicionais
|
|
NomeFantasia VARCHAR(255),
|
|
InscricaoEstadual VARCHAR(20),
|
|
Site VARCHAR(255),
|
|
Observacoes VARCHAR(MAX),
|
|
|
|
-- Controle
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
-- Relacionamento
|
|
CONSTRAINT FK_FornecedorEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE,
|
|
|
|
-- Evita duplicidade por empresa
|
|
CONSTRAINT UQ_Fornecedor_Doc UNIQUE (EmpresaId, Documento)
|
|
);
|
|
GO
|
|
|
|
-- ================================
|
|
-- TRANSPORTADORAS
|
|
-- ================================
|
|
CREATE TABLE Transportadoras (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
|
|
-- Dados básicos
|
|
RazaoSocial VARCHAR(255) NOT NULL,
|
|
NomeFantasia VARCHAR(255),
|
|
CNPJ VARCHAR(20) NOT NULL,
|
|
|
|
-- Contato
|
|
Telefone VARCHAR(20),
|
|
Celular VARCHAR(20),
|
|
Whatsapp VARCHAR(20),
|
|
Email VARCHAR(150),
|
|
|
|
-- Endereço
|
|
Cep VARCHAR(15),
|
|
Endereco VARCHAR(255),
|
|
Numero INT,
|
|
Complemento VARCHAR(255),
|
|
Bairro VARCHAR(255),
|
|
Cidade VARCHAR(255),
|
|
UF CHAR(2),
|
|
|
|
-- Dados de transporte
|
|
TipoFrete VARCHAR(20), -- CIF / FOB / etc
|
|
PrazoEntrega INT, -- em dias
|
|
ValorFretePadrao DECIMAL(10,2),
|
|
|
|
-- Sistema
|
|
Observacoes VARCHAR(MAX),
|
|
|
|
-- Controle
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
-- Relacionamento
|
|
CONSTRAINT FK_TransportadoraEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE,
|
|
|
|
-- Evita duplicidade
|
|
CONSTRAINT UQ_Transportadora_CNPJ UNIQUE (EmpresaId, CNPJ)
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- CLIENTES
|
|
-- ================================
|
|
CREATE TABLE Clientes (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
|
|
-- Dados principais
|
|
Nome VARCHAR(255) NOT NULL,
|
|
NomeFantasia VARCHAR(255),
|
|
TipoPessoa VARCHAR(2) NOT NULL, -- PF / PJ
|
|
Documento VARCHAR(20) NOT NULL, -- CPF/CNPJ
|
|
RG VARCHAR(20),
|
|
InscricaoMunicipal VARCHAR(20),
|
|
DataNascimento DATE,
|
|
|
|
-- Contato
|
|
Contato VARCHAR(255),
|
|
Telefone1 VARCHAR(20),
|
|
Telefone2 VARCHAR(20),
|
|
Celular VARCHAR(20),
|
|
Whatsapp VARCHAR(20),
|
|
Email VARCHAR(150),
|
|
EmailNFe VARCHAR(150),
|
|
Site VARCHAR(255),
|
|
|
|
-- Classificação
|
|
Grupo VARCHAR(100),
|
|
|
|
-- Endereço
|
|
Cep VARCHAR(15),
|
|
Endereco VARCHAR(255),
|
|
Numero INT,
|
|
Complemento VARCHAR(255),
|
|
Bairro VARCHAR(255),
|
|
Cidade VARCHAR(255),
|
|
UF CHAR(2),
|
|
Pais VARCHAR(50),
|
|
|
|
-- Financeiro
|
|
LimiteCredito DECIMAL(10,2) DEFAULT 0,
|
|
Bloqueado BIT DEFAULT 0,
|
|
ObservacoesCobranca VARCHAR(MAX),
|
|
|
|
-- Vendas / OS
|
|
VendedorPadraoId INT NULL,
|
|
TipoConsumidor VARCHAR(50), -- Consumidor final, revenda etc
|
|
|
|
-- Sistema
|
|
Observacoes VARCHAR(MAX),
|
|
|
|
-- Extras (campos custom)
|
|
CampoExtra1 VARCHAR(255),
|
|
CampoExtra2 VARCHAR(255),
|
|
CampoExtra3 VARCHAR(255),
|
|
|
|
-- Carteiras virtuais
|
|
Bitcoin VARCHAR(255),
|
|
Ethereum VARCHAR(255),
|
|
Litecoin VARCHAR(255),
|
|
|
|
-- Controle
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
UltimaCompra DATETIME,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
-- Relacionamento
|
|
CONSTRAINT FK_ClienteEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE,
|
|
|
|
-- Evita duplicidade
|
|
CONSTRAINT UQ_Cliente_Doc UNIQUE (EmpresaId, Documento)
|
|
);
|
|
GO
|
|
|
|
-- ================================
|
|
-- SERVIÇOS
|
|
-- ================================
|
|
CREATE TABLE Servicos (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
|
|
-- Dados básicos
|
|
Nome VARCHAR(255) NOT NULL,
|
|
Descricao VARCHAR(MAX),
|
|
|
|
-- Valores
|
|
ValorPadrao DECIMAL(10,2) NOT NULL,
|
|
Custo DECIMAL(10,2),
|
|
|
|
-- Comissão
|
|
TipoComissao VARCHAR(10) NOT NULL DEFAULT 'Percentual', -- Percentual ou Fixo
|
|
ValorComissao DECIMAL(10,2) NOT NULL DEFAULT 0,
|
|
|
|
-- Tempo
|
|
TempoEstimado INT, -- em minutos
|
|
|
|
-- Controle
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
-- Relacionamento
|
|
CONSTRAINT FK_ServicoEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- Situação OS
|
|
-- ================================
|
|
CREATE TABLE SituacoesOS (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
|
|
-- Identificação
|
|
Descricao VARCHAR(255) NOT NULL,
|
|
|
|
-- Classificação (os 3 grupos da tela)
|
|
Tipo VARCHAR(20) NOT NULL,
|
|
-- Entrada | Oficina | Saida
|
|
|
|
-- Regras da OS
|
|
ConsideraAberta BIT NOT NULL DEFAULT 1,
|
|
ConsideraFechada BIT NOT NULL DEFAULT 0,
|
|
MarcaComoPronto BIT NOT NULL DEFAULT 0,
|
|
|
|
-- Aparência (igual na tela)
|
|
CorFundo VARCHAR(20),
|
|
CorFonte VARCHAR(20),
|
|
|
|
-- Financeiro (opcional)
|
|
PlanoContasId INT NULL,
|
|
|
|
-- Controle
|
|
Ordem INT DEFAULT 0, -- ordem de exibição
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
-- Relacionamento
|
|
CONSTRAINT FK_SituacaoEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- CONTRATOS
|
|
-- ================================
|
|
CREATE TABLE Contratos (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
ClienteId INT NOT NULL,
|
|
|
|
-- Dados principais
|
|
Descricao VARCHAR(255),
|
|
Observacoes VARCHAR(MAX),
|
|
|
|
Valor DECIMAL(10,2) NOT NULL,
|
|
DataInicio DATE,
|
|
DataValidade DATE,
|
|
|
|
-- Controle de franquia (ex: horas inclusas)
|
|
FranquiaTempo INT, -- minutos ou horas (você define padrão)
|
|
|
|
-- Controle
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
-- Relacionamentos
|
|
CONSTRAINT FK_ContratoEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE,
|
|
|
|
CONSTRAINT FK_ContratoCliente
|
|
FOREIGN KEY (ClienteId) REFERENCES Clientes(Id)
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- CONTRATOS - EQUIPAMENTOS
|
|
-- ================================
|
|
CREATE TABLE ContratoEquipamentos (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
ContratoId INT NOT NULL,
|
|
|
|
-- Dados do equipamento
|
|
Modelo VARCHAR(255),
|
|
Marca VARCHAR(255),
|
|
Operadora VARCHAR(100),
|
|
Serial VARCHAR(100),
|
|
NumeroPatrimonio VARCHAR(100),
|
|
|
|
Observacoes VARCHAR(MAX),
|
|
|
|
-- Relacionamento
|
|
CONSTRAINT FK_ContratoEquipamento
|
|
FOREIGN KEY (ContratoId) REFERENCES Contratos(Id) ON DELETE CASCADE
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- PLANO DE CONTAS
|
|
-- ================================
|
|
CREATE TABLE PlanoDeContas (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
|
|
-- Hierarquia
|
|
ContaPaiId INT NULL,
|
|
|
|
-- Identificação
|
|
Nome VARCHAR(255) NOT NULL,
|
|
Codigo VARCHAR(50), -- Ex: 1.01.02
|
|
Tipo VARCHAR(20) NOT NULL, -- Receita / Despesa
|
|
|
|
-- Controle
|
|
AceitaLancamento BIT NOT NULL DEFAULT 1, -- se pode lançar direto
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
-- Relacionamentos
|
|
CONSTRAINT FK_PlanoContaEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE,
|
|
|
|
CONSTRAINT FK_PlanoContaPai
|
|
FOREIGN KEY (ContaPaiId) REFERENCES PlanoDeContas(Id)
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- CONTAS A PAGAR
|
|
-- ================================
|
|
CREATE TABLE ContasReceber (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
ClienteId INT NOT NULL,
|
|
|
|
-- Classificação
|
|
PlanoContaId INT NOT NULL,
|
|
|
|
-- Origem (contrato, venda futura, etc)
|
|
ContratoId INT NULL,
|
|
|
|
-- Dados financeiros
|
|
Descricao VARCHAR(255),
|
|
Valor DECIMAL(10,2) NOT NULL,
|
|
DataEmissao DATE,
|
|
DataVencimento DATE NOT NULL,
|
|
DataPagamento DATE,
|
|
|
|
-- Controle
|
|
Status VARCHAR(20) NOT NULL DEFAULT 'Pendente',
|
|
-- Pendente / Pago / Cancelado / Atrasado
|
|
|
|
ValorPago DECIMAL(10,2),
|
|
Juros DECIMAL(10,2) DEFAULT 0,
|
|
Multa DECIMAL(10,2) DEFAULT 0,
|
|
Desconto DECIMAL(10,2) DEFAULT 0,
|
|
|
|
-- Observações
|
|
Observacoes VARCHAR(MAX),
|
|
|
|
-- Controle sistema
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
-- Relacionamentos
|
|
CONSTRAINT FK_ReceberEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE,
|
|
|
|
CONSTRAINT FK_ReceberCliente
|
|
FOREIGN KEY (ClienteId) REFERENCES Clientes(Id),
|
|
|
|
CONSTRAINT FK_ReceberPlano
|
|
FOREIGN KEY (PlanoContaId) REFERENCES PlanoDeContas(Id),
|
|
|
|
CONSTRAINT FK_ReceberContrato
|
|
FOREIGN KEY (ContratoId) REFERENCES Contratos(Id)
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- CONTAS A PAGAR
|
|
-- ================================
|
|
CREATE TABLE ContasPagar (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
FornecedorId INT NOT NULL,
|
|
|
|
-- Classificação
|
|
PlanoContaId INT NOT NULL,
|
|
|
|
-- Dados financeiros
|
|
Descricao VARCHAR(255),
|
|
Valor DECIMAL(10,2) NOT NULL,
|
|
DataEmissao DATE,
|
|
DataVencimento DATE NOT NULL,
|
|
DataPagamento DATE,
|
|
|
|
-- Controle
|
|
Status VARCHAR(20) NOT NULL DEFAULT 'Pendente',
|
|
|
|
ValorPago DECIMAL(10,2),
|
|
Juros DECIMAL(10,2) DEFAULT 0,
|
|
Multa DECIMAL(10,2) DEFAULT 0,
|
|
Desconto DECIMAL(10,2) DEFAULT 0,
|
|
|
|
-- Observações
|
|
Observacoes VARCHAR(MAX),
|
|
|
|
-- Controle sistema
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
-- Relacionamentos
|
|
CONSTRAINT FK_PagarEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE,
|
|
|
|
CONSTRAINT FK_PagarFornecedor
|
|
FOREIGN KEY (FornecedorId) REFERENCES Fornecedores(Id),
|
|
|
|
CONSTRAINT FK_PagarPlano
|
|
FOREIGN KEY (PlanoContaId) REFERENCES PlanoDeContas(Id)
|
|
);
|
|
GO
|
|
|
|
-- ================================
|
|
-- USUÁRIOS DO SISTEMA
|
|
-- ================================
|
|
CREATE TABLE Usuarios (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
|
|
Nome VARCHAR(255) NOT NULL,
|
|
Email VARCHAR(150) NOT NULL,
|
|
Usuario VARCHAR(50) NOT NULL,
|
|
SenhaHash VARCHAR(255) NOT NULL,
|
|
|
|
-- Controle
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
UltimoLogin DATETIME,
|
|
|
|
-- Auditoria
|
|
CriadoEm DATETIME DEFAULT GETDATE(),
|
|
AtualizadoEm DATETIME DEFAULT GETDATE(),
|
|
|
|
-- Relacionamento
|
|
CONSTRAINT FK_UsuarioEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE,
|
|
|
|
-- Evita login duplicado por empresa
|
|
CONSTRAINT UQ_Usuario_Login UNIQUE (EmpresaId, Usuario)
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- PERFIS DE USUÁRIO
|
|
-- ================================
|
|
CREATE TABLE Perfis (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
EmpresaId INT NOT NULL,
|
|
|
|
Nome VARCHAR(100) NOT NULL, -- Admin, Técnico, etc
|
|
Descricao VARCHAR(255),
|
|
|
|
Ativo BIT NOT NULL DEFAULT 1,
|
|
|
|
CONSTRAINT FK_PerfilEmpresa
|
|
FOREIGN KEY (EmpresaId) REFERENCES Empresa(Id) ON DELETE CASCADE
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- PERMISSÕES DE USUÁRIO
|
|
-- ================================
|
|
CREATE TABLE Permissoes (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
|
|
Nome VARCHAR(100) NOT NULL, -- Ex: CLIENTE_CADASTRAR
|
|
Descricao VARCHAR(255)
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- PERFIL - PERMISSÕES
|
|
-- ================================
|
|
CREATE TABLE PerfilPermissoes (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
PerfilId INT NOT NULL,
|
|
PermissaoId INT NOT NULL,
|
|
|
|
CONSTRAINT FK_PerfilPermissao_Perfil
|
|
FOREIGN KEY (PerfilId) REFERENCES Perfis(Id) ON DELETE CASCADE,
|
|
|
|
CONSTRAINT FK_PerfilPermissao_Permissao
|
|
FOREIGN KEY (PermissaoId) REFERENCES Permissoes(Id) ON DELETE CASCADE,
|
|
|
|
CONSTRAINT UQ_PerfilPermissao UNIQUE (PerfilId, PermissaoId)
|
|
);
|
|
GO
|
|
-- ================================
|
|
-- USUÁRIO - PERFIL
|
|
-- ================================
|
|
CREATE TABLE UsuarioPerfis (
|
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
|
UsuarioId INT NOT NULL,
|
|
PerfilId INT NOT NULL,
|
|
|
|
CONSTRAINT FK_UsuarioPerfil_Usuario
|
|
FOREIGN KEY (UsuarioId)
|
|
REFERENCES Usuarios(Id)
|
|
ON DELETE CASCADE,
|
|
|
|
CONSTRAINT FK_UsuarioPerfil_Perfil
|
|
FOREIGN KEY (PerfilId)
|
|
REFERENCES Perfis(Id)
|
|
ON DELETE NO ACTION,
|
|
|
|
CONSTRAINT UQ_UsuarioPerfil UNIQUE (UsuarioId, PerfilId)
|
|
);
|
|
GO |