E-Square Cockpit v3.1.63
O que é: uma aplicação desktop (Windows, .exe único de ~48 MB, sem instalador) que
comanda o CATIA V5 por automação COM (pycatia/pywin32 sobre GetActiveObject("CATIA.Application")).
Automatiza o processo de construção de facas de corte (trim steels) da operação 30 de ferramentas
de estampagem automóvel, seguindo o processo escrito do cliente: cortar o contorno em troços, criar os
planos da regra da empresa, publicar os elementos e explodir num conjunto com um CATPart por faca — tudo
sem nunca gravar um documento (a gravação é sempre revisão humana).
Como funciona, num desenho
Arquitetura em 30 segundos
- UI: PySide6 (Qt 6) com 7 abas, moldura própria estilo Windows 11, tema escuro único.
- Adaptador CATIA (
catia_adapter.py, a única camada que toca em COM): liga-se apenas a instâncias já abertas (nunca arranca CNEXT invisível), com espera paciente quando o CATIA está ocupado (RPC_E_CALL_REJECTED→ retry com backoff) e diagnóstico legível de cada HRESULT. - Execuções em threads (QThread + apartamento COM próprio): a UI nunca congela; um monitor lê o estado ao vivo do CATIA a cada ~4 s (documentos abertos, ativo, ligação).
- Contrato de nomes (
norma.py, puro e testado):MesserRippe_0N(troço),PL_Messer_0N(plano 40 mm abaixo do mínimo de cada troço),Messer_0N(CATPart da explosão). - Segurança: deteção de popups modais do CATIA que penduram o COM (aviso amarelo com o nome da janela),
timeout com diagnóstico nas leituras, caixa-negra
registos/crash.log, relatórios honestos. - Auto-update: GitHub Releases + verificação SHA-256; barra de progresso real; o utilizador reabre.
- Ponte web: a app serve o próprio estado em
http://localhost:8765/estado(vista "CATIA ao vivo" do cockpit web). - Qualidade: 48 ficheiros de teste (unidade + UI offscreen + E2E no CATIA real), 103 provas por imagem, TDD com âncora nos vídeos/prints do cliente.
Regras de ouro do produto
A corrida que o setor está a perder — e a que pode ganhar
A Ásia pode copiar o preço-hora de qualquer
estúdio de engenharia europeu. Não pode copiar a distância, o fuso, a língua — nem a velocidade de quem
está ao lado do cliente.
O tempo é a única vantagem que não se
compra em Bangalore.
As palavras não são nossas
Foram ditas nas nossas reuniões de trabalho, por quem conhece a casa melhor do que ninguém:
"Só isso aí tirava todo um dia de trabalho."
sobre UMA única tarefa repetitiva (selecionar centenas de superfícies à mão), numa peça"Já não tenho dúvida que funciona."
depois de testar a automação com as próprias mãos, na peça real"Eu já vi a ligação… tu consegues fazer o resto."
a confiança que faltava: o software a comandar o CATIA de verdade"A informação já lá está — ele não tem que ir buscar nada."
a visão para o futuro do posto de trabalho: carregar em start e reverO diagnóstico e a visão já existem dentro da E-SQUARE — este documento só lhes põe números e um caminho. O que está em cima da mesa não é uma ideia de fora: é acelerar o que a casa já provou que funciona.
O tabuleiro
O custo-hora não se vence
Ordens de grandeza de fontes públicas do setor; variam por região e ano. A conclusão não varia: competir no preço-hora contra 8 €/h é uma guerra perdida antes de começar. A pergunta certa não é "como cobro menos por hora?" — é "como entrego mais semanas antes?"
Os medos que tiram o sono a quem lidera neste setor
- A proposta que chega 40% abaixo. Não podes bater o número — e explicar "qualidade" a um departamento de compras é vender contra uma folha de Excel.
- O prazo como última trincheira. Quando o OEM muda a peça à sexta-feira, quem responde na segunda fica com o projeto. Quem responde "daqui a três semanas" entra na lista dos substituíveis.
- Os séniores a sair, o conhecimento a sair com eles. Formar um projetista de ferramentas leva anos; reformam-se mais depressa do que se formam. Cada hora deles gasta em cliques repetitivos é conhecimento caro a fazer trabalho barato.
- Poucos clientes, muito peso. Perder um cliente-âncora não é perder margem — é reestruturar a empresa.
- Margens a encolher em silêncio. O preço estagna, os salários e a energia sobem; a diferença sai de onde ninguém vê: das horas de engenharia mal aproveitadas.
O dinheiro na mesa
E o custo maior nem aparece na contabilidade: é o projeto recusado porque a equipa estava cheia, a alteração entregue tarde, o concurso perdido por uma semana. Capacidade é a única coisa que o setor não consegue contratar depressa — e é exatamente o que a automação devolve.
Os próximos 3 anos — o desenho dos dois caminhos
É um cenário, não uma profecia — mas é o cenário que qualquer pessoa do setor reconhece:
inteligência + velocidade
nos dois cenários
A Ásia melhora nos dois cenários — a única variável que controlamos é a nossa velocidade.
A visão
É esta a aposta: transformar a casa que executa mais depressa que os outros na casa que responde quando os outros ainda estão a abrir o CAD. O engenheiro deixa de ser pago para clicar e passa a ser pago para decidir — e cada hora sénior libertada é margem, prazo, ou um projeto novo. Ninguém aqui tem medo de trabalhar; a questão é pôr as melhores horas da casa onde elas valem mais.
Esta guerra é nossa. E ganha-se com inteligência e velocidade.
Guia de uso & teste
Requisitos e arranque
- Windows + CATIA V5 aberto (R32 ou superior). O programa é um .exe único — sem instalação: basta abrir.
- O programa liga-se sozinho ao CATIA aberto (bolinha verde no rodapé). Sem CATIA, os botões de execução ficam desativados.
- Regra de ouro do teste: nada é gravado. Podes repetir tudo à vontade — fechar os documentos sem gravar limpa qualquer resultado.
- Atualizações: quando houver versão nova aparece um ⬆ verde no topo — um clique descarrega com barra de progresso, o programa fecha-se e abres outra vez. (Não precisa de teste — acontece sozinho quando houver novidade.)
O fluxo que vais executar
Passo a passo com verificação
Preparar
- No CATIA: File > Open → a peça com a linha de recorte (no teste:
TESTE_FACA.stp). Se aparecer "Transfer completed", clica OK — janelinhas abertas no CATIA bloqueiam a comunicação, e o programa avisa-te em amarelo qual fechar, se te esqueceres de alguma. - Abre o E-Square Cockpit. Confere: "Ligado" verde no Dashboard e o droplist do topo a mostrar a tua peça.
Cortar (o passo 1 do processo)
- Macros → Gerar Facas por Linha → Executar no CATIA (o formulário já vem certo: normais à curva, 400 mm).
- Escolhe a linha na caixinha (só aparecem linhas reais da peça) → Usar esta linha. Com vários contornos, o botão "Cortar todas as N linhas" corta tudo com numeração contínua.
- Escolhe o Axis System → Usar este eixo. (Se a peça só tiver o eixo absoluto, aparece só esse — normal em STEP.)
- Confere: tabela com previsto = medido (troços de 400 mm + um curto no fim, "Rever sobra"); na árvore,
MesserRippe_01…ePL_Messer_01….
Publicar e explodir (passos 3 e 4)
- Publicar elementos → Executar. Confere: estado OK por cada troço e plano; nó Publication na árvore. (O aviso de que falta a fase manual — ponto de encosto + alinhamento — é normal: essa fase é vossa.)
- Explodir em Parts → Executar. Não uses o copiar/colar do Windows enquanto corre. Confere: conjunto com um CATPart
Messer_0Npor faca e "colagem COM LINK verificada em todos" no log.
Power Copy (passo 5)
- Power Copies → MESSER_RIPPE → Aplicar no CATIA. (Lista vazia? Usa «Abrir pasta» e larga lá os .CATPart das Power Copies — aparecem em ~4 s.)
- Com os troços já cortados não pergunta nada — e se o documento ativo for o conjunto, o programa troca sozinho para a peça (o droplist do topo pisca a avisar).
- Confere: uma instância por troço no log e a lâmina a aparecer ao longo da curva no 3D.
Selecionar superfícies (o poupa-um-dia)
- Abre uma peça com raios → Macros → Selecionar e Juntar → escolhe "Raios positivos (convexos)" ou "negativos (côncavos)"; deixa o resultado em "Só SELECIONAR no CATIA" (não altera o ficheiro).
- Confere: "N elements selected" na barra do CATIA e as faces a laranja — prontas para o teu comando seguinte, como uma seleção à mão. Repetir dá sempre os mesmos números.
Utilitários
- Droplist do topo: mostra o documento ativo; escolher lá ativa-o no CATIA.
- ⧉ Copiar tudo: copia Execução+Resultado+Relatório num texto único — perfeito para reportar qualquer dúvida.
- Aba Projetos: horas por peça, estimativas (🕒) e ativação por clique.
Se algo correr mal
Dashboard

