Skip to content

URS-081 · Bill-only automated replenishment

Title: Bill-only automated replenishment Date: 2026-09-29T02:31:00.928Z Duration: 115.6s Overall Status: ✅ PASS

The system shall, when a manufacturer enables automated bill-only replenishment, generate a replenishment order from a submitted trunk bill-only whose items match the trunk stock consumed, route the generated order through order approval when configured, link the replenishment order and its originating bill-only in both directions, honor agency-level overrides that block automated replenishment, and create no order when no line requests replenishment.

Source: User_Requirement_Specifications_Vantis_DeviceFlow.xlsx — the run below proves the system meets this requirement.

Status: ✅ PASS

Each step below corresponds to one Playwright test that ran sequentially. Screenshots and video recordings provide visual evidence of the UI behaviour.

1. Step 1: Manufacturer enables automated replenishment — ✅ PASS

Section titled “1. Step 1: Manufacturer enables automated replenishment — ✅ PASS”

What this step proves:

Alex Admin (Vantis manufacturer) opens Settings → Automation → Bill-Only Orders and switches on “Enable automated replenishment”. Enabling reveals the timing radio (default “On bill-only submission”) and the “Replenishment order requires approval” switch (default on); saving shows the “Automated replenishment settings saved” toast and writes an organization-settings audit event. This establishes the manufacturer setting the whole chain is gated on — the automation is off by default and setup deliberately leaves it off so this step proves the UI enablement path.

Audit events generated by this step:

(Evidence scoped to step execution window: 2026-09-29T02:31:10.848Z → 2026-09-29T02:31:13.121Z)

TimeTypeActionUserOrgPerformed
2026-09-29 02:31:12Zorganization_settingsbill_only_replenishment_settings_changedalex.admin@vantismedical.comVantis—

Screenshots:

step 01 automation off

step 01 automation configured

step 01 automation saved

Video recording:


2. Step 2: Rep submits a trunk bill-only with replenishment requested — ✅ PASS

Section titled “2. Step 2: Rep submits a trunk bill-only with replenishment requested — ✅ PASS”

What this step proves:

Blair Bennett (Corveta distributor rep) submits a bill-only at /billing/new drawing from her trunk: 2 units of URS081-PLATE and 1 unit of URS081-SCREW. With the automation on and no override blocking it, the “Replenish trunk stock” master toggle and every per-unit Replenish checkbox are checked by default, and the review step prints “Replenish: Requested” per lot. Submitting persists replenishment_requested=true on every unit row — the consumption record the trigger later reads.

Audit events generated by this step:

(Evidence scoped to step execution window: 2026-09-29T02:31:37.679Z → 2026-09-29T02:31:43.321Z)

TimeTypeActionUserOrgPerformed
2026-09-29 02:31:40Zdecisionbill_only_order.duplicate_submission_blockblair.bennett@corvetasurgical.comCorveta Surgical Groupno
2026-09-29 02:31:40Zdecisionbill_only.link_purchase_orderblair.bennett@corvetasurgical.comCorveta Surgical Groupno
2026-09-29 02:31:40Zdecisionrepresentatives.gate_rep_actionblair.bennett@corvetasurgical.comVantisno
2026-09-29 02:31:40Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis—
2026-09-29 02:31:40ZdecisionbasicErp.deriveSalesOrderblair.bennett@corvetasurgical.comVantisno
2026-09-29 02:31:40Zdecisionrepresentatives.gate_rep_actionblair.bennett@corvetasurgical.comVantisno
2026-09-29 02:31:40Zdecisionbill_only_order.inventory_items_decrementblair.bennett@corvetasurgical.comVantisyes
2026-09-29 02:31:40Zdecisionbill_only_order.direct_po_import_on_createblair.bennett@corvetasurgical.comVantisno
2026-09-29 02:31:40Zbilling_orderstatus_changeblair.bennett@corvetasurgical.comVantis—
2026-09-29 02:31:40Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis—
2026-09-29 02:31:40Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis—
2026-09-29 02:31:41Zdecisionbill_only.notifications.cc_incident_recipients—Vantisno
2026-09-29 02:31:42Ztransactional_emailnew_bill_only—Corveta Surgical Group—

