fix(project-manager): remover Dify KB das descriptions, marcar nota TODO
Dify foi removido 06-03-2026. Skills brainstorm/discover ainda referenciam-no no corpo. Bump v1.2 + nota top-of-file. Reescrita workflow para próxima sessão. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -8,7 +8,7 @@ allowed-tools: Read, Write, Edit, Bash, mcp__gitea__list_repo_action_workflows,
|
||||
|
||||
Skill para criar e gerir pipelines CI/CD do AcidaOS via **Gitea Actions**.
|
||||
|
||||
> **Atenção:** O AcidaOS usa **Gitea Actions**, não GitHub Actions. A sintaxe é compatível mas o runner é self-hosted em `mcp-hub.descomplicar.pt`.
|
||||
> **Atenção:** O AcidaOS usa **Gitea Actions**, não GitHub Actions. A sintaxe é compatível mas o runner é self-hosted em `gateway.descomplicar.pt`.
|
||||
|
||||
## Contexto
|
||||
|
||||
@@ -18,7 +18,7 @@ Repositórios Gitea:
|
||||
acidaos-dashboard → Next.js Dashboard
|
||||
|
||||
Runners:
|
||||
self-hosted @ mcp-hub.descomplicar.pt
|
||||
self-hosted @ gateway.descomplicar.pt
|
||||
Labels: [self-hosted, linux, rust, node]
|
||||
|
||||
Deploy target:
|
||||
@@ -314,3 +314,15 @@ mcp__gitea__get_repo_action_job_log_preview({ owner: "descomplicar", repo: "acid
|
||||
|
||||
---
|
||||
**Versão**: 1.0.0 | **Autor**: Descomplicar® | **Plugin**: acidaos
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -189,3 +189,15 @@ Antes de marcar tarefa como concluída:
|
||||
|
||||
---
|
||||
**Versão**: 1.0.0 | **Autor**: Descomplicar® | **Plugin**: acidaos
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -230,3 +230,15 @@ cargo fmt --check # formatação correcta
|
||||
|
||||
---
|
||||
**Versão**: 1.0.0 | **Autor**: Descomplicar® | **Plugin**: acidaos
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -237,3 +237,15 @@ pnpm lint # zero erros ESLint
|
||||
|
||||
---
|
||||
**Versão**: 1.0.0 | **Autor**: Descomplicar® | **Plugin**: acidaos
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -104,3 +104,15 @@ A sandbox fornece um ambiente isolado com dados fictícios para desenvolvimento
|
||||
- **[references/endpoints.md](references/endpoints.md)** - Catálogo completo de endpoints
|
||||
- **Docs oficiais:** https://www.moloni.pt/dev/endpoints/
|
||||
- **Sandbox:** https://www.moloni.pt/dev/sandbox/
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -299,3 +299,15 @@ mcp__n8n__search_templates({
|
||||
---
|
||||
|
||||
*Skill v1.0 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -112,3 +112,15 @@ curl -H "X-N8N-API-KEY: $KEY" https://automator.descomplicar.pt/api/v1/workflows
|
||||
---
|
||||
|
||||
*Skill v1.0 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -232,3 +232,15 @@ mcp__n8n__search_templates({
|
||||
---
|
||||
|
||||
*Skill v1.0 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -167,3 +167,15 @@ mcp__n8n__n8n_executions({
|
||||
---
|
||||
|
||||
*Skill v1.0 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -166,3 +166,15 @@ Slack (alertar)
|
||||
---
|
||||
|
||||
*Skill v1.0 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -158,3 +158,15 @@ curl -X POST https://automator.descomplicar.pt/webhook/meu-webhook \
|
||||
---
|
||||
|
||||
*Skill v1.0 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -122,3 +122,15 @@ mcp__memory-supabase__save_memory {
|
||||
---
|
||||
|
||||
*Core Standards v1.1 | 2026-03-12*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -1,149 +1,65 @@
|
||||
---
|
||||
name: agent-context-injector
|
||||
description: Injecção dinâmica de contexto específico para cada agente — MCPs disponíveis, skills relevantes e datasets Dify.
|
||||
description: Injeccao dinamica de contexto (MCPs e Skills) nos agentes via script Python + hook SessionStart com deteccao de staleness.
|
||||
user-invocable: false
|
||||
allowed-tools: Read, Glob, Grep, ToolSearch
|
||||
---
|
||||
|
||||
# Agent Context Injector
|
||||
|
||||
Injecção dinâmica de contexto específico para cada agente.
|
||||
Regeneracao automatica das seccoes "Your Available MCPs" e "Your Available Skills" em todos os agentes.
|
||||
|
||||
## Triggers
|
||||
## Como funciona
|
||||
|
||||
Esta skill é activada automaticamente via hook `SubagentStart` quando:
|
||||
- Um subagente é iniciado via Task tool
|
||||
- Contexto precisa ser enriquecido com recursos do agente
|
||||
1. **Hook SessionStart** (`~/.claude/hooks/agent-context-refresh.sh`) calcula hash dos inputs
|
||||
2. Se hash mudou → executa `~/.claude/scripts/regenerate-agent-context.py`
|
||||
3. Script le frontmatter de cada agente, inventario MCPs, mapeamento domain e skills dos plugins
|
||||
4. Gera seccoes entre marcadores `<!-- BEGIN:AUTO-CONTEXT -->` / `<!-- END:AUTO-CONTEXT -->`
|
||||
5. Guarda novo hash em `~/.claude/.agent-context-hash`
|
||||
|
||||
## Capabilities
|
||||
## Ficheiros
|
||||
|
||||
### 1. Context Building
|
||||
- Consultar mapeamento agente → recursos na BD
|
||||
- Gerar lista de MCPs disponíveis para o agente
|
||||
- Gerar lista de skills relevantes
|
||||
- Incluir datasets Dify para consulta automática
|
||||
| Ficheiro | Funcao |
|
||||
|----------|--------|
|
||||
| `~/.claude/scripts/regenerate-agent-context.py` | Script principal de regeneracao |
|
||||
| `~/.claude/hooks/agent-context-refresh.sh` | Hook SessionStart com staleness |
|
||||
| `~/.claude/_resources/domain-mcp-map.json` | Mapeamento domain -> MCPs recomendados |
|
||||
| `~/.claude/_resources/mcps.json` | Inventario de 34+ MCPs |
|
||||
| `~/.claude/.agent-context-hash` | Hash MD5 dos inputs (staleness) |
|
||||
|
||||
### 2. Token Optimization
|
||||
- Calcular tokens do contexto gerado
|
||||
- Priorizar recursos por relevância
|
||||
- Truncar se exceder limite (~800 tokens)
|
||||
- Cache de contextos frequentes
|
||||
## Dados de entrada
|
||||
|
||||
### 3. Dynamic Injection
|
||||
- Adicionar contexto ao prompt do agente
|
||||
- Incluir instruções de uso dos recursos
|
||||
- Configurar auto-consult para datasets
|
||||
- **Agentes:** `~/.claude/agents/*.md` — frontmatter com `domain`, `skills`
|
||||
- **MCPs:** `~/.claude/_resources/mcps.json` — lista com `id`, `name`, `category`
|
||||
- **Domain map:** `~/.claude/_resources/domain-mcp-map.json` — primary/recommended por domain
|
||||
- **Skills:** `descomplicar-plugins/*/skills/*/SKILL.md` — frontmatter com `name`, `description`
|
||||
|
||||
## Template de Contexto
|
||||
## Performance
|
||||
|
||||
```markdown
|
||||
## Recursos Disponíveis
|
||||
| Cenario | Tempo |
|
||||
|---------|-------|
|
||||
| Sem mudancas (hash match) | ~66ms |
|
||||
| Com regeneracao (61 agentes) | ~2-3s |
|
||||
|
||||
### MCPs Activos
|
||||
$MCP_LIST
|
||||
- Usar proactivamente para operações relevantes
|
||||
## Manutencao
|
||||
|
||||
### Skills Recomendadas
|
||||
$SKILLS_LIST
|
||||
- Invocar quando tarefa corresponder
|
||||
- **Adicionar MCP:** actualizar `mcps.json` e `domain-mcp-map.json` → proximo SessionStart regenera
|
||||
- **Adicionar skill:** criar SKILL.md no plugin → proximo SessionStart regenera
|
||||
- **Adicionar agente:** criar .md com frontmatter `domain:` → proximo SessionStart gera contexto
|
||||
- **Mudar domain map:** editar `domain-mcp-map.json` → proximo SessionStart regenera
|
||||
|
||||
### Knowledge Base (Dify)
|
||||
$DATASETS_LIST
|
||||
- AUTO-CONSULT: Consultar ANTES de responder
|
||||
- Query template: "$QUERY_TEMPLATE"
|
||||
## Tarefa Desk
|
||||
|
||||
### Plugins
|
||||
$PLUGINS_LIST
|
||||
- Comandos disponíveis: $PLUGIN_COMMANDS
|
||||
#1996 — Sistema injeccao Skills e MCPs nos agentes
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
## Workflow
|
||||
|
||||
```
|
||||
SUBAGENT START → QUERY BD → BUILD CONTEXT → INJECT → EXECUTE
|
||||
```
|
||||
|
||||
1. **Hook SubagentStart** dispara
|
||||
2. **Identificar agente** pelo `subagent_type`
|
||||
3. **Query MySQL**:
|
||||
```sql
|
||||
SELECT r.resource_type, r.resource_id, r.priority
|
||||
FROM cr_agent_resources r
|
||||
JOIN cr_agents a ON r.agent_id = a.id
|
||||
WHERE a.slug = '{agent_slug}'
|
||||
AND r.auto_inject = TRUE
|
||||
ORDER BY r.priority ASC;
|
||||
```
|
||||
4. **Consultar agent-knowledge-config.json** para datasets
|
||||
5. **Gerar contexto** com template
|
||||
6. **Calcular tokens** e optimizar se necessário
|
||||
7. **Injectar** no prompt do agente
|
||||
|
||||
## Métricas Target
|
||||
|
||||
| Métrica | Target |
|
||||
|---------|--------|
|
||||
| Tempo de injecção | < 2s |
|
||||
| Tokens médios | ~772 |
|
||||
| Cache hit rate | > 60% |
|
||||
| Erro rate | < 1% |
|
||||
|
||||
## Exemplo de Output
|
||||
|
||||
Para `wordpress-plugin-developer`:
|
||||
|
||||
```markdown
|
||||
## Recursos Disponíveis
|
||||
|
||||
### MCPs Activos
|
||||
- `cwp` - Gestão servidor CentOS WebPanel
|
||||
- `ssh-unified` - Acesso SSH a servidores
|
||||
- `filesystem` - Operações de ficheiros
|
||||
|
||||
### Skills Recomendadas
|
||||
- `/wp-dev` - Desenvolvimento WordPress
|
||||
- `/wp-performance` - Optimização performance
|
||||
- `/elementor` - Desenvolvimento Elementor
|
||||
|
||||
### Knowledge Base (Dify)
|
||||
- `wordpress-development` - Docs WP, hooks, filters
|
||||
- `woocommerce-api` - API WooCommerce
|
||||
- AUTO-CONSULT: Consultar ANTES de implementar
|
||||
|
||||
### Plugins
|
||||
- `superpowers` - TDD obrigatório
|
||||
- `code-review` - Review automático
|
||||
```
|
||||
|
||||
## Configuração
|
||||
|
||||
Ficheiro `agent-knowledge-config.json`:
|
||||
```json
|
||||
{
|
||||
"wordpress-plugin-developer": {
|
||||
"datasets": ["wordpress-development", "woocommerce-api"],
|
||||
"auto_consult": true,
|
||||
"query_template": "WordPress {topic} best practices 2026",
|
||||
"priority_datasets": ["wordpress-development"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Integração com Scripts Existentes
|
||||
|
||||
Este skill complementa (não substitui) os scripts Python existentes:
|
||||
- `inject-mcp-context.py` - Continua activo
|
||||
- `inject-skills-context.py` - Continua activo
|
||||
|
||||
A skill adiciona:
|
||||
- Datasets Dify dinâmicos
|
||||
- Plugins activos
|
||||
- Contexto mais rico e actualizado
|
||||
|
||||
## Limites
|
||||
|
||||
- Máximo ~800 tokens de contexto injectado (para preservar espaço)
|
||||
- Não modifica comportamento do agente, apenas enriquece contexto
|
||||
- Depende de mapeamentos correctos em `cr_agent_resources`
|
||||
- Cache de 5 minutos pode mostrar dados desactualizados
|
||||
- Não funciona para agentes não registados na BD
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -283,3 +283,14 @@ Component Generator:
|
||||
- Não cria componentes duplicados (verifica slug existente)
|
||||
- Requer conexão MySQL para registo em cr_*
|
||||
- Não modifica componentes existentes (usar Edit tool)
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -260,3 +260,15 @@ Resultado:
|
||||
- Backup não inclui tabelas não-cr_*
|
||||
- Optimização pode demorar em tabelas grandes (>1M registos)
|
||||
- Não substitui backups gerais do Desk CRM
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -203,3 +203,15 @@ Infrastructure Manager:
|
||||
- Detecção de órfãos limitada a tabelas cr_* conhecidas
|
||||
- Não corrige problemas automaticamente (apenas reporta)
|
||||
- Telemetria depende de hooks activos e funcionais
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -175,3 +175,15 @@ Link Desk CRM: `https://desk.descomplicar.pt/admin/projects/view/65`
|
||||
---
|
||||
|
||||
**Desk CRM:** Projecto #65, Task #1637
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -141,3 +141,15 @@ Avalia todas as regras e sugere `/plugin-config apply` se detectar alteracoes ne
|
||||
---
|
||||
|
||||
*Skill v3.0.0 | 04-03-2026 | Descomplicar*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -188,3 +188,15 @@ Quality Validator:
|
||||
- Não modifica componentes (apenas lê e reporta)
|
||||
- Não cria componentes (usar component-generator)
|
||||
- Não executa correções automáticas (usar /descomplicar:upgrade)
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -223,3 +223,15 @@ Relationship Manager:
|
||||
- Análise de impacto limitada a relacionamentos directos
|
||||
- Não propaga alterações automaticamente (requer confirmação)
|
||||
- Depende de consistência das tabelas cr_* na BD
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
---
|
||||
name: auto-expense
|
||||
description: Criação automática de despesas a partir de facturas detectadas no IMAP e tickets. Extrai dados, verifica duplicados e cria despesas no Desk CRM com PDF anexo.
|
||||
description: Criação automática de despesas a partir de facturas detectadas no IMAP e tickets. Extrai dados, verifica duplicados por reference_no e cria despesas no Desk CRM com PDF anexo.
|
||||
disable-model-invocation: true
|
||||
---
|
||||
|
||||
# /auto-expense v1.0
|
||||
# /auto-expense v1.1
|
||||
|
||||
Cria despesas automaticamente a partir de facturas detectadas pelo IMAP e tickets.
|
||||
|
||||
@@ -49,28 +49,57 @@ Para cada factura na lista:
|
||||
|
||||
3. EXTRAIR DO HTML:
|
||||
- Valor (padroes: $XX.XX, XX,XX EUR, USD XX.XX, Total: XX.XX)
|
||||
- Referencia/Invoice number
|
||||
- Referencia/Invoice number (OBRIGATORIO — guardar para dedup)
|
||||
- Data da factura
|
||||
```
|
||||
|
||||
4. VERIFICAR DUPLICADO (2 camadas):
|
||||
Camada 1 - Desk CRM:
|
||||
Pesquisar: mesmo fornecedor + mesmo valor (±0.05) + mesma data (±3 dias)
|
||||
### Passo 3: Verificar duplicados (OBRIGATORIO — 3 camadas)
|
||||
|
||||
> **CRITICO: Este passo NUNCA pode ser saltado. Se saltado, causa duplicacao massiva de despesas.**
|
||||
|
||||
```
|
||||
Camada 0 — Referencia de factura (PRIMARIA, mais fiavel):
|
||||
get_expenses(search: "<reference_no>")
|
||||
Para cada resultado: comparar campo reference_no
|
||||
Se alguma despesa tem reference_no IGUAL → DUPLICADO CONFIRMADO
|
||||
→ NAO criar, registar como duplicado com ID existente
|
||||
|
||||
Camada 1 — Fornecedor + Valor + Data:
|
||||
get_expenses(search: "<fornecedor>")
|
||||
Filtrar: mesmo valor (±0.05) + mesma data (±3 dias)
|
||||
Se match → NAO criar, registar como duplicado
|
||||
|
||||
5. CRIAR DESPESA:
|
||||
Camada 2 — Expense name pattern:
|
||||
get_expenses(search: "<fornecedor> - <reference_no>")
|
||||
Se match exacto no expense_name → NAO criar, registar como duplicado
|
||||
|
||||
REGRA: Se QUALQUER camada detecta duplicado → PARAR imediatamente.
|
||||
Nunca criar despesa sem passar as 3 camadas com sucesso.
|
||||
Registar cada duplicado detectado no output JSON (campo "duplicados").
|
||||
```
|
||||
|
||||
### Passo 4: Criar despesa
|
||||
|
||||
```
|
||||
APENAS se Passo 3 passou sem detectar duplicado:
|
||||
|
||||
mcp__desk-crm-v3__create_expense({
|
||||
category: [cat_id da tabela],
|
||||
amount: [valor],
|
||||
date: [data factura YYYY-MM-DD],
|
||||
expense_name: "[Fornecedor] - [Referencia]",
|
||||
reference_no: "[numero factura/referencia]",
|
||||
note: "Auto-criado via /auto-expense",
|
||||
currency: [2=USD ou 3=EUR],
|
||||
tax: [0 ou 1],
|
||||
send_invoice_to_customer: 0
|
||||
})
|
||||
|
||||
OBRIGATORIO: campo reference_no DEVE ser preenchido com o numero
|
||||
de factura extraido. Este campo e a chave primaria de deduplicacao.
|
||||
```
|
||||
|
||||
### Passo 3: PDF (se existir anexo)
|
||||
### Passo 5: PDF (se existir anexo)
|
||||
|
||||
```
|
||||
a. GUARDAR LOCAL:
|
||||
@@ -100,14 +129,14 @@ c. REGISTAR no Desk BD:
|
||||
d. LIMPAR temporarios
|
||||
```
|
||||
|
||||
### Passo 4: Actualizar CSV
|
||||
### Passo 6: Actualizar CSV
|
||||
|
||||
```
|
||||
CSV Path: /media/ealmeida/Dados/GDrive/Cloud/ADM_Descomplicar/Financeiro/Contabilidade/YYYY/MAPA-DESPESAS-YYYY.csv
|
||||
Formato linha: id_desk;data;categoria;fornecedor;descricao;valor;SIM;ficheiro;email;Auto /auto-expense
|
||||
```
|
||||
|
||||
### Passo 5: Escrever output JSON
|
||||
### Passo 7: Escrever output JSON
|
||||
|
||||
```
|
||||
Escrever em ~/.claude-work/today-expenses-{date}.json:
|
||||
@@ -115,12 +144,15 @@ Escrever em ~/.claude-work/today-expenses-{date}.json:
|
||||
"despesas_criadas": [
|
||||
{"id": 1180, "fornecedor": "MEO", "valor": 76.26, "moeda": "EUR", "referencia": "FT A/861215955"}
|
||||
],
|
||||
"duplicados": 0,
|
||||
"duplicados": [
|
||||
{"fornecedor": "MEO", "referencia": "FT A/861215955", "existente_id": 1175, "camada": 0}
|
||||
],
|
||||
"flagged": [
|
||||
{"fornecedor": "Desconhecido", "nota": "TOConline - emitente desconhecido: XPTO LDA"}
|
||||
],
|
||||
"erros": [],
|
||||
"total_processadas": 1
|
||||
"total_processadas": 1,
|
||||
"total_duplicados": 0
|
||||
}
|
||||
```
|
||||
|
||||
@@ -152,7 +184,7 @@ tax = 0 → Fornecedores estrangeiros
|
||||
|
||||
send_invoice_to_customer = 0 → OBRIGATORIO (sem default na BD)
|
||||
|
||||
reference_no → coluna correcta (NAO "reference")
|
||||
reference_no → coluna correcta (NAO "reference") — CHAVE DE DEDUPLICACAO
|
||||
```
|
||||
|
||||
---
|
||||
@@ -167,7 +199,8 @@ reference_no → coluna correcta (NAO "reference")
|
||||
|--------|-----------|-------|-------|-----|-----|
|
||||
|
||||
### Duplicados Detectados (Y)
|
||||
- [Fornecedor] [Valor] - ja existe como #ID
|
||||
| Fornecedor | Ref | ID Existente | Camada |
|
||||
|-----------|-----|-------------|--------|
|
||||
|
||||
### Pendentes Revisao (Z)
|
||||
- [Plataforma] - emitente desconhecido: [nome]
|
||||
@@ -179,11 +212,26 @@ reference_no → coluna correcta (NAO "reference")
|
||||
|
||||
- NUNCA usar currency=1 (nao existe)
|
||||
- NUNCA converter USD para EUR (manter original com currency=2)
|
||||
- NUNCA criar despesa sem verificar duplicado primeiro
|
||||
- NUNCA criar despesa sem verificar duplicado primeiro (3 camadas obrigatorias)
|
||||
- NUNCA omitir send_invoice_to_customer=0
|
||||
- NUNCA omitir reference_no ao criar despesa (chave primaria de dedup)
|
||||
- NUNCA saltar a Camada 0 (referencia de factura) — e a mais fiavel
|
||||
- SEMPRE ler o email/ticket HTML para extrair valor real (nunca assumir)
|
||||
- SEMPRE incluir reference_no quando disponivel
|
||||
- SEMPRE logar duplicados detectados no output JSON com camada e ID existente
|
||||
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*
|
||||
*Skill v1.1.0 | 30-03-2026 | Descomplicar | Fix: dedup por reference_no (DES-137)*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -293,3 +293,15 @@ Skill:
|
||||
3. Executar workflow integrado
|
||||
Output: [resultado completo com referências]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -223,3 +223,15 @@ Skill:
|
||||
3. Executar workflow integrado
|
||||
Output: [resultado completo com referências]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -430,3 +430,15 @@ User: Criar orçamento para lead João Silva
|
||||
**Criado:** 2026-01-28
|
||||
**Actualizado:** 2026-01-28
|
||||
**Motivo:** Prevenção de erros CRM após incidente de duplicação
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -306,6 +306,24 @@ Skills descontinuadas:
|
||||
- Distinção Lead vs Customer
|
||||
- Proposal vs Estimate
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Self-Healing
|
||||
|
||||
Antes de executar, ler `~/.claude-work/healing/crm.jsonl` (se existir). Cada linha é um padrão de erro conhecido:
|
||||
|
||||
```json
|
||||
{"date":"YYYY-MM-DD","issue":"descrição do problema","fix":"como evitar","source":"user|auto"}
|
||||
```
|
||||
|
||||
Se encontrares um padrão relevante ao contexto actual, aplica o fix preventivamente. Após cada erro ou correcção do utilizador nesta skill, **adicionar nova linha** ao healing log com o padrão aprendido.
|
||||
|
||||
---
|
||||
|
||||
*Skill v2.0.0 | 2026-02-05 | Descomplicar®*
|
||||
|
||||
|
||||
## Healing Log
|
||||
<!-- Registo automático de erros e correcções nesta skill -->
|
||||
|
||||
@@ -235,6 +235,24 @@ Ao entrar numa pasta:
|
||||
### v1.0.0
|
||||
- Versão inicial
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Self-Healing
|
||||
|
||||
Antes de executar, ler `~/.claude-work/healing/desk.jsonl` (se existir). Cada linha é um padrão de erro conhecido:
|
||||
|
||||
```json
|
||||
{"date":"YYYY-MM-DD","issue":"descrição do problema","fix":"como evitar","source":"user|auto"}
|
||||
```
|
||||
|
||||
Se encontrares um padrão relevante ao contexto actual, aplica o fix preventivamente. Após cada erro ou correcção do utilizador nesta skill, **adicionar nova linha** ao healing log com o padrão aprendido.
|
||||
|
||||
---
|
||||
|
||||
*Skill v3.0.0 | 2026-02-05 | Descomplicar®*
|
||||
|
||||
|
||||
## Healing Log
|
||||
<!-- Registo automático de erros e correcções nesta skill -->
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
---
|
||||
name: estrategia-marca
|
||||
description: Cria estratégias de marca completas seguindo a metodologia Descomplicar® (ACIDA + Framework 16Ps). Inclui fase de pesquisa de mercado com /deep-research antes do briefing. Guia a análise de público, posicionamento, Pitch Canvas, copywriting e documento final entregável. Usar quando o utilizador diz "estratégia de marca", "branding", "criar marca", "posicionamento", "16Ps", "/estrategia-marca", "análise de público", "narrativa de marca", "proposta de valor", "pitch canvas", "pain + gain", "copywriting estratégico", "identidade de marca", "pesquisa de mercado para marca", ou quando um cliente adquire o serviço EST-MRK-010.
|
||||
---
|
||||
|
||||
# Skill: Estratégia de Marca
|
||||
|
||||
Guia completo para criar estratégias de marca Descomplicar® — da pesquisa de mercado ao documento final entregável.
|
||||
|
||||
---
|
||||
|
||||
## Fluxo de trabalho (8 fases)
|
||||
|
||||
### Fase 0 — Pesquisa de mercado
|
||||
|
||||
Antes do briefing com o cliente, fazer pesquisa independente. Verificar primeiro se já existem ficheiros de pesquisa (ex: pasta `Pesquisas/` no projecto).
|
||||
|
||||
**Se a pesquisa já existe:** ler os ficheiros relevantes e extrair síntese.
|
||||
|
||||
**Se não existe:** usar `/deep-research` (ou `mcp__tavily__tavily_research`) com os seguintes focos:
|
||||
|
||||
1. **Mercado/sector** — dimensão, crescimento, tendências, regulação
|
||||
2. **Concorrentes** — posicionamento, mensagens, pricing, pontos fracos
|
||||
3. **Público** — linguagem online, canais activos, dores expressas em fóruns/reviews
|
||||
4. **Oportunidades** — gaps de mercado, tendências emergentes não exploradas
|
||||
|
||||
Guardar síntese em `Pesquisas/sintese-mercado.md` no projecto do cliente.
|
||||
|
||||
**Resultado esperado:** chegar ao briefing já com hipóteses validadas sobre o mercado e o público — não para impor, mas para fazer perguntas mais certeiras e poupar tempo ao cliente.
|
||||
|
||||
### Fase 1 — Activação e contexto
|
||||
|
||||
Ao iniciar, perguntar:
|
||||
- Qual o nome do cliente/marca?
|
||||
- Já existe briefing ou material de partida?
|
||||
- Qual o sector/indústria?
|
||||
- Temos exemplos de concorrentes?
|
||||
|
||||
Se existir projecto no Desk CRM, verificar com `get_project` antes de prosseguir.
|
||||
|
||||
### Fase 2 — Briefing estruturado
|
||||
|
||||
Conduzir entrevista com as perguntas de `references/perguntas-briefing.md`.
|
||||
|
||||
Organizar por blocos:
|
||||
1. Negócio (problema, serviços, mercado)
|
||||
2. Público-alvo (segmentos identificados)
|
||||
3. Posicionamento actual vs desejado
|
||||
4. Tom de voz e personalidade
|
||||
5. Concorrência e diferenciação
|
||||
|
||||
### Fase 3 — Fundamentos estratégicos
|
||||
|
||||
Desenvolver com o cliente:
|
||||
- **Proposta de valor única** — o que nos torna únicos, diferenciais, benefícios por camada
|
||||
- **Missão, Visão, Valores e Objectivos** — com exemplos de como se manifestam na prática
|
||||
- **Apresentação sumária** — empresa + serviços com tabela clara
|
||||
- **Posicionamento** — declaração de posicionamento testável
|
||||
|
||||
Ver `references/framework-16ps.md` → Bloco A para questões orientadoras.
|
||||
|
||||
### Fase 4 — Análise de público (20 pontos por segmento)
|
||||
|
||||
**Obrigatório:** Antes dos segmentos psicográficos, identificar os nichos sectoriais relevantes para o produto. Usar `references/nichos.md` para seleccionar e analisar **pelo menos 5 nichos específicos** (ex: clínicas de saúde, imobiliárias, agências digitais — não "PMEs" como categoria vaga). Para cada nicho preencher os 8 pontos do guia de análise sectorial. Cruzar com os 20 pontos psicográficos abaixo para construir personas completas.
|
||||
|
||||
Para cada segmento identificado, desenvolver os 20 pontos na seguinte ordem:
|
||||
|
||||
1. Perfil Demográfico
|
||||
2. Perfil Psicográfico
|
||||
3. Dores
|
||||
4. Anseios
|
||||
5. Desejos
|
||||
6. Frustrações
|
||||
7. Preocupações
|
||||
8. Medos
|
||||
9. Inimigos
|
||||
10. Linguagem
|
||||
11. Como procuram ajuda/informação/dicas
|
||||
12. Canais digitais activos
|
||||
13. Estilo de Decisão
|
||||
14. Mudanças (que sabem necessárias)
|
||||
15. Resistência à mudança
|
||||
16. Objecções típicas (+ como ultrapassar)
|
||||
17. Forma de gerar emoção
|
||||
18. Argumentos (a que são mais sensíveis)
|
||||
19. Concorrentes (que alternativas avaliam)
|
||||
20. Propostas Recusadas (e porquê)
|
||||
|
||||
Ver `references/metodologia-acida.md` para contexto e profundidade em cada ponto.
|
||||
|
||||
### Fase 5 — Pitch Canvas
|
||||
|
||||
Estrutura de 5 elementos:
|
||||
- **Para quem:** segmento + problema específico
|
||||
- **O problema:** dor principal na linguagem do cliente
|
||||
- **A solução:** mecanismo único de resolução
|
||||
- **O resultado:** transformação concreta (antes/depois + métrica)
|
||||
- **Por que nós:** razão para acreditar
|
||||
|
||||
Criar também a **Declaração de mudança no mundo** — frase que resume o impacto maior da marca.
|
||||
|
||||
### Fase 6 — Copywriting estratégico
|
||||
|
||||
Sequência obrigatória:
|
||||
|
||||
1. **Questionamento estratégico** — Qual é o objectivo da comunicação? Que transformação prometemos?
|
||||
2. **Pain + Gain** — formulação problema/resultado na linguagem do cliente; depois refinar com especificidades do sector
|
||||
3. **Narrativa por segmento** — fórmula: Problema (dor do público) → Solução (serviços) → Resultado (benefícios concretos)
|
||||
4. **Mensagem central** — 1 frase que toda a equipa sabe de cor
|
||||
5. **Headlines** — por segmento (principal + secundária)
|
||||
|
||||
Ver `references/narrativas-copywriting.md` para templates e exemplos reais.
|
||||
|
||||
### Fase 7 — Documento final + Investimentos
|
||||
|
||||
Completar as secções finais:
|
||||
- **Demonstração dos serviços** — como demonstrar, preparação, follow-up
|
||||
- **Investimentos prioritários** — canais, orçamento, ROI esperado
|
||||
- **KPIs** — baseline + metas a 3m, 6m, 12m
|
||||
- **Inventário de activos** — o que existe, estado, prioridade
|
||||
|
||||
Ver `references/template-documento.md` para a estrutura completa do documento.
|
||||
|
||||
**Checklist de entrega:**
|
||||
- [ ] Pesquisa de mercado feita (Fase 0)
|
||||
- [ ] Proposta de valor única definida
|
||||
- [ ] Missão, Visão, Valores escritos
|
||||
- [ ] Apresentação sumária da empresa e serviços
|
||||
- [ ] Mínimo 5 nichos sectoriais analisados (8 pontos cada) — ver `references/nichos.md`
|
||||
- [ ] Mínimo 2 segmentos psicográficos com 20 pontos completos
|
||||
- [ ] Pitch Canvas preenchido
|
||||
- [ ] Declaração de mudança no mundo
|
||||
- [ ] Pain + Gain (original + refinado)
|
||||
- [ ] Narrativa por segmento (Problema → Solução → Resultado)
|
||||
- [ ] Mensagem central definida
|
||||
- [ ] Investimentos prioritários identificados
|
||||
- [ ] KPIs definidos com metas
|
||||
|
||||
---
|
||||
|
||||
## Referências (carregar conforme necessário)
|
||||
|
||||
| Ficheiro | Quando carregar |
|
||||
|----------|----------------|
|
||||
| `references/metodologia-acida.md` | Fases 3-4: ACIDA, 20 pontos por segmento |
|
||||
| `references/framework-16ps.md` | Fase 3: fundamentos estratégicos (Bloco A) |
|
||||
| `references/perguntas-briefing.md` | Fase 2: conduzir entrevista cliente |
|
||||
| `references/narrativas-copywriting.md` | Fase 6: copywriting, Pain+Gain, narrativas |
|
||||
| `references/template-documento.md` | Fase 7: estrutura completa do documento |
|
||||
| `references/nichos.md` | Fase 4: análise sectorial dos 10 nichos PT/EU (mínimo 5 obrigatórios) |
|
||||
|
||||
---
|
||||
|
||||
## Contexto do serviço
|
||||
|
||||
- **Código:** EST-MRK-010
|
||||
- **Preço:** 900 EUR
|
||||
- **Prazo médio:** 30h de trabalho
|
||||
- **Entregáveis:** Documento estratégico completo, dashboard personas, narrativa de marca, apresentação executiva editável, guia de implementação, sessão de alinhamento com equipa
|
||||
- **Suporte pós-entrega:** WhatsApp 1 mês
|
||||
|
||||
Complementar com Branding WOW (BRAND-ESS/DIG/COM: 1.800–4.500 EUR) se o cliente precisar de identidade visual.
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
@@ -0,0 +1,193 @@
|
||||
# Framework 16Ps — Referência Completa
|
||||
|
||||
Estrutura os 16 elementos da estratégia de marca em 4 blocos. Para cada P, incluir as questões orientadoras ao preencher.
|
||||
|
||||
---
|
||||
|
||||
## Bloco A — Fundamentos estratégicos
|
||||
|
||||
### P1: Problema
|
||||
> Qual o problema principal que a marca resolve?
|
||||
|
||||
- Problema de negócio que a estratégia precisa resolver
|
||||
- Impacto desse problema no cliente (custo, tempo, risco, reputação)
|
||||
- Urgência da solução: por que resolver agora?
|
||||
- Consequências de não resolver
|
||||
|
||||
*Exemplo SFV:* "Facturas de electricidade crescentes que consomem margens das empresas e rendimento das famílias, sem solução acessível percebida."
|
||||
|
||||
### P2: Propósito
|
||||
> Por que existe esta marca além do lucro?
|
||||
|
||||
- **Missão:** o que fazemos e para quem (hoje)
|
||||
- **Visão:** onde queremos chegar (3-5 anos)
|
||||
- **Valores:** 3-5 valores fundamentais com descrição de como se manifestam
|
||||
- **Propósito:** impacto no mundo que justifica a existência da marca
|
||||
|
||||
*Estrutura valores:* [Nome do Valor] — [Como se manifesta na prática]
|
||||
|
||||
### P3: Proposta de Valor
|
||||
> O que tornamos possível que os concorrentes não conseguem?
|
||||
|
||||
- Valor único que só esta marca entrega
|
||||
- Diferenciais competitivos (lista)
|
||||
- Benefícios principais (funcionais + emocionais)
|
||||
- Formula: Para [segmento], que [dor/desejo], a [marca] oferece [solução] que [resultado único], ao contrário de [alternativa], porque [razão para acreditar]
|
||||
|
||||
### P4: Posicionamento
|
||||
> Que lugar específico ocupa na mente do cliente?
|
||||
|
||||
- Posição actual no mercado (percepção real)
|
||||
- Posição desejada (percepção target)
|
||||
- Declaração de posicionamento (1-2 frases)
|
||||
- Território da marca: categoria, concorrência directa, diferenciação
|
||||
- Atributos únicos que definem esse território
|
||||
|
||||
*Declaração-tipo:* "Para [público], somos a única [categoria] que [benefício único] porque [prova]."
|
||||
|
||||
### P5: Performance
|
||||
> Como medimos o sucesso?
|
||||
|
||||
- KPIs principais (5-7 métricas)
|
||||
- Metas específicas a 3, 6 e 12 meses
|
||||
- Indicadores de sucesso por área (brand awareness, conversão, satisfação)
|
||||
- Frequência de monitorização e responsável
|
||||
|
||||
---
|
||||
|
||||
## Bloco B — Público e pesquisa
|
||||
|
||||
### P6: Público-alvo
|
||||
> Quem são exactamente os nossos clientes?
|
||||
|
||||
- Segmento principal + segmentos secundários
|
||||
- Critérios de segmentação (demográficos, comportamentais, psicográficos)
|
||||
- Volume estimado de cada segmento
|
||||
- Comportamento de compra: frequência, ticket médio, canal preferido
|
||||
|
||||
### P7: Pesquisa de mercado
|
||||
> Que dados sustentam as nossas decisões?
|
||||
|
||||
- Dados de mercado: dimensão, crescimento, tendências
|
||||
- Insights de comportamento do consumidor
|
||||
- Oportunidades identificadas (não aproveitadas pela concorrência)
|
||||
- Ameaças e riscos do mercado
|
||||
|
||||
### P8: Personas
|
||||
> Quem é o nosso cliente ideal em detalhe?
|
||||
|
||||
Para cada persona:
|
||||
- **Foto + nome fictício + idade + profissão**
|
||||
- **Biografia resumida** (um dia típico)
|
||||
- **Dores principais** (3-5)
|
||||
- **Objectivos** (profissionais + pessoais)
|
||||
- **Canais preferidos** (onde está, o que consome)
|
||||
- **Citação representativa** ("Eu quero/preciso/temo...")
|
||||
- **Frase de posicionamento** para esta persona
|
||||
|
||||
### P9: Perfil
|
||||
> Quais as características quantificáveis de cada segmento?
|
||||
|
||||
Análise de 20 pontos por segmento (ver template completo em `template-documento.md`):
|
||||
- Demográfico: idade, género, localização, rendimento, educação, sector, cargo, empresa
|
||||
- Comportamental: rotina, hábitos, processo de decisão, critérios de escolha
|
||||
- Psicográfico: valores, aspirações, mentalidade, atitude à inovação
|
||||
- Jornada: awareness, consideração, decisão
|
||||
|
||||
### P10: Pain Points
|
||||
> Quais as dores mais urgentes e dolorosas?
|
||||
|
||||
- Dores principais (urgentes, que precisam resolver já)
|
||||
- Frustrações (já tentaram outras soluções sem resultado)
|
||||
- Necessidades não atendidas (o mercado não resolve bem)
|
||||
- Medos relacionados com a compra ou com não comprar
|
||||
|
||||
---
|
||||
|
||||
## Bloco C — Produto e serviço
|
||||
|
||||
### P11: Portfolio
|
||||
> O que vendemos exactamente?
|
||||
|
||||
- Lista de produtos/serviços principais
|
||||
- Características técnicas vs benefícios percebidos
|
||||
- Arquitectura de oferta: entrada, core, premium
|
||||
- Casos de uso reais (exemplos concretos de aplicação)
|
||||
|
||||
### P12: Preço e valor
|
||||
> Como justificamos o que cobramos?
|
||||
|
||||
- Estratégia de preços (custo+margem, valor percebido, concorrência, freemium)
|
||||
- Posicionamento de valor: acessível, médio-alto, premium, luxo
|
||||
- Política comercial: descontos, bundles, condições de pagamento
|
||||
- ROI estimado para o cliente (quanto ganha/poupa ao escolher-nos)
|
||||
|
||||
### P13: Processos críticos
|
||||
> Que processos garantem a experiência prometida?
|
||||
|
||||
- Processo de entrega do serviço/produto (passo a passo)
|
||||
- Pontos de controlo de qualidade
|
||||
- Garantias e políticas de satisfação
|
||||
- Gestão de reclamações
|
||||
|
||||
### P14: Parcerias estratégicas
|
||||
> Com quem nos aliamos para ampliar valor?
|
||||
|
||||
- Parceiros principais (nome, tipo, contribuição)
|
||||
- Tipos de parceria: distribuição, tecnologia, referência, co-marketing
|
||||
- Benefícios mútuos de cada parceria
|
||||
- Parcerias a desenvolver (gap de oportunidade)
|
||||
|
||||
### P15: Plataforma
|
||||
> Onde operamos digitalmente?
|
||||
|
||||
- Canais digitais activos: website, redes sociais, marketplaces, apps
|
||||
- Presença online actual vs ideal
|
||||
- Infraestrutura tecnológica (CRM, email, analytics, automação)
|
||||
- Prioridades de investimento digital
|
||||
|
||||
---
|
||||
|
||||
## Bloco D — Promoção e comunicação
|
||||
|
||||
### P16: Promoção
|
||||
> Como chegamos ao público-alvo?
|
||||
|
||||
- Canais principais com objectivos específicos por canal
|
||||
- Tácticas específicas (conteúdo, SEO, email, WhatsApp, eventos)
|
||||
- Calendário promocional (frequência, momentos-chave)
|
||||
- Budget orientativo por canal
|
||||
|
||||
### P17: Publicidade
|
||||
> Como amplificamos com investimento pago?
|
||||
|
||||
- Estratégia de anúncios: plataformas, formato, objectivo
|
||||
- Budget mensal e distribuição
|
||||
- KPIs de publicidade (CPL, ROAS, CPA)
|
||||
- Frequência e ciclo de renovação de criativos
|
||||
|
||||
### P18: PR e referências
|
||||
> Como construímos credibilidade externa?
|
||||
|
||||
- Estratégia de relações públicas
|
||||
- Parcerias com influenciadores (relevância > alcance)
|
||||
- Imprensa e media especializada
|
||||
- Programa de referências/embaixadores
|
||||
|
||||
### P19: Presença digital
|
||||
> Qual a nossa estratégia de conteúdo?
|
||||
|
||||
- Estratégia de conteúdo por canal
|
||||
- Frequência de publicação
|
||||
- Pilares de conteúdo (3-5 temas centrais)
|
||||
- Gestão de comunidade: resposta, engagement, moderação
|
||||
|
||||
### P20: Proximidade — narrativa e impacto
|
||||
> Que história contamos que ressoa emocionalmente?
|
||||
|
||||
- **Declaração de Impacto:** frase que resume a essência e impacto da marca
|
||||
- **Narrativa principal:** história de origem ou transformação
|
||||
- **Pain + Gain por segmento:** o que perdiam antes → o que ganham agora
|
||||
- **Mensagem central:** 1 frase que todos os colaboradores sabem de cor
|
||||
|
||||
*Nota: O "Bloco D" tem 5 Ps numerados de 16 a 20 — alguns documentos listam apenas 16 Ps no total (agrupando Promoção, Publicidade e PR num único P). Adaptar conforme o nível de detalhe necessário.*
|
||||
@@ -0,0 +1,127 @@
|
||||
# Metodologia ACIDA — Referência Completa
|
||||
|
||||
## 1. As 5 fases ACIDA
|
||||
|
||||
### A — Atrair atenção
|
||||
|
||||
O público está sobrecarregado de informação. A forma correcta de chamar a atenção não é destacar produtos — é conectar com o que emocionalmente mais interessa ao público: **as suas próprias dores e desejos**.
|
||||
|
||||
Acções práticas:
|
||||
- Headlines que falam directamente da dor ou desejo do segmento
|
||||
- Conteúdo que provoca reconhecimento imediato ("é exactamente o meu problema")
|
||||
- Formatos visuais que param o scroll: vídeo curto, imagem disruptiva, estatística chocante
|
||||
|
||||
### C — Construir confiança
|
||||
|
||||
Após conquistar atenção, estabelecer relacionamentos autênticos através de:
|
||||
- Transparência, honestidade e autenticidade na comunicação
|
||||
- Demonstrar compreensão profunda das dores e desejos do cliente
|
||||
- Partilhar conhecimento e experiência profissional abertamente
|
||||
- Educar o público para decisões mais informadas
|
||||
- Estabelecer autoridade que permite influenciar percepções
|
||||
|
||||
Formatos: artigos de blog, estudos de caso, testemunhos, webinars, guias gratuitos.
|
||||
|
||||
### I — Despertar interesse
|
||||
|
||||
Com confiança estabelecida, a comunicação torna-se altamente personalizada.
|
||||
> "Não vendemos produtos nem serviços; oferecemos soluções específicas para os seus desafios."
|
||||
|
||||
Ferramentas:
|
||||
- Rastreamento de interacções para identificar segmentos de clientes
|
||||
- Conteúdo customizado baseado em comportamentos anteriores
|
||||
- Resolução antecipada de objecções conhecidas
|
||||
- Nutrição de relacionamentos via email, WhatsApp, SMS, redes sociais
|
||||
|
||||
### D — Estimular a decisão
|
||||
|
||||
A decisão será favorável se o **valor percebido > preço a pagar**.
|
||||
|
||||
Obstáculos a superar:
|
||||
- O "muro invisível" criado por dúvidas do consumidor
|
||||
- Medo do arrependimento pós-compra
|
||||
- Necessidade de prova social e garantias sólidas
|
||||
|
||||
Ferramentas: comparações, garantias, testemunhos de clientes reais, demonstrações, ROI calculado.
|
||||
|
||||
### A — Incentivar a acção
|
||||
|
||||
Converter interesse em acção através de:
|
||||
- Chamadas à acção (CTA) claras e convincentes
|
||||
- Criação de sentido de urgência (real, não artificial)
|
||||
- Cumprimento de promessas
|
||||
- Superação de expectativas na experiência do cliente
|
||||
|
||||
---
|
||||
|
||||
## 2. Análise do público-alvo — 8 dimensões
|
||||
|
||||
Para cada segmento, investigar as 8 dimensões antes de escrever qualquer copy:
|
||||
|
||||
### Dimensão 1: Perfil demográfico e psicográfico
|
||||
- Características mensuráveis: idade, género, localização, rendimento, educação, cargo
|
||||
- Traços de personalidade: valores, crenças, atitudes, estilo de vida
|
||||
- *Pergunta-chave: "Quem é esta pessoa na vida real?"*
|
||||
|
||||
### Dimensão 2: Dores, desejos e frustrações
|
||||
- Dores activas: problemas que precisam resolver agora
|
||||
- Desejos: o que querem alcançar/ter/ser
|
||||
- Frustrações: o que já tentaram e não funcionou
|
||||
- *Pergunta-chave: "O que os mantém acordados à noite? O que sonham?"*
|
||||
|
||||
### Dimensão 3: Preocupações e geração de emoção
|
||||
- O que os preocupa a médio/longo prazo
|
||||
- Como a nossa marca pode responder emocionalmente (não apenas racionalmente)
|
||||
- *Pergunta-chave: "Que emoção queremos que sintam quando nos encontram?"*
|
||||
|
||||
### Dimensão 4: Medos, inimigos e mudanças
|
||||
- Medos concretos (perder negócio, ser enganado, falhar)
|
||||
- "Inimigos" percebidos (concorrentes, reguladores, tendências de mercado)
|
||||
- Mudanças que temem ou resistem
|
||||
- *Pergunta-chave: "O que os impede de agir?"*
|
||||
|
||||
### Dimensão 5: Anseios, interesses e linguagem
|
||||
- O que aspiram a ser/ter/fazer
|
||||
- Interesses e hobbies (pistas para onde comunicar)
|
||||
- Linguagem que usam (jargão do sector, palavras que ressoam vs que afastam)
|
||||
- *Pergunta-chave: "Como falam entre si? Que palavras usam?"*
|
||||
|
||||
### Dimensão 6: Pesquisa de informação e influenciadores
|
||||
- Onde procuram informação (Google, YouTube, LinkedIn, feiras, colegas)
|
||||
- A quem pedem conselho (influenciadores, peers, família)
|
||||
- Fontes que consideram credíveis
|
||||
- *Pergunta-chave: "Como encontraram a nossa categoria de produto/serviço?"*
|
||||
|
||||
### Dimensão 7: Dúvidas e perguntas
|
||||
- Objecções previsíveis antes da compra
|
||||
- Perguntas que fazem nas reuniões de vendas
|
||||
- Informação que precisam para decidir
|
||||
- *Pergunta-chave: "Quais as 5 objecções mais frequentes?"*
|
||||
|
||||
### Dimensão 8: Estilo de decisão e concorrentes
|
||||
- Processo de decisão: individual vs colectivo, rápido vs lento
|
||||
- Factores comparativos: preço, qualidade, confiança, referências
|
||||
- Concorrentes directos que avaliam em paralelo
|
||||
- *Pergunta-chave: "Com quem nos comparam? Por que nos escolhem ou não?"*
|
||||
|
||||
---
|
||||
|
||||
## 3. Pilares estratégicos ACIDA
|
||||
|
||||
- **Crença central:** o centro do marketing digital são os princípios fundamentais de marketing + website — não as redes sociais
|
||||
- **Proposta de valor:** "Criamos Resultados" — problema → solução → resultados esperados
|
||||
- **Website como hub central:** não repositório, mas centro operacional integrado com CRM
|
||||
- **Ecossistema multi-canal:** email, SMS/WhatsApp, SEO, Google/Meta Ads, website, redes sociais (como parte, não como centro)
|
||||
- **Melhoria contínua:** métricas objectivas → ciclo iterativo baseado em dados
|
||||
|
||||
---
|
||||
|
||||
## 4. ACIDA 2.0 — Fases operacionais
|
||||
|
||||
| Fase | Acções |
|
||||
|------|--------|
|
||||
| **1. Análise** | Segmentação público, posicionamento, estruturação oferta, montagem narrativa |
|
||||
| **2. Criação** | Recursos, copywriting e design, website e plataformas, automação |
|
||||
| **3. Implementação** | Conteúdos e canais, blog e email marketing, redes sociais, marketplaces |
|
||||
| **4. Desenvolvimento** | Funil de vendas, tráfego e anúncios, conteúdos, newsletters |
|
||||
| **5. Acompanhamento** | Gestão de resultados, métricas e KPIs, optimização contínua, suporte |
|
||||
@@ -0,0 +1,154 @@
|
||||
# Narrativas e Copywriting Estratégico
|
||||
|
||||
Templates e exemplos reais de narrativas Descomplicar®. Baseados nos projectos SFV, LJM, MCT e Espiral Senior.
|
||||
|
||||
---
|
||||
|
||||
## 1. Fórmula central: Dor → Solução → Resultado
|
||||
|
||||
Estrutura base para qualquer narrativa por segmento:
|
||||
|
||||
```
|
||||
DOR: [Nome do segmento] enfrenta [problema específico e urgente].
|
||||
Sem solução, [consequência negativa concreta].
|
||||
|
||||
SOLUÇÃO: [Nome da marca] resolve isto através de [mecanismo único].
|
||||
[Diferencial que os concorrentes não têm].
|
||||
|
||||
RESULTADO: O resultado é [benefício tangível e mensurável].
|
||||
[Prova social ou garantia que aumenta credibilidade].
|
||||
```
|
||||
|
||||
**Exemplo SFV (segmento Empresas):**
|
||||
> Dor: As PMEs enfrentam facturas de electricidade crescentes que consomem margens já apertadas.
|
||||
> Solução: A SFV instala painéis solares personalizados com análise de consumo prévia — sem adiantamento para projectos qualificados.
|
||||
> Resultado: Redução de 60-90% na factura eléctrica, com ROI em 4-7 anos e garantia de 25 anos nos painéis.
|
||||
|
||||
**Exemplo MCT (segmento Oficinas):**
|
||||
> Dor: Mecânicos perdem tempo e dinheiro com ferramentas que chegam erradas, incompletas ou que avariam em obra.
|
||||
> Solução: A Carritools fornece equipamento profissional com assessoria técnica presencial e substituição imediata em caso de avaria.
|
||||
> Resultado: Menos tempo parado, mais trabalhos concluídos, clientes mais satisfeitos.
|
||||
|
||||
---
|
||||
|
||||
## 2. Declaração de Impacto
|
||||
|
||||
Uma frase poderosa que abre o documento e resume a essência da marca. Deve:
|
||||
- Ser memorável (10-15 palavras máximo)
|
||||
- Combinar emoção + resultado
|
||||
- Não ser genérica ("líderes de mercado", "qualidade e inovação")
|
||||
|
||||
**Exemplos reais:**
|
||||
|
||||
| Cliente | Declaração de Impacto |
|
||||
|---------|----------------------|
|
||||
| SFV Solar | "Energia (quase) Grátis para Famílias e Empresas" |
|
||||
| Espiral Senior | "Envelhecer em Dignidade, no Lugar que Mais Ama" |
|
||||
| Descomplicar® | "Criamos Resultados!" |
|
||||
|
||||
**Fórmulas para gerar Declaração de Impacto:**
|
||||
- `[Verbo de transformação] + [benefício desejado] + [para quem]`
|
||||
- `[Adjectivo emocional] + [resultado concreto]`
|
||||
- `[Benefício surpreendente] + [para quem] + [sem o custo habitual]`
|
||||
|
||||
---
|
||||
|
||||
## 3. Mensagens-chave por tipo de segmento
|
||||
|
||||
### Segmento decisor (CEO/Gerente)
|
||||
Foco: ROI, risco reduzido, credibilidade, tempo poupado.
|
||||
|
||||
Template:
|
||||
> "Mais de [N] empresas como a sua já [resultado]. A nossa abordagem garante [benefício financeiro] em [prazo], com [garantia específica]."
|
||||
|
||||
### Segmento utilizador final (técnico/operacional)
|
||||
Foco: facilidade de uso, suporte, fiabilidade, não criar problemas.
|
||||
|
||||
Template:
|
||||
> "Simples de implementar, sem interrupções ao seu trabalho. Em caso de dúvida, temos suporte [detalhe] para que nunca fique bloqueado."
|
||||
|
||||
### Segmento referenciador (parceiro/consultor)
|
||||
Foco: credibilidade para recomendar, win-win, diferenciação para os seus clientes.
|
||||
|
||||
Template:
|
||||
> "Ao recomendar [marca], está a oferecer aos seus clientes [resultado], o que reforça a sua autoridade como [cargo/papel]."
|
||||
|
||||
### Segmento influenciador (família/comunidade)
|
||||
Foco: valores partilhados, impacto positivo, pertença.
|
||||
|
||||
Template:
|
||||
> "Não é só [produto/serviço]. É uma escolha que [impacto maior]: [dimensão ambiental/social/familiar]."
|
||||
|
||||
---
|
||||
|
||||
## 4. Gestão de objecções — estrutura padrão
|
||||
|
||||
Para cada objecção, responder sempre com:
|
||||
1. **Validar** — reconhecer que é uma preocupação legítima
|
||||
2. **Reframeamento** — mudar o ângulo de análise
|
||||
3. **Prova** — exemplo, dado ou testemunho que confirma
|
||||
4. **CTA suave** — próximo passo de baixo compromisso
|
||||
|
||||
**Objecções universais e respostas tipo:**
|
||||
|
||||
| Objecção | Resposta base |
|
||||
|----------|--------------|
|
||||
| "É caro" | "Entendo a preocupação. O nosso preço reflecte [diferencial]. Clientes como [X] recuperaram o investimento em [prazo]. Posso mostrar-lhe o cálculo?" |
|
||||
| "Preciso de pensar" | "Faz todo o sentido. O que precisa de esclarecer para se sentir confiante? Posso enviar [recurso específico] que costuma ajudar nesta fase." |
|
||||
| "Já tentei algo parecido e não funcionou" | "Compreendo — essa experiência é frustrante. O que tipicamente falha é [causa]. A nossa abordagem resolve isto de forma diferente: [diferencial]." |
|
||||
| "Não tenho tempo agora" | "Respeitamos o seu tempo. É por isso que o nosso processo começa com apenas [X horas], e tratamos nós de [trabalho pesado]." |
|
||||
| "Preciso de aprovação interna" | "Claro. Posso preparar um resumo executivo de 1 página para facilitar a aprovação? Tenho feito isto para outros clientes com muito bom resultado." |
|
||||
|
||||
---
|
||||
|
||||
## 5. Tom de voz por personalidade de marca
|
||||
|
||||
### Marca especialista/técnica (ex: SFV, Carritools)
|
||||
- Linguagem precisa, dados concretos, terminologia do sector
|
||||
- Evitar: exageros sem prova, linguagem emocional excessiva
|
||||
- Usar: casos reais, números, especificações, garantias técnicas
|
||||
|
||||
### Marca próxima/humana (ex: Espiral Senior, Loja da Maria)
|
||||
- Linguagem calorosa, inclusiva, em 2ª pessoa
|
||||
- Evitar: jargão técnico, distância corporativa
|
||||
- Usar: histórias pessoais, empatia directa, linguagem do dia-a-dia
|
||||
|
||||
### Marca inovadora/disruptiva (ex: Descomplicar, SaaS)
|
||||
- Linguagem energética, directa, com algum desafio ao status quo
|
||||
- Evitar: clichés do sector, promessas vazias
|
||||
- Usar: contraste antes/depois, resultados surpreendentes, "E se..."
|
||||
|
||||
---
|
||||
|
||||
## 6. Estrutura de testemunho ideal
|
||||
|
||||
Baseado nos testemunhos reais recolhidos nos projectos:
|
||||
|
||||
```
|
||||
[Nome próprio + cargo + empresa] — [cidade, se relevante]
|
||||
"[Frase de impacto espontânea que resume o resultado]"
|
||||
|
||||
Contexto: [Situação antes de contratar]
|
||||
Resultado: [Mudança concreta e mensurável após]
|
||||
Recomendação: [Indicação explícita para outros como ele]
|
||||
```
|
||||
|
||||
**Exemplo real SFV:**
|
||||
> "Ricardo Castelão, Director Financeiro, Empresa de Distribuição — Porto
|
||||
> 'Reduzimos a nossa factura eléctrica em 73% no primeiro ano.'
|
||||
> Contexto: Gastávamos 4.200 EUR/mês em electricidade, sem alternativa viável.
|
||||
> Resultado: Passámos para 1.134 EUR/mês. O sistema pagou-se em 5,5 anos.
|
||||
> Recomendação: Para qualquer empresa com consumo acima de 1.500 EUR/mês, é obrigatório analisar esta opção."
|
||||
|
||||
---
|
||||
|
||||
## 7. Headlines de alto impacto — padrões
|
||||
|
||||
Padrões que funcionam consistentemente nos projectos Descomplicar:
|
||||
|
||||
- **Resultado específico:** "Reduza a sua factura eléctrica em 70% sem investimento inicial"
|
||||
- **Pergunta dor:** "Ainda a pagar [problema] quando existe solução comprovada?"
|
||||
- **Autoridade + resultado:** "Como [N] empresas [resultado] com [solução]"
|
||||
- **Contrafactual:** "E se a sua maior despesa se transformasse no seu maior activo?"
|
||||
- **Urgência real:** "A [mudança de mercado/regulação] está a mudar tudo — [posição da marca]"
|
||||
- **Social proof:** "Mais de [N] clientes em [região] já [resultado]"
|
||||
@@ -0,0 +1,318 @@
|
||||
# Análise de Nichos — Guia de Segmentação Sectorial
|
||||
|
||||
Para marcas com público PME, "PME" é demasiado vasto. Identificar os nichos sectoriais específicos permite mensagens certeiras, canais certos e ROI superior. Qualquer estratégia de marca deve analisar **pelo menos 5 nichos específicos** relevantes para o produto/serviço.
|
||||
|
||||
---
|
||||
|
||||
## Como usar este guia
|
||||
|
||||
1. Identificar os nichos onde o produto/serviço tem tracção real ou potencial
|
||||
2. Para cada nicho seleccionado, preencher os 8 pontos de análise sectorial
|
||||
3. Cruzar com os 20 pontos da análise de público (template-documento.md § 5) para o perfil completo
|
||||
4. Priorizar os 3 nichos de maior potencial para messaging principal
|
||||
|
||||
---
|
||||
|
||||
## Os 8 pontos de análise por nicho
|
||||
|
||||
Para cada nicho, responder:
|
||||
|
||||
1. **Dimensão e contexto** — quantas empresas em PT/EU, crescimento do sector, maturidade digital
|
||||
2. **Dores operacionais específicas** — o que os cansa no dia-a-dia (não genérico: específico do sector)
|
||||
3. **Funcionalidades mais relevantes** — o que do produto resolve melhor o problema deste nicho
|
||||
4. **Linguagem de venda** — palavras que usam, palavras que evitam, jargão do sector
|
||||
5. **Canal de aquisição principal** — onde estão, como chegam ao produto
|
||||
6. **Objecção principal** — o bloqueio mais frequente e como ultrapassar
|
||||
7. **Trigger de compra** — o momento/evento que precipita a decisão
|
||||
8. **Pricing sweet spot** — o que pagam por ferramentas similares, sensibilidade ao preço
|
||||
|
||||
---
|
||||
|
||||
## Os 10 nichos de PME mais relevantes (PT/EU)
|
||||
|
||||
### Nicho 1 — Saúde Privada
|
||||
|
||||
**Quem:** Clínicas dentárias, psicólogos, nutricionistas, fisioterapeutas, clínicas médicas privadas, terapeutas.
|
||||
|
||||
**Dimensão PT:** +12.000 clínicas e consultórios privados. Sector em crescimento pós-pandemia. Alta concentração em Lisboa, Porto e litoral.
|
||||
|
||||
**Dores operacionais:**
|
||||
- Agenda manual ou em sistemas desactualizados (Doctoralia, papel)
|
||||
- Falhas de consulta (no-shows) sem sistema de lembretes automatizado
|
||||
- Secretaria sobrecarregada com marcações e confirmações por telefone
|
||||
- Facturação em saúde com complexidade fiscal (isenção IVA, recibos verdes)
|
||||
- RGPD em saúde: dados sensíveis com requisitos legais estritos
|
||||
|
||||
**Funcionalidades mais relevantes:** lembretes automáticos de consulta por WhatsApp/SMS, confirmação/cancelamento por WhatsApp, reagendamento automático, facturação PT com isenção IVA, base de conhecimento para FAQ de pacientes.
|
||||
|
||||
**Linguagem de venda:** "reduzir faltas à consulta", "libertar a secretária para o que importa", "pacientes confirmam pelo WhatsApp", "agenda sempre actualizada". Evitar: "automação", "IA", "bot".
|
||||
|
||||
**Canal de aquisição:** associações profissionais (OMD, Ordem dos Psicólogos), LinkedIn de gestores de clínica, referência entre profissionais de saúde, Google Ads ("software gestão clínica", "agenda online clínica").
|
||||
|
||||
**Objecção principal:** "Os meus pacientes são mais velhos e não usam WhatsApp." → Resposta: "O sistema funciona igualmente por SMS. E os cuidadores/filhos que marcam as consultas estão todos no WhatsApp."
|
||||
|
||||
**Trigger de compra:** crescimento de lista de espera que a secretária já não consegue gerir; terceira consulta cancelada sem aviso no mesmo mês.
|
||||
|
||||
**Pricing sweet spot:** €50-150/mês (referência: Doctoralia €80-200/mês).
|
||||
|
||||
---
|
||||
|
||||
### Nicho 2 — Imobiliárias e Mediação
|
||||
|
||||
**Quem:** Agências imobiliárias independentes, mediadores certificados (AMI), promotores imobiliários, gestoras de condomínios.
|
||||
|
||||
**Dimensão PT:** +5.000 agências com licença AMI activas. Mercado em alta, mas muito fragmentado. Alta dependência de WhatsApp para comunicação com compradores/vendedores.
|
||||
|
||||
**Dores operacionais:**
|
||||
- Leads entram por portais (Imovirtual, Idealista, OLX) e ficam sem resposta rápida
|
||||
- Gestão de visitas manual: telefonemas para confirmar, reagendar, cancelar
|
||||
- Follow-up de compradores perdido no WhatsApp pessoal do agente
|
||||
- Quando o agente sai, leva os contactos consigo
|
||||
- Proposta/minuta demoram dias
|
||||
|
||||
**Funcionalidades mais relevantes:** resposta automática a leads de portais, qualificação de leads por WhatsApp, agendamento de visitas com confirmação automática, CRM com histórico centralizado (não no telemóvel do agente), geração de propostas.
|
||||
|
||||
**Linguagem de venda:** "nunca perde um lead do Idealista", "as visitas confirmam-se sozinhas", "quando o agente sai, o cliente fica na empresa", "responde ao lead em 2 minutos, a qualquer hora".
|
||||
|
||||
**Canal de aquisição:** associações (APEMIP, ASIP), LinkedIn de directores de agência, eventos do sector imobiliário, Google Ads ("CRM imobiliário Portugal", "software mediação imobiliária").
|
||||
|
||||
**Objecção principal:** "Já usamos o CRM do Idealista." → Resposta: "O CRM do portal gere os leads do portal. O AcidaOS centraliza todos os portais + WhatsApp + email num só sítio, com o histórico completo de cada cliente."
|
||||
|
||||
**Trigger de compra:** perda de uma venda grande por demora na resposta ao lead; saída de um agente que levou a carteira de clientes.
|
||||
|
||||
**Pricing sweet spot:** €80-200/mês (referência: Salesforce RE €150-300/mês, CRMs sectoriais €50-150/mês).
|
||||
|
||||
---
|
||||
|
||||
### Nicho 3 — Construção e Remodelação
|
||||
|
||||
**Quem:** Empreiteiros de construção civil, empresas de remodelação e acabamentos, serralheiros, carpinteiros, canalizadores com equipa, empresas de pintura.
|
||||
|
||||
**Dimensão PT:** sector fortíssimo — construção representa ~7% do PIB PT. Altamente fragmentado, maioria micro-empresas 1-20 pessoas. Baixa digitalização. Alta dependência de telefonema e referência.
|
||||
|
||||
**Dores operacionais:**
|
||||
- Orçamentos demoram dias ou semanas a chegar ao cliente
|
||||
- Clientes ligam 5 vezes para saber se o orçamento chegou
|
||||
- Gestão de obras espalhada por papel, WhatsApp e memória do encarregado
|
||||
- Facturação atrasada em relação ao trabalho realizado (meses de delay)
|
||||
- Cobranças de pagamentos em atraso constrangem a relação com o cliente
|
||||
|
||||
**Funcionalidades mais relevantes:** geração de orçamentos, follow-up automático ("o seu orçamento foi enviado — alguma dúvida?"), facturação automática por fase de obra, lembretes de pagamento, agenda de obras com alertas de prazo.
|
||||
|
||||
**Linguagem de venda:** "orçamento pronto em horas, não dias", "o cliente sabe sempre o estado da obra", "recebe quando acaba, não quando se lembra". Evitar linguagem tech — falar em "tempo poupado" e "dinheiro recebido".
|
||||
|
||||
**Canal de aquisição:** referência entre empresários do sector, associações (AICCOPN, AECOPS), Facebook Groups de empreiteiros e remodelações, feiras de construção.
|
||||
|
||||
**Objecção principal:** "A minha secretária já faz isso." → Resposta: "E quando ela está de férias? O AcidaOS não vai de férias."
|
||||
|
||||
**Trigger de compra:** perda de um contrato por orçamento que chegou tarde; mês com 3 facturas por emitir de obras já concluídas.
|
||||
|
||||
**Pricing sweet spot:** €30-80/mês (sector muito sensível ao preço, mas disposto a pagar se ROI for claro e imediato).
|
||||
|
||||
---
|
||||
|
||||
### Nicho 4 — Agências Digitais e Criativas
|
||||
|
||||
**Quem:** Agências de marketing digital, design, comunicação, relações públicas, fotografia/vídeo, produção de conteúdo.
|
||||
|
||||
**Dimensão PT:** +3.500 agências activas. Sector muito competitivo, margens a comprimir. Muitas em transição de "serviços de execução" para "serviços de estratégia + produto".
|
||||
|
||||
**Dores operacionais:**
|
||||
- Relatórios mensais para clientes consomem 2-3 dias de trabalho manual
|
||||
- Gestão de aprovações de conteúdo por WhatsApp e email (versões perdidas)
|
||||
- Timesheets manuais → facturação imprecisa → conflitos com clientes
|
||||
- Escalabilidade travada: para crescer precisa de contratar
|
||||
- Receita 100% baseada em horas → vulnerável a perdas de cliente
|
||||
|
||||
**Funcionalidades mais relevantes:** geração automática de relatórios mensais, portal do cliente com aprovação de conteúdos, registo automático de horas, facturação por projecto, upsell/cross-sell automatizado (ex: "o teu plano inclui X — quer adicionar Y?").
|
||||
|
||||
**Linguagem de venda:** "relatórios que se fazem sozinhos", "o cliente aprova no portal, não por email", "receita recorrente sem aumentar a equipa", "white-label para revender aos teus clientes".
|
||||
|
||||
**Canal de aquisição:** LinkedIn (muito activo neste nicho), eventos de marketing (RD Summit, Social Media Week), comunidades Slack de marketers, referência entre agências.
|
||||
|
||||
**Objecção principal:** "Já usamos Monday/Asana/Notion." → Resposta: "O AcidaOS integra com essas ferramentas. Mas adiciona a camada de IA que automatiza o que ainda fazem manualmente: relatórios, aprovações, facturação."
|
||||
|
||||
**Trigger de compra:** perda de 20% da margem num trimestre por horas não facturadas; cliente grande que pediu relatórios mais frequentes sem pagar mais.
|
||||
|
||||
**Pricing sweet spot:** €100-300/mês; alto potencial para plano Partner/white-label (€500-1.000/mês).
|
||||
|
||||
---
|
||||
|
||||
### Nicho 5 — Comércio B2B e Distribuição
|
||||
|
||||
**Quem:** Distribuidores, grossistas, representantes comerciais, importadores, empresas de venda a retalhistas.
|
||||
|
||||
**Dimensão PT:** sector fundamental da economia, muito diversificado. Ciclos de venda mais longos, pedidos recorrentes, relacionamento comercial crítico.
|
||||
|
||||
**Dores operacionais:**
|
||||
- Pedidos chegam por WhatsApp, email e telefone — sem registo centralizado
|
||||
- Catálogo de produtos actualizado só existe em Excel ou PDF
|
||||
- Comerciais perdem tempo a dar preços e a verificar stock pelo telefone
|
||||
- Dívidas de clientes descobertas tarde (só quando o contabilista avisa)
|
||||
- Fidelização: o cliente vai ao concorrente se não for contactado regularmente
|
||||
|
||||
**Funcionalidades mais relevantes:** chatbot de catálogo e preços por WhatsApp, processamento de pedidos automático, alertas de pagamentos em atraso, follow-up automático de clientes inativos ("não nos pede há 30 dias — tudo bem?"), facturação automática por encomenda.
|
||||
|
||||
**Linguagem de venda:** "o cliente pede pelo WhatsApp e a factura sai automática", "nunca perde uma encomenda por estar em reunião", "sabe quem não lhe compra há um mês antes de o perder".
|
||||
|
||||
**Canal de aquisição:** associações sectoriais, feiras B2B, LinkedIn de directores comerciais, referência entre distribuidores.
|
||||
|
||||
**Objecção principal:** "Os meus clientes são empresas — preferem email formal." → Resposta: "O sistema funciona por email também. E o WhatsApp para os urgentes — que são 80% dos pedidos reais."
|
||||
|
||||
**Trigger de compra:** perda de cliente para concorrente por resposta mais rápida; mês com facturas em atraso acima de €10K.
|
||||
|
||||
**Pricing sweet spot:** €100-250/mês (dispostos a pagar pelo ROI directo em cobranças e pedidos capturados).
|
||||
|
||||
---
|
||||
|
||||
### Nicho 6 — Restauração e Hotelaria
|
||||
|
||||
**Quem:** Restaurantes, cafés, bares, hotéis boutique, alojamentos locais, serviços de catering, espaços de eventos.
|
||||
|
||||
**Dimensão PT:** +80.000 estabelecimentos de restauração. Sector de margens apertadas, alta rotatividade de staff, sazonalidade intensa.
|
||||
|
||||
**Dores operacionais:**
|
||||
- Reservas por telefone interrompem o serviço → perdidas quando está cheio
|
||||
- Grupos e eventos corporativos: orçamentação manual e demorada
|
||||
- Gestão de feedback online (Google, Tripadvisor) sem resposta sistemática
|
||||
- Campanhas de WhatsApp para promoções especiais feitas manualmente
|
||||
- Alojamento local: check-in remoto, comunicação com hóspedes em múltiplas línguas
|
||||
|
||||
**Funcionalidades mais relevantes:** reservas e confirmações por WhatsApp, resposta automática a reviews Google, campanhas de promoções ("mesa disponível para amanhã?"), comunicação com hóspedes em PT/EN/ES automática, facturação de eventos.
|
||||
|
||||
**Linguagem de venda:** "mesa reservada e confirmada sem tirar o empregado do serviço", "campanhas de promoção para a base de clientes em 2 minutos", "hóspedes atendidos em qualquer língua, a qualquer hora".
|
||||
|
||||
**Canal de aquisição:** associações (AHRESP, ARESP), feiras do sector (Horexpo, BTL), Instagram/Facebook de restaurateurs, referência entre proprietários.
|
||||
|
||||
**Objecção principal:** "O meu cliente quer falar com uma pessoa." → Resposta: "O sistema trata das confirmações de rotina. Quando o cliente quer falar com alguém, o sistema escala — e o teu staff tem mais tempo para isso."
|
||||
|
||||
**Trigger de compra:** mesa dupla marcada no mesmo horário; alta temporada com reservas a escapar por não conseguir atender o telefone.
|
||||
|
||||
**Pricing sweet spot:** €30-80/mês (margens apertadas — proposta tem de ser de ROI imediato e muito claro).
|
||||
|
||||
---
|
||||
|
||||
### Nicho 7 — Contabilidade e Consultoria
|
||||
|
||||
**Quem:** Gabinetes de contabilidade, TOCs (Técnicos Oficiais de Contas), escritórios de advogados, consultores de gestão, solicitadores.
|
||||
|
||||
**Dimensão PT:** +8.000 gabinetes de contabilidade registados. Sector muito regulado, conservador, mas sob pressão de digitalização e de novas exigências da AT.
|
||||
|
||||
**Dores operacionais:**
|
||||
- Clientes entregam documentação de forma caótica (papel, foto de WhatsApp, email)
|
||||
- Prazos fiscais críticos (IRS, IRC, IVA, SS) gerem-se manualmente com risco de multa
|
||||
- Comunicação de alertas a clientes por email → baixa taxa de abertura
|
||||
- Facturação de honorários por horas não registadas sistematicamente
|
||||
- Novos clientes: onboarding burocrático e demorado
|
||||
|
||||
**Funcionalidades mais relevantes:** portal de recolha de documentos do cliente, alertas de prazos fiscais automáticos por WhatsApp, registo automático de horas, facturação mensal, onboarding digital de clientes.
|
||||
|
||||
**Linguagem de venda:** "o cliente entrega os documentos pelo WhatsApp e chegam organizados", "o cliente recebe o alerta de IVA no dia certo, não quando já passou", "sem ligar 5 vezes para pedir o recibo". Evitar: "IA", "automação" — usar "sistema", "organização", "processo".
|
||||
|
||||
**Canal de aquisição:** Ordem dos Contabilistas Certificados, formações profissionais obrigatórias, referência entre TOCs, LinkedIn de gestores de gabinetes.
|
||||
|
||||
**Objecção principal:** "Os nossos clientes são conservadores e resistem a mudanças." → Resposta: "O cliente não vê nenhuma mudança — continua a mandar fotos para o WhatsApp. Só que chegam organizadas ao sistema em vez de à caixa de entrada da Ana."
|
||||
|
||||
**Trigger de compra:** multa de cliente por prazo fiscal falhado por comunicação deficiente; novo quadro legal que aumenta o volume de entregas obrigatórias.
|
||||
|
||||
**Pricing sweet spot:** €50-150/mês (sector conservador no pricing mas com ROI muito mensurável em tempo poupado).
|
||||
|
||||
---
|
||||
|
||||
### Nicho 8 — E-commerce e Retalho Online
|
||||
|
||||
**Quem:** Lojas online, marcas DTC (direct-to-consumer), revendedores em marketplace (Amazon PT, FNAC, Worten), lojas omnicanal (físico + online).
|
||||
|
||||
**Dimensão PT:** +25.000 lojas online activas. Crescimento acelerado mas altíssima competição e margens em queda.
|
||||
|
||||
**Dores operacionais:**
|
||||
- Volume de mensagens de suporte pós-venda (estado da encomenda, devoluções) insustentável
|
||||
- Carrinhos abandonados sem follow-up automático → receita perdida
|
||||
- Campanhas de reactivação de clientes inativos feitas manualmente
|
||||
- Devoluções: processo manual, email interminável, cliente frustrado
|
||||
- Avaliações negativas sem resposta → impacto na conversão
|
||||
|
||||
**Funcionalidades mais relevantes:** suporte automático de "onde está a minha encomenda" por WhatsApp, follow-up de carrinho abandonado, campanha de reactivação de clientes inativos, gestão de devoluções automatizada, resposta a reviews.
|
||||
|
||||
**Linguagem de venda:** "responde a 80% das perguntas de suporte sem intervenção humana", "recupera 15% dos carrinhos abandonados com um WhatsApp certo", "o cliente fica satisfeito sem precisar de esperar por email".
|
||||
|
||||
**Canal de aquisição:** comunidades de e-commerce (Shopify PT Facebook Group, grupos LinkedIn de e-commerce), eventos (eCommerce Day, NOS Alive), agências de e-commerce como parceiros.
|
||||
|
||||
**Objecção principal:** "Já usamos o suporte do Shopify." → Resposta: "O suporte do Shopify trata do que está dentro da plataforma. O AcidaOS trata do WhatsApp, do email e das mensagens do Instagram — que é de onde vêm 70% das perguntas reais."
|
||||
|
||||
**Trigger de compra:** Black Friday com volume de suporte 5x superior ao habitual sem equipa para responder; mês com carrinho abandonado acima de 70% sem follow-up.
|
||||
|
||||
**Pricing sweet spot:** €69-149/mês (familiarizados com SaaS, comparam com Gorgias €10-150/mês, Tidio €29-100/mês).
|
||||
|
||||
---
|
||||
|
||||
### Nicho 9 — Educação e Formação
|
||||
|
||||
**Quem:** Centros de formação profissional, explicadores e centros de explicações, escolas de línguas, escolas de música/artes, coaches e mentores, plataformas de formação online.
|
||||
|
||||
**Dimensão PT:** sector em expansão acelerada. Formação profissional fortemente subsidiada (FSE/IEFP) com requisitos administrativos pesados.
|
||||
|
||||
**Dores operacionais:**
|
||||
- Matrículas e inscrições por telefone e email — processo manual e demorado
|
||||
- Comunicação com pais (no caso de menores) caótica e dispersa
|
||||
- Cobranças de mensalidades em atraso constrangem a relação com o aluno/família
|
||||
- Certificados e documentação de formação gerados manualmente
|
||||
- Formação subsidiada: relatórios e documentação obrigatória para financiamento
|
||||
|
||||
**Funcionalidades mais relevantes:** inscrições online com confirmação automática, comunicação com pais por WhatsApp, cobranças automáticas com link de pagamento (MB Way), geração de certificados, relatórios de frequência.
|
||||
|
||||
**Linguagem de venda:** "os pais recebem updates do filho pelo WhatsApp, sem ligar para a recepção", "as inscrições chegam organizadas, não por telefone", "as mensalidades cobram-se sozinhas no dia certo".
|
||||
|
||||
**Canal de aquisição:** DGERT (entidade reguladora de formação), LinkedIn de directores pedagógicos, grupos Facebook de formadores, referência entre centros.
|
||||
|
||||
**Objecção principal:** "Temos sistema de gestão escolar." → Resposta: "O AcidaOS complementa — trata da comunicação e cobranças que o sistema escolar não faz."
|
||||
|
||||
**Trigger de compra:** período de matrículas com recepção sobrecarregada; mensalidade em atraso de mais de 3 meses por falta de follow-up.
|
||||
|
||||
**Pricing sweet spot:** €50-120/mês (sensíveis ao preço mas com ROI claro em cobranças recuperadas).
|
||||
|
||||
---
|
||||
|
||||
### Nicho 10 — Serviços Técnicos Especializados
|
||||
|
||||
**Quem:** Empresas de IT/informática, AVAC, electricistas com empresa, empresas de segurança e alarmes, canalizadores, empresas de manutenção de equipamentos.
|
||||
|
||||
**Dimensão PT:** dezenas de milhares de micro e pequenas empresas. Alta dependência de WhatsApp para comunicar com técnicos e clientes. Muito fragmentado.
|
||||
|
||||
**Dores operacionais:**
|
||||
- Chamadas de avaria chegam fora de horas sem registo
|
||||
- Orçamentos de intervenções demoram dias (técnico tem de ver primeiro)
|
||||
- Scheduling de técnicos manual — conflitos de agenda e deslocações ineficientes
|
||||
- Contrato de manutenção: clientes que deviam contactar para revisão e não contactam
|
||||
- Relatório de intervenção escrito à mão ou por memória do técnico
|
||||
|
||||
**Funcionalidades mais relevantes:** triagem automática de avarias fora de horas (gravidade, urgência), agendamento de técnicos por disponibilidade, geração de relatório de intervenção por voz (técnico descreve verbalmente → relatório gerado), alertas de manutenção preventiva, facturação de serviço.
|
||||
|
||||
**Linguagem de venda:** "o técnico descreve o trabalho pelo WhatsApp e o relatório fica pronto", "as chamadas de avaria fora de horas ficam registadas e triadas", "o cliente de manutenção recebe o alerta de revisão no mês certo".
|
||||
|
||||
**Canal de aquisição:** associações sectoriais (ANEOP, ASIAM), LinkedIn de gestores de empresa técnica, grupos Facebook de técnicos, referência entre pares.
|
||||
|
||||
**Objecção principal:** "Os meus técnicos não usam computador." → Resposta: "Exactamente por isso — o AcidaOS funciona pelo WhatsApp que eles já usam. O relatório faz-se com uma nota de voz."
|
||||
|
||||
**Trigger de compra:** chamada de avaria urgente perdida fora de horas; técnico que sai e leva o registo das intervenções que fez.
|
||||
|
||||
**Pricing sweet spot:** €40-100/mês (dispostos a pagar pelo valor em tempo poupado e em trabalho não perdido).
|
||||
|
||||
---
|
||||
|
||||
## Tabela resumo — priorização por atractividade
|
||||
|
||||
| Nicho | Volume PT | Urgência da dor | Disposição a pagar | Canal de entrada | Score |
|
||||
|-------|-----------|----------------|-------------------|-----------------|-------|
|
||||
| Saúde Privada | Alta | Muito alta | Alta | Associações + Google | ⭐⭐⭐⭐⭐ |
|
||||
| Imobiliárias | Média | Alta | Alta | LinkedIn + portais | ⭐⭐⭐⭐⭐ |
|
||||
| Agências Digitais | Média | Alta | Muito alta | LinkedIn + eventos | ⭐⭐⭐⭐⭐ |
|
||||
| E-commerce | Alta | Alta | Alta | Comunidades + parceiros | ⭐⭐⭐⭐ |
|
||||
| Contabilidade | Alta | Média-alta | Média | Ordem OCC + formação | ⭐⭐⭐⭐ |
|
||||
| Construção | Muito alta | Alta | Média | Referência + associações | ⭐⭐⭐⭐ |
|
||||
| Comércio B2B | Alta | Alta | Média-alta | Feiras + LinkedIn | ⭐⭐⭐⭐ |
|
||||
| Serviços Técnicos | Muito alta | Média | Média | Referência + grupos | ⭐⭐⭐ |
|
||||
| Educação | Média | Média | Baixa-média | DGERT + referência | ⭐⭐⭐ |
|
||||
| Restauração | Muito alta | Média | Baixa | AHRESP + Instagram | ⭐⭐⭐ |
|
||||
|
||||
**Top 3 para arranque:** Saúde Privada, Imobiliárias, Agências Digitais — dor alta, disposição a pagar alta, canais de entrada claros.
|
||||
@@ -0,0 +1,113 @@
|
||||
# Perguntas de Briefing — Entrevista Estratégica
|
||||
|
||||
Guia de entrevista estruturado para conduzir o briefing inicial com o cliente.
|
||||
Adaptar ao sector e nível de maturidade da marca.
|
||||
|
||||
---
|
||||
|
||||
## Bloco 1 — O negócio
|
||||
|
||||
### Contexto actual
|
||||
1. O que faz a sua empresa, em termos simples?
|
||||
2. Há quantos anos está no mercado? Como surgiu?
|
||||
3. Qual a dimensão actual: equipa, facturação, clientes?
|
||||
4. Qual é o maior desafio que enfrenta hoje no negócio?
|
||||
5. O que o distingue dos concorrentes? (resposta espontânea — não sugerir)
|
||||
|
||||
### Serviços e produtos
|
||||
6. Quais são os seus produtos/serviços principais?
|
||||
7. Qual gera mais receita? Qual tem mais potencial?
|
||||
8. Existe algum produto que quer destacar mais? Porquê?
|
||||
9. Que resultados concretos entregam aos clientes?
|
||||
|
||||
### Posicionamento actual
|
||||
10. Se pedisse a um cliente para descrever a sua empresa em 3 palavras, o que diria?
|
||||
11. Existe uma percepção de mercado que quer mudar?
|
||||
12. Onde se posiciona em preço vs concorrência? (mais caro, igual, mais barato) Porquê?
|
||||
|
||||
---
|
||||
|
||||
## Bloco 2 — O cliente ideal
|
||||
|
||||
### Segmentação
|
||||
13. Quem é o seu cliente ideal? Descreva-o em detalhe.
|
||||
14. Tem mais do que um tipo de cliente? Como os diferencia?
|
||||
15. Qual o cliente que mais valoriza o que fazem e paga melhor?
|
||||
16. Existe algum cliente que não quer ter? Porquê?
|
||||
|
||||
### Comportamento de compra
|
||||
17. Como é que os clientes chegam até si? (canal principal de aquisição)
|
||||
18. Quanto tempo demora tipicamente desde o primeiro contacto até fechar negócio?
|
||||
19. Quem toma a decisão de compra? É uma pessoa ou um grupo?
|
||||
20. Que objecções ouve mais frequentemente antes de fechar?
|
||||
|
||||
### Relação com clientes
|
||||
21. Qual foi o feedback mais positivo que recebeu de um cliente? (pedir citação exacta)
|
||||
22. Qual foi a queixa mais comum? Como resolveram?
|
||||
23. Tem clientes que recomendam espontaneamente? O que dizem?
|
||||
|
||||
---
|
||||
|
||||
## Bloco 3 — Mercado e concorrência
|
||||
|
||||
### Mercado
|
||||
24. Em que mercado opera? Geográfico (local, nacional, internacional)?
|
||||
25. O mercado está a crescer, estável ou a contrair?
|
||||
26. Que tendência do mercado mais o preocupa? Qual mais o entusiasma?
|
||||
27. Existe sazonalidade? Em que períodos?
|
||||
|
||||
### Concorrência
|
||||
28. Quem são os 3 principais concorrentes?
|
||||
29. Em que é que são melhores? Em que é que são piores?
|
||||
30. Por que é que um cliente nos escolhe a nós vs ao concorrente X?
|
||||
31. Existe algum concorrente que admira (mesmo que de outra área)?
|
||||
|
||||
---
|
||||
|
||||
## Bloco 4 — Visão e ambição
|
||||
|
||||
### Onde quer chegar
|
||||
32. Qual é o objectivo da empresa a 3 anos?
|
||||
33. O que precisa de mudar para chegar lá?
|
||||
34. Existe um modelo de empresa que admira ou quer imitar? Porquê?
|
||||
35. Se tivesse recursos ilimitados, o que faria primeiro?
|
||||
|
||||
### Marca e identidade
|
||||
36. Que 3 adjectivos descrevem a personalidade ideal da marca?
|
||||
37. Que marcas (de qualquer sector) admira pela comunicação? O que lhes agrada?
|
||||
38. Existe uma história de origem da empresa que emociona? (fundador, momento de viragem)
|
||||
39. Que valores são inegociáveis? O que nunca fariam por dinheiro?
|
||||
|
||||
### Tom de voz
|
||||
40. A marca é mais formal ou informal? Mais técnica ou acessível?
|
||||
41. Usa humor na comunicação? Em que contextos?
|
||||
42. Existe linguagem/palavras que NÃO deve usar?
|
||||
|
||||
---
|
||||
|
||||
## Bloco 5 — Recursos e restrições
|
||||
|
||||
### Capacidade
|
||||
43. Qual o budget mensal disponível para marketing?
|
||||
44. Existe equipa interna de marketing ou será tudo externalizado?
|
||||
45. Quem aprova conteúdos? Qual o processo de revisão?
|
||||
|
||||
### Prazo
|
||||
46. Existe algum lançamento, evento ou data importante a curto prazo?
|
||||
47. Quando precisa de ter a estratégia operacional?
|
||||
|
||||
### Material existente
|
||||
48. Existe alguma estratégia anterior? O que funcionou? O que não funcionou?
|
||||
49. Que activos existem: website, redes sociais, base de emails, testemunhos, cases?
|
||||
50. Existem fotos/vídeos profissionais? Em que estado está a identidade visual?
|
||||
|
||||
---
|
||||
|
||||
## Notas de condução da entrevista
|
||||
|
||||
- Fazer max 15-20 perguntas numa sessão (60-90 min)
|
||||
- Priorizar: Blocos 1, 2 e 4 na primeira sessão
|
||||
- Blocos 3 e 5 podem ser preenchidos com pesquisa independente
|
||||
- Pedir sempre exemplos concretos e citações textuais de clientes
|
||||
- Quando a resposta é vaga, fazer "pode dar-me um exemplo específico?"
|
||||
- Gravar a sessão (com autorização) para não perder citações úteis
|
||||
@@ -0,0 +1,374 @@
|
||||
# Template: Documento de Estratégia de Marca
|
||||
|
||||
Estrutura completa do documento entregável ao cliente. Baseado nos projectos SFV, LJM, MCT, Espiral Senior e Sintricare.
|
||||
Adaptar secções ao sector e complexidade do cliente.
|
||||
|
||||
---
|
||||
|
||||
## Cabeçalho do documento
|
||||
|
||||
```
|
||||
---
|
||||
title: [Nome da Marca] — Estratégia de Marca
|
||||
cliente: [Nome do cliente]
|
||||
código: EST-MRK-010
|
||||
versão: 1.0
|
||||
data: [DD-MM-YYYY]
|
||||
elaborado: Descomplicar® — Agência de Aceleração Digital
|
||||
status: draft | aprovado
|
||||
---
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## DECLARAÇÃO DE IMPACTO
|
||||
|
||||
> **[Uma frase poderosa — 10-15 palavras máximo]**
|
||||
> *A essência e o impacto da marca numa linha.*
|
||||
|
||||
---
|
||||
|
||||
## ÍNDICE
|
||||
|
||||
1. Apresentação e Fundamentos Estratégicos
|
||||
2. Proposta de Valor Única
|
||||
3. Missão, Visão, Valores e Objectivos
|
||||
4. Apresentação Sumária da Empresa e Serviços
|
||||
5. Segmentação e Análise Detalhada de Público
|
||||
6. Pitch Canvas
|
||||
7. Copywriting Estratégico
|
||||
8. Estratégia de Comunicação e Canais
|
||||
9. Investimentos Prioritários
|
||||
10. Monitorização e KPIs
|
||||
11. Inventário de Activos de Marketing
|
||||
|
||||
---
|
||||
|
||||
## 1. Apresentação e Fundamentos Estratégicos
|
||||
|
||||
### 1.1 Contexto actual
|
||||
- **Mercado:** [Análise do mercado actual — dimensão, tendências, oportunidades]
|
||||
- **Concorrência:** [Principais concorrentes e posições]
|
||||
- **Desafios:** [Principais desafios enfrentados pela marca]
|
||||
- **Oportunidades:** [Oportunidades identificadas]
|
||||
|
||||
### 1.2 Problema a resolver
|
||||
[Identificação clara do problema de negócio que esta estratégia precisa resolver — qual é o problema central que impede o crescimento ou o impacto da marca?]
|
||||
|
||||
---
|
||||
|
||||
## 2. Proposta de Valor Única
|
||||
|
||||
### 2.1 O que nos torna únicos
|
||||
[O que tornamos possível que os concorrentes não conseguem. Ser específico — evitar "qualidade e experiência".]
|
||||
|
||||
### 2.2 Diferenciais competitivos
|
||||
1. [Diferencial 1 — explicar o mecanismo único que o cria]
|
||||
2. [Diferencial 2]
|
||||
3. [Diferencial 3]
|
||||
|
||||
### 2.3 Benefícios por camada
|
||||
| Tipo | Benefícios |
|
||||
|------|-----------|
|
||||
| **Funcionais** | [O que o produto/serviço faz concretamente] |
|
||||
| **Emocionais** | [Como o cliente se sente ao usar/contratar] |
|
||||
| **Identitários** | [O que diz sobre o cliente escolher esta marca] |
|
||||
|
||||
---
|
||||
|
||||
## 3. Missão, Visão, Valores e Objectivos
|
||||
|
||||
### 3.1 Missão
|
||||
> [O que fazemos, para quem e como — acção no presente. Max 2 frases.]
|
||||
|
||||
### 3.2 Visão
|
||||
> [Onde queremos estar e que impacto queremos ter em 3-5 anos. Max 2 frases.]
|
||||
|
||||
### 3.3 Valores
|
||||
- **[Valor 1]** — [Como se manifesta na prática, no dia-a-dia da empresa]
|
||||
- **[Valor 2]** — [Como se manifesta]
|
||||
- **[Valor 3]** — [Como se manifesta]
|
||||
- **[Valor 4]** — [Como se manifesta] *(opcional)*
|
||||
|
||||
### 3.4 Objectivos estratégicos
|
||||
- **Curto prazo (6m):** [2-3 objectivos mensuráveis]
|
||||
- **Médio prazo (1 ano):** [2-3 objectivos]
|
||||
- **Longo prazo (3 anos):** [Ambição de impacto]
|
||||
|
||||
---
|
||||
|
||||
## 4. Apresentação Sumária da Empresa e Serviços
|
||||
|
||||
### 4.1 Quem somos
|
||||
[Parágrafo de apresentação — quem são, o que fazem, há quanto tempo, dimensão, missão em acção]
|
||||
|
||||
### 4.2 Serviços/Produtos principais
|
||||
|
||||
| Serviço/Produto | Descrição | Para quem | Resultado principal |
|
||||
|----------------|-----------|-----------|-------------------|
|
||||
| [Nome] | — | — | — |
|
||||
| [Nome] | — | — | — |
|
||||
|
||||
### 4.3 Posicionamento
|
||||
[Declaração de posicionamento — o lugar único que a marca ocupa na mente do cliente]
|
||||
|
||||
> "Para [público], somos a única [categoria] que [benefício único] porque [prova]."
|
||||
|
||||
---
|
||||
|
||||
## 5. Segmentação e Análise Detalhada de Público
|
||||
|
||||
*Repetir a estrutura completa dos 20 pontos para cada segmento identificado.*
|
||||
|
||||
---
|
||||
|
||||
### 5.X — [Nome do Segmento]
|
||||
|
||||
*[Breve descrição de quem é este segmento — 2 linhas]*
|
||||
|
||||
#### 1. Perfil Demográfico
|
||||
[Idade, género, localização, rendimento, nível de educação, profissão, cargo, tipo/dimensão de empresa, estado civil, composição familiar — tudo o que é mensurável e verificável]
|
||||
|
||||
#### 2. Perfil Psicográfico
|
||||
[Valores pessoais, crenças, atitude perante a vida, estilo de vida, motivações profundas, relação com a categoria de produto/serviço, identidade social — o que não se mede mas define quem são]
|
||||
|
||||
#### 3. Dores
|
||||
[Problemas activos e urgentes que precisam resolver. O que os está a prejudicar agora. Dores específicas do dia-a-dia relacionadas com o que a marca resolve.]
|
||||
|
||||
#### 4. Anseios
|
||||
[O que aspiram a ser, ter ou alcançar. Sonhos profissionais e pessoais. A versão ideal do futuro que imaginam.]
|
||||
|
||||
#### 5. Desejos
|
||||
[O que querem concretamente — mais imediato e específico que os anseios. Desejos práticos relacionados com a nossa oferta.]
|
||||
|
||||
#### 6. Frustrações
|
||||
[O que já tentaram fazer ou comprar sem resultado. Soluções que prometeram e não entregaram. O cansaço acumulado de não resolver o problema.]
|
||||
|
||||
#### 7. Preocupações
|
||||
[O que os inquieta a médio/longo prazo. Cenários negativos que imaginam. Preocupações sistémicas relacionadas com a sua vida ou negócio.]
|
||||
|
||||
#### 8. Medos
|
||||
[Medos concretos associados à compra ou à não-compra. Medo de errar, de ser enganado, de perder dinheiro, de ser julgado. O que os paralisa antes de decidir.]
|
||||
|
||||
#### 9. Inimigos
|
||||
[Os "vilões" da história deste segmento — concorrentes que os desiludiram, sistemas que os prejudicam, tendências que os ameaçam, pessoas ou entidades a quem culpam o problema]
|
||||
|
||||
#### 10. Linguagem
|
||||
[As palavras e expressões exactas que usam para descrever o problema, a solução e os resultados. Jargão do sector. O que dizem aos amigos. O que escrevem no Google. Evitar linguagem que usamos internamente mas eles não usam.]
|
||||
|
||||
#### 11. Como procuram ajuda, informação ou dicas?
|
||||
[Onde vão quando têm o problema: Google (que pesquisas fazem?), YouTube, grupos Facebook, LinkedIn, amigos, consultores, feiras, etc. Que tipo de conteúdo consomem para se informar?]
|
||||
|
||||
#### 12. Canais digitais
|
||||
[Em que plataformas estão activos: Facebook, Instagram, LinkedIn, TikTok, YouTube, email, WhatsApp, fóruns, etc. Com que frequência? Em que contexto (trabalho vs lazer)?]
|
||||
|
||||
#### 13. Estilo de Decisão
|
||||
[Como tomam decisões de compra: rápido vs deliberado, emocional vs racional, individual vs colectivo, impulsivo vs comparativo. Que factores pesam mais? Precisam de aprovação de terceiros?]
|
||||
|
||||
#### 14. Mudanças
|
||||
[Mudanças que sabem e sentem necessárias nas suas vidas ou negócio. Passos que sabem que precisam dar mas ainda não deram. A consciência que já têm do problema.]
|
||||
|
||||
#### 15. Resistência à Mudança
|
||||
[De que maneira resistem à mudança? Que desculpas usam para adiar? Como os podemos ajudar a ultrapassar essa resistência? Que argumentos reduzem o atrito?]
|
||||
|
||||
#### 16. Objecções Típicas
|
||||
[As objecções mais frequentes às ofertas comerciais desta categoria. Como as podemos antecipar e superar? Respostas específicas a cada objecção.]
|
||||
|
||||
| Objecção | Como ultrapassar |
|
||||
|----------|----------------|
|
||||
| — | — |
|
||||
| — | — |
|
||||
| — | — |
|
||||
|
||||
#### 17. Forma de Gerar Emoção
|
||||
[Que tipo de conteúdo, história ou mensagem os move emocionalmente? O que os faz parar no scroll? O que os faz partilhar? Qual o gatilho emocional mais poderoso para este segmento?]
|
||||
|
||||
#### 18. Argumentos
|
||||
[A que argumentos são mais sensíveis? Como os podemos persuadir a agir? Que tipo de prova precisam: dados, testemunhos, demonstrações, garantias? Qual a sequência de persuasão ideal?]
|
||||
|
||||
#### 19. Concorrentes
|
||||
[Que outras entidades lhes oferecem o mesmo tipo de serviço ou solução alternativa? Como se comparam a nós em percepção de valor?]
|
||||
|
||||
#### 20. Propostas Recusadas
|
||||
[Que propostas é que este segmento tem recusado e porquê? O que dizem explicitamente e o que dizem implicitamente? O que não querem mais ouvir?]
|
||||
|
||||
---
|
||||
|
||||
## 6. Pitch Canvas
|
||||
|
||||
### 6.1 O que é o Pitch Canvas?
|
||||
O Pitch Canvas é uma ferramenta de comunicação estratégica que resume, numa única estrutura visual, o essencial da proposta de valor da empresa. É útil porque:
|
||||
- Força clareza e síntese (não há espaço para vagueza)
|
||||
- Alinha toda a equipa na mesma mensagem
|
||||
- Serve de base para qualquer peça de comunicação
|
||||
- Torna a proposta de valor testável e iterável
|
||||
|
||||
### 6.2 Utilidade específica para [Nome da Marca]
|
||||
[Como o Pitch Canvas pode ajudar esta marca concretamente — que clareza traz, que conversas simplifica, onde pode ser usado]
|
||||
|
||||
### 6.3 Os 5 elementos do Pitch Canvas
|
||||
|
||||
**Para quem:**
|
||||
> [Segmento principal — quem são e qual o problema específico]
|
||||
|
||||
**O problema:**
|
||||
> [Dor principal, urgente e real — formulada na linguagem do cliente]
|
||||
|
||||
**A solução:**
|
||||
> [O que oferecemos — mecanismo único de resolução]
|
||||
|
||||
**O resultado:**
|
||||
> [Transformação concreta — antes vs depois, com métrica se possível]
|
||||
|
||||
**Por que nós:**
|
||||
> [Razão para acreditar — o que nos torna credíveis e únicos]
|
||||
|
||||
### 6.4 Declaração de mudança no mundo
|
||||
> **"[Nome da Marca] está a mudar [o quê] para [quem], através de [como], tornando possível [impacto maior]."**
|
||||
|
||||
---
|
||||
|
||||
## 7. Copywriting Estratégico
|
||||
|
||||
### 7.1 Questionamento estratégico
|
||||
|
||||
**Qual é o objectivo da comunicação?**
|
||||
[Definir claramente o que queremos que o público faça, sinta ou pense após cada comunicação. Sem objectivo claro não há comunicação eficaz.]
|
||||
|
||||
**Que transformação prometemos?**
|
||||
[A transformação específica que a marca entrega — não o produto, mas a mudança de estado do cliente]
|
||||
|
||||
### 7.2 Pain + Gain (Problema e Resultado)
|
||||
|
||||
> **Pain:** [O problema central na perspectiva do cliente — formulado com a dor, não com o produto]
|
||||
> **Gain:** [O resultado desejado — formulado com o benefício, não com a funcionalidade]
|
||||
|
||||
*Revisão com questões específicas do sector:*
|
||||
> **Pain refinado:** [Após aprofundar com o briefing — mais específico, com linguagem do cliente]
|
||||
> **Gain refinado:** [Com métricas ou resultados concretos já entregues a outros clientes]
|
||||
|
||||
### 7.3 Narrativa por segmento
|
||||
|
||||
*Fórmula: Problema (dor do público) → Solução (serviços da empresa) → Resultado (benefícios concretos)*
|
||||
|
||||
**[Segmento A]:**
|
||||
> **Problema:** [Dor específica e urgente deste segmento, na sua linguagem]
|
||||
> **Solução:** [Como a marca resolve de forma única — mecanismo específico]
|
||||
> **Resultado:** [Benefício tangível e mensurável + prova social ou garantia]
|
||||
|
||||
**[Segmento B]:**
|
||||
> **Problema:** [...]
|
||||
> **Solução:** [...]
|
||||
> **Resultado:** [...]
|
||||
|
||||
*(Repetir para cada segmento)*
|
||||
|
||||
### 7.4 Mensagem central da marca
|
||||
> **"[A frase que todos os colaboradores sabem de cor — resumo da proposta de valor em 10 palavras]"**
|
||||
|
||||
### 7.5 Headlines por segmento
|
||||
|
||||
| Segmento | Headline principal | Headline secundária |
|
||||
|----------|------------------|-------------------|
|
||||
| [Seg. A] | — | — |
|
||||
| [Seg. B] | — | — |
|
||||
|
||||
---
|
||||
|
||||
## 8. Demonstração dos Serviços
|
||||
|
||||
### 8.1 Como demonstrar [serviço/produto principal]
|
||||
|
||||
**Preparação personalizada:**
|
||||
[O que preparar antes da demonstração para cada segmento]
|
||||
|
||||
**Introdução interactiva:**
|
||||
[Como começar — conectar com a dor antes de mostrar a solução]
|
||||
|
||||
**Demonstração ao vivo:**
|
||||
[O que mostrar, em que ordem, com que foco]
|
||||
|
||||
**Casos de uso:**
|
||||
[Exemplos reais de clientes similares — antes/depois]
|
||||
|
||||
**Q&A:**
|
||||
[Perguntas frequentes na demonstração e respostas modelo]
|
||||
|
||||
**Follow-up:**
|
||||
[Próximo passo após a demonstração — o que enviar, quando contactar]
|
||||
|
||||
---
|
||||
|
||||
## 9. Investimentos Prioritários
|
||||
|
||||
### 9.1 Prioridades imediatas (impacto/esforço)
|
||||
|
||||
| Prioridade | Investimento | Impacto esperado | Prazo | Custo estimado |
|
||||
|-----------|-------------|-----------------|-------|---------------|
|
||||
| 1 | [Ex: Website + SEO] | — | 30-60d | — |
|
||||
| 2 | [Ex: Google Ads] | — | 30d | — |
|
||||
| 3 | [Ex: Email marketing] | — | 60d | — |
|
||||
|
||||
### 9.2 Estratégia de canais
|
||||
|
||||
| Canal | Objectivo | Frequência | KPI | Budget mensal |
|
||||
|-------|-----------|-----------|-----|--------------|
|
||||
| Website | — | — | — | — |
|
||||
| Google Ads | — | — | — | — |
|
||||
| Meta Ads | — | — | — | — |
|
||||
| LinkedIn | — | — | — | — |
|
||||
| Email | — | — | — | — |
|
||||
| WhatsApp | — | — | — | — |
|
||||
|
||||
### 9.3 Pilares de conteúdo
|
||||
1. [Pilar 1 — tema + tipos de conteúdo + frequência]
|
||||
2. [Pilar 2]
|
||||
3. [Pilar 3]
|
||||
|
||||
---
|
||||
|
||||
## 10. Monitorização e KPIs
|
||||
|
||||
### 10.1 Dashboard de métricas
|
||||
|
||||
| Área | KPI | Baseline | Meta 3m | Meta 6m | Meta 12m |
|
||||
|------|-----|---------|---------|---------|----------|
|
||||
| Brand | Notoriedade espontânea | — | — | — | — |
|
||||
| Tráfego | Visitas/mês | — | — | — | — |
|
||||
| Leads | Leads qualificados/mês | — | — | — | — |
|
||||
| Conversão | Taxa de fecho | — | — | — | — |
|
||||
| Retenção | NPS | — | — | — | — |
|
||||
|
||||
### 10.2 Ciclo de optimização
|
||||
- **Revisão mensal:** métricas de canal, ajuste de conteúdo
|
||||
- **Revisão trimestral:** avaliação de ROI, ajuste de orçamento
|
||||
- **Revisão anual:** actualização estratégica completa
|
||||
|
||||
---
|
||||
|
||||
## 11. Inventário de Activos de Marketing
|
||||
|
||||
| Activo | Localização | Estado actual | Prioridade |
|
||||
|--------|------------|--------------|-----------|
|
||||
| Website | [URL] | — | — |
|
||||
| Blog/Artigos | — | — | — |
|
||||
| Redes sociais | — | — | — |
|
||||
| Base de emails | — | — | — |
|
||||
| Testemunhos/Cases | — | — | — |
|
||||
| Materiais impressos | — | — | — |
|
||||
| Apresentações | — | — | — |
|
||||
| Fotos/Vídeos profissionais | — | — | — |
|
||||
|
||||
---
|
||||
|
||||
## Notas de implementação
|
||||
|
||||
1. **Sessão de alinhamento:** Apresentar o documento à equipa antes de implementar
|
||||
2. **Validação:** Partilhar narrativas com 2-3 clientes actuais antes de publicar
|
||||
3. **Implementação faseada:** Começar pelos canais de maior impacto e menor esforço
|
||||
4. **Suporte:** WhatsApp durante 1 mês para dúvidas de implementação (EST-MRK-010)
|
||||
|
||||
---
|
||||
|
||||
*Elaborado por Descomplicar® — Agência de Aceleração Digital*
|
||||
*emanuel@descomplicar.pt | descomplicar.pt*
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: expense
|
||||
description: Gestao de despesas Desk CRM com PDF obrigatorio. Registar, categorizar e analisar despesas com verificacao de duplicados, upload SFTP e arquivo mensal automatico.
|
||||
description: Gestao de despesas Desk CRM com PDF obrigatorio. Registar, categorizar e analisar despesas com verificacao de duplicados por reference_no, upload SFTP e arquivo mensal automatico.
|
||||
---
|
||||
|
||||
# /expense - Gestao de Despesas
|
||||
@@ -55,18 +55,27 @@ Para mapeamento completo de fornecedores, emails e padroes PDF para categorias:
|
||||
- Bypass valido apenas para: AT, Salarios, transferencias bancarias
|
||||
2. LER O PDF: Extrair dados reais do documento
|
||||
- NUNCA copiar valor de um PDF para outro
|
||||
- EXTRAIR reference_no (numero factura) — OBRIGATORIO para dedup
|
||||
3. OBRIGATORIO: get_expense_categories(with_stats=true)
|
||||
4. Identificar categoria correcta na lista
|
||||
5. VERIFICAR DUPLICADOS:
|
||||
5. VERIFICAR DUPLICADOS (3 camadas — OBRIGATORIO):
|
||||
Camada 0 — Referencia de factura (PRIMARIA):
|
||||
- get_expenses(search: "<reference_no>")
|
||||
- Se alguma despesa tem reference_no IGUAL → DUPLICADO → PARAR
|
||||
Camada 1 — Fornecedor + Valor + Data:
|
||||
- get_expenses(search: "<fornecedor>")
|
||||
- Mesmo fornecedor + valor + data = duplicado
|
||||
- Mesmo numero factura = duplicado
|
||||
- Mesmo fornecedor + valor (±0.05) + data (±3 dias) = duplicado
|
||||
Camada 2 — Expense name:
|
||||
- get_expenses(search: "<fornecedor> - <reference_no>")
|
||||
- Se match exacto → duplicado
|
||||
Se QUALQUER camada detecta duplicado → NAO criar, informar utilizador
|
||||
6. Recolher dados:
|
||||
- category_id, amount, currency (EUR=3, USD=2), date (YYYY-MM-DD)
|
||||
- reference_no (numero factura — OBRIGATORIO)
|
||||
- note (incluir numero factura), send_invoice_to_customer = 0
|
||||
- Opcionais: client_id, project_id, billable, tax
|
||||
7. CONFIRMAR com utilizador (mostrar resumo)
|
||||
8. create_expense
|
||||
8. create_expense (INCLUIR reference_no no payload)
|
||||
9. UPLOAD PDF ao Desk via SFTP:
|
||||
a. mkdir -p no servidor: /home/ealmeida/desk.descomplicar.pt/uploads/expenses/<id>
|
||||
b. mcp__ssh-unified__sftp_upload(server:"desk", local_path, remote_path)
|
||||
@@ -104,7 +113,7 @@ Para mapeamento completo de fornecedores, emails e padroes PDF para categorias:
|
||||
|
||||
Para protocolo completo de processamento de tickets de contabilidade: ver `references/ticket-processing.md`
|
||||
|
||||
**Resumo:** Obter ticket -> verificar anexos -> verificar duplicados -> extrair dados -> confirmar -> criar despesa -> upload PDF -> arquivo mensal.
|
||||
**Resumo:** Obter ticket -> verificar anexos -> verificar duplicados (3 camadas) -> extrair dados -> confirmar -> criar despesa -> upload PDF -> arquivo mensal.
|
||||
|
||||
---
|
||||
|
||||
@@ -136,15 +145,16 @@ Para protocolo completo de processamento de tickets de contabilidade: ver `refer
|
||||
**Despesas:**
|
||||
4. Criar despesa sem category_id
|
||||
5. Nao validar data (formato YYYY-MM-DD)
|
||||
6. Criar despesa sem verificar duplicados primeiro
|
||||
6. Criar despesa sem verificar duplicados primeiro (3 camadas obrigatorias)
|
||||
7. Criar despesa sem reference_no (chave primaria de dedup)
|
||||
|
||||
**Valores de PDFs:**
|
||||
7. Assumir que ficheiros com nomes semelhantes tem o mesmo valor
|
||||
8. SEMPRE ler CADA PDF individualmente para extrair o valor real
|
||||
8. Assumir que ficheiros com nomes semelhantes tem o mesmo valor
|
||||
9. SEMPRE ler CADA PDF individualmente para extrair o valor real
|
||||
|
||||
**Tickets:**
|
||||
9. Processar ticket sem verificar anexos PDF
|
||||
10. Assumir que ticket com recibo = despesa nao lancada
|
||||
10. Processar ticket sem verificar anexos PDF
|
||||
11. Assumir que ticket com recibo = despesa nao lancada
|
||||
|
||||
---
|
||||
|
||||
@@ -152,8 +162,11 @@ Para protocolo completo de processamento de tickets de contabilidade: ver `refer
|
||||
|
||||
- [ ] Listar categorias existentes
|
||||
- [ ] Validar categoria correcta
|
||||
- [ ] Extrair reference_no do PDF/factura
|
||||
- [ ] Verificar duplicados (3 camadas)
|
||||
- [ ] Confirmar dados com utilizador
|
||||
- [ ] Usar formato data YYYY-MM-DD
|
||||
- [ ] Incluir reference_no no create_expense
|
||||
- [ ] Incluir nota descritiva
|
||||
|
||||
---
|
||||
@@ -164,6 +177,24 @@ Para protocolo completo de processamento de tickets de contabilidade: ver `refer
|
||||
- `references/ticket-processing.md` - Protocolo completo de processamento de tickets
|
||||
- `references/changelog.md` - Historico de alteracoes
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
**Criado:** 2026-02-05 | **Actualizado:** 2026-02-12
|
||||
## Self-Healing
|
||||
|
||||
Antes de executar, ler `~/.claude-work/healing/expense.jsonl` (se existir). Cada linha é um padrão de erro conhecido:
|
||||
|
||||
```json
|
||||
{"date":"YYYY-MM-DD","issue":"descrição do problema","fix":"como evitar","source":"user|auto"}
|
||||
```
|
||||
|
||||
Se encontrares um padrão relevante ao contexto actual, aplica o fix preventivamente. Após cada erro ou correcção do utilizador nesta skill, **adicionar nova linha** ao healing log com o padrão aprendido.
|
||||
|
||||
---
|
||||
|
||||
**Criado:** 2026-02-05 | **Actualizado:** 2026-03-30 | Fix: dedup 3 camadas com reference_no (DES-137)
|
||||
|
||||
|
||||
## Healing Log
|
||||
<!-- Registo automático de erros e correcções nesta skill -->
|
||||
|
||||
@@ -253,3 +253,15 @@ Acções:
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 2026-02-05 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
---
|
||||
name: orcamento
|
||||
description: Criação de orçamentos Descomplicar baseados nos itens oficiais do Desk CRM. Versão light para heartbeats.
|
||||
disable-model-invocation: true
|
||||
---
|
||||
|
||||
# Orçamento — Referência Rápida
|
||||
|
||||
## Fonte de verdade: Desk CRM (`tblitems` + `tblitems_groups`)
|
||||
|
||||
651 itens em 14 grupos. Consultar SEMPRE o CRM para preços actualizados.
|
||||
|
||||
## Sintaxe
|
||||
|
||||
```
|
||||
/orcamento [cliente] [tipo] [-MEN|-TRI]
|
||||
```
|
||||
|
||||
| Código | Tipo | Grupo CRM |
|
||||
|--------|------|-----------|
|
||||
| `starter` | StarterWP | Websites |
|
||||
| `corporate` | CorporateWP | Websites |
|
||||
| `care` | CareWP | Websites |
|
||||
| `ecom` | eCommerceWP | Websites |
|
||||
| `mkt` | Marketing 360 | Marketing |
|
||||
| `man` | Manutenção | Suporte |
|
||||
| `deskcrm` | DeskCRM | DeskCRM |
|
||||
| `chatbot` | Chatbot | Chatbots |
|
||||
| `acceleratorx` | AcceleratorX | Tecnologia |
|
||||
|
||||
## Variantes de facturação
|
||||
|
||||
| Flag | Unit | Pesquisa CRM |
|
||||
|------|------|-------------|
|
||||
| (nenhum) | ano | Item base |
|
||||
| `-MEN` | mensalidade | `WHERE description LIKE 'Mensalidade%...'` |
|
||||
| `-TRI` | trimestral | `WHERE description LIKE 'Trimestral%...'` |
|
||||
|
||||
Preços das variantes são definidos no CRM (podem incluir markup). Nunca calcular por divisão simples.
|
||||
|
||||
## Protocolo
|
||||
|
||||
### 1. Identificar cliente
|
||||
|
||||
```
|
||||
mcp__desk-crm-v3__search_customers query="[nome]" fields="company,vat"
|
||||
```
|
||||
|
||||
### 2. Consultar preços
|
||||
|
||||
```bash
|
||||
# Itens base (setup/pontuais)
|
||||
mysql -u root ealmeida_desk24 -e "
|
||||
SELECT description, rate, unit FROM tblitems
|
||||
WHERE group_id = [GROUP_ID]
|
||||
AND description LIKE '%[PACOTE]%'
|
||||
AND unit NOT IN ('mensalidade','trimestral','anuidade')
|
||||
ORDER BY description;"
|
||||
|
||||
# Itens recorrentes (com variante)
|
||||
mysql -u root ealmeida_desk24 -e "
|
||||
SELECT description, rate, unit FROM tblitems
|
||||
WHERE group_id = [GROUP_ID]
|
||||
AND description LIKE '[Mensalidade|Trimestral]%[PACOTE]%'
|
||||
ORDER BY description;"
|
||||
```
|
||||
|
||||
Ou via MCP:
|
||||
```
|
||||
mcp__desk-crm-v3__price_management action="get_pricing_insights" params={"group": "[GRUPO]"}
|
||||
```
|
||||
|
||||
### 3. Criar estimate
|
||||
|
||||
```
|
||||
mcp__desk-crm-v3__create_estimate
|
||||
client_id=[id]
|
||||
date=[hoje]
|
||||
expiry_date=[hoje + 30 dias]
|
||||
items=[{description, qty, rate, unit}]
|
||||
terms="[termos]"
|
||||
```
|
||||
|
||||
**Formato item:** `{"description": "...", "qty": 1, "rate": 700, "unit": "un"}`
|
||||
|
||||
**Unidades:** `un` (pontual), `mensalidade` (-MEN), `trimestral` (-TRI), `anuidade` (defeito)
|
||||
|
||||
### 4. Termos por variante
|
||||
|
||||
- **Sem flag:** "50% na adjudicação + 50% na entrega"
|
||||
- **-MEN:** "Setup: 50%+50% | Recorrência: facturação mensal antecipada"
|
||||
- **-TRI:** "Setup: 50%+50% | Recorrência: facturação trimestral antecipada"
|
||||
|
||||
## Preços de referência (consultar CRM para valores reais)
|
||||
|
||||
### Websites
|
||||
|
||||
| Produto | Setup | Anuidade |
|
||||
|---------|-------|----------|
|
||||
| StarterWP | 700 | 250 |
|
||||
| CorporateWP | 900 | 299 |
|
||||
| eCommerceWP | 1100 | 349 |
|
||||
| CareWP | 1300 | 350 |
|
||||
|
||||
### DeskCRM
|
||||
|
||||
| Produto | Anuidade |
|
||||
|---------|----------|
|
||||
| Starter | 400 |
|
||||
| Profissional | 800 |
|
||||
| Avançado | 1500 |
|
||||
| Enterprise | 3000 |
|
||||
|
||||
### AcceleratorX
|
||||
|
||||
| Produto | Setup |
|
||||
|---------|-------|
|
||||
| WP ProCMS | 650 |
|
||||
| e-Commerce | 750 |
|
||||
| Care | 750 |
|
||||
| School Manager | 850 |
|
||||
|
||||
### Chatbots
|
||||
|
||||
| Produto | Setup |
|
||||
|---------|-------|
|
||||
| Básico | 350 |
|
||||
| Avançado | 850 |
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Cliente identificado/criado no CRM
|
||||
- [ ] Tipo seleccionado
|
||||
- [ ] Preços consultados no CRM
|
||||
- [ ] Valores calculados (subtotal + IVA 23%)
|
||||
- [ ] Recorrência calculada
|
||||
- [ ] Estimate criado (status: Draft)
|
||||
- [ ] Resumo apresentado
|
||||
|
||||
## MCPs
|
||||
|
||||
```
|
||||
mcp__desk-crm-v3__search_customers
|
||||
mcp__desk-crm-v3__create_customer
|
||||
mcp__desk-crm-v3__create_estimate
|
||||
mcp__desk-crm-v3__price_management
|
||||
```
|
||||
|
||||
---
|
||||
**Versão**: 4.1.0-light | **Base**: 4.1.0
|
||||
@@ -512,3 +512,15 @@ INSERT INTO tblskill_agent_metrics (
|
||||
---
|
||||
|
||||
**Versao**: 4.1.0 | **Data**: 2026-03-12 | **Fonte de Verdade**: Desk CRM (tblitems)
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -365,3 +365,15 @@ mcp__mcp-time__current_time - Data/hora actual
|
||||
---
|
||||
|
||||
**Versao**: 1.0.0 | **Data**: 2026-03-06 | **Template**: descomplicar-proposal-template.pptx
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,386 @@
|
||||
---
|
||||
name: proposta-visual
|
||||
description: Criação completa de propostas comerciais visuais — página web (propostas.descomplicar.pt) + PDF exportável + PPTX editável. Recolhe dados CRM, gera JSON, renderiza condicionalmente e faz deploy.
|
||||
---
|
||||
|
||||
# Skill /proposta-visual — Propostas Comerciais Visuais
|
||||
|
||||
Cria propostas comerciais profissionais com 3 outputs: página web interactiva, PDF exportável e PPTX editável.
|
||||
|
||||
## Triggers
|
||||
|
||||
- `/proposta-visual`
|
||||
- "proposta visual", "proposta web", "criar proposta", "nova proposta", "proposta para [cliente]"
|
||||
|
||||
## Quando usar
|
||||
|
||||
- Criar proposta comercial completa para um cliente
|
||||
- Gerar página web + PDF + PPTX de uma proposta
|
||||
- Actualizar proposta existente com novos dados
|
||||
|
||||
## Quando NÃO usar
|
||||
|
||||
- Apenas orçamento sem visual (usar `/orcamento`)
|
||||
- Apenas PPTX sem página web (usar `/proposal-deck`)
|
||||
- Análise de lead sem proposta (usar `/lead-approach`)
|
||||
|
||||
---
|
||||
|
||||
## Projecto base
|
||||
|
||||
| Campo | Valor |
|
||||
|-------|-------|
|
||||
| **Código fonte** | `/media/ealmeida/Dados/Dev/Propostas/` |
|
||||
| **Stack** | React 18 + Vite + Tailwind + @react-pdf/renderer + Recharts + Framer Motion + Lucide React |
|
||||
| **Live** | `propostas.descomplicar.pt/{slug}` |
|
||||
| **Deploy** | Docker Swarm EasyPanel, serviço `descomplicar_propostas`, ficheiros `/opt/propostas/` |
|
||||
| **DNS** | `propostas.descomplicar.pt` → 5.9.90.70 (Cloudflare proxied) |
|
||||
| **Template PPTX** | `/media/ealmeida/Dados/Hub/90-Templates/Comercial/descomplicar-proposal-template.pptx` |
|
||||
|
||||
---
|
||||
|
||||
## REGRAS CRÍTICAS (ler antes de qualquer implementação)
|
||||
|
||||
### 1. PT-PT obrigatório — acentos em TODO o texto
|
||||
|
||||
Todos os textos no JSON, componentes web e componentes PDF DEVEM ter acentos PT-PT correctos:
|
||||
- ✓ migração, tradução, integração, opções, condições, execução, acção
|
||||
- ✗ migracao, traducao, integracao, opcoes, condicoes, execucao, accao
|
||||
|
||||
**Verificar no PDF:** labels hardcoded em `PDFWorkDone.jsx` e `PDFDocument.jsx` — já corrigidos mas confirmar sempre.
|
||||
|
||||
### 2. JSON data-driven — renderização condicional obrigatória
|
||||
|
||||
O `ProposalView.jsx` e o `PDFDocument.jsx` renderizam secções **condicionalmente** com base nos dados. Se um campo é `null`, `[]` ou não existe, a secção NÃO aparece.
|
||||
|
||||
**Regra:** NUNCA assumir que todos os campos existem. Cada proposta pode ter um subconjunto diferente de secções.
|
||||
|
||||
| Campo JSON | Secção web | Secção PDF | Condição |
|
||||
|-----------|-----------|-----------|----------|
|
||||
| `context.brandStrategy` | BrandStrategy | PageBrandStrategy | `!= null` |
|
||||
| `salesData` | SalesChart | PageSales | `.length > 0` |
|
||||
| `context.diagnosis` | Context | — | `.length > 0` |
|
||||
| `context.scores` | ScoreGrid | PDFScores | `.length > 0` |
|
||||
| `service360` | Service360 | PageService360 | `!= null` |
|
||||
| `plans` | PricingCards | PDFPricing | `.length > 0` |
|
||||
| `licenses` | LicensePack | PageLicenses | `!= null` |
|
||||
| `workDone` | WorkDone | PDFWorkDone | `.length > 0` |
|
||||
| `roadmap` | Roadmap | PDFWorkDone | `.length > 0` |
|
||||
| `conditions` | Conditions | PDFWorkDone (pág. separada) | `.length > 0` |
|
||||
|
||||
### 3. Título dinâmico — campo `title` no JSON
|
||||
|
||||
O título da proposta (Hero web + capa PDF) vem do campo `title` no JSON:
|
||||
- Proposta 360°: `"title": "Descomplicar 360°"`
|
||||
- Migração técnica: `"title": "Migração Bookeo"`
|
||||
- Website: `"title": "Website Profissional"`
|
||||
- Fallback: `"Proposta Comercial"`
|
||||
|
||||
**NUNCA** hardcodar "Descomplicar 360°" — usar `data.title`.
|
||||
|
||||
### 4. Preços flexíveis — não assumir mensalidades
|
||||
|
||||
Os planos suportam dois formatos de preço:
|
||||
|
||||
**Mensalidade (avença):**
|
||||
```json
|
||||
{
|
||||
"monthly": 459,
|
||||
"hours": 8,
|
||||
"originalPrice": 540,
|
||||
"discount": 15
|
||||
}
|
||||
```
|
||||
Mostra: "459 €/mês" + "8h/mês incluídas · contrato anual"
|
||||
|
||||
**Preço único (investimento):**
|
||||
```json
|
||||
{
|
||||
"price": 750,
|
||||
"priceLabel": "EUR + IVA",
|
||||
"priceSubtitle": "Investimento único · prazo 1-2 semanas",
|
||||
"monthly": null,
|
||||
"hours": null
|
||||
}
|
||||
```
|
||||
Mostra: "750 EUR + IVA" + "Investimento único · prazo 1-2 semanas"
|
||||
|
||||
**Campos usados:** `plan.price ?? plan.monthly` para o valor, `plan.priceLabel ?? "€/mês"` para a unidade, `plan.priceSubtitle` para a descrição abaixo.
|
||||
|
||||
### 5. react-pdf — bugs conhecidos e PROIBIÇÕES
|
||||
|
||||
| Proibição | Porquê | Alternativa |
|
||||
|-----------|--------|-------------|
|
||||
| `gap` + `flexWrap` juntos | Crasha silenciosamente | `marginRight` + `marginBottom` nos items |
|
||||
| `borderColor` com `rgba()` | Renderiza verde | Cor sólida (ex: `#D4A020`, `#E8E8E8`) |
|
||||
| Import de componentes SVG (`<Svg>`, `<Circle>`) | Crasha web worker do PDFDownloadLink | Implementar gráficos inline com `<View>` |
|
||||
| `Font.register` com fontes locais/CDN em multi-página | Falha silenciosa | Usar Helvetica/Helvetica-Bold (built-in) |
|
||||
| `href` vazio no PDFDownloadLink | PDF não gerou — verificar consola | Cache do browser — Ctrl+Shift+R |
|
||||
|
||||
### 6. Página 360° (service360) — contextualizar
|
||||
|
||||
A secção service360 no PDF usa o label "O QUE PROPOMOS" (genérico) e o título "As nossas soluções para o seu negócio". Os dados vêm do JSON `service360.areas[]`.
|
||||
|
||||
Para propostas que NÃO são 360°, adaptar os `areas` ao contexto:
|
||||
- Migração técnica: features da migração
|
||||
- Website: áreas do serviço web
|
||||
- SEO: pilares do trabalho SEO
|
||||
|
||||
Se `service360` for `null`, a secção não aparece.
|
||||
|
||||
### 7. Condições comerciais — página separada no PDF
|
||||
|
||||
As condições estão numa página PDF separada (não na mesma que o roadmap) para evitar corte entre páginas. O componente `PDFWorkDone` retorna um Fragment com 2 Pages.
|
||||
|
||||
---
|
||||
|
||||
## Protocolo
|
||||
|
||||
### Sintaxe
|
||||
|
||||
```
|
||||
/proposta-visual [cliente] [tipo-serviço]
|
||||
```
|
||||
|
||||
### Fase 1: Análise do contexto
|
||||
|
||||
**ANTES de criar o JSON, responder a estas perguntas:**
|
||||
|
||||
1. **Que tipo de proposta é?** (360°, website, migração técnica, SEO, eCommerce, outro)
|
||||
2. **O preço é mensal ou único?** → define `monthly` vs `price`/`priceLabel`/`priceSubtitle`
|
||||
3. **Que secções se aplicam?** → define que campos preencher no JSON
|
||||
4. **Há dados quantitativos?** (vendas, scores SEO, KPIs) → define `salesData`, `context.scores`
|
||||
5. **Há trabalho já realizado?** → define `workDone`
|
||||
6. **Quantas opções de preço?** → define `plans[]`
|
||||
|
||||
**Mapa de secções por tipo de proposta:**
|
||||
|
||||
| Secção | 360° | Website | Migração | SEO | eCommerce |
|
||||
|--------|:----:|:-------:|:--------:|:---:|:---------:|
|
||||
| `title` | Descomplicar 360° | Website Profissional | [contexto] | Optimização SEO | Loja Online |
|
||||
| `brandStrategy` | ✓ | Opcional | — | — | Opcional |
|
||||
| `salesData` | Se existir | — | — | — | Se existir |
|
||||
| `scores` | ✓ (audit) | Opcional | — | ✓ (audit) | Opcional |
|
||||
| `service360` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| `plans` | ✓ (3 opções) | ✓ | ✓ | ✓ | ✓ |
|
||||
| `licenses` | Se aplicável | — | — | — | Se aplicável |
|
||||
| `workDone` | Se existir | Se existir | ✓ | Se existir | Se existir |
|
||||
| `roadmap` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| `conditions` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
|
||||
### Fase 2: Recolha de dados do CRM
|
||||
|
||||
```
|
||||
mcp__desk-crm-v3__search_customers query="[nome]"
|
||||
mcp__desk-crm-v3__get_customer customer_id=[id]
|
||||
mcp__desk-crm-v3__get_estimates client_id=[id]
|
||||
```
|
||||
|
||||
### Fase 3: Criar ficheiro JSON
|
||||
|
||||
**Localização:** `src/data/[slug].json`
|
||||
|
||||
**Gerar slug:** iniciais do cliente + tipo + hash curto. Ex: `ccv-bookeo-a3f7c1d2`
|
||||
|
||||
**Schema mínimo obrigatório:**
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "Título da Proposta",
|
||||
"client": {
|
||||
"name": "Nome Legal Lda.",
|
||||
"brand": "Nome Comercial",
|
||||
"website": "exemplo.pt",
|
||||
"contact": "Nome Contacto",
|
||||
"email": "email@exemplo.pt",
|
||||
"phone": "+351 900 000 000"
|
||||
},
|
||||
"company": {
|
||||
"name": "Descomplicar, Lda.",
|
||||
"brand": "Descomplicar",
|
||||
"nif": "514 785 691",
|
||||
"email": "info@descomplicar.pt",
|
||||
"phone": "911 510 005",
|
||||
"website": "descomplicar.pt"
|
||||
},
|
||||
"date": "2026-03-23",
|
||||
"validDays": 30,
|
||||
"context": {
|
||||
"description": "Descrição da situação...",
|
||||
"diagnosis": [],
|
||||
"scores": [],
|
||||
"brandStrategy": null
|
||||
},
|
||||
"service360": null,
|
||||
"plans": [],
|
||||
"licenses": null,
|
||||
"workDone": [],
|
||||
"roadmap": [],
|
||||
"conditions": [],
|
||||
"salesData": [],
|
||||
"salesProjection": []
|
||||
}
|
||||
```
|
||||
|
||||
**Campos opcionais para planos com preço único:**
|
||||
```json
|
||||
{
|
||||
"price": 750,
|
||||
"priceLabel": "EUR + IVA",
|
||||
"priceSubtitle": "Investimento único · prazo 1-2 semanas",
|
||||
"monthly": null,
|
||||
"hours": null
|
||||
}
|
||||
```
|
||||
|
||||
**Checklist PT-PT antes de guardar o JSON:**
|
||||
- [ ] Todos os textos têm acentos correctos (ã, ç, ã, é, ê, í, ó, õ, ú)
|
||||
- [ ] Zero brasileirismos
|
||||
- [ ] Caractere → (seta) em vez de -> nos textos visíveis
|
||||
- [ ] Monetário: "EUR" ou "€" (não "R$" nem "$")
|
||||
|
||||
### Fase 4: Registar no App.jsx
|
||||
|
||||
```jsx
|
||||
import novaData from "./data/[slug].json"
|
||||
|
||||
const proposals = {
|
||||
// existentes...
|
||||
"[novo-slug]": novaData,
|
||||
}
|
||||
```
|
||||
|
||||
### Fase 5: Verificar antes do build
|
||||
|
||||
**Checklist pré-build:**
|
||||
- [ ] JSON válido (sem trailing commas, sem campos undefined)
|
||||
- [ ] Campos null/[] para secções que não se aplicam (NÃO omitir)
|
||||
- [ ] `title` definido (não depender do fallback)
|
||||
- [ ] `plans[].price` OU `plans[].monthly` definido (não ambos null)
|
||||
- [ ] `plans[].priceLabel` definido se preço único
|
||||
- [ ] Slug registado em App.jsx
|
||||
- [ ] Nenhum `flexWrap` + `gap` nos componentes PDF
|
||||
- [ ] Nenhum `borderColor` com `rgba()` nos componentes PDF
|
||||
|
||||
### Fase 6: Build e deploy
|
||||
|
||||
```bash
|
||||
cd /media/ealmeida/Dados/Dev/Propostas
|
||||
npm run build
|
||||
|
||||
# Limpar dist
|
||||
cd dist
|
||||
rm -rf assets/template-media assets/template-referencia.pptx assets/slide-referencia.svg
|
||||
cd assets/brochura && ls *.{jpg,png} 2>/dev/null | grep -v image8.jpg | xargs rm -f 2>/dev/null
|
||||
|
||||
# Empacotar
|
||||
cd /media/ealmeida/Dados/Dev/Propostas/dist
|
||||
tar czf /tmp/propostas-dist.tar.gz .
|
||||
|
||||
# Upload + deploy
|
||||
mcp__ssh-unified__sftp_upload server=easy localPath=/tmp/propostas-dist.tar.gz remotePath=/tmp/propostas-dist.tar.gz overwrite=true
|
||||
mcp__ssh-unified__ssh_execute server=easy command="cd /opt/propostas && rm -rf assets/* index.html; tar xzf /tmp/propostas-dist.tar.gz && docker service update --force descomplicar_propostas && rm -f /tmp/propostas-dist.tar.gz"
|
||||
|
||||
# Verificar
|
||||
curl -sI https://propostas.descomplicar.pt/[slug] | head -3
|
||||
# Deve retornar HTTP/2 200
|
||||
|
||||
# Limpar
|
||||
rm -f /tmp/propostas-dist.tar.gz
|
||||
```
|
||||
|
||||
### Fase 7: Testar PDF
|
||||
|
||||
**OBRIGATÓRIO antes de entregar:**
|
||||
1. Abrir `https://propostas.descomplicar.pt/[slug]` com Ctrl+Shift+R
|
||||
2. Clicar "Exportar PDF"
|
||||
3. Verificar que `href` do link não está vazio (PDF gerou)
|
||||
4. Abrir PDF e verificar:
|
||||
- [ ] Título correcto (não "Descomplicar 360°" hardcoded)
|
||||
- [ ] Preços correctos (não "€/mês" se é preço único)
|
||||
- [ ] Sem borders verdes (rgba renderiza verde no react-pdf)
|
||||
- [ ] Sem secções que não se aplicam (360°, vendas, licenças, scores)
|
||||
- [ ] Acentos PT-PT em todo o texto
|
||||
- [ ] Condições comerciais numa página inteira (sem corte)
|
||||
- [ ] Todas as 3 opções de preço com layout uniforme
|
||||
|
||||
**Se o PDF não gera (href vazio):**
|
||||
1. Verificar consola do browser (F12)
|
||||
2. Causa mais provável: import de componente SVG dos infographics
|
||||
3. Verificar que PDFDocument não importa de `./infographics/`
|
||||
4. Verificar que não há `gap` + `flexWrap` no PDF
|
||||
5. Ctrl+Shift+R e tentar novamente (cache)
|
||||
|
||||
### Fase 8: Entrega e registo
|
||||
|
||||
1. Guardar em `Hub/03-Propostas/[Cliente]/`
|
||||
2. Registar estimate no CRM (se não existe)
|
||||
3. Comunicar URL ao utilizador
|
||||
4. Comentar tarefa CRM
|
||||
|
||||
---
|
||||
|
||||
## Design system ACIDA 2.0
|
||||
|
||||
| Token | Valor |
|
||||
|-------|-------|
|
||||
| Dourado | #C88900 |
|
||||
| Dourado claro | #EED59F |
|
||||
| Dourado border PDF | #D4A020 (usar em vez de rgba no PDF) |
|
||||
| Dark | #262626 |
|
||||
| Background | #F8F8F8 |
|
||||
| Fonte web | Inter (Google Fonts) |
|
||||
| Fonte PDF | Helvetica / Helvetica-Bold |
|
||||
| Logo escuro | `/assets/logo-descomplicar.png` |
|
||||
| Logo claro | `/assets/logo-descomplicar-white.png` |
|
||||
|
||||
---
|
||||
|
||||
## Propostas existentes
|
||||
|
||||
| Slug | Cliente | Tipo | Data |
|
||||
|------|---------|------|------|
|
||||
| `ljm-360-61a8aecc` | A Loja da Maria | 360° (mensal) | 2026-03-20 |
|
||||
| `ccv-bookeo-a3f7c1d2` | Carvoeiro Caves | Migração técnica (único) | 2026-03-23 |
|
||||
|
||||
---
|
||||
|
||||
## Skills relacionadas
|
||||
|
||||
- `/proposal-deck` — PPTX standalone (16 layouts, XML editing)
|
||||
- `/orcamento` — Estimate no CRM (sem visual)
|
||||
- `/lead-approach` — Estratégia de abordagem de lead
|
||||
- `/crm` — Operações CRM genéricas
|
||||
|
||||
---
|
||||
|
||||
## Changelog
|
||||
|
||||
### v2.0.0 (2026-03-23)
|
||||
- Regras críticas documentadas (7 regras)
|
||||
- Renderização condicional obrigatória (ProposalView + PDFDocument)
|
||||
- Título dinâmico via campo `title` no JSON
|
||||
- Preços flexíveis (mensal vs único) com `price`/`priceLabel`/`priceSubtitle`
|
||||
- Bugs react-pdf documentados com proibições explícitas
|
||||
- Mapa de secções por tipo de proposta
|
||||
- Checklist pré-build e teste PDF obrigatório
|
||||
- Condições comerciais em página PDF separada
|
||||
|
||||
### v1.0.0 (2026-03-23)
|
||||
- Versão inicial
|
||||
|
||||
---
|
||||
|
||||
**Versão:** 2.0.0 | **Data:** 2026-03-23
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
@@ -169,3 +169,15 @@ Subject contem:
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -284,3 +284,15 @@ No checkup diário, mostrar tickets:
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 2026-02-05 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -316,3 +316,15 @@ Hashtags/links: #2b6cb0
|
||||
|
||||
**Versao**: 1.0.0 | **Data**: 2026-03-10 | **Autor**: Descomplicar®
|
||||
*Paletas detalhadas por contexto: `references/color-palettes.md`*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
---
|
||||
name: cinematic-site
|
||||
category: design-media
|
||||
description: "Constroi websites cinematograficos a partir de um site existente. Pipeline 4 passos: brand analysis, scene generation, build HTML/CSS, preview. Usar quando 'cinematic', 'website premium', 'site cinematografico', 'redesign site', 'nanobanana'."
|
||||
version: "1.0.0"
|
||||
created: 2026-04-07
|
||||
tools: [Bash, Read, Write, mcp__claude-in-chrome__read_page, mcp__claude-in-chrome__tabs_create_mcp, mcp__chrome-devtools__take_screenshot]
|
||||
---
|
||||
|
||||
# Skill: /cinematic-site
|
||||
|
||||
Constroi websites cinematograficos responsivos a partir de um site existente. Inspirado no Nanobanana 2 (#366 Jay E / RoboNuggets).
|
||||
|
||||
---
|
||||
|
||||
## Pipeline de 4 passos
|
||||
|
||||
### Passo 1 — Brand Analysis
|
||||
|
||||
Receber URL do site existente do utilizador.
|
||||
|
||||
1. Abrir URL via `mcp__claude-in-chrome__tabs_create_mcp` + `mcp__claude-in-chrome__read_page`
|
||||
2. Extrair:
|
||||
- Paleta de cores (hex codes das cores dominantes)
|
||||
- Logo (URL ou descricao)
|
||||
- Fontes usadas (font-family do CSS)
|
||||
- Tom de voz (formal, casual, tecnico)
|
||||
- Tipo de negocio e sector
|
||||
- Conteudo principal (hero text, servicos, about)
|
||||
3. Guardar analise em `/tmp/cinematic-site/brand-analysis.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"url": "https://...",
|
||||
"business": "restaurante italiano",
|
||||
"colors": {"primary": "#2C3E50", "secondary": "#E74C3C", "accent": "#F39C12"},
|
||||
"fonts": {"heading": "Playfair Display", "body": "Inter"},
|
||||
"tone": "acolhedor e premium",
|
||||
"logo_description": "...",
|
||||
"hero_text": "...",
|
||||
"sections": ["sobre", "menu", "reservas", "contacto"]
|
||||
}
|
||||
```
|
||||
|
||||
### Passo 2 — Scene Generation
|
||||
|
||||
Com base na analise, definir o design cinematografico:
|
||||
|
||||
1. **Hero section:** escolher tipo de animacao:
|
||||
- Parallax com imagem de fundo
|
||||
- Scroll-reveal progressivo
|
||||
- Video background concept (descricao, nao video real)
|
||||
- Cursor-follow effect
|
||||
2. **3-5 seccoes adicionais** com animacoes scroll-based:
|
||||
- Referenciar `Hub/04-Stack/02.03-IA/biblioteca-animacoes-scroll.md` para patterns disponiveis
|
||||
3. **Responsive breakpoints:** mobile-first, 3 breakpoints (mobile, tablet, desktop)
|
||||
4. Guardar plano em `/tmp/cinematic-site/scene-plan.md`
|
||||
|
||||
### Passo 3 — Build
|
||||
|
||||
Gerar ficheiros HTML/CSS/JS:
|
||||
|
||||
1. Criar `/tmp/cinematic-site/output/`:
|
||||
- `index.html` — single-page com todas as seccoes
|
||||
- `styles.css` — Tailwind ou CSS puro
|
||||
- `animations.js` — scroll observers + animacoes
|
||||
2. Regras de qualidade:
|
||||
- Referenciar `design.json` Descomplicar para standards
|
||||
- Mobile-first
|
||||
- Core Web Vitals: LCP <2.5s, CLS <0.1
|
||||
- Sem dependencias externas pesadas (max framer-motion ou CSS puro)
|
||||
- Acessibilidade basica (alt text, contraste, focus states)
|
||||
3. Incluir comentarios no HTML com seccoes claras
|
||||
|
||||
### Passo 4 — Preview
|
||||
|
||||
1. Abrir `index.html` no browser local: `xdg-open /tmp/cinematic-site/output/index.html`
|
||||
2. Tirar screenshot via `mcp__chrome-devtools__take_screenshot`
|
||||
3. Mostrar comparacao ao utilizador:
|
||||
- Site original (URL)
|
||||
- Novo site (screenshot)
|
||||
4. Pedir aprovacao antes de qualquer proximo passo
|
||||
5. Se aprovado, sugerir opcoes:
|
||||
- Copiar para pasta de projecto
|
||||
- Ajustar cores/seccoes
|
||||
- Exportar para Vercel/Netlify (manual)
|
||||
|
||||
---
|
||||
|
||||
## Regras
|
||||
|
||||
- **Nunca deploy automatico** — apenas preview local
|
||||
- **Nunca inventar conteudo** — usar texto real do site original
|
||||
- **Sempre referenciar design.json** para standards visuais
|
||||
- **Output em /tmp/cinematic-site/** — nunca em pastas de projecto sem aprovacao
|
||||
- **README.md incluido** com instrucoes de deploy manual
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
@@ -0,0 +1,66 @@
|
||||
---
|
||||
name: design-b2b
|
||||
description: >
|
||||
Design system para serviços B2B — agências, consultoria, SaaS, PMEs portuguesas.
|
||||
Propostas visuais, landing pages, apresentações e materiais para decisores PT.
|
||||
Usar quando: proposta comercial, landing page serviço B2B, apresentação cliente,
|
||||
one-pager, ou qualquer material visual para audiência empresarial portuguesa.
|
||||
---
|
||||
|
||||
# /design-b2b — Design System Serviços B2B
|
||||
|
||||
## Paleta
|
||||
|
||||
```css
|
||||
--primary: #1e3a5f; /* Azul institucional — confiança, autoridade */
|
||||
--accent: #f97316; /* Laranja acção — CTAs, destaques */
|
||||
--neutral: #f8fafc; /* Fundo profissional */
|
||||
--text: #1e293b; /* Texto principal */
|
||||
--muted: #64748b; /* Texto secundário, legendas */
|
||||
--border: #e2e8f0; /* Divisores subtis */
|
||||
```
|
||||
|
||||
## Estrutura proposta comercial
|
||||
|
||||
### One-pager (1 A4 ou landing page equivalente)
|
||||
1. **Header:** Logo cliente + logo Descomplicar + título proposta
|
||||
2. **Problema:** 2-3 bullets do problema actual do cliente
|
||||
3. **Solução:** O que entregamos (concreto, não vago)
|
||||
4. **Resultados:** Métricas esperadas (%, EUR, tempo)
|
||||
5. **Investimento:** Preço claro, sem asteriscos escondidos
|
||||
6. **Próximo passo:** CTA único — "Agendar Reunião" ou "Aceitar Proposta"
|
||||
|
||||
### Landing page serviço B2B
|
||||
1. Headline: benefício principal (não feature)
|
||||
2. Sub-headline: para quem é + resultado esperado
|
||||
3. Prova social: 3 logos de clientes ou 1 case study
|
||||
4. Serviços: 3-5 cards com ícone + nome + 1 linha
|
||||
5. Processo: 3-4 passos (simples e claro)
|
||||
6. CTA: formulário simples (nome, email, empresa, mensagem)
|
||||
|
||||
## Tom e linguagem B2B PT
|
||||
|
||||
- **Usar:** "optimizar", "aumentar eficiência", "reduzir custos"
|
||||
- **Evitar:** "disruptivo", "revolucionário", "próximo nível"
|
||||
- **Tratamento:** "Você" (neutro) ou "A sua empresa" — nunca "tu" em contexto formal
|
||||
- **Números:** sempre com fonte (ex: "30% redução de custos — caso Empresa X")
|
||||
|
||||
## Anti-slop checklist B2B
|
||||
|
||||
- [ ] Zero jargão sem explicação
|
||||
- [ ] Preços ou "Solicitar orçamento" — nunca ambiguidade
|
||||
- [ ] Casos reais, não hipotéticos
|
||||
- [ ] Mobile: decisores usam telemóvel para primeiro contacto
|
||||
- [ ] Social proof: logo real, não ilustração
|
||||
|
||||
## Referências visuais
|
||||
|
||||
Ver `~/.claude/design/referencias-visuais/servicos-b2b/`
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
name: design-ecommerce
|
||||
description: >
|
||||
Design system para e-commerce — lojas WooCommerce, páginas produto, checkout PT.
|
||||
Optimização conversão, layouts loja, UX checkout e elementos de confiança.
|
||||
Usar quando: criar ou optimizar loja WooCommerce, página produto, carrinho,
|
||||
checkout, ou qualquer elemento visual de e-commerce para mercado português.
|
||||
---
|
||||
|
||||
# /design-ecommerce — Design System E-commerce
|
||||
|
||||
## Paleta base (adaptar à marca do cliente)
|
||||
|
||||
```css
|
||||
--cta: #dc2626; /* Vermelho urgência — "Comprar Agora" */
|
||||
--trust: #16a34a; /* Verde confiança — "Pagamento Seguro" */
|
||||
--price: #1e3a5f; /* Azul preço destacado */
|
||||
--sale: #f59e0b; /* Âmbar promoção */
|
||||
--neutral: #ffffff;
|
||||
--text: #111827;
|
||||
```
|
||||
|
||||
## Elementos conversão obrigatórios
|
||||
|
||||
### Página produto
|
||||
1. Imagens: mínimo 4 ângulos, zoom, vídeo se possível
|
||||
2. Preço: destacado, desconto visível, preço original riscado
|
||||
3. Stock: urgência ("Últimas 3 unidades")
|
||||
4. CTA: "Adicionar ao Carrinho" (vermelho, proeminente)
|
||||
5. Confiança: selos Visa/MB/MBWay + devolução 30 dias
|
||||
6. Avaliações: estrelas + número (social proof)
|
||||
7. "Também pode gostar" + "Compraram juntos"
|
||||
|
||||
### Checkout PT
|
||||
- Referência Multibanco visível
|
||||
- MB Way como opção principal
|
||||
- Campo NIF opcional (B2B)
|
||||
- Morada: formato PT (Rua, nº, andar, código postal, localidade)
|
||||
|
||||
### Elementos de confiança PT
|
||||
- Selos: MBWay, Visa, Mastercard, PayPal
|
||||
- "Envio para Portugal Continental em 24-48h"
|
||||
- "Devolução gratuita em 30 dias"
|
||||
- "Suporte em português"
|
||||
|
||||
## Anti-slop checklist e-commerce
|
||||
|
||||
- [ ] Preços em EUR (não USD)
|
||||
- [ ] CTAs em PT-PT: "Comprar" não "Buy", "Carrinho" não "Cart"
|
||||
- [ ] Mobile: checkout testado em 375px (maioria compra no telemóvel)
|
||||
- [ ] Tempo de carregamento: imagens optimizadas <100KB
|
||||
- [ ] Trust badges visíveis acima do fold
|
||||
|
||||
## Referências visuais
|
||||
|
||||
Ver `~/.claude/design/referencias-visuais/ecommerce/`
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
name: design-saude
|
||||
description: >
|
||||
Design system para sector saúde — clínicas, KiviCare, consultórios médicos.
|
||||
Paleta, tipografia, CTAs e layouts optimizados para contexto clínico PT.
|
||||
Usar quando: criar landing page de clínica, página de serviços médicos,
|
||||
agendamento online, ou qualquer material visual para clientes saúde.
|
||||
---
|
||||
|
||||
# /design-saude — Design System Saúde
|
||||
|
||||
## Paleta
|
||||
|
||||
```css
|
||||
--primary: #0ea5e9; /* Azul confiança médica */
|
||||
--secondary: #10b981; /* Verde saúde/cura */
|
||||
--neutral: #f8fafc; /* Fundo limpo e asséptico */
|
||||
--text: #1e293b; /* Texto principal */
|
||||
--accent: #f59e0b; /* CTA urgência (marcar consulta) */
|
||||
--danger: #ef4444; /* Alertas, urgências */
|
||||
```
|
||||
|
||||
## Tipografia
|
||||
|
||||
- **Títulos:** Inter SemiBold — transmite profissionalismo sem frieza
|
||||
- **Corpo:** Inter Regular 16px, line-height 1.7 — legibilidade para público 40+
|
||||
- **Evitar:** fontes decorativas, cursivas, serifas antiquadas
|
||||
|
||||
## Layouts obrigatórios
|
||||
|
||||
### Landing page clínica
|
||||
1. Hero: foto médico real + headline "Cuidamos de si" + CTA "Marcar Consulta"
|
||||
2. Serviços: cards com ícone + nome + preço (se disponível)
|
||||
3. Equipa: fotos reais + credenciais
|
||||
4. Depoimentos: com nome e tratamento (anonimizado se necessário)
|
||||
5. Localização + horários + contacto
|
||||
6. CTA final: WhatsApp ou formulário
|
||||
|
||||
### CTAs saúde
|
||||
- Principal: "Marcar Consulta" (verde, proeminente)
|
||||
- Secundário: "Saber Mais" ou "Ver Serviços"
|
||||
- Urgência: "Consulta Hoje" (âmbar)
|
||||
|
||||
## Anti-slop checklist saúde
|
||||
|
||||
- [ ] Fotos de pessoas reais (não stock de médicos brancos genéricos)
|
||||
- [ ] RGPD: sem dados de pacientes visíveis em mockups
|
||||
- [ ] Cores acessíveis: contraste WCAG AA mínimo
|
||||
- [ ] Mobile: formulário agendamento testado em 375px
|
||||
- [ ] PT-PT: "consulta" não "appointment", "médico" não "doctor"
|
||||
|
||||
## Referências visuais
|
||||
|
||||
Ver `~/.claude/design/referencias-visuais/saude/`
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
name: design-solar
|
||||
description: >
|
||||
Design system para sector solar/fotovoltaico — SolarFV, instaladores, B2B energia.
|
||||
Paleta, calculadoras, propostas visuais e layouts para sector energias renováveis PT.
|
||||
Usar quando: landing page solar, proposta instalação FV, calculadora poupança,
|
||||
ou material visual para clientes energia solar.
|
||||
---
|
||||
|
||||
# /design-solar — Design System Solar/FV
|
||||
|
||||
## Paleta
|
||||
|
||||
```css
|
||||
--primary: #f59e0b; /* Amarelo solar — energia, optimismo */
|
||||
--secondary: #1e3a5f; /* Azul escuro — confiança, profissionalismo B2B */
|
||||
--green: #16a34a; /* Verde sustentabilidade */
|
||||
--neutral: #f9fafb; /* Fundo limpo */
|
||||
--text: #111827; /* Texto principal */
|
||||
```
|
||||
|
||||
## Elementos distintivos sector solar
|
||||
|
||||
### Calculadora de poupança (elemento central)
|
||||
- Input: consumo mensal kWh + factura actual
|
||||
- Output: poupança anual estimada + payback em anos
|
||||
- Visual: comparação antes/depois com gráfico simples
|
||||
|
||||
### Proposta instalação
|
||||
1. Sumário executivo (1 página): consumo actual → produção estimada → ROI
|
||||
2. Especificações técnicas: painéis, inversor, capacidade
|
||||
3. Financiamento: opções (compra, leasing, PPA)
|
||||
4. Garantias e certificações
|
||||
5. CTA: "Solicitar Visita Técnica"
|
||||
|
||||
## Tipografia
|
||||
|
||||
- **Títulos:** Poppins Bold — moderno, energético
|
||||
- **Dados/métricas:** Inter Mono — leiturabilidade para números
|
||||
- **Corpo:** Inter Regular
|
||||
|
||||
## Anti-slop checklist solar
|
||||
|
||||
- [ ] Números reais de produção (não inventar kWh)
|
||||
- [ ] Certificações visíveis (DGEG, SCE)
|
||||
- [ ] Mobile: calculadora funcional em 375px
|
||||
- [ ] B2B: tom técnico e sóbrio (não "salve o planeta")
|
||||
- [ ] PT: "fotovoltaico" não "fotovoltaica" (painel fotovoltaico)
|
||||
|
||||
## Referências visuais
|
||||
|
||||
Ver `~/.claude/design/referencias-visuais/solar/`
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
@@ -154,3 +154,15 @@ fidelidade, concisao visual, legibilidade, profissionalismo, brand compliance.
|
||||
---
|
||||
|
||||
**Versao**: 2.0.0 | **Data**: 2026-02-12 | **Autor**: Descomplicar
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
---
|
||||
name: penpot-pipeline
|
||||
description: >
|
||||
Pipeline Penpot→código: extrai designs do Penpot via MCP, converte para HTML/CSS/React.
|
||||
Usar quando: converter mockup Penpot para código, gerar componente a partir de design,
|
||||
exportar assets Penpot, sincronizar design system com código.
|
||||
---
|
||||
|
||||
# /penpot-pipeline — Pipeline Design→Código
|
||||
|
||||
Workflow formalizado para converter designs Penpot em código funcional.
|
||||
O MCP Penpot já existe (`mcp__penpot__*`) — esta skill formaliza o workflow.
|
||||
|
||||
---
|
||||
|
||||
## Workflow Completo
|
||||
|
||||
### Passo 1 — Encontrar o Design
|
||||
|
||||
```javascript
|
||||
// Listar projectos Penpot
|
||||
mcp__penpot__list_projects({})
|
||||
|
||||
// Listar ficheiros no projecto
|
||||
mcp__penpot__get_project_files({ project_id: "<ID>" })
|
||||
|
||||
// Buscar componente específico
|
||||
mcp__penpot__search_object({
|
||||
file_id: "<FILE_ID>",
|
||||
query: "<nome do componente>"
|
||||
})
|
||||
```
|
||||
|
||||
### Passo 2 — Analisar Estrutura
|
||||
|
||||
```javascript
|
||||
// Schema disponível (ler uma vez por sessão)
|
||||
mcp__penpot__penpot_tree_schema({})
|
||||
|
||||
// Árvore do componente com screenshot
|
||||
mcp__penpot__get_object_tree({
|
||||
file_id: "<FILE_ID>",
|
||||
object_id: "<OBJECT_ID>",
|
||||
depth: 3
|
||||
})
|
||||
|
||||
// Screenshot visual de alta resolução
|
||||
mcp__penpot__get_rendered_component({
|
||||
file_id: "<FILE_ID>",
|
||||
object_id: "<OBJECT_ID>"
|
||||
})
|
||||
```
|
||||
|
||||
### Passo 3 — Gerar Código
|
||||
|
||||
Com base na árvore + screenshot, gerar código na stack alvo:
|
||||
|
||||
#### HTML + CSS (vanilla)
|
||||
```
|
||||
- Usar variáveis CSS para cores/fonts do design system
|
||||
- Mobile-first (375px → 768px → 1200px)
|
||||
- Nomes de classes: BEM (block__element--modifier)
|
||||
- Acessibilidade: aria-labels, roles semânticos
|
||||
```
|
||||
|
||||
#### React + TailwindCSS
|
||||
```
|
||||
- Componente funcional com TypeScript
|
||||
- Props tipadas
|
||||
- Variantes via className condicional
|
||||
- Shadcn/ui para primitivos (Button, Card, Input)
|
||||
- Tailwind classes da paleta Descomplicar ou do cliente
|
||||
```
|
||||
|
||||
#### Next.js (Server Component por defeito)
|
||||
```
|
||||
- Server Component se sem interactividade
|
||||
- Client Component ('use client') apenas para eventos
|
||||
- Image: next/image com alt e sizes
|
||||
- Link: next/link
|
||||
```
|
||||
|
||||
### Passo 4 — Exportar Assets
|
||||
|
||||
```javascript
|
||||
// Exportar imagem/icon do design
|
||||
mcp__penpot__export_object({
|
||||
file_id: "<FILE_ID>",
|
||||
object_id: "<OBJECT_ID>",
|
||||
format: "svg" // svg | png | pdf
|
||||
})
|
||||
```
|
||||
|
||||
### Passo 5 — Auditoria 10/10
|
||||
|
||||
Antes de entregar código (Regra #49):
|
||||
- [ ] Segurança: sem XSS, sem dados expostos
|
||||
- [ ] Performance: imagens optimizadas, lazy loading
|
||||
- [ ] Acessibilidade: contraste, labels, keyboard nav
|
||||
- [ ] Mobile: testado em 375px
|
||||
- [ ] PT-PT: texto em português europeu
|
||||
|
||||
---
|
||||
|
||||
## Design System Descomplicar → Código
|
||||
|
||||
```css
|
||||
/* design.json → variáveis CSS */
|
||||
--color-primary: #1e3a5f;
|
||||
--color-accent: #f97316;
|
||||
--color-neutral: #f8fafc;
|
||||
--color-text: #1e293b;
|
||||
--color-muted: #64748b;
|
||||
--font-heading: 'Inter', sans-serif;
|
||||
--font-body: 'Inter', sans-serif;
|
||||
```
|
||||
|
||||
```tsx
|
||||
// Tailwind config (tailwind.config.ts)
|
||||
colors: {
|
||||
primary: '#1e3a5f',
|
||||
accent: '#f97316',
|
||||
neutral: '#f8fafc',
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Casos de Uso
|
||||
|
||||
### Landing page de serviço
|
||||
```
|
||||
1. mcp__penpot__search_object — encontrar frames "Hero", "Features", "CTA"
|
||||
2. get_object_tree para cada frame
|
||||
3. get_rendered_component para referência visual
|
||||
4. Gerar HTML/CSS seguindo /design-b2b ou /design-saude
|
||||
5. Integrar em WP (Elementor) ou Next.js
|
||||
```
|
||||
|
||||
### Componente React isolado
|
||||
```
|
||||
1. search_object — encontrar componente
|
||||
2. get_object_tree com depth=5 (para componentes complexos)
|
||||
3. Gerar TSX com props
|
||||
4. Exportar assets SVG
|
||||
5. Publicar em /components da biblioteca
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
- **Nunca** gerar código sem ver o screenshot (get_rendered_component)
|
||||
- **Nunca** assumir cores sem verificar design.json ou paleta do cliente
|
||||
- **Nunca** entregar sem testar mobile (375px)
|
||||
- **Nunca** hardcodar texto — usar variáveis/props
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*Skill /penpot-pipeline v1.0 | 06-04-2026 | Eixo 5.5 — Pipeline Penpot→Código*
|
||||
@@ -0,0 +1,124 @@
|
||||
---
|
||||
name: benchmark
|
||||
description: >
|
||||
Mede Core Web Vitals e performance antes/depois de alterações. Detecta regressões.
|
||||
Usar antes e depois de qualquer alteração a WP, WooCommerce, Next.js ou infra.
|
||||
Baseado no gstack /benchmark. Eixo 2B.
|
||||
---
|
||||
|
||||
# /benchmark — Performance Antes/Depois
|
||||
|
||||
Medir o impacto real de alterações. Nunca fazer deploy sem benchmark.
|
||||
|
||||
---
|
||||
|
||||
## Quando Usar
|
||||
|
||||
- Antes de qualquer optimização de performance
|
||||
- Antes de deploy de plugins/temas WordPress
|
||||
- Antes de alterações ao servidor ou cache
|
||||
- Antes de implementar nova feature em produção
|
||||
- Como baseline mensal de cada site
|
||||
|
||||
---
|
||||
|
||||
## Métricas Alvo (Core Web Vitals 2024)
|
||||
|
||||
| Métrica | Bom | Precisa Melhorar | Mau |
|
||||
|---------|-----|-----------------|-----|
|
||||
| LCP (Largest Contentful Paint) | ≤2.5s | 2.5-4.0s | >4.0s |
|
||||
| FID / INP (Interaction to Next Paint) | ≤200ms | 200-500ms | >500ms |
|
||||
| CLS (Cumulative Layout Shift) | ≤0.1 | 0.1-0.25 | >0.25 |
|
||||
| TTFB (Time to First Byte) | ≤800ms | 800-1800ms | >1800ms |
|
||||
| FCP (First Contentful Paint) | ≤1.8s | 1.8-3.0s | >3.0s |
|
||||
|
||||
---
|
||||
|
||||
## Protocolo
|
||||
|
||||
### Passo 1 — Baseline (ANTES)
|
||||
|
||||
```bash
|
||||
# Via MCP Lighthouse (se disponível)
|
||||
mcp__lighthouse__get_core_web_vitals({ url: "<URL>" })
|
||||
mcp__lighthouse__run_audit({ url: "<URL>", categories: ["performance"] })
|
||||
|
||||
# Ou via Lighthouse CLI no servidor
|
||||
ssh server "lighthouse <URL> --output=json --output-path=/tmp/before.json --chrome-flags='--headless'"
|
||||
|
||||
# Ou via PageSpeed Insights API
|
||||
curl "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=<URL>&strategy=mobile" | jq '.lighthouseResult.categories.performance.score'
|
||||
```
|
||||
|
||||
**Guardar baseline:**
|
||||
```bash
|
||||
BEFORE_LCP=<valor>
|
||||
BEFORE_CLS=<valor>
|
||||
BEFORE_FCP=<valor>
|
||||
BEFORE_SCORE=<valor>
|
||||
```
|
||||
|
||||
### Passo 2 — Executar Alteração
|
||||
|
||||
Fazer a alteração (deploy, optimização, plugin, etc.)
|
||||
|
||||
### Passo 3 — Depois
|
||||
|
||||
```bash
|
||||
# Repetir as mesmas medições
|
||||
mcp__lighthouse__get_core_web_vitals({ url: "<URL>" })
|
||||
|
||||
AFTER_LCP=<valor>
|
||||
AFTER_CLS=<valor>
|
||||
AFTER_FCP=<valor>
|
||||
AFTER_SCORE=<valor>
|
||||
```
|
||||
|
||||
### Passo 4 — Comparação
|
||||
|
||||
```markdown
|
||||
## Benchmark — [Site] — [Data]
|
||||
|
||||
| Métrica | Antes | Depois | Delta | Estado |
|
||||
|---------|-------|--------|-------|--------|
|
||||
| LCP | Xs | Ys | ±Zs | ✅/⚠️/❌ |
|
||||
| CLS | X | Y | ±Z | ✅/⚠️/❌ |
|
||||
| FCP | Xs | Ys | ±Zs | ✅/⚠️/❌ |
|
||||
| Score | X% | Y% | ±Z% | ✅/⚠️/❌ |
|
||||
|
||||
**Veredicto:** MELHOROU / NEUTRO / REGREDIU
|
||||
**Acção:** Manter deploy / Reverter / Investigar
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Regras de Decisão
|
||||
|
||||
```
|
||||
SE qualquer métrica piorou >10% → REVERTER imediatamente
|
||||
SE Score global piorou >5 pontos → investigar antes de continuar
|
||||
SE CLS aumentou >0.05 → bloquear — UX crítica
|
||||
SE LCP piorou >500ms em mobile → reverter
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Sites Descomplicar a Monitorizar
|
||||
|
||||
| Site | URL | Frequência |
|
||||
|------|-----|-----------|
|
||||
| Descomplicar main | descomplicar.pt | Mensal |
|
||||
| Clip | clip.descomplicar.pt | Após cada deploy |
|
||||
| Outros clientes | variável | Após alterações WP |
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*Skill /benchmark v1.0 | 06-04-2026 | Eixo 2B — gstack pattern*
|
||||
@@ -0,0 +1,155 @@
|
||||
---
|
||||
name: canary
|
||||
description: >
|
||||
Monitorização pós-deploy — detecta regressões em produção. Verifica que o deploy
|
||||
não quebrou nada crítico nos 15min seguintes. Baseado no gstack /canary. Eixo 2B.
|
||||
Usar após qualquer deploy em produção.
|
||||
---
|
||||
|
||||
# /canary — Monitorização Pós-Deploy
|
||||
|
||||
Os primeiros 15 minutos após um deploy são os mais críticos. Esta skill verifica que tudo está OK.
|
||||
|
||||
---
|
||||
|
||||
## Quando Usar (SEMPRE após deploy produção)
|
||||
|
||||
- Após deploy de código em produção
|
||||
- Após actualização de WordPress (core, plugins, temas)
|
||||
- Após alterações de servidor (PHP, Nginx, MySQL)
|
||||
- Após mudanças de DNS ou SSL
|
||||
- Após activação de nova funcionalidade
|
||||
|
||||
---
|
||||
|
||||
## Protocolo (15 minutos)
|
||||
|
||||
### Minuto 0-2 — Status Checks
|
||||
|
||||
```bash
|
||||
# 1. Site responde?
|
||||
curl -s -o /dev/null -w "%{http_code}" <URL>/
|
||||
# Esperado: 200
|
||||
|
||||
# 2. Admin WP responde?
|
||||
curl -s -o /dev/null -w "%{http_code}" <URL>/wp-admin/
|
||||
# Esperado: 200 ou 302
|
||||
|
||||
# 3. SSL válido?
|
||||
curl -vI <URL> 2>&1 | grep "SSL certificate verify"
|
||||
# Esperado: SSL certificate verify ok
|
||||
|
||||
# 4. Tempo de resposta aceitável?
|
||||
curl -s -o /dev/null -w "%{time_total}\n" <URL>/
|
||||
# Esperado: < 3.0 segundos
|
||||
```
|
||||
|
||||
### Minuto 2-5 — Funcionalidades Críticas
|
||||
|
||||
**Para WordPress:**
|
||||
```bash
|
||||
# Página principal carrega sem erros
|
||||
curl -s <URL>/ | grep -c "wp-content"
|
||||
# Esperado: > 0
|
||||
|
||||
# Sem erro crítico PHP
|
||||
curl -s <URL>/ | grep -i "fatal error\|parse error\|warning"
|
||||
# Esperado: sem output
|
||||
|
||||
# WP-CLI status
|
||||
wp --path=/var/www/html core verify-checksums 2>&1 | tail -1
|
||||
# Esperado: "WordPress installation verifies against checksums."
|
||||
```
|
||||
|
||||
**Para aplicações:**
|
||||
```bash
|
||||
# Health endpoint
|
||||
curl -s <URL>/api/health | jq '.status'
|
||||
# Esperado: "ok"
|
||||
|
||||
# Database conecta?
|
||||
curl -s <URL>/api/health | jq '.database'
|
||||
# Esperado: "connected"
|
||||
```
|
||||
|
||||
### Minuto 5-10 — Métricas de Performance
|
||||
|
||||
```javascript
|
||||
// Via Lighthouse MCP
|
||||
mcp__lighthouse__get_performance_score({ url: "<URL>" })
|
||||
// Esperado: >= baseline (ver /benchmark)
|
||||
|
||||
mcp__lighthouse__get_core_web_vitals({ url: "<URL>" })
|
||||
// Comparar com baseline guardado
|
||||
```
|
||||
|
||||
### Minuto 10-15 — Logs e Erros
|
||||
|
||||
```bash
|
||||
# Erros PHP nas últimas 15 min
|
||||
ssh server "tail -100 /var/log/php/error.log | grep '$(date -d '15 minutes ago' +%H:%M)'"
|
||||
|
||||
# Erros Nginx/Apache
|
||||
ssh server "tail -50 /var/log/nginx/error.log"
|
||||
|
||||
# WooCommerce (se aplicável)
|
||||
wp --path=/var/www/html wc log list 2>&1 | head -20
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Output — Relatório Canary
|
||||
|
||||
```markdown
|
||||
## Canary Check — [Site] — [Data] [Hora]
|
||||
|
||||
**Deploy:** [O que foi alterado]
|
||||
|
||||
| Check | Estado | Detalhe |
|
||||
|-------|--------|---------|
|
||||
| HTTP 200 | ✅/❌ | |
|
||||
| SSL | ✅/❌ | |
|
||||
| Tempo resposta | ✅/❌ | Xs |
|
||||
| Sem erros PHP | ✅/❌ | |
|
||||
| Performance score | ✅/❌ | X% (base: Y%) |
|
||||
| Logs limpos | ✅/❌ | |
|
||||
|
||||
**Resultado:** ✅ DEPLOY ESTÁVEL | ⚠️ INVESTIGAR | ❌ REVERTER
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Critérios de Reversão Imediata
|
||||
|
||||
```
|
||||
❌ HTTP response != 200 → REVERTER
|
||||
❌ SSL falha → REVERTER
|
||||
❌ "Fatal error" em qualquer página → REVERTER
|
||||
❌ Tempo resposta > 10s → INVESTIGAR
|
||||
❌ Performance score caiu >15 pontos → INVESTIGAR
|
||||
❌ Logs com erros críticos → INVESTIGAR
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Escalada Automática
|
||||
|
||||
Se algum check falha:
|
||||
```
|
||||
1. NOTIFICAR: criar issue no Desk CRM com urgência P1
|
||||
2. REVERTER: se erro crítico, reverter imediatamente
|
||||
3. DOCUMENTAR: o que falhou e quando
|
||||
4. ANALISAR: root cause antes de re-deploy
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*Skill /canary v1.0 | 06-04-2026 | Eixo 2B — gstack pattern*
|
||||
@@ -301,3 +301,15 @@ Activar Chrome por defeito **aumenta consumo de context window** porque as ferra
|
||||
1. Desactivar default: `/chrome` -> desactivar
|
||||
2. Usar `claude --chrome` apenas quando necessario
|
||||
3. Preferir WebFetch para leituras simples de paginas publicas
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -241,3 +241,15 @@ Output: [resultado esperado]
|
||||
Input: [caso complexo]
|
||||
Output: [resultado detalhado]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -461,3 +461,15 @@ git commit
|
||||
|
||||
**Skill v1.1** | 12-03-2026 | Descomplicar® | Renomeado de /security-check para /dep-audit
|
||||
**Security First** - Zero vulnerabilities ou documentadas
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,267 @@
|
||||
---
|
||||
name: diagrama
|
||||
category: dev-tools
|
||||
description: "Gera diagramas de arquitectura, fluxo, ER e sequência em três formatos: draw.io (.drawio), Excalidraw e Mermaid. Usar quando 'diagrama', 'arquitectura', 'draw.io', 'fluxo', 'ER', 'sequência', 'infra', 'componentes'."
|
||||
version: "1.0.0"
|
||||
created: 2026-04-04
|
||||
tools: [mcp__claude_ai_Excalidraw__export_to_excalidraw, mcp__mcp-mermaid__generate, Write, Bash]
|
||||
---
|
||||
|
||||
# Skill: /diagrama
|
||||
|
||||
Gera diagramas técnicos em três formatos consoante o caso de uso. Suporta arquitectura de sistemas, fluxogramas, diagramas ER, sequência, infra-estrutura e redes.
|
||||
|
||||
---
|
||||
|
||||
## Quando usar cada formato
|
||||
|
||||
| Formato | Quando usar | Output |
|
||||
|---------|------------|--------|
|
||||
| **draw.io** | Diagramas formais para documentação, propostas, clientes | `.drawio` (editável) |
|
||||
| **Excalidraw** | Esboços rápidos, brainstorming visual, estilo whiteboard | `.excalidraw` / MCP |
|
||||
| **Mermaid** | Diagramas como código, versionáveis em Git, embeds Markdown | `.svg` / `.png` |
|
||||
|
||||
---
|
||||
|
||||
## Processo de execução
|
||||
|
||||
### 1. Identificar pedido
|
||||
|
||||
Quando o utilizador pede um diagrama, detectar:
|
||||
- **Tipo:** arquitectura | fluxo | ER | sequência | rede | organograma | classe
|
||||
- **Formato pretendido:** draw.io (default para doc. formal) | excalidraw | mermaid
|
||||
- **Contexto:** sistemas envolvidos, entidades, actores
|
||||
|
||||
Se não especificado, perguntar apenas: "draw.io (formal) ou Excalidraw (esboço)?"
|
||||
|
||||
### 2. Gerar conteúdo
|
||||
|
||||
---
|
||||
|
||||
## Geração draw.io (.drawio)
|
||||
|
||||
O formato draw.io é mxGraph XML. Gerar o XML e guardar como `.drawio`.
|
||||
|
||||
### Estrutura base
|
||||
|
||||
```xml
|
||||
<mxfile host="Claude Code" modified="YYYY-MM-DDTHH:MM:SS" agent="Claude" version="21.0">
|
||||
<diagram name="Diagrama" id="diagram-1">
|
||||
<mxGraphModel dx="1422" dy="762" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<!-- elementos aqui -->
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
```
|
||||
|
||||
### Templates de elementos mxGraph
|
||||
|
||||
**Rectângulo (componente/serviço):**
|
||||
```xml
|
||||
<mxCell id="2" value="Nome" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="160" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
```
|
||||
|
||||
**Seta/ligação:**
|
||||
```xml
|
||||
<mxCell id="10" edge="1" source="2" target="3" parent="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
```
|
||||
|
||||
**Cilindro (base de dados):**
|
||||
```xml
|
||||
<mxCell id="5" value="PostgreSQL" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="160" width="80" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
```
|
||||
|
||||
**Cloud (serviço externo):**
|
||||
```xml
|
||||
<mxCell id="6" value="Cloudflare" style="shape=mxgraph.cisco.sites.generic_building;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="160" width="60" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
```
|
||||
|
||||
**Actor (pessoa/utilizador):**
|
||||
```xml
|
||||
<mxCell id="7" value="Utilizador" style="shape=mxgraph.flowchart.start_2;fillColor=#00BEF2;strokeColor=#006EAF;fontColor=#ffffff;fontStyle=1;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="170" width="60" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
```
|
||||
|
||||
**Swimlane (grupo/camada):**
|
||||
```xml
|
||||
<mxCell id="8" value="Camada Frontend" style="swimlane;startSize=20;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
|
||||
<mxGeometry x="0" y="0" width="400" height="200" as="geometry"/>
|
||||
</mxCell>
|
||||
```
|
||||
|
||||
### Paleta de cores Descomplicar
|
||||
|
||||
| Componente | fillColor | strokeColor |
|
||||
|-----------|-----------|-------------|
|
||||
| Serviço/App | `#dae8fc` | `#6c8ebf` |
|
||||
| Base de dados | `#f8cecc` | `#b85450` |
|
||||
| Fila/Queue | `#d5e8d4` | `#82b366` |
|
||||
| Externo/Cloud | `#fff2cc` | `#d6b656` |
|
||||
| Infra/Servidor | `#e1d5e7` | `#9673a6` |
|
||||
| Claude/IA | `#f0f4ff` | `#4a6cf7` |
|
||||
|
||||
### Guardar ficheiro
|
||||
|
||||
Guardar em `/media/ealmeida/Dados/Hub/tmp/diagramas/` com nome descritivo:
|
||||
```
|
||||
YYYY-MM-DD-nome-diagrama.drawio
|
||||
```
|
||||
|
||||
Abrir com:
|
||||
```bash
|
||||
drawio "/media/ealmeida/Dados/Hub/tmp/diagramas/NOME.drawio" &
|
||||
```
|
||||
(ou abrir manualmente com draw.io desktop / draw.io no browser)
|
||||
|
||||
---
|
||||
|
||||
## Geração Excalidraw
|
||||
|
||||
Usar o MCP `mcp__claude_ai_Excalidraw__export_to_excalidraw` para diagramas no estilo whiteboard.
|
||||
|
||||
### Fluxo
|
||||
|
||||
1. Chamar `mcp__claude_ai_Excalidraw__create_view` para iniciar sessão
|
||||
2. Chamar `mcp__claude_ai_Excalidraw__export_to_excalidraw` com o conteúdo estruturado
|
||||
3. Informar o utilizador do link/path gerado
|
||||
|
||||
### Casos de uso preferidos
|
||||
|
||||
- Brainstorming e exploração rápida
|
||||
- Diagramas de fluxo com estilo manual
|
||||
- Esboços para reuniões
|
||||
- Arquitecturas de alto nível para comunicação interna
|
||||
|
||||
---
|
||||
|
||||
## Geração Mermaid
|
||||
|
||||
Usar o MCP `mcp__mcp-mermaid__generate` para diagramas como código.
|
||||
|
||||
### Tipos suportados
|
||||
|
||||
**Fluxograma:**
|
||||
```
|
||||
flowchart TD
|
||||
A[Início] --> B{Condição}
|
||||
B -->|Sim| C[Acção]
|
||||
B -->|Não| D[Fim]
|
||||
```
|
||||
|
||||
**Sequência:**
|
||||
```
|
||||
sequenceDiagram
|
||||
participant U as Utilizador
|
||||
participant A as Claude Code
|
||||
participant N as n8n
|
||||
U->>A: Pedido
|
||||
A->>N: Trigger workflow
|
||||
N-->>A: Resultado
|
||||
A-->>U: Resposta
|
||||
```
|
||||
|
||||
**ER:**
|
||||
```
|
||||
erDiagram
|
||||
CLIENTE ||--o{ PROJECTO : tem
|
||||
PROJECTO ||--o{ TAREFA : contém
|
||||
TAREFA {
|
||||
int id
|
||||
string nome
|
||||
string estado
|
||||
}
|
||||
```
|
||||
|
||||
**Arquitectura de componentes (C4):**
|
||||
```
|
||||
C4Context
|
||||
title Stack Descomplicar
|
||||
Person(eal, "Emanuel", "Utilizador principal")
|
||||
System(cc, "Claude Code", "Interface interactiva")
|
||||
System(clip, "Paperclip", "Agentes autónomos")
|
||||
System(n8n, "n8n", "Automação determinística")
|
||||
Rel(eal, cc, "usa directamente")
|
||||
Rel(cc, clip, "delega tarefas complexas")
|
||||
Rel(cc, n8n, "activa workflows")
|
||||
```
|
||||
|
||||
### Guardar output
|
||||
|
||||
Guardar o código Mermaid em `/media/ealmeida/Dados/Hub/tmp/diagramas/NOME.mmd` e renderizar para SVG/PNG via MCP.
|
||||
|
||||
---
|
||||
|
||||
## Templates prontos por contexto
|
||||
|
||||
### Arquitectura StackDescomplicar
|
||||
|
||||
Gerar diagrama com as três camadas do stack:
|
||||
- **Camada 1:** Claude Code (trabalho interactivo)
|
||||
- **Camada 2:** n8n (automação determinística)
|
||||
- **Camada 3:** Paperclip (raciocínio autónomo)
|
||||
|
||||
### Proposta comercial
|
||||
|
||||
Diagrama da solução para o cliente com:
|
||||
- Infra-estrutura actual (antes)
|
||||
- Solução proposta (depois)
|
||||
- Componentes e integrações
|
||||
|
||||
### Pipeline de dados
|
||||
|
||||
Diagrama de fluxo com:
|
||||
- Fonte → Processamento → Destino
|
||||
- Triggers, transformações, outputs
|
||||
|
||||
### Diagrama ER Desk CRM
|
||||
|
||||
Entidades principais: Lead → Customer → Estimate → Invoice → Payment
|
||||
|
||||
---
|
||||
|
||||
## Boas práticas
|
||||
|
||||
- **Máx. 10-15 elementos** por diagrama (mais → dividir em sub-diagramas)
|
||||
- **Labels curtos:** 2-4 palavras por elemento
|
||||
- **Setas com label** quando o fluxo não é óbvio
|
||||
- **Cor consistente** por tipo de componente (seguir paleta Descomplicar)
|
||||
- **Nome descritivo** no ficheiro (não "diagrama1.drawio")
|
||||
- **Guardar em Hub/tmp/diagramas/** para fácil acesso
|
||||
|
||||
---
|
||||
|
||||
## Instalar draw.io MCP (opcional, para funcionalidades avançadas)
|
||||
|
||||
O vídeo #210 do Stack_Pesquisa_Videos.md demonstra um MCP draw.io com geração automática a partir de análise de código. Para instalar:
|
||||
|
||||
```bash
|
||||
# Verificar se há MCP draw.io disponível no gateway
|
||||
# Ver: Hub/04-Stack/claude-code-context-hygiene.md → secção MCPs
|
||||
```
|
||||
|
||||
Alternativa: usar draw.io via browser em https://app.diagrams.net (gratuito, sem instalação) e importar o `.drawio` gerado.
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
@@ -0,0 +1,159 @@
|
||||
---
|
||||
name: docx
|
||||
description: "Criação, edição e análise de documentos Word (.docx). Versão light para heartbeats."
|
||||
---
|
||||
|
||||
# DOCX — Referência Rápida
|
||||
|
||||
## Referência rápida
|
||||
|
||||
| Tarefa | Abordagem |
|
||||
|--------|-----------|
|
||||
| Ler conteúdo | `pandoc` ou descompactar XML |
|
||||
| Criar novo | `docx-js` (npm install -g docx) |
|
||||
| Editar existente | Descompactar → editar XML → recompactar |
|
||||
| Converter .doc | `python scripts/office/soffice.py --headless --convert-to docx doc.doc` |
|
||||
|
||||
## Criar novos documentos (docx-js)
|
||||
|
||||
### Setup básico
|
||||
|
||||
```javascript
|
||||
const { Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell, ImageRun,
|
||||
Header, Footer, AlignmentType, PageOrientation, LevelFormat, HeadingLevel,
|
||||
BorderStyle, WidthType, ShadingType, PageNumber, PageBreak } = require('docx');
|
||||
|
||||
const doc = new Document({ sections: [{ children: [/* conteúdo */] }] });
|
||||
Packer.toBuffer(doc).then(buffer => fs.writeFileSync("doc.docx", buffer));
|
||||
```
|
||||
|
||||
### Tamanho de página (A4)
|
||||
|
||||
```javascript
|
||||
sections: [{
|
||||
properties: {
|
||||
page: {
|
||||
size: { width: 11906, height: 16838 }, // A4 em DXA
|
||||
margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 }
|
||||
}
|
||||
},
|
||||
children: [/* conteúdo */]
|
||||
}]
|
||||
```
|
||||
|
||||
Largura de conteúdo A4 com margens 1": `11906 - 2880 = 9026 DXA`
|
||||
|
||||
**Paisagem:** Passar dimensões retrato + `orientation: PageOrientation.LANDSCAPE` (docx-js troca internamente).
|
||||
|
||||
### Listas
|
||||
|
||||
```javascript
|
||||
numbering: { config: [
|
||||
{ reference: "bullets", levels: [{ level: 0, format: LevelFormat.BULLET, text: "\u2022",
|
||||
alignment: AlignmentType.LEFT, style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] }
|
||||
] }
|
||||
// Usar: new Paragraph({ numbering: { reference: "bullets", level: 0 }, children: [...] })
|
||||
```
|
||||
|
||||
### Tabelas
|
||||
|
||||
```javascript
|
||||
// Largura tabela = soma columnWidths. Usar SEMPRE WidthType.DXA (nunca PERCENTAGE).
|
||||
new Table({
|
||||
width: { size: 9026, type: WidthType.DXA },
|
||||
columnWidths: [4513, 4513],
|
||||
rows: [new TableRow({ children: [
|
||||
new TableCell({
|
||||
borders: { top: b, bottom: b, left: b, right: b },
|
||||
width: { size: 4513, type: WidthType.DXA },
|
||||
shading: { fill: "D5E8F0", type: ShadingType.CLEAR }, // CLEAR, nunca SOLID
|
||||
margins: { top: 80, bottom: 80, left: 120, right: 120 },
|
||||
children: [new Paragraph({ children: [new TextRun("Célula")] })]
|
||||
})
|
||||
] })]
|
||||
})
|
||||
```
|
||||
|
||||
### Imagens
|
||||
|
||||
```javascript
|
||||
new ImageRun({
|
||||
type: "png", // Obrigatório
|
||||
data: fs.readFileSync("image.png"),
|
||||
transformation: { width: 200, height: 150 },
|
||||
altText: { title: "T", description: "D", name: "N" } // Três obrigatórios
|
||||
})
|
||||
```
|
||||
|
||||
### Cabeçalhos/rodapés
|
||||
|
||||
```javascript
|
||||
headers: { default: new Header({ children: [new Paragraph({ children: [new TextRun("Cabeçalho")] })] }) },
|
||||
footers: { default: new Footer({ children: [new Paragraph({
|
||||
children: [new TextRun("Página "), new TextRun({ children: [PageNumber.CURRENT] })]
|
||||
})] }) }
|
||||
```
|
||||
|
||||
### Regras críticas docx-js
|
||||
|
||||
- Nunca usar `\n` — usar Paragraphs separados
|
||||
- Nunca usar bullets unicode — usar `LevelFormat.BULLET`
|
||||
- PageBreak dentro de Paragraph: `new Paragraph({ children: [new PageBreak()] })`
|
||||
- ImageRun requer `type`
|
||||
- Tabelas: `columnWidths` E `width` na célula, ambos devem corresponder
|
||||
- Usar `ShadingType.CLEAR`, nunca SOLID
|
||||
- TOC requer `HeadingLevel` apenas, sem estilos custom
|
||||
- Override estilos: IDs exactos "Heading1", "Heading2" + `outlineLevel`
|
||||
|
||||
## Editar documentos existentes
|
||||
|
||||
### Passo 1: Descompactar
|
||||
|
||||
```bash
|
||||
python scripts/office/unpack.py document.docx unpacked/
|
||||
```
|
||||
|
||||
### Passo 2: Editar XML
|
||||
|
||||
Editar ficheiros em `unpacked/word/`. Usar ferramenta Edit directamente (não scripts Python).
|
||||
|
||||
**Tracked changes:**
|
||||
```xml
|
||||
<!-- Inserção -->
|
||||
<w:ins w:id="1" w:author="Claude" w:date="2025-01-01T00:00:00Z">
|
||||
<w:r><w:t>texto inserido</w:t></w:r>
|
||||
</w:ins>
|
||||
|
||||
<!-- Eliminação -->
|
||||
<w:del w:id="2" w:author="Claude" w:date="2025-01-01T00:00:00Z">
|
||||
<w:r><w:delText>texto eliminado</w:delText></w:r>
|
||||
</w:del>
|
||||
```
|
||||
|
||||
**Comentários:**
|
||||
```bash
|
||||
python scripts/comment.py unpacked/ 0 "Texto do comentário"
|
||||
python scripts/comment.py unpacked/ 1 "Resposta" --parent 0
|
||||
```
|
||||
|
||||
**Smart quotes:** `‘` `’` `“` `”`
|
||||
|
||||
### Passo 3: Recompactar
|
||||
|
||||
```bash
|
||||
python scripts/office/pack.py unpacked/ output.docx --original document.docx
|
||||
```
|
||||
|
||||
Validação: `python scripts/office/validate.py doc.docx`
|
||||
|
||||
## Convenções Descomplicar
|
||||
|
||||
- Data: DD-MM-YYYY
|
||||
- Monetário: 1.234,56 EUR
|
||||
- Fonte: Arial 12pt
|
||||
- Página: A4 (11906 x 16838 DXA)
|
||||
- Autor tracked changes: "Claude"
|
||||
- Idioma: PT-PT
|
||||
|
||||
---
|
||||
**Versão**: 1.0.0-light | **Base**: 1.0.0
|
||||
@@ -510,3 +510,15 @@ Apos executar `comment.py` (ver Passo 2), adicionar marcadores ao document.xml.
|
||||
|
||||
---
|
||||
**Versao**: 1.0.0 | **Autor**: Descomplicar®
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -218,3 +218,15 @@ CMD ["npm", "start"]
|
||||
---
|
||||
|
||||
*Versão 1.0.0 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
---
|
||||
name: pdf
|
||||
description: Processamento de ficheiros PDF — leitura, extracção, merge, split, OCR, formulários. Versão light para heartbeats.
|
||||
---
|
||||
|
||||
# PDF — Referência Rápida
|
||||
|
||||
## Bibliotecas Python
|
||||
|
||||
### pypdf — operações básicas
|
||||
|
||||
```python
|
||||
from pypdf import PdfReader, PdfWriter
|
||||
|
||||
# Ler e extrair texto
|
||||
reader = PdfReader("documento.pdf")
|
||||
for page in reader.pages:
|
||||
text = page.extract_text()
|
||||
|
||||
# Merge
|
||||
writer = PdfWriter()
|
||||
for pdf in ["doc1.pdf", "doc2.pdf"]:
|
||||
for page in PdfReader(pdf).pages:
|
||||
writer.add_page(page)
|
||||
with open("merged.pdf", "wb") as f:
|
||||
writer.write(f)
|
||||
|
||||
# Split (uma página por ficheiro)
|
||||
for i, page in enumerate(reader.pages):
|
||||
w = PdfWriter()
|
||||
w.add_page(page)
|
||||
with open(f"page_{i+1}.pdf", "wb") as f:
|
||||
w.write(f)
|
||||
|
||||
# Rotate
|
||||
page = reader.pages[0]
|
||||
page.rotate(90)
|
||||
|
||||
# Password
|
||||
writer.encrypt("userpass", "ownerpass")
|
||||
```
|
||||
|
||||
### pdfplumber — tabelas e texto com layout
|
||||
|
||||
```python
|
||||
import pdfplumber
|
||||
|
||||
with pdfplumber.open("doc.pdf") as pdf:
|
||||
for page in pdf.pages:
|
||||
text = page.extract_text()
|
||||
tables = page.extract_tables()
|
||||
```
|
||||
|
||||
### reportlab — criação de PDFs
|
||||
|
||||
```python
|
||||
from reportlab.platypus import SimpleDocTemplate, Paragraph, Table, TableStyle, PageBreak
|
||||
from reportlab.lib.styles import getSampleStyleSheet
|
||||
from reportlab.lib import colors
|
||||
|
||||
doc = SimpleDocTemplate("report.pdf")
|
||||
styles = getSampleStyleSheet()
|
||||
elements = [Paragraph("Título", styles['Title'])]
|
||||
doc.build(elements)
|
||||
```
|
||||
|
||||
**Subscripts/superscripts:** Nunca usar caracteres Unicode. Usar tags XML: `<sub>2</sub>`, `<super>2</super>`.
|
||||
|
||||
## CLI
|
||||
|
||||
```bash
|
||||
# Extrair texto (poppler-utils)
|
||||
pdftotext input.pdf output.txt
|
||||
pdftotext -layout input.pdf output.txt
|
||||
|
||||
# Merge/split (qpdf)
|
||||
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
|
||||
qpdf input.pdf --pages . 1-5 -- pages1-5.pdf
|
||||
|
||||
# Encriptar
|
||||
qpdf --encrypt user_pass owner_pass 256 -- input.pdf encrypted.pdf
|
||||
|
||||
# Reparar
|
||||
qpdf --check input.pdf
|
||||
|
||||
# Extrair imagens
|
||||
pdfimages -j input.pdf output_prefix
|
||||
|
||||
# Render para PNG
|
||||
pdftoppm -png -r 300 document.pdf output_prefix
|
||||
```
|
||||
|
||||
## OCR (PDFs digitalizados)
|
||||
|
||||
```python
|
||||
import pytesseract
|
||||
from pdf2image import convert_from_path
|
||||
|
||||
images = convert_from_path('scanned.pdf')
|
||||
text = ""
|
||||
for image in images:
|
||||
text += pytesseract.image_to_string(image)
|
||||
```
|
||||
|
||||
## Formulários
|
||||
|
||||
### Verificar campos preenchíveis
|
||||
|
||||
```bash
|
||||
python scripts/check_fillable_fields.py <file.pdf>
|
||||
```
|
||||
|
||||
### Campos preenchíveis (nativos)
|
||||
|
||||
1. `python scripts/extract_form_field_info.py <input.pdf> <field_info.json>`
|
||||
2. `python scripts/convert_pdf_to_images.py <file.pdf> <output_dir>`
|
||||
3. Criar `field_values.json` com `field_id`, `page`, `value`
|
||||
4. `python scripts/fill_fillable_fields.py <input.pdf> <field_values.json> <output.pdf>`
|
||||
|
||||
### Campos não preenchíveis (anotações)
|
||||
|
||||
1. `python scripts/extract_form_structure.py <input.pdf> form_structure.json`
|
||||
2. **Abordagem A (estrutura):** Analisar JSON, criar `fields.json` com `pdf_width`/`pdf_height` e bounding boxes
|
||||
3. **Abordagem B (visual):** Converter para imagens, identificar campos, refinar com crop
|
||||
4. `python scripts/check_bounding_boxes.py fields.json`
|
||||
5. `python scripts/fill_pdf_form_with_annotations.py <input.pdf> fields.json <output.pdf>`
|
||||
6. `python scripts/create_validation_image.py <page> <fields.json> <input_img> <output_img>`
|
||||
|
||||
## Referência rápida
|
||||
|
||||
| Tarefa | Ferramenta | Comando |
|
||||
|--------|-----------|---------|
|
||||
| Merge | pypdf/qpdf | `writer.add_page()` / `qpdf --pages` |
|
||||
| Split | pypdf/qpdf | Uma página por ficheiro |
|
||||
| Texto | pdfplumber | `page.extract_text()` |
|
||||
| Tabelas | pdfplumber | `page.extract_tables()` |
|
||||
| Criar | reportlab | Canvas ou Platypus |
|
||||
| OCR | pytesseract | Converter para imagem primeiro |
|
||||
| Formulários | pypdf/scripts | Ver secção acima |
|
||||
|
||||
## Caminhos Descomplicar
|
||||
|
||||
| Local | Caminho |
|
||||
|-------|---------|
|
||||
| Documentos empresa | `/media/ealmeida/Dados/GDrive/Cloud/Descomplicar/` |
|
||||
| Propostas | `/media/ealmeida/Dados/Hub/03-Propostas/` |
|
||||
| Arquivo clientes | `/media/ealmeida/Dados/GDrive/Arquivo_de_Clientes/` |
|
||||
| Knowledge Base | `/media/ealmeida/Dados/Hub/06-Operacoes/Knowledge-Base/PDFs/` |
|
||||
| Temporários | `~/.claude-work/` (limpar ao concluir) |
|
||||
|
||||
## Workflow
|
||||
|
||||
1. Localizar PDF (filesystem ou Google Drive)
|
||||
2. Descarregar para `~/.claude-work/` se necessário
|
||||
3. Processar
|
||||
4. Guardar no destino final
|
||||
5. Limpar temporários
|
||||
|
||||
---
|
||||
**Versão**: 1.0.0-light | **Base**: 1.0.0
|
||||
@@ -794,3 +794,15 @@ def extract_text_with_ocr(pdf_path):
|
||||
|
||||
---
|
||||
**Versao**: 1.0.0 | **Autor**: Descomplicar®
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -392,3 +392,15 @@ mcp__dify-kb__dify_kb_retrieve_segments({
|
||||
|
||||
---
|
||||
**Versão**: 1.0.0 | **Autor**: Descomplicar®
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -130,3 +130,15 @@ Tabela com: ID, Nome, Segmento, Volume Anual (EUR), Projectos Activos, Última I
|
||||
|
||||
---
|
||||
**Versão**: 1.0.0 | **Autor**: Descomplicar® | **Plugin**: dev-tools
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -189,3 +189,15 @@ hooks/
|
||||
|
||||
- `references/composition-patterns.md` - Compound components, providers, dependency injection (Vercel Engineering)
|
||||
- `references/custom-hooks.md` - useDebounce, useLocalStorage, useFetch com codigo completo
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -186,3 +186,15 @@ description: >
|
||||
|
||||
Ver `references/anthropic-patterns.md` para exemplos detalhados de progressive disclosure.
|
||||
Ver `references/descomplicar-standards.md` para exemplos de skills Descomplicar bem estruturadas.
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -144,3 +144,15 @@ No servidor dev, Playwright ja esta disponivel em `/root/Dev`.
|
||||
|
||||
---
|
||||
**Versao**: 1.0.0 | **Autor**: Descomplicar®
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -372,3 +372,15 @@ O ficheiro de referencia de precos esta em:
|
||||
|
||||
---
|
||||
**Versao**: 1.0.0 | **Autor**: Descomplicar®
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
---
|
||||
name: youtube-extract
|
||||
category: dev-tools
|
||||
description: "Extrai transcrições e metadados de vídeos, playlists e canais YouTube para o ficheiro de pesquisa Stack_Pesquisa_Videos.md. Usar quando 'youtube', 'vídeo', 'playlist', 'canal', 'transcrição', 'extrair vídeo', 'pesquisa vídeos'."
|
||||
version: "1.0.0"
|
||||
created: 2026-04-04
|
||||
tools: [Bash]
|
||||
---
|
||||
|
||||
# Skill: /youtube-extract
|
||||
|
||||
Extrai transcrições e metadados de vídeos, playlists e canais YouTube usando o script `youtube-pesquisa-videos.py`. Adiciona automaticamente ao ficheiro de pesquisa do StackDescomplicar.
|
||||
|
||||
---
|
||||
|
||||
## Ficheiros relevantes
|
||||
|
||||
| Ficheiro | Caminho |
|
||||
|----------|---------|
|
||||
| **Script** | `/media/ealmeida/Dados/Dev/ClaudeDev/youtube-pesquisa-videos.py` |
|
||||
| **Destino padrão** | `/media/ealmeida/Dados/Hub/04-Stack/Stack_Pesquisa_Videos.md` |
|
||||
|
||||
---
|
||||
|
||||
## Processo de execução
|
||||
|
||||
### 1. Identificar o pedido
|
||||
|
||||
Detectar na mensagem do utilizador:
|
||||
- **URLs** — vídeos individuais, playlists (`?list=`), canais (`@canal`, `/c/`, `/channel/`)
|
||||
- **Limite** — "primeiros 10", "máx 5", etc. → usar `--max N`
|
||||
- **Destino** — ficheiro alternativo? → usar `--output caminho`
|
||||
- **Modo** — adicionar ao ficheiro (`--append`) vs mostrar no terminal (sem flag)
|
||||
|
||||
### 2. Construir o comando
|
||||
|
||||
```bash
|
||||
python3 /media/ealmeida/Dados/Dev/ClaudeDev/youtube-pesquisa-videos.py \
|
||||
URL1 URL2 ... \
|
||||
[--max N] \
|
||||
[--append] \
|
||||
[--output /caminho/alternativo.md] \
|
||||
[--file lista.txt]
|
||||
```
|
||||
|
||||
### 3. Exemplos por tipo de URL
|
||||
|
||||
**Vídeo individual:**
|
||||
```bash
|
||||
python3 /media/ealmeida/Dados/Dev/ClaudeDev/youtube-pesquisa-videos.py \
|
||||
"https://youtu.be/dQw4w9WgXcQ" --append
|
||||
```
|
||||
|
||||
**Playlist completa:**
|
||||
```bash
|
||||
python3 /media/ealmeida/Dados/Dev/ClaudeDev/youtube-pesquisa-videos.py \
|
||||
"https://youtube.com/playlist?list=PLxxx" --append
|
||||
```
|
||||
|
||||
**Playlist com limite:**
|
||||
```bash
|
||||
python3 /media/ealmeida/Dados/Dev/ClaudeDev/youtube-pesquisa-videos.py \
|
||||
"https://youtube.com/playlist?list=PLxxx" --max 10 --append
|
||||
```
|
||||
|
||||
**Canal completo (máx. 20):**
|
||||
```bash
|
||||
python3 /media/ealmeida/Dados/Dev/ClaudeDev/youtube-pesquisa-videos.py \
|
||||
"https://youtube.com/@NomeCanal" --max 20 --append
|
||||
```
|
||||
|
||||
**Mix de URLs:**
|
||||
```bash
|
||||
python3 /media/ealmeida/Dados/Dev/ClaudeDev/youtube-pesquisa-videos.py \
|
||||
"https://youtu.be/ID1" \
|
||||
"https://youtube.com/playlist?list=PLxxx" \
|
||||
--max 5 --append
|
||||
```
|
||||
|
||||
**Ficheiro de lista:**
|
||||
```bash
|
||||
python3 /media/ealmeida/Dados/Dev/ClaudeDev/youtube-pesquisa-videos.py \
|
||||
--file /caminho/lista.txt --append
|
||||
```
|
||||
|
||||
**Pré-visualizar sem gravar:**
|
||||
```bash
|
||||
python3 /media/ealmeida/Dados/Dev/ClaudeDev/youtube-pesquisa-videos.py \
|
||||
"https://youtu.be/ID1"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Comportamento padrão
|
||||
|
||||
| Situação | Acção |
|
||||
|----------|-------|
|
||||
| URL única de vídeo | Extrair e perguntar se adiciona ao ficheiro |
|
||||
| Múltiplos vídeos | Extrair todos e adicionar com `--append` |
|
||||
| Playlist/canal sem limite | Alertar o utilizador — perguntar limite antes de executar |
|
||||
| Ficheiro de destino não especificado | Usar `Stack_Pesquisa_Videos.md` |
|
||||
|
||||
> **Aviso obrigatório para playlists/canais sem `--max`:** Informar o utilizador do número de vídeos antes de processar — canais podem ter centenas.
|
||||
|
||||
---
|
||||
|
||||
## Após a extracção
|
||||
|
||||
1. Informar quantos vídeos foram adicionados e os números `#N` atribuídos
|
||||
2. Sugerir ao utilizador que complete os campos `*(a completar)*` no ficheiro
|
||||
3. Se houver erros (transcrição indisponível), mencionar quais os vídeos afectados
|
||||
4. Opcional: abrir o ficheiro no editor — `xdg-open "Stack_Pesquisa_Videos.md"`
|
||||
|
||||
---
|
||||
|
||||
## Pré-requisitos
|
||||
|
||||
- `yt-dlp` instalado: `pip install yt-dlp` ou `brew install yt-dlp`
|
||||
- Python 3.8+
|
||||
- Acesso à internet
|
||||
|
||||
Verificar disponibilidade:
|
||||
```bash
|
||||
yt-dlp --version && python3 --version
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Casos especiais
|
||||
|
||||
**ID curto do YouTube (11 chars):**
|
||||
```bash
|
||||
python3 /media/ealmeida/Dados/Dev/ClaudeDev/youtube-pesquisa-videos.py dQw4w9WgXcQ --append
|
||||
```
|
||||
|
||||
**Destino alternativo (outro projecto):**
|
||||
```bash
|
||||
python3 /media/ealmeida/Dados/Dev/ClaudeDev/youtube-pesquisa-videos.py \
|
||||
"https://youtu.be/ID1" \
|
||||
--output "/media/ealmeida/Dados/Hub/05-Projectos/MeuProjecto/videos.md" \
|
||||
--append
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "gestao",
|
||||
"description": "Project management, time tracking, daily checkups, worklogs, reflections, knowledge management, archiving and compliance auditing. Backed by NotebookLM notebooks.",
|
||||
"version": "1.3.0",
|
||||
"version": "1.4.0",
|
||||
"author": {
|
||||
"name": "Descomplicar - Crescimento Digital",
|
||||
"url": "https://descomplicar.pt"
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# Changelog — Plugin gestao
|
||||
|
||||
Todas as alterações relevantes a este plugin. Segue [Semantic Versioning](https://semver.org/).
|
||||
|
||||
---
|
||||
|
||||
## [1.4.0] — 2026-04-07
|
||||
|
||||
### Adicionado
|
||||
|
||||
- **Nova skill `/clip-instructions`** — gerir AGENTS.md de agentes Paperclip por nome: ver, editar, criar, rever histórico de versões e rollback via API config revisions
|
||||
|
||||
### Corrigido
|
||||
|
||||
- **`/clip-health`** — check 1 reescrito: `systemctl` substituído por `ps aux` (Paperclip não usa systemd); check 6 reescrito: `npx paperclipai doctor` substituído por `curl http://localhost:3100/health`; adicionado check de memória partilhada POSIX (`/dev/shm/PostgreSQL.*`) — causa raiz do bug pós-reboot; score actualizado 21→22; 2 entradas no Healing Log
|
||||
- **`/clip-agent`** — curl de atribuição de skills corrigido: adicionado `-H "Authorization: Bearer $PAPERCLIP_API_KEY"` (sem header dava 401); documentadas notas sobre agentes analyst (`process` adapter, `claude-sonnet-4-6`, heartbeat desactivado); checklist "Criar agente novo" actualizada com `instructionsBundleMode: "external"`, `instructionsRootPath`, `instructionsEntryFile`; 3 entradas no Healing Log
|
||||
- **`/clip-issue`** — `author_user_id` corrigido: `'board'` → `'v1N5OccPn9DGq6iog7qW9nEvnXYFT3iO'` (ID real de Emanuel); adicionado modo checkout/release com endpoints API e fallback SQL; entrada no Healing Log
|
||||
- **`/clip-skill`** — modelo mental corrigido: "ephemeral/symlinks" → "injecção de contexto em runtime a cada heartbeat"; adicionado `-H "Authorization: Bearer $PAPERCLIP_API_KEY"` aos dois curls de API (`/skills/import` e `/skills/sync`); nota sobre adapter `process` para agentes analyst; entrada no Healing Log
|
||||
|
||||
### Notas técnicas
|
||||
|
||||
- Todas as correcções baseadas em aprendizagens dos vídeos Paperclip (sessão 07-04-2026)
|
||||
- Chave de autenticação Paperclip: `Authorization: Bearer $PAPERCLIP_API_KEY` obrigatória em todos os endpoints da API local
|
||||
- Agentes criados via SQL directamente (fora do fluxo OpenClaw) **não** recebem `company_memberships` automaticamente — inserção manual obrigatória
|
||||
|
||||
---
|
||||
|
||||
## [1.3.0] — anterior
|
||||
|
||||
- Versão base (sem changelog registado)
|
||||
@@ -4,7 +4,7 @@ description: Auto-reflexão e melhoria contínua do sistema. Analisa sessões, i
|
||||
padrões, sugere optimizações. Auto-trigger >20 tool calls.
|
||||
role: Auto-reflexão e melhoria contínua do sistema
|
||||
domain: Dev
|
||||
model: sonnet
|
||||
model: haiku
|
||||
tools: Read, Write, Edit, Glob, ToolSearch
|
||||
|
||||
# Dependencies
|
||||
|
||||
@@ -132,3 +132,15 @@ exit $EXIT_CODE
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -221,3 +221,15 @@ Output: [resultado esperado]
|
||||
Input: [caso complexo]
|
||||
Output: [resultado detalhado]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -175,3 +175,15 @@ mcp__google_workspace__create_event({
|
||||
|
||||
- **Workflows detalhados:** `references/workflows-detalhados.md`
|
||||
- **MCP tools e constantes:** `references/mcp-tools-referencia.md`
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
name: cleanup-downloads
|
||||
description: Limpeza e triagem da pasta Transferências (Downloads). Verifica cada ficheiro individualmente, apaga descartáveis, classifica o restante por categoria. Usar quando "transferências", "downloads", "limpar downloads", "cleanup", "limpeza pasta".
|
||||
disable-model-invocation: true
|
||||
---
|
||||
|
||||
# Cleanup Downloads
|
||||
@@ -105,3 +104,15 @@ Após mover documentos financeiros (regra 3), lançar despesas via `/expense`:
|
||||
## Integração /today
|
||||
|
||||
Incluir contagem de ficheiros na pasta quando >10 ficheiros.
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -168,7 +168,7 @@ echo "Tunnel: $TUNNEL_PORT | Servidor: $ACTUAL_PORT"
|
||||
|
||||
### Check 11: Agentes sem permissoes bash
|
||||
|
||||
Invocar tool MCP: `mcp__paperclip__diag_agents_missing_permissions`
|
||||
Invocar tool MCP: `mcp__paperclip__diag_agents_without_skip_permissions`
|
||||
|
||||
- 0 = OK
|
||||
- 1+ = CRITICO (agentes vao ficar bloqueados ao executar bash — corrigir com `/clip-agent`)
|
||||
|
||||
@@ -122,3 +122,15 @@ Gerar alertas se:
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
---
|
||||
name: deep-research
|
||||
description: >
|
||||
Pesquisa profunda em 3 layers: Hub Obsidian (Layer 1) + NotebookLM análise (Layer 2) +
|
||||
Web/LightRAG externo (Layer 3). Para questões complexas que requerem síntese de múltiplas fontes.
|
||||
Upgrade do /research com NotebookLM integrado e RAG trinity completo.
|
||||
Usar quando: análise competitiva profunda, pesquisa mercado, due diligence, relatório estratégico.
|
||||
---
|
||||
|
||||
# /deep-research — Pesquisa Profunda com RAG Trinity
|
||||
|
||||
Pesquisa em 3 camadas com síntese final. Mais profundo que `/research`, mais estruturado que `/hub-search`.
|
||||
|
||||
---
|
||||
|
||||
## Quando Usar
|
||||
|
||||
| Situação | Skill Correcta |
|
||||
|---------|----------------|
|
||||
| "Onde está X no Hub?" | `/hub-search` |
|
||||
| "Analisa este documento" | `/research` |
|
||||
| "Pesquisa profunda + síntese de múltiplas fontes" | `/deep-research` ← este |
|
||||
| "Análise competitiva completa" | `/deep-research` + `/research competitive` |
|
||||
|
||||
---
|
||||
|
||||
## Protocolo (3 Layers)
|
||||
|
||||
### Layer 1 — Hub Obsidian (conhecimento interno)
|
||||
|
||||
```bash
|
||||
# 1a. Busca full-text no Hub
|
||||
obsidian search query="<TERMO>" format=json limit=10
|
||||
|
||||
# 1b. Se Obsidian não responde (offline), fallback via Grep
|
||||
grep -r "<TERMO>" /media/ealmeida/Dados/Hub/ --include="*.md" -l | head -20
|
||||
|
||||
# 1c. Verificar LightRAG para contexto interno
|
||||
mcp__lightrag__lightrag_query({
|
||||
query: "<TERMO>",
|
||||
mode: "hybrid"
|
||||
})
|
||||
```
|
||||
|
||||
**Critério de suficiência Layer 1:** Encontrou 3+ documentos relevantes com contexto concreto.
|
||||
- SE suficiente para questão simples → responder + registar fonte
|
||||
- SE questão requer análise profunda → continuar para Layer 2
|
||||
|
||||
### Layer 2 — NotebookLM (análise profunda)
|
||||
|
||||
Seleccionar notebook relevante com base no domínio:
|
||||
|
||||
| Domínio | Notebook ID |
|
||||
|---------|-------------|
|
||||
| Estratégia e Empreendedorismo | 79d43410-0e29-4be1-881d-84db6bdc239a |
|
||||
| Stack Tecnológico | [consultar mcp__notebooklm__ lista] |
|
||||
| Marketing e Vendas | [consultar mcp__notebooklm__ lista] |
|
||||
|
||||
```javascript
|
||||
// Consultar notebook relevante
|
||||
mcp__notebooklm__notebook_query({
|
||||
notebook_id: "<ID>",
|
||||
query: "<QUESTÃO ESPECÍFICA — mais precisa que a geral>"
|
||||
})
|
||||
```
|
||||
|
||||
**Critério de suficiência Layer 2:** NotebookLM retornou análise com citações específicas.
|
||||
- SE suficiente → sintetizar com Layer 1 + responder
|
||||
- SE requer dados externos → continuar para Layer 3
|
||||
|
||||
### Layer 3 — Web + LightRAG (conhecimento externo)
|
||||
|
||||
```javascript
|
||||
// 3a. LightRAG para KB externa (PDFs, transcripts)
|
||||
mcp__lightrag__lightrag_query({
|
||||
query: "<QUESTÃO>",
|
||||
mode: "global" // para análise de padrões amplos
|
||||
})
|
||||
|
||||
// 3b. Web search para dados actuais
|
||||
mcp__web-search__search({
|
||||
query: "<QUESTÃO> site:scholar.google.com OR filetype:pdf",
|
||||
num_results: 10
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Síntese Final
|
||||
|
||||
Após recolher de 2+ layers, sintetizar:
|
||||
|
||||
```markdown
|
||||
## Síntese — [Tópico]
|
||||
|
||||
**Fontes consultadas:** Layer 1 (Hub), Layer 2 (NotebookLM [Notebook X]), Layer 3 (Web/LightRAG)
|
||||
|
||||
### O que sabemos (interno)
|
||||
[Resumo Layer 1 — conhecimento já documentado]
|
||||
|
||||
### Análise profunda
|
||||
[Resumo Layer 2 — análise NotebookLM com citações]
|
||||
|
||||
### Contexto externo
|
||||
[Resumo Layer 3 — se consultado]
|
||||
|
||||
### Síntese e Recomendação
|
||||
[Cruzamento das layers — resposta directa à questão]
|
||||
|
||||
### Próximos Passos
|
||||
- [ ] Acção 1 derivada da pesquisa
|
||||
- [ ] Acção 2
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Self-Improving Loop
|
||||
|
||||
Após cada execução, registar preferências para melhorar futuras pesquisas:
|
||||
|
||||
```bash
|
||||
# Guardar aprendizagem em Hub
|
||||
echo "$(date '+%Y-%m-%d') — deep-research — [TÓPICO] — [O QUE FUNCIONOU/NÃO FUNCIONOU]" \
|
||||
>> /media/ealmeida/Dados/Hub/00-Inbox/research-preferences.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*Skill /deep-research v1.0 | 06-04-2026 | Eixo 7B — RAG Trinity + NotebookLM integrado*
|
||||
@@ -339,3 +339,15 @@ Output: [resultado esperado]
|
||||
Input: [caso complexo]
|
||||
Output: [resultado detalhado]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -440,3 +440,15 @@ Após concluir o documento:
|
||||
---
|
||||
|
||||
**Versão**: 1.0.0 | **Data**: 2026-03-06 | **Autor**: Descomplicar®
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
---
|
||||
name: hub-search
|
||||
description: >
|
||||
Pesquisa no vault Hub Obsidian com relevance scoring e backlinks.
|
||||
Layer 1 da arquitectura RAG trinity (CLI → NotebookLM → LightRAG).
|
||||
Usar quando: (1) pesquisar conteúdo no Hub por termo ou conceito,
|
||||
(2) encontrar notas relacionadas via backlinks, (3) localizar PROCs/QR/docs
|
||||
antes de executar tarefas, (4) verificar se existe documentação antes de criar.
|
||||
---
|
||||
|
||||
# /hub-search — Pesquisa no Hub (Layer 1 RAG)
|
||||
|
||||
Pesquisa rápida no vault Hub via Obsidian CLI. Requer Obsidian aberto.
|
||||
Fallback automático para Grep se Obsidian não estiver a correr.
|
||||
|
||||
---
|
||||
|
||||
## Uso
|
||||
|
||||
```
|
||||
/hub-search "termo"
|
||||
/hub-search "LightRAG configuração" --backlinks
|
||||
/hub-search "PROC-MCP" --files
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Workflow
|
||||
|
||||
### Passo 1 — Tentar via Obsidian CLI
|
||||
|
||||
```bash
|
||||
# Pesquisa básica
|
||||
obsidian search query="TERMO" format=json
|
||||
|
||||
# Com backlinks (recomendado para conceitos)
|
||||
obsidian search query="TERMO" format=json
|
||||
obsidian backlinks file="NOTA"
|
||||
|
||||
# Limitar resultados
|
||||
obsidian search query="TERMO" limit=10 format=json
|
||||
```
|
||||
|
||||
**Indicador de sucesso:** saída JSON com `results` array.
|
||||
**Indicador de falha:** mensagem `unable to find Obsidian` → ir para fallback.
|
||||
|
||||
### Passo 2 — Fallback: Grep no Hub
|
||||
|
||||
Se CLI falhar (Obsidian fechado):
|
||||
|
||||
```
|
||||
Grep "TERMO" /media/ealmeida/Dados/Hub/ --type md
|
||||
```
|
||||
|
||||
Adicionar contexto ao utilizador: "Obsidian não está a correr — usando busca directa nos ficheiros."
|
||||
|
||||
### Passo 3 — Apresentar resultados
|
||||
|
||||
**Formato de output:**
|
||||
|
||||
```markdown
|
||||
## Resultados: "[termo]"
|
||||
|
||||
**Fonte:** Obsidian CLI v1.12.7 | **Backlinks:** Sim/Não
|
||||
|
||||
### Encontrado em N notas
|
||||
|
||||
| Nota | Path | Relevância |
|
||||
|------|------|-----------|
|
||||
| [título] | `path/relativo.md` | Alta/Média/Baixa |
|
||||
|
||||
### Notas com backlinks para este termo
|
||||
- `nota-a.md` → referencia `nota-b.md`
|
||||
|
||||
### Relacionados sugeridos
|
||||
- [links relevantes encontrados nos resultados]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Regras
|
||||
|
||||
1. **Sempre tentar CLI primeiro** — é mais preciso (scoring semântico)
|
||||
2. **--include-backlinks por defeito** quando o termo é um conceito (não um comando)
|
||||
3. **Fallback silencioso** — não perguntar, só mencionar que usou Grep
|
||||
4. **Max 10 resultados** — se mais, mostrar top 10 por relevância
|
||||
5. **Paths relativos** na apresentação (ex: `04-Stack/02.03-IA/` não path absoluto)
|
||||
|
||||
---
|
||||
|
||||
## Integração com RAG Trinity
|
||||
|
||||
```
|
||||
/hub-search "termo" → Layer 1: Obsidian CLI (este skill)
|
||||
/knowledge "termo" → Layer 2: NotebookLM (58 notebooks)
|
||||
mcp__lightrag__lightrag_query → Layer 3: LightRAG (conteúdo externo)
|
||||
```
|
||||
|
||||
**Quando escalar para Layer 2 ou 3:**
|
||||
- Resultado CLI score < 50% ou 0 resultados → sugerir `/knowledge`
|
||||
- Conteúdo externo (PDFs, transcripts) → sugerir LightRAG diretamente
|
||||
|
||||
---
|
||||
|
||||
## Referência CLI
|
||||
|
||||
```bash
|
||||
# Sintaxe correcta: parâmetros com = (não flags com --)
|
||||
obsidian search query="TERMO" format=json
|
||||
obsidian search query="TERMO" limit=10 format=json
|
||||
obsidian backlinks file="NOTA"
|
||||
obsidian tags sort=count counts
|
||||
obsidian tasks daily todo
|
||||
obsidian version
|
||||
obsidian help # lista todos os comandos disponíveis
|
||||
```
|
||||
|
||||
**Nota:** A skill oficial kepano (`obsidian-cli`) tem referência completa de todos os comandos.
|
||||
|
||||
**Requer:** Obsidian aberto + CLI activado em Settings → General → Advanced
|
||||
**Wrapper:** `~/.local/bin/obsidian` (define XDG_RUNTIME_DIR Flatpak)
|
||||
**Docs:** `04-Stack/02.03-IA/Obsidian-CLI.md`
|
||||
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 06-04-2026 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
@@ -234,3 +234,15 @@ Quando invocado directamente (sem /today):
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -391,3 +391,15 @@ Checklist automática:
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 2026-02-13 | Plugin gestao | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -288,3 +288,15 @@ if (resultado.score < 50 || !resultado.encontrado) {
|
||||
|
||||
- `references/routing-guide.md` - Mapeamento detalhado com codigo de routing
|
||||
- Inventario completo: `~/.claude/projects/-media-ealmeida-Dados-Hub/memory/notebooklm-inventory.md`
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -150,3 +150,15 @@ Ou abrir a app e usar File > Open para navegar ate ao ficheiro.
|
||||
- **Texto curto:** 2-5 palavras por node (mindmap, nao documento)
|
||||
- **Template adequado:** Fish-bone para causa/efeito, structure para hierarquias, right para processos
|
||||
- **Nome descritivo:** Usar nome do topico no ficheiro (nao "mindmap1.km")
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -392,3 +392,15 @@ Auth guardada em: `~/.notebooklm-mcp-cli/profiles/<name>/auth.json`
|
||||
---
|
||||
|
||||
**Versão**: 1.0.0 | **Data**: 24-02-2026 | **Autor**: Descomplicar®
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
---
|
||||
name: office-hours
|
||||
description: >
|
||||
Persona YC que reframe problemas antes de escrever código. Desafia pressupostos,
|
||||
faz as perguntas difíceis que um investidor faria. Usar ANTES de qualquer implementação
|
||||
significativa. Baseado no gstack /office-hours. Eixo 2B.
|
||||
---
|
||||
|
||||
# /office-hours — Consulta YC antes de Codar
|
||||
|
||||
Persona: sócio de uma YC top-tier que passou 20 anos a ver startups falharem por resolver o problema errado.
|
||||
Objetivo: garantir que o que vais construir é o que deve ser construído.
|
||||
|
||||
---
|
||||
|
||||
## Quando Usar (OBRIGATÓRIO)
|
||||
|
||||
- Antes de implementar uma feature nova
|
||||
- Antes de refactoring significativo
|
||||
- Quando a solução parece óbvia demais
|
||||
- Quando o problema está mal definido
|
||||
- Quando o utilizador pediu X mas pode precisar de Y
|
||||
|
||||
**Anti-pattern:** Saltar para o código sem office-hours = construir a coisa certa de forma errada, ou a coisa errada certo.
|
||||
|
||||
---
|
||||
|
||||
## Protocolo
|
||||
|
||||
### Passo 1 — Escutar sem julgar
|
||||
|
||||
"O que estás a tentar resolver? Conta-me como se eu não soubesse nada do teu negócio."
|
||||
|
||||
Deixar o utilizador descrever o problema completamente. Não interromper. Tomar notas mentais dos seguintes sinais:
|
||||
- Soluções disfarçadas de problemas ("preciso de um botão que...")
|
||||
- Pressupostos não verificados ("os utilizadores querem...")
|
||||
- Scope excessivo ("e depois também...")
|
||||
- Urgência artificial ("precisa de estar pronto até...")
|
||||
|
||||
### Passo 2 — As 5 Perguntas
|
||||
|
||||
```
|
||||
1. "Por que é que este problema existe agora? O que mudou?"
|
||||
→ Detecta se é problema real ou hipotético
|
||||
|
||||
2. "Quem perde o emprego se este problema não for resolvido?"
|
||||
→ Identifica o owner real e urgência verdadeira
|
||||
|
||||
3. "O que acontece se não fizermos nada?"
|
||||
→ Valida se é crítico ou nice-to-have
|
||||
|
||||
4. "Já tentaste resolver isto de forma mais simples? O que aconteceu?"
|
||||
→ Evita over-engineering, descobre tentativas anteriores
|
||||
|
||||
5. "Se tivesses de demonstrar que isto funciona em 24h, o que farias?"
|
||||
→ Força a pensar em MVP mínimo viável
|
||||
```
|
||||
|
||||
### Passo 3 — Reframe (se necessário)
|
||||
|
||||
SE o problema apresentado é uma solução disfarçada:
|
||||
```
|
||||
"Percebo que queres [solução X]. Mas o problema que describes é [problema Y].
|
||||
Podemos resolver [Y] de forma mais simples: [alternativa Z].
|
||||
Queres explorar Z antes de construir X?"
|
||||
```
|
||||
|
||||
### Passo 4 — Aprovação ou Alternativa
|
||||
|
||||
```
|
||||
APROVADO se:
|
||||
- Problema claramente definido
|
||||
- Solução proposta é a mais simples
|
||||
- ROI claro (tempo poupado, receita gerada, risco eliminado)
|
||||
- Utilizador entende o trade-off
|
||||
|
||||
ALTERNATIVA se:
|
||||
- Há solução mais simples não considerada
|
||||
- O problema não está suficientemente validado
|
||||
- Scope excessivo para o valor gerado
|
||||
```
|
||||
|
||||
### Passo 5 — Output
|
||||
|
||||
```markdown
|
||||
## Office Hours — [Data]
|
||||
|
||||
**Problema original:** [o que o utilizador apresentou]
|
||||
**Problema real:** [reframe se necessário]
|
||||
**Decisão:** AVANÇAR | REFRAMED | ADIAR
|
||||
**Justificação:** [1-2 frases]
|
||||
**Próximo passo:** [acção concreta]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Exemplos de Reframe
|
||||
|
||||
| Pedido original | Reframe YC |
|
||||
|----------------|-----------|
|
||||
| "Preciso de um dashboard de métricas" | "O que decides diferente com o dashboard? Se nada, não precisas dele." |
|
||||
| "Quero migrar para microserviços" | "Qual é o problema do monolito actual? Quantos utilizadores tens?" |
|
||||
| "Refactoring completo do código" | "O que não consegues fazer agora por causa do código? Isso é o problema." |
|
||||
| "Automatizar este processo" | "Quanto tempo demora? Quantas vezes por semana? Vale a automação?" |
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*Skill /office-hours v1.0 | 06-04-2026 | Eixo 2B — gstack pattern*
|
||||
@@ -0,0 +1,111 @@
|
||||
---
|
||||
name: onboarding
|
||||
category: gestao
|
||||
description: "Checklist e automacao de onboarding de novo colaborador. Criacao de contas, documentacao, equipamento. Usar quando 'onboarding', 'novo colaborador', 'contratar', 'integrar pessoa', 'RH novo'."
|
||||
version: "1.0.0"
|
||||
created: 2026-04-07
|
||||
tools: [mcp__desk-crm-v3__create_task, mcp__desk-crm-v3__add_task_checklist_item, mcp__google-workspace__gmail_send_email]
|
||||
---
|
||||
|
||||
# Skill: /onboarding
|
||||
|
||||
Checklist e automacao de onboarding de novo colaborador. Baseado em PROC-Onboarding.md (RH-001).
|
||||
|
||||
---
|
||||
|
||||
## Referencia
|
||||
|
||||
Procedimento completo em: `Hub/06-Operacoes/Procedimentos/D4-RH/PROC-Onboarding.md`
|
||||
Esta skill executa os passos — o PROC define as regras.
|
||||
|
||||
---
|
||||
|
||||
## Processo
|
||||
|
||||
### 1. Recolher dados do novo colaborador
|
||||
|
||||
Perguntar ao utilizador:
|
||||
- **Nome completo**
|
||||
- **Email pessoal**
|
||||
- **Funcao/cargo**
|
||||
- **Data de inicio**
|
||||
- **Tipo:** colaborador / freelancer / estagiario
|
||||
- **Departamento:** D1-D7
|
||||
|
||||
### 2. Criar tarefa no Desk CRM
|
||||
|
||||
```
|
||||
mcp__desk-crm-v3__create_task({
|
||||
name: "Onboarding — [Nome]",
|
||||
project_id: 65,
|
||||
startdate: [data inicio],
|
||||
duedate: [data inicio + 5 dias uteis],
|
||||
priority: 2,
|
||||
description: "Onboarding de [Nome] como [Funcao] no departamento [Dept]"
|
||||
})
|
||||
```
|
||||
|
||||
### 3. Adicionar checklist de onboarding
|
||||
|
||||
Items obrigatorios (adicionar via `add_task_checklist_item`):
|
||||
|
||||
**Contas e acessos:**
|
||||
- [ ] Email @descomplicar.pt criado
|
||||
- [ ] Conta Desk CRM criada (staff)
|
||||
- [ ] Acesso Gitea (se tecnico)
|
||||
- [ ] Acesso Google Workspace
|
||||
- [ ] Password manager configurado
|
||||
|
||||
**Documentacao:**
|
||||
- [ ] Contrato assinado
|
||||
- [ ] NIF e dados fiscais recolhidos
|
||||
- [ ] Ficha de colaborador preenchida
|
||||
- [ ] RGPD — consentimento assinado
|
||||
|
||||
**Equipamento:**
|
||||
- [ ] PC/portatil atribuido
|
||||
- [ ] Acessos VPN/SSH (se aplicavel)
|
||||
- [ ] Ferramentas de trabalho instaladas
|
||||
|
||||
**Integracao:**
|
||||
- [ ] Reuniao de boas-vindas agendada
|
||||
- [ ] Apresentacao a equipa
|
||||
- [ ] Acesso a documentacao interna (Hub)
|
||||
- [ ] Mentor atribuido (primeiras 2 semanas)
|
||||
|
||||
### 4. Enviar email de boas-vindas (opcional)
|
||||
|
||||
Se o utilizador aprovar, enviar email via Google Workspace:
|
||||
|
||||
```
|
||||
Assunto: Bem-vindo(a) a Descomplicar — [Nome]
|
||||
Corpo: Template de boas-vindas com:
|
||||
- Data de inicio
|
||||
- Links uteis (Desk, email, Git)
|
||||
- Contacto do mentor
|
||||
- Primeiros passos
|
||||
```
|
||||
|
||||
### 5. Resumo
|
||||
|
||||
Apresentar ao utilizador:
|
||||
- Tarefa Desk criada (ID + link)
|
||||
- Checklist com N items
|
||||
- Proximos passos manuais (contrato, equipamento)
|
||||
|
||||
---
|
||||
|
||||
## Regras
|
||||
|
||||
- **Nunca criar contas automaticamente** — apenas checklist para lembrar
|
||||
- **Contrato e dados fiscais sao responsabilidade do Emanuel** — skill so lembra
|
||||
- **Email de boas-vindas requer aprovacao** antes de enviar
|
||||
- **Tipo freelancer** tem checklist reduzida (sem equipamento, sem VPN)
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
@@ -364,3 +364,15 @@ Checklist automática:
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 2026-02-13 | Plugin gestao | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -183,3 +183,15 @@ Gera revisao mensal completa e publica como comentario na tarefa Desk do cliente
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 2026-03-10 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -214,3 +214,15 @@ Relatórios podem ser guardados em:
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 2026-02-05 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
---
|
||||
name: research-pipeline
|
||||
description: >
|
||||
Pipeline de pesquisa RAG trinity: Layer 1 (Obsidian CLI Hub), Layer 2 (NotebookLM),
|
||||
Layer 3 (LightRAG externo). Orquestra as 3 camadas em sequência para pesquisas
|
||||
profundas. Usar quando /hub-search ou /knowledge isolados não são suficientes,
|
||||
quando o tema cruza conteúdo interno+externo, ou para research antes de executar
|
||||
tarefas complexas (Eixo 7B, Stack Q2 2026).
|
||||
---
|
||||
|
||||
# /research-pipeline — Pipeline Trinity de Pesquisa
|
||||
|
||||
Orquestra as 3 camadas RAG em sequência para obter contexto completo antes de executar tarefas.
|
||||
|
||||
```
|
||||
Layer 1: Obsidian CLI → conteúdo Hub (notas, PROCs, docs internas)
|
||||
Layer 2: NotebookLM → análise profunda (58 notebooks temáticos)
|
||||
Layer 3: LightRAG → conteúdo externo (1612 docs, PDFs, transcripts)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Uso
|
||||
|
||||
```
|
||||
/research-pipeline "tema ou pergunta"
|
||||
/research-pipeline "LightRAG configuração" --layers 1,2
|
||||
/research-pipeline "PROC-MCP" --quick (só Layer 1)
|
||||
/research-pipeline "n8n webhook setup" --deep (todas as layers)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Workflow
|
||||
|
||||
### Passo 1 — Layer 1: Hub via Obsidian CLI
|
||||
|
||||
```bash
|
||||
obsidian search "TERMO" --include-backlinks --format json
|
||||
```
|
||||
|
||||
**Se CLI offline:** fallback para Grep no Hub.
|
||||
|
||||
Registar: `L1_results`, `L1_score` (0-100, baseado em nº resultados).
|
||||
|
||||
### Passo 2 — Avaliar se Layer 2 é necessária
|
||||
|
||||
```
|
||||
SE L1_score >= 80 E query é operacional (PROC, QR, path):
|
||||
→ PARAR — resultado suficiente, retornar L1
|
||||
SE L1_score < 80 OU query é conceptual/analítica:
|
||||
→ Avançar para Layer 2
|
||||
```
|
||||
|
||||
### Passo 3 — Layer 2: NotebookLM (análise profunda)
|
||||
|
||||
Usar routing da skill `/knowledge` para seleccionar notebooks relevantes.
|
||||
|
||||
```javascript
|
||||
// Max 2 notebooks para performance
|
||||
mcp__notebooklm__notebook_query({ notebook_id, query })
|
||||
```
|
||||
|
||||
Registar: `L2_results`, `L2_confidence`.
|
||||
|
||||
### Passo 4 — Avaliar se Layer 3 é necessária
|
||||
|
||||
```
|
||||
SE query menciona PDFs, vídeos, transcripts, conteúdo externo:
|
||||
→ Avançar para Layer 3
|
||||
SE L2_confidence >= 70:
|
||||
→ PARAR — retornar L1+L2 combinados
|
||||
```
|
||||
|
||||
### Passo 5 — Layer 3: LightRAG (conteúdo externo)
|
||||
|
||||
```javascript
|
||||
mcp__lightrag__lightrag_query({
|
||||
query: "TERMO",
|
||||
mode: "hybrid" // combina vector + graph
|
||||
})
|
||||
```
|
||||
|
||||
### Passo 6 — Síntese e output
|
||||
|
||||
```markdown
|
||||
## Research: "[termo]"
|
||||
|
||||
### Hub (Layer 1) — [N notas encontradas]
|
||||
[Resultados mais relevantes com paths]
|
||||
|
||||
### NotebookLM (Layer 2) — [notebook usado]
|
||||
[Insights e contexto analítico]
|
||||
|
||||
### Externo (Layer 3) — [N docs]
|
||||
[Conteúdo complementar de fontes externas]
|
||||
|
||||
### Síntese
|
||||
[Resposta integrada das 3 camadas]
|
||||
|
||||
### Qualidade
|
||||
- L1: [N resultados]
|
||||
- L2: [confidence%] via [notebook]
|
||||
- L3: [N docs]
|
||||
- Tempo: ~[X]s
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Modos rápidos
|
||||
|
||||
| Flag | Layers activas | Uso |
|
||||
|------|---------------|-----|
|
||||
| `--quick` | L1 apenas | PROCs, paths, comandos |
|
||||
| (default) | L1 + L2 | Maioria das queries |
|
||||
| `--deep` | L1 + L2 + L3 | Investigação completa |
|
||||
|
||||
---
|
||||
|
||||
## Integração com outras skills
|
||||
|
||||
```
|
||||
Antes de /wp-dev → /research-pipeline --quick "PROC-WordPress"
|
||||
Antes de /cwp-* → /research-pipeline --quick "PROC-CWP"
|
||||
Antes de design → /research-pipeline "design guidelines descomplicar"
|
||||
Para /deep-research → /research-pipeline --deep (base de contexto)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Regras
|
||||
|
||||
1. **Layer 1 sempre primeiro** — mais rápido e frequentemente suficiente
|
||||
2. **Max 2 notebooks NotebookLM** por query (performance)
|
||||
3. **L3 só para conteúdo externo** — não duplicar com L1
|
||||
4. **Timeout L3:** 30s — se exceder, retornar L1+L2
|
||||
5. **Citar fonte** de cada resultado no output
|
||||
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 06-04-2026 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
@@ -0,0 +1,131 @@
|
||||
---
|
||||
name: review-corrections
|
||||
description: >
|
||||
Analisa correcções feitas pelo utilizador nas últimas sessões e gera sugestões
|
||||
de regras para CLAUDE.md. Lê ~/.claude-work/corrections.jsonl, agrupa por padrão,
|
||||
e propõe melhorias concretas. Usar semanalmente (via /schedule) ou quando há >5
|
||||
correcções acumuladas. Faz parte do loop de auto-melhoria (Eixo 3, Stack Q2 2026).
|
||||
---
|
||||
|
||||
# /review-corrections — Análise de Correcções e Auto-melhoria
|
||||
|
||||
Analisa padrões de correcção do utilizador para melhorar o CLAUDE.md autonomamente.
|
||||
|
||||
---
|
||||
|
||||
## Workflow
|
||||
|
||||
### Passo 1 — Ler ficheiro de correcções
|
||||
|
||||
```bash
|
||||
cat ~/.claude-work/corrections.jsonl
|
||||
```
|
||||
|
||||
Cada linha é um JSON:
|
||||
```json
|
||||
{"ts":"2026-04-06T14:30:00","type":"correction","prompt":"não assim, usa grep","session":"abc","cwd":"/Hub/"}
|
||||
```
|
||||
|
||||
### Passo 2 — Agrupar por padrão
|
||||
|
||||
Categorias de correcção:
|
||||
|
||||
| Padrão | Keywords | Acção sugerida |
|
||||
|--------|---------|----------------|
|
||||
| **Ferramenta errada** | "usa grep", "não uses bash", "usa read" | Regra de preferência de ferramenta |
|
||||
| **Língua/formato** | "em português", "sem emojis", "com acentos" | Regra de output |
|
||||
| **Abordagem** | "não assim", "de outra forma", "mais simples" | Regra de heurística |
|
||||
| **Scope** | "não faças isso", "não toques em", "só X" | Regra de limites |
|
||||
| **Verificação** | "verifica primeiro", "não inventar", "confirma" | Regra anti-alucinação |
|
||||
|
||||
### Passo 3 — Gerar sugestões de regras
|
||||
|
||||
Para cada padrão com ≥2 ocorrências, propor regra no formato:
|
||||
|
||||
```markdown
|
||||
**Regra candidata:**
|
||||
> [Padrão detectado N vezes] → Sugestão: "Nunca [X], sempre [Y]"
|
||||
|
||||
**Evidência:**
|
||||
- "prompt1" (data)
|
||||
- "prompt2" (data)
|
||||
|
||||
**Proposta CLAUDE.md:**
|
||||
| NN | [Texto da regra concisa] |
|
||||
```
|
||||
|
||||
### Passo 4 — Apresentar ao utilizador
|
||||
|
||||
```markdown
|
||||
## Revisão de Correcções — [data]
|
||||
|
||||
**Total analisado:** N correcções em M sessões
|
||||
**Padrões encontrados:** P
|
||||
|
||||
### Regras candidatas (aprovação necessária)
|
||||
|
||||
[lista de propostas]
|
||||
|
||||
### Limpar ficheiro?
|
||||
[ ] Sim — arquivar em ~/.claude-work/corrections-archive-YYYY-MM.jsonl
|
||||
[ ] Não — manter para próxima revisão
|
||||
```
|
||||
|
||||
### Passo 5 — Aplicar regras aprovadas
|
||||
|
||||
Se o utilizador aprovar uma regra:
|
||||
1. Abrir `~/.claude/CLAUDE.md`
|
||||
2. Adicionar na tabela de REGRAS CORE com número sequencial
|
||||
3. Confirmar: "Regra #NN adicionada."
|
||||
|
||||
Se o utilizador recusar:
|
||||
- Arquivar correcção com tag `rejected`
|
||||
- Não propor de novo
|
||||
|
||||
---
|
||||
|
||||
## Quando usar
|
||||
|
||||
- **Semanal** (via `/schedule` às segundas-feiras com `/today`)
|
||||
- **Manual** quando corrections.jsonl tem >5 entradas
|
||||
- **Após incidente** (mesmo erro 2+ vezes consecutivos)
|
||||
|
||||
---
|
||||
|
||||
## Integração auto-trigger
|
||||
|
||||
O hook `capture-corrections.sh` regista automaticamente em `~/.claude-work/corrections.jsonl`.
|
||||
Esta skill consome esse ficheiro e fecha o loop de auto-melhoria.
|
||||
|
||||
**Loop completo:**
|
||||
```
|
||||
Correcção utilizador
|
||||
→ capture-corrections.sh (regista)
|
||||
→ /review-corrections (analisa)
|
||||
→ CLAUDE.md (actualiza)
|
||||
→ Comportamento melhora
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Anti-patterns
|
||||
|
||||
- Nunca aplicar regras sem aprovação explícita do utilizador
|
||||
- Nunca propor regras com <2 ocorrências (pode ser caso isolado)
|
||||
- Nunca eliminar regras existentes — apenas adicionar ou reformular
|
||||
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 06-04-2026 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
@@ -338,3 +338,15 @@ mcp__desk-crm-v3__create_task ou update_task:
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 2026-03-10 | Plugin gestao | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
---
|
||||
name: task-state
|
||||
description: Gestão de estado persistente de tarefas entre sessões. Cria, actualiza e lê .task-state.md para tarefas complexas. Usar quando tarefa tem >2 sessões, múltiplos ficheiros, ou risco de perder contexto por compaction.
|
||||
context: fork
|
||||
---
|
||||
|
||||
# /task-state — Gestão de Estado de Tarefa
|
||||
|
||||
Persiste decisões, ficheiros e checkpoints entre sessões. Sobrevive a context compaction.
|
||||
|
||||
---
|
||||
|
||||
## Quando usar
|
||||
|
||||
**Usar quando:**
|
||||
- Tarefa com >1 sessão de trabalho
|
||||
- Múltiplos ficheiros a modificar (>3)
|
||||
- Risco de context compaction apagar contexto crítico
|
||||
- Tarefas que requerem aprovação por checkpoint
|
||||
|
||||
**Não usar quando:**
|
||||
- Tarefas de <30 minutos
|
||||
- Edições simples de 1-2 ficheiros
|
||||
- Respostas a perguntas
|
||||
|
||||
---
|
||||
|
||||
## Comandos
|
||||
|
||||
### /task-state init
|
||||
|
||||
Cria `.task-state.md` no directório actual baseado no template.
|
||||
|
||||
```bash
|
||||
# Verificar se já existe
|
||||
[ -f ".task-state.md" ] && echo "AVISO: já existe — usar /task-state update" && exit 1
|
||||
|
||||
# Copiar template
|
||||
cp ~/.claude-work/task-state-template.md .task-state.md
|
||||
echo "Criado: .task-state.md"
|
||||
```
|
||||
|
||||
Após criar, preencher os campos de Identificação manualmente.
|
||||
|
||||
### /task-state read
|
||||
|
||||
Lê e apresenta o estado actual — útil ao retomar uma tarefa interrompida:
|
||||
|
||||
```bash
|
||||
cat .task-state.md
|
||||
```
|
||||
|
||||
Ao retomar: ler "Próximo passo imediato" e "Bloqueantes actuais" primeiro.
|
||||
|
||||
### /task-state checkpoint N
|
||||
|
||||
Marca checkpoint N como concluído:
|
||||
|
||||
```bash
|
||||
# Exemplo: marcar checkpoint 2 como feito
|
||||
sed -i "s/- \[ \] Sub-issue 2:/- [x] Sub-issue 2:/" .task-state.md
|
||||
```
|
||||
|
||||
### /task-state update
|
||||
|
||||
Actualizar campos específicos ao longo do trabalho:
|
||||
- Adicionar ficheiros modificados à lista
|
||||
- Registar decisões tomadas
|
||||
- Actualizar "Próximo passo imediato"
|
||||
- Adicionar bloqueantes encontrados
|
||||
|
||||
---
|
||||
|
||||
## Padrão Vertical Plans
|
||||
|
||||
Diferença para planos monolíticos:
|
||||
|
||||
| Monolítico | Vertical Plans |
|
||||
|------------|----------------|
|
||||
| Lê o plano completo | Divide em sub-issues com checkpoint |
|
||||
| Implementa tudo | Implementa 1 sub-issue |
|
||||
| Verifica no final | Testa + valida antes de avançar |
|
||||
| Falha tarde | Falha cedo e barato |
|
||||
|
||||
**Regra:** Nunca avançar para sub-issue N+1 sem N estar testado e marcado.
|
||||
|
||||
---
|
||||
|
||||
## Integração com writing-plans
|
||||
|
||||
1. `/writing-plans` → cria plano com sub-issues e critérios de sucesso
|
||||
2. `/task-state init <nome>` → cria ficheiro de estado
|
||||
3. A cada sub-issue: implementar → testar → `/task-state checkpoint N` → commit
|
||||
4. Se sessão interromper: ler `.task-state.md` → continuar no "Próximo passo imediato"
|
||||
|
||||
---
|
||||
|
||||
## Template
|
||||
|
||||
O template está em `~/.claude-work/task-state-template.md`.
|
||||
Actualizar o template para reflectir necessidades do projecto actual.
|
||||
|
||||
---
|
||||
|
||||
## Contexto crítico — o que documentar
|
||||
|
||||
Documentar TUDO que está só na cabeça do Emanuel e que o agente precisa:
|
||||
- "Este servidor é produção — não tocar sem aprovação"
|
||||
- "O cliente X é sensível a preços — nunca mencionar concorrentes"
|
||||
- "A BD usa UTF-8 mas tem registos ISO-8859 antigos — cuidado com migrações"
|
||||
|
||||
**Fonte:** Regra #361 — agente apagou BD de produção porque "é live" estava só na cabeça do humano.
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
@@ -108,3 +108,15 @@ Apos listar tarefas, sugerir ate 6 accoes concretas:
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -250,3 +250,15 @@ const ALERT_HOURS = 4; // Alertar após 4h
|
||||
---
|
||||
|
||||
*Skill v2.0.0 | 2026-02-05 | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -233,6 +233,24 @@ Filename: `DD-MM-YYYY-checkup.md` (Regra #45: formato DD-MM-YYYY)
|
||||
|
||||
Repo agentes: `git.descomplicar.pt/ealmeida/claude_automations_dev`
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Self-Healing
|
||||
|
||||
Antes de executar, ler `~/.claude-work/healing/today.jsonl` (se existir). Cada linha é um padrão de erro conhecido:
|
||||
|
||||
```json
|
||||
{"date":"YYYY-MM-DD","issue":"descrição do problema","fix":"como evitar","source":"user|auto"}
|
||||
```
|
||||
|
||||
Se encontrares um padrão relevante ao contexto actual, aplica o fix preventivamente. Após cada erro ou correcção do utilizador nesta skill, **adicionar nova linha** ao healing log com o padrão aprendido.
|
||||
|
||||
---
|
||||
|
||||
*Skill v10.0.0 | 05-03-2026 | Descomplicar®*
|
||||
|
||||
|
||||
## Healing Log
|
||||
<!-- Registo automático de erros e correcções nesta skill -->
|
||||
|
||||
@@ -363,3 +363,15 @@ Ver secção "Referências e Documentação" em:
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 2026-02-13 | Plugin gestao | Descomplicar®*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -327,6 +327,32 @@ Perguntas ao analisar sessão:
|
||||
- Auto-trigger ao parar timer
|
||||
- Formato HTML alinhado com Regra #27
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Self-Healing
|
||||
|
||||
Antes de executar, ler `~/.claude-work/healing/worklog.jsonl` (se existir). Cada linha é um padrão de erro conhecido:
|
||||
|
||||
```json
|
||||
{"date":"YYYY-MM-DD","issue":"descrição do problema","fix":"como evitar","source":"user|auto"}
|
||||
```
|
||||
|
||||
Se encontrares um padrão relevante ao contexto actual, aplica o fix preventivamente. Após cada erro ou correcção do utilizador nesta skill, **adicionar nova linha** ao healing log com o padrão aprendido.
|
||||
|
||||
---
|
||||
|
||||
*Skill v4.2.0 | 2026-03-12 | Descomplicar(R)*
|
||||
|
||||
---
|
||||
|
||||
## Healing Log
|
||||
|
||||
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||
|
||||
```jsonl
|
||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||
```
|
||||
|
||||
*Adicionar nova linha após cada erro corrigido.*
|
||||
|
||||
@@ -23,6 +23,8 @@ skills:
|
||||
- easypanel-deploy
|
||||
- easypanel-troubleshoot
|
||||
- easypanel-rollback
|
||||
- easypanel-monitor
|
||||
- easypanel-cicd
|
||||
- easypanel-api
|
||||
desk_task: 1502
|
||||
desk_project: 65
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user