Pular para o conteúdo principal

Situação da produção

Onde está cada peça, agora.

GET /api/v1/integration/production-status

curl -H "X-API-Key: mgi_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
https://seu-servidor/api/v1/integration/production-status

Resposta

{
"codes": [
{
"barcode": "ABC-001",
"lotQuantity": 4,
"orderRef": "0001",
"status": "IN_PROGRESS",
"quantityDone": 0,
"stages": [
{
"sequence": 1,
"service": "SERVICE_A",
"machineName": "MACHINE 01",
"status": "DONE",
"startedAt": "2026-09-18T11:02:00Z",
"finishedAt": "2026-09-18T11:47:00Z",
"scheduledFor": "2026-09-18T08:00:00Z",
"quantityCompleted": 4,
"quantityInProgress": 0,
"quantityWaiting": 0,
"batchId": 101
},
{
"sequence": 2,
"service": "SERVICE_B",
"machineName": "MACHINE 02",
"status": "PARTIAL",
"startedAt": "2026-09-18T13:20:00Z",
"finishedAt": null,
"scheduledFor": "2026-09-18T13:00:00Z",
"quantityCompleted": 2,
"quantityInProgress": 1,
"quantityWaiting": 1,
"batchId": 102
},
{
"sequence": 3,
"service": "SERVICE_C",
"machineName": "MACHINE 03",
"status": "WAITING",
"startedAt": null,
"finishedAt": null,
"scheduledFor": "2026-09-19T09:00:00Z",
"quantityCompleted": 0,
"quantityInProgress": 0,
"quantityWaiting": 4,
"batchId": null
}
]
}
],
"totalCodes": 1,
"truncated": false,
"daysAfterCompletion": 7,
"serverUtc": "2026-09-18T14:02:11Z"
}

Campos

CampoSignificado
codes[]Uma entrada por código de barras que você enviou
totalCodesQuantos voltaram
truncatedtrue quando o teto de códigos foi atingido — filtre por orderRef
daysAfterCompletionPor quanto tempo um código concluído continua aparecendo
serverUtcRelógio do servidor, para comparar com o seu

Por código:

CampoSignificado
barcodeO código que você enviou. Sempre a raiz do lote, nunca uma fração interna
lotQuantityQuantidade pedida. Imutável — não muda quando o lote é fracionado
statusResumo: a situação da primeira etapa que ainda não fechou
quantityDoneUnidades que cumpriram o roteiro inteiro
stages[]O roteiro, em ordem

Por etapa:

CampoSignificado
sequencePosição no roteiro
service · machineNameA operação e onde ela roda
startedAtQuando a primeira unidade entrou. null se nenhuma entrou
finishedAtPreenchida só quando o lote inteiro passou
scheduledForQuando deveria ter começado. Passou, e ainda WAITING, é LATE
quantityCompleted · quantityInProgress · quantityWaitingAs três quantidades. Sempre somam lotQuantity
batchIdO lote físico (fornada, chapa) por onde as unidades passaram, quando houver

É um retrato, não um log

Esta é a parte para entender antes de escrever qualquer código contra este endpoint.

A resposta é o estado completo atual, não uma lista do que aconteceu desde a última vez que você perguntou. Não há cursor, não há offset, e não há confirmação para devolver.

O que decorre disso:

  • Sobrescreva o que você tinha. Não acumule, não faça merge. A resposta já é o retrato inteiro.
  • Perder um ciclo não custa nada. Seu leitor ficou fora do ar por uma hora? A próxima chamada traz o estado atual. Nada ficou na fila e nada se perdeu.
  • Consultar é idempotente. Ler duas vezes não muda nada do nosso lado.

Um log teria sido mais fácil para nós construirmos e bem mais difícil para você consumir — você precisaria controlar o que já tinha visto, e um evento perdido deixaria você errado para sempre. Retrato não tem como desalinhar.

As três quantidades

Uma peça pedida com lotQuantity > 1 pode estar dividida entre etapas — parte cortada, parte ainda esperando. No exemplo acima, a segunda etapa tem 2 prontas, 1 dentro do forno e 1 aguardando.

Sem a do meio, "está na máquina" e "ainda não começou" apareceriam as duas como zero de progresso — que é exatamente a pergunta sobre a qual o PCP liga.

As situações de uma etapa

SituaçãoSignificado
WAITINGNão começou, e está dentro da janela programada
LATENão começou, e a data programada já passou
IN_PROGRESSTem unidade na máquina agora
PARTIALParte do lote passou, e o resto não está em máquina nenhuma
DONETerminou
OUTSOURCEDEnviada a um fornecedor externo
SHIPPEDExpedida
CANCELLEDCancelada

LATE e PARTIAL têm nome próprio de propósito. As duas se esconderiam atrás de WAITING, e as duas são as que geram telefonema.

O código é sempre o que você mandou

O que você usou como barcode é o que volta. Não traduzimos, não prefixamos, e não substituímos por um id interno.

Se uma peça foi dividida durante a produção — um lote cortado em parte, uma peça quebrada reposta — as frações são consolidadas de volta sob o código que você conhece. Nossos identificadores internos continuam internos.

Filtros

ParâmetroEfeitoExemplo
orderRefSó aquele pedido?orderRef=0001
daysAfterCompletionPor quantos dias códigos concluídos continuam aparecendo?daysAfterCompletion=3
codeLimitTeto de códigos retornados?codeLimit=500
curl -H "X-API-Key: mgi_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
"https://seu-servidor/api/v1/integration/production-status?orderRef=0001"

Códigos concluídos continuam aparecendo por alguns dias de propósito, para um leitor que ficou fora do ar por um ciclo não perder o fechamento de um pedido.

Quando truncated voltar true, você bateu no teto. Filtre por orderRef em vez de aumentá-lo.

O que isso não cobre

Reporta o que o chão de fábrica registrou. Não é documento fiscal, não é confirmação de entrega, e não reporta nada que aconteça depois da expedição.