The Q.C. screen (KPIs, boards, project folders), the Q.C. tab on the packet page (check items from the qc_check_items settings row, visual exam per weld, NDE, hardness with the NACE label, notes), accept with a route and a signature gated by qc_missing_empty, reject with a reason or an NCR number closing the inspection into qc_history, Q.C. folder documents per project and unit with superseding revisions, packet documents as a closed set with take-out reasons, the digital ITP per unit from the frozen template (line initials with CAS, unsign, N/A, customer codes, rejects with NCR, block signatures, sign-off with the PDF hook, admin reopen, the ITP log), hold-point warnings by department page group, the scoped policy check for unit and project writes, migration 0007, tests, Playwright scenarios and docs. Co-Authored-By: Claude Fable 5.1 <[email protected]>
28 lines
935 B
TypeScript
28 lines
935 B
TypeScript
import { Link } from "react-router";
|
|
import type { PacketRead } from "../api/types";
|
|
import { holdItemsText, holdText } from "../lib/qc";
|
|
|
|
/**
|
|
* The open ITP hold, witness or rejected points for this packet's department (the old itpHoldNote). A warning
|
|
* only: nothing is blocked by it. Users with the Q.C. screen get a link to the ITP.
|
|
*/
|
|
export function HoldCallout({ p, qcScreen }: { p: PacketRead; qcScreen: boolean }) {
|
|
const hold = p.itp_hold;
|
|
if (!hold || p.status === "filed" || !hold.count) return null;
|
|
const items = holdItemsText(hold);
|
|
return (
|
|
<div className="callout warn itphold" role="note">
|
|
<b>{holdText(hold)}</b>
|
|
{items ? ` ${items}.` : ""} Check with Q.C. before moving past these points.
|
|
{qcScreen ? (
|
|
<>
|
|
{" "}
|
|
<Link className="lnk" to={`/qc/units/${p.unit.id}/itp`}>
|
|
Open ITP
|
|
</Link>
|
|
</>
|
|
) : null}
|
|
</div>
|
|
);
|
|
}
|