O que faz
- Ligação CATIA ao vivo (verde/cinza) com tolerância a quedas momentâneas — uma falha de 3 s não apaga o painel (aconteceu na reunião de 28/07; hoje mostra "desatualizado" e recupera).
- Projeto ativo — o documento com que o CATIA está a trabalhar, atualizado a cada ~4 s.
- KPIs: documentos abertos, horas de hoje, execuções registadas, minutos poupados (estimativa).
- Horas por utilizador: lista de utilizadores (conta Windows do posto); clicar num nome mostra as horas por projeto. As horas contam apenas com o CATIA em primeiro plano e input recente — ociosidade não conta.
Honestidade
Projetos

O que faz
- Lista ao vivo os documentos realmente visíveis no CATIA (filtra os internos
ccp_dummy*e as peças-filhas carregadas sem janela — medido: Documents.Count=10 para 2 janelas reais). - Clicar no nome ativa o documento no CATIA (com feedback "a ativar…"). O mesmo mecanismo alimenta o droplist do topo, que também pisca quando o programa troca de documento sozinho.
- Relógio 🕒 para definir a estimativa de horas de cada peça; barra de orçamento (verde/amarelo/vermelho) contra o tempo real medido.
- Tempo por projeto soma entre dias — abrir a mesma peça amanhã continua a conta.
Honestidade
Part1.CATPart…) não têm relógio nem simulação — sem nome estável não há histórico que faça sentido. E um documento aberto sem janela não pode ser ativado (o CATIA não tem onde o mostrar) — por isso é filtrado da lista.Macros

