Pular para o conteúdo principal

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.

Importante

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

  1. 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 via DocEntry.
    • Apenas pedidos com rascunhos válidos são incluídos no processamento.
  2. 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.
  3. Envio das Notas de Crédito ao SAP B1

    • Cada nota de crédito é enviada individualmente via POST no endpoint /PurchaseCreditNotes do 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.
  4. Registro de Rastreamento

    • Os resultados (sucesso/falha) são registrados no IntegrationTracking com o tipo PurchaseCreditNoteReturn.
    • O DocEntry retornado pelo SAP B1 é salvo como identificador externo.

🖥️ 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 60500 marcado como processado.
  • Pedido 85010 concluído no WMS.
  • Registro de IntegrationTracking criado: tipo PurchaseCreditNoteReturn, ExternalId 61200, RelatedId 85010.

✅ Regras de Negócio

  • Apenas pedidos de devolução com PedidoItemVolumeLoteViews preenchidas 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 ErpIntegration não possui notas de crédito para processar, ela é ignorada com log informativo.
  • O BaseType = 20 nas linhas do documento referencia o tipo PurchaseDeliveryNotes, vinculando a nota de crédito ao documento original de entrada.
  • Os lotes (BatchNumbers) são construídos a partir dos dados de PedidoItemVolumeLoteView do WMS, não dos lotes do rascunho original.
  • O código do produto no SAP B1 é obtido via ProdutosRelacionados filtrado por EDefIntegration.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 IntegrationTracking com tipo EIntegrationOperationType.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.

Resumo

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 cada ErpIntegration configurada.
  • Parse: Converte os rascunhos e dados de volume/lote do WMS em requisições B1CreatePurchaseCreditNoteRequest via 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 as ErpIntegrations ativas, consulta pedidos de devolução no repositório e recupera os rascunhos correspondentes do SAP B1 via DraftsConnector.

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 de PedidoItemVolumeLoteView.

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 uma ErpIntegration, 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 para IntegrationUpdateResult e persiste o rastreamento via OrderIntegrationService.

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 IntegrationTracking com tipo PurchaseCreditNoteReturn.
  • Tratamento de erros: erros por nota são capturados e logados sem interromper o processamento. Erros por ErpIntegration são capturados no nível do integrator com log de erro.