# Validation Report: URS-079

**Title:** Cycle count surfaces expired stock for review and return
**Date:** 2026-09-29T02:31:00.010Z
**Duration:** 68.1s
**Overall Status:** ✅ PASS

## User Requirement

> The system shall detect expired or soon-to-expire stock recorded during a cycle count: finishing the count shall surface a lot expiration review task for the counted location, assign it to the representative who performed the count, and link directly into the expiry returns flow with the urgent lots pre-selected, so the distributor can return the affected stock to the manufacturer with full traceability.

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

## Environment

- **Inbox URL:** http://localhost:33771
- **Database:** localhost:37173/cc_repinbox_dev

## Setup

Status: ✅ PASS

## Test Steps

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: Admin requests a cycle count of distributor trunk locations — ✅ PASS

**What this step proves:**

Alex Admin (Vantis manufacturer) creates a cycle count request through the two-step wizard: the Corveta distributorship is selected with its scope narrowed to Trunks, then a due date and a URS-079 marker note are set on the review step. Submitting creates the request, links the resolved trunk locations, and pre-opens a cycle count at each (origin admin_request). This establishes the administrator-driven entry point of the pipeline under test.

**Audit events generated by this step:**

*(Evidence scoped to step execution window: 2026-09-29T02:31:13.052Z → 2026-09-29T02:31:17.387Z)*

| Time | Type | Action | User | Org | Performed |
|------|------|--------|------|-----|-----------|
| 2026-09-29 02:31:17Z | decision | create_cycle_count_request_item | alex.admin@vantismedical.com | Corveta Surgical Group | yes |
| 2026-09-29 02:31:17Z | decision | create_cycle_count_request_item | alex.admin@vantismedical.com | Corveta Surgical Group | yes |
| 2026-09-29 02:31:17Z | decision | refresh_unassigned_cycle_counts_review_item | alex.admin@vantismedical.com | Corveta Surgical Group | no |
| 2026-09-29 02:31:17Z | checklist | checklists.create | alex.admin@vantismedical.com | Corveta Surgical Group | — |
| 2026-09-29 02:31:17Z | decision | auto_complete_cycle_count_request | alex.admin@vantismedical.com | Vantis | no |
| 2026-09-29 02:31:17Z | cycle_count_request | create_cycle_count_request | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:31:17Z | decision | create_cycle_count_request_item | alex.admin@vantismedical.com | Corveta Surgical Group | yes |

**Screenshots:**

![step 01 wizard scope](screenshots/step-01-wizard-scope.png)

![step 01 review](screenshots/step-01-review.png)

![step 01 submitted](screenshots/step-01-submitted.png)

**Video recording:**

[▶ Watch step recording](videos/step-01-request.webm)

---

### 2. Step 2: Rep opens the requested count and records the expired lot — ✅ PASS

**What this step proves:**

Blair Bennett (Corveta rep) opens the request-created count from his trunk's location page and records the expired URS-079 NovaPatch lot through the Add items card's Form mode, picking the lot from the approved-lot dropdown (expired lots stay selectable — a count records what is physically on the shelf). The entry lands in the count's scan batch with its expiration resolved from the approved-lot catalog. This verifies a rep can record expired stock during a count.

**Screenshots:**

![step 02 scan page](screenshots/step-02-scan-page.png)

![step 02 lot recorded](screenshots/step-02-lot-recorded.png)

**Video recording:**

[▶ Watch step recording](videos/step-02-record.webm)

---

### 3. Step 3: Rep finishes the cycle count — ✅ PASS

**What this step proves:**

Blair confirms the finished count. finishCycleCount reconciles inventory to the counted quantities and then runs the lot-expiration scan inline, in the same transaction: the re-keyed inventory row keeps the expired date, so the scan raises the per-location "Resolve expiring inventory" review task, assigns the location-linked users plus Blair as the cycle counter, and records the ensure decision. This is the primary URS-079 evidence that finishing a count surfaces expired stock for review with no scheduled sweep needed.

**Audit events generated by this step:**

