feat: defasagem configuravel entre corte e solda no cronograma e dashboard de producao
This commit is contained in:
@@ -49,6 +49,7 @@ export const CronogramaForm: React.FC<CronogramaFormProps> = ({ 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<CronogramaFormProps> = ({ 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<CronogramaFormProps> = ({ 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<CronogramaFormProps> = ({ 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<CronogramaFormProps> = ({ cronograma, onCl
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* 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')) && (
|
||||
<div className="mt-3 pt-3 border-t border-slate-100 dark:border-slate-800 flex flex-wrap items-center justify-between gap-3 bg-slate-50/80 dark:bg-slate-900/50 p-2.5 rounded-lg border border-slate-200/60 dark:border-slate-800">
|
||||
<div className="flex items-center gap-1.5">
|
||||
<span className="text-xs font-bold text-slate-700 dark:text-slate-200 uppercase tracking-wide">
|
||||
DEFASAGEM ENTRE CORTE E SOLDA:
|
||||
</span>
|
||||
<span className="text-[11px] text-slate-500 dark:text-slate-400 hidden sm:inline">
|
||||
(espera inicial da solda)
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center gap-1.5">
|
||||
<Input
|
||||
type="number"
|
||||
min={0}
|
||||
max={100}
|
||||
value={formData.defasagem_solda}
|
||||
onChange={(e) => {
|
||||
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"
|
||||
/>
|
||||
<span className="text-xs font-bold text-slate-600 dark:text-slate-300">%</span>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Botão de remoção */}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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));
|
||||
};
|
||||
|
||||
|
||||
@@ -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?: {
|
||||
|
||||
Reference in New Issue
Block a user