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**.
|
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
|
## Contexto
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ Repositórios Gitea:
|
|||||||
acidaos-dashboard → Next.js Dashboard
|
acidaos-dashboard → Next.js Dashboard
|
||||||
|
|
||||||
Runners:
|
Runners:
|
||||||
self-hosted @ mcp-hub.descomplicar.pt
|
self-hosted @ gateway.descomplicar.pt
|
||||||
Labels: [self-hosted, linux, rust, node]
|
Labels: [self-hosted, linux, rust, node]
|
||||||
|
|
||||||
Deploy target:
|
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
|
**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
|
**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
|
**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
|
**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
|
- **[references/endpoints.md](references/endpoints.md)** - Catálogo completo de endpoints
|
||||||
- **Docs oficiais:** https://www.moloni.pt/dev/endpoints/
|
- **Docs oficiais:** https://www.moloni.pt/dev/endpoints/
|
||||||
- **Sandbox:** https://www.moloni.pt/dev/sandbox/
|
- **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®*
|
*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®*
|
*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®*
|
*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®*
|
*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®*
|
*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®*
|
*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*
|
*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
|
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
|
user-invocable: false
|
||||||
allowed-tools: Read, Glob, Grep, ToolSearch
|
allowed-tools: Read, Glob, Grep, ToolSearch
|
||||||
---
|
---
|
||||||
|
|
||||||
# Agent Context Injector
|
# 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:
|
1. **Hook SessionStart** (`~/.claude/hooks/agent-context-refresh.sh`) calcula hash dos inputs
|
||||||
- Um subagente é iniciado via Task tool
|
2. Se hash mudou → executa `~/.claude/scripts/regenerate-agent-context.py`
|
||||||
- Contexto precisa ser enriquecido com recursos do agente
|
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
|
| Ficheiro | Funcao |
|
||||||
- Consultar mapeamento agente → recursos na BD
|
|----------|--------|
|
||||||
- Gerar lista de MCPs disponíveis para o agente
|
| `~/.claude/scripts/regenerate-agent-context.py` | Script principal de regeneracao |
|
||||||
- Gerar lista de skills relevantes
|
| `~/.claude/hooks/agent-context-refresh.sh` | Hook SessionStart com staleness |
|
||||||
- Incluir datasets Dify para consulta automática
|
| `~/.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
|
## Dados de entrada
|
||||||
- Calcular tokens do contexto gerado
|
|
||||||
- Priorizar recursos por relevância
|
|
||||||
- Truncar se exceder limite (~800 tokens)
|
|
||||||
- Cache de contextos frequentes
|
|
||||||
|
|
||||||
### 3. Dynamic Injection
|
- **Agentes:** `~/.claude/agents/*.md` — frontmatter com `domain`, `skills`
|
||||||
- Adicionar contexto ao prompt do agente
|
- **MCPs:** `~/.claude/_resources/mcps.json` — lista com `id`, `name`, `category`
|
||||||
- Incluir instruções de uso dos recursos
|
- **Domain map:** `~/.claude/_resources/domain-mcp-map.json` — primary/recommended por domain
|
||||||
- Configurar auto-consult para datasets
|
- **Skills:** `descomplicar-plugins/*/skills/*/SKILL.md` — frontmatter com `name`, `description`
|
||||||
|
|
||||||
## Template de Contexto
|
## Performance
|
||||||
|
|
||||||
```markdown
|
| Cenario | Tempo |
|
||||||
## Recursos Disponíveis
|
|---------|-------|
|
||||||
|
| Sem mudancas (hash match) | ~66ms |
|
||||||
|
| Com regeneracao (61 agentes) | ~2-3s |
|
||||||
|
|
||||||
### MCPs Activos
|
## Manutencao
|
||||||
$MCP_LIST
|
|
||||||
- Usar proactivamente para operações relevantes
|
|
||||||
|
|
||||||
### Skills Recomendadas
|
- **Adicionar MCP:** actualizar `mcps.json` e `domain-mcp-map.json` → proximo SessionStart regenera
|
||||||
$SKILLS_LIST
|
- **Adicionar skill:** criar SKILL.md no plugin → proximo SessionStart regenera
|
||||||
- Invocar quando tarefa corresponder
|
- **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)
|
## Tarefa Desk
|
||||||
$DATASETS_LIST
|
|
||||||
- AUTO-CONSULT: Consultar ANTES de responder
|
|
||||||
- Query template: "$QUERY_TEMPLATE"
|
|
||||||
|
|
||||||
### Plugins
|
#1996 — Sistema injeccao Skills e MCPs nos agentes
|
||||||
$PLUGINS_LIST
|
|
||||||
- Comandos disponíveis: $PLUGIN_COMMANDS
|
---
|
||||||
|
|
||||||
|
## Healing Log
|
||||||
|
|
||||||
|
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||||
|
|
||||||
|
```jsonl
|
||||||
|
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Workflow
|
*Adicionar nova linha após cada erro corrigido.*
|
||||||
|
|
||||||
```
|
|
||||||
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
|
|
||||||
|
|||||||
@@ -283,3 +283,14 @@ Component Generator:
|
|||||||
- Não cria componentes duplicados (verifica slug existente)
|
- Não cria componentes duplicados (verifica slug existente)
|
||||||
- Requer conexão MySQL para registo em cr_*
|
- Requer conexão MySQL para registo em cr_*
|
||||||
- Não modifica componentes existentes (usar Edit tool)
|
- 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_*
|
- Backup não inclui tabelas não-cr_*
|
||||||
- Optimização pode demorar em tabelas grandes (>1M registos)
|
- Optimização pode demorar em tabelas grandes (>1M registos)
|
||||||
- Não substitui backups gerais do Desk CRM
|
- 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
|
- Detecção de órfãos limitada a tabelas cr_* conhecidas
|
||||||
- Não corrige problemas automaticamente (apenas reporta)
|
- Não corrige problemas automaticamente (apenas reporta)
|
||||||
- Telemetria depende de hooks activos e funcionais
|
- 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
|
**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*
|
*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 modifica componentes (apenas lê e reporta)
|
||||||
- Não cria componentes (usar component-generator)
|
- Não cria componentes (usar component-generator)
|
||||||
- Não executa correções automáticas (usar /descomplicar:upgrade)
|
- 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
|
- Análise de impacto limitada a relacionamentos directos
|
||||||
- Não propaga alterações automaticamente (requer confirmação)
|
- Não propaga alterações automaticamente (requer confirmação)
|
||||||
- Depende de consistência das tabelas cr_* na BD
|
- 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
|
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
|
disable-model-invocation: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# /auto-expense v1.0
|
# /auto-expense v1.1
|
||||||
|
|
||||||
Cria despesas automaticamente a partir de facturas detectadas pelo IMAP e tickets.
|
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:
|
3. EXTRAIR DO HTML:
|
||||||
- Valor (padroes: $XX.XX, XX,XX EUR, USD XX.XX, Total: XX.XX)
|
- 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
|
- Data da factura
|
||||||
|
|
||||||
4. VERIFICAR DUPLICADO (2 camadas):
|
|
||||||
Camada 1 - Desk CRM:
|
|
||||||
Pesquisar: mesmo fornecedor + mesmo valor (±0.05) + mesma data (±3 dias)
|
|
||||||
Se match → NAO criar, registar como duplicado
|
|
||||||
|
|
||||||
5. CRIAR DESPESA:
|
|
||||||
mcp__desk-crm-v3__create_expense({
|
|
||||||
category: [cat_id da tabela],
|
|
||||||
amount: [valor],
|
|
||||||
date: [data factura YYYY-MM-DD],
|
|
||||||
expense_name: "[Fornecedor] - [Referencia]",
|
|
||||||
note: "Auto-criado via /auto-expense",
|
|
||||||
currency: [2=USD ou 3=EUR],
|
|
||||||
tax: [0 ou 1],
|
|
||||||
send_invoice_to_customer: 0
|
|
||||||
})
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Passo 3: PDF (se existir anexo)
|
### 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
|
||||||
|
|
||||||
|
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 5: PDF (se existir anexo)
|
||||||
|
|
||||||
```
|
```
|
||||||
a. GUARDAR LOCAL:
|
a. GUARDAR LOCAL:
|
||||||
@@ -100,14 +129,14 @@ c. REGISTAR no Desk BD:
|
|||||||
d. LIMPAR temporarios
|
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
|
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
|
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:
|
Escrever em ~/.claude-work/today-expenses-{date}.json:
|
||||||
@@ -115,12 +144,15 @@ Escrever em ~/.claude-work/today-expenses-{date}.json:
|
|||||||
"despesas_criadas": [
|
"despesas_criadas": [
|
||||||
{"id": 1180, "fornecedor": "MEO", "valor": 76.26, "moeda": "EUR", "referencia": "FT A/861215955"}
|
{"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": [
|
"flagged": [
|
||||||
{"fornecedor": "Desconhecido", "nota": "TOConline - emitente desconhecido: XPTO LDA"}
|
{"fornecedor": "Desconhecido", "nota": "TOConline - emitente desconhecido: XPTO LDA"}
|
||||||
],
|
],
|
||||||
"erros": [],
|
"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)
|
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)
|
### Duplicados Detectados (Y)
|
||||||
- [Fornecedor] [Valor] - ja existe como #ID
|
| Fornecedor | Ref | ID Existente | Camada |
|
||||||
|
|-----------|-----|-------------|--------|
|
||||||
|
|
||||||
### Pendentes Revisao (Z)
|
### Pendentes Revisao (Z)
|
||||||
- [Plataforma] - emitente desconhecido: [nome]
|
- [Plataforma] - emitente desconhecido: [nome]
|
||||||
@@ -179,11 +212,26 @@ reference_no → coluna correcta (NAO "reference")
|
|||||||
|
|
||||||
- NUNCA usar currency=1 (nao existe)
|
- NUNCA usar currency=1 (nao existe)
|
||||||
- NUNCA converter USD para EUR (manter original com currency=2)
|
- 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 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 ler o email/ticket HTML para extrair valor real (nunca assumir)
|
||||||
- SEMPRE incluir reference_no quando disponivel
|
- 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
|
3. Executar workflow integrado
|
||||||
Output: [resultado completo com referências]
|
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
|
3. Executar workflow integrado
|
||||||
Output: [resultado completo com referências]
|
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
|
**Criado:** 2026-01-28
|
||||||
**Actualizado:** 2026-01-28
|
**Actualizado:** 2026-01-28
|
||||||
**Motivo:** Prevenção de erros CRM após incidente de duplicação
|
**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
|
- Distinção Lead vs Customer
|
||||||
- Proposal vs Estimate
|
- 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®*
|
*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
|
### v1.0.0
|
||||||
- Versão inicial
|
- 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®*
|
*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
|
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
|
# /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
|
- Bypass valido apenas para: AT, Salarios, transferencias bancarias
|
||||||
2. LER O PDF: Extrair dados reais do documento
|
2. LER O PDF: Extrair dados reais do documento
|
||||||
- NUNCA copiar valor de um PDF para outro
|
- NUNCA copiar valor de um PDF para outro
|
||||||
|
- EXTRAIR reference_no (numero factura) — OBRIGATORIO para dedup
|
||||||
3. OBRIGATORIO: get_expense_categories(with_stats=true)
|
3. OBRIGATORIO: get_expense_categories(with_stats=true)
|
||||||
4. Identificar categoria correcta na lista
|
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>")
|
- get_expenses(search: "<fornecedor>")
|
||||||
- Mesmo fornecedor + valor + data = duplicado
|
- Mesmo fornecedor + valor (±0.05) + data (±3 dias) = duplicado
|
||||||
- Mesmo numero factura = 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:
|
6. Recolher dados:
|
||||||
- category_id, amount, currency (EUR=3, USD=2), date (YYYY-MM-DD)
|
- 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
|
- note (incluir numero factura), send_invoice_to_customer = 0
|
||||||
- Opcionais: client_id, project_id, billable, tax
|
- Opcionais: client_id, project_id, billable, tax
|
||||||
7. CONFIRMAR com utilizador (mostrar resumo)
|
7. CONFIRMAR com utilizador (mostrar resumo)
|
||||||
8. create_expense
|
8. create_expense (INCLUIR reference_no no payload)
|
||||||
9. UPLOAD PDF ao Desk via SFTP:
|
9. UPLOAD PDF ao Desk via SFTP:
|
||||||
a. mkdir -p no servidor: /home/ealmeida/desk.descomplicar.pt/uploads/expenses/<id>
|
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)
|
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`
|
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:**
|
**Despesas:**
|
||||||
4. Criar despesa sem category_id
|
4. Criar despesa sem category_id
|
||||||
5. Nao validar data (formato YYYY-MM-DD)
|
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:**
|
**Valores de PDFs:**
|
||||||
7. Assumir que ficheiros com nomes semelhantes tem o mesmo valor
|
8. Assumir que ficheiros com nomes semelhantes tem o mesmo valor
|
||||||
8. SEMPRE ler CADA PDF individualmente para extrair o valor real
|
9. SEMPRE ler CADA PDF individualmente para extrair o valor real
|
||||||
|
|
||||||
**Tickets:**
|
**Tickets:**
|
||||||
9. Processar ticket sem verificar anexos PDF
|
10. Processar ticket sem verificar anexos PDF
|
||||||
10. Assumir que ticket com recibo = despesa nao lancada
|
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
|
- [ ] Listar categorias existentes
|
||||||
- [ ] Validar categoria correcta
|
- [ ] Validar categoria correcta
|
||||||
|
- [ ] Extrair reference_no do PDF/factura
|
||||||
|
- [ ] Verificar duplicados (3 camadas)
|
||||||
- [ ] Confirmar dados com utilizador
|
- [ ] Confirmar dados com utilizador
|
||||||
- [ ] Usar formato data YYYY-MM-DD
|
- [ ] Usar formato data YYYY-MM-DD
|
||||||
|
- [ ] Incluir reference_no no create_expense
|
||||||
- [ ] Incluir nota descritiva
|
- [ ] 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/ticket-processing.md` - Protocolo completo de processamento de tickets
|
||||||
- `references/changelog.md` - Historico de alteracoes
|
- `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®*
|
*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)
|
**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
|
**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®*
|
*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®*
|
*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®
|
**Versao**: 1.0.0 | **Data**: 2026-03-10 | **Autor**: Descomplicar®
|
||||||
*Paletas detalhadas por contexto: `references/color-palettes.md`*
|
*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
|
**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
|
1. Desactivar default: `/chrome` -> desactivar
|
||||||
2. Usar `claude --chrome` apenas quando necessario
|
2. Usar `claude --chrome` apenas quando necessario
|
||||||
3. Preferir WebFetch para leituras simples de paginas publicas
|
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]
|
Input: [caso complexo]
|
||||||
Output: [resultado detalhado]
|
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
|
**Skill v1.1** | 12-03-2026 | Descomplicar® | Renomeado de /security-check para /dep-audit
|
||||||
**Security First** - Zero vulnerabilities ou documentadas
|
**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®
|
**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®*
|
*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®
|
**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®
|
**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
|
**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/composition-patterns.md` - Compound components, providers, dependency injection (Vercel Engineering)
|
||||||
- `references/custom-hooks.md` - useDebounce, useLocalStorage, useFetch com codigo completo
|
- `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/anthropic-patterns.md` para exemplos detalhados de progressive disclosure.
|
||||||
Ver `references/descomplicar-standards.md` para exemplos de skills Descomplicar bem estruturadas.
|
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®
|
**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®
|
**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",
|
"name": "gestao",
|
||||||
"description": "Project management, time tracking, daily checkups, worklogs, reflections, knowledge management, archiving and compliance auditing. Backed by NotebookLM notebooks.",
|
"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": {
|
"author": {
|
||||||
"name": "Descomplicar - Crescimento Digital",
|
"name": "Descomplicar - Crescimento Digital",
|
||||||
"url": "https://descomplicar.pt"
|
"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.
|
padrões, sugere optimizações. Auto-trigger >20 tool calls.
|
||||||
role: Auto-reflexão e melhoria contínua do sistema
|
role: Auto-reflexão e melhoria contínua do sistema
|
||||||
domain: Dev
|
domain: Dev
|
||||||
model: sonnet
|
model: haiku
|
||||||
tools: Read, Write, Edit, Glob, ToolSearch
|
tools: Read, Write, Edit, Glob, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
|||||||
@@ -132,3 +132,15 @@ exit $EXIT_CODE
|
|||||||
---
|
---
|
||||||
|
|
||||||
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*
|
*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]
|
Input: [caso complexo]
|
||||||
Output: [resultado detalhado]
|
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`
|
- **Workflows detalhados:** `references/workflows-detalhados.md`
|
||||||
- **MCP tools e constantes:** `references/mcp-tools-referencia.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
|
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".
|
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
|
# Cleanup Downloads
|
||||||
@@ -105,3 +104,15 @@ Após mover documentos financeiros (regra 3), lançar despesas via `/expense`:
|
|||||||
## Integração /today
|
## Integração /today
|
||||||
|
|
||||||
Incluir contagem de ficheiros na pasta quando >10 ficheiros.
|
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
|
### 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
|
- 0 = OK
|
||||||
- 1+ = CRITICO (agentes vao ficar bloqueados ao executar bash — corrigir com `/clip-agent`)
|
- 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®*
|
*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]
|
Input: [caso complexo]
|
||||||
Output: [resultado detalhado]
|
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®
|
**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®*
|
*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®*
|
*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
|
- `references/routing-guide.md` - Mapeamento detalhado com codigo de routing
|
||||||
- Inventario completo: `~/.claude/projects/-media-ealmeida-Dados-Hub/memory/notebooklm-inventory.md`
|
- 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)
|
- **Texto curto:** 2-5 palavras por node (mindmap, nao documento)
|
||||||
- **Template adequado:** Fish-bone para causa/efeito, structure para hierarquias, right para processos
|
- **Template adequado:** Fish-bone para causa/efeito, structure para hierarquias, right para processos
|
||||||
- **Nome descritivo:** Usar nome do topico no ficheiro (nao "mindmap1.km")
|
- **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®
|
**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®*
|
*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®*
|
*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®*
|
*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®*
|
*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®*
|
*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®*
|
*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`
|
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®*
|
*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®*
|
*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
|
- Auto-trigger ao parar timer
|
||||||
- Formato HTML alinhado com Regra #27
|
- 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)*
|
*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-deploy
|
||||||
- easypanel-troubleshoot
|
- easypanel-troubleshoot
|
||||||
- easypanel-rollback
|
- easypanel-rollback
|
||||||
|
- easypanel-monitor
|
||||||
|
- easypanel-cicd
|
||||||
- easypanel-api
|
- easypanel-api
|
||||||
desk_task: 1502
|
desk_task: 1502
|
||||||
desk_project: 65
|
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