Simjob Platform
Plataforma de inteligência industrial IoT — Edge Computing, MES, WMS, APS, IA generativa, Visão Computacional e comunicação omnicanal em uma única plataforma multi-módulo.
O que é o Simjob Platform?
O Simjob Platform é um sistema operacional industrial de ponta a ponta desenhado para conectar equipamentos físicos (máquinas, PLCs, CLPs, sensores IoT) a sistemas de gestão, painéis de análise e agentes de inteligência artificial — tudo em tempo real.
A plataforma opera com filosofia Edge-first: toda a coleta, processamento e persistência de dados acontece localmente na planta industrial, garantindo operação autônoma mesmo sem conectividade com a nuvem. A sincronização com destinos de nuvem (Simjob Cloud, Google BigTable, Alibaba TableStore) ocorre de forma assíncrona, com fila de até 100.000 eventos e retry automático.
Princípios de Design
| Princípio | Implementação |
|---|---|
| Edge-first | Processamento local, operação offline garantida, sync assíncrono |
| Cloud-ready | Sync nativo para Simjob Cloud, Google BigTable, Alibaba TableStore |
| AI-native | LLM integrado nos módulos MCP, Aura, ASAP, APS Solver e LLM Gateway |
| Multi-tenant | Isolamento por tenant ID em todas as entidades e APIs |
| Protocolo aberto | REST, WebSocket, gRPC, MQTT, MCP (Model Context Protocol) |
| Plugin system | Edge carrega módulos MES/WMS/APS como plugins Go em tempo de execução |
Arquitetura da Plataforma
A plataforma é composta por múltiplos serviços independentes que se comunicam via REST, WebSocket, gRPC, MQTT e Redis Pub/Sub.
Fluxo de Dados
Coleta e Ingestão IoT
Consumo em Tempo Real
Pipeline de IA
Inspeção Visual
Requisitos de Servidor
internal/syncinternal/plugininternal/apiinternal/websocketinternal/grpcinternal/securityinternal/monitoringinternal/queryinternal/databaseinternal/reportsConfiguração Edge (config.yaml)
server:
address: ":1870"
storage:
max_size_gb: 50
max_days: 30
influxdb:
enabled: true
url: "http://localhost:8086"
bucket: "sensor-data"
timescaledb:
enabled: true
host: "localhost"
port: 5432
sync:
enabled: true
interval: 30s
batch_size: 1000
max_queue_size: 100000
retry_interval: 5m
Plugins Edge disponíveis
| Plugin | Localização | Protocolo |
|---|---|---|
| OEE Plugin | edge/plugins/oee/ | MQTT + InfluxDB |
| APS Plugin | aps-plugin/ | gRPC → APS Solver Python |
| WMS Plugin | wms-plugin/ | REST |
MES Manager — Manufacturing Execution System
Interface web completa para gestão e monitoramento da produção em tempo real, consumindo the Edge API via REST e WebSocket.
Funcionalidades
| Módulo | Descrição |
|---|---|
| Dashboard OEE | Métricas em tempo real: OEE, Disponibilidade, Performance, Qualidade |
| Ordens de Produção | CRUD completo com SKU, quantidade planejada vs realizada, prazo, status |
| Apontamento | Registro de produção realizada por operador, máquina, turno e SKU |
| Paradas | Registro e classificação de paradas (preventiva, corretiva, setup, etc.) |
| Turnos | Calendário de turnos de trabalho, feriados e jornadas especiais |
| Rastreabilidade | Histórico de lote por ordem de produção |
| Relatórios | Exportação em Excel e PDF via Recharts |
Entidades de Dados
| Entidade | Campos Principais |
|---|---|
ProductionOrder | id, sku, qty_planned, qty_produced, status, start_at, end_at, work_center_id |
ProductionAppointment | id, order_id, qty, operator_id, machine_id, shift_id, timestamp |
Stoppage | id, machine_id, reason_code, start_at, end_at, duration_min |
OEERecord | id, machine_id, period, availability, performance, quality, oee |
WorkCenter | id, name, capacity, calendar_id |
Machine | id, name, work_center_id, mqtt_topic, status |
WMS Manager — Warehouse Management System
Gestão completa de armazém com suporte a endereçamento, movimentações, inventário rotativo e integração com coletores via MQTT.
Funcionalidades
| Módulo | Descrição |
|---|---|
| Endereçamento | Estrutura corredor / coluna / nível / posição customizável |
| Recebimento | Entrada de materiais com NF, lote, validade e endereço destino |
| Expedição | Saída por pedido, picking com endereço de origem |
| Transferência | Movimentação entre endereços com rastreabilidade |
| Inventário | Inventário geral e rotativo com divergências |
| Rastreabilidade | Histórico de movimentações por item/lote/endereço |
| Integração Coletor | Leitura via MQTT de coletores de dados (código de barras / QR / RFID) |
Entidades de Dados
| Entidade | Campos Principais |
|---|---|
StorageAddress | id, aisle, column, level, status, max_weight, type |
StockItem | id, sku, lot, qty, expiry, address_id, unit |
StockMovement | id, type(IN/OUT/TRANSFER), item_id, from_addr, to_addr, qty, user_id, timestamp |
PurchaseOrder | id, supplier, status, items[] |
SalesOrder | id, customer, status, items[] |
APS Manager — Advanced Planning & Scheduling
Módulo de planejamento avançado com capacidade finita e três estratégias de otimização: determinística (OR-Tools), genética e via LLM.
APS Solver — Motores de Otimização
| Solver | Algoritmo | Uso Recomendado |
|---|---|---|
ortools_solver.py | Google OR-Tools (CP-SAT) | Produção determinística, alta precisão |
genetic_solver.py | Algoritmo genético | Problemas de sequenciamento complexos |
llm_resolver.py | GPT/LLM prompt-based | Casos com restrições textuais não estruturadas |
Comunicação APS
MCP Server — Agente de IA Industrial
Implementação do Model Context Protocol (MCP) que expõe o ambiente industrial como contexto para modelos de linguagem. Permite que agentes de IA tomem ações e respondam perguntas sobre a planta com base em dados reais.
Capacidades
| Ferramenta MCP | Descrição |
|---|---|
| query_production | Consulta ordens de produção, OEE e indicadores |
| query_wms | Consulta estoque, endereços e movimentações |
| analyze_document | Lê PDFs, Excel e CSV e responde perguntas |
| generate_report | Gera relatórios automáticos de produção |
| alert_analysis | Analisa alertas e sugere ações corretivas |
| anomaly_detection | Detecta padrões anômalos em dados de sensores |
Dependências Principais
@modelcontextprotocol/sdk # MCP protocol implementation
openai # LLM integration
mongodb # Document persistence
redis # Cache e sessões
exceljs + pdf-parse # Processamento de documentos
express + swagger # HTTP API
Aura — Orquestrador de Agentes de IA
Sistema de orquestração de agentes de IA sobre múltiplas fontes de dados industriais e empresariais, com streaming de respostas via WebSocket.
Conectores de Dados
| Banco | Driver | Uso |
|---|---|---|
| PostgreSQL | node-pg | Dados MES/WMS/ERP |
| MySQL | mysql2 | Sistemas legados |
| MSSQL (SQL Server) | mssql | SAP, TOTVS integração |
| MongoDB | mongodb driver | Documentos e logs |
| DuckDB | duckdb (nativo) | OLAP, análise de DataFrames |
| AWS S3 / MinIO | aws-sdk | Documentos e relatórios |
Vision — Visão Computacional Industrial
Sistema completo de visão computacional para inspeção de qualidade, monitoramento de linhas e análise de câmeras industriais.
Componentes
| Componente | Tecnologia | Função |
|---|---|---|
| Vision Server | Python + FastAPI + OpenCV | Processamento de imagem/vídeo, análise IA |
| Vision Sync | Go + Gin + :8090 | API de sincronização com Edge |
| MediaMTX | MediaMTX binary | Servidor RTMP :1935 e HLS :8888 |
| MinIO | Object storage | Armazenamento de imagens e vídeos |
| Vision Front | React | Interface web de visualização |
Dependências Python
fastapi + uvicorn # REST API
opencv-python # Computer vision
paho-mqtt # MQTT integration
minio # Object storage client
dashscope # Alibaba AI Vision API
oss2 # Alibaba OSS
pydantic # Data validation
ASAP — Comunicação Omnicanal com IA
Plataforma de atendimento omnicanal com agente IA para suporte industrial — integra WhatsApp, Chat Web, e-mail e notificações em tempo real.
Integrações
| Canal | Provedor |
|---|---|
| Twilio | |
| SendGrid | |
| Chat Web | Socket.io (real-time) |
| Storage | Alibaba OTS / AWS S3 |
| IA Agent | OpenAI GPT |
Outros Módulos
Digital Signage (DS)
Vite + ReactPainéis visuais animados (Framer Motion) para TV/monitores industriais com KPIs do Edge em tempo real.
Workflow
:1880Node-RED para automação visual de processos industriais com triggers baseados em eventos MES/WMS.
Bucket
:9010Serviço de object storage (Go) compatível com S3/MinIO para imagens, relatórios e arquivos industriais.
App Mobile
App Flutter multi-plataforma (Android/iOS/Web) para apontamento de produção, picking WMS e consultas.
LLM Gateway
Proxy Go (Fiber) unificado para provedores LLM com circuit breaker, rate limiting e métricas Prometheus.
Edge Sync
CDC (Change Data Capture) do PostgreSQL para sincronização incremental entre instâncias Edge.
Stack Tecnológica Completa
| Camada | Tecnologia | Versão | Módulos |
|---|---|---|---|
| IoT Edge | Go + Gin + gRPC + MQTT (Paho) | Go 1.24 | edge |
| API Negócio | TypeScript + NestJS | NestJS 10 / Node 20 | aura |
| AI Agent | TypeScript + Node.js + OpenAI | Node 20 | mcp, asap |
| LLM Gateway | Go + Fiber | Go 1.21 | llm |
| Computer Vision | Python + FastAPI + OpenCV | Python 3.11+ | vision |
| Frontend Web | Next.js + React + Tailwind + TanStack Query | Next.js 14 / React 18 | mes/wms/aps-manager, aura-front |
| Signage | React + Vite + Framer Motion | React 18 | ds |
| Automação | Node-RED | Latest | workflow |
| Mobile | Flutter + Dart | Flutter 3.x | app, appterm |
| Object Storage | Go + MinIO SDK | Go 1.24 | bucket, vision |
| Dados TS | InfluxDB | 2.x | edge |
| Dados Relacionais | PostgreSQL + TimescaleDB | PG 15 / TS 2.x | edge, aura |
| Cache / MQ | Redis | 7.x Alpine | edge, mcp, aura, asap |
| Documentos | MongoDB | 7.x | mcp, aura |
| OLAP | DuckDB | 0.9.x | aura |
| Container | Docker + Docker Compose | Latest | todos |
| Observabilidade | Prometheus + Zerolog | Latest | edge, llm |
| Auth | JWT + bcrypt + API Keys | - | edge, mcp, aura, asap |
Portas e Endpoints
| Serviço | Porta | Protocolo | Swagger / UI |
|---|---|---|---|
| Edge API | :1870 | HTTP · WebSocket · gRPC | /swagger/ |
| MCP Server | :1820 | HTTP · MCP | /api-docs |
| Workflow (Node-RED) | :1880 | HTTP | / |
| MES Manager | :1896 | HTTP | - |
| WMS Manager | :1872 | HTTP | - |
| APS Manager | :1873 | HTTP | - |
| Vision Sync API | :8090 | HTTP | /docs |
| Vision Server (FastAPI) | :8000 | HTTP | /docs |
| Bucket API | :9010 | HTTP | /swagger/ |
| MediaMTX RTMP | :1935 | RTMP | - |
| MediaMTX HLS | :8888 | HTTP | - |
| Redis | :6379 | TCP | - |
| InfluxDB | :8086 | HTTP | /ui |
| PostgreSQL | :5432 | TCP | - |
| MongoDB | :27017 | TCP | - |
| MinIO Console | :9001 | HTTP | / |
| MinIO API | :9000 | HTTP S3 | - |
Estratégia de Dados
| Banco | Tipo | Usado Para | Retenção |
|---|---|---|---|
| InfluxDB | Time-series | Dados de sensores MQTT (temperatura, pressão, velocidade, contadores) | 30 dias local · ilimitado na nuvem |
| TimescaleDB / PostgreSQL | Relacional + TS | MES: ordens, apontamentos, OEE; WMS: estoque, movimentações; APS: planos | Configurável |
| Redis | In-memory | Cache, pub/sub de eventos em tempo real, filas de sync, sessões | Volátil + optional persistence |
| MongoDB | Documental | Documentos MCP (PDFs, Excel), logs de IA, configurações | Configurável |
| DuckDB | OLAP embarcado | Análises ad-hoc no Aura, DataFrames, queries complexas | In-process |
| MinIO | Object storage | Imagens de visão computacional, relatórios PDF, uploads | Configurável por bucket |
| Alibaba OTS | NoSQL cloud | ASAP: dados de atendimento, conversas WhatsApp | Cloud-managed |
Segurança
| Mecanismo | Implementação | Módulos |
|---|---|---|
| Autenticação JWT | golang-jwt/v5 · jsonwebtoken | Edge, MCP, Aura, ASAP |
| API Keys | Header X-API-Key, hashed com bcrypt | Edge, MCP |
| RBAC | Roles por módulo e tenant | Edge, Aura |
| Rate Limiting | Token bucket, configurável por endpoint | Edge, ASAP, LLM |
| Audit Log | Log estruturado de operações críticas | Edge |
| TLS/HTTPS | Suporte nativo em todos os serviços | Todos |
| Multi-tenant | Isolamento por tenant_id em todas as queries | Edge, Aura |
| Secrets | Variáveis de ambiente (.env), nunca em código | Todos |
Deploy e Operação
Desenvolvimento Local
# Iniciar todos os componentes
.\start-dev-all.ps1
# Componentes específicos
.\start-dev-all.ps1 -Components edge,mes-manager,wms-manager
# Pular Redis (já rodando)
.\start-dev-all.ps1 -SkipRedis
Docker Compose (Edge + Infra)
cd edge
docker-compose up -d
# Inclui: edge-server, postgres, influxdb, redis
Requisitos de Servidor
| Ambiente | CPU | RAM | Disco | OS |
|---|---|---|---|---|
| Edge industrial mínimo | 2 cores | 4 GB | 32 GB SSD | Linux ARM64 (Raspberry Pi 5) |
| Desenvolvimento | 4 cores | 8 GB | 50 GB SSD | Windows 10+ / Ubuntu 22.04 |
| Produção pequeno | 8 cores | 16 GB | 200 GB NVMe | Ubuntu 22.04 LTS |
| Produção médio | 16 cores | 32 GB | 500 GB NVMe | Ubuntu 22.04 LTS |
API de Integração
O módulo de integração expõe um conjunto dedicado de endpoints REST simplificados que permite que sistemas externos (ERPs, MESs legados, sistemas SCADA, portais de clientes) troquem dados com o Edge sem precisar conhecer a estrutura interna da API.
A filosofia é uma chamada resolve tudo: ao enviar uma Ordem de Produção, por exemplo, o produto já pode vir embutido na mesma requisição — o Edge cria o produto se não existir e vincula à ordem automaticamente.
Fluxo Geral de Integração
Entrada de Dados
Todos os endpoints de entrada aceitam Content-Type: application/json e retornam o objeto criado com status 201 Created (ou 207 Multi-Status para operações em lote).
Ordens de Produção
Ao enviar uma ordem, o produto pode vir embutido no campo product. O Edge faz upsert do produto por código antes de criar a ordem — eliminando a necessidade de chamadas separadas.
{
"code": "OP-2026-001",
"machine_code": "MACH-01",
"planned_quantity": 500,
"priority": 1,
"scheduled_start": "2026-02-24T06:00:00Z",
"scheduled_end": "2026-02-24T14:00:00Z",
"notes": "Produção urgente — cliente XYZ",
"product": {
"code": "PROD-XYZ",
"name": "Peça Injetada XYZ",
"unit": "pcs",
"cycle_time": 1.2
}
}
{
"status": "in_progress",
"notes": "Iniciado no turno da manhã"
}
Produtos
{
"code": "PROD-ABC",
"name": "Componente ABC",
"description": "Componente usinado em alumínio",
"unit": "pcs",
"cycle_time": 2.5
}
Ficha Técnica (Especificação)
Envia a ficha técnica completa de um produto — características e normas podem ser passadas inline no mesmo JSON.
{
"product_code": "PROD-XYZ",
"version": "v2.1",
"technical_description": "Peça injetada em PP com 20% fibra de vidro",
"measurement_unit": "mm",
"characteristics": [
{ "name": "Comprimento", "value": "120", "unit": "mm" },
{ "name": "Largura", "value": "45", "unit": "mm" },
{ "name": "Espessura", "value": "3.5", "unit": "mm" },
{ "name": "Peso nominal", "value": "85.2", "unit": "g" }
],
"norms": [
{ "norm_code": "ABNT NBR 15600", "description": "Plásticos — tensão de tração", "norm_type": "dimensional" }
]
}
Estrutura de Materiais (BOM)
{
"parent_product_code": "PROD-MONTADO",
"child_product_code": "PROD-XYZ",
"quantity": 2,
"unit": "pcs",
"relation_type": "consumes",
"level": 1
}
Processos de Fabricação
{
"product_code": "PROD-XYZ",
"name": "Injeção",
"step_sequence": 1,
"machine_code": "INJ-01",
"description": "Ciclo de injeção em PP",
"cycle_time": 1.2
}
Documentação / Instrução de Trabalho
{
"product_code": "PROD-XYZ",
"process_code": "Injeção",
"name": "IT-001 — Instrução de Injeção PP",
"type": "procedure",
"version": "Rev. 3",
"file_url": "https://bucket.simjob.com.br/docs/IT-001-Rev3.pdf",
"description": "Parâmetros operacionais e sequência de setup da injetora"
}
Especificações de Qualidade
{
"product_code": "PROD-XYZ",
"criterion": "Dimensional — comprimento",
"test_method": "Paquímetro digital 0.01mm",
"acceptance_limit": "120 ± 0.3 mm",
"frequency": "1 a cada 50 peças"
}
Capacidade de Equipamento
{
"machine_code": "INJ-01",
"parameter": "Pressão de injeção",
"default_value": 800,
"min_range": 500,
"max_range": 1200,
"unit": "bar"
}
Rotas de Fabricação
Uma rota agrupa operações sequenciais que um produto percorre — com máquina, tempo de ciclo e setup por operação, tudo em uma única chamada.
{
"product_code": "PROD-XYZ",
"code": "ROTA-XYZ-V1",
"name": "Rota Padrão — Peça XYZ",
"version": "v1",
"operations": [
{ "sequence": 1, "code": "OP-01", "name": "Injeção", "machine_code": "INJ-01", "cycle_time": 1.2, "setup_time": 15 },
{ "sequence": 2, "code": "OP-02", "name": "Rebarbação", "machine_code": "REB-01", "cycle_time": 0.5, "setup_time": 5 },
{ "sequence": 3, "code": "OP-03", "name": "Inspeção", "machine_code": "INS-01", "cycle_time": 0.3, "setup_time": 0 }
]
}
Resumo de Endpoints de Entrada
| Endpoint | Dados enviados | Resultado |
|---|---|---|
POST /integration/orders | Ordem + produto inline | Ordem criada, produto com upsert |
POST /integration/orders/batch | Lista de ordens | 207 com criados e erros |
PUT /integration/orders/{code}/status | Novo status | Ordem atualizada + webhook disparado |
POST /integration/products | Produto | Produto criado ou retornado |
POST /integration/products/batch | Lista de produtos | 207 com criados e erros |
POST /integration/specifications | Ficha técnica + características + normas | Especificação criada |
POST /integration/bom | Pai + filho + quantidade | Entrada de BOM criada |
POST /integration/processes | Produto + sequência + máquina | Segmento de processo criado |
POST /integration/documents | Instrução + produto/processo | Work Instruction criada |
POST /integration/quality | Critério + método | Especificação de qualidade criada |
POST /integration/capacity | Máquina + parâmetro + limites | Capacidade cadastrada |
POST /integration/routes | Produto + operações inline | Rota e operações criadas |
Consulta de Dados (Outbound)
Para obter dados produzidos no sistema — especialmente apontamentos realizados — use os endpoints de consulta. Todos suportam paginação e filtros por período, máquina, ordem ou tipo.
Apontamentos Realizados
from, to, machine, order, type, page, limit{
"total": 127,
"page": 1,
"limit": 50,
"items": [
{
"id": 1042,
"type_code": "PROD",
"type_name": "Apontamento de Produção",
"node_type": "machine",
"node_id": 5,
"node_name": "Injetora 01",
"order_code": "OP-2026-001",
"occurred_at": "2026-02-15T08:32:00Z",
"registered_at": "2026-02-15T08:32:05Z",
"status": "active",
"variables": {
"quantidade_produzida": 120,
"quantidade_refugo": 3,
"tempo_ciclo_real": 1.18
},
"form_data": { "turno": "Manhã", "operador": "João Silva" }
}
]
}
Resumo de Ordem
{
"code": "OP-2026-001",
"status": "in_progress",
"product_code": "PROD-XYZ",
"product_name": "Peça Injetada XYZ",
"planned_quantity": 500,
"produced_quantity": 320,
"scrapped_quantity": 8,
"scheduled_start": "2026-02-24T06:00:00Z",
"scheduled_end": "2026-02-24T14:00:00Z",
"actual_start": "2026-02-24T06:08:00Z",
"actual_end": null,
"completion_pct": 64.0
}
Webhooks
Os webhooks permitem que o Edge notifique proativamente o sistema externo quando eventos ocorrem — eliminando a necessidade de polling periódico. O Edge realiza um POST com o payload do evento para a URL cadastrada no momento do ocorrido.
Eventos Disponíveis
Gerenciamento de Webhooks
{
"url": "https://erp.empresa.com.br/simjob/events",
"events": ["occurrence.created", "order.completed"],
"secret": "minha-chave-secreta-hmac"
}
Payload Enviado ao Webhook
POST https://erp.empresa.com.br/simjob/events
Content-Type: application/json
X-Simjob-Signature: sha256=a3f5...d901
{
"event": "occurrence.created",
"timestamp": "2026-02-24T08:15:00Z",
"data": {
"id": 1043,
"type_code": "PROD",
"type_name": "Apontamento de Produção",
"node_type": "machine",
"node_name": "Injetora 01",
"order_code": "OP-2026-001",
"occurred_at": "2026-02-24T08:14:55Z",
"status": "active",
"variables": { "quantidade_produzida": 80, "quantidade_refugo": 1 }
}
}
Verificação de Assinatura (HMAC-SHA256)
Quando um secret é configurado no webhook, cada requisição enviada pelo Edge inclui o header X-Simjob-Signature com o formato sha256=<hex>. O receptor deve calcular o HMAC do corpo da requisição usando o mesmo secret e comparar com o header para garantir autenticidade.
import hmac, hashlib
def verify(body: bytes, secret: str, signature_header: str) -> bool:
expected = "sha256=" + hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature_header)
const crypto = require('crypto');
function verify(body, secret, signatureHeader) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected), Buffer.from(signatureHeader)
);
}
Autenticação da API de Integração
A API de integração segue o mesmo mecanismo de autenticação do Edge. Por padrão, se a autenticação estiver habilitada (auth.enabled: true), as requisições precisam de um dos mecanismos abaixo:
| Mecanismo | Header | Valor |
|---|---|---|
| API Key | X-API-Key | Chave configurada em config.yaml → auth.api_keys |
| JWT Bearer | Authorization | Bearer <token> — obtido via POST /api/v1/auth/login |
Configuração Recomendada para Integração
Para sistemas de integração (ERPs, scripts automáticos), o método preferido é API Key estática configurada no config.yaml do Edge:
auth:
enabled: true
jwt_secret: "sua-chave-jwt-secreta"
api_keys:
- "api-key-do-seu-erp-123456"
curl -X POST https://edge.empresa.com.br/api/v1/integration/orders \
-H "Content-Type: application/json" \
-H "X-API-Key: api-key-do-seu-erp-123456" \
-d '{ "code": "OP-001", "machine_code": "MACH-01", ... }'
Erros Comuns
| Status | Significado | Solução |
|---|---|---|
400 Bad Request | JSON inválido ou campo obrigatório ausente | Verifique o payload — o campo error descreve o problema |
401 Unauthorized | API Key ou token ausente / inválido | Verifique o header X-API-Key ou Authorization |
404 Not Found | Recurso não encontrado (ex: máquina por código) | Verifique se o código existe no cadastro do Edge (machine_code, product_code) |
207 Multi-Status | Lote com sucesso parcial | Verifique o array errors na resposta para itens que falharam |
502 Bad Gateway | Webhook não respondeu corretamente | Verifique se a URL do webhook está acessível e retorna 2xx |