# Esquadrias — catálogo real e base comercial

17/10/2026. **Etapa parcial de R03/R04/R14/R18 e M02/M13.** Catálogo editável e funções de cálculo comercial implementados e verificados. Este documento registra a etapa de catálogo/base comercial. Continuações: [núcleo geométrico](ESQUADRIAS-GEOMETRIA.md) e [integração no editor, 3D, compras e relatórios](ESQUADRIAS-INTEGRADAS.md), esta última com o estado vigente. O detalhamento completo de instalação, conjuntos e ferragens continua pendente. Não confundir cadastro com esquadria instalada ou dimensionada. Meta integral ativa; ajuda final R23/M14 obrigatória.

## Origem dos produtos

Consulta autorizada **somente SELECT** à tabela `public.erp_products` do Portal. Colunas: código, nome, unidade, classe/subclasse, fabricante e flags de elegibilidade. Sem estoque, clientes, contatos ou credenciais. Nenhuma alteração de dados, código, configuração ou implantação do Portal/Lovable.

O filtro de nomes ADUELA/ALIZAR/BATENTE/GUARNIÇÃO/PORTA/JANELA retornou 580 registros ativos, não inativos e não bloqueados para venda, abaixo do limite de 1.201. O recorte de madeira resultou em **325 identidades**. PVC, sanfonadas, alumínio, granito, serviços, elétricos e ferragens foram excluídos desse recorte; isso não encerra a pesquisa de acessórios. Snapshot sanitizado: `portal-joinery-reference.mjs`. Não é estoque em tempo real nem ranking de vendas de esquadrias. O snapshot anterior de 459 produtos foi preservado.

| Família inicial | Perfis ERP |
|---|---:|
| Aduela por ML | 7 |
| Aduela por jogo/peça | 12 |
| Alizar por ML | 3 |
| Alizar por jogo | 9 |
| Folha de porta | 248 |
| Janela pronta | 39 |
| Kit de marco/correr, composição própria | 6 |
| Porta com componentes incluídos | 1 |

Código, nome e unidade originais são imutáveis no perfil; o nome local pode ser personalizado. Uma cópia mantém a identidade do SKU. Exemplos reais: aduela 55228, alizar ML 55867, alizar JG 2333, folha 2136, janela 51875 e kit **SEM PORTA** 56481. Nomes mistos continuam mistos, sem atribuição botânica, densidade ou resistência.

## O que já funciona no catálogo

Categoria “Esquadrias e guarnições”, busca por nome/código, páginas de 50 perfis, adicionar, editar, duplicar e excluir localmente. Editor próprio para forma de fornecimento, dimensões, perfil/rebaixo, comprimentos, barras por jogo, conteúdo incluído, massa na unidade ERP e fontes/conferências independentes. As medidas são digitadas em mm e armazenadas em m.

Só dimensões nominais explícitas de aduelas/alizares são extraídas do nome. Não interpretar automaticamente a ordem, unidade e espessura de uma porta ou janela. Zero significa ausente; comprimentos e composições começam vazios. Não inventar uma espessura de folha, um jogo com três barras ou estoque de 2–6 m. Massa de kit não é densidade, e o envelope de uma porta laminada não prova seu volume de madeira.

Conferências vinculam SKU/unidade, fonte e os valores exatos usados; listas e objetos são copiados no registro para que uma edição não altere o próprio comprovante. Editar valores/fonte desmarca a conferência no formulário; alterar o SKU limpa as hipóteses do perfil antes de salvar. Importações com dados incoerentes são rejeitadas. A migração acrescenta a categoria sem substituir projetos, medidas personalizadas ou o catálogo anterior; respeita o limite de 1.000 perfis locais e não repõe exclusões na mesma revisão.

## Regras comerciais implementadas no domínio

`joinery-commerce.mjs` recebe demandas identificadas, vinculadas a um perfil. Essas funções ainda não estão ligadas às peças físicas/exportações do projeto.

- **ML:** compra barras comerciais inteiras; conta serra e sobra. Reserva em barras inteiras, usando o maior comprimento cadastrado para a reserva. A quantidade na unidade ERP é a metragem comprada. O alocador compartilhado mantém a heurística existente; não promete mínimo global de barras.
- **JG/UN de aduela ou alizar:** exige a composição finita de barras por jogo/peça. Não dividir a metragem total pela soma do jogo e ignorar se os cortes cabem em suas barras. Somar jogos inteiros e registrar barras ainda intactas.
- **Folha/janela/conjunto:** compra a unidade fornecida, sem tratá-la como barra de madeira. Conteúdo desconhecido mantém a compra pendente de consolidação; componentes incluídos não podem virar segunda compra.
- **Kit SEM PORTA:** folha incluída é uma contradição bloqueada. Com composição conferida que exclui a folha, uma folha avulsa adicional pode ser necessária. Um alizar de uma face não equivale às duas faces; orientação da face incluída ainda precisa ser identificada na instalação.
- **Comprimento incompatível:** permanece sem solução, sem emenda automática no ar. Fornecimento, estoque ou receita não conferidos deixam quantidade resolvida nula, mesmo quando existe uma estimativa separada. Quantidade não conferida permanece pendente.

