Documentação Técnica v1.x · 2026

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.

Go 1.24 TypeScript / Node.js Next.js 14 Python 3.11+ Flutter MQTT gRPC PostgreSQL InfluxDB Redis Docker OpenAI

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.

⚡ Edge-first ☁️ Cloud-ready 🤖 AI-native 🏭 Multi-tenant 🔌 Protocolo aberto

Princípios de Design

PrincípioImplementação
Edge-firstProcessamento local, operação offline garantida, sync assíncrono
Cloud-readySync nativo para Simjob Cloud, Google BigTable, Alibaba TableStore
AI-nativeLLM integrado nos módulos MCP, Aura, ASAP, APS Solver e LLM Gateway
Multi-tenantIsolamento por tenant ID em todas as entidades e APIs
Protocolo abertoREST, WebSocket, gRPC, MQTT, MCP (Model Context Protocol)
Plugin systemEdge 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.

Camada de Interface
MES ManagerNext.js · :1896
WMS ManagerNext.js · :1872
APS ManagerNext.js · :1873
AuraNestJS + Next.js
DS SignageReact/Vite
App MobileFlutter
↑ REST / WebSocket / gRPC ↓
SIMJOB EDGE SERVER Go 1.24 · Gin · :1870 · MQTT · gRPC · WebSocket · Prometheus
MCP ServerNode.js · OpenAI · :1820
LLM GatewayGo · Fiber
VisionPython · FastAPI · OpenCV · :8090
ASAPNode.js · WhatsApp
WorkflowNode-RED · :1880
BucketGo · MinIO · :9010
↑ Queries / Writes ↓
InfluxDBTime-series · :8086
TimescaleDB/PGRelacional · :5432
RedisCache · Pub/Sub · :6379
MongoDBDocumental · :27017
MinIOObject Store · :9000
DuckDBOLAP in-process
↑ Cloud Sync (async, batch 1000, queue 100k) ↓
Simjob CloudREST API
Google BigTableGCP
Alibaba TableStoreAliyun OTS

Fluxo de Dados

Coleta e Ingestão IoT

PLC / CLP / Sensor
→ MQTT →
Edge Broker
→ Parse →
InfluxDB
+
TimescaleDB
→ Sync →
Cloud

Consumo em Tempo Real

Edge :1870
→ WebSocket →
MES / WMS / APS Manager
→ Recharts
Dashboard

Pipeline de IA

Dados do Edge
→ REST →
MCP / Aura
→ OpenAI →
Resposta IA
→ WS →
Frontend

Inspeção Visual

Câmera IP / USB
→ RTMP →
MediaMTX :1935
→ HLS →
Vision Server (Python/OpenCV)
→ DashScope AI →
Resultado
→ MinIO

Requisitos de Servidor

internal/syncSync cloud offline-first (batch 1000, queue 100k)Redis + HTTP internal/pluginPlugin system — carrega módulos em runtimeGo plugin interface internal/apiREST API com Gin, middleware e routingGin + Swagger internal/websocketStream de dados em tempo realgorilla/websocket internal/grpcRPC inter-service de baixa latênciagRPC + protobuf internal/securityJWT, API Keys, RBAC, rate limiting, auditgolang-jwt internal/monitoringPrometheus metrics, health endpointprometheus/client_golang internal/queryMotor de queries dinâmicas com filtrosGORM + custom DSL internal/databaseManager multi-banco: InfluxDB + TimescaleDB/PGjackc/pgx + influxdb-client internal/reportsGeração de relatórios customizáveisGo templates

Configuraçã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

PluginLocalizaçãoProtocolo
OEE Pluginedge/plugins/oee/MQTT + InfluxDB
APS Pluginaps-plugin/gRPC → APS Solver Python
WMS Pluginwms-plugin/REST

MES Manager — Manufacturing Execution System

Next.js 14 Porta :1896

Interface web completa para gestão e monitoramento da produção em tempo real, consumindo the Edge API via REST e WebSocket.

Funcionalidades

