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
| Campo | Significado |
|---|---|
codes[] | Uma entrada por código de barras que você enviou |
totalCodes | Quantos voltaram |
truncated | true quando o teto de códigos foi atingido — filtre por orderRef |
daysAfterCompletion | Por quanto tempo um código concluído continua aparecendo |
serverUtc | Relógio do servidor, para comparar com o seu |
Por código:
| Campo | Significado |
|---|---|
barcode | O código que você enviou. Sempre a raiz do lote, nunca uma fração interna |
lotQuantity | Quantidade pedida. Imutável — não muda quando o lote é fracionado |
status | Resumo: a situação da primeira etapa que ainda não fechou |
quantityDone | Unidades que cumpriram o roteiro inteiro |
stages[] | O roteiro, em ordem |
Por etapa:
| Campo | Significado |
|---|---|
sequence | Posição no roteiro |
service · machineName | A operação e onde ela roda |
startedAt | Quando a primeira unidade entrou. null se nenhuma entrou |
finishedAt | Preenchida só quando o lote inteiro passou |
scheduledFor | Quando deveria ter começado. Passou, e ainda WAITING, é LATE |
quantityCompleted · quantityInProgress · quantityWaiting | As três quantidades. Sempre somam lotQuantity |
batchId | O 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ção | Significado |
|---|---|
WAITING | Não começou, e está dentro da janela programada |
LATE | Não começou, e a data programada já passou |
IN_PROGRESS | Tem unidade na máquina agora |
PARTIAL | Parte do lote passou, e o resto não está em máquina nenhuma |
DONE | Terminou |
OUTSOURCED | Enviada a um fornecedor externo |
SHIPPED | Expedida |
CANCELLED | Cancelada |
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âmetro | Efeito | Exemplo |
|---|---|---|
orderRef | Só aquele pedido | ?orderRef=0001 |
daysAfterCompletion | Por quantos dias códigos concluídos continuam aparecendo | ?daysAfterCompletion=3 |
codeLimit | Teto 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.