Lista de Documentos
Nesta Página

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:

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

2. Identifique as Tabelas Principais no SAP

Normalmente, os dados são extraídos das seguintes tabelas:

Etapa do ProcessoTabela SAPDescrição
Purchase RequisitionEBANCabeçalho de Purchase Requisition
Purchase OrderEKKO / EKPOCabeçalho de PO (EKKO) e Itens (EKPO)
Goods ReceiptMKPF / MSEGCabeçalho e itens do documento de material
Invoice ReceiptBKPF / BSEGCabeçalho e itens do documento contábil
PaymentPAYR / REGUHTabelas 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 IDPO Number / Document No.Agrupa todos os eventos em um único processo
ActivityDerivado (ex: “PO Created”)Nome da etapa do processo
TimestampAEDAT, BUDAT, CPUDTMomento que a etapa ocorreu
User/AgentERNAM, USNAM, etc.Quem executou a ação
AmountWRBTR, DMBTRValor relacionado à etapa
Vendor / MaterialLIFNR, MATNRDados 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

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

Colunas opcionais para enriquecer o event log

Nome da ColunaDescrição
UserUsuário que realizou a ação
AmountValor monetário associado ao evento
Vendor / MaterialFornecedor ou material envolvido
Company CodeCódigo da empresa relacionado ao evento
CurrencyMoeda da transação
Document TypeTipo de documento (ex: PO, GR, Invoice)
Other FieldsAmount, 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
Limpeza e Preparação de Dados

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çãoFinalidade
ekkoTabela de cabeçalho para criação de PO
mseg + mkpfPara registros de Goods Receipt (GR)
rseg + rbkpPara registros de Invoice Receipt (IR)
OPEN DATASETEscreve 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.