*(Evidence scoped to step execution window: 2026-09-29T02:31:38.453Z → 2026-09-29T02:31:39.688Z)*

| Time | Type | Action | User | Org | Performed |
|------|------|--------|------|-----|-----------|
| 2026-09-29 02:31:39Z | decision | ensure_lot_expiration_cycle_counter_assignment | — | Corveta Surgical Group | no |
| 2026-09-29 02:31:39Z | decision | inventory.gate_cycle_count_evidence_photos | blair.bennett@corvetasurgical.com | Corveta Surgical Group | no |
| 2026-09-29 02:31:39Z | decision | cycleCount.excludeSequesteredReturnUnits | blair.bennett@corvetasurgical.com | Corveta Surgical Group | no |
| 2026-09-29 02:31:39Z | decision | refresh_unassigned_cycle_counts_review_item | blair.bennett@corvetasurgical.com | Corveta Surgical Group | no |
| 2026-09-29 02:31:39Z | checklist | checklists.create | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — |
| 2026-09-29 02:31:39Z | decision | finish_cycle_count | blair.bennett@corvetasurgical.com | Corveta Surgical Group | yes |
| 2026-09-29 02:31:39Z | decision | auto_complete_cycle_count_request | blair.bennett@corvetasurgical.com | Vantis | no |
| 2026-09-29 02:31:39Z | decision | tickets.checklist_item_resolve.auto_resolve_ticket | — | Corveta Surgical Group | no |
| 2026-09-29 02:31:39Z | decision | ensure_lot_expiration_checklist | — | Corveta Surgical Group | yes |
| 2026-09-29 02:31:39Z | decision | upgrade_lot_expiration_checklist_priority | — | Corveta Surgical Group | no |
| 2026-09-29 02:31:39Z | decision | ensure_lot_expiration_cycle_counter_assignment | — | Corveta Surgical Group | no |
| 2026-09-29 02:31:39Z | user_log | cycle_count:close | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — |

**Screenshots:**

![step 03 finish summary](screenshots/step-03-finish-summary.png)

![step 03 finished](screenshots/step-03-finished.png)

**Video recording:**

[▶ Watch step recording](videos/step-03-finish.webm)

---

### 4. Step 4: The expiry review task appears in the rep inbox — ✅ PASS

**What this step proves:**

The task raised by the count is waiting in Blair's inbox: the "Resolve expiring inventory at TRUNK-36" item lists the expired URS-079 lot on its detail panel with product, lot number, expiration, and status badge, and its "Go to Task" action is a deep link into the returns flow carrying manufacturerId, prefillExpiring=1, type=expiry, and the trunk's locationId. This verifies the review task reaches the person who performed the count with everything needed to act.

**Screenshots:**

![step 04 task detail](screenshots/step-04-task-detail.png)

![step 04 go to task](screenshots/step-04-go-to-task.png)

**Video recording:**

[▶ Watch step recording](videos/step-04-inbox-task.webm)

---

### 5. Step 5: The task deep-links into the prefilled expiry return flow — ✅ PASS

**What this step proves:**

Clicking "Go to Task" lands in the lean expiry returns flow at Step 2 of 3 (Lots): the type chooser and manufacturer step are skipped because the URL carries type=expiry and a valid manufacturerId, the form footer shows Vantis and the Expiring stock reason, and the picker arrives with the urgent lots pre-selected — including the expired URS-079 lot the count surfaced. This verifies the handoff from review task to return flow is prefilled end to end.

**Screenshots:**

![step 05 lots preselected](screenshots/step-05-lots-preselected.png)

**Video recording:**

[▶ Watch step recording](videos/step-05-deep-link.webm)

---

### 6. Step 6: Rep submits the expiry return — ✅ PASS

**What this step proves:**

Blair re-enters through the task, advances the prefilled flow to the review step, adds notes tagged with the URS-079 marker, and submits. The submit path creates a return with return_type=expiry, derives the return location from the selected lots, attaches no sales account, creates no replacement order, and fans the lot out into one return_items row per unit. Because the replacement-order step is skipped, the service writes a decision audit row (create_replacement_order_on_return, performed=false, reason=return_type_not_incident). This closes the pipeline: expired stock found by a count leaves through a fully traceable return.

