{"id":565,"date":"2026-10-12T09:00:00","date_gmt":"2026-10-12T09:00:00","guid":{"rendered":"https:\/\/leiritech.pt\/blog\/consultas-aprovadas-ia-erp-sem-sql-livre"},"modified":"2026-10-12T09:00:00","modified_gmt":"2026-10-12T09:00:00","slug":"consultas-aprovadas-ia-erp-sem-sql-livre","status":"publish","type":"post","link":"https:\/\/leiritech.pt\/blog\/consultas-aprovadas-ia-erp-sem-sql-livre","title":{"rendered":"ChatGPT privado para empresas: consultas aprovadas, n\u00e3o SQL"},"content":{"rendered":"<p>&quot;Quanto \u00e9 que a Metal\u00fargica Silva nos deve, e desde quando?&quot; \u00c9 uma pergunta de trinta segundos. Hoje, na maioria das PME, demora meia hora: algu\u00e9m abre o PHC, exporta o extrato de conta corrente, cola no Excel, filtra por vencimento, e manda um print por email. Se essa pessoa estiver de f\u00e9rias, a pergunta espera.<\/p>\n<p>A promessa de um &quot;ChatGPT privado para empresas&quot; \u00e9 acabar com essa meia hora. E a forma mais r\u00e1pida de fazer uma demo disso \u00e9 tamb\u00e9m a mais perigosa: dar ao modelo de linguagem acesso \u00e0 base de dados do ERP e deix\u00e1-lo escrever o SQL que achar melhor. Funciona lindamente em palco. Em produ\u00e7\u00e3o, \u00e9 a decis\u00e3o que vais lamentar.<\/p>\n<p>Este artigo explica a alternativa que usamos: o modelo n\u00e3o escreve SQL. Escolhe uma consulta de um cat\u00e1logo que tu aprovaste, preenche os par\u00e2metros, e o sistema valida tudo antes de tocar no ERP.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/leiritech.pt\/blog\/wp-content\/uploads\/2026\/10\/blog-consultas-aprovadas-ia-erp-sem-sql-livre-1.png\" alt=\"Respons\u00e1vel financeira num escrit\u00f3rio por cima de uma oficina metalomec\u00e2nica, a perguntar ao assistente no port\u00e1til com o ERP aberto no segundo monitor\" \/><\/p>\n<h2>O que corre mal quando a IA escreve SQL livre?<\/h2>\n<p>A t\u00e9cnica chama-se &quot;text-to-SQL&quot;: a pergunta entra em portugu\u00eas, o modelo devolve uma consulta, o sistema executa-a e mostra o resultado. H\u00e1 tr\u00eas problemas, e nenhum \u00e9 te\u00f3rico.<\/p>\n<p><strong>Primeiro, o modelo erra sem avisar.<\/strong> A pr\u00f3pria ficha do modelo do AMALIA, o modelo de linguagem portugu\u00eas lan\u00e7ado este ano, diz-o com uma honestidade que se agradece: o modelo pode alucinar, os resultados devem ser verificados sempre que a exatid\u00e3o importa, e n\u00e3o deve servir de autoridade de decis\u00e3o em dom\u00ednios onde os erros t\u00eam consequ\u00eancias sem uma pessoa qualificada pelo meio. N\u00e3o \u00e9 um defeito do AMALIA; vale para qualquer modelo, nacional ou americano. Mas repara no que acontece com SQL: uma consulta mal escrita n\u00e3o d\u00e1 erro, d\u00e1 um n\u00famero. Um <code>JOIN<\/code> a mais e as faturas aparecem a dobrar. Um filtro de datas com <code>&lt;<\/code> em vez de <code>&lt;=<\/code> e perdes o \u00faltimo dia do trimestre. O resultado parece plaus\u00edvel, vem formatado, e ningu\u00e9m desconfia.<\/p>\n<p><strong>Segundo, o esquema do teu ERP n\u00e3o \u00e9 \u00f3bvio.<\/strong> Um ERP como o PHC tem centenas de tabelas, campos com nomes herdados de h\u00e1 vinte anos, documentos anulados que continuam na base de dados, notas de cr\u00e9dito que abatem faturas noutra tabela. O que a tua empresa chama &quot;vendas&quot; (l\u00edquido de devolu\u00e7\u00f5es? com ou sem IVA? s\u00f3 faturas, ou tamb\u00e9m vendas a dinheiro?) n\u00e3o est\u00e1 escrito em lado nenhum do esquema. Um modelo que n\u00e3o conhece estas regras inventa uma interpreta\u00e7\u00e3o. E cada vez que a pergunta muda ligeiramente, pode inventar outra.<\/p>\n<p><strong>Terceiro, seguran\u00e7a.<\/strong> Mesmo com um utilizador de base de dados s\u00f3 de leitura, SQL livre deixa o modelo ler tudo o que esse utilizador v\u00ea: sal\u00e1rios, dados pessoais de clientes, margens por comercial. Basta algu\u00e9m pedir &quot;mostra-me a tabela de funcion\u00e1rios&quot; ou um PDF de fornecedor trazer instru\u00e7\u00f5es escondidas. Restringir isto depois de o modelo poder escrever qualquer consulta \u00e9 tapar buracos um a um.<\/p>\n<h2>Como funciona um cat\u00e1logo de consultas aprovadas?<\/h2>\n<p>A ideia \u00e9 simples: tiramos ao modelo a parte em que ele \u00e9 fraco (escrever c\u00f3digo exato contra um esquema que n\u00e3o conhece) e deixamos-lhe a parte em que \u00e9 bom (perceber o que a pessoa quer, em portugu\u00eas).<\/p>\n<p>Na pr\u00e1tica, o projeto come\u00e7a com uma lista. Sentamo-nos contigo e com quem faz as perguntas todos os dias, e recolhemos as perguntas reais. Numa PME t\u00edpica, a maioria cabe numas poucas dezenas de consultas. Por exemplo, um cat\u00e1logo de 30, que \u00e9 a ordem de grandeza com que costumamos arrancar um piloto:<\/p>\n<ul>\n<li>saldo em d\u00edvida de um cliente, por antiguidade;<\/li>\n<li>fatura\u00e7\u00e3o por cliente, por per\u00edodo, com ou sem notas de cr\u00e9dito;<\/li>\n<li>refer\u00eancias abaixo do stock m\u00ednimo, por armaz\u00e9m;<\/li>\n<li>encomendas de cliente em aberto h\u00e1 mais de N dias;<\/li>\n<li>produ\u00e7\u00e3o conclu\u00edda vs. planeada, por semana.<\/li>\n<\/ul>\n<p>Cada consulta \u00e9 escrita por n\u00f3s, \u00e0 m\u00e3o, contra o teu ERP, e revista contigo. Tem um nome, uma descri\u00e7\u00e3o em portugu\u00eas, par\u00e2metros com tipo (um cliente que tem de existir, uma data, um armaz\u00e9m de uma lista fechada) e uma defini\u00e7\u00e3o de neg\u00f3cio expl\u00edcita: &quot;fatura\u00e7\u00e3o = faturas e vendas a dinheiro, menos notas de cr\u00e9dito, sem IVA, documentos anulados exclu\u00eddos&quot;. Essa defini\u00e7\u00e3o \u00e9 discutida uma vez, assinada por ti, e passa a ser a mesma para toda a gente.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/leiritech.pt\/blog\/wp-content\/uploads\/2026\/10\/blog-consultas-aprovadas-ia-erp-sem-sql-livre-2.png\" alt=\"Dono de uma PME e programadora a rever, num monitor, a lista de consultas aprovadas, com uma folha impressa de verifica\u00e7\u00f5es na mesa\" \/><\/p>\n<p>Quando algu\u00e9m pergunta, o modelo faz s\u00f3 tr\u00eas coisas: escolhe a consulta do cat\u00e1logo que corresponde \u00e0 pergunta, extrai os par\u00e2metros (&quot;Metal\u00fargica Silva&quot;, &quot;este trimestre&quot;) e, no fim, redige a resposta com os n\u00fameros que a consulta devolveu. Entre a escolha e a resposta, h\u00e1 c\u00f3digo normal, determin\u00edstico, que:<\/p>\n<ol>\n<li>confirma que a consulta existe no cat\u00e1logo e que o perfil de quem pergunta a pode usar (o armaz\u00e9m n\u00e3o v\u00ea margens; o comercial s\u00f3 v\u00ea os seus clientes);<\/li>\n<li>valida os par\u00e2metros: o cliente existe? h\u00e1 dois clientes com nome parecido? Se sim, pergunta qual;<\/li>\n<li>executa a consulta com uma liga\u00e7\u00e3o s\u00f3 de leitura;<\/li>\n<li>regista tudo: quem perguntou, a pergunta original, a consulta escolhida, os par\u00e2metros, os n\u00fameros devolvidos e a resposta final.<\/li>\n<\/ol>\n<p>Se nenhuma consulta do cat\u00e1logo serve, o assistente diz que n\u00e3o sabe responder a isso e regista a pergunta. N\u00e3o improvisa.<\/p>\n<h2>Como fica uma conversa real no WhatsApp?<\/h2>\n<p>Um exemplo, com n\u00fameros ilustrativos:<\/p>\n<blockquote>\n<p><strong>Pergunta:<\/strong> Quanto nos deve a Metal\u00fargica Silva?<br \/>\n<strong>Resposta:<\/strong> A Metal\u00fargica Silva tem 18 420,50 \u20ac em aberto, em 7 faturas. 6 980 \u20ac est\u00e3o vencidos h\u00e1 mais de 60 dias (FT 2026\/1184 e FT 2026\/1203). Fonte: consulta &quot;Saldo de cliente por antiguidade&quot;, dados do ERP \u00e0s 09:42.<\/p>\n<\/blockquote>\n<blockquote>\n<p><strong>Pergunta:<\/strong> E o que lhe fatur\u00e1mos este trimestre?<br \/>\n<strong>Resposta:<\/strong> Entre 1 de julho e 30 de setembro: 41 300 \u20ac sem IVA, j\u00e1 descontadas 2 notas de cr\u00e9dito (1 150 \u20ac). Fonte: &quot;Fatura\u00e7\u00e3o por cliente e per\u00edodo&quot;.<\/p>\n<\/blockquote>\n<blockquote>\n<p><strong>Pergunta:<\/strong> Que refer\u00eancias est\u00e3o abaixo do m\u00ednimo no armaz\u00e9m 2?<br \/>\n<strong>Resposta:<\/strong> 4 refer\u00eancias: \u2026 (lista com quantidade atual e m\u00ednimo).<\/p>\n<\/blockquote>\n<blockquote>\n<p><strong>Pergunta:<\/strong> Qual foi a margem do Rui em setembro?<br \/>\n<strong>Resposta:<\/strong> Essa informa\u00e7\u00e3o n\u00e3o est\u00e1 dispon\u00edvel para o teu perfil.<\/p>\n<\/blockquote>\n<p>Repara na \u00faltima: n\u00e3o \u00e9 o modelo a decidir que n\u00e3o deve responder. \u00c9 a regra de acesso, em c\u00f3digo, que nem sequer lhe entrega a consulta.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/leiritech.pt\/blog\/wp-content\/uploads\/2026\/10\/blog-consultas-aprovadas-ia-erp-sem-sql-livre-3.png\" alt=\"Respons\u00e1vel de armaz\u00e9m entre estantes de paletes, a consultar no telem\u00f3vel a resposta do assistente sobre stock\" \/><\/p>\n<h2>Mas isso n\u00e3o \u00e9 s\u00f3 um relat\u00f3rio com outro nome?<\/h2>\n<p>\u00c9 a obje\u00e7\u00e3o mais justa, e a resposta \u00e9: em parte, sim. E ainda bem.<\/p>\n<p>Os relat\u00f3rios do ERP j\u00e1 t\u00eam as consultas certas. O que n\u00e3o t\u00eam \u00e9 a porta de entrada. Para os usar, tens de saber que existem, em que menu est\u00e3o, que filtros preencher e como ler o resultado. O assistente troca essa parte por uma pergunta em portugu\u00eas, a partir do telem\u00f3vel, no armaz\u00e9m ou na estrada. Percebe &quot;este trimestre&quot;, &quot;o Silva&quot; e &quot;o que est\u00e1 para tr\u00e1s&quot;. Junta duas consultas numa resposta (&quot;deve 18 mil, fatur\u00e1mos 41 mil este trimestre&quot;). E escreve em portugu\u00eas europeu, que \u00e9 precisamente para o que modelos como o AMALIA foram pensados.<\/p>\n<p>O ganho n\u00e3o est\u00e1 em a IA saber mais do que o teu ERP. Est\u00e1 em a pergunta deixar de depender de quem sabe mexer no ERP.<\/p>\n<p>E o cat\u00e1logo cresce. Cada pergunta a que o assistente n\u00e3o soube responder fica no registo. Ao fim de um m\u00eas, tens uma lista ordenada das perguntas que a tua equipa faz e que n\u00e3o estavam previstas. Escolhes as que valem a pena, n\u00f3s escrevemos a consulta, tu aprovas a defini\u00e7\u00e3o, e entra no cat\u00e1logo. \u00c9 um processo lento de prop\u00f3sito: cada n\u00famero que sai do assistente tem uma consulta revista por tr\u00e1s.<\/p>\n<h2>E perde-se flexibilidade?<\/h2>\n<p>Perde-se, e \u00e9 uma troca consciente. Um sistema com SQL livre responde a mais perguntas no primeiro dia. Um sistema com cat\u00e1logo responde a menos, mas cada resposta \u00e9 reproduz\u00edvel: a mesma pergunta amanh\u00e3 d\u00e1 o mesmo n\u00famero, e se o teu contabilista perguntar de onde veio, h\u00e1 uma consulta com nome e um registo com data e hora.<\/p>\n<p>Para an\u00e1lise explorat\u00f3ria (&quot;descobre-me padr\u00f5es nas vendas&quot;) h\u00e1 ferramentas melhores, usadas por quem sabe ler o resultado. Para a pergunta operacional de todos os dias, feita por quem n\u00e3o tem tempo para verificar o SQL, a previsibilidade vale mais do que a amplitude.<\/p>\n<h2>Que modelo est\u00e1 por tr\u00e1s, e onde correm os dados?<\/h2>\n<p>A arquitetura \u00e9 agn\u00f3stica ao modelo. Como o modelo s\u00f3 escolhe consultas e redige respostas, pode ser um modelo nacional como o AMALIA ou outro modelo alojado na UE, escolhido em fun\u00e7\u00e3o das tuas perguntas e do teu or\u00e7amento. Trocar de modelo n\u00e3o muda as consultas, as permiss\u00f5es nem o registo de auditoria. Essa \u00e9 outra vantagem do cat\u00e1logo: o conhecimento do teu neg\u00f3cio fica do teu lado, n\u00e3o no modelo.<\/p>\n<p>Os dados do ERP s\u00e3o lidos por uma liga\u00e7\u00e3o s\u00f3 de leitura e processados na UE. O acesso \u00e9 por perfil (RBAC). O RGPD entra no desenho: o cat\u00e1logo define, consulta a consulta, que dados pessoais podem sair, e o que n\u00e3o est\u00e1 no cat\u00e1logo n\u00e3o sai. No WhatsApp h\u00e1 um limite honesto a ter em conta: a mensagem passa pela infraestrutura da Meta, por isso as respostas devem levar s\u00f3 o necess\u00e1rio.<\/p>\n<p>N\u00e3o tens de arrancar nem migrar nada. O PHC, ou o ERP que tiveres, continua a ser a fonte de verdade.<\/p>\n<h2>Por onde come\u00e7ar?<\/h2>\n<p>Por um departamento e pelas 10 a 20 perguntas que esse departamento faz mais vezes. Escrevemos essas consultas, revemos as defini\u00e7\u00f5es contigo, ligamos o assistente ao teu ERP s\u00f3 em leitura e medimos durante um m\u00eas: quantas perguntas foram respondidas, quantas ficaram sem resposta, quantas horas deixaram de ir para exporta\u00e7\u00f5es e prints. Se os n\u00fameros n\u00e3o convencerem, ficas com um cat\u00e1logo de defini\u00e7\u00f5es de neg\u00f3cio revistas, o que j\u00e1 vale alguma coisa.<\/p>\n<p>Somos uma equipa pequena em Leiria: falas diretamente com quem escreve as consultas, n\u00e3o com um gestor de conta.<\/p>\n<p>Queres perguntar ao teu ERP em portugu\u00eas, sem os dados sa\u00edrem da UE? Fala connosco: hello@leiritech.com \u00b7 +351 914 572 595, ou v\u00ea o nosso trabalho em leiritech.pt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Deixavas uma IA escrever SQL \u00e0 solta no teu ERP? Porque um assistente s\u00e9rio escolhe entre consultas aprovadas, s\u00f3 de leitura, auditadas e com dados na UE.<\/p>\n","protected":false},"author":1,"featured_media":561,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[53],"tags":[509,739,506,508,507,417,738],"class_list":["post-565","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ia","tag-amalia-ia-portugues","tag-assistente-ia-phc","tag-chatgpt-privado-para-empresas","tag-ia-rgpd-pme","tag-ia-sobre-o-erp","tag-perguntar-ao-erp-no-whatsapp","tag-text-to-sql-erp-riscos"],"_links":{"self":[{"href":"https:\/\/leiritech.pt\/blog\/wp-json\/wp\/v2\/posts\/565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/leiritech.pt\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/leiritech.pt\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/leiritech.pt\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/leiritech.pt\/blog\/wp-json\/wp\/v2\/comments?post=565"}],"version-history":[{"count":0,"href":"https:\/\/leiritech.pt\/blog\/wp-json\/wp\/v2\/posts\/565\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/leiritech.pt\/blog\/wp-json\/wp\/v2\/media\/561"}],"wp:attachment":[{"href":"https:\/\/leiritech.pt\/blog\/wp-json\/wp\/v2\/media?parent=565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/leiritech.pt\/blog\/wp-json\/wp\/v2\/categories?post=565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/leiritech.pt\/blog\/wp-json\/wp\/v2\/tags?post=565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}