Exportação de Notas de Crédito de Compra (Devolução de Compra)
📌 Descrição do Processo
A exportação de notas de crédito de compra representa o fluxo de devolução de insumos do WMS para o SAP B1.
O WMS atua como origem dos dados de devolução (pedidos processados com volumes e lotes), enquanto o SAP B1 recebe as PurchaseCreditNotes geradas a partir de rascunhos (Drafts) previamente criados.
A integração garante que as devoluções processadas no WMS sejam automaticamente registradas como notas de crédito de compra no SAP B1, incluindo linhas de documento, lotes e referências fiscais.
Este processo consome rascunhos (Drafts) existentes no SAP B1 como base para a criação das notas de crédito. Após o envio bem-sucedido, o rascunho é marcado como processado, o pedido é concluído no WMS e os registros de fatura são atualizados. A integração possui tratamento individual por nota — falhas em uma nota não impedem o processamento das demais.
🔄 Fluxo de Exportação
-
Consulta de Pedidos Processados no WMS
- O WMS busca pedidos de devolução com status de processamento concluído, incluindo informações de volumes e lotes (
PedidoItemVolumeLoteViews). - Para cada pedido, o rascunho (
Draft) correspondente é recuperado do SAP B1 viaDocEntry. - Apenas pedidos com rascunhos válidos são incluídos no processamento.
- O WMS busca pedidos de devolução com status de processamento concluído, incluindo informações de volumes e lotes (
-
Transformação dos Dados (Parse)
- Os rascunhos do SAP B1 são mapeados para requisições de criação (
B1CreatePurchaseCreditNoteRequest) via AutoMapper. - As linhas do documento são construídas agrupando itens por produto, associando o código B1 do produto e montando os lotes a partir dos dados de volume/lote do WMS.
- O código de armazém é extraído do endereço de destino do pedido.
- Os rascunhos do SAP B1 são mapeados para requisições de criação (
-
Envio das Notas de Crédito ao SAP B1
- Cada nota de crédito é enviada individualmente via
POSTno endpoint/PurchaseCreditNotesdo SAP B1. - Em caso de sucesso:
- O pedido é concluído no WMS.
- O rascunho é marcado como processado no SAP B1.
- Os registros de fatura são atualizados.
- Cada nota de crédito é enviada individualmente via
-
Registro de Rastreamento
- Os resultados (sucesso/falha) são registrados no
IntegrationTrackingcom o tipoPurchaseCreditNoteReturn. - O
DocEntryretornado pelo SAP B1 é salvo como identificador externo.
- Os resultados (sucesso/falha) são registrados no
🖥️ APIs Envolvidas
-
SAP B1 → WMS (GET)
/Drafts({docEntry})→ recupera o rascunho completo da nota de crédito, incluindo linhas, lotes e referências fiscais.
-
WMS → SAP B1 (POST)
/PurchaseCreditNotes→ cria a nota de crédito de compra definitiva no SAP B1 com linhas, lotes, referências de documento e extensões fiscais.
-
WMS → SAP B1 (PATCH)
/Drafts({docEntry})→ marca o rascunho como processado após criação bem-sucedida da nota de crédito.
📦 Exemplo de Exportação (Objeto Fictício)
Cenário:
- Fornecedor: Distribuidora XYZ S.A. (
F00230) - Pedido WMS: CodPedido 85010
- Rascunho origem: DocEntry 60500
- Produto:
PA-456 – Filtro de Óleo - Quantidade devolvida: 20 unidades, lote único
1. Requisição enviada ao SAP B1
{
"DocDate": "2026-03-25",
"DocDueDate": "2026-04-25",
"TaxDate": "2026-03-25",
"CardCode": "F00230",
"Comments": "Devolução ref. pedido 85010",
"DocumentLines": [
{
"BaseType": 20,
"BaseEntry": 60500,
"BaseLine": 0,
"ItemCode": "PA-456",
"InventoryQuantity": 20,
"Price": 45.00,
"WarehouseCode": "WH02",
"MeasureUnit": "UN",
"BatchNumbers": [
{
"BatchNumber": "LOTE-2025-100",
"Quantity": 20,
"ItemCode": "PA-456",
"ManufacturingDate": "2025-06-01",
"ExpiryDate": "2027-06-01"
}
]
}
]
}
2. Resultado
- Nota de crédito criada no SAP B1 com DocEntry 61200, DocNum 73050.
- Rascunho
60500marcado como processado. - Pedido
85010concluído no WMS. - Registro de
IntegrationTrackingcriado: tipoPurchaseCreditNoteReturn, ExternalId61200, RelatedId85010.
✅ Regras de Negócio
- Apenas pedidos de devolução com
PedidoItemVolumeLoteViewspreenchidas são processados — pedidos sem dados de volume/lote são ignorados no Parse. - Cada nota de crédito é enviada individualmente ao SAP B1. Falhas em uma nota não impedem o processamento das demais na mesma
ErpIntegration. - Se uma
ErpIntegrationnão possui notas de crédito para processar, ela é ignorada com log informativo. - O
BaseType = 20nas linhas do documento referencia o tipoPurchaseDeliveryNotes, vinculando a nota de crédito ao documento original de entrada. - Os lotes (
BatchNumbers) são construídos a partir dos dados dePedidoItemVolumeLoteViewdo WMS, não dos lotes do rascunho original. - O código do produto no SAP B1 é obtido via
ProdutosRelacionadosfiltrado porEDefIntegration.B1. - Após envio bem-sucedido, três ações são executadas em sequência: conclusão do pedido no WMS, marcação do rascunho como processado e atualização dos registros de fatura.
- O rastreamento é salvo via
IntegrationTrackingcom tipoEIntegrationOperationType.PurchaseCreditNoteReturn, registrando tanto sucessos quanto falhas. - Em caso de erro no envio de um lote de notas de uma
ErpIntegration, o erro é logado e o fluxo continua para a próxima integração.
Esse fluxo garante que as devoluções processadas no WMS sejam automaticamente exportadas como notas de crédito de compra no SAP B1, com rastreamento completo de sucesso/falha e conclusão automática dos pedidos.
⚙️ Especificações Técnicas
Fluxo de execução
- Query: Consulta pedidos de devolução processados no WMS e recupera os rascunhos (
Drafts) correspondentes do SAP B1 para cadaErpIntegrationconfigurada. - Parse: Converte os rascunhos e dados de volume/lote do WMS em requisições
B1CreatePurchaseCreditNoteRequestvia AutoMapper, construindo linhas e lotes manualmente. - Send: Envia cada nota de crédito ao SAP B1, conclui pedidos, marca rascunhos como processados e registra rastreamento de integração.
Detalhamento das Etapas
Query
B1ProcessedPurchaseCreditNotesIntegrator.Query()
└── B1ProcessedPurchaseCreditNotesQueryService.GetProcessedPurchaseCreditNotesAsync()
├── ErpIntegrationsService.GetErpToIntegrateAsync()
└── [Para cada ErpIntegration]
├── PedidoRepository.GetPurchaseCreditNotesOrdersAsync()
└── [Para cada Pedido]
└── B1DraftsConnector.GetDraftByKeyAsync<B1PurchaseCreditNoteResponse>()
B1ProcessedPurchaseCreditNotesIntegrator.Query(): delega ao serviço de consulta.B1ProcessedPurchaseCreditNotesQueryService.GetProcessedPurchaseCreditNotesAsync(): busca todas asErpIntegrationsativas, consulta pedidos de devolução no repositório e recupera os rascunhos correspondentes do SAP B1 viaDraftsConnector.
Parse
B1ProcessedPurchaseCreditNotesIntegrator.Parse()
└── B1PurchaseCreditNoteParseService.ParsePurchaseCreditNotesToB1Async()
└── [Para cada ProcessedPurchaseCreditNotesByIntegration]
└── ParseSingleOrder()
├── Mapper.Map<B1CreatePurchaseCreditNoteRequest>(draft)
└── BuildDocumentLines()
├── Agrupamento de itens por produto
├── Resolução de código B1 via ProdutosRelacionados
└── BuildBatchNumbers() (volume/lote → BatchNumbers)
B1PurchaseCreditNoteParseService.ParsePurchaseCreditNotesToB1Async(): itera sobre cada integração e transforma os dados.ParseSingleOrder(): valida dados de volume/lote, mapeia o rascunho via AutoMapper e constrói as linhas manualmente.BuildDocumentLines(): agrupa itens por produto, resolve códigos B1 e monta lotes.BuildBatchNumbers(): extrai informações de lote dePedidoItemVolumeLoteView.
Send
B1ProcessedPurchaseCreditNotesIntegrator.Send()
└── [Para cada B1CreatePurchaseCreditNotesByIntegration]
└── SendCreditNotesAndSaveTrackingAsync()
├── B1ProcessedPurchaseCreditNotesService.SendPurchaseCreditNotesToB1Async()
│ └── [Para cada PurchaseCreditNote]
│ ├── B1PurchaseCreditNotesConnector.CreatePurchaseCreditNoteAsync()
│ ├── ConcludeOrderService.ConcludeOrderAsync()
│ ├── B1DraftsConnector.MarkDraftAsProcessedAsync()
│ └── B1CommonInvoiceService.OverrideOrderInvoicesAsync()
└── SendAndSaveTrackingAsync()
└── OrderIntegrationService.SaveOrderIntegrationTrackingsAsync()
SendCreditNotesAndSaveTrackingAsync(): orquestra o envio e rastreamento para umaErpIntegration, logando contagem de sucessos e falhas.B1ProcessedPurchaseCreditNotesService.SendPurchaseCreditNotesToB1Async(): envia cada nota individualmente ao SAP B1 e, em caso de sucesso, conclui o pedido, marca o rascunho e atualiza faturas.SendAndSaveTrackingAsync(): método genérico que mapeia resultados paraIntegrationUpdateResulte persiste o rastreamento viaOrderIntegrationService.
Resumo do Funcionamento
- Direção: WMS → SAP B1 (exportação de notas de crédito de compra).
- Origem dos dados: rascunhos (
Drafts) no SAP B1 combinados com dados de volume/lote dos pedidos processados no WMS. - Processamento individual: cada nota é enviada separadamente, com tratamento de erro isolado por nota e por
ErpIntegration. - Multi-ERP: suporta múltiplas configurações de
ErpIntegration, processando cada uma independentemente. - Pós-processamento: após criação bem-sucedida, o pedido é concluído, o rascunho é marcado e os registros de fatura são atualizados.
- Rastreamento: todos os resultados (sucesso e falha) são persistidos no
IntegrationTrackingcom tipoPurchaseCreditNoteReturn. - Tratamento de erros: erros por nota são capturados e logados sem interromper o processamento. Erros por
ErpIntegrationsão capturados no nível do integrator com log de erro.