Análise integral do MES e da integração Sankhya
Como o sistema funciona hoje, onde estão as regras que controlam a produção, quais partes são reais ou simuladas e em que ordem corrigir os erros pendentes sem comprometer a operação.
Como o sistema funciona hoje, onde estão as regras que controlam a produção, quais partes são reais ou simuladas e em que ordem corrigir os erros pendentes sem comprometer a operação.
01 • Visão de decisão
O sistema é um MES híbrido em transição: uma camada real consulta e altera atividades no Sankhya, enquanto grande parte da experiência operacional continua sendo um protótipo em memória. Essa mistura é hoje a principal fonte de risco e de dificuldade para corrigir erros.
modoTeste = true, mas ainda executa operações reais de início, finalização e registro no Sankhya. Portanto, o rótulo “teste” não representa isolamento técnico. Hoje é possível misturar OP real, etapa real e sessão real com reatores, timers, CQ, supervisor, QR e dossiê simulados.
Rotacionar credenciais materializadas no histórico, impedir identidade forjada, mover o bloqueio de tempo para o backend e revisar a exposição pública de login e OPs.
Definir uma única fonte de verdade por domínio, desativar fallback fictício em operação real e tornar explícito o que ainda é homologação.
Adicionar expiração de locks, idempotência, correlação de execução, proteção contra jobs sobrepostos e recuperação de estados parciais.
Criar logs por etapa, tela de integração, última atualização real, reconciliação Sankhya × Mitra e testes automatizados das condicionais críticas.
02 • Confiabilidade
A análise cruza quatro fontes: código do backend, código do frontend, histórico de migrations e inventário operacional retornado pela plataforma. O guia oficial de integração de dados foi usado como checklist de conformidade.
Comportamento diretamente visível no código, no manifesto ou no inventário operacional.
Consequência técnica provável, dependente de carga, configuração externa ou estado do Sankhya.
Resultado que exige teste controlado no ERP, revisão com Produção/CQ ou acesso operacional específico.
Escopo de banco: “toda a base Sankhya” neste relatório significa o conjunto de tabelas, serviços e relações efetivamente usados pelo projeto. Um catálogo completo de todo o banco Sankhya exigiria acesso ao dicionário integral do ERP e não foi inferido sem evidência.
03 • Estado atual
sankhya-drexellUma única página React muito extensa concentra fila, execução, auditoria, supervisor, qualidade, cadastros, mocks, estados e chamadas remotas.
SFs executam consultas SQL locais, chamadas via Integration e lógica JavaScript para encadear operações Sankhya.
Espelhos parciais do Sankhya, locks e problemas de OP. O inventário atual não contém todas as tabelas do protótipo descritas no setup original.
Fonte oficial para OPs, atividades, processos, formulários, executante e ciclo/amostra de CQ. Também recebe escritas operacionais.
| Modelo | Exemplo | Estado | Problema |
|---|---|---|---|
| Online em tempo real | SFs 95, 97, 98, 99 e login 113 | Ativo | Dependência direta do ERP e baixa tolerância a falhas parciais. |
| Espelho local periódico | TPRCWC e atividades de OP | Parcial | Jobs sem cursor robusto, mutex ou observabilidade completa. |
| Protótipo local | Reator, QR, timers, CQ/LIMS, supervisor e dossiê | Misturado | Dados simulados convivem com ações reais na mesma experiência. |
04 • Cérebro de informação
O Sankhya representa a fonte operacional dominante. O banco local Mitra funciona como apoio, cache parcial e controle de concorrência, mas ainda não constitui uma réplica completa nem um modelo transacional integral do MES.
| Grupo | Tabelas | Finalidade | Observação |
|---|---|---|---|
| Sistema | INT_USER | Usuários nativos da plataforma | Não deve ser substituída por tabela customizada. |
| Concorrência | OP_ETAPA_EXECUCAO_LOCK | Reserva de atividade por usuário | Sem TTL ou expiração automática. |
| Desvios | PROBLEMAS_OP | Registro de problemas operacionais | Identidade enviada pelo cliente. |
| Produtos | PRODUTOS_SANKHYA | Espelho parcial da TGFPRO | Estratégia de ausentes/deletados não está consolidada. |
| Processo | TPRIPROC_SANKHYA, TPRIATV_SANKHYA, TPREFX_SANKHYA, TPRPRC_SANKHYA | Instância, atividade, elemento e processo | Espelhos locais coexistem com consultas online. |
| Formulários | TPRFRME_SANKHYA, TPRFORM_SANKHYA | Vínculos e definição de formulários | Histórico registra cargas incompletas por timeout. |
TPRIPROC, TPRIPA, TPRPRC, TGFPRO
TPRIATV, TPREFX, TPRATV, TPRWCP, TPRCWC
Tabelas de formulário/campos resolvidas dinamicamente por NOMETAB e NOMECAMPO.
TPRICCQ, TPRACCQ, TGFRAM e serviços de Controle de Qualidade.
TSIUSU para resolver o código do executante.
DbExplorerSP, OperacaoProducaoSP, CRUDServiceProvider e ControleQualidadeSP.
| ID | Nome | Tipo | Papel | Exposição |
|---|---|---|---|---|
| 95 | listarOpsAceitasSankhya | JavaScript | Fila de OPs elegíveis | Pública |
| 97 | listarFluxoProcessoOpSankhya | Integration | Etapa aberta e campos de formulário | Autenticada |
| 98 | iniciarFluxoEtapaOpSankhya | JavaScript | Aceitar, atribuir e iniciar atividade | Autenticada |
| 99 | finalizarFluxoEtapaOpSankhya | JavaScript | Formulário, CQ e finalização | Autenticada |
| 112 | registrarProblemaOp | JavaScript | Registrar desvio local | Autenticada |
| 113 | validarLoginSankhya | JavaScript | Autenticar no ERP e devolver sessão | Pública |
| 100/101 | Jobs de atividades e TPRCWC | JavaScript | Sincronizações a cada 5 minutos | Cron |
| 103 | listarOrdensProducaoInicializadasApiMes | Integration | Consulta à API MES Tractworld | Integração paralela |
05 • Operação
sessionIdPonto frágil: a sessão não tem expiração local efetiva e a autenticação Sankhya não cria, por si só, uma sessão Mitra consistente após recarregar a página.
Ponto frágil: erro de integração pode parecer operação normal porque a tela continua com dados simulados.
IDIATV, identificadores da OP, usuário e sessão Sankhya à SF 98.CODUSU em TSIUSU.TPRIATV.Full scan paginado a cada cinco minutos, upsert local e marcação de ausentes por lote. Tem melhor tratamento de deletados, mas não possui mutex para impedir sobreposição.
Reconsulta o histórico das OPs já conhecidas a cada cinco minutos. O loop ocorre dentro de uma única SF JavaScript e não usa cursor incremental persistido.
06 • Regras do cérebro
As condicionais estão espalhadas entre SQL Sankhya, SFs JavaScript e estado React. Essa distribuição explica por que algumas correções funcionam em uma tela e podem ser contornadas por outra.
| Regra | Onde decide | Condição atual | Risco | Correção recomendada |
|---|---|---|---|---|
| OP entra na fila | SF 95 / SQL Sankhya | Processo ativo, instanciado, etapa aberta, exclusões e heurística de CQ | Limite de 50 e regra de reprovação heurística | Paginar e formalizar estados de negócio por códigos. |
| Separação Química | SF 95 | Exclusão por texto da descrição | Renomeação ou acento quebra a regra | Usar ID/tipo estável. |
| Etapa atual | Frontend + SF 97 | Primeira atividade aberta retornada | Atividades finalizadas somem e progresso fica incoerente | Retornar histórico e status ou calcular progresso no backend. |
| Quem pode iniciar | SF 98 + lock | Executante atual e lock por IDIATV | Usuário vem do cliente e lock não expira | Derivar identidade da sessão e adicionar lease/TTL. |
| Tempo mínimo | Frontend | Relógio do browser compara início e tempo da atividade | Bypass pela Auditoria ou chamada direta | Validar na SF 99 usando horário do servidor/Sankhya. |
| Formulário obrigatório | Frontend + SF 99 + Sankhya | Todos os campos retornados devem ter valor | Campos de tabelas distintas podem ser agrupados incorretamente | Agrupar por NOMETAB e validar schema permitido. |
| AMOSTRA CQ | Frontend e SF 99 | Descrição contém texto específico | Aciona aprovação automática e encerra fluxo | Usar configuração estrutural e decisão formal da Qualidade. |
| Supervisor | Frontend | Clique simples ou texto literal SUPERVISOR | Sem autenticação ou segregação de função | Perfis reais e autorização server-side. |
| Qualidade | Frontend mock / SF CQ | Tela acessível a qualquer autenticado; parte local | Aprovação sem segregação e comportamento ambíguo | Perfil CQ, trilha de auditoria e contrato CQ/LIMS. |
| Fallback de integração | Frontend | Falha mantém dados mock | Operação fictícia pode parecer real | Fail closed em produção e ambiente de homologação separado. |
| Registro de problema | SF 112 | Identidade e campos enviados pelo browser | Rastreabilidade fraca e possível 403 em business | SF SQL, usuário derivado do contexto e evidência persistida. |
07 • Gap de implementação
| Capacidade prevista | Documentação | Implementação observada | Gap |
|---|---|---|---|
| Integração em tempo real | Sankhya como fonte oficial | OP, atividade, formulário e CQ parcialmente reais | Parcial Há mistura com mock. |
| Perfis Operador/Supervisor/CQ/PCP | Segregação por responsabilidade | Navegação acessível sem guard de perfil | Ausente |
| Compatibilidade de reator | Bloqueio sistêmico | Predominantemente mock/local | Não produtivo |
| Bipagem e lote | Validar lote real e CQ no Sankhya | Catálogo QR hardcoded e logs voláteis | Protótipo |
| Tempo mínimo | Impedir conclusão antecipada | Bloqueio no frontend, contornável | Inseguro |
| CQ/LIMS | Gate entre Produção e Qualidade | Cenários locais + aprovação automática em caso específico | Ambíguo |
| Dossiê digital | PDF auditável e não editável | Estado React, perdido no reload | Ausente |
| Observabilidade | Dashboard de falhas e retry | Logs parciais de dois jobs | Insuficiente |
| Offline | Ponto em aberto | Sem estratégia robusta | Decisão pendente |
| Agente de negócio | Avaliar para Supervisor/CQ/PCP | Não configurado | Fase futura |
08 • Priorização
Configuração sensível foi serializada no código de SFs e aparece no histórico versionado.
Correção: revogar/rotacionar, criar nova migration sem segredo embutido e remover dependência de token administrativo serializado. Não editar migrations antigas.
A Auditoria chama a finalização diretamente e uma chamada externa à SF também ignora o cronômetro.
Correção: validar o tempo na SF 99 com horário confiável e retornar erro de negócio estruturado.
Usuário e sessão são enviados pelo browser, mas não há derivação inequívoca do usuário pela sessão.
Correção: resolver a identidade server-side e rejeitar divergência entre sessão e usuário.
A interface combina estados fictícios com SFs que escrevem no ERP.
Correção: separar homologação e produção por configuração de ambiente/feature flag server-side, com fail closed.
Descrição contendo “AMOSTRA CQ” dispara criação/vínculo e aprovação automática.
Correção: validar formalmente a regra com Qualidade; preferir estado/código estrutural e trilha auditável.
Início e fim dependem de várias chamadas que podem ter sucesso parcial.
Correção: usar chave de idempotência, máquina de estados/saga, log por etapa e compensações explícitas.
Lock não tem TTL, heartbeat ou processo de desbloqueio seguro.
Correção: lease com expiração, owner visível, renovação controlada e procedimento de recuperação.
Crons a cada cinco minutos não têm mutex e um job percorre todas as OPs em loop único.
Correção: lock por entidade, lotes assíncronos, cursor persistido, retry e retomada.
Alguns scripts fazem DELETE antes da recarga.
Correção: shadow table, versionamento ou upsert atômico.
Login não mostra rate limit/auditoria e a fila pública revela dados operacionais.
Correção: revisar necessidade pública, limitar tentativas, auditar acessos e reduzir dados retornados.
Qualquer autenticado pode acessar Supervisor, Qualidade, Auditoria e Cadastros.
Correção: perfis reais, guards de rota e autorização repetida no backend.
Não há tela central, tempos por etapa, correlação ou última atualização real.
Correção: LOG_IMPORTACOES, monitoramento, alertas e reconciliação por entidade.
09 • Backlog técnico
| Prioridade | Erro ou fragilidade | Efeito observado/provável | Validação necessária |
|---|---|---|---|
| P0 | Regex numérica materializada como /^\d+$/ | Usuário numérico não segue o caminho esperado | Teste unitário da resolução de usuário. |
| P0 | Bypass do cronômetro na Auditoria | Finalização antes do tempo mínimo | Teste direto na SF e pelas duas telas. |
| P0 | Fallback mock após falha do Sankhya | Operador pode atuar sobre dados fictícios | Simular indisponibilidade da integração. |
| P0 | Token/segredo no histórico | Credencial comprometida por persistência | Rotação e varredura de todos os artefatos. |
| P1 | Consulta de fluxo retorna apenas atividades abertas | Progresso tende a 0% enquanto há etapa e 100% no fim | OP real com múltiplas etapas concluídas. |
| P1 | Limite fixo TOP 50 | OPs elegíveis podem desaparecer da fila | Base com mais de 50 OPs. |
| P1 | Lock sem expiração | Atividade pode ficar bloqueada indefinidamente | Fechar browser após iniciar e tentar retomar. |
| P1 | Respostas fora de ordem no frontend | Fluxo de OP A pode sobrescrever OP B | Troca rápida de OP com rede lenta. |
| P1 | Formulário usa a primeira NOMETAB | Campos de tabelas diferentes podem ser inseridos juntos | Etapa com múltiplos grupos/tabelas. |
| P1 | MAX + 1 para IDs | Colisão em finalizações concorrentes | Teste simultâneo controlado. |
| P1 | Jobs sem cursor incremental | Carga crescente e timeout | Medição por volume e plano de execução. |
| P2 | Script fix-ops-aceitas-public.mjs obsoleto | Reexecutar pode remover correções atuais | Bloquear/arquivar script sem executá-lo. |
| P2 | Correção de login fora do manifesto | Rebuild por migrations pode regredir | Comparar SF ativa com baseline reproduzível. |
| P2 | 172 SQLs fora do manifesto | Histórico concorrente difícil de reproduzir | Inventário de aplicação por ambiente. |
| P2 | Metadados e idioma do frontend incorretos | Título/favicon/lang de template | Inspeção do build final. |
| P2 | Sem suíte automatizada | Regressões nas regras críticas | Adicionar testes de unidade, contrato e E2E. |
| P2 | Árvore npm com 9 vulnerabilidades altas | Risco em dependências transitivas do frontend | Executar npm audit, avaliar impacto e atualizar com teste de regressão; não usar correção automática sem revisão. |
| P2 | Projeto marcado como Sankhya mantém login customizado | Fluxo pode conflitar com o auto-login esperado da plataforma | Confirmar arquitetura de autenticação oficial antes de remover ou manter a tela. |
10 • Sequenciamento seguro
A ordem abaixo reduz primeiro o risco de segurança e corrupção, depois estabiliza o motor, e somente então completa funcionalidades.
Mapear SFs ativas, exportar códigos, registrar IDs, crons e integrações; impedir execução acidental de scripts obsoletos. Nenhuma operação destrutiva.
Rotacionar segredo exposto, remover token materializado, revisar SFs públicas, aplicar rate limit/auditoria e eliminar sessão em URL quando tecnicamente possível.
Tempo mínimo, identidade, sequência, permissão, validação de IDs e decisão de CQ passam a ser garantidos server-side.
Lease de lock, chave de idempotência, estado por operação, saga/compensação, retry seguro e prevenção de cliques/chamadas duplicadas.
Remover fallback mock em produção, deixar mocks em modo isolado e rotulado, e definir fonte oficial de cada dado.
Cursor incremental, estratégia de deletados, batching, mutex de job, checagem de burstLimit, paginação estável e reconciliação.
Logs por entidade e etapa, monitor de integração, última atualização real, alertas, execução correlacionada e tela de diagnóstico.
Operador, Supervisor, Qualidade, PCP e Admin com autorização real; simplificação de MesPage em módulos testáveis.
Reator, lote, bipagem, CQ/LIMS, dossiê, apontamento e desvios são integrados um domínio por vez, após contrato aprovado.
Testes paralelos com Sankhya, reconciliação, treinamento, plano de rollback e ativação progressiva por grupo.
Credenciais, tempo, identidade, público, locks e scripts regressivos.
Idempotência, progresso, formulários, erros estruturados e concorrência do frontend.
Perfis, observabilidade, domínios reais hoje mockados e performance.
11 • Checkpoint obrigatório
Este contrato consolida o que já foi descoberto e destaca as decisões que precisam ser confirmadas antes de alterar a integração.
| Item | Estado proposto | Decisão pendente |
|---|---|---|
| Fonte | Sankhya via Integration Gateway | Confirmar versão/configuração e responsáveis técnicos. |
| Modelo | Misto: online para operação, local para apoio/monitoramento | Definir quais entidades devem ser materializadas. |
| OP e atividades | Online, com paginação e proteção contra indisponibilidade | Delay máximo aceitável e comportamento offline. |
| Cadastros e recursos | Cache local incremental | Cursor, frequência e estratégia de ausentes. |
| CQ/LIMS | Contrato separado, sem aprovação por texto | Quem decide e qual status oficial libera produção. |
| Deletados | Soft delete por entidade quando aplicável | Política formal para OP, processo, atividade, produto e formulário. |
| Frequência | Incremental conforme SLA; full refresh em janela segura | SLA e janela de baixo uso. |
| Atomicidade | Upsert idempotente; shadow para full refresh | Escolha por entidade. |
| Concorrência | Mutex por job + lease por atividade | Tempo de expiração e regra de retomada. |
| Monitoramento | Logs por etapa, alertas e última atualização | Destinatários e retenção. |
| Reconciliação | Contagens, chaves, nulos e somatórios | Tolerância de divergência por domínio. |
12 • Qualidade de entrega
burstLimit.13 • Rastreabilidade
Referências usadas para permitir que a equipe localize rapidamente a origem de cada conclusão. Os números de linha correspondem ao snapshot auditado.
frontend/src/pages/MesPage.tsx:11-83frontend/src/pages/MesPage.tsx:941-944frontend/src/pages/MesPage.tsx:753-805frontend/src/pages/MesPage.tsx:2714-2798frontend/src/pages/MesPage.tsx:3882-3921frontend/src/pages/MesPage.tsx:4760-4763frontend/src/pages/LoginPage.tsx:20-50frontend/src/lib/mitra-auth.ts:44-65backend/add-sankhya-fluxo-op.mjs:132-190backend/add-sankhya-fluxo-op.mjs:697-742backend/add-sankhya-fluxo-op.mjs:788-897backend/add-sankhya-fluxo-op.mjs:1007-1020backend/add-sankhya-ops-aceitas.mjs:25-165backend/add-sankhya-atividades-op-job.mjs:136-233backend/add-sankhya-tprcwc-job.mjs:159-199featuresearquitetura.md:62-72featuresearquitetura.md:130-145backend/migrations/3469-update-sf-listaropsaceitassankhya.sqlbackend/migrations/3473-update-sf-iniciarfluxoetapaopsankhya.sqlbackend/migrations/3474-update-sf-finalizarfluxoetapaopsankhya.sql14 • Leitura comum
| Termo | Significado neste sistema |
|---|---|
| MES | Sistema de execução da manufatura que guia e registra a produção. |
| OP | Ordem de Produção originada no Sankhya. |
| SF | Server Function executada pela plataforma Mitra. |
| Integration | Conexão segura usada pelas SFs para chamar o Sankhya ou outra API. |
| DbExplorer | Serviço Sankhya usado para consultas SQL via API. |
| Cursor | Marca que permite buscar apenas registros novos ou alterados. |
| Upsert | Inserção que atualiza um registro quando sua chave já existe. |
| Idempotência | Capacidade de repetir uma operação sem duplicar efeitos. |
| Lock/lease | Reserva temporária que impede dois usuários de executar a mesma atividade. |
| Saga | Controle de uma operação em várias etapas, com estado e compensações. |
| Shadow table | Tabela paralela usada para preparar uma carga completa antes da troca atômica. |
| Fail closed | Quando a integração falha, o sistema bloqueia a operação em vez de assumir dados fictícios. |