02 - Modelagem do Banco de Dados (Módulo de IA e Cadastro)
Este documento detalha a estrutura relacional mapeada via engenharia reversa que sustenta o ecossistema de Cadastro de Produtos e Geração de Conteúdo IA.
O banco de dados principal (foconopreco - MySQL) isola os dados por Tenant através da tabela Organizacoes, garantindo que os prompts, templates e filas de conteúdo não se misturem.
1. Dicionário de Dados
1.1 Tabela: Organizacoes
Atua como o nó central de multi-tenancy e controle de acesso da API de distribuição.
id_organizacao(PK): Identificador único da empresa.nome_empresa: Razão social ou nome fantasia.cnpj_cpf: Documento fiscal.api_key: Token de autorização exigido pelo endpoint/api/v1/textos-iapara consumo via ERP.ativa(Boolean): Flag de bloqueio global do tenant.data_cadastro(Timestamp): Mapeado comoCREATED_ATno modelo Laravel.
1.2 Tabela: Produtos
Registra os produtos internos do sistema que servem como gatilho para a fila de IA. (Nota técnica: Esta tabela possui nomenclatura e PK customizadas e não utiliza os timestamps padrão do Laravel)
ID(PK): Identificador único do produto.id_organizacao(FK): Vínculo com a empresa dona do registro.SKU: Código identificador da mercadoria (utilizado como chave principal nas integrações e importações).Nome: Palavra-chave ou título base utilizado para disparar as buscas no Google.id_template_ia(FK - Nullable): Template de comportamento associado a este produto.ia_processado(Boolean/Tinyint): Flag que indica se o produto já possui um conteúdo gerado e salvo.ativo(Boolean/Tinyint): Status do produto no painel.
1.3 Tabela: templates_ia
Armazena a inteligência e as regras de engenharia de prompt geradas dinamicamente.
id(PK): Identificador do template.id_organizacao(FK): Garante que a empresa só visualize seus próprios templates.nome_template: Nome de exibição no painel (ex: "Descrição SEO Premium").prompt_sistema(Text/LongText): O bloco massivo de instruções, persona e tom de voz lido pelo Flowise.json_schema_saida(Text/LongText): A estrutura JSON obrigatória para validação dos dados de retorno da IA.ativo(Boolean): Permite desativar templates antigos sem perder o histórico.created_at/updated_at: Timestamps padrão.
1.4 Tabela: FilaGeracaoConteudo
O "coração" do processamento assíncrono. Gerencia o ciclo de vida do Worker.
id(PK): Identificador da tarefa.id_produto(FK): Vincula a tarefa ao registro na tabelaProdutos.id_organizacao(FK): Vínculo com a empresa.id_template_ia(FK): Template de IA a ser usado na execução atual.sku: Cache do SKU para facilitar buscas na UI.nome_produto: Nome base para a busca.palavra_chave_entrada: O termo exato digitado no formulário ou planilha.status(Varchar): Estado da fila (pendente,processando,concluido,erro).mensagem_erro(Text - Nullable): Grava a exceção capturada caso o Worker falhe.aprovado(Tinyint): Status da curadoria humana (0 = Não revisado, 1 = Aprovado).data_aprovacao(Timestamp - Nullable): Momento exato em que o operador clicou em "Salvar e Aprovar".created_at/updated_at: Timestamps padrão.
1.5 Tabela: conteudo_gerado_ia
Armazena o payload final purificado retornado pelo Gemini/Flowise e tratado pelo Laravel.
id(PK): Identificador do conteúdo.produto_id(FK): Vínculo com o produto.id_template_ia(FK): Rastreia com qual template essa versão específica foi gerada.conteudo_gerado_json(JSON): O documento completo contendo títulos, especificações, galerias de imagens e SEO.modelo_usado: Armazena a string do modelo (ex:gemini-2.5-flash).versao_prompt: Controle de versionamento do prompt enviado.gerado_em(Timestamp): Data de conclusão da geração.
1.6 Tabela: cache_api_google
Estratégia de redução de custos (Cost-Saving) da infraestrutura.
id(PK): Identificador do registro de cache.produto_id(FK): Vínculo com o item pesquisado.tipo_busca(Varchar): Indica a finalidade da coleta (textoouimagem).resposta_bruta_json(LongText/JSON): Dump da resposta original do Google Custom Search.buscado_em(Timestamp): Utilizado para calcular a expiração do cache e forçar renovações caso necessário.
2. Relacionamentos e Integridade
A arquitetura garante isolamento de dados baseada nas seguintes regras de negócio (ON DELETE e ON UPDATE):
1. Nó Multi-Tenancy: A exclusão de uma Organizacao deve realizar o CASCADE de todos os Produtos, templates_ia e tarefas na FilaGeracaoConteudo.
2. Proteção de Templates: O sistema impede (via exceção capturada no Controller) a exclusão de um template_ia caso existam registros vinculados na tabela de Produtos ou na Fila.
3. Múltiplas Versões de Conteúdo: O relacionamento entre Produtos e conteudo_gerado_ia é de 1:N. A API externa utiliza queries agregadoras (MAX(id)) para recuperar sempre a versão cronologicamente mais recente e que possua aprovação na fila associada.