**Audit events generated by this step:**

*(Evidence scoped to step execution window: 2026-09-29T02:31:59.890Z → 2026-09-29T02:32:06.803Z)*

| Time | Type | Action | User | Org | Performed |
|------|------|--------|------|-----|-----------|
| 2026-09-29 02:32:01Z | decision | partition_return_submission | blair.bennett@corvetasurgical.com | Vantis | no |
| 2026-09-29 02:32:01Z | decision | create_replacement_order_on_return | blair.bennett@corvetasurgical.com | Vantis | no |
| 2026-09-29 02:32:01Z | decision | representatives.gate_rep_action | blair.bennett@corvetasurgical.com | Vantis | no |
| 2026-09-29 02:32:01Z | decision | open_item_movement_on_return_submission | blair.bennett@corvetasurgical.com | Corveta Surgical Group | yes |
| 2026-09-29 02:32:01Z | decision | link_return_to_location_sales_account | blair.bennett@corvetasurgical.com | Corveta Surgical Group | no |
| 2026-09-29 02:32:01Z | decision | tickets.checklist_item_resolve.auto_resolve_ticket | — | Corveta Surgical Group | no |
| 2026-09-29 02:32:01Z | return_request | created | blair.bennett@corvetasurgical.com | Vantis | — |
| 2026-09-29 02:32:03Z | decision | returns.notifications.cc_incident_recipients | — | Vantis | no |
| 2026-09-29 02:32:03Z | decision | extensiv_return_push.skipped | — | Vantis | no |
| 2026-09-29 02:32:03Z | transactional_email | return_submitted | — | Corveta Surgical Group | — |

**Screenshots:**

![step 06 review](screenshots/step-06-review.png)

![step 06 submitted](screenshots/step-06-submitted.png)

**Video recording:**

[▶ Watch step recording](videos/step-06-submit.webm)

---

## Database Validations

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.

### Cycle count request created by the manufacturer admin — ✅ PASS

**Assertion:** A cycle count request tagged "URS-079 validation run" should exist for Vantis, created by Alex Admin.

```sql
SELECT id, status, created_by_user_id, note, created_at
    FROM cycle_count_requests
    WHERE organization_id = $1 AND note LIKE '%' || $2 || '%'
    ORDER BY created_at DESC
```

| id | status | created_by_user_id | note | created_at |
| --- | --- | --- | --- | --- |
| 01a0eb00-8d2c-7bea-8c92-1f397965a4d1 | active | f6a7b8c9-d0e1-2345-f123-456789012345 | URS-079 validation run — submitted at 2026-09-29T02:31:14.402Z | 2026-09-29T02:31:17.058Z |

### Count at the trunk closed by the rep and applied — ✅ PASS

**Assertion:** The request-opened count at Blair's trunk should be closed by Blair, applied, with origin=admin_request.

```sql
SELECT cc.id, cc.closed_at, cc.closed_by_user_id, cc.applied,
      cc.metadata->>'origin' AS origin
    FROM cycle_counts cc
    WHERE cc.organization_id = $1
      AND cc.location_id = $2
      AND cc.metadata->>'requestId' = $3
    ORDER BY cc.opened_at DESC
```

| id | closed_at | closed_by_user_id | applied | origin |
| --- | --- | --- | --- | --- |
| 01a0eb00-8d56-7baf-8070-224e479c3f17 | 2026-09-29T02:31:39.308Z | 17b8c9d0-e1f2-3456-1234-567890123456 | true | admin_request |

### Reconciled lot kept its expiration and the return took the units — ✅ PASS

**Assertion:** Lot URS079-NP-001 should still exist at Blair's trunk with a past, non-null expiration (proof it survived the reconcile re-key), and its ready quantity should be 0 because submitting the return moved every unit out.

