Pular para o conteúdo principal

Cancelamento de Pedidos - Integração Bidirecional

📌 Descrição do Processo

O cancelamento de pedidos representa um fluxo bidirecional entre SAP B1 e WMS para sincronização de cancelamentos. O sistema garante que pedidos cancelados em qualquer um dos sistemas sejam automaticamente replicados no outro.

🔄 Fluxo Bidirecional:

  • B1 → WMS: Pedidos cancelados no SAP B1 são replicados no WMS
  • WMS → B1: Pedidos cancelados no WMS são replicados no SAP B1
Importante

Este processo mantém a sincronização bidirecional de cancelamentos, garantindo que ambos os sistemas reflitam o mesmo status dos pedidos.


🔄 Fluxo de Cancelamento

1. Cancelamento B1 → WMS

  1. Cancelamento no SAP B1

    • Usuário cancela pedido de venda no B1.
    • Status do pedido é alterado para cancelado.
  2. Consulta pelo WMS (GET)

    • WMS consome API para identificar pedidos cancelados no B1.
    • Utiliza cursor para buscar apenas cancelamentos novos.
  3. Replicação no WMS

    • WMS atualiza status do pedido para cancelado.
    • Operações de separação são interrompidas se necessário.

2. Cancelamento WMS → B1

  1. Cancelamento no WMS

    • Operador cancela pedido no WMS.
    • Sistema registra motivo do cancelamento.
  2. Notificação ao SAP B1 (POST)

    • WMS envia notificação de cancelamento para o B1.
    • Status do pedido é atualizado no B1.
  3. Atualização no SAP B1

    • B1 recebe notificação e atualiza status.
    • Pedido fica disponível para análise ou reativação.

🖥️ APIs Envolvidas

  • SAP B1 → WMS (GET)

    • /Orders → consulta pedidos cancelados no B1.
    • Filtro por status cancelado e data de modificação.
  • WMS → SAP B1 (POST)

    • /Orders → atualiza status do pedido no B1.
    • Inclui motivo do cancelamento.

📦 Exemplo de Cancelamento (Objeto Fictício)

Cenário: Cancelamento B1 → WMS

  • Pedido: SO-65021
  • Motivo: Cliente solicitou cancelamento
  • Data: 2025-01-15

1. Cancelamento no SAP B1

{
"DocEntry": 65021,
"CardCode": "C10001",
"CardName": "AutoPeças Brasil Ltda.",
"DocumentStatus": "bost_Cancelled",
"Cancelled": "Y",
"CancelDate": "2025-01-15",
"CancelReason": "Cliente solicitou cancelamento"
}

2. Replicação no WMS

  • Pedido SO-65021 marcado como cancelado
  • Separação interrompida se em andamento
  • Estoque liberado para outros pedidos

Cenário: Cancelamento WMS → B1

  • Pedido: SO-65022
  • Motivo: Falta de estoque
  • Operador: João Silva

1. Cancelamento no WMS

  • Operador cancela pedido no sistema
  • Motivo registrado: "Falta de estoque"

2. Notificação ao SAP B1

{
"DocEntry": 65022,
"DocumentStatus": "bost_Cancelled",
"Cancelled": "Y",
"CancelDate": "2025-01-15",
"CancelReason": "Falta de estoque - WMS",
"CancelUser": "João Silva"
}

3. Atualização no SAP B1

  • Pedido SO-65022 marcado como cancelado
  • Motivo registrado no B1
  • Pedido disponível para análise

✅ Regras de Negócio

  • Sincronização bidirecional: Cancelamentos em qualquer sistema são replicados no outro.
  • Motivo obrigatório: Todo cancelamento deve ter motivo registrado.
  • Validação de status: Apenas pedidos ativos podem ser cancelados.
  • Auditoria completa: Todos os cancelamentos são registrados com timestamp e usuário.
  • Prevenção de conflitos: Sistema verifica se pedido já foi cancelado antes de processar.
  • Liberação de recursos: Estoque e operações são liberados após cancelamento.