MóduloDescrição
Dashboard OEEMétricas em tempo real: OEE, Disponibilidade, Performance, Qualidade
Ordens de ProduçãoCRUD completo com SKU, quantidade planejada vs realizada, prazo, status
ApontamentoRegistro de produção realizada por operador, máquina, turno e SKU
ParadasRegistro e classificação de paradas (preventiva, corretiva, setup, etc.)
TurnosCalendário de turnos de trabalho, feriados e jornadas especiais
RastreabilidadeHistórico de lote por ordem de produção
RelatóriosExportação em Excel e PDF via Recharts

Entidades de Dados

EntidadeCampos Principais
ProductionOrderid, sku, qty_planned, qty_produced, status, start_at, end_at, work_center_id
ProductionAppointmentid, order_id, qty, operator_id, machine_id, shift_id, timestamp
Stoppageid, machine_id, reason_code, start_at, end_at, duration_min
OEERecordid, machine_id, period, availability, performance, quality, oee
WorkCenterid, name, capacity, calendar_id
Machineid, name, work_center_id, mqtt_topic, status

WMS Manager — Warehouse Management System

Next.js 14 Porta :1872

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óduloDescrição
EndereçamentoEstrutura corredor / coluna / nível / posição customizável
RecebimentoEntrada de materiais com NF, lote, validade e endereço destino
ExpediçãoSaída por pedido, picking com endereço de origem
TransferênciaMovimentação entre endereços com rastreabilidade
InventárioInventário geral e rotativo com divergências
RastreabilidadeHistórico de movimentações por item/lote/endereço
Integração ColetorLeitura via MQTT de coletores de dados (código de barras / QR / RFID)

Entidades de Dados

EntidadeCampos Principais
StorageAddressid, aisle, column, level, status, max_weight, type
StockItemid, sku, lot, qty, expiry, address_id, unit
StockMovementid, type(IN/OUT/TRANSFER), item_id, from_addr, to_addr, qty, user_id, timestamp
PurchaseOrderid, supplier, status, items[]
SalesOrderid, customer, status, items[]

APS Manager — Advanced Planning & Scheduling

Next.js 14 Porta :1873 Python OR-Tools + LLM

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

SolverAlgoritmoUso Recomendado
ortools_solver.pyGoogle OR-Tools (CP-SAT)Produção determinística, alta precisão
genetic_solver.pyAlgoritmo genéticoProblemas de sequenciamento complexos
llm_resolver.pyGPT/LLM prompt-basedCasos com restrições textuais não estruturadas

Comunicação APS

APS Manager (Next.js)
→ REST →
Edge :1870/aps
→ gRPC →
APS Plugin (Go)
→ HTTP →
APS Solver (Python)

MCP Server — Agente de IA Industrial

TypeScript Porta :1820 OpenAI · Model Context Protocol

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 MCPDescrição
query_productionConsulta ordens de produção, OEE e indicadores
query_wmsConsulta estoque, endereços e movimentações
analyze_documentLê PDFs, Excel e CSV e responde perguntas
generate_reportGera relatórios automáticos de produção
alert_analysisAnalisa alertas e sugere ações corretivas
anomaly_detectionDetecta 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

NestJS Next.js OpenAI · Multi-DB

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

BancoDriverUso
PostgreSQLnode-pgDados MES/WMS/ERP
MySQLmysql2Sistemas legados
MSSQL (SQL Server)mssqlSAP, TOTVS integração
MongoDBmongodb driverDocumentos e logs
DuckDBduckdb (nativo)OLAP, análise de DataFrames
AWS S3 / MinIOaws-sdkDocumentos e relatórios

Vision — Visão Computacional Industrial

Python FastAPI Go Sync :8090 OpenCV · DashScope

Sistema completo de visão computacional para inspeção de qualidade, monitoramento de linhas e análise de câmeras industriais.

Componentes

