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
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
-
Cancelamento no SAP B1
- Usuário cancela pedido de venda no B1.
- Status do pedido é alterado para cancelado.
-
Consulta pelo WMS (GET)
- WMS consome API para identificar pedidos cancelados no B1.
- Utiliza cursor para buscar apenas cancelamentos novos.
-
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
-
Cancelamento no WMS
- Operador cancela pedido no WMS.
- Sistema registra motivo do cancelamento.
-
Notificação ao SAP B1 (POST)
- WMS envia notificação de cancelamento para o B1.
- Status do pedido é atualizado no B1.
-
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.
Cancelamentos são irreversíveis após sincronização. Em caso de erro, o pedido deve ser reativado manualmente em ambos os sistemas.
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_Cancellede 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.