Screenshots:

step 02 devices replenish checked

step 02 review replenish requested

step 02 submitted

Video recording:


3. Step 3: Submission trigger generates the replenishment order — ✅ PASS

Section titled “3. Step 3: Submission trigger generates the replenishment order — ✅ PASS”

What this step proves:

In production, Restate delivers BillOnlyOrderObject.handleOrderCreatedDelayed one hour after submission (the void/edit grace window) and that handler runs the replenishment trigger. The suite invokes the same handler through the Restate ingress — the identical invocation, delivered early — and then observes the outcome: an order_requests row with order_type=replenishment appears, linked to the bill-only via source_billing_order_id, and the orders list shows it as a Replenishment order awaiting approval (the requires-approval switch suppressed auto-approval).

Audit events generated by this step:

(Evidence matched by declared name — step timing not available or no events fell in window)

TimeTypeActionUserOrgPerformed
2026-09-29 02:31:47Zdecisioncreate_replenishment_order_on_bill_only—Vantisyes
2026-09-29 02:32:26Zdecisioncreate_replenishment_order_on_bill_only—Vantisno

Screenshots:

step 03 order in list

Video recording:


Section titled “4. Step 4: Replenishment order matches the consumed items and links back — ✅ PASS”

What this step proves:

The generated order’s detail page lists exactly the products the bill-only consumed — the plate and the screw — and its Related section renders the “Created from bill-only” link (DF-4805) that navigates to the triggering bill-only. The DB validations pin the quantities exactly: requested 2 and 1, matching the flagged unit rows one-to-one. This is the core of the requirement: the generated order equals what was used.

Screenshots:

step 04 order items and link

step 04 link lands on bill only

Video recording:


Section titled “5. Step 5: Bill-only links to its replenishment order — ✅ PASS”

What this step proves:

The bill-only’s own detail page closes the loop: its Related rail lists “Replenishment order” with the generated order’s number, linking to the order detail. Together with Step 4 this proves the DF-4805 bidirectional link, whose single source of truth is order_requests.source_billing_order_id.

Screenshots:

step 05 related replenishment order

Video recording:


6. Step 6: Bill-only with no lines flagged generates no order — ✅ PASS

Section titled “6. Step 6: Bill-only with no lines flagged generates no order — ✅ PASS”

What this step proves:

Blair submits a second trunk bill-only but clears the “Replenish trunk stock” master toggle, which unchecks every per-unit Replenish box; the review step shows no replenishment request. When the trigger fires for this bill-only it records the decision performed=false with reason no_items_flagged and creates nothing — the negative control proving orders are generated only from explicit per-line requests.

Audit events generated by this step:

(Evidence scoped to step execution window: 2026-09-29T02:32:22.355Z → 2026-09-29T02:32:29.750Z)

TimeTypeActionUserOrgPerformed
2026-09-29 02:32:24Zdecisionbill_only_order.inventory_items_decrementblair.bennett@corvetasurgical.comVantisyes
2026-09-29 02:32:24Zdecisionbill_only_order.direct_po_import_on_createblair.bennett@corvetasurgical.comVantisno
2026-09-29 02:32:24Zbilling_orderstatus_changeblair.bennett@corvetasurgical.comVantis—
2026-09-29 02:32:24ZdecisionbasicErp.deriveSalesOrderblair.bennett@corvetasurgical.comVantisno
2026-09-29 02:32:24Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis—
2026-09-29 02:32:24Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis—
2026-09-29 02:32:24Zdecisionrepresentatives.gate_rep_actionblair.bennett@corvetasurgical.comVantisno
2026-09-29 02:32:24Zdecisionbill_only.link_purchase_orderblair.bennett@corvetasurgical.comCorveta Surgical Groupno
2026-09-29 02:32:24Zdecisionbill_only_order.duplicate_submission_blockblair.bennett@corvetasurgical.comCorveta Surgical Groupno
2026-09-29 02:32:24Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis—
2026-09-29 02:32:24Zdecisionrepresentatives.gate_rep_actionblair.bennett@corvetasurgical.comVantisno
2026-09-29 02:32:24Zdecisionbill_only.notifications.cc_incident_recipients—Vantisno
2026-09-29 02:32:25Ztransactional_emailnew_bill_only—Corveta Surgical Group—
2026-09-29 02:32:26Zdecisioncreate_replenishment_order_on_bill_only—Vantisno
2026-09-29 02:32:26Zdecisiongenerate_dof—Corveta Surgical Groupyes
2026-09-29 02:32:26Zdecisionsend_dof_notification—Corveta Surgical Groupyes
2026-09-29 02:32:26Zdecisionsend_bill_only_submitted_notification—Corveta Surgical Groupyes
2026-09-29 02:32:26Zdecisioncall_org_logic—Corveta Surgical Groupno

