Seu Template de Dados de Manutenção de Ativos
Seu Template de Dados de Manutenção de Ativos
- Atributos recomendados para coleta
- Atividades críticas de manutenção para monitorar
- Guia de extração técnica para SAP PM
Atributos de Manutenção de Ativos
| Nome | Descrição | ||
|---|---|---|---|
| Event Timestamp EventTimestamp | A data e hora exatas em que a atividade ocorreu. | ||
| Descrição Registra o momento exato em que um evento ocorreu. Para mudanças de status, isso vem do horário de atualização do sistema; para operações, é o horário de confirmação. Timestamps precisos são fundamentais para calcular tempos de ciclo, lead times e identificar gargalos entre etapas como 'Planejamento' e 'Execução'. Por que é importante Necessário para sequenciar os eventos corretamente e calcular todos os KPIs baseados em duração. Onde obter JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) Exemplos 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| Nome da Atividade Activity | A tarefa específica ou mudança de status que ocorreu. | ||
| Descrição Representa a etapa realizada no processo de manutenção, como 'Ordem de Manutenção Criada', 'Saída de Mercadoria Registrada' ou 'Operação da Ordem Confirmada'. Geralmente são derivados das tabelas de status (JEST) ou tabelas de transação (AFRU para confirmações, MKPF para movimentos de material). Este atributo determina os nós no mapa do processo. Por que é importante Isso define o 'quê' do processo, sendo essencial para descobrir o fluxo de trabalho e suas variantes. Onde obter Derivado de JEST (Status), AFRU (Confirmações), QMEL (Notificações) Exemplos Ordem de Manutenção CriadaPedido liberadoEncerrado tecnicamente | |||
| Ordem de Manutenção MaintenanceWorkOrder | O identificador exclusivo da ordem de serviço de manutenção. | ||
| Descrição A Ordem de Manutenção é o documento central no SAP Plant Maintenance (tabela AUFK, campo AUFNR). Ela vincula a necessidade (Nota) aos recursos, materiais e custos de execução. Na análise de Process Mining, ela serve como ID do Caso, permitindo reconstruir todo o ciclo de vida de um serviço, desde a criação até o encerramento técnico e comercial. Por que é importante É a chave única que vincula todas as atividades, custos e timestamps, permitindo a visualização do fluxo do processo. Onde obter Tabela SAP AUFK, Campo AUFNR Exemplos 00004001234540012345000040098765 | |||
| Sistema de Origem SourceSystem | O sistema de origem dos dados. | ||
| Descrição Identifica o mandante ou instância específica do SAP (ex: 'SAP_PM_PROD'). Em cenários com múltiplos sistemas ERP, este atributo ajuda a distinguir registros que podem compartilhar IDs idênticos, mas pertencem a diferentes entidades legais ou ambientes de sistema. Por que é importante Garante a exclusividade e a linhagem dos dados em ambientes multi-sistema. Onde obter Configuração do sistema / Log de extração Exemplos SAP_ECC_P01SAP_S4H_100 | |||
| Última Atualização de Dados LastDataUpdate | Timestamp da extração de dados mais recente. | ||
| Descrição Indica quando os dados foram atualizados pela última vez no modelo do Process Mining. Permite que os analistas saibam quão recentes são os insights e ajuda a validar a atualidade dos dados em dashboards que monitoram backlog ou adesão ao SLA em tempo real. Por que é importante Crítico para o governança de dados e para estabelecer confiança nos dashboards. Onde obter Timestamp ETL Exemplos 2023-11-01T12:00:00Z | |||
| Centro de Manutenção MaintenancePlant | O centro logístico responsável pela manutenção. | ||
| Descrição O Centro (WERKS) é a unidade organizacional principal na logística, separando os dados por instalação física. Este atributo é essencial para benchmarking entre unidades e é mapeado como 'BusinessUnit' para permitir filtragens organizacionais de alto nível nos dashboards. Por que é importante Filtro organizacional principal para benchmarking entre unidades. Onde obter Tabela SAP AUFK, Campo WERKS Exemplos 100020003000 | |||
| Centro de Trabalho Principal MainWorkCenter | O centro de trabalho principal ou equipe atribuída para executar a ordem. | ||
| Descrição O Centro de Trabalho Principal (VAPLZ) representa o grupo de técnicos ou máquinas que realizarão o trabalho físico. Este atributo é mapeado como 'Equipe' e é vital para analisar a eficiência da execução, como o MTTR por equipe, ajudando a distinguir entre mão de obra própria e terceirizada. Por que é importante Permite a análise de desempenho no nível de recursos. Onde obter Tabela SAP AFKO, Campo VAPLZ (ou AUFK-VAPLZ conforme config.) Exemplos MECH_01ELEC_TEAMEXT_CONT | |||
| Criado pelo Usuário CreatedByUser | O nome de usuário de quem criou a ordem. | ||
| Descrição Identifica o usuário (ERNAM) responsável por iniciar a ordem de manutenção. Mapeado como 'Usuário' no modelo genérico, permite analisar a criação manual vs. automática e ajuda na auditoria da atividade 'Ordem de Manutenção Criada'. Por que é importante Permite análise de comportamento do usuário e auditoria. Onde obter Tabela SAP AUFK, Campo ERNAM Exemplos JSMITHBSERVICEDDAVIS | |||
| Data de conclusão planejada TargetFinishDate | A data de conclusão agendada para o trabalho de manutenção. | ||
| Descrição Esta data (geralmente a Data de Conclusão Básica - GLTRP) representa o prazo final da ordem. Ela é comparada com o timestamp de conclusão real para calcular o KPI de 'Aderência ao SLA', servindo de base para determinar se uma ordem foi concluída no prazo ou com atraso. Por que é importante O ponto de referência para todos os cálculos de Entrega no Prazo (OTD). Onde obter Tabela SAP AFKO, Campo GLTRP Exemplos 2023-12-012023-12-15 | |||
| Grupo de planejamento ResponsiblePlannerGroup | O grupo de planejadores responsável pelo processamento da ordem. | ||
| Descrição O Grupo de Planejadores (INGRP) identifica a equipe responsável pelo planejamento. Mapeado como 'Departamento', é crucial para o dashboard de 'Utilização de Recursos e Agendamento' identificar quais equipes de planejamento são gargalos na fase de preparação. Por que é importante Identifica a equipe administrativa responsável pelo processo de planejamento. Onde obter Tabela SAP AUFK, Campo INGRP Exemplos M01ELEMEC | |||
| Local de Instalação FunctionalLocation | A localização hierárquica onde o ativo está instalado. | ||
| Descrição Representa o local na estrutura técnica onde a tarefa de manutenção é realizada (TPLNR). Diferente do Equipamento, que pode ser movido, o Local de Instalação é estático. Este atributo alimenta o dashboard de 'Tempos de Ciclo de Inspeção Técnica', permitindo comparar o desempenho entre diferentes áreas da planta (ex: Caldeira vs. Linha de Embalagem). Por que é importante Permite a análise espacial e hierárquica do desempenho da manutenção. Onde obter Tabela SAP IFLOT, Campo TPLNR (ou via AUFK-TPLNR) Exemplos PLANT1-BLD2-LN01US-TX-DAL-01 | |||
| Número da Notificação NotificationNumber | A nota de manutenção que deu origem a esta ordem. | ||
| Descrição O Número da Nota (QMNUM) vincula a Ordem de Manutenção à solicitação inicial. Esse vínculo é necessário para calcular o lead time total, desde o recebimento da solicitação até a conclusão. Sem isso, a análise perde a fase inicial de detecção e reporte no ciclo de vida da manutenção. Por que é importante Conecta a fase de execução de volta à fase de solicitação/detecção. Onde obter Tabela SAP AUFK, Campo QMNUM Exemplos 1000050010000501 | |||
| Número do Equipamento EquipmentNumber | Identificador do ativo físico específico que está sendo mantido. | ||
| Descrição O Número do Equipamento (EQUNR) identifica a máquina ou ativo individualmente. Ao agregar dados neste campo, os analistas podem alimentar o dashboard de 'Custo de Manutenção e Produtividade de Ativos' para encontrar equipamentos problemáticos que exigem reparos frequentes e caros, permitindo uma análise de manutenção centrada na confiabilidade. Por que é importante Conecta o desempenho do processo a ativos físicos específicos. Onde obter Tabela SAP AUFK, Campo EQUNR Exemplos 10004567PUMP-001HVAC-202 | |||
| Prioridade da Manutenção MaintenancePriority | O nível de urgência atribuído à ordem de manutenção. | ||
| Descrição Indica a prioridade (PRIOK) da tarefa de manutenção, como '1-Muito Alta', '2-Alta' ou '3-Média'. Este campo alimenta diretamente o KPI 'Taxa de Ordens de Emergência'. Analisar o fluxo por prioridade ajuda a identificar se as ordens prioritárias são realmente agilizadas pelo sistema em comparação com o trabalho rotineiro. Por que é importante Principal fator para análise de SLA e identificação de trabalho de emergência. Onde obter Tabela SAP AFKO, Campo PRIOK (ou AUFK via view) Exemplos 1-Emergência2-Alta3-Média4-Baixa | |||
| Status do sistema SystemStatus | O status técnico atual da ordem (ex: LIB, TECO). | ||
| Descrição Uma string concatenada ou lista de status ativos do sistema (da JEST) aplicados à ordem no momento. Valores comuns incluem CRTD (Criada), REL (Liberada), TECO (Encerrada Tecnicamente) e CLSD (Fechada). Ajuda a filtrar casos abertos vs. fechados no 'Monitor de Backlog e Trabalho em Andamento'. Por que é importante O indicador principal do estágio do ciclo de vida da ordem. Onde obter Módulo de Função SAP STATUS_TEXT_EDIT ou Tabela JEST Exemplos REL CNFTECOCRTD MACM | |||
| Tipo da Ordem de Manutenção MaintenanceOrderType | Categoriza a ordem de manutenção (ex: Preventiva, Corretiva). | ||
| Descrição O Tipo de Ordem (AUART) no SAP PM distingue a natureza do trabalho. Tipos comuns incluem PM01 (Corretiva), PM02 (Preventiva) e PM03 (Reforma). Este atributo é essencial para monitorar o impacto de ordens emergenciais e segmentar variantes de processo, já que fluxos preventivos diferem muito dos corretivos. Por que é importante Fundamental para segmentar a análise entre trabalho planejado e não planejado. Onde obter Tabela SAP AUFK, Campo AUART Exemplos PM01PM02PM03 | |||
| Custo Real Total TotalActualCost | O custo real total lançado na ordem de manutenção. | ||
| Descrição Custos agregados de mão de obra, materiais e serviços (da tabela PMCO). Este atributo alimenta o dashboard 'Custo e Produtividade da Manutenção de Ativos', permitindo que os gestores vejam o impacto financeiro das atividades. É essencial para determinar o custo-benefício entre reparar ou substituir ativos. Por que é importante Fornece a dimensão financeira aos dados operacionais do processo. Onde obter Tabela SAP PMCO (soma do tipo de valor 04 - Real) Exemplos 150.002500,500.00 | |||
| Duração da Atividade ActivityDuration | Tempo levado para concluir a atividade específica. | ||
| Descrição A duração da etapa específica, útil para atividades de 'Operação Confirmada' onde horas de trabalho são registradas. Isso mapeia para 'ProcessingTime' no modelo genérico e é usado para calcular eficiência e utilização de mão de obra. Por que é importante Mede o esforço real gasto nas tarefas. Onde obter Tabela SAP AFRU, Campos ISDD/ISDZ vs IEDD/IEDZ Exemplos 2,5 horas45 minutos | |||
| É Retrabalho IsRework | Indicador de que a ordem envolveu atividades de retrabalho. | ||
| Descrição Um booleano calculado que identifica se ocorreu um loop no processo, especificamente se a atividade 'Tarefa de Manutenção Executada' aconteceu mais de uma vez ou se o status reverteu de 'Encerrado Tecnicamente' para 'Em Processamento'. Suporta o KPI 'Taxa de Retrabalho de Manutenção' e ajuda a identificar problemas de qualidade. Por que é importante Suporta diretamente a análise de controle de qualidade. Onde obter Calculado a partir do fluxo do processo Exemplos verdadeirofalse | |||
| É Trabalho de Emergência IsEmergencyWork | Indicador de que a ordem de serviço é uma emergência. | ||
| Descrição Atributo booleano calculado com base na Prioridade de Manutenção. Se a Prioridade for '1' (ou o código específico para Emergência na configuração), este campo será verdadeiro. Isso simplifica a filtragem e a criação do KPI 'Taxa de Ordens de Emergência' sem lógica complexa na camada do dashboard. Por que é importante Simplifica a filtragem para análises críticas de manutenção corretiva. Onde obter Calculado a partir de MaintenancePriority Exemplos verdadeirofalse | |||
| Horas de mão de obra planejadas PlannedLaborHours | As horas de mão de obra estimadas para a ordem. | ||
| Descrição O trabalho planejado total (ARBEI) das operações da ordem. Comparar isso com a duração real da atividade no dashboard de 'Desempenho de Planejamento e Estimativa' ajuda a avaliar a precisão do planejamento de manutenção. Por que é importante Métrica base para análise da precisão do planejamento. Onde obter Tabela SAP AFKO (Soma do Trabalho Planejado da Operação) Exemplos 4.08.512.0 | |||
Atividades de Manutenção de Ativos
| Atividade | Descrição | ||
|---|---|---|---|
| Conclusão de Negócio Definida | Marca o fechamento administrativo final da ordem, impedindo novos lançamentos de custos. Capturado pela mudança de status para CLSD (Fechada). | ||
| Por que é importante Representa o fim absoluto do ciclo de vida da ordem, fundamental para a precisão dos dados e conformidade dos registros. Onde obter Tabela JCDS, Status I0046 (ENCER). Captura Registrado quando o status é atualizado para CLSD na JCDS Tipo de evento explicit | |||
| Encerramento técnico definido | Marca o trabalho de manutenção como física e tecnicamente concluído. Capturado pela mudança de status para TECO (Encerrada Tecnicamente). | ||
| Por que é importante O ponto final mais crítico para a análise operacional, sinalizando que o ativo foi restaurado e a manutenção concluída. Onde obter Tabela JCDS, Status I0045 (TECO). Captura Registrado quando o status é atualizado para TECO na JCDS Tipo de evento explicit | |||
| Operação da Ordem Confirmada | Representa o registro do tempo real gasto por um técnico em uma operação específica. Isso captura o trabalho de execução real no ativo. | ||
| Por que é importante Esta atividade é a principal fonte de dados para o cálculo de MTTR (Tempo Médio de Reparo) e custos de mão de obra. Onde obter Tabela AFRU (Confirmações de Ordem). Captura Registrado quando a transação IW41 é executada Tipo de evento explicit | |||
| Ordem de Manutenção Criada | Marca a criação do objeto da ordem de manutenção no sistema. Capturado explicitamente pelo timestamp de criação na tabela de dados mestres da ordem. | ||
| Por que é importante Este é o evento de ancoragem central para o caso, marcando a transição da solicitação para o planejamento e execução. Onde obter Tabela AUFK, campos ERDAT (Data) e ERFZEIT (Hora). Captura Registrado quando a transação IW31 é executada Tipo de evento explicit | |||
| Ordem de Manutenção Liberada | Indica que o planejamento está concluído e a ordem foi liberada para execução. Capturado pelo monitoramento da mudança de status para REL nos logs do sistema. | ||
| Por que é importante Este marco separa a fase de planejamento da fase de execução, sendo crucial para medir o Lead Time de Planejamento e Estimativa. Onde obter Tabela JCDS (Docs de Mudança de Status), Status I0002 (LIB). Captura Registrado quando o status é atualizado para REL na JCDS Tipo de evento explicit | |||
| Saída de mercadorias contabilizada | Registra o consumo físico de peças ou materiais vinculados à ordem de manutenção. Capturado a partir dos cabeçalhos de documentos de material ligados à ordem. | ||
| Por que é importante Confirma que as peças estão disponíveis e foram separadas, impactando diretamente na análise do tempo de espera por disponibilidade de peças. Onde obter Tabela MSEG/MKPF, Tipo de Movimento 261 (Saída para Ordem). Captura Registrado quando a transação MIGO/MB1A é executada Tipo de evento explicit | |||
| Componente de Material Adicionado | Registra a adição de peças de reposição ou materiais à lista de componentes da ordem de manutenção. Capturado a partir da criação de um item de reserva. | ||
| Por que é importante Identifica o início do ciclo de compras para as peças necessárias, alimentando o dashboard de Lead Times de Compras de Peças. Onde obter Tabela RESB, campo BDTER (Data de Necessidade) ou timestamp de criação. Captura Registrado quando o item é adicionado à RESB Tipo de evento explicit | |||
| Custo da Ordem Liquidado | Indica que os custos acumulados na ordem foram transferidos para o objeto de custo (ex: Centro de Custo). Capturado do documento de Controlling. | ||
| Por que é importante Rastreia o aspecto do encerramento financeiro e alimenta o KPI de Duração de Liquidação Financeira. Onde obter Tabela COBK (Objeto CO: Cabeçalho de Documento), vinculada à Ordem. Captura Registrado quando a transação de liquidação KO88 é executada Tipo de evento explicit | |||
| Encerramento técnico estornado | Registra a revogação do status de Encerramento Técnico, indicando que a ordem foi reaberta. Isso cria um loop de retrabalho no modelo de processo. | ||
| Por que é importante Indicador principal para o KPI de Taxa de Retrabalho na Manutenção, destacando encerramentos prematuros ou problemas de qualidade. Onde obter Tabela JCDS, Status I0045 (TECO) alterado para Inativo. Captura Registrado quando o status TECO é desativado Tipo de evento explicit | |||
| Leitura de Medição Registrada | Registra a entrada de um documento de medição, como uma leitura de contador ou avaliação de condição. Costuma servir como o evento de Inspeção Técnica. | ||
| Por que é importante Essencial para Manutenção Baseada em Condição e para rastrear tempos de ciclo de inspeção técnica. Onde obter Tabela IMRG (Documento de Medição), vinculada ao Equipamento ou Local de Instalação. Captura Registrado quando o documento de medição é criado Tipo de evento explicit | |||
| Notificação de Manutenção Criada | Registra a criação inicial de uma nota de manutenção, que geralmente é o gatilho para uma ordem. Capturada a partir do timestamp de criação da tabela QMEL, esta atividade vincula a solicitação inicial à ordem de execução. | ||
| Por que é importante Esta atividade estabelece o início do processo de manutenção ponta a ponta, permitindo calcular o tempo de reação entre a detecção da falha e a geração da ordem. Onde obter Tabela QMEL, campos ERDAT (Data de Criação) e MZEIT (Hora). Vinculado à ordem via QMEL-AUFNR. Captura Registrado quando o registro é criado na tabela QMEL Tipo de evento explicit | |||
| Ordem de serviço programada | Indica o agendamento específico de operações para uma capacidade ou data. Inferido pela atribuição do status 'Despachado' às operações. | ||
| Por que é importante Mede a eficiência da alocação de recursos e alimenta o dashboard de Utilização de Recursos e Agendamento. Onde obter Tabela JCDS (Docs de Mudança de Status) para Operações (ObjType OV), Status I0009 (DSPT). Captura Comparar campo de status antes/depois Tipo de evento inferred | |||
| Prioridade de Manutenção Alterada | Registra uma atualização no nível de prioridade da ordem, como uma escala para Emergência. Derivado dos Documentos de Alteração associados aos dados mestres da ordem. | ||
| Por que é importante Rastrear mudanças de prioridade explica desvios de processo e apoia o Monitor de Impacto de Ordens Emergenciais ao identificar escalonamentos corretivos. Onde obter Tabela CDPOS/CDHDR para Classe de Objeto AUFTRAG, Campo PRIOK. Captura Registrado em Documentos de Alteração (CDPOS) Tipo de evento explicit | |||
| Requisição de compra criada | Sinaliza que uma solicitação de compras externas ou serviços foi gerada. Isso conecta a ordem de manutenção interna à cadeia de suprimentos externa. | ||
| Por que é importante Crucial para analisar atrasos causados por fornecedores externos ou compras de materiais fora de estoque. Onde obter Tabela EBAN, vinculada via Atribuição de Conta a AUFK-AUFNR. Captura Registrado quando o registro EBAN é criado Tipo de evento explicit | |||
Guias de Extração
Etapas
Identificar a Interface da Fonte de Dados: Determine como você acessará a interface SQL do SAP S/4HANA. Geralmente, isso é feito via SAP HANA Studio, ABAP Development Tools (ADT) no Eclipse ou uma string de conexão DBaaS, caso o banco de dados HANA esteja exposto para sua camada de analytics.
Verificar a Disponibilidade das Views CDS: Certifique-se de que as views de Core Data Services (CDS) padrão estejam ativas no seu sistema S/4HANA. As principais views necessárias são I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation e I_MeasurementDocument. Você também precisará de acesso à tabela de histórico de status do sistema JCDS e às tabelas de documentos de alteração (CDHDR/CDPOS) para reconstruir o histórico completo de eventos, pois as views CDS padrão costumam mostrar apenas o estado atual.
Preparar o Ambiente SQL: Abra seu editor SQL. Certifique-se de que seu usuário tenha permissões de SELECT nas views SQL DDL (geralmente no schema SAPABAP1 ou similar) para os artefatos listados acima.
Executar a Query de Extração: Copie o script SQL fornecido para o seu editor. Substitua o marcador [Número do seu Mandante] pelo seu ID de mandante SAP específico (ex: 100). Se estiver filtrando por um intervalo de datas específico, atualize os filtros de EventTimestamp nas cláusulas WHERE.
Transformação de Dados: A query lida com a maioria das transformações, como a conversão de timestamps e o mapeamento de códigos de status para texto legível. No entanto, certifique-se de que a coluna EventTimestamp esteja formatada como ISO 8601 (AAAA-MM-DDTHH:MM:SS) durante a exportação, se o seu sistema de destino exigir.
Exportar o Resultado: Execute a query e exporte os resultados para um arquivo CSV ou Parquet. Certifique-se de que a codificação esteja definida como UTF-8 para lidar com caracteres especiais em nomes de usuários ou descrições.
Validar o Mapeamento de Colunas: Abra uma amostra da exportação e garanta que as colunas MaintenanceWorkOrder, Atividade e EventTimestamp estejam totalmente preenchidas. Verifique se a coluna Atividade contém as strings específicas listadas nos requisitos (ex: Ordem de Manutenção Criada, Saída de Mercadoria Lançada).
Upload para o ProcessMind: Importe o arquivo plano validado para o ProcessMind. Mapeie a coluna Atividade para o campo ID da Atividade, MaintenanceWorkOrder para o campo ID do Caso e EventTimestamp para o campo Timestamp.
Configuração
- Filtro de Mandante: Sistemas SAP são multi-client. Sempre filtre por
MANDTouClient(ex: '100') para evitar dados duplicados ou vazamento entre mandantes. - Intervalo de datas: Recomendamos filtrar a
CreationDateda Ordem de Manutenção para os últimos 6 a 12 meses. Consultar o histórico completo deJCDS(Status) ouCDPOS(Documentos de alteração) sem filtros de data pode causar timeouts de performance. - Chave de idioma: A consulta assume o inglês ('E') como padrão. Se sua organização usa outro idioma principal para as descrições, ajuste o filtro de idioma.
- Acesso ao sistema: Requer acesso ao schema de ABAP Core Data Services ou às tabelas HANA subjacentes. O acesso às tabelas brutas JCDS e CDHDR é crucial para a análise histórica de status, pois as views CDS puras geralmente são baseadas em snapshots.
- Tipos de ordem: A consulta extrai todos os tipos de ordem. Você pode filtrar o
MaintenanceOrderType(ex: apenas PM01, PM02) se quiser analisar cenários de manutenção específicos.
a Consulta de Exemplo sql
/* Activity 1: Maintenance Notification Created */
SELECT
CAST(N.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Notification Created' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(N.CreationDate, ' '), N.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
N.MaintenanceOrderType,
N.MaintenancePriority,
N.Equipment AS EquipmentNumber,
N.FunctionalLocation,
N.MaintenancePlant,
N.MaintenancePlannerGroup AS ResponsiblePlannerGroup,
N.MainWorkCenter,
N.MaintenanceNotification AS NotificationNumber,
CAST(NULL AS DATE) AS TargetFinishDate,
N.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceNotification N
JOIN I_MaintenanceOrder O ON N.MaintenanceOrder = O.MaintenanceOrder
WHERE N.MaintenanceOrder IS NOT NULL AND N.MaintenanceOrder <> ''
UNION ALL
/* Activity 2: Maintenance Order Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Created' AS Activity,
O.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrder O
UNION ALL
/* Activity 3: Maintenance Priority Changed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Priority Changed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(H.UDATE, ' '), H.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
H.USERNAME AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM CDHDR H
JOIN CDPOS P ON H.OBJECTCLAS = P.OBJECTCLAS AND H.OBJECTID = P.OBJECTID AND H.CHANGENR = P.CHANGENR
JOIN I_MaintenanceOrder O ON O.MaintenanceOrder = H.OBJECTID
WHERE H.OBJECTCLAS = 'ORDER'
AND P.TABNAME = 'AFKO'
AND P.FNAME = 'PRIOK'
UNION ALL
/* Activity 4: Maintenance Order Released */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Released' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0002' /* REL Status */
AND J.INACT = ' '
UNION ALL
/* Activity 5: Material Component Added */
SELECT
CAST(C.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Material Component Added' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(C.CreationDate, ' '), COALESCE(C.CreationTime, '000000')), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrderComponent C
JOIN I_MaintenanceOrder O ON C.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 6: Purchase Requisition Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Purchase Requisition Created' AS Activity,
PR.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
PR.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_PurchasingDocumentItem PR
JOIN I_MaintenanceOrder O ON PR.ServiceMaintenanceOrder = O.MaintenanceOrder
WHERE PR.PurchasingDocumentCategory = 'B' /* Requisition */
UNION ALL
/* Activity 7: Goods Issue Posted */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Goods Issue Posted' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(MD.CreationDate, ' '), MD.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
MD.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaterialDocumentItem MD
JOIN I_MaintenanceOrder O ON MD.MaintenanceOrder = O.MaintenanceOrder
WHERE MD.GoodsMovementType = '261'
UNION ALL
/* Activity 8: Work Order Scheduled (Operation Dispatched) */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Work Order Scheduled' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrderOperation OP ON J.OBJNR = OP.MaintenanceOrderOperationInternalID
JOIN I_MaintenanceOrder O ON OP.MaintenanceOrder = O.MaintenanceOrder
WHERE J.STAT = 'I0019' /* DSP Dispatched Status */
AND J.INACT = ' '
UNION ALL
/* Activity 9: Order Operation Confirmed */
SELECT
CAST(CNF.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Operation Confirmed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(CNF.CreationDate, ' '), CNF.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
CNF.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintOrderConfirmation CNF
JOIN I_MaintenanceOrder O ON CNF.MaintenanceOrder = O.MaintenanceOrder
WHERE CNF.IsReversed = ' '
UNION ALL
/* Activity 10: Measurement Reading Recorded */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Measurement Reading Recorded' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(M.CreationDate, ' '), M.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
M.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MeasurementDocument M
JOIN I_MaintenanceOrder O ON M.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 11: Technical Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = ' '
UNION ALL
/* Activity 12: Technical Completion Reversed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Reversed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = 'X' /* Inactive indicates it was removed/reversed */
AND J.CHIND = 'U' /* Update indicator */
UNION ALL
/* Activity 13: Order Cost Settled */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Cost Settled' AS Activity,
JE.CreationDateTime AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
JE.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_ActualPlanJrnlEntryItem JE
JOIN I_MaintenanceOrder O ON JE.OrderID = O.MaintenanceOrder
WHERE JE.BusinessTransactionType = 'KOAO' /* Settlement */
UNION ALL
/* Activity 14: Business Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Business Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0046' /* CLSD Status */
AND J.INACT = ' ' Etapas
Identificar a Interface da Fonte de Dados: Determine como você acessará a interface SQL do SAP S/4HANA. Geralmente, isso é feito via SAP HANA Studio, ABAP Development Tools (ADT) no Eclipse ou uma string de conexão DBaaS, caso o banco de dados HANA esteja exposto para sua camada de analytics.
Verificar a Disponibilidade das Views CDS: Certifique-se de que as views de Core Data Services (CDS) padrão estejam ativas no seu sistema S/4HANA. As principais views necessárias são I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation e I_MeasurementDocument. Você também precisará de acesso à tabela de histórico de status do sistema JCDS e às tabelas de documentos de alteração (CDHDR/CDPOS) para reconstruir o histórico completo de eventos, pois as views CDS padrão costumam mostrar apenas o estado atual.
Preparar o Ambiente SQL: Abra seu editor SQL. Certifique-se de que seu usuário tenha permissões de SELECT nas views SQL DDL (geralmente no schema SAPABAP1 ou similar) para os artefatos listados acima.
Executar a Query de Extração: Copie o script SQL fornecido para o seu editor. Substitua o marcador [Número do seu Mandante] pelo seu ID de mandante SAP específico (ex: 100). Se estiver filtrando por um intervalo de datas específico, atualize os filtros de EventTimestamp nas cláusulas WHERE.
Transformação de Dados: A query lida com a maioria das transformações, como a conversão de timestamps e o mapeamento de códigos de status para texto legível. No entanto, certifique-se de que a coluna EventTimestamp esteja formatada como ISO 8601 (AAAA-MM-DDTHH:MM:SS) durante a exportação, se o seu sistema de destino exigir.
Exportar o Resultado: Execute a query e exporte os resultados para um arquivo CSV ou Parquet. Certifique-se de que a codificação esteja definida como UTF-8 para lidar com caracteres especiais em nomes de usuários ou descrições.
Validar o Mapeamento de Colunas: Abra uma amostra da exportação e garanta que as colunas MaintenanceWorkOrder, Atividade e EventTimestamp estejam totalmente preenchidas. Verifique se a coluna Atividade contém as strings específicas listadas nos requisitos (ex: Ordem de Manutenção Criada, Saída de Mercadoria Lançada).
Upload para o ProcessMind: Importe o arquivo plano validado para o ProcessMind. Mapeie a coluna Atividade para o campo ID da Atividade, MaintenanceWorkOrder para o campo ID do Caso e EventTimestamp para o campo Timestamp.
Configuração
- Filtro de Mandante: Sistemas SAP são multi-client. Sempre filtre por
MANDTouClient(ex: '100') para evitar dados duplicados ou vazamento entre mandantes. - Intervalo de datas: Recomendamos filtrar a
CreationDateda Ordem de Manutenção para os últimos 6 a 12 meses. Consultar o histórico completo deJCDS(Status) ouCDPOS(Documentos de alteração) sem filtros de data pode causar timeouts de performance. - Chave de idioma: A consulta assume o inglês ('E') como padrão. Se sua organização usa outro idioma principal para as descrições, ajuste o filtro de idioma.
- Acesso ao sistema: Requer acesso ao schema de ABAP Core Data Services ou às tabelas HANA subjacentes. O acesso às tabelas brutas JCDS e CDHDR é crucial para a análise histórica de status, pois as views CDS puras geralmente são baseadas em snapshots.
- Tipos de ordem: A consulta extrai todos os tipos de ordem. Você pode filtrar o
MaintenanceOrderType(ex: apenas PM01, PM02) se quiser analisar cenários de manutenção específicos.
a Consulta de Exemplo sql
/* Activity 1: Maintenance Notification Created */
SELECT
CAST(N.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Notification Created' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(N.CreationDate, ' '), N.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
N.MaintenanceOrderType,
N.MaintenancePriority,
N.Equipment AS EquipmentNumber,
N.FunctionalLocation,
N.MaintenancePlant,
N.MaintenancePlannerGroup AS ResponsiblePlannerGroup,
N.MainWorkCenter,
N.MaintenanceNotification AS NotificationNumber,
CAST(NULL AS DATE) AS TargetFinishDate,
N.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceNotification N
JOIN I_MaintenanceOrder O ON N.MaintenanceOrder = O.MaintenanceOrder
WHERE N.MaintenanceOrder IS NOT NULL AND N.MaintenanceOrder <> ''
UNION ALL
/* Activity 2: Maintenance Order Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Created' AS Activity,
O.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrder O
UNION ALL
/* Activity 3: Maintenance Priority Changed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Priority Changed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(H.UDATE, ' '), H.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
H.USERNAME AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM CDHDR H
JOIN CDPOS P ON H.OBJECTCLAS = P.OBJECTCLAS AND H.OBJECTID = P.OBJECTID AND H.CHANGENR = P.CHANGENR
JOIN I_MaintenanceOrder O ON O.MaintenanceOrder = H.OBJECTID
WHERE H.OBJECTCLAS = 'ORDER'
AND P.TABNAME = 'AFKO'
AND P.FNAME = 'PRIOK'
UNION ALL
/* Activity 4: Maintenance Order Released */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Released' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0002' /* REL Status */
AND J.INACT = ' '
UNION ALL
/* Activity 5: Material Component Added */
SELECT
CAST(C.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Material Component Added' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(C.CreationDate, ' '), COALESCE(C.CreationTime, '000000')), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrderComponent C
JOIN I_MaintenanceOrder O ON C.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 6: Purchase Requisition Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Purchase Requisition Created' AS Activity,
PR.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
PR.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_PurchasingDocumentItem PR
JOIN I_MaintenanceOrder O ON PR.ServiceMaintenanceOrder = O.MaintenanceOrder
WHERE PR.PurchasingDocumentCategory = 'B' /* Requisition */
UNION ALL
/* Activity 7: Goods Issue Posted */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Goods Issue Posted' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(MD.CreationDate, ' '), MD.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
MD.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaterialDocumentItem MD
JOIN I_MaintenanceOrder O ON MD.MaintenanceOrder = O.MaintenanceOrder
WHERE MD.GoodsMovementType = '261'
UNION ALL
/* Activity 8: Work Order Scheduled (Operation Dispatched) */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Work Order Scheduled' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrderOperation OP ON J.OBJNR = OP.MaintenanceOrderOperationInternalID
JOIN I_MaintenanceOrder O ON OP.MaintenanceOrder = O.MaintenanceOrder
WHERE J.STAT = 'I0019' /* DSP Dispatched Status */
AND J.INACT = ' '
UNION ALL
/* Activity 9: Order Operation Confirmed */
SELECT
CAST(CNF.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Operation Confirmed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(CNF.CreationDate, ' '), CNF.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
CNF.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintOrderConfirmation CNF
JOIN I_MaintenanceOrder O ON CNF.MaintenanceOrder = O.MaintenanceOrder
WHERE CNF.IsReversed = ' '
UNION ALL
/* Activity 10: Measurement Reading Recorded */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Measurement Reading Recorded' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(M.CreationDate, ' '), M.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
M.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MeasurementDocument M
JOIN I_MaintenanceOrder O ON M.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 11: Technical Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = ' '
UNION ALL
/* Activity 12: Technical Completion Reversed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Reversed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = 'X' /* Inactive indicates it was removed/reversed */
AND J.CHIND = 'U' /* Update indicator */
UNION ALL
/* Activity 13: Order Cost Settled */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Cost Settled' AS Activity,
JE.CreationDateTime AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
JE.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_ActualPlanJrnlEntryItem JE
JOIN I_MaintenanceOrder O ON JE.OrderID = O.MaintenanceOrder
WHERE JE.BusinessTransactionType = 'KOAO' /* Settlement */
UNION ALL
/* Activity 14: Business Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Business Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0046' /* CLSD Status */
AND J.INACT = ' '