Lista de Documentos
Nesta Página

Como extrair 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 de Purchase-to-Pay com Process Mining, é preciso extrair um event log de alta qualidade do SAP. Veja os passos e estruturas principais abaixo.

1. Defina o Escopo do Processo P2P

Antes de extrair os dados, defina claramente as etapas do processo que deseja incluir. Um processo P2P padrão inclui:

  1. Purchase Requisition
  2. Purchase Order
  3. Goods Receipt
  4. Invoice Receipt
  5. Payment

2. Identifique as Principais Tabelas do SAP

Geralmente, você vai extrair dados das seguintes tabelas:

Etapa do ProcessoSAP TableDescrição
Purchase RequisitionEBANCabeçalho da Purchase Requisition
Purchase OrderEKKO / EKPOCabeçalho do PO (EKKO) & Itens (EKPO)
Goods ReceiptMKPF / MSEGCabeçalho do Documento de Material & Itens
Invoice ReceiptBKPF / BSEGCabeçalho de Documento Contábil & Itens
PaymentPAYR / REGUHTabelas de Documentos de Pagamento

3. Identificar Campos Necessários para Event Log

Os campos abaixo são normalmente obrigatórios para Process Mining. Ajuste conforme sua necessidade.

Case IDPO Number / Document No.Agrupa todos os events em um único processo
ActivityDerivado (ex: “PO Created”)Nome da etapa do processo
TimestampAEDAT, BUDAT, CPUDTQuando a etapa ocorreu
User/AgentERNAM, USNAM, etc.Quem executou a ação
AmountWRBTR, DMBTRValor da etapa
Vendor / MaterialLIFNR, MATNRInformações de parceiro ou material

4. Extrair os Dados Brutos

SAP ECC (ABAP stack)

  • Use ABAP Reports para extrair os dados diretamente das tabelas relevantes.
  • Ou crie programas ABAP customizados para unir, filtrar e exportar os dados de events.
  • Você pode exportar o resultado como arquivo CSV ou arquivo texto.

SAP S/4HANA (HANA stack)

  • Utilize CDS Views (Core Data Services) para criar modelos lógicos e extrair os dados.
  • Ou utilize aplicativos SAP Fiori ou HANA Studio para executar scripts SQL.
  • Utilize ODATA API, SAP Datasphere ou SAP Data Intelligence para melhor automação.

5. Montar o Event Log

Colunas mínimas necessárias para Process Mining

ColunaExemploExemplo
Case IDIdentificador único da instância do processoPurchase Order ID
ActivityNome da etapa do processo”Create PO”, “Post Invoice”
TimestampData e hora do event2025-04-17 10:22:12

Colunas opcionais para enriquecer o event log

Nome da ColunaDescrição
UserUsuário responsável pela ação
AmountValor relacionado ao event
Vendor / MaterialParceiro ou material envolvido no event
Company CodeCódigo da empresa associado ao event
CurrencyMoeda da transação
Document TypeTipo de documento (ex: PO, GR, Invoice)
Other FieldsAmount, Vendor, Currency, etc

tip

Faça unpivot nos dados para transformar vários campos de datas em uma linha por activity, se necessário.

6. Transformar e Limpar Dados

Depois de obter os dados brutos, pode ser preciso transformá-los para uso em Process Mining. Normalmente isso envolve:

  • Normalizar timestamps (ex: conversão para UTC)
  • Rotular activities (ex: “PO Created” em vez do código MIGO)
  • Garantir uma linha por event (formato long)
  • Remover valores NULL e duplicados
  • Garantir Case IDs únicos e consistentes

Ferramentas recomendadas:

  • Scripts SQL para limpar e transformar
  • Excel ou Power Query
  • Python + Pandas
  • KNIME, Alteryx ou ferramentas ETL
Limpeza e Preparação de Dados

A limpeza e preparação dos dados é essencial na análise de dados, identificando e corrigindo erros e inconsistências para garantir qualidade dos dados.

Exemplo de código ABAP para extração de dados
" Exemplo de código ABAP para extrair dados de event log de 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'. " GR document type
    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. Exportar resultados para arquivo (opcional)
  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 exportado com sucesso.'.
Notas sobre o código ABAP
SeçãoPropósito
ekkoTabela de cabeçalho para criação de PO
mseg + mkpfPara entradas de Goods Receipt (GR)
rseg + rbkpPara entradas de Invoice Receipt (IR)
OPEN DATASETSalva o event log como arquivo CSV no servidor (verifique permissões)
bwart = ‘101’Filtro para tipos de movimento de GR
Exemplos de SQL para entender a extração de dados

Você pode usar queries SQL para extrair informações das tabelas relevantes. Abaixo estão exemplos para cada etapa do fluxo P2P. Ajuste para seus requisitos 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 receipt
-- 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 invoice

Você pode unificar estes logs em uma única tabela de event log para Process Mining:

-- Unificação dos 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.