diff --git a/src/pages/ProductionQuality.tsx b/src/pages/ProductionQuality.tsx index e60576c..e459c71 100644 --- a/src/pages/ProductionQuality.tsx +++ b/src/pages/ProductionQuality.tsx @@ -65,6 +65,9 @@ const ProductionQuality = () => { }))), [summary.orders]); const totalDefectiveQuantity = useMemo(() => defects.reduce((total, defect) => total + defect.quantity, 0), [defects]); const affectedOrders = useMemo(() => new Set(defects.map(defect => defect.orderId)).size, [defects]); + const fabricHoleDefects = useMemo(() => defects.filter(defect => /\b(?:furo|furos|furado|perfura[çc][ãa]o)\b/i.test(defect.defectType)), [defects]); + const fabricHoleQuantity = useMemo(() => fabricHoleDefects.reduce((total, defect) => total + defect.quantity, 0), [fabricHoleDefects]); + const fabricHoleLots = useMemo(() => new Set(fabricHoleDefects.map(defect => defect.lotCode).filter(Boolean)).size, [fabricHoleDefects]); const workstationSummary = useMemo(() => { const grouped = new Map(); defects.forEach(defect => { @@ -131,10 +134,11 @@ const ProductionQuality = () => { {message &&
{message}
} {isLoading ?
: <> -
+

Defeitos registrados

{defects.length}

Ocorrências no período

Peças afetadas

{formatQuantity(totalDefectiveQuantity)}

Somadas pelos apontamentos

OPs com ocorrência

{affectedOrders}

De {summary.orders.length} OPs no período

+

Furos na malha

{formatQuantity(fabricHoleQuantity)}

{fabricHoleDefects.length} apontamentos · {fabricHoleLots} {fabricHoleLots === 1 ? 'lote' : 'lotes'}

@@ -142,6 +146,8 @@ const ProductionQuality = () => {

Tipos mais recorrentes

Use estes dados para orientar revisão, fornecedor e correção de processo.

{defectTypeSummary.length ? defectTypeSummary.map(item =>

{item.label}

{item.occurrences} {item.occurrences === 1 ? 'ocorrência' : 'ocorrências'}

{formatQuantity(item.quantity)}

) :

Nenhum tipo de defeito registrado no período.

}
+

Furos na malha

Apontamentos cujo tipo de defeito contém “furo”, “furado” ou “perfuração”. Registre sempre o lote para identificar a origem.

{formatQuantity(fabricHoleQuantity)} peças
{fabricHoleDefects.length ? fabricHoleDefects.slice(0, 10).map(defect =>
{defect.orderNumber}{defect.lotCode && Lote {defect.lotCode}}

{defect.productDescription}

{defect.workstationName || 'Sem posto'} · {defect.origin || 'origem não informada'}

{formatQuantity(defect.quantity)} {defect.unit}

) :

Nenhum furo de malha registrado no período. Ao apontar o defeito na OP, use “Furo na malha” e informe o lote.

}
+

Ocorrências recentes

Rastreabilidade por OP, produto, posto e lote.

{recentDefects.length ? recentDefects.map(defect =>
{defect.orderNumber}{defect.workstationName || 'Sem posto'}

{defect.defectType}

{defect.productDescription} · {defect.origin || 'origem não informada'}{defect.lotCode ? ` · lote ${defect.lotCode}` : ''}

{defect.notes &&

{defect.notes}

}

{formatQuantity(defect.quantity)} {defect.unit}

{formatDateTime(defect.occurredAt)}

) :

Nenhuma ocorrência registrada no período.

}