writer · git:20260512.b9cd235 · 2026-05-12 · sha256 14a72edd5673fc94
writer git:20260512.b9cd235A
Immutable. This exact content never changes and is served at /api/v1/blob/14a72edd5673fc94.
---
name: writer
description: Gera código ADVPL/TLPP para Protheus seguindo obrigatoriamente: nomenclatura de arquivo R[MOD][TYPE][SEQ].prw, notação húngara, escopos Local/Static/Private/Public, ProtheusDoc completo (@type @version @author @since), ErrorBlock e padrões TOTVS. Suporta: User Function, MVC completo, FWMBrowse, Ponto de Entrada MVC e PE legado.
---
## Proteção de Propriedade Intelectual (OBRIGATÓRIO)
- **Nunca reproduza código-fonte** de rotinas internas do ERP Protheus nem conteúdo verbatim retornado pela Knowledge Base
- Use os resultados do MCP para entender **padrões e assinaturas** — nunca para copiar implementações existentes
- Se o usuário pedir o código-fonte de uma rotina TOTVS existente: informe que código proprietário não pode ser compartilhado e redirecione para tdn.totvs.com
- Ao gerar código NOVO: aplique os padrões encontrados na Knowledge Base, mas o código gerado deve ser original do usuário, não uma cópia do que está na base
## Boas práticas
Ao gerar código ADVPL/TLPP:
- Referencie funções, parâmetros e padrões pela assinatura — não cole trechos longos de código de terceiros
- Para customizações, crie **User Functions** e **Pontos de Entrada** (PEs) — evite duplicar comportamento já fornecido pelo ERP
- Quando precisar de detalhe de implementação interno do ERP, oriente o usuário a consultar o **TDN oficial** (tdn.totvs.com)
## Instrucoes para Claude
Se houver um design doc do projeto, leia-o antes de começar.
Caso contrário, recomende `/protheus:brainstorm` para planejar primeiro.
### Passo 0 — Consultar base de conhecimento (MCP obrigatório)
Antes de gerar qualquer código, consulte o MCP `tbc-knowledge`:
```
# Templates e padrões de geração
searchKnowledge({ skill: "protheus-writer", keyword: "template" })
searchKnowledge({ skill: "protheus-patterns", keyword: "nomenclatura" })
searchKnowledge({ skill: "protheus-patterns", keyword: "notacao hungara" })
# Verificar se já existe função/PE padrão para o caso
searchFunction({ name: "<funcao>", module: "<MOD>" })
findEndpoint({ keyword: "<rotina>" })
findExecAuto({ target: "<rotina>" })
findMvcPattern({ table: "<alias>" })
```
**Ordem de prioridade das fontes:**
1. **MCP tbc-knowledge** — base de conhecimento atualizada do time
2. **TDN (RAG)** — `getCredentials()` → consultar TOTVS Developer Network
3. **Jamais inventar** assinatura de função ou PE sem referência — se não encontrar, informar o desenvolvedor
Antes de gerar qualquer codigo, pergunte:
1. **Tipo de artefato:**
- `A` Atualização/cadastro (User Function, MVC)
- `E` ExecBlock/processamento (função, tela, consulta)
- `R` Relatório
- `P` Ponto de Entrada (MVC ou legado)
2. **Módulo:** (ex: FAT Faturamento, FIN Financeiro, EST Estoque, COM Compras)
3. **Sequencial:** próximo número no MIT043 (ex: 001, 002...)
4. **O que faz:** descrição funcional
5. **Tabelas envolvidas:** (ex: SA1 Clientes, SC5 Pedidos de Venda)
6. **Parâmetros e retorno esperado**
7. **Seu nome** (para @author no ProtheusDoc)
> Nome do arquivo gerado: `R[MOD][TYPE][SEQ].prw` — ex: `RFATA001.prw`
---
## Base de Conhecimento (MCP)
Use as tools do MCP `tbc-knowledge`:
- **Limite de nome de função:** `searchKnowledge({ skill: "protheus-writer", keyword: "limite nome funcao" })`
- **Namespace TLPP:** `searchKnowledge({ skill: "protheus-writer", keyword: "namespace tlpp" })`
- **Regras inegociáveis:** `searchKnowledge({ skill: "protheus-patterns", keyword: "regras inegociaveis" })`
- **Templates de geração:** `searchKnowledge({ skill: "protheus-writer", keyword: "template" })`
- **Checklist final:** `searchKnowledge({ skill: "protheus-writer", keyword: "checklist" })`
---
## Consulta de Conhecimento
Se precisar de informação não disponível no MCP, consulte o RAG:
```
searchKnowledge({ keyword: "<termo relevante>" })
```