Batch Disposition Arm — PHASE-3 (NOT Phase-1)

Future Phase-3 capability illustration · URS-23 batch disposition · reclassified 2026-06-01
⛔ 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
See
Click
Fill
Decide
Sign
Auto
Done
DEV
Workflow 1 · Critical Deviation (URS-16)
Parts 1–3 · Reema, Priya, Vikram · steps 1–13
R
Reema — QC Analyst (Discoverer)
quality_leaddeviation_discoverersite=Chennai · product=injectable-line
Part 1 · Create
1
Fill
Raise Critical deviation
Practice *
GMP
Classification *
Sterile filtration deviation
Severity * (preliminary)
Critical — potential sterility breach
Title *
"Non-sterilised pre-filter on sterile filtration — batch B-9876"
Symptom *
"Pre-filter used 09:15–09:35; had not completed autoclave cycle. Caught at 09:35 during in-process check."
Immediate action *
"Filtration halted; batch B-9876 manually moved to QC HOLD bay; QP notified verbally."
Scope anchors *
site=Chennai · product=injectable-line · batch=B-9876 · equipment=Filtration-Skid-2
Priority *
Critical
Behind the scenes · batch as scope anchor
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."
4
Decide
Confirms Critical · starts reportability clock
Authoritative severity = Critical (matches preliminary). Impact areas: product_quality (high), patient_safety (high), sterility_assurance (critical), regulatory_commitment (high).
Behind the scenes · auto-triggers on Critical
severity = 'critical' auto-triggers:
· Reportability assessment + due-date (DEC-16-26)
· Notification widens to QA Head + RA + Site Head
· Closure matrix locks to 4-signature (closure + QA + practice-lead + executive)
· URS-30 escalation cadence tightens
5
Fill
Assign investigator
Investigator
Vikram (qualified for sterile manufacturing; ≠ Reema, SoD-16-01)
Due date
+5 days (Critical tighter than Major)
6
Confirm Triage
Triage confirmed
"Reportability clock: due 6-Jun 09:35. Vikram notified."
Priya monitors progress; will sign closure later.
Hand-off Direct named-recipient notification to Vikram
V
Vikram — Investigator
quality_leaddeviation_investigatorsite=Chennai · product=injectable-line
Part 3 · Investigate + Declare impact
7
Fill
Evidence + timeline
Evidence
Autoclave cycle log · pre-filter swap log · operator interview notes · CCTV
Timeline
08:30 autoclave cycle started · 09:00 cycle interrupted (mis-flagged complete) · 09:15 pre-filter released to floor · 09:35 in-process check caught it
Witnesses
Shift supervisor Manoj, autoclave operator Lakshmi
8
Click
Open Batch Impact tab
Vikram declares this batch is impacted — this is the trigger point.
9
Fill
Declare batch impact
Batch (from picker)
B-9876 (URS-23 lookup)
Impact narrative *
"Potential sterility breach during 20-min exposure window. Cannot release without sterility re-test + 14-day media-fill result."
Recommended action
QUARANTINE pending disposition
10
Click
Click Confirm batch impact — system fires hold trigger WP-7
"BATCH_HOLD_TRIGGERED · B-9876 placed on QUALITY HOLD. QP Karthik notified."
Behind the scenes · WP-7 hardening (DEC-16-27)
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.
BAT
Workflow 2 · Batch Disposition (URS-23 · partial Phase-1)
Part 4 · steps 12–17 · QP Karthik · Phase-1 scope subset
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.
K
Karthik — Qualified Person (QP)
quality_leadqp_release_authoritysite=Chennai (batch disposition)
Part 4 · Batch disposition
12
See
Notification: batch on hold needs disposition
🔔 "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.
15
Decide
Disposition decision
Three options: RELEASE · REJECT · REWORK. Karthik picks REJECT — sterility breach risk too high; cannot release marketed sterile product.
Behind the scenes · Phase-1 disposition states
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
17
Sign
Sign disposition WP-4
Sign Disposition ▶
State: QUALITY HOLDREJECTED
"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.
Cross-record handoff Batch disposition resolved · deviation closure gate satisfied · Anita notified
DEV
Back to Workflow 1 · Deviation closure (Critical · 4-sig)
Part 5 · steps 18–23
A
Anita — Closure Authority (leads the closure chain)
quality_leaddeviation_closure_authoritysite=Chennai
Part 5 · Close Critical
18
See
Pre-closure checklist (Critical)
Critical pre-closure checklist (server-computed)
Root cause documented (from linked RCA)
Investigation conclusion signed by Vikram
CAPA linked (Critical → mandatory)
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).
D
Anand — Director Quality (Executive)
adminfinal_quality_approverdeviation_critical_executive_authority (Tier-1)
Co-sign 4 of 4 · WP-7
22
See
Notification: executive co-sign required
🔔 "DEV-2026-000425 (Critical) awaiting your executive co-sign."
23
Sign
Anand signs — signature 4 of 4 WP-7
Sign & Close ▶
State: INVESTIGATINGCLOSED. 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.