ComponenteTecnologiaFunção
Vision ServerPython + FastAPI + OpenCVProcessamento de imagem/vídeo, análise IA
Vision SyncGo + Gin + :8090API de sincronização com Edge
MediaMTXMediaMTX binaryServidor RTMP :1935 e HLS :8888
MinIOObject storageArmazenamento de imagens e vídeos
Vision FrontReactInterface 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

TypeScript WhatsApp · Chat · Email OpenAI

Plataforma de atendimento omnicanal com agente IA para suporte industrial — integra WhatsApp, Chat Web, e-mail e notificações em tempo real.

Integrações

CanalProvedor
WhatsAppTwilio
E-mailSendGrid
Chat WebSocket.io (real-time)
StorageAlibaba OTS / AWS S3
IA AgentOpenAI GPT

Outros Módulos

📺

Digital Signage (DS)

Vite + React

Painéis visuais animados (Framer Motion) para TV/monitores industriais com KPIs do Edge em tempo real.

React 18Vite
🔄

Workflow

:1880

Node-RED para automação visual de processos industriais com triggers baseados em eventos MES/WMS.

Node-RED
🪣

Bucket

:9010

Serviço de object storage (Go) compatível com S3/MinIO para imagens, relatórios e arquivos industriais.

Go
📱

App Mobile

App Flutter multi-plataforma (Android/iOS/Web) para apontamento de produção, picking WMS e consultas.

FlutterDart
🤖

LLM Gateway

Proxy Go (Fiber) unificado para provedores LLM com circuit breaker, rate limiting e métricas Prometheus.

Go Fiber
🔧

Edge Sync

CDC (Change Data Capture) do PostgreSQL para sincronização incremental entre instâncias Edge.

Go

Stack Tecnológica Completa

CamadaTecnologiaVersãoMódulos
IoT EdgeGo + Gin + gRPC + MQTT (Paho)Go 1.24edge
API NegócioTypeScript + NestJSNestJS 10 / Node 20aura
AI AgentTypeScript + Node.js + OpenAINode 20mcp, asap
LLM GatewayGo + FiberGo 1.21llm
Computer VisionPython + FastAPI + OpenCVPython 3.11+vision
Frontend WebNext.js + React + Tailwind + TanStack QueryNext.js 14 / React 18mes/wms/aps-manager, aura-front
SignageReact + Vite + Framer MotionReact 18ds
AutomaçãoNode-REDLatestworkflow
MobileFlutter + DartFlutter 3.xapp, appterm
Object StorageGo + MinIO SDKGo 1.24bucket, vision
Dados TSInfluxDB2.xedge
Dados RelacionaisPostgreSQL + TimescaleDBPG 15 / TS 2.xedge, aura
Cache / MQRedis7.x Alpineedge, mcp, aura, asap
DocumentosMongoDB7.xmcp, aura
OLAPDuckDB0.9.xaura
ContainerDocker + Docker ComposeLatesttodos
ObservabilidadePrometheus + ZerologLatestedge, llm
AuthJWT + bcrypt + API Keys-edge, mcp, aura, asap

Portas e Endpoints

ServiçoPortaProtocoloSwagger / UI
Edge API:1870HTTP · WebSocket · gRPC/swagger/
MCP Server:1820HTTP · MCP/api-docs
Workflow (Node-RED):1880HTTP/
MES Manager:1896HTTP-
WMS Manager:1872HTTP-
APS Manager:1873HTTP-
Vision Sync API:8090HTTP/docs
Vision Server (FastAPI):8000HTTP/docs
Bucket API:9010HTTP/swagger/
MediaMTX RTMP:1935RTMP-
MediaMTX HLS:8888HTTP-
Redis:6379TCP-
InfluxDB:8086HTTP/ui
PostgreSQL:5432TCP-
MongoDB:27017TCP-
MinIO Console:9001HTTP/
MinIO API:9000HTTP S3-

Estratégia de Dados

