From 1203650c2d7ab07e28fe17d143393e406046fd88 Mon Sep 17 00:00:00 2001 From: admbrainsteel Date: Fri, 16 Oct 2026 16:24:38 -0300 Subject: [PATCH] fix: resolucao definitiva da extracao e persistencia de comprimento de pecas e componentes --- .../conversores/AdvanceSteelConverter.tsx | 12 +++- src/components/conversores/BocadConverter.tsx | 4 +- src/utils/importDiffService.ts | 67 +++++++++++-------- 3 files changed, 51 insertions(+), 32 deletions(-) diff --git a/src/components/conversores/AdvanceSteelConverter.tsx b/src/components/conversores/AdvanceSteelConverter.tsx index 99d9de3..c4819d4 100644 --- a/src/components/conversores/AdvanceSteelConverter.tsx +++ b/src/components/conversores/AdvanceSteelConverter.tsx @@ -759,6 +759,7 @@ const AdvanceSteelConverterContent: React.FC = () => { // Aba 3: Formato Plano Oficial para Importação TrackSteel const excelRowsImportacao: any[] = []; extractedData.forEach((item) => { + const comprPecaNum = item.comprimentoMax === '-' ? '' : Number(item.comprimentoMax) || ''; if (item.components && item.components.length > 0) { item.components.forEach((comp) => { excelRowsImportacao.push({ @@ -769,6 +770,8 @@ const AdvanceSteelConverterContent: React.FC = () => { quantidade: Number(item.quantidade), peso_unitario: item.pesoUnit === '-' ? 0 : Number(item.pesoUnit), peso_total: item.pesoTotal === '-' ? 0 : Number(item.pesoTotal), + comprimento: comprPecaNum, + comprimento_ref: comprPecaNum, tratamento_superficial: item.tratamentoSuperficial || tratamentoGlobal, material: item.material, perfil_principal: item.perfilPrincipal, @@ -777,6 +780,7 @@ const AdvanceSteelConverterContent: React.FC = () => { descricao_componente: comp.perfil || item.descricao, perfil_componente: comp.perfil || item.descricao, peso_unitario_componente: comp.pesoUnitario || 0, + comprimento_componente: comp.comprimento || '', quantidade_por_peca: Number(comp.quantidade) || 1 }); }); @@ -789,6 +793,8 @@ const AdvanceSteelConverterContent: React.FC = () => { quantidade: Number(item.quantidade), peso_unitario: item.pesoUnit === '-' ? 0 : Number(item.pesoUnit), peso_total: item.pesoTotal === '-' ? 0 : Number(item.pesoTotal), + comprimento: comprPecaNum, + comprimento_ref: comprPecaNum, tratamento_superficial: item.tratamentoSuperficial || tratamentoGlobal, material: item.material, perfil_principal: item.perfilPrincipal, @@ -797,6 +803,7 @@ const AdvanceSteelConverterContent: React.FC = () => { descricao_componente: '', perfil_componente: '', peso_unitario_componente: 0, + comprimento_componente: '', quantidade_por_peca: 0 }); } @@ -835,11 +842,11 @@ const AdvanceSteelConverterContent: React.FC = () => { try { const importacaoRows: any[] = []; extractedData.forEach((item) => { - const comprPeca = extrairComprimentoSeguro(item.comprimentoMax); + const comprPeca = extrairComprimentoSeguro(item.comprimentoMax) ?? extrairComprimentoSeguro(item); if (item.components && item.components.length > 0) { item.components.forEach((comp) => { - const comprComp = extrairComprimentoComponenteSeguro(comp.comprimento); + const comprComp = extrairComprimentoComponenteSeguro(comp.comprimento) ?? extrairComprimentoComponenteSeguro(comp); importacaoRows.push({ of_number: item.of, @@ -882,6 +889,7 @@ const AdvanceSteelConverterContent: React.FC = () => { descricao_componente: '', perfil_componente: '', peso_unitario_componente: 0, + comprimento_componente: null, quantidade_por_peca: 0 }); } diff --git a/src/components/conversores/BocadConverter.tsx b/src/components/conversores/BocadConverter.tsx index 58ced70..559247b 100644 --- a/src/components/conversores/BocadConverter.tsx +++ b/src/components/conversores/BocadConverter.tsx @@ -532,11 +532,11 @@ export const BocadConverter: React.FC = () => { try { const importacaoRows: any[] = []; extractedPieces.forEach((item) => { - const comprPeca = extrairComprimentoSeguro(item.comprimentoRef); + const comprPeca = extrairComprimentoSeguro(item.comprimentoRef) ?? extrairComprimentoSeguro(item); if (item.compostoPorComponentes === 'SIM' && item.components && item.components.length > 0) { item.components.forEach((comp) => { - const comprComp = extrairComprimentoComponenteSeguro(comp.compr); + const comprComp = extrairComprimentoComponenteSeguro(comp.compr) ?? extrairComprimentoComponenteSeguro(comp); importacaoRows.push({ of_number: item.of, diff --git a/src/utils/importDiffService.ts b/src/utils/importDiffService.ts index 234611c..bc5cca7 100644 --- a/src/utils/importDiffService.ts +++ b/src/utils/importDiffService.ts @@ -32,23 +32,28 @@ const CAMPOS_MONITORADOS: CampoConfig[] = [ * Suporta múltiplos aliases de importação (Bocad, Advance Steel, Excel, CSV) e formatações de string. */ export function extrairComprimentoSeguro(item: any): number | null { - if (!item) return null; + if (item === undefined || item === null || item === '' || item === '-') return null; - const raw = - item.comprimento ?? - item.comprimento_ref ?? - item.comprimentoRef ?? - item.comprimentoMax ?? - item.comprimento_max ?? - item.comprimento_peca ?? - item['Comprimento'] ?? - item['Comprimento (mm)'] ?? - item['Comprimento Ref. (mm)'] ?? - item['Comprimento Max. (mm)'] ?? - item['Comp. (mm)'] ?? - item['Comp (mm)'] ?? - item.compr ?? - item.comp; + let raw: any; + if (typeof item === 'number' || typeof item === 'string') { + raw = item; + } else if (typeof item === 'object') { + raw = + item.comprimento ?? + item.comprimento_ref ?? + item.comprimentoRef ?? + item.comprimentoMax ?? + item.comprimento_max ?? + item.comprimento_peca ?? + item['Comprimento'] ?? + item['Comprimento (mm)'] ?? + item['Comprimento Ref. (mm)'] ?? + item['Comprimento Max. (mm)'] ?? + item['Comp. (mm)'] ?? + item['Comp (mm)'] ?? + item.compr ?? + item.comp; + } if (raw === undefined || raw === null || raw === '' || raw === '-') return null; @@ -76,19 +81,25 @@ export function extrairComprimentoSeguro(item: any): number | null { * Função utilitária resiliente para extrair o comprimento numérico de subcomponentes. */ export function extrairComprimentoComponenteSeguro(item: any): number | null { - if (!item) return null; + if (item === undefined || item === null || item === '' || item === '-') return null; - const raw = - item.comprimento_componente ?? - item.comprimentoComponente ?? - item.comprimento ?? - item.comprimento_ref ?? - item.compr ?? - item.comp ?? - item['Comprimento Componente'] ?? - item['Comprimento (mm)'] ?? - item['Comprimento'] ?? - item['Comp. (mm)']; + let raw: any; + if (typeof item === 'number' || typeof item === 'string') { + raw = item; + } else if (typeof item === 'object') { + raw = + item.comprimento_componente ?? + item.comprimentoComponente ?? + item.comprimento ?? + item.comprimento_ref ?? + item.comprimentoRef ?? + item.compr ?? + item.comp ?? + item['Comprimento Componente'] ?? + item['Comprimento (mm)'] ?? + item['Comprimento'] ?? + item['Comp. (mm)']; + } if (raw === undefined || raw === null || raw === '' || raw === '-') return null;