-- ================================ -- 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