Screenshots:

step 06 replenish unchecked

step 06 review no replenish

step 06 submitted

Video recording:


7. Step 7: Agency override blocks replenishment for the rep — ✅ PASS

Section titled “7. Step 7: Agency override blocks replenishment for the rep — ✅ PASS”

What this step proves:

Dan Distributor (Corveta admin) switches off “Allow automated replenishment for this agency” on the organization settings page — a hard block for every rep in the agency. Blair’s wizard then renders the replenishment toggle disabled with “Automated replenishment is turned off for your agency.”, and she cannot re-enable it. Dan then restores the override to the inherit state. Both changes are audited on Corveta.

Audit events generated by this step:

(Evidence scoped to step execution window: 2026-09-29T02:32:35.521Z → 2026-09-29T02:32:54.936Z)

TimeTypeActionUserOrgPerformed
2026-09-29 02:32:37Zuser_loguser:loginblair.bennett@corvetasurgical.comCorveta Surgical Group—
2026-09-29 02:32:48Zdecisionbill_only_order.duplicate_submission_blockblair.bennett@corvetasurgical.comCorveta Surgical Groupno
2026-09-29 02:32:54Zorganization_settingsbill_only_replenishment_agency_override_changeddan.distributor@corvetasurgical.comCorveta Surgical Group—

Screenshots:

step 07 agency override off

step 07 rep toggle blocked

step 07 agency override restored

Video recording:


The following SQL queries ran against the application database after the Playwright scenarios completed. Each query asserts a specific condition that proves the feature under test persisted its data correctly.

Automation settings change audited — ✅ PASS

Section titled “Automation settings change audited — ✅ PASS”

Assertion: Saving the automation should write an audit_events row (event_type=organization_settings, action=bill_only_replenishment_settings_changed) by Alex whose payload records automatedReplenishmentEnabled=true.

SELECT id, action, user_id, payload, created_at
FROM audit_events
WHERE organization_id = $1
AND created_at >= $2
AND event_type = 'organization_settings'
AND action = 'bill_only_replenishment_settings_changed'
AND user_id = $3
ORDER BY created_at ASC
idactionuser_idpayloadcreated_at
01a0eb00-7c64-7e5d-8bae-9d08556d657abill_only_replenishment_settings_changedf6a7b8c9-d0e1-2345-f123-456789012345{“previous”:{},“automatedReplenishmentTiming”:“on_submission”,“automatedReplenishmentEnabled”:true,“automatedReplenishmentRequiresApproval”:true}2026-09-29T02:31:12.535Z

Automation settings persisted on the manufacturer — ✅ PASS

Section titled “Automation settings persisted on the manufacturer — ✅ PASS”

Assertion: organizations.settings.billOnly on Vantis should persist automatedReplenishmentEnabled=true with on_submission timing and requires-approval on (the Step 1 configuration).

SELECT settings->'billOnly' AS bill_only FROM organizations WHERE id = $1
bill_only
{“automatedReplenishmentTiming”:“on_submission”,“automatedReplenishmentEnabled”:true,“automatedReplenishmentRequiresApproval”:true}

Bill-only lines persisted the replenishment flags — ✅ PASS

Section titled “Bill-only lines persisted the replenishment flags — ✅ PASS”

