LevelOS-Core/ArquivosAuxiliares/Database.sql
2026-04-17 21:09:19 -03:00

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