```sql
SELECT lot, SUM(quantity_ready)::int AS quantity, MIN(expiration::text) AS expiration
    FROM inventory_items
    WHERE organization_id = $1 AND real_world_location_id = $2 AND lot = $3
    GROUP BY lot
```

| lot | quantity | expiration |
| --- | --- | --- |
| URS079-NP-001 | 0 | 2026-09-19 |

### Lot-expiration review item raised for the counted trunk — ✅ PASS

**Assertion:** A inventory.lot_expiration_review checklist item should exist for Blair's trunk with lot URS079-NP-001 in its urgentLots metadata.

```sql
SELECT id, status, route, item_key, metadata
    FROM checklist_items
    WHERE organization_id = $1 AND criteria_type = $2 AND linked_object_id = $3
```

| id | status | route | item_key | metadata |
| --- | --- | --- | --- | --- |
| 01a0eb00-e49c-78af-b5c9-bcc3d727a2c2 | completed | /returns/new?manufacturerId=a1b2c3d4-e5f6-7890-abcd-ef1234567890&prefillExpiring=1&type=expiry&locationId=a6e7f8a9-b0c1-2345-0123-456789012345 | lot-expiration-a6e7f8a9-b0c1-2345-0123-456789012345 | {"type":"lot_expiration_item","raisedFor":"2026-09","locationId":"a6e7f8a9-b0c1-2345-0123-456789012345","urgentLots":[{"lot":"URS079-NP-001","status":"expired","expiration":"2026-09-19","productSku":"NP019N1A","locationName":"TRUNK-36","productTitle":"NovaPatch® PET","serialNumber":null,"daysRemaining":-9,"quantityReady":4,"manufacturerName":"Vantis"}],"locationName":"TRUNK-36"} |

### Review item routes into the prefilled expiry return flow — ✅ PASS

**Assertion:** With returns enabled and Vantis the only manufacturer with urgent lots at the trunk, the item route should be /returns/new?manufacturerId=<vantis>&prefillExpiring=1&type=expiry&locationId=<trunk>.

```sql
-- route from the checklist item row above
```

| route |
| --- |
| /returns/new?manufacturerId=a1b2c3d4-e5f6-7890-abcd-ef1234567890&prefillExpiring=1&type=expiry&locationId=a6e7f8a9-b0c1-2345-0123-456789012345 |

### Counting rep assigned to the review item — ✅ PASS

**Assertion:** Blair (who closed the count) should carry a user assignment on the review item — via the trunk's location linkage or the cycle_counter-origin assignment.

```sql
SELECT id, assignment_type, assigned_to_user_id, metadata
    FROM checklist_assignments
    WHERE checklist_item_id = $1
      AND assignment_type = 'user'
      AND assigned_to_user_id = $2
```

| id | assignment_type | assigned_to_user_id | metadata |
| --- | --- | --- | --- |
| 01a0eb00-e49f-75c2-8575-1c1dfe044e09 | user | 17b8c9d0-e1f2-3456-1234-567890123456 | `{}` |

### Inline lot-expiration scan decision recorded — ✅ PASS

**Assertion:** Finishing the count should log a decision with action='ensure_lot_expiration_checklist' and performed=true in the run window.

```sql
SELECT id, action, payload, created_at
    FROM audit_events
    WHERE created_at >= $1
      AND event_type = 'decision'
      AND action = 'ensure_lot_expiration_checklist'
      AND payload->>'performed' = 'true'
    ORDER BY created_at DESC
```

| id | action | payload | created_at |
| --- | --- | --- | --- |
| 01a0eb00-e4b1-793b-ae8e-eab363367013 | ensure_lot_expiration_checklist | `{"reason":"created_1_reopened_0_already_open_1_refreshed_1","performed":true,"entityType":"organization"}` | 2026-09-29T02:31:39.089Z |

### Expiry return submitted with the lean-flow shape — ✅ PASS

**Assertion:** A URS-079 return with return_type=expiry and status=submitted should exist, with no replacement order, no sales account, and Blair's trunk as the derived return location.