Assertion: Two URS-081 bill-onlys should exist: one with 3 unit rows all carrying replenishment_requested=true (Step 2), and one with a single unflagged row (Step 6).

SELECT bo.id, bo.patient_id, bo.status,
COUNT(*) FILTER (WHERE boi.parent_billing_order_item_id IS NULL)::int AS top_level_rows,
COUNT(*) FILTER (WHERE boi.replenishment_requested)::int AS flagged_rows
FROM billing_orders bo
JOIN billing_order_items boi ON boi.billing_order_id = bo.id
WHERE bo.sales_organization_id = $1
AND bo.manufacturer_organization_id = $2
AND bo.patient_id LIKE $3 || '%'
AND bo.created_at >= $4
GROUP BY bo.id, bo.patient_id, bo.status
ORDER BY MIN(bo.created_at)
idpatient_idstatustop_level_rowsflagged_rows
01a0eb00-e861-7caf-a765-619e454f76f2URS081-MRN-1790649062965-1submitted33
01a0eb01-943e-77b3-9c81-3eaa93356e3dURS081-MRN-1790649062965-2submitted10

Replenishment order generated with the expected shape — ✅ PASS

Section titled “Replenishment order generated with the expected shape — ✅ PASS”

Assertion: Exactly one order_requests row should point at bill-only #1: order_type=replenishment, Corveta requesting from Vantis, requested by and receiving to Blair, at Blair’s trunk, no submission grace window, status=submitted (awaiting approval), notes naming the bill-only.

SELECT id, request_number, status, order_type,
requesting_organization_id, fulfilling_organization_id, requested_by_user_id,
receiving_rep_user_id, location_id, source_billing_order_id,
submission_grace_until, notes, created_at
FROM order_requests
WHERE source_billing_order_id = $1
idrequest_numberstatusorder_typerequesting_organization_idfulfilling_organization_idrequested_by_user_idreceiving_rep_user_idlocation_idsource_billing_order_idsubmission_grace_untilnotescreated_at
01a0eb01-033f-7247-93f9-84f6371a6f26OR-2submittedreplenishmentb2c3d4e5-f6a7-8901-bcde-f12345678901a1b2c3d4-e5f6-7890-abcd-ef123456789017b8c9d0-e1f2-3456-1234-56789012345617b8c9d0-e1f2-3456-1234-567890123456a6e7f8a9-b0c1-2345-0123-45678901234501a0eb00-e861-7caf-a765-619e454f76f2NULLReplenishment order for bill-only BO-12026-09-29T02:31:47.232Z

Order items match the consumed units and await approval — ✅ PASS

Section titled “Order items match the consumed units and await approval — ✅ PASS”

Assertion: The order should have exactly two items matching the bill-only’s consumption — URS081-PLATE × 2 and URS081-SCREW × 1 — each with pending_quantity equal to requested_quantity and approved_quantity 0 (requires-approval suppressed auto-approval).

SELECT oi.id, oi.product_id, p.sku, oi.requested_quantity,
oi.pending_quantity, oi.approved_quantity
FROM order_request_items oi
JOIN org_products p ON p.id = oi.product_id
WHERE oi.order_request_id = $1
ORDER BY p.sku
idproduct_idskurequested_quantitypending_quantityapproved_quantity
01a0eb01-034b-7641-92e7-281d6aafeaa608100000-0000-4000-8000-000000000011URS081-PLATE220
01a0eb01-034b-7641-92e7-281e73e1439708100000-0000-4000-8000-000000000012URS081-SCREW110

Replenishment creation decision recorded — ✅ PASS

Section titled “Replenishment creation decision recorded — ✅ PASS”

Assertion: The trigger should log a decision (action=create_replenishment_order_on_bill_only) against bill-only #1 with performed=true, reason=replenishment_order_created, and the created order as secondary_object_id, scoped to the manufacturer organization.

