Skip to content

URS-072 · User transfers inventory to another user through the field-transfer lifecycle

Title: User transfers inventory to another user through the field-transfer lifecycle Date: 2026-09-29T02:30:54.561Z Duration: 53.6s Overall Status: ✅ PASS

The system shall let a user transfer inventory to another user through a controlled field-transfer lifecycle — recipient approval, manual shipment with carrier and tracking, and receipt confirmation — recording each status transition, relocating the inventory to the destination and flipping it to available only upon receipt, and recording an audit decision at each lifecycle step.

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: Initiate the field transfer — ✅ PASS

Section titled “1. Step 1: Initiate the field transfer — ✅ PASS”

What this step proves:

A Corveta sales rep (Blair Bennett) opens /transfers and initiates a new field transfer to a second rep (Rana Reyes). The wizard collects the destination, the item to move from the seeded source trunk lot, and the shipping mode (“Ship to recipient”). Submitting creates the transfer at status pending_receiver_approval, allocates an FT-{n} number, immediately reserves the inventory in transit at the target, and records the opening status change. The initiate path logs a field_transfer.initiate decision. This verifies a rep can start a controlled transfer to another user.

Audit events generated by this step:

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

TimeTypeActionUserOrgPerformed
2026-09-29 02:31:20Zdecisionrepresentatives.gate_rep_actionblair.bennett@corvetasurgical.comVantisno
2026-09-29 02:31:20Zchecklistchecklists.createblair.bennett@corvetasurgical.comCorveta Surgical Group—
2026-09-29 02:31:20Zdecisionfield_transfer.initiateblair.bennett@corvetasurgical.comCorveta Surgical Groupyes
2026-09-29 02:31:20Zdecisionsend_field_transfer_initiated_notification—Vantisyes

Screenshots:

step 01 wizard start

step 01 products selected

step 01 review

step 01 initiated

Video recording:


2. Step 2: Recipient approves the transfer for shipment — ✅ PASS

Section titled “2. Step 2: Recipient approves the transfer for shipment — ✅ PASS”

What this step proves:

The recipient (Rana Reyes) logs in, opens the transfer, and approves it. Because the transfer ships with an external label, approval confirms the ship-to address and advances the transfer from pending_receiver_approval to pending_shipment (the inventory stays reserved in transit). The approval logs a transfer.approve_receiver decision and a transfer_approve_receiver audit event. This verifies the recipient controls whether the transfer proceeds.

Audit events generated by this step:

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

TimeTypeActionUserOrgPerformed
2026-09-29 02:31:28Ztransfertransfer_approve_receiverrana.reyes@corvetasurgical.comCorveta Surgical Group—
2026-09-29 02:31:28Zdecisionfield_transfer.approve_for_shipmentrana.reyes@corvetasurgical.comCorveta Surgical Groupyes
2026-09-29 02:31:28Zdecisiontransfer.approve_receiverrana.reyes@corvetasurgical.comCorveta Surgical Groupyes
2026-09-29 02:31:28Zdecisiontickets.checklist_item_resolve.auto_resolve_ticket—Corveta Surgical Groupno

Screenshots:

step 02 detail pending

step 02 approved

Video recording:


3. Step 3: Sender records the manual shipment — ✅ PASS

Section titled “3. Step 3: Sender records the manual shipment — ✅ PASS”

What this step proves:

The sender (Blair Bennett) records the manual carrier shipment — carrier and tracking number — which advances the transfer from pending_shipment to in_transit and stamps shipped_at / shipped_by. No inventory moves here (it is already reserved at the target). The shipment logs a transfer.mark_shipped decision and a transfer_mark_shipped audit event. This verifies shipment details are captured against the transfer.

Audit events generated by this step:

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

TimeTypeActionUserOrgPerformed
2026-09-29 02:31:37Ztransfertransfer_mark_shippedblair.bennett@corvetasurgical.comCorveta Surgical Group—
2026-09-29 02:31:37Zdecisiontransfer.mark_shippedblair.bennett@corvetasurgical.comCorveta Surgical Groupyes

Screenshots:

step 03 shipment form

step 03 shipped

Video recording:


4. Step 4: Recipient records receipt and completes the transfer — ✅ PASS

Section titled “4. Step 4: Recipient records receipt and completes the transfer — ✅ PASS”

What this step proves:

The recipient (Rana Reyes) records receipt, which writes the inbound-verification checkpoint and then completes the transfer: status becomes completed, received_at / received_by are stamped, and the moved inventory flips from in_transit to ready at the recipient’s trunk. Receipt logs a transfer.record_receipt decision and a transfer_record_receipt audit event. This is the primary URS-072 evidence that the transfer completes and the inventory lands at the destination.

Audit events generated by this step:

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

TimeTypeActionUserOrgPerformed
2026-09-29 02:31:44Zdecisiontransfer.record_receiptrana.reyes@corvetasurgical.comCorveta Surgical Groupyes
2026-09-29 02:31:44Ztransfertransfer_record_receiptrana.reyes@corvetasurgical.comCorveta Surgical Group—
2026-09-29 02:31:44Zdecisionloan.advanceOnFieldTransferReceiptrana.reyes@corvetasurgical.comCorveta Surgical Groupno
2026-09-29 02:31:44Zdecisionfield_transfer.receiverana.reyes@corvetasurgical.comCorveta Surgical Groupyes
2026-09-29 02:31:44Zdecisionfield_transfer.receive_toterana.reyes@corvetasurgical.comCorveta Surgical Groupno
2026-09-29 02:31:44Zdecisionsend_field_transfer_received_notification—Vantisyes

Screenshots:

step 04 receipt form

step 04 completed

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.

Completed field transfer created for Blair → Rana with shipment details — ✅ PASS

Section titled “Completed field transfer created for Blair → Rana with shipment details — ✅ PASS”

Assertion: A URS-072 field transfer should exist with status=completed, owning org=Vantis, recipient=Rana, shipping_mode=external_label, carrier=FedEx, tracking=URS072-TRACK-001, and shipped_at/received_at stamped (marker: “URS-072 validation run”).

SELECT id, transfer_number, status, owning_organization_id,
requesting_organization_id, initiated_by_user_id, sender_user_id, recipient_user_id,
shipping_mode, carrier, tracking_number, shipped_at, shipped_by_user_id,
received_at, received_by_user_id, notes, created_at
FROM field_transfers
WHERE initiated_by_user_id = $1
AND requesting_organization_id = $2
AND notes LIKE '%URS-072%'
AND created_at > NOW() - INTERVAL '2 hours'
ORDER BY created_at DESC
idtransfer_numberstatusowning_organization_idrequesting_organization_idinitiated_by_user_idsender_user_idrecipient_user_idshipping_modecarriertracking_numbershipped_atshipped_by_user_idreceived_atreceived_by_user_idnotescreated_at
01a0eb00-9994-7eb5-a794-cd781f94ddf5FT-1completeda1b2c3d4-e5f6-7890-abcd-ef1234567890b2c3d4e5-f6a7-8901-bcde-f1234567890117b8c9d0-e1f2-3456-1234-56789012345617b8c9d0-e1f2-3456-1234-56789012345628c9d0e1-f2a3-4567-2345-678901234567external_labelFedExURS072-TRACK-0012026-09-29T02:31:37.256Z17b8c9d0-e1f2-3456-1234-5678901234562026-09-29T02:31:44.840Z28c9d0e1-f2a3-4567-2345-678901234567URS-072 validation run — submitted at 2026-09-29T02:31:15.463Z2026-09-29T02:31:20.181Z

Status-change chain records the full shipped lifecycle — ✅ PASS

Section titled “Status-change chain records the full shipped lifecycle — ✅ PASS”

Assertion: The field_transfer_status_changes log should record the transitions to pending_receiver_approval, pending_shipment, in_transit, and completed.

SELECT from_status, to_status, created_at
FROM field_transfer_status_changes
WHERE field_transfer_id = $1
ORDER BY created_at ASC
from_statusto_statuscreated_at
NULLpending_receiver_approval2026-09-29T02:31:20.181Z
pending_receiver_approvalpending_shipment2026-09-29T02:31:28.569Z
pending_shipmentin_transit2026-09-29T02:31:37.247Z
in_transitpending_inbound_verification2026-09-29T02:31:44.830Z
pending_inbound_verificationcompleted2026-09-29T02:31:44.830Z

Assertion: The transfer’s item_movement_items should show quantity_received = quantity_expected (> 0), proving the moved units were received.