BancoTipoUsado ParaRetenção
InfluxDBTime-seriesDados de sensores MQTT (temperatura, pressão, velocidade, contadores)30 dias local · ilimitado na nuvem
TimescaleDB / PostgreSQLRelacional + TSMES: ordens, apontamentos, OEE; WMS: estoque, movimentações; APS: planosConfigurável
RedisIn-memoryCache, pub/sub de eventos em tempo real, filas de sync, sessõesVolátil + optional persistence
MongoDBDocumentalDocumentos MCP (PDFs, Excel), logs de IA, configuraçõesConfigurável
DuckDBOLAP embarcadoAnálises ad-hoc no Aura, DataFrames, queries complexasIn-process
MinIOObject storageImagens de visão computacional, relatórios PDF, uploadsConfigurável por bucket
Alibaba OTSNoSQL cloudASAP: dados de atendimento, conversas WhatsAppCloud-managed

Segurança

MecanismoImplementaçãoMódulos
Autenticação JWTgolang-jwt/v5 · jsonwebtokenEdge, MCP, Aura, ASAP
API KeysHeader X-API-Key, hashed com bcryptEdge, MCP
RBACRoles por módulo e tenantEdge, Aura
Rate LimitingToken bucket, configurável por endpointEdge, ASAP, LLM
Audit LogLog estruturado de operações críticasEdge
TLS/HTTPSSuporte nativo em todos os serviçosTodos
Multi-tenantIsolamento por tenant_id em todas as queriesEdge, Aura
SecretsVariáveis de ambiente (.env), nunca em códigoTodos

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

AmbienteCPURAMDiscoOS
Edge industrial mínimo2 cores4 GB32 GB SSDLinux ARM64 (Raspberry Pi 5)
Desenvolvimento4 cores8 GB50 GB SSDWindows 10+ / Ubuntu 22.04
Produção pequeno8 cores16 GB200 GB NVMeUbuntu 22.04 LTS
Produção médio16 cores32 GB500 GB NVMeUbuntu 22.04 LTS

API de Integração

REST JSON Base: /api/v1/integration Webhooks HMAC-SHA256

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

ERP / Sistema Externoqualquer stack
POST /integration/ordersproduto embutido
Edge / MESPostgreSQL
Edge / MESapontamentos
Webhook (push)occurrence.created
ERP / Sistema Externoem tempo real

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.

POST
/api/v1/integration/orders
Criar ordem com produto embutido (upsert de produto automático)
POST
/api/v1/integration/orders/batch
Criar múltiplas ordens em lote — retorna sucesso parcial com lista de erros por item
PUT
/api/v1/integration/orders/{code}/status
Atualizar status de uma ordem: pending · scheduled · in_progress · paused · completed · cancelled
Exemplo — Criar Ordem com Produto EmbutidoPOST /api/v1/integration/orders
{
  "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
  }
}
Exemplo — Atualizar StatusPUT /api/v1/integration/orders/OP-2026-001/status
{
  "status": "in_progress",
  "notes": "Iniciado no turno da manhã"
}

Produtos

