Exportação de Saídas Segregadas Processadas — Faturamento de Saídas Segregadas no SAP B1
📌 Descrição do Processo
A exportação de saídas segregadas processadas representa o fluxo de faturamento de saídas segregadas do WMS para o SAP B1. O WMS identifica pedidos de saída segregada já movimentados e não notificados, enquanto o SAP B1 recebe as notas fiscais (Invoices) correspondentes, vinculadas ao pedido de venda original.
A integração garante que as saídas segregadas processadas no WMS sejam automaticamente faturadas no SAP B1, com criação de nota fiscal vinculada ao pedido de venda original, conclusão do pedido no WMS e rastreabilidade completa via IntegrationTracking.
Este processo utiliza o padrão pooling — busca periodicamente pedidos de saída segregada movimentados e ainda não notificados ao ERP. Cada nota fiscal é vinculada ao pedido de venda original no SAP B1 via BaseEntry/BaseLine. Lotes do tipo LOTE UNICO são filtrados automaticamente. A integração também busca o SystemSerialNumber de cada lote no SAP B1 antes do envio.
🔄 Fluxo de Exportação
-
Identificação de Saídas Segregadas Processadas no WMS (Query)
- O WMS consulta pedidos com operação
SaidaSegregado, statusMovimentado, que possuem referência ao SAP B1 (CodPedidoPolo). - Apenas pedidos que já foram importados (
SegregatedExitsImport) mas ainda não foram exportados (SegregatedExitsReturn) são selecionados. - Para cada pedido, o WMS busca os dados do pedido de venda original no SAP B1 via
/Orders, além de informações de itens (InventoryUOM) e unidades de medida.
- O WMS consulta pedidos com operação
-
Montagem das Requisições de Faturamento (Parse)
- Os itens do pedido WMS são agrupados por
CodProduto,IdLoteClassificacaoe código de produto relacionado. - Cada grupo é convertido em uma linha da nota fiscal (
B1InvoiceCreateRequest), comBaseEntryeBaseLinevinculando ao pedido de venda original. - Lotes
LOTE UNICOsão filtrados. Para lotes reais, oSystemSerialNumberé obtido do endpointBatchNumberDetailsdo SAP B1. - A unidade de medida é determinada pela prioridade:
InventoryUOMdo item →UoMEntryda linha original → fallback6(KG).
- Os itens do pedido WMS são agrupados por
-
Envio das Notas Fiscais ao SAP B1 (Send)
- As notas fiscais são enviadas via
POST /Invoicesao SAP B1, processadas em chunks paralelos de 5. - Para cada nota criada com sucesso, o pedido correspondente é concluído no WMS.
- Os dados da nota fiscal (número sequencial, data, valor) são salvos como
PedidoTitulono WMS.
- As notas fiscais são enviadas via
-
Registro de Auditoria
- Cada operação (sucesso ou falha) é registrada na tabela
IntegrationTrackingcom tipoSegregatedExitsReturn, incluindo request e response serializados.
- Cada operação (sucesso ou falha) é registrada na tabela
🖥️ APIs Envolvidas
-
WMS → SAP B1 (GET)
/Orders?$filter=DocNum eq {docNum}→ recupera as linhas do pedido de venda original, incluindoDocEntry,LineNum,UnitPrice,UoMEntry,TaxCode,CFOPCodee informações de warehouse./Items→ consulta detalhes dos itens para obterInventoryUOM(unidade de medida de inventário)./UnitOfMeasurements→ consulta todas as unidades de medida para mapear código UoM paraAbsEntry./BatchNumberDetails?$filter=(ItemCode eq '{itemCode}' and Batch eq '{batch}') or ...→ consulta oSystemSerialNumberde cada lote.
-
WMS → SAP B1 (POST)
/Invoices→ cria nota fiscal (A/R Invoice) no SAP B1 com linhas vinculadas ao pedido de venda original viaBaseEntry/BaseLine(tipoSalesOrder). RetornaDocEntry,DocNum,SequenceSerial,DocDate.
📦 Exemplo de Exportação (Objeto Fictício)
Cenário:
- Cliente: AutoPeças Brasil Ltda. (
C00180) - Pedido WMS: #87010, referência no SAP B1: DocNum 61200
- Produto:
PA-456 – Amortecedor Dianteiro(20 unidades, loteLT-2026-050) - Depósito segregado: 01.05
- Valor unitário: R$ 85,00
- Volumes: 4
1. Pedido de Venda Original no SAP B1
{
"DocEntry": 61200,
"DocNum": 61200,
"CardCode": "C00180",
"CardName": "AutoPeças Brasil Ltda.",
"DocumentLines": [
{
"LineNum": 0,
"ItemCode": "PA-456",
"ItemDescription": "Amortecedor Dianteiro",
"Quantity": 20,
"UnitPrice": 85.00,
"TaxCode": "ICMS-002",
"CFOPCode": "5101",
"WarehouseCode": "01.05",
"UoMEntry": 3
}
]
}
2. Nota Fiscal Criada no SAP B1
{
"DocEntry": 72300,
"DocNum": 72300,
"SequenceSerial": 201,
"DocDate": "2026-03-27",
"CardCode": "C00180",
"NumAtCard": "87010",
"Comments": "Saída segregada processada pelo WMS - Pedido 87010",
"TaxExtension": {
"PackQuantity": 4
},
"DocumentLines": [
{
"ItemCode": "PA-456",
"InventoryQuantity": 20,
"UnitPrice": 85.00,
"WarehouseCode": "01.05",
"BaseType": 17,
"BaseEntry": 61200,
"BaseLine": 0,
"UoMEntry": 3,
"BatchNumbers": [
{
"BatchNumber": "LT-2026-050",
"Quantity": 20,
"ItemCode": "PA-456",
"SystemSerialNumber": 78
}
]
}
]
}
3. Resultado no WMS
- Pedido #87010 foi concluído (status atualizado para finalizado).
- Registro de
PedidoTitulocriado: número da NF201, data2026-03-27, código polo72300, valor totalR$ 1.700,00. IntegrationTrackingregistrado com tipoSegregatedExitsReturn,ExternalId = "72300"eRelatedId = 87010.
✅ Regras de Negócio
- Apenas pedidos com operação
SaidaSegregado, statusMovimentadoeCodPedidoPolopreenchido são processados. - O pedido deve ter um
IntegrationTrackingde sucesso com tipoSegregatedExitsImport(já importado) e não ter um de tipoSegregatedExitsReturn(ainda não exportado). - Os itens do pedido são agrupados por
CodProduto,IdLoteClassificacaoe código de produto relacionado, consolidando quantidades por classificação em uma única linha de invoice. - Cada linha da nota fiscal é vinculada à linha original do pedido de venda no SAP B1 via
BaseEntryeBaseLine(tipoSalesOrder). - Lotes com nome
LOTE UNICOsão filtrados e não incluídos nosBatchNumbersda nota fiscal. - Para lotes reais, o
SystemSerialNumberé obtido do endpointBatchNumberDetailsdo SAP B1 antes do envio. - A unidade de medida (
UoMEntry) segue a prioridade:InventoryUOMdo item (convertido via tabela de UoM) →UoMEntryda linha original do pedido → fallback6(KG). - O campo
TaxExtension.PackQuantityé preenchido com a contagem de volumes do pedido WMS. - Os parâmetros
SequenceCodeeBplIdAssignedToInvoicesão configuráveis via parâmetros de integração B1. - Após a criação bem-sucedida da nota fiscal, o pedido é concluído no WMS automaticamente.
- Os dados da nota fiscal (número sequencial, data, DocNum, valor total) são persistidos como
PedidoTitulono WMS. - Em caso de falha no envio de uma nota fiscal, o erro é logado e o processamento continua para as próximas notas (falha não interrompe o lote).
- Cada operação (sucesso ou falha) gera um registro de
IntegrationTrackingcom tipoSegregatedExitsReturn.
Esse fluxo garante que as saídas segregadas processadas no WMS sejam automaticamente faturadas no SAP B1 com criação de nota fiscal vinculada ao pedido de venda original, conclusão do pedido e rastreabilidade completa, mantendo ambos os sistemas sincronizados no ciclo de saída segregada.
⚙️ Especificações Técnicas
Fluxo de execução
- Query: Consulta pedidos de saída segregada movimentados e não notificados no WMS, enriquecendo com dados do pedido de venda original, itens e unidades de medida do SAP B1.
- Parse: Agrupa itens por produto e classificação, constrói requisições de nota fiscal (
B1InvoiceCreateRequest) com vinculação ao pedido original, determina UoM e buscaSystemSerialNumberdos lotes. - Send: Envia notas fiscais ao SAP B1, conclui os pedidos no WMS, salva os dados da NF como
PedidoTituloe registra auditoria noIntegrationTracking.
Detalhamento das Etapas
Query
B1ProcessedSegregatedExitsIntegrator.Query()
└── B1ProcessedSegregatedExitsService.GetProcessedSegregatedExitsAsync()
├── ErpIntegrationsService.GetErpToIntegrateAsync(EDefIntegration.B1)
└── [Para cada integração ERP B1]
├── OrderIntegrationService.GetErpProcessedSegregatedExitsAsync(erpId)
│ └── PedidoRepository.FindProcessedSegregatedExitsAsync(erpId)
├── B1OrderConnector.GetOrderByDocNumAsync(codPedidoPolo) [por pedido]
├── B1ItemConnector.GetItemsAsync(itemCodes)
└── B1UoMConnector.GetAllUnitOfMeasurementsAsync()
- B1ProcessedSegregatedExitsIntegrator.Query(): Ponto de entrada — delega a busca ao serviço.
- PedidoRepository.FindProcessedSegregatedExitsAsync(): Consulta pedidos com operação
SaidaSegregado, statusMovimentado, com tracking de importação mas sem tracking de exportação. - B1OrderConnector.GetOrderByDocNumAsync(): Para cada pedido, busca as linhas do pedido de venda original no SAP B1 (preços, TaxCode, CFOPCode, UoMEntry).
- B1ItemConnector.GetItemsAsync(): Busca
InventoryUOMpara todos os itens únicos das ordens. - B1UoMConnector.GetAllUnitOfMeasurementsAsync(): Carrega o dicionário de código UoM →
AbsEntry.
Parse
B1ProcessedSegregatedExitsIntegrator.Parse()
└── B1ProcessedSegregatedExitsService.ParseSegregatedExitsToB1Async()
├── [Agrupamento de itens por CodProduto + IdLoteClassificacao + CodProdutoRel]
├── [Montagem de B1InvoiceCreateRequest com BaseEntry/BaseLine]
├── [Determinação de UoMEntry: InventoryUOM → UoMEntry original → fallback 6]
├── [Filtragem de lotes LOTE UNICO]
└── B1BatchNumberDetailsConnector.GetBatchesSystemSerialNumbers(batches)
- ParseSegregatedExitsToB1Async(): Orquestra toda a transformação:
- Agrupa itens do pedido WMS por produto e classificação de lote.
- Cria linhas de invoice com
BaseEntry/BaseLinevinculando ao pedido de venda original no SAP B1. - Filtra lotes
LOTE UNICOdosBatchNumbers. - Determina a unidade de medida com lógica de prioridade (item UoM → linha original → fallback).
- Busca
SystemSerialNumberpara todos os lotes reais viaBatchNumberDetails.
Send
B1ProcessedSegregatedExitsIntegrator.Send()
└── [Para cada integração ERP]
├── B1ProcessedSegregatedExitsService.SendInvoicesToB1Async()
│ └── [Chunks de 5 invoices em paralelo]
│ ├── B1InvoiceConnector.CreateInvoiceAsync(request)
│ ├── ConcludeOrderService.ConcludeOrderAsync(codPedido)
│ └── B1CommonInvoiceService.SaveOrderInvoicesAsync()
│ └── PedidoTituloService.SavePedidoTitulosAsync()
│
└── B1ProcessedSegregatedExitsService.SaveIntegrationTrackingsAsync()
└── OrderIntegrationService.SaveOrderIntegrationTrackingsAsync()
└── IntegrationTrackingRepository.AddRangeAsync()
- SendInvoicesToB1Async(): Envia notas fiscais ao SAP B1 em chunks paralelos de 5 via
POST /Invoices. Para cada nota criada com sucesso, conclui o pedido no WMS e salva os dados da NF comoPedidoTitulo. - ConcludeOrderService.ConcludeOrderAsync(): Conclui no WMS os pedidos cujas notas foram criadas com sucesso no SAP B1.
- B1CommonInvoiceService.SaveOrderInvoicesAsync(): Persiste os dados da NF no WMS como
PedidoTitulo(número sequencial, data, DocNum, valor total). - SaveIntegrationTrackingsAsync(): Salva registros de
IntegrationTrackingcom tipoSegregatedExitsReturn, request/response serializados,ExternalId= DocEntry da NF eRelatedId= código do pedido.
Resumo do Funcionamento
- Busca seletiva: Apenas pedidos de saída segregada já movimentados, importados e ainda não exportados são processados, garantindo idempotência.
- Vinculação com pedido original: Cada linha da NF referencia a linha original do pedido de venda no SAP B1 via
BaseEntry/BaseLine(tipoSalesOrder), garantindo rastreabilidade contábil. - Consolidação de itens: Itens são agrupados por produto e classificação de lote, consolidando quantidades em linhas únicas de invoice.
- Resolução de UoM: Unidade de medida é determinada com lógica de prioridade em três níveis, garantindo compatibilidade com o SAP B1.
- Processamento paralelo: Notas fiscais são enviadas ao SAP B1 em chunks de 5 para otimizar throughput.
- Conclusão automática: Pedidos faturados com sucesso são automaticamente concluídos no WMS.
- Persistência de NF: Dados da nota fiscal são salvos como
PedidoTitulo, vinculando pedido WMS ao documento fiscal do SAP B1. - Rastreabilidade completa: Cada operação gera um
IntegrationTrackingcom tipoSegregatedExitsReturn, armazenando request e response completos. - Tratamento de erros: Falhas no envio de uma nota fiscal são logadas e não interrompem o processamento das demais. Cada falha é registrada no
IntegrationTrackingcom o erro serializado.