As 4 macros
| Macro | O que faz (tecnicamente) | Estado |
|---|---|---|
| Gerar Facas por Linha | Mede a linha escolhida (SPAWorkbench, geodésico), cria pontos por arco a cada N mm, um plano normal à curva em cada ponto, divide a linha em troços independentes (MesserRippe_0N) e cria os planos de base PL_Messer_0N 40 mm abaixo do mínimo de cada troço, medido no eixo escolhido. Pergunta a linha e o Axis System (escolha manual — pedido do cliente). Botão "Cortar todas as N linhas" corta todos os contornos com numeração contínua. | provado no CATIA real |
| Publicar elementos | Tools > Publication por COM: publica troços e planos com a referência do produto (PartNumber/!Elemento — a referência do Part dá E_NOINTERFACE, medido). Republicar substitui, não duplica. Varrimento contíguo 01→N. | provado (4/4) |
| Explodir em Parts | Cria o Product de montagem com o CATPart mestre como componente e um Part novo por faca; cola em cada Part os elementos publicados As Result With Link (string COM CATPrtResult — a "WithOutLink" é a armadilha) e verifica os External References um a um. Avisa se as Options do CATIA têm as ligações externas desligadas. | provado (6/6 com link) |
| Selecionar e Juntar | Enumera as faces (search limitado aos Bodies sólidos), classifica por GeometryName (plano/raio/livre) e decide côncavo vs convexo por sonda geométrica medida: o centroide de uma face curva cai do lado do centro de curvatura — distância mínima ao sólido ≈ 0 ⇒ convexa. Por omissão só seleciona (a laranja, como o shift-click deles, zero alterações ao ficheiro); criar o Join é escolha explícita. | provado (36/36 + 36/36) |
Segurança da execução
- Antes de cada execução, o programa deteta janelas modais do CATIA ("Warm Start", "Transfer completed", "File Selection") que penduram o COM — avisa em amarelo, diz qual janela fechar e salta sozinho para a aba Execução.
- Leitura de linhas com timeout de 30 s e diagnóstico medido; uma leitura pendurada é abandonada e substituída ao clique seguinte.
- Se o documento ativo for um conjunto (Product), o programa ativa sozinho a peça mais provável — o erro "não é um CATPart" morreu na v3.1.63.
- Botão ⧉ Copiar tudo: exporta as 3 sub-abas (Execução, Resultado, Relatório) num texto único pronto a colar.
Power Copies