Importante sobre Cancelamentos

Cancelamentos são irreversíveis após sincronização. Em caso de erro, o pedido deve ser reativado manualmente em ambos os sistemas.


Resumo

Esse fluxo garante a sincronização bidirecional de cancelamentos entre SAP B1 e WMS, mantendo ambos os sistemas atualizados com o status real dos pedidos.


⚙️ Especificações Técnicas

Fluxo de execução

  • Query (B1→WMS): Consulta pedidos cancelados no B1, utilizando cursor para buscar apenas cancelamentos novos.
  • Query (WMS→B1): Consulta pedidos cancelados no WMS que precisam ser sincronizados com o B1.
  • Parse: Converte dados de cancelamento para modelos internos, identificando direção da sincronização.
  • Send: Replica cancelamentos no sistema de destino, atualizando status e registrando auditoria.

Detalhamento das Etapas

Query (B1→WMS)

B1OrderCancelImportIntegrator.Query()
└── B1OrderCancelImportService.GetCancelledOrdersFromB1Async()
└── B1OrderConnector.GetCancelledOrdersAsync()
  • B1OrderCancelImportIntegrator.Query(): Inicia consulta de pedidos cancelados no B1.
  • B1OrderCancelImportService.GetCancelledOrdersFromB1Async(): Busca pedidos com status cancelado no B1.
  • B1OrderConnector.GetCancelledOrdersAsync(): Executa consulta no SAP B1, filtrando por DocumentStatus = bost_Cancelled e cursor de data.

Query (WMS→B1)

WMSOrderCancelExportIntegrator.Query()
└── WMSOrderCancelExportService.GetCancelledOrdersFromWmsAsync()
└── OrderService.GetCancelledOrdersToSyncAsync()
  • WMSOrderCancelExportIntegrator.Query(): Inicia consulta de pedidos cancelados no WMS.
  • WMSOrderCancelExportService.GetCancelledOrdersFromWmsAsync(): Busca pedidos cancelados no WMS que precisam ser sincronizados.
  • OrderService.GetCancelledOrdersToSyncAsync(): Filtra pedidos cancelados que ainda não foram sincronizados com o B1.

Parse

OrderCancelIntegrator.Parse()
├── B1OrderCancelImportService.ParseB1CancelledOrders()
└── WMSOrderCancelExportService.ParseWmsCancelledOrders()
  • OrderCancelIntegrator.Parse(): Converte dados de cancelamento para modelos internos.
  • ParseB1CancelledOrders(): Mapeia cancelamentos do B1 para modelos do WMS.
  • ParseWmsCancelledOrders(): Mapeia cancelamentos do WMS para modelos do B1.

Send

OrderCancelIntegrator.Send()
├── B1OrderCancelImportService.SyncCancelledOrdersToWmsAsync()
├── WMSOrderCancelExportService.SyncCancelledOrdersToB1Async()
├── OrderCancelService.SaveCancelTrackings()
└── OrderCancelService.UpdateCancelCursorsAsync()
  • OrderCancelIntegrator.Send(): Replica cancelamentos nos sistemas de destino.
  • SyncCancelledOrdersToWmsAsync(): Atualiza status de pedidos cancelados no WMS.
  • SyncCancelledOrdersToB1Async(): Atualiza status de pedidos cancelados no B1.
  • SaveCancelTrackings(): Registra auditoria de cada cancelamento sincronizado.
  • UpdateCancelCursorsAsync(): Atualiza cursores de integração para próxima execução.

Resumo do Funcionamento

  • Sincronização bidirecional: Cancelamentos são replicados em ambas as direções (B1↔WMS).
  • Consulta incremental: Apenas cancelamentos novos são processados, utilizando cursor para eficiência.
  • Validação robusta: Sistema verifica conflitos e previne cancelamentos duplicados.
  • Auditoria completa: Todos os cancelamentos são registrados com timestamp, usuário e motivo.
  • Recuperação de erros: Sistema permite reprocessamento de cancelamentos com falha.