A busca de jogos prova o número mínimo quando o limite inferior de metragem é atingido ou quando a busca exaustiva limitada conclui. Para até 60 cortes, há busca com limite de estados de busca; ao excedê-lo, devolve uma solução viável explicitamente marcada como limite superior, sem alegar ótimo. Mais de 60 cortes usa a solução viável da heurística. Máximo de 5.000 demandas e 30 tipos de barras por composição. Não há mistura de perfis/SKUs nem substituição de produto para caber em estoque.

## Fontes técnicas consultadas

- [Portalmad — instalação de esquadrias](https://portalmad.com.br/instalacao-de-esquadrias-de-madeira/): texto HTML revisto, incluindo recebimento, armazenamento, calços, nivelamento, operação e acabamento. Orienta a separação entre vão e conjunto e o registro das condições de instalação. As medidas e cortes particulares do fornecedor não foram transformados em padrões para ZMZ/Sabadini. O manual PDF não foi lido nesta etapa.
- [Pormade — Kit Porta Pronta](https://blog.pormade.com.br/2024/07/09/guia-completo-sobre-o-kit-porta-pronta-da-pormade/): texto HTML de 09/07/2024 consultado sobre composição e opcionais. Fundamenta a necessidade de discriminar o conteúdo; não atribui essa composição a outros kits. Não fornece geometria ou folgas dos SKUs Millano.

Biblioteca atualizada na revisão `2026-10-17.12`, preservando o registro separado de manual Pormade cuja abertura anterior falhou. Nenhum vídeo novo foi assistido nesta etapa. Pesquisa de manuais/vídeos e comprovação de compatibilidade dos produtos continua aberta.

## Evidências e verificação

**421 testes aprovados**, incluindo 25 novos testes de catálogo/comércio e regressões dos sistemas existentes. Log: `evidence/joinery-catalog-test-suite-2026-10-17.txt`. Um teste de jogos confronta 45 cenários determinísticos com um oráculo exaustivo independente de slots previamente disponíveis; além dele, há conservação de barras, serra, sobras e peças, limite de busca, estoques curtos, reservas e kits, metadados inválidos e migração.

O teste antigo de amostra LAN foi atualizado para conferir a extensão aditiva: catálogo anterior e projetos continuam iguais ao snapshot, com esquadrias acrescentadas. Não se mudou o arquivo compartilhado para satisfazer o teste.

No navegador real: 325 referências iniciais; paginação 1–50/51–100, busca ERP, duplicação, medidas em mm, desmarcação imediata após editar, salvamento e recarga conferidos. Trocar 55228 por 56481 limpou dimensões/comprimentos/conferências; tentar declarar folha no SEM PORTA exibiu erro e não salvou. Cancelar manteve a cópia anterior.

Backup real baixado e inspecionado: 20 projetos, 325 perfis originais + uma cópia de QA do 55228, com **medidas/comprimentos fictícios explicitamente nomeados**, com massa não conferida. Os três projetos compartilhados continuam exatamente iguais aos do `rede-projetos.json`; o 55228 original permanece sem espessura/comprimentos/conferências. O ensaio usa somente a cópia técnica. Não é uma definição comercial do lote.

- Verificador do backup e ensaio comercial: `evidence/verify-joinery-catalog.mjs`.
- Resultado: `evidence/joinery-catalog-browser-2026-10-17.json`.
- Captura: `evidence/esquadrias-catalogo-2026-10-17.png`.
- Console observado: zero erros/avisos nessa sessão. Nenhuma avaliação de desempenho em PCs remotos foi realizada.

## Próxima etapa — esquadria instalada

Vincular cada abertura a folha/janela/kit e componentes avulsos; distinguir vão bruto, folgas, marco, folha, piso acabado e faces de alizar. Gerar ombreiras/cabeceira, peitoril quando aplicável, cortes 45°/90°, perfis e encaixes sem interpenetração; movimento/sentido de abertura e ferragens reais. Comprimentos de fabricação devem corresponder às peças e às pontas longas de mitras, sem alongar um produto pronto para caber no vão.

Integrar identidade física, quantitativos, compra por SKU, reserva, cortes e relatórios. Conectar calços, fixação/vedação, paredes/wood frame, pisos e cargas com dados próprios; não presumir rigidez ou capacidade de espuma, dobradiça ou ancoragem. Kits precisam de conferência dimensional e de conteúdo antes de detalhar seus componentes incluídos. Ligações, capacidades, acabamento/exposição e manuais específicos continuam pendentes. R14/M13 não estão concluídos.
