Extração de dados do SAP para Purchase-to-Pay (P2P)
Extração de Dados do SAP para Process Mining de Purchase-to-Pay (P2P)
Para analisar o processo Purchase-to-Pay utilizando Process Mining, é necessário extrair um event log de qualidade do SAP. Veja as principais etapas e estruturas desse processo abaixo.
1. Defina o Escopo do seu Processo P2P
Antes de extrair dados, defina claramente as etapas do processo que você deseja incluir. Um fluxo padrão de P2P envolve:
- Purchase Requisition
- Purchase Order
- Goods Receipt
- Invoice Receipt
- Payment
2. Identifique as Tabelas Principais no SAP
Normalmente, os dados são extraídos das seguintes tabelas:
| Etapa do Processo | Tabela SAP | Descrição |
|---|---|---|
| Purchase Requisition | EBAN | Cabeçalho de Purchase Requisition |
| Purchase Order | EKKO / EKPO | Cabeçalho de PO (EKKO) e Itens (EKPO) |
| Goods Receipt | MKPF / MSEG | Cabeçalho e itens do documento de material |
| Invoice Receipt | BKPF / BSEG | Cabeçalho e itens do documento contábil |
| Payment | PAYR / REGUH | Tabelas de documentos de pagamento |
3. Identifique os Campos Necessários para o Event Log
Os campos a seguir costumam ser exigidos para Process Mining. Ajuste conforme a necessidade do seu processo.
| Case ID | PO Number / Document No. | Agrupa todos os eventos em um único processo |
|---|---|---|
| Activity | Derivado (ex: “PO Created”) | Nome da etapa do processo |
| Timestamp | AEDAT, BUDAT, CPUDT | Momento que a etapa ocorreu |
| User/Agent | ERNAM, USNAM, etc. | Quem executou a ação |
| Amount | WRBTR, DMBTR | Valor relacionado à etapa |
| Vendor / Material | LIFNR, MATNR | Dados do parceiro ou material |
4. Extraia os Dados Brutos
SAP ECC (ABAP Stack)
- Use relatórios ABAP para extrair dados diretamente das principais tabelas.
- Ou crie programas ABAP customizados para unir, filtrar e exportar eventos relevantes.
- O resultado pode ser exportado como arquivo CSV ou arquivo texto.
SAP S/4HANA (HANA Stack)
- Use CDS Views (Core Data Services) para criar modelos lógicos e extrair dados.
- Também é possível usar SAP Fiori apps ou HANA Studio para rodar scripts SQL.
- Use ODATA API, SAP Datasphere ou SAP Data Intelligence para automatizar a extração.
5. Estruture o Event Log
Colunas mínimas necessárias para Process Mining
| Coluna | Descrição | Exemplo |
|---|---|---|
| Case ID | Identificador único da instância do processo | Purchase Order ID |
| Activity | Nome da etapa do processo | ”Create PO”, “Post Invoice” |
| Timestamp | Data e hora do evento | 2025-04-17 10:22:12 |
Colunas opcionais para enriquecer o event log
| Nome da Coluna | Descrição |
|---|---|
| User | Usuário que realizou a ação |
| Amount | Valor monetário associado ao evento |
| Vendor / Material | Fornecedor ou material envolvido |
| Company Code | Código da empresa relacionado ao evento |
| Currency | Moeda da transação |
| Document Type | Tipo de documento (ex: PO, GR, Invoice) |
| Other Fields | Amount, Vendor, Currency, etc |
tip
Use o unpivot nos dados para transformar vários campos de data em uma linha por atividade, se necessário.
6. Transforme e Limpe os Dados
Com os dados brutos em mãos, você precisará transformá-los para um formato adequado para Process Mining. Geralmente, isso inclui:
- Normalizar timestamps (ex: converter para UTC)
- Rotular atividades (ex: “PO Created” ao invés do código MIGO)
- Garantir uma linha por evento (formato long)
- Remover valores NULL e duplicados
- Garantir Case IDs consistentes e únicos
Ferramentas recomendadas:
- Scripts SQL para limpeza e transformação
- Excel ou Power Query
- Python + Pandas
- KNIME, Alteryx ou ferramentas ETL
A limpeza e preparação de dados é essencial na análise de dados. Consiste em identificar e corrigir erros, inconsistências e imprecisões para garantir a qualidade e confiabilidade.
Exemplo de Template ABAP para Extração de Dados
" Exemplo de código ABAP para extrair event log do processo Purchase-to-Pay
REPORT z_p2p_event_log_export.
TABLES: ekko, ekpo, mseg, mkpf, rbkp, rseg.
DATA: BEGIN OF event_log OCCURS 0,
case_id TYPE ekko-ebeln,
activity TYPE char40,
timestamp TYPE sy-datum,
username TYPE sy-uname,
amount TYPE ekpo-netwr,
END OF event_log.
START-OF-SELECTION.
" 1. Extração da criação do Purchase Order
SELECT ebeln aedat ernam netwr
INTO (event_log-case_id, event_log-timestamp, event_log-username, event_log-amount)
FROM ekko
WHERE aedat >= '20240101'.
event_log-activity = 'Create Purchase Order'.
APPEND event_log.
ENDSELECT.
" 2. Extração do Goods Receipt (MIGO)
SELECT mblnr budat usnam ebeln
INTO (event_log-case_id, event_log-timestamp, event_log-username, event_log-amount)
FROM mseg
INNER JOIN mkpf ON mseg~mblnr = mkpf~mblnr
WHERE bwart = '101' AND budat >= '20240101'. " Tipo de documento GR
event_log-activity = 'Goods Receipt'.
APPEND event_log.
ENDSELECT.
" 3. Extração do Invoice Posting (MIRO)
SELECT ebeln bldat usnam wrbtr
INTO (event_log-case_id, event_log-timestamp, event_log-username, event_log-amount)
FROM rseg
INNER JOIN rbkp ON rseg~belnr = rbkp~belnr
WHERE bldat >= '20240101'.
event_log-activity = 'Invoice Posted'.
APPEND event_log.
ENDSELECT.
" 4. Exporta resultados para arquivo (opcional, se houver permissão)
DATA: filename TYPE string VALUE '/usr/sap/tmp/p2p_event_log.csv',
file TYPE string,
rc TYPE i.
OPEN DATASET filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
LOOP AT event_log.
CONCATENATE event_log-case_id
event_log-activity
event_log-timestamp
event_log-username
event_log-amount
INTO file SEPARATED BY ';'.
TRANSFER file TO filename.
ENDLOOP.
CLOSE DATASET filename.
WRITE: / 'Event log exported successfully.'.
Observações sobre o Código ABAP
| Seção | Finalidade |
|---|---|
| ekko | Tabela de cabeçalho para criação de PO |
| mseg + mkpf | Para registros de Goods Receipt (GR) |
| rseg + rbkp | Para registros de Invoice Receipt (IR) |
| OPEN DATASET | Escreve o event log em um arquivo CSV no servidor (verifique permissões) |
| bwart = ‘101’ | Filtro para tipos de movimentação de GR |
Exemplos de Queries SQL para Extração de Dados
Você pode usar queries SQL para extrair dados das tabelas relevantes. Segue abaixo exemplos para cada etapa do processo P2P. Ajuste conforme sua necessidade e versão do SAP.
Exemplo simples:
-- Criação de Purchase Order
SELECT
EKKO.EBELN AS CaseID,
'PO Created' AS Activity,
EKKO.AEDAT AS Timestamp,
EKKO.ERNAM AS User,
EKKO.LIFNR AS Vendor,
EKKO.WAERS AS Currency,
EKKO.BUKRS AS CompanyCode
FROM EKKO
WHERE EKKO.BSART = 'NB'; -- Tipo padrão de PO
-- Goods Receipt
SELECT
MSEG.EBELN AS CaseID,
'Goods Receipt' AS Activity,
MKPF.BUDAT AS Timestamp,
MKPF.USNAM AS User,
MSEG.MATNR AS Material,
MSEG.MENGE AS Quantity
FROM MSEG
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR
WHERE MSEG.BEWTP = 'R'; -- Tipo de recebimento
-- Invoice Receipt
SELECT
BSEG.BELNR AS CaseID,
'Invoice Posted' AS Activity,
BKPF.BUDAT AS Timestamp,
BKPF.USNAM AS User,
BSEG.WRBTR AS Amount
FROM BSEG
JOIN BKPF ON BSEG.BELNR = BKPF.BELNR
WHERE BKPF.BLART = 'RE'; -- Tipo de fatura
Você pode unificar esses logs em uma única tabela de event log para process mining:
-- Unir event logs (UNION simplificado)
SELECT * FROM (
SELECT 'PO Created' AS Activity, EBELN AS CaseID, AEDAT AS Timestamp FROM EKKO
UNION
SELECT 'Goods Receipt', EBELN, BUDAT FROM MSEG JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR
UNION
SELECT 'Invoice Posted', BELNR, BUDAT FROM BKPF
) AS EventLog
ORDER BY CaseID, Timestamp;
7. Exportar como Event Log
Depois de estruturar seus dados unificados contendo pelo menos: • Case ID • Activity • Timestamp
Dica Profissional
• Normalize os timestamps para o mesmo fuso horário. • Garanta que os Case IDs sejam consistentes em todos os events. • Limpe os dados removendo documentos de teste ou cancelados. • Use filtros como company code, document type ou fiscal year para limitar o escopo.