POST
/api/v1/integration/products
Criar ou retornar produto existente (upsert por código)
POST
/api/v1/integration/products/batch
Upsert em lote de produtos — útil para sincronização de catálogo
Exemplo — ProdutoPOST /api/v1/integration/products
{
  "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.

POST
/api/v1/integration/specifications
Criar Ficha Técnica com características e normas embutidas
Exemplo — Ficha TécnicaPOST /api/v1/integration/specifications
{
  "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)

POST
/api/v1/integration/bom
Criar relacionamento pai-filho de produtos usando códigos
Exemplo — BOMPOST /api/v1/integration/bom
{
  "parent_product_code": "PROD-MONTADO",
  "child_product_code":  "PROD-XYZ",
  "quantity": 2,
  "unit": "pcs",
  "relation_type": "consumes",
  "level": 1
}

Processos de Fabricação

POST
/api/v1/integration/processes
Criar segmento de processo vinculado a produto e máquina por código
Exemplo — ProcessoPOST /api/v1/integration/processes
{
  "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

POST
/api/v1/integration/documents
Cadastrar instrução de trabalho vinculada a produto ou processo
Exemplo — Instrução de TrabalhoPOST /api/v1/integration/documents
{
  "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

POST
/api/v1/integration/quality
Criar critério de inspeção de qualidade para um produto
Exemplo — QualidadePOST /api/v1/integration/quality
{
  "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

POST
/api/v1/integration/capacity
Definir parâmetros de capacidade / limites operacionais de um equipamento
Exemplo — CapacidadePOST /api/v1/integration/capacity
{
  "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.

POST
/api/v1/integration/routes
Criar rota de fabricação com operações embutidas
Exemplo — Rota com OperaçõesPOST /api/v1/integration/routes
{
  "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

EndpointDados enviadosResultado
POST /integration/ordersOrdem + produto inlineOrdem criada, produto com upsert
POST /integration/orders/batchLista de ordens207 com criados e erros
PUT /integration/orders/{code}/statusNovo statusOrdem atualizada + webhook disparado
POST /integration/productsProdutoProduto criado ou retornado
POST /integration/products/batchLista de produtos207 com criados e erros
POST /integration/specificationsFicha técnica + características + normasEspecificação criada
POST /integration/bomPai + filho + quantidadeEntrada de BOM criada
POST /integration/processesProduto + sequência + máquinaSegmento de processo criado
POST /integration/documentsInstrução + produto/processoWork Instruction criada
POST /integration/qualityCritério + métodoEspecificação de qualidade criada
POST /integration/capacityMáquina + parâmetro + limitesCapacidade cadastrada
POST /integration/routesProduto + operações inlineRota 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

GET
/api/v1/integration/occurrences
Listar apontamentos com filtros: from, to, machine, order, type, page, limit
GET
/api/v1/integration/occurrences/{id}
Detalhe completo de um apontamento específico com variáveis e dados do formulário
Exemplo — Listar ApontamentosGET /api/v1/integration/occurrences?from=2026-02-01T00:00:00Z&to=2026-02-28T23:59:59Z&machine=INJ-01&page=1&limit=50
{
  "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

GET
/api/v1/integration/orders/{code}/summary
Resumo consolidado de produção: produzido, refugo, % de conclusão, datas
Exemplo — Resumo de OrdemGET /api/v1/integration/orders/OP-2026-001/summary
{
  "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

occurrence.created order.status_changed order.completed webhook.test

Gerenciamento de Webhooks

GET
/api/v1/integration/webhooks
Listar todos os webhooks cadastrados (secret ocultado na listagem)
POST
/api/v1/integration/webhooks
Cadastrar novo webhook
DEL
/api/v1/integration/webhooks/{id}
Remover webhook (soft delete)
POST
/api/v1/integration/webhooks/{id}/test
Disparar evento de teste para validar conectividade
Exemplo — Cadastrar WebhookPOST /api/v1/integration/webhooks
{
  "url": "https://erp.empresa.com.br/simjob/events",
  "events": ["occurrence.created", "order.completed"],
  "secret": "minha-chave-secreta-hmac"
}

Payload Enviado ao Webhook

Exemplo — Evento occurrence.created recebido pelo sistema externo
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.

Verificação em Python
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)
Verificação em Node.js
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:

MecanismoHeaderValor
API KeyX-API-KeyChave configurada em config.yaml → auth.api_keys
JWT BearerAuthorizationBearer <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:

config.yaml — habilitar auth e API Key
auth:
  enabled: true
  jwt_secret: "sua-chave-jwt-secreta"
  api_keys:
    - "api-key-do-seu-erp-123456"
Chamada usando API Key
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

StatusSignificadoSolução
400 Bad RequestJSON inválido ou campo obrigatório ausenteVerifique o payload — o campo error descreve o problema
401 UnauthorizedAPI Key ou token ausente / inválidoVerifique o header X-API-Key ou Authorization
404 Not FoundRecurso 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-StatusLote com sucesso parcialVerifique o array errors na resposta para itens que falharam
502 Bad GatewayWebhook não respondeu corretamenteVerifique se a URL do webhook está acessível e retorna 2xx