SELECT id, action, object_id, secondary_object_id,
payload->>'performed' AS performed, payload->>'reason' AS reason, created_at
FROM audit_events
WHERE organization_id = $1
AND created_at >= $2
AND event_type = 'decision'
AND action = $3
AND object_id = $4
ORDER BY created_at ASC
idactionobject_idsecondary_object_idperformedreasoncreated_at
01a0eb01-0387-7f5b-9fa8-861045b1a5e1create_replenishment_order_on_bill_only01a0eb00-e861-7caf-a765-619e454f76f201a0eb01-033f-7247-93f9-84f6371a6f26truereplenishment_order_created2026-09-29T02:31:47.232Z

Auto-approval suppressed on the generated order — ✅ PASS

Section titled “Auto-approval suppressed on the generated order — ✅ PASS”

Assertion: With the requires-approval switch on, order creation should log auto_approve_order with performed=false (auto-approval suppressed) for the generated order.

SELECT id, action, payload->>'performed' AS performed,
payload->>'reason' AS reason, created_at
FROM audit_events
WHERE organization_id = $3
AND created_at >= $1
AND event_type = 'decision'
AND action = 'auto_approve_order'
AND object_id = $2
ORDER BY created_at ASC
idactionperformedreasoncreated_at
01a0eb01-034e-76cf-a104-ff457904b3a6auto_approve_orderfalseAuto-approval suppressed by caller2026-09-29T02:31:47.232Z

Unflagged bill-only skipped with no order created — ✅ PASS

Section titled “Unflagged bill-only skipped with no order created — ✅ PASS”

Assertion: The trigger should log performed=false with reason=no_items_flagged against bill-only #2, and no order_requests row may point at it.

SELECT id, payload->>'performed' AS performed, payload->>'reason' AS reason,
(SELECT COUNT(*)::int FROM order_requests r WHERE r.source_billing_order_id = $4) AS spawned_orders
FROM audit_events
WHERE organization_id = $1
AND created_at >= $2
AND event_type = 'decision'
AND action = $3
AND object_id = $4
ORDER BY created_at ASC
idperformedreasonspawned_orders
01a0eb01-9d3e-7de9-94dd-4556dad90fc7falseno_items_flagged0

Agency override changes audited — ✅ PASS

Section titled “Agency override changes audited — ✅ PASS”

Assertion: Dan turning the agency override off and back on should write two bill_only_replenishment_agency_override_changed audit rows on Corveta: first storing false (hard block), then null (inherit).

SELECT id, payload, created_at
FROM audit_events
WHERE organization_id = $1
AND created_at >= $2
AND event_type = 'organization_settings'
AND action = 'bill_only_replenishment_agency_override_changed'
AND user_id = $3
ORDER BY created_at ASC
idpayloadcreated_at
01a0eb01-bf62-7e34-aa73-842732a6bdae{“previous”:null,“agencyReplenishmentEnabled”:false}2026-09-29T02:32:35.377Z
01a0eb02-0b0a-7081-a686-2d6dc0cbb444{“previous”:false,“agencyReplenishmentEnabled”:null}2026-09-29T02:32:54.791Z

Multi-tenant isolation: no URS-081 rows outside the participating orgs — ✅ PASS

Section titled “Multi-tenant isolation: no URS-081 rows outside the participating orgs — ✅ PASS”

Assertion: No organization other than Vantis owns a URS081 product, no org outside the Vantis/Corveta pair appears on the generated order, and the replenishment decisions are scoped to the manufacturer only.

SELECT
(SELECT COUNT(*)::int FROM org_products
WHERE sku LIKE 'URS081-%' AND organization_id <> $1) AS foreign_products,
(SELECT COUNT(*)::int FROM order_requests
WHERE source_billing_order_id = $3
AND (requesting_organization_id NOT IN ($1, $2)
OR fulfilling_organization_id NOT IN ($1, $2))) AS foreign_orders,
(SELECT COUNT(*)::int FROM audit_events
WHERE event_type = 'decision' AND action = $4 AND object_id = $3
AND organization_id <> $1) AS foreign_decisions
foreign_productsforeign_ordersforeign_decisions
000

Per-declaration outcome of every expectedAuditActions and expectedEmailTemplates entry written into the orchestrator. Missing evidence here is a real test failure, not a soft warning.

