diff --git a/src/components/cronograma/CronogramaForm.tsx b/src/components/cronograma/CronogramaForm.tsx index 54e9f8b..f0627c4 100644 --- a/src/components/cronograma/CronogramaForm.tsx +++ b/src/components/cronograma/CronogramaForm.tsx @@ -49,6 +49,7 @@ export const CronogramaForm: React.FC = ({ cronograma, onCl of_id: '', gestor_id: '', revisao: 1, + defasagem_solda: 10, processos: processosDefault.map((nome, index) => ({ nome_processo: nome, data_inicio: '', @@ -75,6 +76,7 @@ export const CronogramaForm: React.FC = ({ cronograma, onCl of_id: cronograma.of_id, gestor_id: cronograma.gestor_id, revisao: cronograma.revisao, + defasagem_solda: cronograma.defasagem_solda !== undefined ? Number(cronograma.defasagem_solda) : 10, processos: cronograma.processos.length > 0 ? cronograma.processos.map(p => ({ id: p.id, nome_processo: p.nome_processo, @@ -134,6 +136,7 @@ export const CronogramaForm: React.FC = ({ cronograma, onCl of_id: ofId, gestor_id: cronogramaExistente.gestor_id, revisao: cronogramaExistente.revisao, + defasagem_solda: cronogramaExistente.defasagem_solda !== undefined ? Number(cronogramaExistente.defasagem_solda) : 10, processos: cronogramaExistente.processos.length > 0 ? cronogramaExistente.processos.map(p => ({ id: p.id, nome_processo: p.nome_processo, @@ -154,6 +157,7 @@ export const CronogramaForm: React.FC = ({ cronograma, onCl ...prev, gestor_id: '', revisao: 1, + defasagem_solda: 10, processos: processosDefault.map((nome, index) => ({ nome_processo: nome, data_inicio: '', @@ -413,6 +417,38 @@ export const CronogramaForm: React.FC = ({ cronograma, onCl /> + + {/* Defasagem entre Corte e Solda - Exclusivo para o processo de Fabricação */} + {(processo.nome_processo.toLowerCase().includes('fabricação') || + processo.nome_processo.toLowerCase().includes('fabricacao')) && ( +
+
+ + DEFASAGEM ENTRE CORTE E SOLDA: + + + (espera inicial da solda) + +
+
+ { + const val = Number(e.target.value); + setFormData(prev => ({ + ...prev, + defasagem_solda: isNaN(val) ? 0 : Math.max(0, Math.min(100, val)) + })); + }} + className="w-20 h-8 text-xs font-bold text-center bg-white dark:bg-slate-950 border-slate-300 dark:border-slate-700" + /> + % +
+
+ )} {/* Botão de remoção */} diff --git a/src/hooks/useCronogramas.tsx b/src/hooks/useCronogramas.tsx index 268af7d..5d82ba5 100644 --- a/src/hooks/useCronogramas.tsx +++ b/src/hooks/useCronogramas.tsx @@ -72,6 +72,7 @@ export const useCronogramas = () => { of_id: cronograma.of_id, gestor_id: cronograma.gestor_id, revisao: cronograma.revisao, + defasagem_solda: cronograma.defasagem_solda ?? 10, processos: processos || [], peso_total: cronograma.ordens_fabricacao?.peso_total, ordem_fabricacao: cronograma.ordens_fabricacao, @@ -106,6 +107,7 @@ export const useCronogramas = () => { .update({ gestor_id: cronograma.gestor_id, revisao: novaRevisao, + defasagem_solda: cronograma.defasagem_solda !== undefined ? cronograma.defasagem_solda : 10, updated_at: new Date().toISOString() }) .eq('id', cronograma.id) @@ -139,6 +141,7 @@ export const useCronogramas = () => { .update({ gestor_id: cronograma.gestor_id, revisao: novaRevisao, + defasagem_solda: cronograma.defasagem_solda !== undefined ? cronograma.defasagem_solda : 10, updated_at: new Date().toISOString() }) .eq('id', existingCronograma.id) @@ -163,6 +166,7 @@ export const useCronogramas = () => { of_id: cronograma.of_id, gestor_id: cronograma.gestor_id, revisao: 1, + defasagem_solda: cronograma.defasagem_solda !== undefined ? cronograma.defasagem_solda : 10, created_by: user.id }) .select() @@ -255,6 +259,7 @@ export const useCronogramas = () => { of_id: cronograma.of_id, gestor_id: cronograma.gestor_id, revisao: cronograma.revisao, + defasagem_solda: cronograma.defasagem_solda ?? 10, processos: processos || [], peso_total: cronograma.ordens_fabricacao?.peso_total, ordem_fabricacao: cronograma.ordens_fabricacao, diff --git a/src/hooks/useDashboardProducaoOtimizado.tsx b/src/hooks/useDashboardProducaoOtimizado.tsx index 2a3553d..af655c5 100644 --- a/src/hooks/useDashboardProducaoOtimizado.tsx +++ b/src/hooks/useDashboardProducaoOtimizado.tsx @@ -215,6 +215,7 @@ export const useDashboardProducaoOtimizado = (ofNumber: string) => { .from('cronogramas_of') .select(` id, + defasagem_solda, processos_cronograma:processos_cronograma( nome_processo, data_inicio, @@ -287,6 +288,27 @@ export const useDashboardProducaoOtimizado = (ofNumber: string) => { console.log(`Processo ${nomeProcesso}: ${diasDecorridos}/${diasTotais} dias = ${percentualEsperado.toFixed(2)}%`); } + // Se for o processo de Solda, aplicar o fator de defasagem configurado em relação ao Corte + if (nomeProcesso.toLowerCase().includes('solda')) { + const defasagem = cronogramaOf?.defasagem_solda !== undefined && cronogramaOf?.defasagem_solda !== null + ? Number(cronogramaOf.defasagem_solda) + : 10; + + if (percentualEsperado <= defasagem) { + console.log(`Processo Solda: Fabricação esperada (${percentualEsperado.toFixed(2)}%) <= defasagem (${defasagem}%) -> Progresso esperado Solda: 0%`); + return 0; + } + + if (hoje > dataFim) { + return 100; + } + + // Escalonamento suave proporcional: de defasagem% até 100% + const progressoSolda = ((percentualEsperado - defasagem) / (100 - defasagem)) * 100; + console.log(`Processo Solda: Fabricação (${percentualEsperado.toFixed(2)}%) com defasagem (${defasagem}%) -> Solda esperada: ${progressoSolda.toFixed(2)}%`); + return Math.min(100, Math.max(0, progressoSolda)); + } + return Math.min(100, Math.max(0, percentualEsperado)); }; diff --git a/src/types/cronograma.ts b/src/types/cronograma.ts index c15cc7f..075a87f 100644 --- a/src/types/cronograma.ts +++ b/src/types/cronograma.ts @@ -12,6 +12,7 @@ export interface CronogramaOf { of_id: string; gestor_id: string; revisao: number; + defasagem_solda?: number; processos: ProcessoCronograma[]; peso_total?: number; ordem_fabricacao?: {