```sql
SELECT id, return_number, status, return_type, sales_account_id,
      return_location_id, replacement_order_id, notes, created_at
    FROM returns
    WHERE sales_organization_id = $1
      AND manufacturer_organization_id = $2
      AND return_type = 'expiry'
      AND notes LIKE '%' || $3 || '%'
      AND created_at > NOW() - INTERVAL '2 hours'
    ORDER BY created_at DESC
```

| id | return_number | status | return_type | sales_account_id | return_location_id | replacement_order_id | notes | created_at |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 01a0eb01-3c07-70b3-b45c-a4cf002bcb7b | RET-1 | submitted | expiry | NULL | a6e7f8a9-b0c1-2345-0123-456789012345 | NULL | URS-079 validation run — submitted at 2026-09-29T02:31:59.316Z | 2026-09-29T02:32:01.757Z |

### Return items fan out the expired lot per unit — ✅ PASS

**Assertion:** The return should carry 4 return_items rows (one per unit) for lot URS079-NP-001, each with the Vantis manufacturer and the trunk location.

```sql
SELECT ri.id, ri.lot_number, ri.manufacturer_organization_id, ri.location_id,
      ri.expiration
    FROM return_items ri
    WHERE ri.return_id = $1 AND ri.lot_number = $2
```

| id | lot_number | manufacturer_organization_id | location_id | expiration |
| --- | --- | --- | --- | --- |
| 01a0eb01-3c0d-7f84-8e5a-51e8aee6a5dc | URS079-NP-001 | a1b2c3d4-e5f6-7890-abcd-ef1234567890 | a6e7f8a9-b0c1-2345-0123-456789012345 | 2026-09-19T00:00:00.000Z |
| 01a0eb01-3c0d-7f84-8e5a-51e96fd98dcd | URS079-NP-001 | a1b2c3d4-e5f6-7890-abcd-ef1234567890 | a6e7f8a9-b0c1-2345-0123-456789012345 | 2026-09-19T00:00:00.000Z |
| 01a0eb01-3c0d-7f84-8e5a-51ea591b09e7 | URS079-NP-001 | a1b2c3d4-e5f6-7890-abcd-ef1234567890 | a6e7f8a9-b0c1-2345-0123-456789012345 | 2026-09-19T00:00:00.000Z |
| 01a0eb01-3c0d-7f84-8e5a-51ebe6262493 | URS079-NP-001 | a1b2c3d4-e5f6-7890-abcd-ef1234567890 | a6e7f8a9-b0c1-2345-0123-456789012345 | 2026-09-19T00:00:00.000Z |

### Replacement-order skip recorded as an audit decision — ✅ PASS

**Assertion:** Submitting the expiry return should write a decision audit_events row with action='create_replacement_order_on_return', performed=false, reason='return_type_not_incident'.

```sql
SELECT id, event_type, action, payload, created_at
    FROM audit_events
    WHERE created_at >= $1
      AND event_type = 'decision'
      AND action = 'create_replacement_order_on_return'
      AND payload->>'performed' = 'false'
      AND payload->>'reason' = 'return_type_not_incident'
    ORDER BY created_at DESC
```

| id | event_type | action | payload | created_at |
| --- | --- | --- | --- | --- |
| 01a0eb01-3c42-7d63-a45d-82e0f8e753e9 | decision | create_replacement_order_on_return | `{"reason":"return_type_not_incident","performed":false,"entityType":"return"}` | 2026-09-29T02:32:01.757Z |

## Audit & Email Assertion Ledger

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.

### Audit Action Assertions

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.

| Step | Expected Audit Action | Found |
|------|-----------------------|-------|
| Step 1: Admin requests a cycle count of distributor trunk locations | `cycle_count_request:create_cycle_count_request` | ✅ |
| Step 1: Admin requests a cycle count of distributor trunk locations | `decision:create_cycle_count_request_item` | ✅ |
| Step 3: Rep finishes the cycle count | `decision:ensure_lot_expiration_checklist` | ✅ |
| Step 3: Rep finishes the cycle count | `decision:ensure_lot_expiration_cycle_counter_assignment` | ✅ |
| Step 6: Rep submits the expiry return | `decision:create_replacement_order_on_return` | ✅ |