Each row asserts that a declared expectedAuditActions entry produced a matching row in audit_events. A ❌ flips overall status to FAIL — the declaration is real proof, not just an annotation.

StepExpected Audit ActionFound
Step 1: Manufacturer enables automated replenishmentorganization_settings:bill_only_replenishment_settings_changed✅
Step 3: Submission trigger generates the replenishment orderdecision:create_replenishment_order_on_bill_only✅
Step 6: Bill-only with no lines flagged generates no orderdecision:create_replenishment_order_on_bill_only✅
Step 7: Agency override blocks replenishment for the reporganization_settings:bill_only_replenishment_agency_override_changed✅

Every row written to audit_events while this test was running (scoped to the demo organizations). Provides compliance evidence that user actions are traced end-to-end (URS-003).

Capture window start: 2026-09-29T02:30:59.122Z

SELECT
ae.created_at,
ae.event_type,
ae.action,
ae.user_id,
u.email AS user_email,
ae.organization_id,
o.name AS organization_name,
ae.object_id,
ae.secondary_object_id,
ae.payload,
ae.route,
ae.trace_id
FROM audit_events ae
LEFT JOIN users u ON u.id = ae.user_id
LEFT JOIN organizations o ON o.id = ae.organization_id
WHERE ae.created_at >= $1
AND ae.organization_id = ANY($2::uuid[])
ORDER BY ae.created_at ASC

53 event(s) captured:

