diff --git a/conversor_relatorio_estruturas.html b/conversor_relatorio_estruturas.html index 21f5684..c6e9ab5 100644 --- a/conversor_relatorio_estruturas.html +++ b/conversor_relatorio_estruturas.html @@ -626,8 +626,17 @@ if (isSubComp) { currentAssembly.isComposed = 'SIM'; + + let cleanCompMark = itemMark; + const subMatch = itemMark.match(/-?(\d{4,})$/) || itemMark.match(/(\d{4,})/); + if (subMatch) { + cleanCompMark = subMatch[1]; + } else if (itemMark === '-' || !/^\d{4}$/.test(itemMark)) { + cleanCompMark = String(1000 + currentAssembly.components.length); + } + currentAssembly.components.push({ - marca: itemMark, + marca: cleanCompMark, quantidade: itemQuant, perfil: itemDesc || currentAssembly.descricao, material: detectedMaterial || 'A36', diff --git a/public/conversor_relatorio_estruturas.html b/public/conversor_relatorio_estruturas.html index 21f5684..c6e9ab5 100644 --- a/public/conversor_relatorio_estruturas.html +++ b/public/conversor_relatorio_estruturas.html @@ -626,8 +626,17 @@ if (isSubComp) { currentAssembly.isComposed = 'SIM'; + + let cleanCompMark = itemMark; + const subMatch = itemMark.match(/-?(\d{4,})$/) || itemMark.match(/(\d{4,})/); + if (subMatch) { + cleanCompMark = subMatch[1]; + } else if (itemMark === '-' || !/^\d{4}$/.test(itemMark)) { + cleanCompMark = String(1000 + currentAssembly.components.length); + } + currentAssembly.components.push({ - marca: itemMark, + marca: cleanCompMark, quantidade: itemQuant, perfil: itemDesc || currentAssembly.descricao, material: detectedMaterial || 'A36', diff --git a/src/components/conversores/AdvanceSteelConverter.tsx b/src/components/conversores/AdvanceSteelConverter.tsx index 2ff4a8b..b0627ba 100644 --- a/src/components/conversores/AdvanceSteelConverter.tsx +++ b/src/components/conversores/AdvanceSteelConverter.tsx @@ -500,8 +500,17 @@ const AdvanceSteelConverterContent: React.FC = () => { if (isSubComp) { currentAssembly.isComposed = 'SIM'; + + let cleanCompMark = itemMark; + const subMatch = itemMark.match(/-?(\d{4,})$/) || itemMark.match(/(\d{4,})/); + if (subMatch) { + cleanCompMark = subMatch[1]; + } else if (itemMark === '-' || !/^\d{4}$/.test(itemMark)) { + cleanCompMark = String((labels.faixaComponenteMin || 1000) + currentAssembly.components.length); + } + currentAssembly.components.push({ - marca: itemMark, + marca: cleanCompMark, quantidade: itemQuant, perfil: itemDesc || currentAssembly.descricao, material: detectedMaterial || 'A36', diff --git a/src/hooks/usePecas.tsx b/src/hooks/usePecas.tsx index db358df..2a97131 100644 --- a/src/hooks/usePecas.tsx +++ b/src/hooks/usePecas.tsx @@ -442,13 +442,35 @@ export function usePecas() { pecasMap.set(pecaKey, pecaData); } - if (item.marca_componente && item.marca_componente.trim()) { + if (item.marca_componente && String(item.marca_componente).trim()) { + const rawMarca = String(item.marca_componente).trim(); + let cleanMarca = rawMarca; + + // Extrair a marca numérica pura entre 1000 e 9999 (requisito do banco PostgreSQL) + const matchSuffix = rawMarca.match(/-?(\d{4,})$/) || rawMarca.match(/(\d{4,})/); + if (matchSuffix) { + cleanMarca = matchSuffix[1]; + } else { + const digits = rawMarca.replace(/\D/g, ''); + if (digits.length >= 4) { + cleanMarca = digits.slice(-4); + } else { + cleanMarca = String(1000 + (componentesMap.get(pecaKey)?.length || 0)); + } + } + + let numVal = parseInt(cleanMarca, 10); + if (isNaN(numVal) || numVal < 1000 || numVal > 9999) { + numVal = 1000 + (componentesMap.get(pecaKey)?.length || 0); + } + cleanMarca = String(numVal); + const componenteData = { - marca_componente: item.marca_componente.trim(), - descricao: item.descricao_componente || '', - perfil: item.perfil_componente || '', + marca_componente: cleanMarca, + descricao: item.descricao_componente || item.descricao || '', + perfil: item.perfil_componente || item.perfil_principal || '', peso_unitario: Number(item.peso_unitario_componente) || 0, - quantidade_por_peca: Number(item.quantidade_por_peca) || 1, + quantidade_por_peca: Math.max(1, Math.round(Number(item.quantidade_por_peca) || 1)), user_id: user.id };