feat: suporte a pecas e OFs sem componentes cadastrados no corte e solda

This commit is contained in:
2026-10-20 16:42:21 -03:00
parent 8a707894e0
commit d28e131d7a
3 changed files with 34 additions and 20 deletions
@@ -78,21 +78,21 @@ export const calcularSaldoProcessoPeca = (
let qtdDisponivelParaEntrar = Number(peca.quantidade) || 0;
let motivoBloqueio: string | null = null;
const kitInfo = mapaKits?.get(peca.id);
const temControleComponentes = Boolean(kitInfo && kitInfo.tem_componentes && (kitInfo.componentes?.length || 0) > 0);
// REGRA 1: Peças sem montagem (S/M) não passam por Solda
if (ehSemMontagem && ehSolda) {
qtdDisponivelParaEntrar = 0;
motivoBloqueio = 'Peça S/M (Pula Solda - vai direto para Pintura)';
} else if (ehSolda && !ehSemMontagem && mapaKits?.has(peca.id)) {
} else if (ehSolda && !ehSemMontagem && temControleComponentes && kitInfo) {
// REGRA 1.1: REGRA DO KIT COMPLETO DE CORTE PARA A SOLDA!
// Apenas peças com componentes 100% cortados (em lotes de kits inteiros) são liberadas para Solda!
const kitInfo = mapaKits.get(peca.id)!;
if (kitInfo.tem_componentes) {
qtdDisponivelParaEntrar = kitInfo.kits_completos_cortados;
if (kitInfo.kits_completos_cortados === 0) {
motivoBloqueio = kitInfo.motivo_bloqueio_solda || 'Aguardando corte completo dos kits';
} else if (kitInfo.kits_completos_cortados <= jaProduzidoAtual) {
motivoBloqueio = `Todos os ${kitInfo.kits_completos_cortados} kits cortados já foram soldados (${jaProduzidoAtual}/${peca.quantidade})`;
}
qtdDisponivelParaEntrar = kitInfo.kits_completos_cortados;
if (kitInfo.kits_completos_cortados === 0) {
motivoBloqueio = kitInfo.motivo_bloqueio_solda || 'Aguardando corte completo dos kits';
} else if (kitInfo.kits_completos_cortados <= jaProduzidoAtual) {
motivoBloqueio = `Todos os ${kitInfo.kits_completos_cortados} kits cortados já foram soldados (${jaProduzidoAtual}/${peca.quantidade})`;
}
} else if (indexAtual > 0) {
// REGRA 2: Encontrar processo anterior válido
@@ -1217,7 +1217,7 @@ export const SmartProducaoFlow: React.FC<SmartProducaoFlowProps> = ({
fase={faseSelecionada}
onSelectPecaParaApontar={(pecaKit) => {
const ehProcCorte = processoSelecionado?.id === procCorteId;
if (ehProcCorte && pecaKit.tem_componentes) {
if (ehProcCorte && pecaKit.tem_componentes && pecaKit.componentes.length > 0) {
setPecaParaCorteModal(pecaKit);
} else {
const pItem = pecasComSaldo.find((p) => p.id === pecaKit.peca_id);