TimeTypeActionUserOrgObject IDPerformedReason
2026-09-29 02:31:06Zuser_loguser:loginalex.admin@vantismedical.comVantis——
2026-09-29 02:31:12Zorganization_settingsbill_only_replenishment_settings_changedalex.admin@vantismedical.comVantisa1b2c3d4-e5f6-7890-abcd-ef1234567890—
2026-09-29 02:31:16Zuser_loguser:loginblair.bennett@corvetasurgical.comCorveta Surgical Group——
2026-09-29 02:31:29Zdecisionbill_only_order.duplicate_submission_blockblair.bennett@corvetasurgical.comCorveta Surgical Groupfea7b8c9-d0e1-2345-0123-456789012345nono_same_day_candidates
2026-09-29 02:31:40Zdecisionbill_only_order.duplicate_submission_blockblair.bennett@corvetasurgical.comCorveta Surgical Groupfea7b8c9-d0e1-2345-0123-456789012345nono_same_day_candidates
2026-09-29 02:31:40Zdecisionbill_only.link_purchase_orderblair.bennett@corvetasurgical.comCorveta Surgical Group01a0eb00-e861-7caf-a765-619e454f76f2nono_purchase_order_selected
2026-09-29 02:31:40Zdecisionrepresentatives.gate_rep_actionblair.bennett@corvetasurgical.comVantisa1b2c3d4-e5f6-7890-abcd-ef1234567890nono_blocking_relationship
2026-09-29 02:31:40Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis01a0eb00-e8ac-74c9-ba94-bcdbee76d57b—
2026-09-29 02:31:40ZdecisionbasicErp.deriveSalesOrderblair.bennett@corvetasurgical.comVantis01a0eb00-e861-7caf-a765-619e454f76f2noflag_disabled
2026-09-29 02:31:40Zdecisionrepresentatives.gate_rep_actionblair.bennett@corvetasurgical.comVantisa1b2c3d4-e5f6-7890-abcd-ef1234567890nono_blocking_relationship
2026-09-29 02:31:40Zdecisionbill_only_order.inventory_items_decrementblair.bennett@corvetasurgical.comVantis01a0eb00-e861-7caf-a765-619e454f76f2yesinventory_items_decremented
2026-09-29 02:31:40Zdecisionbill_only_order.direct_po_import_on_createblair.bennett@corvetasurgical.comVantis01a0eb00-e861-7caf-a765-619e454f76f2noNo uploaded PO documents
2026-09-29 02:31:40Zbilling_orderstatus_changeblair.bennett@corvetasurgical.comVantis01a0eb00-e861-7caf-a765-619e454f76f2—
2026-09-29 02:31:40Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis01a0eb00-e8a7-7087-beed-33b5b8cf8593—
2026-09-29 02:31:40Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis01a0eb00-e8a0-7911-9408-ecef98d8e8e2—
2026-09-29 02:31:41Zdecisionbill_only.notifications.cc_incident_recipients—Vantis01a0eb00-e861-7caf-a765-619e454f76f2noorder has no no-charge item with an incident reason
2026-09-29 02:31:42Ztransactional_emailnew_bill_only—Corveta Surgical Group01a0eb00-e861-7caf-a765-619e454f76f2—
2026-09-29 02:31:45Zuser_loguser:loginblair.bennett@corvetasurgical.comCorveta Surgical Group——
2026-09-29 02:31:47Zdecisionorder_request_createdblair.bennett@corvetasurgical.comVantis01a0eb01-033f-7247-93f9-84f6371a6f26yesOrder request OR-2 created (importSource=manual)
2026-09-29 02:31:47Zdecisioncreate_replenishment_order_on_bill_only—Vantis01a0eb00-e861-7caf-a765-619e454f76f2yesreplenishment_order_created
2026-09-29 02:31:47Zchecklistchecklists.create—Vantis01a0eb01-0359-73d1-9adc-4bc46483084e—
2026-09-29 02:31:47Zdecisionauto_approve_order—Vantis01a0eb01-033f-7247-93f9-84f6371a6f26noAuto-approval suppressed by caller
2026-09-29 02:31:47Zdecisiongenerate_dof—Corveta Surgical Group01a0eb00-e861-7caf-a765-619e454f76f2yesGenerated successfully
2026-09-29 02:31:47Zdecisionsend_dof_notification—Corveta Surgical Group01a0eb00-e861-7caf-a765-619e454f76f2yesInvoice generated, no blocking issues
2026-09-29 02:31:48Zdecisionsend_bill_only_submitted_notification—Corveta Surgical Group01a0eb00-e861-7caf-a765-619e454f76f2yesNotification sent
2026-09-29 02:31:48Zdecisioncall_org_logic—Corveta Surgical Group01a0eb00-e861-7caf-a765-619e454f76f2noOrg logic called but not executed
2026-09-29 02:31:53Zuser_loguser:loginblair.bennett@corvetasurgical.comCorveta Surgical Group——
2026-09-29 02:31:59Zuser_loguser:loginblair.bennett@corvetasurgical.comCorveta Surgical Group——
2026-09-29 02:32:04Zuser_loguser:loginblair.bennett@corvetasurgical.comCorveta Surgical Group——
2026-09-29 02:32:16Zdecisionbill_only_order.duplicate_submission_blockblair.bennett@corvetasurgical.comCorveta Surgical Groupfea7b8c9-d0e1-2345-0123-456789012345noacknowledged_not_duplicate
2026-09-29 02:32:24Zdecisionbill_only_order.inventory_items_decrementblair.bennett@corvetasurgical.comVantis01a0eb01-943e-77b3-9c81-3eaa93356e3dyesinventory_items_decremented
2026-09-29 02:32:24Zdecisionbill_only_order.direct_po_import_on_createblair.bennett@corvetasurgical.comVantis01a0eb01-943e-77b3-9c81-3eaa93356e3dnoNo uploaded PO documents
2026-09-29 02:32:24Zbilling_orderstatus_changeblair.bennett@corvetasurgical.comVantis01a0eb01-943e-77b3-9c81-3eaa93356e3d—
2026-09-29 02:32:24ZdecisionbasicErp.deriveSalesOrderblair.bennett@corvetasurgical.comVantis01a0eb01-943e-77b3-9c81-3eaa93356e3dnoflag_disabled
2026-09-29 02:32:24Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis01a0eb01-9455-7fb3-994a-7cd133373cbf—
2026-09-29 02:32:24Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis01a0eb01-945c-7546-9481-87d0b3bd6bc8—
2026-09-29 02:32:24Zdecisionrepresentatives.gate_rep_actionblair.bennett@corvetasurgical.comVantisa1b2c3d4-e5f6-7890-abcd-ef1234567890nono_blocking_relationship
2026-09-29 02:32:24Zdecisionbill_only.link_purchase_orderblair.bennett@corvetasurgical.comCorveta Surgical Group01a0eb01-943e-77b3-9c81-3eaa93356e3dnono_purchase_order_selected
2026-09-29 02:32:24Zdecisionbill_only_order.duplicate_submission_blockblair.bennett@corvetasurgical.comCorveta Surgical Groupfea7b8c9-d0e1-2345-0123-456789012345noacknowledged_not_duplicate
2026-09-29 02:32:24Zscheduled_taskscheduled_task.scheduledblair.bennett@corvetasurgical.comVantis01a0eb01-9459-74cd-9dc4-abcab1132c47—
2026-09-29 02:32:24Zdecisionrepresentatives.gate_rep_actionblair.bennett@corvetasurgical.comVantisa1b2c3d4-e5f6-7890-abcd-ef1234567890nono_blocking_relationship
2026-09-29 02:32:24Zdecisionbill_only.notifications.cc_incident_recipients—Vantis01a0eb01-943e-77b3-9c81-3eaa93356e3dnoorder has no no-charge item with an incident reason
2026-09-29 02:32:25Ztransactional_emailnew_bill_only—Corveta Surgical Group01a0eb01-943e-77b3-9c81-3eaa93356e3d—
2026-09-29 02:32:26Zdecisioncreate_replenishment_order_on_bill_only—Vantis01a0eb01-943e-77b3-9c81-3eaa93356e3dnono_items_flagged
2026-09-29 02:32:26Zdecisiongenerate_dof—Corveta Surgical Group01a0eb01-943e-77b3-9c81-3eaa93356e3dyesGenerated successfully
2026-09-29 02:32:26Zdecisionsend_dof_notification—Corveta Surgical Group01a0eb01-943e-77b3-9c81-3eaa93356e3dyesInvoice generated, no blocking issues
2026-09-29 02:32:26Zdecisionsend_bill_only_submitted_notification—Corveta Surgical Group01a0eb01-943e-77b3-9c81-3eaa93356e3dyesNotification sent
2026-09-29 02:32:26Zdecisioncall_org_logic—Corveta Surgical Group01a0eb01-943e-77b3-9c81-3eaa93356e3dnoOrg logic called but not executed
2026-09-29 02:32:31Zuser_loguser:logindan.distributor@corvetasurgical.comCorveta Surgical Group——
2026-09-29 02:32:35Zorganization_settingsbill_only_replenishment_agency_override_changeddan.distributor@corvetasurgical.comCorveta Surgical Groupb2c3d4e5-f6a7-8901-bcde-f12345678901—
2026-09-29 02:32:37Zuser_loguser:loginblair.bennett@corvetasurgical.comCorveta Surgical Group——
2026-09-29 02:32:48Zdecisionbill_only_order.duplicate_submission_blockblair.bennett@corvetasurgical.comCorveta Surgical Groupfea7b8c9-d0e1-2345-0123-456789012345noall_candidates_vetoed
2026-09-29 02:32:54Zorganization_settingsbill_only_replenishment_agency_override_changeddan.distributor@corvetasurgical.comCorveta Surgical Groupb2c3d4e5-f6a7-8901-bcde-f12345678901—

2 notification email(s) were captured during this test run. Each email is rendered as a screenshot for compliance review.

1. New Bill-Only Order - 9/29/2026 - Vantis BO-1

Section titled “1. New Bill-Only Order - 9/29/2026 - Vantis BO-1”

Template: New_Bill-Only_Order_-_9_29_2026_-_Vantis_BO-1

New Bill-Only Order - 9/29/2026 - Vantis BO-1

2. New Bill-Only Order - 9/29/2026 - Vantis BO-3

Section titled “2. New Bill-Only Order - 9/29/2026 - Vantis BO-3”

Template: New_Bill-Only_Order_-_9_29_2026_-_Vantis_BO-3

New Bill-Only Order - 9/29/2026 - Vantis BO-3

The following screencast recordings were captured but could not be matched to a specific test step. Step-matched recordings appear inline in their respective step sections above.