import React from 'react'; import { FichaTecnicaData } from '@/hooks/useFichaTecnica'; import { useBrandSettings } from '@/hooks/useBrandSettings'; interface FichaTecnicaPDFTemplateProps { data: FichaTecnicaData; } export const FichaTecnicaPDFTemplate: React.FC = ({ data }) => { const { brandSettings } = useBrandSettings(); const parseInfo = (field: any) => { if (!field) return { e: false, c: false, na: false, info: '' }; if (typeof field === 'string') { try { return JSON.parse(field); } catch { return { e: false, c: false, na: false, info: field }; } } return field; }; const getFornIndicator = (infoRaw: any) => { const parsed = parseInfo(infoRaw); if (parsed.e) return '✓'; if (parsed.c) return '✓'; if (parsed.na) return 'NA'; return ''; }; const getInfoText = (infoRaw: any) => { const parsed = parseInfo(infoRaw); return parsed.info && parsed.info.trim() ? parsed.info.trim() : '-'; }; const formatDateBR = (dateStr?: string) => { if (!dateStr) return '-'; if (dateStr.includes('-')) { const parts = dateStr.split('T')[0].split('-'); if (parts.length === 3) { return `${parts[2]}/${parts[1]}/${parts[0]}`; } } return dateStr; }; const itemsEscopo = [ { label: 'CÁLCULO ESTRUTURAL', field: data.info_calculo_estrutural }, { label: 'PROJETO BÁSICO', field: data.info_projeto_basico }, { label: 'DETALHAMENTO', field: data.info_detalhamento }, { label: 'MATÉRIA-PRIMA', field: data.info_materia_prima }, { label: 'FABRICAÇÃO', field: data.info_fabricacao }, { label: 'GRADES DE PISO / DEGRAUS', field: data.info_grades_piso }, { label: 'JATEAMENTO', field: data.info_jateamento }, { label: 'PINTURA BASE / FUNDO', field: data.info_pintura_base }, { label: 'PINTURA INTERMEDIÁRIA', field: data.info_pintura_inter }, { label: 'PINTURA DE ACABAMENTO', field: data.info_pintura_acabamento }, { label: 'GALVANIZAÇÃO', field: data.info_galvanizacao }, { label: 'EMBALAGEM ESPECIAL', field: data.info_embalagem }, { label: 'TRANSPORTE', field: data.info_transporte }, { label: 'INSPEÇÃO QUALIFICADA', field: data.info_inspecao }, { label: 'ENSAIOS DE LABORATÓRIO', field: data.info_ensaios_lab }, { label: 'DATABOOK', field: data.info_databook }, { label: 'PRÉ-MONTAGEM', field: data.info_pre_montagem }, { label: 'PLACA DE OBRA', field: data.info_placa_engenetal }, { label: 'PARAFUSOS / PORCAS / ARRUELAS', field: data.info_parafusos }, { label: 'CHUMBADORES / QUÍMICO', field: data.info_chumbadores }, { label: 'STUD BOLT', field: data.info_stud_bolt }, { label: 'FORNECIMENTO DE TELHAS', field: data.info_fornec_telhas }, { label: 'MONTAGEM DE TELHAS', field: data.info_montagem_telhas }, { label: 'FORN. / MONTAGEM CALHAS E RUFOS', field: data.info_forn_calhas || data.info_mont_calhas }, { label: 'STEEL DECK E ACESSÓRIOS', field: data.info_steel_deck }, { label: 'FORNECIMENTO / MONTAGEM WALL', field: data.info_fornec_wall || data.info_mont_wall }, { label: 'OUTROS MATERIAIS / SERVIÇOS', field: data.info_outros_materiais }, ]; const enderecoObraCompleto = [ data.endereco_obra || '', data.bairro_obra ? `Bairro: ${data.bairro_obra}` : '', (data.cidade_obra || data.estado_obra) ? `Cidade: ${data.cidade_obra || ''}${data.cidade_obra && data.estado_obra ? ' / ' : ''}${data.estado_obra || ''}` : '', data.cep_obra ? `CEP: ${data.cep_obra}` : '' ].filter(Boolean).join(' - ') || '-'; const contatosResumo = [ data.eng_responsavel ? `${data.eng_responsavel} (Eng. Responsável)` : '', data.telefone_obra ? `Tel: ${data.telefone_obra}` : '', data.email_obra_responsavel || '', data.projetista ? `Projetista: ${data.projetista}` : '' ].filter(Boolean).join(' | ') || (data.projetista ? `Projetista: ${data.projetista}` : '-'); const defaultEtapas = [ { nome: '1. Detalhamento', weeks: [false, false, false, false, false, false, false, false] }, { nome: '2. Suprimentos/MP', weeks: [false, false, false, false, false, false, false, false] }, { nome: '3. Fabricação', weeks: [false, false, false, false, false, false, false, false] }, { nome: '4. Tratamento/Pintura', weeks: [false, false, false, false, false, false, false, false] }, { nome: '5. Expedição/Entrega', weeks: [false, false, false, false, false, false, false, false] }, { nome: '6. Montagem Obra', weeks: [false, false, false, false, false, false, false, false] }, ]; return (
{/* HEADER */} {/* DADOS DO CLIENTE */} {/* DADOS DO PROJETO / OBRA */} {/* TIPO DE PROJETO & DOCUMENTOS */} {/* CORPO: ESCOPO + CRONOGRAMA */} {/* VISTOS E APROVAÇÕES */}
{brandSettings.logo_url ? ( {brandSettings.company_name ) : ( <>
{brandSettings.company_name || 'TrackSteel'}
ESTRUTURAS METÁLICAS
)}
FICHA TÉCNICA DE CONTRATO
OF: {data.of_number || '-'}
GESTOR: {data.gestor || '-'}
REVISÃO: {data.revisao !== undefined ? data.revisao : '0'}
DADOS DO CLIENTE
CLIENTE: {data.cliente || '-'} CNPJ: {data.cnpj || '-'}
ENDEREÇO: {data.endereco || '-'} I.E.: {data.ie || '-'}
CIDADE: {data.cidade || '-'} ESTADO: {data.estado || '-'}      CEP: {data.cep || '-'}
QUANTIDADE / DATA
QUANTIDADE (t): {data.quantidade != null ? data.quantidade : '-'}
DATA: {formatDateBR(data.data_criacao) !== '-' ? formatDateBR(data.data_criacao) : new Date().toLocaleDateString('pt-BR')}
DADOS DO PROJETO / OBRA
DESCRIÇÃO RESUMIDA DA OBRA/PRODUTO: {data.descricao_resumida || '-'}
ENDEREÇO DA OBRA: {enderecoObraCompleto}
RESPONSÁVEIS / CONTATOS: {contatosResumo}
TIPO DE PROJETO
{data.tipo_estrutural ? '✓' : ''} ESTRUTURAL {data.tipo_espacial ? '✓' : ''} ESPACIAL {data.tipo_grades ? '✓' : ''} GRADES / ESCADAS
{data.tipo_residencial ? '✓' : ''} RESIDENCIAL {data.tipo_comercial ? '✓' : ''} COMERCIAL {data.tipo_industrial ? '✓' : ''} INDUSTRIAL
{data.tipo_cobertura ? '✓' : ''} COBERTURA {data.tipo_com_montagem ? '✓' : ''} COM MONTAGEM
DOCUMENTOS FORNECIDOS PELO CLIENTE
{data.doc_calculo ? '✓' : ''} CÁLCULO {data.doc_projeto ? '✓' : ''} PROJETO {data.doc_detalhamento ? '✓' : ''} DETALHAMENTO
{data.doc_normas ? '✓' : ''} NORMAS {data.doc_especif_tecnicas ? '✓' : ''} ESPECIF. TÉC. {data.doc_catalogo || data.doc_fotos ? '✓' : ''} CATÁLOGO / FOTOS
{data.doc_cronograma ? '✓' : ''} CRONOGRAMA
{/* ESCOPO (60%) */} {/* CRONOGRAMA & CONTROLE (40%) */}
INFORMAÇÕES DO PROJETO / ESCOPO DE FORNECIMENTO
{itemsEscopo.map((item, idx) => ( ))}
ITEM / DESCRIÇÃO FORN. ESPECIFICAÇÃO / OBSERVAÇÕES
{item.label} {getFornIndicator(item.field)} {getInfoText(item.field)}
CRONOGRAMA & CONTROLE OPERACIONAL
REQUISITOS / PRAZOS DE EXECUÇÃO:
FABRICAÇÃO E PINTURA: {(data.data_inicio || data.data_termino_prev) ? `${formatDateBR(data.data_inicio)} a ${formatDateBR(data.data_termino_prev)}` : 'A Definir / PCP'}
MONTAGEM: Conforme Liberação de Obra
QUALIDADE / INSPEÇÃO: Inspeção Dimensional e Solda
PLANEJAMENTO DE ETAPAS (SEMANAS)
{defaultEtapas.map((etapa, eIdx) => ( {etapa.weeks.map((isActive, wIdx) => ( ))}
EVENTO S1 S2 S3 S4 S5 S6 S7 S8
{etapa.nome} ))}
ALTERAÇÃO NO CONTRATO / PROJETO (Rev. {data.revisao !== undefined ? data.revisao : '0'})
{data.alteracao_descritivo || 'Emissão Inicial - Nenhuma alteração registrada.'}
Impacto Custo: ({data.alteracao_custo && Number(data.alteracao_custo) > 0 ? 'X' : ' '}) Sim ({!data.alteracao_custo || Number(data.alteracao_custo) === 0 ? 'X' : ' '}) Não     Impacto Prazo: ({data.alteracao_cronograma ? 'X' : ' '}) Sim ({!data.alteracao_cronograma ? 'X' : ' '}) Não
CONTROLE DE QUALIDADE & EXPEDIÇÃO
PEÇAS PRONTAS: [ {data.alteracao_pecas_prontas ? '✓' : ' '} ] OK PINTURA: [ {data.info_pintura_base?.e || data.info_pintura_acabamento?.e ? '✓' : ' '} ] OK
EMBALAGEM: [ {data.info_embalagem?.e ? '✓' : ' '} ] OK LIB. EXPEDIÇÃO: [ {data.visto_exp ? '✓' : ' '} ] OK
VISTOS E APROVAÇÕES DOS RESPONSÁVEIS
GESTOR PCP ENG / PROJETO FABRICAÇÃO EXPEDIÇÃO QUALIDADE
{data.visto_gestor ? `✓ ${data.visto_gestor}` : (data.gestor ? `✓ ${data.gestor}` : '')} {data.visto_pcp ? `✓ ${data.visto_pcp}` : ''} {data.visto_eng ? `✓ ${data.visto_eng}` : ''} {data.visto_fab ? `✓ ${data.visto_fab}` : ''} {data.visto_exp ? `✓ ${data.visto_exp}` : ''} {data.visto_qual ? `✓ ${data.visto_qual}` : ''}
SGI-FM-05 REV.4 - FICHA TÉCNICA DE CONTRATO INTEGRADA
); };