Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Desafio: resolver mais tickets, mais rápido, com tickets melhores desde a abertura.
O PrefTech junta duas peças:
| Objetivo do desafio | Como o PrefTech ataca | Indicador |
|---|---|---|
| Menos tickets | O bot tenta resolver pela base de conhecimento antes de abrir chamado. | atendimentos resolvidos sem ticket |
| Abertura melhor | O bot segue um checklist por categoria (incluindo impacto e prazo) e só abre o ticket com tudo preenchido e confirmado. | pedidos de complemento, resolução na 1ª análise |
git clone https://github.com/LucasNegrin1/HackathonAprova.git
cd HackathonAprova
npm install
Modo A, demonstração (sem nenhuma conta): pule para o passo 6. O painel mostra chamados de exemplo, e o bot faz o roteiro completo com regras por palavras-chave. Os tickets recebem um protocolo, mas não aparecem no painel, porque não há banco.
Modo B, completo (recomendado): faça os passos 4 e 5. São duas contas gratuitas: Supabase (banco) e Groq (IA do bot).
cp .env.example .env.local (no Windows: copy .env.example .env.local).GROQ_API_KEY no .env.local.Sem essa chave, o bot também funciona, mas define título e prioridade por palavras-chave e não sugere o texto melhorado.
.env.local, preencha:
NEXT_PUBLIC_SUPABASE_URL: em Project Settings > Data API (ex.: https://xxxx.supabase.co);NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY e SUPABASE_SECRET_KEY: em Project Settings > API Keys;SUPABASE_ACCESS_TOKEN: crie em https://supabase.com/dashboard/account/tokens.node --env-file=.env.local scripts/aplicar-sql.mjs supabase/migrations/20261024120000_fluxo_triagem.sql supabase/migrations/20261024130000_sugestao_agente.sql supabase/migrations/20261024140000_rebaixar_somente_na_fila.sql supabase/migrations/20261024150000_tipo_ajuste.sql supabase/migrations/20261024160000_dominios_email.sql supabase/seed.sql
Cada arquivo deve responder OK. Alternativa sem token: abra o SQL Editor do Supabase e rode cada arquivo de supabase/migrations/, na ordem do nome, e depois supabase/seed.sql.
node --env-file=.env.local scripts/importar-planilha.mjs tickets_suporte_150_balanceado.xlsx
npm run dev
Abra http://localhost:3000.
| Comando | Para quê |
|---|---|
npm run dev | Rodar em desenvolvimento |
npm run build e npm start | Rodar a versão de produção |
npm run test:db | Testar as regras do banco num Postgres em memória (não precisa de Supabase) |
npm run lint | Verificar o código |
.env.local estão vazias ou erradas. Reinicie o npm run dev depois de editar o arquivo.Roteiro fixo, conduzido pelo código (lib/fluxo.ts):
data-conta no widget, esta etapa é pulada.lib/catalogo.ts):
O prompt do modelo é o INSTRUCTIONS.md, com a definição de cada prioridade.
Modelo: usa o primeiro provedor com chave: XAI_API_KEY (Grok), GROQ_API_KEY (Groq, openai/gpt-oss-120b, com gpt-oss-20b e qwen3.8-27b de reserva quando estoura o limite gratuito) ou ANTHROPIC_API_KEY (Claude).
Em outros sites: o mesmo bot pode ser instalado no site de uma prefeitura com uma linha. data-conta fixa a conta do ticket:
<script src="https://SEU_HOST/widget.js" data-conta="Valfenda" async></script>
Componentes e CSS do projeto PrefTech Front Engine (React + Vite), trazidos para o Next.js. Os dados vêm de /api/gestao (lib/gestao.ts). Se a API falhar, o painel volta para o mock (data/mockSupportData.ts) e avisa.
| Painel | Supabase |
|---|---|
| Prioridade, conta, categoria, status, responsável | colunas de chamados |
| Parado há X dias | dias desde ultima_movimentacao_em |
| SLA restante | prazo da próxima ação desde a última movimentação: P1 4h, P2 8h, P3 24h, P4 72h (SLA_HORAS em lib/gestao.ts) |
| Backlog de produto / Vinculado a pai | status backlog_produto (sem SLA) / vinculado com o protocolo do pai |
| Revisão do gestor | P1 acima da cota (com justificativa) ou chamado escalado por estar parado |
| Sem prioridade (—) | chamado que veio sem prioridade definida da origem |
| Equipe | nomes, cargos e capacidade do cadastro do painel; contagens calculadas da fila real |
app/(preftech)/ # página inicial (/)
├── layout.tsx, page.tsx # fontes via next/font, escopo .preftech-root e o script do bot
├── App.tsx # casca do painel (ranking gerencial e filtros)
├── components/support/ # Sidebar, MetricsTopCards, PriorityTable, TeamWorkloadPanel, PendingIssuesSection
├── data/mockSupportData.ts # tipos do painel + dados de exemplo (fallback)
├── styles/tokens.css, index.css # design system; tokens e resets escopados em .preftech-root
└── engine/, components/views/ # Front Engine (Canvas, Schema JSON, Telemetria): ainda não roteado
app/widget/ # chat do bot (aberto pelo public/widget.js)
app/api/chat, app/api/gestao # bot e dados do painel
Os estilos do Vite (:root, html, body, button) foram escopados em .preftech-root. O Front Engine veio intacto, mas ainda sem rota. Como o lint dele era o oxlint, essas pastas estão fora do eslint.
As migrations em supabase/migrations/ implementam o fluxo do suporte no Postgres. As regras rodam em triggers e valem para qualquer cliente.
| Etapa | No banco |
|---|---|
| Chamado aberto (cliente informa impacto e prazo) | chamados.impacto_informado, prazo_informado |
| Sugestão ou nova parametrização → backlog | triar_chamado(id, 'sugestao' | 'parametrizacao') |
| Parecido com chamado aberto → vincular ao pai | vincular_chamado(filho, pai). O volume do grupo soma ao impacto (3+ vinculados = +1, 10+ = +2) |
| Impacto × urgência → P1 a P4 | trigger + tabela matriz_prioridade (editável) |
| Conta acima da cota de P1 | erro COTA_P1_EXCEDIDA, resolvido com rebaixar_p1() ou justificativa_p1 |
| Fila ordenada por prioridade | view fila_atendimento |
| Parado há mais de 10 dias | view chamados_parados + escalar_parados() |
| Resolver fecha os vinculados em lote | resolver_chamado(id, solucao) |
npm run test:db (Postgres em memória).node --env-file=.env.local scripts/aplicar-sql.mjs supabase/migrations/*.sql supabase/seed.sql (precisa de SUPABASE_ACCESS_TOKEN).node --env-file=.env.local scripts/importar-planilha.mjs tickets_suporte_150_balanceado.xlsx. Importa os 150 chamados fictícios pelas regras do banco e pode rodar de novo, porque substitui a importação anterior.data/db.json (memória + arquivo). Os tickets já ficam no Supabase.