// Use DBML to define your database structure // Docs: https://dbml.dbdiagram.io/docs // ===================================================== // 🌐 CAMADA GLOBAL (ADMIN SAAS) // ===================================================== Table planos { id integer [pk, increment] nome varchar(50) [not null, unique] descricao text preco_mensal decimal(10,2) [not null, default: 0.00] recursos text max_usuarios integer max_carros integer max_clientes integer max_storage_gb integer [default: 10] ativo boolean [default: true] created_at datetime updated_at datetime } Table tenants { id text [pk] // UUID (SQLite) nome_fantasia varchar(255) [not null] razao_social varchar(255) [not null] cnpj varchar(14) [not null, unique] email varchar(255) [not null] telefone varchar(20) endereco text plano_id integer status varchar(20) data_criacao date data_expiracao date configuracoes text subdomain varchar(50) [unique] logo_url varchar(500) created_at datetime updated_at datetime } Table usuarios_saas { id integer [pk, increment] nome varchar(255) [not null] email varchar(255) [not null, unique] senha_hash varchar(255) [not null] perfil varchar(20) ativo boolean [default: true] ultimo_login datetime created_at datetime updated_at datetime } Table pagamentos { id integer [pk, increment] tenant_id text [not null] valor decimal(10,2) [not null] descricao varchar(255) metodo varchar(20) [not null] status varchar(20) referencia_externa varchar(100) data_vencimento date data_pagamento datetime gateway_resposta text created_at datetime updated_at datetime } Table configuracoes_globais { id integer [pk, increment] chave varchar(100) [not null, unique] valor text [not null] tipo varchar(20) descricao text categoria varchar(50) updated_at datetime } // ===================================================== // 🏪 CAMADA CONCESSIONÁRIA // ===================================================== Table funcionarios { id integer [pk, increment] tenant_id text [not null] nome varchar(255) [not null] email varchar(255) [not null] senha_hash varchar(255) [not null] cpf varchar(11) telefone varchar(20) cargo varchar(100) nivel_acesso varchar(20) ativo boolean created_at datetime updated_at datetime } Table fornecedores { id integer [pk, increment] tenant_id text [not null] nome varchar(255) [not null] razao_social varchar(255) cnpj varchar(14) email varchar(255) telefone varchar(20) endereco text ativo boolean created_at datetime updated_at datetime } Table carros { id integer [pk, increment] tenant_id text [not null] fornecedor_id integer codigo_interno varchar(50) chassi varchar(17) [unique] placa varchar(8) marca varchar(100) modelo varchar(255) ano_fabricacao integer ano_modelo integer preco_venda decimal(12,2) status varchar(20) created_at datetime updated_at datetime } Table clientes { id integer [pk, increment] tenant_id text [not null] nome varchar(255) [not null] cpf_cnpj varchar(14) [not null] email varchar(255) telefone varchar(20) status varchar(20) created_at datetime updated_at datetime } Table vendas { id integer [pk, increment] tenant_id text [not null] numero_venda varchar(20) [unique, not null] carro_id integer [not null] cliente_id integer [not null] funcionario_id integer [not null] valor_final decimal(12,2) status varchar(20) data_venda date created_at datetime updated_at datetime } // ===================================================== // 🔐 PORTAL DO CLIENTE // ===================================================== Table portal_usuarios { id integer [pk, increment] tenant_id text [not null] cliente_id integer [not null] email varchar(255) [not null] senha_hash varchar(255) [not null] ativo boolean created_at datetime updated_at datetime } Table notificacoes_cliente { id integer [pk, increment] tenant_id text [not null] cliente_id integer [not null] titulo varchar(255) [not null] mensagem text [not null] tipo varchar(20) lida boolean created_at datetime } // ===================================================== // 🔒 LGPD // ===================================================== Table consentimentos_lgpd { id integer [pk, increment] tenant_id text [not null] cliente_id integer [not null] tipo_consentimento varchar(50) finalidade text aceito boolean data_consentimento datetime } Table solicitacoes_dados { id integer [pk, increment] tenant_id text [not null] cliente_id integer [not null] tipo_solicitacao varchar(30) status varchar(20) data_solicitacao datetime } // ===================================================== // RELACIONAMENTOS (Refs) // ===================================================== Ref: tenants.plano_id > planos.id Ref: pagamentos.tenant_id > tenants.id Ref: funcionarios.tenant_id > tenants.id Ref: fornecedores.tenant_id > tenants.id Ref: carros.tenant_id > tenants.id Ref: carros.fornecedor_id > fornecedores.id Ref: clientes.tenant_id > tenants.id Ref: vendas.tenant_id > tenants.id Ref: vendas.carro_id > carros.id Ref: vendas.cliente_id > clientes.id Ref: vendas.funcionario_id > funcionarios.id Ref: portal_usuarios.cliente_id > clientes.id Ref: notificacoes_cliente.cliente_id > clientes.id Ref: consentimentos_lgpd.cliente_id > clientes.id Ref: solicitacoes_dados.cliente_id > clientes.id