O que faz
- Scan da pasta a cada 4 s: largar um .CATPart na pasta fá-lo aparecer na lista (sem reiniciar). Um sniffer lê o binário e distingue Power Copy nativa de template simples, extraindo os nomes dos inputs.
- Aplicação oficial por COM (
InstanceFactory): uma instância por troçoMesserRippe_0N, com a linha do troço + o plano Sohle da regra da empresa (40 mm abaixo do mínimo, no eixo do documento) como inputs. Aceita os nomes novos e os antigos (KNIFE_LAT_) sozinha. - Se os troços já existem, aplica direto, sem perguntar a linha (v3.1.63); se não existem, corta primeiro automaticamente.
- Faca completa (receita própria, 5 inputs): resolvida a 27/07 — o 5.º input é o "xy plane" do template (lido do geoset INPUT) e a chave é a normal do Base_Ferramenta para baixo (
AddNewPlaneEquation(0,0,-1,0)). Provada com fecho de volume: 21,4 M mm³.
Honestidade
AI (Beta)

O que faz
- Envia o pedido ("desenha a porta de um carro com reforço duplo") ao OpenRouter (modelos à escolha; chave própria do utilizador, guardada cifrada com DPAPI no posto).
- O plano volta em JSON, passa por um validador geométrico (rejeita polígonos degenerados/auto-intersectados, NaN, placas fora do passo anterior) e só depois é desenhado por COM (sketch + pad/pocket), com rollback do passo falhado.
- Continuações sobrevivem a reinícios: os parâmetros de contexto ficam gravados na própria peça (
ESQ_AI_ZTOPO/ZMAX).
Honestidade
Hardware

O que faz
- Mostra a thread mais carregada do CNEXT — porque o cálculo geométrico e os Update do V5 correm essencialmente numa thread (medido neste projeto: pico de 95% numa thread, total 1,23 núcleos). Poucos núcleos MUITO rápidos > muitos núcleos.
- GPU (nvidia-smi), RAM do CATIA, histórico de 10 em 10 min com deteção de picos de CPU (⚡).
- Teste de carga em 3 níveis (leve/moderada/pesada) — cria geometria temporária, mede, e fecha sem gravar.
Honestidade
Versão

