-- ==========================================================
-- 1. ESTRUTURA DO BANCO DE DADOS CENTRAL (CONFIGURAÇÕES SAAS)
-- ==========================================================
CREATE DATABASE IF NOT EXISTS coatlus_central CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE coatlus_central;
-- Tabela de Tenants (Clientes/Empresas do SaaS)
CREATE TABLE IF NOT EXISTS tenants (
id INT AUTO_INCREMENT PRIMARY KEY,
nome_empresa VARCHAR(150) NOT NULL,
cnpj VARCHAR(14) UNIQUE NOT NULL,
token_acesso VARCHAR(64) UNIQUE NOT NULL,
db_name VARCHAR(64) NOT NULL,
status INT DEFAULT 1, -- 1: Ativo, 0: Suspenso
criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- Tabela de Histórico de Alterações de Banco de Dados (Auditoria Central)
CREATE TABLE IF NOT EXISTS historico_alteracoes (
id INT AUTO_INCREMENT PRIMARY KEY,
query_sql TEXT NOT NULL,
tabela VARCHAR(64) NOT NULL DEFAULT 'geral',
executado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
bancos_afetados TEXT NOT NULL,
status VARCHAR(20) NOT NULL,
erro TEXT NULL
) ENGINE=InnoDB;
-- Conceder permissões totais para o usuário do PHP poder criar e alterar os bancos de clientes
GRANT ALL PRIVILEGES ON *.* TO 'coatlus_user'@'%';
FLUSH PRIVILEGES;
-- Inserir empresa de teste inicial no banco central
INSERT INTO tenants (nome_empresa, cnpj, token_acesso, db_name, status)
VALUES (
'CLIENTE TESTE COATLUS',
'12345678000199',
'token_teste_coatlus_123456',
'coatlus_cliente_teste',
1
) ON DUPLICATE KEY UPDATE status=status;
-- ==========================================================
-- 2. ESTRUTURA DO BANCO DE DADOS DO CLIENTE (MOLDE INDEPENDENTE)
-- ==========================================================
USE DATABASE_PLACEHOLDER;
DROP TABLE IF EXISTS `adquirentes`;
CREATE TABLE `adquirentes` (
`adq_id` int(11) NOT NULL,
`empresa_id` int(11) DEFAULT NULL,
`adq_cnpj` varchar(14) DEFAULT NULL,
`adq_nome` varchar(100) DEFAULT NULL,
`adquirente_ativo` int(11) DEFAULT NULL,
`ativo` int(11) DEFAULT 1,
PRIMARY KEY (`adq_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DROP TABLE IF EXISTS `apps`;
CREATE TABLE `apps` (
`app_id` int(11) NOT NULL AUTO_INCREMENT,
`app_produto` varchar(30) DEFAULT NULL,
`app_nome_dispositivo` varchar(60) DEFAULT NULL,
`app_servidor` varchar(60) DEFAULT NULL,
`app_codigo_ativavao` varchar(6) DEFAULT NULL,
`app_dispositivo` int(2) DEFAULT NULL,
`app_status` int(1) DEFAULT NULL,
`data_cadastro` timestamp NULL DEFAULT current_timestamp(),
PRIMARY KEY (`app_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DROP TABLE IF EXISTS `bandeiras`;
CREATE TABLE `bandeiras` (
`codigo` varchar(10) NOT NULL,
`nome` varchar(100) DEFAULT NULL,
`ativo` int(11) DEFAULT 1,
`usuario` varchar(100) DEFAULT NULL,
PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DROP TABLE IF EXISTS `cobrar`;
CREATE TABLE `cobrar` (
`cobrar_id` int(11) NOT NULL,
`empresa_id` int(11) DEFAULT NULL,
`cobrar_nome` varchar(100) DEFAULT NULL,
`cobrar_forma_recebimento` varchar(5) DEFAULT NULL,
`grupo_ativo` int(11) DEFAULT 1,
`grupo_app_vendas` varchar(10) DEFAULT '1',
PRIMARY KEY (`cobrar_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DROP TABLE IF EXISTS `cobrar_integracao`;
CREATE TABLE `cobrar_integracao` (
`cobrar_integracao_id` int(11) NOT NULL,
`cobrar_id` int(11) DEFAULT NULL,
`empresa_id` int(11) DEFAULT NULL,
`cobrar_integracao_nome` varchar(100) DEFAULT NULL,
PRIMARY KEY (`cobrar_integracao_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DROP TABLE IF EXISTS `grupos`;
CREATE TABLE `grupos` (
`grupo_id` int(11) NOT NULL,
`empresa_id` int(11) DEFAULT NULL,
`grupo_nome` varchar(100) DEFAULT NULL,
`ativo` int(11) DEFAULT 1,
PRIMARY KEY (`grupo_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DROP TABLE IF EXISTS `integracao`;
CREATE TABLE `integracao` (
`integracao_id` int(11) NOT NULL,
`empresa_id` int(11) DEFAULT NULL,
`integracao_nome` varchar(100) DEFAULT NULL,
`integracao_tpAmb` varchar(2) DEFAULT NULL,
`integracao_cnpj_adquirente` varchar(14) DEFAULT NULL,
`integracao_cliente_id` varchar(100) DEFAULT NULL,
`integracao_merchant_id` varchar(100) DEFAULT NULL,
PRIMARY KEY (`integracao_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DROP TABLE IF EXISTS `produtos`;
CREATE TABLE `produtos` (
`produto_id` int(11) NOT NULL,
`empresa_id` int(11) DEFAULT NULL,
`produto_codigo` varchar(50) DEFAULT NULL,
`produto_descricao` varchar(200) DEFAULT NULL,
`produto_valor` double DEFAULT NULL,
`produto_grupo_id` int(11) DEFAULT NULL,
`produto_unidade` varchar(10) DEFAULT NULL,
`produto_gtin` varchar(14) DEFAULT NULL,
`produto_ncm` varchar(8) DEFAULT NULL,
`produto_cest` varchar(7) DEFAULT NULL,
`produto_cfop` varchar(4) DEFAULT NULL,
`produto_cst_icms` varchar(3) DEFAULT NULL,
`produto_aliquota_icms` double DEFAULT NULL,
`produto_cst_pis` varchar(3) DEFAULT NULL,
`produto_aliquota_pis` double DEFAULT NULL,
`produto_cst_cofins` varchar(3) DEFAULT NULL,
`produto_aliquota_cofins` double DEFAULT NULL,
`produto_origem` int(11) DEFAULT NULL,
`ativo` int(11) DEFAULT 1,
PRIMARY KEY (`produto_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DROP TABLE IF EXISTS `sincronizacao`;
CREATE TABLE `sincronizacao` (
`tabela_nome` varchar(100) NOT NULL,
`sincronizado_em` varchar(30) DEFAULT NULL,
PRIMARY KEY (`tabela_nome`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DROP TABLE IF EXISTS `vendas`;
CREATE TABLE `vendas` (
`venda_id` int(11) NOT NULL AUTO_INCREMENT,
`empresa_id` int(11) DEFAULT NULL,
`venda_uuid` varchar(64) DEFAULT NULL,
`cliente_id` int(11) DEFAULT NULL,
`venda_data` varchar(30) DEFAULT NULL,
`total` double DEFAULT NULL,
`situacao` varchar(20) DEFAULT NULL,
`observacao` text DEFAULT NULL,
`fatura_id` int(11) DEFAULT 0,
`nfe_chave` varchar(44) DEFAULT NULL,
`nfe_recibo` varchar(20) DEFAULT NULL,
`nfe_protocolo` varchar(20) DEFAULT NULL,
`nfe_xml` text DEFAULT NULL,
`rejeicao_motivo` text DEFAULT NULL,
`dispositivo` varchar(50) DEFAULT NULL,
`sincronizado` int(11) DEFAULT 0,
PRIMARY KEY (`venda_id`),
UNIQUE KEY `venda_uuid` (`venda_uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DROP TABLE IF EXISTS `vendas_itens`;
CREATE TABLE `vendas_itens` (
`item_id` int(11) NOT NULL AUTO_INCREMENT,
`venda_id` int(11) DEFAULT NULL,
`produto_id` int(11) DEFAULT NULL,
`quantidade` double DEFAULT NULL,
`valor_unitario` double DEFAULT NULL,
`subtotal` double DEFAULT NULL,
`desconto` double DEFAULT NULL,
`total` double DEFAULT NULL,
PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DROP TABLE IF EXISTS `vendas_pagamentos`;
CREATE TABLE `vendas_pagamentos` (
`pagamento_id` int(11) NOT NULL AUTO_INCREMENT,
`venda_id` int(11) DEFAULT NULL,
`cobrar_id` int(11) DEFAULT NULL,
`cobrar_integracao_id` int(11) DEFAULT NULL,
`cobrar_integracao_nome` varchar(100) DEFAULT NULL,
`forma_pagamento` varchar(50) DEFAULT NULL,
`valor` double DEFAULT NULL,
`nsu` varchar(50) DEFAULT NULL,
`bandeira_id` varchar(50) DEFAULT NULL,
`adquirente` varchar(100) DEFAULT NULL,
`adquirente_cnpj` varchar(14) DEFAULT NULL,
`integracao_payload` text DEFAULT NULL,
PRIMARY KEY (`pagamento_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;