SELECT mi.quantity_expected, mi.quantity_received
FROM item_movement_items mi
JOIN item_movements m ON m.id = mi.movement_id
WHERE m.field_transfer_id = $1
quantity_expectedquantity_received
11

Moved inventory is available at the recipient’s trunk — ✅ PASS

Section titled “Moved inventory is available at the recipient’s trunk — ✅ PASS”

Assertion: After receipt, an inventory_items row for lot URS072-SHV-001 should exist at Rana’s trunk with quantity_ready > 0 and quantity_in_transit = 0 (the moved units landed and are ready).

SELECT id, real_world_location_id, lot, quantity_ready, quantity_in_transit
FROM inventory_items
WHERE real_world_location_id = $1
AND lot = $2
AND manufacturer_organization_id = $3
AND quantity_ready > 0
AND quantity_in_transit = 0
idreal_world_location_idlotquantity_readyquantity_in_transit
01a0eb00-99b6-7536-83f7-0de513e8feb7b7f8a9b0-c1d2-3456-1234-567890123456URS072-SHV-00110

Source lot depleted at the sender’s trunk — ✅ PASS

Section titled “Source lot depleted at the sender’s trunk — ✅ PASS”

Assertion: After the transfer, the source lot URS072-SHV-001 at Blair’s trunk should have quantity_ready = 0 (all transferred units left the source).

SELECT COALESCE(SUM(quantity_ready), 0)::int AS remaining_ready
FROM inventory_items
WHERE real_world_location_id = $1
AND lot = $2
AND manufacturer_organization_id = $3
remaining_ready
0

Each lifecycle step recorded a decision audit event — ✅ PASS

Section titled “Each lifecycle step recorded a decision audit event — ✅ PASS”

Assertion: The shipped lifecycle should log decision audit events for field_transfer.initiate, transfer.approve_receiver, transfer.mark_shipped, and transfer.record_receipt within the run window.

SELECT action, object_id, payload, created_at
FROM audit_events
WHERE created_at >= $1
AND event_type = 'decision'
AND action = ANY($2)
AND object_id = $3
ORDER BY created_at ASC
actionobject_idpayloadcreated_at
field_transfer.initiate01a0eb00-9994-7eb5-a794-cd781f94ddf5{"reason":"Field transfer initiated","itemCount":1,"performed":true,"toteCount":0,"entityType":"field_transfer","recipientOrganizationId":"b2c3d4e5-f6a7-8901-bcde-f12345678901","crossOrgAuthorizationReason":null}2026-09-29T02:31:20.181Z
transfer.approve_receiver01a0eb00-9994-7eb5-a794-cd781f94ddf5{"reason":"Shipped trunk transfer approved for shipment","performed":true,"entityType":"field_transfer","shippingMode":"external_label"}2026-09-29T02:31:28.569Z
transfer.mark_shipped01a0eb00-9994-7eb5-a794-cd781f94ddf5{"reason":"Manual shipment label recorded","performed":true,"entityType":"field_transfer","shippingMode":"external_label","hasLabelEvidence":false}2026-09-29T02:31:37.247Z
transfer.record_receipt01a0eb00-9994-7eb5-a794-cd781f94ddf5{"reason":"Field transfer receipt recorded and completed","performed":true,"entityType":"field_transfer","shippingMode":"external_label","hasReceiptNotes":false,"receiptEvidenceCount":0}2026-09-29T02:31:44.830Z

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: Initiate the field transferdecision:field_transfer.initiate✅
Step 2: Recipient approves the transfer for shipmentdecision:transfer.approve_receiver✅
Step 3: Sender records the manual shipmentdecision:transfer.mark_shipped✅
Step 4: Recipient records receipt and completes the transferdecision:transfer.record_receipt✅

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:52.720Z

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

22 event(s) captured:

