SAP Workflow Pipeline — Spec → Transport
Pipeline de 8 estágios: spec → análise → proposta → review → implementação → lint → crew analysis → transport gate. Integrado ao SAP Business Workflow: BOR object types, eventos, receivers e gestão de status.
Pré-requisitos
- Python 3.8+ (
scripts/sap_router.py) - Node.js 18+ com
@abaplint/cliinstalado - ADT MCP conectado (arc-1 / aibap / mcp-abap-adt)
- SAP system acessível (DEV) para deploy e activation
openpyxlse usando XLSX:pip install openpyxl- Conhecimento de BOR: object types, eventos, methods (ver Referência RAG abaixo)
Pipeline — Comandos Copiáveis
# Pipeline completo (8 estágios, ~50K tokens, 3-5 min)
python scripts/sap_router.py pipeline --spec requirements.md --module auto
# Fast mode: análise → implementação → lint (pula crew analysis, ~15K tokens)
python scripts/sap_router.py pipeline --spec requirements.md --mode fast
# Dry run: analisa spec, gera proposta, não escreve código
python scripts/sap_router.py pipeline --spec requirements.md --dry-run
# Resume a partir de estágio específico (após corrigir issues)
python scripts/sap_router.py pipeline --spec requirements.md --resume-from stage4
Estágios do Pipeline
SPEC → 1.Análise → 2.Proposta → 3.Review1 → 4.Implementação
→ 5.Lint → 6.CrewAnalysis → 7.Review2 → 8.TransportGate → DONE
- Estágio 1 — Análise: parseia spec, identifica módulo (MM/SD/FI/QM/PP/...),
extrai BAPIs, tabelas, autorizações. Output:
MODULE_ANALYSIS.md - Estágio 2 — Proposta: 7-agent crew gera design técnico (classes, DDIC,
BAPIs, auth, test strategy, risks). Output:
TECHNICAL_PROPOSAL.md - Estágio 3 — Review 1: 9 dimensões (SEC|AUTH|DATA|PERF|STD|INTERFACE| CHANGE|COMP|FUNC). GO/NO-GO. NO-GO → volta ao Estágio 2.
- Estágio 4 — Implementação: cavecrew-builder + ADT escreve código no SAP, syntax check, unit tests.
- Estágio 5 — Lint:
abaplint+ security gate + clean code gate. - Estágio 6 — Crew Analysis: 7-agent full mode, 9 dimensões no código implementado. Roda em background, paralelo ao Estágio 5.
- Estágio 7 — Review 2: compara implementação com Review 1. GO/NO-GO. NO-GO → volta ao Estágio 4.
- Estágio 8 — Transport Gate: risk assessment 10 dimensões, cria transport request, verifica inclusão de objetos.
Integração com SAP Business Workflow (RAG)
Conceitos de BOR e Workflow incorporados ao pipeline:
BOR Object Types e Eventos
Eventos comunicam entre aplicação e workflow system. Usados para sincronizar
processos (ex: "Wait until document is released"). O object type é definido no
Business Object Repository (transação SWO1).
# Detecção de workflow events no spec analyzer
WORKFLOW_KEYWORDS = {
'event': ['event', 'trigger', 'BOR', 'object type', 'SWO1'],
'receiver': ['receiver', 'event receiver', 'linkage', 'SWE2'],
'status': ['status management', 'work item', 'SWI1', 'SWI2_FREQ'],
'decision': ['user decision', 'approval', 'reject', 'SBWP'],
}
Transações-Chave de Workflow
SWO1— BOR object type maintenanceSWE2— Event linkage configurationPFTC— General task maintenance (PFTC_DIS=display, PFTC_CHG=change)SWI1— Workflow log (overview of steps, container, agents)SBWP— Business workspace (workitem inbox)SWI2_FREQ— Work items per task frequency analysis
APIs de Workflow (Runtime)
" Obter objetos do work item (leading object como POR)
CALL FUNCTION 'SAP_WAPI_GET_OBJECTS'
EXPORTING
workitem_id = lv_wi_id
IMPORTING
leading_object = ls_por.
" Converter POR para runtime handle (BOR macro)
" Requer include <cntn01>
SWC_OBJECT_FROM_PERSISTENT ls_por lv_obj.
Status Management
Work item status: WAITING → READY → IN_PROGRESS → COMPLETED/CANCELLED.
O pipeline valida status em Stage 3 (Review) e Stage 7 (Review 2).
Template de Proposta Técnica (resumo)
Proposta inclui: Architecture (module, approach, object count), Classes
(ZCL_{MODULE}_HANDLER/HELPER), DDIC (Z{MODULE}_LOG audit table), Error
Handling (ZCX_{MODULE} + BAL + BAPIRET2 TABLES RETURN check), Authorization
(check at method entry + before BAPI), Test Strategy (ABAP Unit + risk level).
Pitfalls
- Spec vago → proposta vaga. Sinalizar seções subespecificadas no Estágio 1.
- Module misdetection → specs cross-module (MM+FI) precisam dual routing.
- BAPIRET2 incompleto → sempre checar
TABLES RETURN, nunca sóIMPORTING. - Event linkage esquecido → se spec menciona eventos BOR, incluir SWE2 config.
- Token budget → pipeline completo ~50K tokens. Fast mode ~15K.
- abaplint version drift → pinar
@abaplint/clino CI. Rule changes flip gates. - Crew analysis paralelo → roda em background. Pipeline continua ao Estágio 5.
- Transport risk → gate bloqueia só em CRITICAL security findings. MEDIUM = warning.
- BOR macro include →
<cntn01>obrigatório paraSWC_*macros. Sem ele = dump. - Workitem status race → validar status antes de operar.
SAP_WAPI_GET_OBJECTSpode retornar POR de work item já CANCELLED.
Verificação
# 1. Verificar driver do skill (50 checks, exit 0 = pass)
python .Codex/skills/run-sap-router-skill/driver.py
# 2. Verificar MEMORY.md após pipeline
python scripts/memory_manager.py verify --input MEMORY.md
# 3. Verificar objetos deployados via ADT
# (via ADT MCP: read_source + syntax_check em cada objeto)
# 4. Verificar workflow log (se BOR events envolvidos)
# Transação SWI1 no SAP: filtrar por task/template ID
# 5. Verificar event linkage ativo
# Transação SWE2: confirmar linkage ENABLED para o object type/event
# 6. Verificar workitem inbox
# Transação SBWP: confirmar work items criados e assigned corretamente
# 7. Verificar transport
python scripts/sap_router.py transport-status --tr DEVK900043
MEMORY.md — Registro de Pipeline
Cada estágio escreve um bloco em MEMORY.md (máx 20 blocos, 100 linhas):
### [14:32] WORKFLOW/MM-CreateMaterial-Spec
status:OK | stage:1 | module:MM | bapi:BAPI_MATERIAL_SAVEDATA
### [14:50] WORKFLOW/MM-CreateMaterial-Transport
status:GO | stage:8 | tr:DEVK900043 | release:APPROVED
Anti-Padrões a Evitar
- ❌ Pular Review 1 (Estágio 3) mesmo em fast mode
- ❌ Ignorar BAPIRET2 com múltiplas linhas de erro
- ❌ Hardcoded work item IDs — sempre obter via
SAP_WAPI_* - ❌ Deploy sem syntax check prévio no ADT
- ❌ Release transport sem GO do Estágio 7 e Estágio 8
- ❌ Usar
SWC_*macros sem include<cntn01> - ❌ Assumir status de work item sem validar em runtime