Como funciona a atualização
- O programa verifica o GitHub Releases ao arrancar e a cada 12 h (silencioso, falha sem rede = silêncio).
- Versão nova ⇒ aparece o ⬆ verde no topo. Clicar: descarrega com barra de progresso real (bytes recebidos), verifica o SHA-256, troca o exe e fecha-se.
- O utilizador reabre — decisão deliberada: sem certificado de código, a reabertura automática disparava o Defender ("Failed to load Python DLL"). Reabrir à mão é 100% fiável.
Marcos do histórico
| Versão | Data | Marco |
|---|---|---|
| 0.1.0 | 03/07 | Primeira demonstração |
| 3.0.1 | 14/07 | Cockpit por utilizador; execução só em CATIA real (fim da simulação) |
| 3.1.3 | 16/07 | Power Copy MESSER_RIPPE instanciada 100% por COM |
| 3.1.12 | 16/07 | Cockpit web num só endereço (localhost:8765) |
| 3.1.16 | 27/07 | Faca completa: a receita do cliente fecha o volume |
| 3.1.24 | 01/08 | Sprint 1: os 12 defeitos que o cliente viu, fechados |
| 3.1.39 | 02/08 | Auto-update embutido |
| 3.1.55 | 04/08 | Caixa-negra: nenhum erro interno volta a ser invisível |
| 3.1.63 | 04/08 | Os achados do teste final humano, todos fechados |
O que funciona (e o que não)
FUNCIONA — provado no CATIA real
- Processo escrito completo (resposta de 03/08): corte 400 mm →
MesserRippe_0N+PL_Messer_0N→ publicar → explodir com links verificados um a um. Provado por testes automáticos, por teste conduzido na interface como um humano e à mão, de ponta a ponta (04–05/08). - Cortar todos os contornos num clique com numeração contínua (3 contornos → MesserRippe_01..06).
- Power Copy antiga do cliente aplicada aos troços sem R34, sem perguntar linha, com troca automática de documento (2/2 e 4/4 em testes distintos).
- Seleção de raios positivos/negativos por sonda medida: 36/36 + 36/36 no gabarito, contagens estáveis em reexecução.
- Auto-update ponta a ponta com releases reais (testado v3.1.50 → v3.1.63, SHA verificado).
- Deteção de popups do CATIA, timeout com diagnóstico, caixa-negra crash.log, ⧉ Copiar tudo, droplist que comanda o CATIA.
- Horas por utilizador/projeto medidas com regras honestas (1.º plano + input recente).
ARESTAS — funciona, mas com limites conhecidos
- "Só selecionar" deixa as faces vivas como a seleção manual — clicar fora limpa (comportamento do próprio CATIA; o programa avisa).
- Superfícies livres (sem centro único) ficam fora dos modos positivos/negativos — são anunciadas, não escondidas; entram no modo "tudo o que não é plano".
- Reexecutar o corte no mesmo documento duplica nomes do contrato — o programa avisa; o caminho limpo é fechar sem gravar e repetir.
- Facas de 200 mm no template REV64 deixam pinos fora da faca (limite do template do cliente, não do corte).
- Aviso de Power Copy com a pasta vazia aparece sem ficheiro selecionado (cosmético); GPU errada na aba Hardware (Parsec vs RTX — cosmético); a atualização não leva os modelos da pasta (documentado).
- O histórico de execuções regista 70 erros em 254 — são na esmagadora maioria sessões de desenvolvimento/teste (o erro é o objetivo do teste); não distingue ainda "erro de utilizador" de "erro de programa".
AINDA NÃO FUNCIONA / DEPENDE DE TERCEIROS
- Faca completa com a Power Copy nova do cliente — o ficheiro é R34 e não abre no R32 deste posto. Bloqueado até à licença R34 prometida.
- Orientação da faca via Output no sketch — foi medido que um elemento 2D dentro de um sketch não viaja por COM para o CATPart da faca. A alternativa (ponto+linha soltos criados por omissão) está proposta e aguarda decisão conjunta.
- Gravar o resultado em pasta do cliente — tecnicamente pronto, mas aguarda autorização (colide com a invariante "nunca gravar").
- Validação em geometria grande real — o STEP grande prometido pelo cliente nunca chegou.
- Operação 20 (o objetivo final) — não iniciada; ver "Próximos passos".
- Multi-posto / tempo real central (vários PCs a reportar a um hub) — pesquisado e desenhado (Durable Objects + D1, cadência 5–10 s), não implementado.
Próximos passos — a operação 20 completa
Operação 20 vs 30, nas palavras do cliente (reunião de 23/07): "a 20 faz a fórmula, a 30 corta — e é para isso que criamos as facas". Cada projeto tem 6 operações (20–70), feitas em paralelo, uma pessoa por operação, ~5 projetos/ano. A OP20 é a ferramenta de embutimento (dá a forma à chapa) e é, literalmente, "o objetivo final". Tudo o que o Cockpit faz hoje é da OP30 — e foi essa a estratégia: provar a ligação software↔CATIA no processo mais mecânico primeiro ("eu já vi a ligação… tu consegues fazer o resto").
1 · Fechar a operação 30 (facas) — a fila atual
| Item | Depende de |
|---|---|
| Licença R34 + dados do posto para o servidor — destrava a faca completa com a Power Copy nova oficial (passo 5 do processo escrito) | E-SQUARE (já falada; após as 19h/fins de semana) |
| Orientação fora do sketch — apresentar a prova medida de que o Output 2D não viaja por COM e fechar a alternativa (ponto+linha soltos, criados por omissão) | Decisão na call |
| Autorização para gravar o mestre e os Parts numa pasta indicada por eles | Cliente |
| STEP grande prometido, para validar em geometria de produção | Cliente |
Nomenclatura final (PL_Messer vs PL_MesserRippe) e numeração entre contornos (contínua vs por contorno) | Decisão na call |
| Fase manual (ponto de encosto + alinhamento): o programa cria por omissão com interruptor? | Decisão na call |
| Termo de acordo + proposta de horas ("ofertas e número de horas" — as duas opções estão na página Investimento) | Rafael |
2 · Construir a operação 20 — o caminho
A OP20 não é uma extensão das facas — é um projeto novo. Os inputs estão definidos pelo cliente (23/07): a prensa; o método com 5 elementos (superfícies da matriz, punção e pisador, contorno da punção, platina); o documento FAP (alemão, checkmarks de batentes/posicionadores, "está sempre no mesmo sítio"); e a pasta de normas internas (ex.: nervuras 55/40/30 consoante o material). "Com isto e com aquele documento nós temos tudo para fazer a ferramenta."
| # | Passo | Natureza |
|---|---|---|
| 1 | Especificação conjunta — escrever o "processo da OP20" passo a passo, como se fez para as facas. Sem isto, tudo o resto é adivinhação. | Sessão de trabalho conjunta |
| 2 | Ingestão do método — contrato de nomes/publicações para as 5 superfícies de entrada (matriz, punção, pisador, contorno, platina). | Software |
| 3 | Parser do FAP — extração automática dos checkmarks (batentes, posicionadores) do PDF/Excel alemão; viável porque o layout é fixo. | Software |
| 4 | Motor de normas — codificar a pasta de regras deles (espessuras por material etc.) como parâmetros, à imagem do norma.py das facas. | Software + validação do cliente |
| 5 | Geração da ferramenta de embutimento no CATIA — a parte grande: presumivelmente sobre os templates/Power Copies OP20 do cliente, o que reedita as dependências conhecidas (R34, gravação, catálogos). | Software + cliente |
| 6 | O "start" por operação — a visão final: um botão por operação onde "a informação já lá está, ele não tem que ir buscar nada". | Integração |
Relatório: tempo, tokens e investimento
O projeto em números
Computação de IA consumida no desenvolvimento
Método: soma dos registos locais de utilização das 31 sessões de desenvolvimento deste projeto (de 45 sessões na máquina no período). Sessões antigas já limpas do disco não contam — os números são um piso, não um teto.
| Tipo | Tokens | O que é |
|---|---|---|
| Output (gerado) | 19 126 472 | código, análises e documentação escritos pela IA — ≈ 14 milhões de palavras |
| Input novo | 282 618 | texto novo enviado (sem cache) |
| Escrita de cache | 124 743 785 | contexto guardado para reutilização |
| Leitura de cache | 4 719 551 323 | contexto relido a cada passo — é aqui que os trabalhos longos e cuidadosos pesam |
Valor do projeto até hoje
É o valor do projeto se se passasse a régua hoje (05/08/2026): horas de trabalho + custos com inteligência artificial, do primeiro dia (03/07) até esta versão (v3.1.63) — as 73 versões, os 99 commits, os 48 ficheiros de teste e as 103 provas documentadas.
Não inclui licenças nem hardware do posto de desenvolvimento.
Horas — os números honestos
| Métrica | Valor | Honestidade do número |
|---|---|---|
| Duração somada das sessões de desenvolvimento (relógio de parede) | ≈ 676 h | Inclui pausas e sessões em paralelo contam a dobrar — é "tempo de sessão aberta" (a IA trabalha em vários assuntos ao mesmo tempo), não tempo humano ativo. |
Como avançar — duas formas de trabalhar
Opção A — Fechar por projeto
Estimamos o tempo juntos, fecha-se um valor, e eu desenvolvo até estar entregue e provado.
O risco é meu: se demorar mais do que o estimado, o preço não mexe — para mais ou para menos.
Ideal quando o âmbito está bem definido.
Opção B — Por hora
Mínimo de 40 horas por semana, com renovação bimestral automática. Trabalho contínuo, prioridades ajustadas semana a semana.
O risco é do cliente — para mais ou para menos: o que se poupa em âmbito, poupa-se na fatura.
Ideal para evoluir por fases com flexibilidade total de direção.