## Audit Log Events

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

<details><summary>Query used to capture events</summary>

```sql
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
```
</details>

35 event(s) captured:

| Time | Type | Action | User | Org | Object ID | Performed | Reason |
|------|------|--------|------|-----|-----------|-----------|--------|
| 2026-09-29 02:31:05Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — | — |  |
| 2026-09-29 02:31:17Z | decision | create_cycle_count_request_item | alex.admin@vantismedical.com | Corveta Surgical Group | 01a0eb00-8d7a-7724-a119-e0ad62eca8bf | yes | assigned_trunk_owner |
| 2026-09-29 02:31:17Z | decision | create_cycle_count_request_item | alex.admin@vantismedical.com | Corveta Surgical Group | 01a0eb00-8d7b-7c18-90f3-7ad6b9dfe347 | yes | assigned_shared_inventory_team |
| 2026-09-29 02:31:17Z | decision | refresh_unassigned_cycle_counts_review_item | alex.admin@vantismedical.com | Corveta Surgical Group | b2c3d4e5-f6a7-8901-bcde-f12345678901 | no | no_unassigned_locations |
| 2026-09-29 02:31:17Z | checklist | checklists.create | alex.admin@vantismedical.com | Corveta Surgical Group | 01a0eb00-8d6d-783f-9ff9-3e64feb693d7 | — |  |
| 2026-09-29 02:31:17Z | decision | auto_complete_cycle_count_request | alex.admin@vantismedical.com | Vantis | 01a0eb00-8d2c-7bea-8c92-1f397965a4d1 | no | request_has_incomplete_cycle_counts |
| 2026-09-29 02:31:17Z | cycle_count_request | create_cycle_count_request | alex.admin@vantismedical.com | Vantis | 01a0eb00-8d2c-7bea-8c92-1f397965a4d1 | — |  |
| 2026-09-29 02:31:17Z | decision | create_cycle_count_request_item | alex.admin@vantismedical.com | Corveta Surgical Group | 01a0eb00-8d77-7e33-a348-1667de93b617 | yes | assigned_trunk_owner |
| 2026-09-29 02:31:20Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — | — |  |
| 2026-09-29 02:31:33Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — | — |  |
| 2026-09-29 02:31:39Z | decision | ensure_lot_expiration_cycle_counter_assignment | — | Corveta Surgical Group | a6e7f8a9-b0c1-2345-0123-456789012345 | no | cycle_counter_already_among_assignees |
| 2026-09-29 02:31:39Z | decision | inventory.gate_cycle_count_evidence_photos | blair.bennett@corvetasurgical.com | Corveta Surgical Group | 01a0eb00-8d56-7baf-8070-224e479c3f17 | no | requirement_not_active |
| 2026-09-29 02:31:39Z | decision | cycleCount.excludeSequesteredReturnUnits | blair.bennett@corvetasurgical.com | Corveta Surgical Group | 01a0eb00-8d56-7baf-8070-224e479c3f17 | no | No open return movement holds units at the location |
| 2026-09-29 02:31:39Z | decision | refresh_unassigned_cycle_counts_review_item | blair.bennett@corvetasurgical.com | Corveta Surgical Group | b2c3d4e5-f6a7-8901-bcde-f12345678901 | no | no_unassigned_locations |
| 2026-09-29 02:31:39Z | checklist | checklists.create | blair.bennett@corvetasurgical.com | Corveta Surgical Group | 01a0eb00-e498-7900-adee-6c59624bd904 | — |  |
| 2026-09-29 02:31:39Z | decision | finish_cycle_count | blair.bennett@corvetasurgical.com | Corveta Surgical Group | 01a0eb00-8d56-7baf-8070-224e479c3f17 | yes | count_open |
| 2026-09-29 02:31:39Z | decision | auto_complete_cycle_count_request | blair.bennett@corvetasurgical.com | Vantis | 01a0eb00-8d2c-7bea-8c92-1f397965a4d1 | no | request_has_incomplete_cycle_counts |
| 2026-09-29 02:31:39Z | decision | tickets.checklist_item_resolve.auto_resolve_ticket | — | Corveta Surgical Group | 01a0eb00-8d7a-7724-a119-e0ad62eca8bf | no | Checklist item is not linked to any ticket. |
| 2026-09-29 02:31:39Z | decision | ensure_lot_expiration_checklist | — | Corveta Surgical Group | b2c3d4e5-f6a7-8901-bcde-f12345678901 | yes | created_1_reopened_0_already_open_1_refreshed_1 |
| 2026-09-29 02:31:39Z | decision | upgrade_lot_expiration_checklist_priority | — | Corveta Surgical Group | b2c3d4e5-f6a7-8901-bcde-f12345678901 | no | no_open_checklists_below_high |
| 2026-09-29 02:31:39Z | decision | ensure_lot_expiration_cycle_counter_assignment | — | Corveta Surgical Group | b7f8a9b0-c1d2-3456-1234-567890123456 | no | no_latest_cycle_counter |
| 2026-09-29 02:31:39Z | user_log | cycle_count:close | blair.bennett@corvetasurgical.com | Corveta Surgical Group | 01a0eb00-8d56-7baf-8070-224e479c3f17 | — |  |
| 2026-09-29 02:31:42Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — | — |  |
| 2026-09-29 02:31:48Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — | — |  |
| 2026-09-29 02:31:54Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — | — |  |
| 2026-09-29 02:32:01Z | decision | partition_return_submission | blair.bennett@corvetasurgical.com | Vantis | 01a0eb01-3c07-70b3-b45c-a4cf002bcb7b | no | no_org_submission_policy |
| 2026-09-29 02:32:01Z | decision | create_replacement_order_on_return | blair.bennett@corvetasurgical.com | Vantis | 01a0eb01-3c07-70b3-b45c-a4cf002bcb7b | no | return_type_not_incident |
| 2026-09-29 02:32:01Z | decision | representatives.gate_rep_action | blair.bennett@corvetasurgical.com | Vantis | a1b2c3d4-e5f6-7890-abcd-ef1234567890 | no | no_blocking_relationship |
| 2026-09-29 02:32:01Z | decision | open_item_movement_on_return_submission | blair.bennett@corvetasurgical.com | Corveta Surgical Group | 01a0eb01-3c07-70b3-b45c-a4cf002bcb7b | yes | return_movement_opened |
| 2026-09-29 02:32:01Z | decision | link_return_to_location_sales_account | blair.bennett@corvetasurgical.com | Corveta Surgical Group | 01a0eb01-3c07-70b3-b45c-a4cf002bcb7b | no | location_not_account_linked |
| 2026-09-29 02:32:01Z | decision | tickets.checklist_item_resolve.auto_resolve_ticket | — | Corveta Surgical Group | 01a0eb00-e49c-78af-b5c9-bcc3d727a2c2 | no | Checklist item is not linked to any ticket. |
| 2026-09-29 02:32:01Z | return_request | created | blair.bennett@corvetasurgical.com | Vantis | 01a0eb01-3c07-70b3-b45c-a4cf002bcb7b | — |  |
| 2026-09-29 02:32:03Z | decision | returns.notifications.cc_incident_recipients | — | Vantis | 01a0eb01-3c07-70b3-b45c-a4cf002bcb7b | no | return is not an incident return |
| 2026-09-29 02:32:03Z | decision | extensiv_return_push.skipped | — | Vantis | 01a0eb01-3c07-70b3-b45c-a4cf002bcb7b | no | wms_feature_flag_disabled |
| 2026-09-29 02:32:03Z | transactional_email | return_submitted | — | Corveta Surgical Group | 01a0eb01-3c07-70b3-b45c-a4cf002bcb7b | — |  |

## Email Evidence

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

### 1. Return Submitted - RET-1

**Template:** `Return_Submitted_-_RET-1`

![Return Submitted - RET-1](screenshots/emails/2026-09-29T02-32-03-888Z-Return_Submitted_-_RET-1.png)
