From plugadvpl
Resolves MsExecAuto indirection in ADVPL source code, inferring touched TOTVS tables, routines, and modules via catalog cross-referencing. Useful for auditing Protheus customizations.
How this skill is triggered — by the user, by Claude, or both
Slash command
/plugadvpl:execautofiltrosThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Killer feature do v0.4.1** (Universo 3 — Rastreabilidade Feature B). Resolve a indireção do `MsExecAuto({|x,y,z| MATA410(x,y,z)}, ...)` e cruza com catálogo TOTVS pra **inferir tabelas tocadas indiretamente**.
/plugadvpl:execautoKiller feature do v0.4.1 (Universo 3 — Rastreabilidade Feature B). Resolve a indireção do MsExecAuto({|x,y,z| MATA410(x,y,z)}, ...) e cruza com catálogo TOTVS pra inferir tabelas tocadas indiretamente.
Antes do v0.4.1, arch ABCCOMBO.prw mostrava tabelas: [] mesmo o fonte chamando MsExecAuto({|x,y,z| MATA410(x,y,z)}, aCab, aIt, 3) — que é inclusão de Pedido de Venda e portanto toca SC5 + SC6. Agora:
$ plugadvpl arch ABCCOMBO.prw
tabelas: []
tabelas_via_execauto: true
tabelas_via_execauto_resolvidas: ["SC5", "SC6", "SF4", "SB1"] ← novo
E o comando dedicado:
$ plugadvpl execauto --arquivo ABCCOMBO.prw
arquivo funcao linha routine module op tabelas
ABCCOMBO.prw ABCCOMBO 621 MATA410 SIGAFAT inclusao SC5,SC6,SF4,SB1
/plugadvpl:execauto [--routine <nome>] [--modulo <SIGAFAT>]
[--arquivo <basename>] [--op inc|alt|exc]
[--dynamic|--no-dynamic]
--routine / -r — filtra por rotina TOTVS (MATA410, FINA050, ...)--modulo / -m — filtra por módulo (SIGAFAT, SIGACOM, SIGAFIN, SIGACTB, SIGAEEC, SIGAEST, SIGAPCP, SIGATMS)--arquivo / -a — filtra por arquivo (basename, case-insensitive)--op / -o — filtra por operação: inc (3, inclusão), alt (4, alteração), exc (5, exclusão)--dynamic — só chamadas não-resolvíveis (&(cVar), codeblock vazio, etc); --no-dynamic excluiuvx [email protected] --format md execauto $ARGUMENTS
Para agente IA: prefira
--format md(sem truncamento). DefaulttableRich trunca colunas. Flag global vem antes do subcomando.
/plugadvpl:execauto — lista todas as chamadas do projeto/plugadvpl:execauto --routine MATA410 --op inc — quem inclui Pedido de Venda/plugadvpl:execauto --modulo SIGAFIN — todas as integrações com financeiro/plugadvpl:execauto --arquivo ABCCOM14.prw — chamadas desse fonte/plugadvpl:execauto --dynamic — calls não-resolvíveis (precisam revisão manual)/plugadvpl:execauto --op exc — todas as exclusões automáticas (auditoria)| Campo | Significado |
|---|---|
arquivo | fonte que tem a chamada |
funcao | função-pai onde foi detectada (resolved via chunks) |
linha | linha exata do MsExecAuto( |
routine | rotina TOTVS chamada (MATA410, etc) ou (dynamic) |
module | módulo TOTVS resolvido pelo catálogo (SIGAFAT, ...) |
op | inclusao/alteracao/exclusao ou número raw |
tabelas | tabelas resolvidas pelo catálogo (primary + secondary) |
snippet | linha do match (truncada a 80 chars no display; --format json mostra completa) |
Campos extras só visíveis em --format json:
| Campo | Significado |
|---|---|
routine_type | cadastro/movimento |
op_code | inteiro raw (3/4/5/outros) |
tables_resolved | lista (vs string tabelas na tabela) |
dynamic_call | bool — true se rotina não-resolvível |
arg_count | num args do codeblock |
25 rotinas indexadas no MVP em cli/plugadvpl/lookups/execauto_routines.json:
| Módulo | Rotinas |
|---|---|
| SIGAFAT | MATA050, MATA410, MATA460, MATA461 |
| SIGACOM | MATA103, MATA110, MATA120, MATA125, MATA150 |
| SIGAFIN | MATA030, FINA040, FINA050, FINA070, FINA080 |
| SIGAEST | MATA010, MATA075, MATA180, MATA220, MATA261, MATA310, MATA311 |
| SIGAPCP | MATA242 |
| SIGACTB | CTBA102 |
| SIGAEEC | EECAP100 |
| SIGATMS | TMSA500 |
Rotina não no catálogo? Ainda é detectada (routine populado) mas com module=null e tabelas=[]. PRs adicionando rotinas novas são bem-vindos — só editar execauto_routines.json, sem mudar código.
Auditoria de exclusões automáticas
/plugadvpl:execauto --op exc — lista TODAS as MsExecAuto({...}, ..., 5) do projeto. Útil pra rever se há exclusão sem confirmação/log.
Mapeamento de integrações por módulo
/plugadvpl:execauto --modulo SIGAFIN — quais fontes geram títulos no Contas a Pagar/Receber automaticamente?
Cobertura real de tabelas (cross-ref com arch)
arch X.prw mostra tabelas: []? Cheque tabelas_via_execauto_resolvidas no mesmo output ou rode execauto --arquivo X.prw pra ver detalhe por chamada.
Revisão de chamadas dinâmicas
/plugadvpl:execauto --dynamic — calls que o parser não conseguiu resolver (rotina via &(cVar) ou variável armazenada). Esses casos ficam fora da inferência de tabelas — vale revisar manualmente.
Migração de rotina TOTVS (deprecation)
TOTVS depreciou MATA410 → migrar pra MATA468? /plugadvpl:execauto --routine MATA410 lista tudo que precisa atualizar.
/plugadvpl:arch — agora expõe tabelas_via_execauto_resolvidas: list[str] agregando tabelas inferidas. O campo bool tabelas_via_execauto continua (não-breaking)./plugadvpl:tables — para ver tabelas escritas/lidas DIRETAMENTE pelo fonte. ExecAuto fica fora porque é indireção — use execauto específico./plugadvpl:workflow (Feature A) — workflows + schedules + jobs + mail. Rotinas via ExecAuto frequentemente são chamadas dentro de jobs (/plugadvpl:workflow --kind job_standalone)./plugadvpl:lint — algumas chamadas ExecAuto erradas (parametros faltando) podem disparar lint. Cruzar quando relevante./plugadvpl:callers — pra ver QUEM chama o fonte que tem ExecAuto (chain reversa: caller → este_fonte → MsExecAuto → MATA410 → SC5/SC6).bExec := {|x,y| MATA410(x,y)}; MsExecAuto(bExec, ...). Marca como dynamic_call=true, routine=null. Resolução exigiria data-flow analysis (fora do escopo MVP).MsExecAuto({|x,y,z| &(cRot).(x,y,z)}, ...). Mesma flag dynamic_call=true. Raro nos customizados que vimos.routine é populado mas module=null e tabelas=[]. Solução: adicionar entry em execauto_routines.json.op_code por convenção — extraído do último arg numérico literal. Se a rotina recebe nOpc via variável (nOpc := 3; MsExecAuto(..., nOpc)), fica null./plugadvpl:arch <arquivo> — visão geral incluindo tabelas_via_execauto_resolvidas/plugadvpl:find <routine> — abre a rotina TOTVS (se for User Function customizada)/plugadvpl:tables — tabelas tocadas diretamente (complementa o que execauto mostra como indireto)npx claudepluginhub jonipraia/plugadvpl --plugin plugadvplProduces a deterministic dossier of an ADVPL routine — identity, tables, call graph — and verifies each symbol against an index without using an LLM.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.