⛔ OUT OF PHASE-1 — DO NOT BUILD FOR THE PILOT.
Per the locked pilot scope decision (2026-06-01), the batch hold / QP-disposition WORKFLOW (URS-23) is OUT of Phase-1 and the Phase-2 (Sep-01) verified build — it is a Phase-3 illustration: NOT built, NOT wired, NOT verified for the pilot. The batch-hold trigger shown here is not part of Phase-1 WP-7 (which is critical-deviation co-sign only). What IS in Phase-1: minimal batch master data is seeded (reference rows, system-attributed) so a deviation can reference a batch via the seeded-batch typeahead. The hold + QP-disposition workflow below remains Phase-3.
Scenario. Reema (QC analyst) discovers a non-sterilised pre-filter was used on the sterile filtration step for Batch B-9876 (injectable line, Chennai). She raises a Critical deviation. Triage confirms Critical; reportability clock starts. Vikram investigates, identifies batch impact. System fires the WP-7 hardening event — URS-23 places B-9876 on QUALITY HOLD; release blocked platform-wide. QP Karthik reviews + decides REJECT. Disposition links back. Anita closes the deviation with 4 substrate-verified signatures (closure + QA + practice-lead + executive co-sign — WP-7 build).
✓ Minimal batch master data — seeded (reference) — Phase-1✓ Deviation references a batch (seeded typeahead) — Phase-1✗ Batch hold trigger (DEC-16-27) + state flip to QUALITY HOLD — Phase-3✗ Hold cross-record cascade (deviation → batch state) — Phase-3✗ QP disposition decision capture — Phase-3✗ Full URS-23 batch lifecycle (create → MBR → IPC → release)✗ Batch genealogy✗ Full QP release ceremony (Annex 16 batch certification)✗ Subsequent release / re-process
batch_id = B-9876 stored as scope anchor in deviations row. The hold trigger doesn't fire here at intake — it fires when the investigator confirms impact (DEC-16-27 timing). Master batch record looked up from URS-23 to validate batch_id exists in current tenant.
2
Click
Submit · DEV-2026-000425 minted
✅ "Critical deviation submitted. QA + RA + Site Head notified."
Behind the scenes · Critical fan-out
State draft → investigating. Critical pre-routes wider notification than Minor/Major: QA pool + RA Head + Site Head per URS-30 + URS-09 contacts roster.
DONE · Reema reports to her supervisor; awaits closure notification.
Hand-off▶ URS-30 broadcast pool → Priya claims triage
P
Priya — QA Lead
quality_leadqa_reviewersite=Chennai
Part 2 · Triage Critical
3
See
Notification + open record
🔔 "DEV-2026-000425 — CRITICAL — preliminary by Reema."
This is the WP-7 build moment. Today (dev-vimal-audit-2) code stores batch_id as column only — no linkage event fires. WP-7 wires the trigger:
· Emit BATCH_HOLD_TRIGGERED { deviation_id, batch_id, reason } · URS-23 subscriber updates batch_records.lifecycle_state to on_hold · Insert row in batch_holds with cause_deviation_id back-reference
· Notify QP roster for the batch's site/product scope
· Block any release attempt on B-9876 platform-wide
Bidirectional link: deviation tab shows "linked batch · ON HOLD"; batch detail shows "held by DEV-2026-000425."
11
Sign
Sign investigation conclusion WP-4
RCA optional here; for this Critical, Vikram opens a parallel URS-17 RCA (not detailed in this flow — see end-to-end DEV→RCA→CAPA deliverable). Conclusion text references RCA. E-sig substrate-verified.
Behind the scenes
validateEsignatureForRecord() binds e-sig to investigation_signature_id. Event: DEVIATION_INVESTIGATION_SIGNED. Triage section now hard-locked (DEC-16-08).
Vikram hands off to QP Karthik for batch disposition.
Phase-1 boundary. The hold flag + basic disposition decision are IN. The full URS-23 batch lifecycle (MBR execution, IPC capture, full QP certification ceremony per Annex 16, batch release to GDP) is OUT. In Phase-1 the QP captures the disposition with e-sig; the downstream release/distribution flow is Phase-2.
🔔 "B-9876 placed on QUALITY HOLD by DEV-2026-000425. Disposition required."
13
Click
Open /batches/B-9876
Batch detail loads. State: QUALITY HOLD · Cause: DEV-2026-000425. Tabs: Overview · Disposition · Linked records.
Behind the scenes · Phase-1 batch view
Phase-1 view shows: batch number, product, site, current state, hold cause + back-link. Does NOT show in Phase-1: MBR step execution history, IPC value capture, genealogy parent/child tree, full release history (Phase-2 features).
14
See
Reviews evidence linked to the hold
Reads the deviation (DEV-2026-000425) + RCA (if linked) + sterility re-test results + media-fill log. Makes the disposition call.
Enum: release · reject · rework. Phase-1 captures the decision + e-sig. What's NOT in Phase-1: Annex 16 batch certification statement, EU import-and-release attestation, downstream GDP shipment authorisation. These are the full QP ceremony pieces — Phase-2.
16
Fill
Fill disposition modal
Batch Disposition — B-9876
Signing as
Karthik · qp_release_authority
Decision *
REJECT
Reason *
"Confirmed sterility breach risk; sterility re-test inconclusive at 7d. Cannot certify per Annex 16."
✅ "B-9876 dispositioned REJECTED. Linked back to DEV-2026-000425."
Behind the scenes · substrate-verified disposition
validateEsignatureForRecord() binds e-sig (WP-4) to batch_disposition_signature_id. State machine: on_hold → rejected. Audit: BATCH_DISPOSITION_SIGNED · BATCH_DISPOSITION_LINKED. Linkage event back to deviation closes the "batch disposition resolved" pre-closure gate item.
Phase-1 scope note: what happens after REJECT (physical destruction workflow, quarantine bay management, finance/inventory write-off, regulatory notification of rejection) is OUT — handled outside the platform or via Phase-2.
Disposition complete. Anita can now close the deviation.
Batch disposition resolved — B-9876 dispositioned REJECTED by Karthik
Reportability clock disposition recorded (submitted offline by RA)
SoD pass — Anita ≠ Reema, ≠ Vikram
Behind the scenes
For Critical with linked batch, gate adds: linked_batches all in (released, rejected, reworked). B-9876 = rejected → ✓. Without WP-7 hardening, this check would have no signal to evaluate.
19
Sign
Anita signs — signature 1 of 4
Substrate-verified closure e-sig as deviation_closure_authority.
Behind the scenes
State stays investigating — Critical requires all 4 signatures before state advances (URS-04 §21 dual-mode contract). Partial-sign + record edit invalidates captured sigs and restarts.
20
Sign
Priya signs — signature 2 of 4 (QA)
S
Suresh — Practice Lead GMP
quality_leadpractice_lead_gmp
Co-sign 3 of 4
21
Sign
Suresh signs — signature 3 of 4
Practice-lead co-sign required for Major/Critical closure (DEC-16-06 matrix).
"Reviewed investigation + RCA + batch disposition; concur with closure."
Password
••••••••••
MFA
847261
Sign & Close ▶
State: INVESTIGATING → CLOSED. Record immutable.
Behind the scenes · WP-7 URS-39-WP7-01
This is the WP-7 build moment. Today (dev-vimal-audit-2) closure uses single final_quality_approver snapshot at deviations/service.ts:683. WP-7 flips URS-04 engine call site from 'single' to 'dual' for Critical; all 4 signatures now bound to closure transaction; each substrate-verified (WP-4); state advances only when 4th signature lands. SoD-16-07 verified (closure authority ≠ executive authority).
✅ "DEV-2026-000425 closed (4 substrate-verified signatures). Record immutable."
END · Full Critical chain complete. Reema gets her single closure notification.