TimeTypeActionUserOrgObject IDPerformedReason
2026-09-29 02:30:59Zuser_loguser:loginblair.bennett@corvetasurgical.comCorveta Surgical Group——
2026-09-29 02:31:20Zdecisionrepresentatives.gate_rep_actionblair.bennett@corvetasurgical.comVantisa1b2c3d4-e5f6-7890-abcd-ef1234567890nono_blocking_relationship
2026-09-29 02:31:20Zchecklistchecklists.createblair.bennett@corvetasurgical.comCorveta Surgical Group01a0eb00-99e8-791f-8d98-0d217e5ea5ee—
2026-09-29 02:31:20Zdecisionfield_transfer.initiateblair.bennett@corvetasurgical.comCorveta Surgical Group01a0eb00-9994-7eb5-a794-cd781f94ddf5yesField transfer initiated
2026-09-29 02:31:20Zdecisionsend_field_transfer_initiated_notification—Vantis01a0eb00-9994-7eb5-a794-cd781f94ddf5yesNotifying sender (17b8c9d0-e1f2-3456-1234-567890123456) and recipient (28c9d0e1-f2a3-4567-2345-678901234567)
2026-09-29 02:31:20Ztransactional_emailfield_transfer_initiated—Vantis01a0eb00-9994-7eb5-a794-cd781f94ddf5—
2026-09-29 02:31:23Zuser_loguser:loginrana.reyes@corvetasurgical.comCorveta Surgical Group——
2026-09-29 02:31:28Ztransfertransfer_approve_receiverrana.reyes@corvetasurgical.comCorveta Surgical Group01a0eb00-9994-7eb5-a794-cd781f94ddf5—
2026-09-29 02:31:28Zdecisionfield_transfer.approve_for_shipmentrana.reyes@corvetasurgical.comCorveta Surgical Group01a0eb00-9994-7eb5-a794-cd781f94ddf5yesField transfer approved for shipment
2026-09-29 02:31:28Zdecisiontransfer.approve_receiverrana.reyes@corvetasurgical.comCorveta Surgical Group01a0eb00-9994-7eb5-a794-cd781f94ddf5yesShipped trunk transfer approved for shipment
2026-09-29 02:31:28Zdecisiontickets.checklist_item_resolve.auto_resolve_ticket—Corveta Surgical Group01a0eb00-99ee-772c-b553-48e11bef0485noChecklist item is not linked to any ticket.
2026-09-29 02:31:31Zuser_loguser:loginblair.bennett@corvetasurgical.comCorveta Surgical Group——
2026-09-29 02:31:37Ztransfertransfer_mark_shippedblair.bennett@corvetasurgical.comCorveta Surgical Group01a0eb00-9994-7eb5-a794-cd781f94ddf5—
2026-09-29 02:31:37Zdecisiontransfer.mark_shippedblair.bennett@corvetasurgical.comCorveta Surgical Group01a0eb00-9994-7eb5-a794-cd781f94ddf5yesManual shipment label recorded
2026-09-29 02:31:40Zuser_loguser:loginrana.reyes@corvetasurgical.comCorveta Surgical Group——
2026-09-29 02:31:44Zdecisiontransfer.record_receiptrana.reyes@corvetasurgical.comCorveta Surgical Group01a0eb00-9994-7eb5-a794-cd781f94ddf5yesField transfer receipt recorded and completed
2026-09-29 02:31:44Ztransfertransfer_record_receiptrana.reyes@corvetasurgical.comCorveta Surgical Group01a0eb00-9994-7eb5-a794-cd781f94ddf5—
2026-09-29 02:31:44Zdecisionloan.advanceOnFieldTransferReceiptrana.reyes@corvetasurgical.comCorveta Surgical Group01a0eb00-9994-7eb5-a794-cd781f94ddf5nono linked loan
2026-09-29 02:31:44Zdecisionfield_transfer.receiverana.reyes@corvetasurgical.comCorveta Surgical Group01a0eb00-9994-7eb5-a794-cd781f94ddf5yesField transfer receipt completed
2026-09-29 02:31:44Zdecisionfield_transfer.receive_toterana.reyes@corvetasurgical.comCorveta Surgical Group01a0eb00-9994-7eb5-a794-cd781f94ddf5noNo linked totes to transition
2026-09-29 02:31:44Zdecisionsend_field_transfer_received_notification—Vantis01a0eb00-9994-7eb5-a794-cd781f94ddf5yesNotifying sender (17b8c9d0-e1f2-3456-1234-567890123456) and recipient (28c9d0e1-f2a3-4567-2345-678901234567)
2026-09-29 02:31:45Ztransactional_emailfield_transfer_received—Vantis01a0eb00-9994-7eb5-a794-cd781f94ddf5—

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

Template: Field_Transfer_Initiated_—_FT-1

Field Transfer Initiated — FT-1

Template: Field_Transfer_Received_—_FT-1

Field Transfer Received — FT-1