# Validation Report: URS-004

**Title:** Admin approve or reject a sales representative
**Date:** 2026-09-29T02:24:37.412Z
**Duration:** 164.4s
**Overall Status:** ✅ PASS

## User Requirement

> The system shall allow Vantis admins to approve or reject a sales representative

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

## Environment

- **Inbox URL:** http://localhost:41859
- **Database:** localhost:38529/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 navigates to rep management — ✅ PASS

**What this step proves:**

Proves that a Vantis admin (Alex) can authenticate and reach the Representatives management page. Both Corveta reps — Blair (pending approval) and Rana (active) — appear in the roster, establishing admin context for the approve/reject actions that follow.

**Audit events generated by this step:**

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

| Time | Type | Action | User | Org | Performed |
|------|------|--------|------|-----|-----------|
| 2026-09-29 02:25:08Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:25:24Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:25:36Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — |
| 2026-09-29 02:25:47Z | user_log | user:login | rana.reyes@corvetasurgical.com | Corveta Surgical Group | — |
| 2026-09-29 02:25:56Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:26:46Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — |
| 2026-09-29 02:27:07Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — |

**Screenshots:**

![step 01 admin logged in](screenshots/step-01-admin-logged-in.png)

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

**Video recording:**

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

---

### 2. Step 2: Admin rejects Blair — ✅ PASS

**What this step proves:**

Alex opens Blair's detail page, clicks Reject Representative, supplies a rejection reason, and confirms. Proves that an admin has an in-app control to deny a rep onboarding. The relationship row moves to status='rejected', active=false, and a rep_creation_request_rejected notification is dispatched to the distributor.

**Audit events generated by this step:**

*(Evidence scoped to step execution window: 2026-09-29T02:25:29.218Z → 2026-09-29T02:25:33.094Z)*

| Time | Type | Action | User | Org | Performed |
|------|------|--------|------|-----|-----------|
| 2026-09-29 02:25:32Z | organization_representation | status_change | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:25:32Z | user_log | rep_onboarding_request_rejected | alex.admin@vantismedical.com | Vantis | — |

**Emails triggered by this step:**

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

**Email 1: Representative Request Rejected - Vantis**

Template: `Representative_Request_Rejected_-_Vantis`

![Representative Request Rejected - Vantis](screenshots/emails/2026-09-29T02-25-33-164Z-Representative_Request_Rejected_-_Vantis.png)

**Screenshots:**

![step 02 bob detail pending](screenshots/step-02-bob-detail-pending.png)

![step 02 reject dialog](screenshots/step-02-reject-dialog.png)

![step 02 bob detail rejected](screenshots/step-02-bob-detail-rejected.png)

**Video recording:**

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

---

### 3. Step 3: Blair blocked from creating orders — ✅ PASS

**What this step proves:**

Blair logs in after being rejected and opens the order creation page. Vantis is filtered out of the manufacturer dropdown because `getAvailableFulfillingOrganizations` requires an active representation relationship. Proves the admin action is a hard restriction on downstream order creation — not just a cosmetic UI change.

**Audit events generated by this step:**

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

| Time | Type | Action | User | Org | Performed |
|------|------|--------|------|-----|-----------|
| 2026-09-29 02:25:08Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:25:24Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:25:36Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — |
| 2026-09-29 02:25:47Z | user_log | user:login | rana.reyes@corvetasurgical.com | Corveta Surgical Group | — |
| 2026-09-29 02:25:56Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:26:46Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — |
| 2026-09-29 02:27:07Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — |

**Screenshots:**

![step 03 bob no vantis](screenshots/step-03-bob-no-vantis.png)

**Video recording:**

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

---

### 4. Step 4: Rana (control) can still create orders — ✅ PASS

**What this step proves:**

Rana, an unrelated Corveta rep, is unaffected by the action taken on Blair. He reaches Step 2 of the order form as normal, proving that admin decisions are scoped to the rep under review and do not inadvertently strip privileges from other reps.

**Audit events generated by this step:**

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

| Time | Type | Action | User | Org | Performed |
|------|------|--------|------|-----|-----------|
| 2026-09-29 02:25:08Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:25:24Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:25:36Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — |
| 2026-09-29 02:25:47Z | user_log | user:login | rana.reyes@corvetasurgical.com | Corveta Surgical Group | — |
| 2026-09-29 02:25:56Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:26:46Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — |
| 2026-09-29 02:27:07Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — |

**Screenshots:**

![step 04 ryan order form](screenshots/step-04-ryan-order-form.png)

**Video recording:**

[▶ Watch step recording](videos/step-04-ryan-control.webm)

---

### 5. Step 5: Admin approves Blair — ✅ PASS

**What this step proves:**

After the test harness returns Blair's status to 'proposed', Alex approves him through the UI's Approve Representative flow. The manufacturer requires a certification of all reps and Blair has no completion record, so approval lands the relationship in status='pending_certification', active=false — approval alone no longer grants full access. A rep_created notification is dispatched to Corveta announcing the approval.

**Audit events generated by this step:**

*(Evidence scoped to step execution window: 2026-09-29T02:26:39.497Z → 2026-09-29T02:26:43.283Z)*

| Time | Type | Action | User | Org | Performed |
|------|------|--------|------|-----|-----------|
| 2026-09-29 02:26:40Z | organization_representation | status_change | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:26:40Z | checklist | checklists.create | alex.admin@vantismedical.com | Corveta Surgical Group | — |
| 2026-09-29 02:26:40Z | decision | representatives.require_certification_on_approval | alex.admin@vantismedical.com | Vantis | yes |
| 2026-09-29 02:26:40Z | user_log | rep_onboarding_request_approved | alex.admin@vantismedical.com | Vantis | — |
| 2026-09-29 02:26:43Z | transactional_email | rep_created | — | Corveta Surgical Group | — |

**Emails triggered by this step:**

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

**Email 1: Representative Account Approved - Vantis**

Template: `Representative_Account_Approved_-_Vantis`

![Representative Account Approved - Vantis](screenshots/emails/2026-09-29T02-26-43-026Z-Representative_Account_Approved_-_Vantis.png)

**Screenshots:**

![step 05 bob detail pending again](screenshots/step-05-bob-detail-pending-again.png)

![step 05 approve dialog](screenshots/step-05-approve-dialog.png)

![step 05 bob detail approved](screenshots/step-05-bob-detail-approved.png)

**Video recording:**

[▶ Watch step recording](videos/step-05-admin-approves.webm)

---

### 6. Step 6: Blair completes the certification — ✅ PASS

**What this step proves:**

Approval yields pending certification; the rep must certify before acting. Blair logs in, opens the required certification, acknowledges the training document (timestamped server-side), passes the knowledge check, and signs. Completion activates the relationship (status='active', active=true) with reason_code='certification_completed'.

**Audit events generated by this step:**

*(Evidence scoped to step execution window: 2026-09-29T02:26:53.195Z → 2026-09-29T02:27:04.314Z)*

| Time | Type | Action | User | Org | Performed |
|------|------|--------|------|-----|-----------|
| 2026-09-29 02:27:00Z | decision | forms.grade_submission | blair.bennett@corvetasurgical.com | Vantis | yes |
| 2026-09-29 02:27:04Z | certification | signing_code_consumed | blair.bennett@corvetasurgical.com | Vantis | — |
| 2026-09-29 02:27:04Z | decision | tickets.checklist_item_resolve.auto_resolve_ticket | — | Corveta Surgical Group | no |
| 2026-09-29 02:27:04Z | organization_representation | status_change | blair.bennett@corvetasurgical.com | Vantis | — |
| 2026-09-29 02:27:04Z | certification | completed | blair.bennett@corvetasurgical.com | Vantis | — |
| 2026-09-29 02:27:04Z | decision | certifications.complete_certification.issue_certificate | blair.bennett@corvetasurgical.com | Vantis | yes |
| 2026-09-29 02:27:04Z | decision | certifications.complete_certification.mark_relationship_certified | blair.bennett@corvetasurgical.com | Vantis | yes |
| 2026-09-29 02:27:04Z | user_log | rep_relationship_certified | blair.bennett@corvetasurgical.com | Vantis | — |

**Screenshots:**

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

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

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

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

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

**Video recording:**

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

---

### 7. Step 7: Blair submits an order after certification — ✅ PASS

**What this step proves:**

Now-certified Blair reaches the order form, picks a delivery location, adds a product, and submits. Proves the restriction lifts immediately when the certification completes — no further admin action is needed. The order request persists in the database for the DB-validation phase to confirm.

**Audit events generated by this step:**

*(Evidence scoped to step execution window: 2026-09-29T02:27:13.585Z → 2026-09-29T02:27:18.382Z)*

| Time | Type | Action | User | Org | Performed |
|------|------|--------|------|-----|-----------|
| 2026-09-29 02:27:18Z | checklist | checklists.create | blair.bennett@corvetasurgical.com | Vantis | — |
| 2026-09-29 02:27:18Z | decision | order_request_created | blair.bennett@corvetasurgical.com | Vantis | yes |
| 2026-09-29 02:27:18Z | decision | representatives.gate_rep_action | blair.bennett@corvetasurgical.com | Vantis | no |

**Screenshots:**

![step 07 order step2](screenshots/step-07-order-step2.png)

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

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

**Video recording:**

[▶ Watch step recording](videos/step-07-bob-orders.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.

### Blair's relationship ended the run as active — ✅ PASS

**Assertion:** After approval and certification completion Blair's relationship should be status='active', active=true.

```sql
SELECT id, status, active, rejection_reason
                   FROM organization_representation_relationships
                  WHERE id = $1
```

| id | status | active | rejection_reason |
| --- | --- | --- | --- |
| 84c5d6e7-f8a9-0123-8901-234567890123 | active | true | NULL |

### Rejection status transition recorded — ✅ PASS

**Assertion:** A proposed→rejected transition should have been recorded during the test run.

```sql
SELECT from_status, to_status, reason, created_at
                   FROM organization_representation_request_status_changes
                  WHERE relationship_id = $1
                    AND to_status = 'rejected'
                    AND created_at > NOW() - INTERVAL '30 minutes'
                  ORDER BY created_at DESC
```

| from_status | to_status | reason | created_at |
| --- | --- | --- | --- |
| proposed | rejected | URS-004 validation test: admin rejecting rep to verify order-creation is blocked. | 2026-09-29T02:25:32.433Z |

### Two-stage approval transitions recorded — ✅ PASS

**Assertion:** Approval should record a transition to 'pending_certification' with reason_code 'certification_required_on_approval', followed by a later transition to 'active' with reason_code 'certification_completed'.

```sql
SELECT from_status, to_status, reason_code, created_at
                   FROM organization_representation_request_status_changes
                  WHERE relationship_id = $1
                    AND created_at > NOW() - INTERVAL '30 minutes'
                  ORDER BY created_at DESC
```

| from_status | to_status | reason_code | created_at |
| --- | --- | --- | --- |
| pending_certification | active | certification_completed | 2026-09-29T02:27:04.189Z |
| proposed | pending_certification | certification_required_on_approval | 2026-09-29T02:26:40.918Z |
| proposed | rejected | NULL | 2026-09-29T02:25:32.433Z |

### Blair's certification record created on completion — ✅ PASS

**Assertion:** Exactly one certification record should exist for Blair, on the current version, with a completion timestamp and a signature reference.

```sql
SELECT rep_user_id, certification_id, certification_version_id,
                        completed_at, signature_ref
                   FROM certification_records
                  WHERE rep_user_id = $1 AND certification_id = $2
```

| rep_user_id | certification_id | certification_version_id | completed_at | signature_ref |
| --- | --- | --- | --- | --- |
| 17b8c9d0-e1f2-3456-1234-567890123456 | ce000100-0000-4000-8000-000000000001 | ce000200-0000-4000-8000-000000000002 | 2026-09-29T02:27:04.199Z | 01a0eafc-b187-72fb-802c-f9e2abffd9fb |

### Approved and certified rep successfully submitted an order — ✅ PASS

**Assertion:** At least one order_requests row should exist, tagged with the URS-004 marker.

```sql
SELECT id, request_number, status, order_type, created_at
                   FROM order_requests
                  WHERE requested_by_user_id = $1
                    AND notes LIKE $2
                  ORDER BY created_at DESC
```

| id | request_number | status | order_type | created_at |
| --- | --- | --- | --- | --- |
| 01a0eafc-e86a-79b6-b898-909bc2869d83 | OR-1 | submitted | dropship | 2026-09-29T02:27:18.220Z |

### Audit events logged for approve and reject — ✅ PASS

**Assertion:** audit_events should include both rep_onboarding_request_approved and rep_onboarding_request_rejected actions from this run.

```sql
SELECT event_type, action, created_at
                   FROM audit_events
                  WHERE event_type = 'user_log'
                    AND action IN ('rep_onboarding_request_approved', 'rep_onboarding_request_rejected')
                    AND created_at > NOW() - INTERVAL '30 minutes'
                  ORDER BY created_at DESC
```

| event_type | action | created_at |
| --- | --- | --- |
| user_log | rep_onboarding_request_approved | 2026-09-29T02:26:40.978Z |
| user_log | rep_onboarding_request_rejected | 2026-09-29T02:25:32.747Z |

## 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 navigates to rep management | `user_log:user:login` | ✅ |
| Step 2: Admin rejects Blair | `user_log:rep_onboarding_request_rejected` | ✅ |
| Step 3: Blair blocked from creating orders | `user_log:user:login` | ✅ |
| Step 4: Rana (control) can still create orders | `user_log:user:login` | ✅ |
| Step 5: Admin approves Blair | `user_log:rep_onboarding_request_approved` | ✅ |
| Step 5: Admin approves Blair | `decision:representatives.require_certification_on_approval` | ✅ |
| Step 6: Blair completes the certification | `certification:completed` | ✅ |
| Step 7: Blair submits an order after certification | `user_log:user:login` | ✅ |
| Step 7: Blair submits an order after certification | `decision:order_request_created` | ✅ |

### Email Template Assertions

Each row asserts that a declared `expectedEmailTemplates` entry was matched (case-insensitive substring) by a captured email subject or template. A ❌ flips overall status to FAIL.

| Step | Expected Template | Found |
|------|-------------------|-------|
| Step 2: Admin rejects Blair | `Representative Request Rejected` | ✅ |
| Step 5: Admin approves Blair | `Representative Account Approved` | ✅ |

## 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:24:36.063Z

<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>

38 event(s) captured:

| Time | Type | Action | User | Org | Object ID | Performed | Reason |
|------|------|--------|------|-----|-----------|-----------|--------|
| 2026-09-29 02:24:39Z | decision | return_overdue_sweep | — | Vantis | a1b2c3d4-e5f6-7890-abcd-ef1234567890 | no | wms_feature_flag_disabled |
| 2026-09-29 02:24:40Z | decision | ensure_lot_expiration_cycle_counter_assignment | — | Corveta Surgical Group | a6e7f8a9-b0c1-2345-0123-456789012345 | no | no_latest_cycle_counter |
| 2026-09-29 02:24:40Z | decision | ensure_lot_expiration_cycle_counter_assignment | — | Corveta Surgical Group | b7f8a9b0-c1d2-3456-1234-567890123456 | no | no_latest_cycle_counter |
| 2026-09-29 02:24:41Z | checklist | checklists.create | — | Corveta Surgical Group | 01a0eafa-8244-75bd-b7bd-dfdb309d854e | — |  |
| 2026-09-29 02:24:41Z | decision | upgrade_lot_expiration_checklist_priority | — | Corveta Surgical Group | b2c3d4e5-f6a7-8901-bcde-f12345678901 | no | no_open_checklists_below_high |
| 2026-09-29 02:24:42Z | 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:25:08Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — | — |  |
| 2026-09-29 02:25:24Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — | — |  |
| 2026-09-29 02:25:32Z | organization_representation | status_change | alex.admin@vantismedical.com | Vantis | 84c5d6e7-f8a9-0123-8901-234567890123 | — | URS-004 validation test: admin rejecting rep to verify order-creation is blocked. |
| 2026-09-29 02:25:32Z | user_log | rep_onboarding_request_rejected | alex.admin@vantismedical.com | Vantis | 84c5d6e7-f8a9-0123-8901-234567890123 | — |  |
| 2026-09-29 02:25:33Z | transactional_email | rep_creation_request_rejected | — | Corveta Surgical Group | — | — |  |
| 2026-09-29 02:25:36Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — | — |  |
| 2026-09-29 02:25:47Z | user_log | user:login | rana.reyes@corvetasurgical.com | Corveta Surgical Group | — | — |  |
| 2026-09-29 02:25:56Z | user_log | user:login | alex.admin@vantismedical.com | Vantis | — | — |  |
| 2026-09-29 02:26:40Z | organization_representation | status_change | alex.admin@vantismedical.com | Vantis | 84c5d6e7-f8a9-0123-8901-234567890123 | — | Certification required |
| 2026-09-29 02:26:40Z | checklist | checklists.create | alex.admin@vantismedical.com | Corveta Surgical Group | 01a0eafc-56f9-7161-86e8-69370ca781b7 | — |  |
| 2026-09-29 02:26:40Z | decision | representatives.require_certification_on_approval | alex.admin@vantismedical.com | Vantis | 17b8c9d0-e1f2-3456-1234-567890123456 | yes | mandatory_certifications_outstanding |
| 2026-09-29 02:26:40Z | user_log | rep_onboarding_request_approved | alex.admin@vantismedical.com | Vantis | 84c5d6e7-f8a9-0123-8901-234567890123 | — |  |
| 2026-09-29 02:26:43Z | transactional_email | rep_created | — | Corveta Surgical Group | — | — |  |
| 2026-09-29 02:26:46Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — | — |  |
| 2026-09-29 02:26:49Z | decision | certifications.signing_challenge.send_sms | blair.bennett@corvetasurgical.com | Vantis | 01a0eafc-79e8-7187-a6dc-8faa8047c673 | no | no_phone_channel |
| 2026-09-29 02:26:49Z | certification | signing_code_issued | blair.bennett@corvetasurgical.com | Vantis | ce000100-0000-4000-8000-000000000001 | — |  |
| 2026-09-29 02:26:51Z | transactional_email | certification_signing_code | — | Vantis | 01a0eafc-79e8-7187-a6dc-8faa8047c673 | — |  |
| 2026-09-29 02:26:53Z | certification | signing_code_verified | blair.bennett@corvetasurgical.com | Vantis | ce000100-0000-4000-8000-000000000001 | — |  |
| 2026-09-29 02:27:00Z | decision | forms.grade_submission | blair.bennett@corvetasurgical.com | Vantis | ce000300-0000-4000-8000-000000000002 | yes | all_answers_correct |
| 2026-09-29 02:27:04Z | certification | signing_code_consumed | blair.bennett@corvetasurgical.com | Vantis | ce000100-0000-4000-8000-000000000001 | — |  |
| 2026-09-29 02:27:04Z | decision | tickets.checklist_item_resolve.auto_resolve_ticket | — | Corveta Surgical Group | 01a0eafc-56fe-71d9-a174-d792d884e668 | no | Checklist item is not linked to any ticket. |
| 2026-09-29 02:27:04Z | organization_representation | status_change | blair.bennett@corvetasurgical.com | Vantis | 84c5d6e7-f8a9-0123-8901-234567890123 | — | Certification completed |
| 2026-09-29 02:27:04Z | certification | completed | blair.bennett@corvetasurgical.com | Vantis | 01a0eafc-b187-72fb-802c-f9e13f6eed4f | — |  |
| 2026-09-29 02:27:04Z | decision | certifications.complete_certification.issue_certificate | blair.bennett@corvetasurgical.com | Vantis | 01a0eafc-b187-72fb-802c-f9e13f6eed4f | yes | quiz_backed_completion |
| 2026-09-29 02:27:04Z | decision | certifications.complete_certification.mark_relationship_certified | blair.bennett@corvetasurgical.com | Vantis | 84c5d6e7-f8a9-0123-8901-234567890123 | yes | relationship_pending_certification |
| 2026-09-29 02:27:04Z | user_log | rep_relationship_certified | blair.bennett@corvetasurgical.com | Vantis | — | — | Certification completed |
| 2026-09-29 02:27:06Z | certification_certificate | issued | blair.bennett@corvetasurgical.com | Vantis | 01a0eafc-b1b3-703b-8013-29a2a170110a | — |  |
| 2026-09-29 02:27:06Z | certification_completion_record | issued | blair.bennett@corvetasurgical.com | Vantis | 01a0eafc-b1b6-7841-ba76-75b3ddcb2d3e | — |  |
| 2026-09-29 02:27:07Z | user_log | user:login | blair.bennett@corvetasurgical.com | Corveta Surgical Group | — | — |  |
| 2026-09-29 02:27:18Z | checklist | checklists.create | blair.bennett@corvetasurgical.com | Vantis | 01a0eafc-e879-7036-bce7-20222dab3919 | — |  |
| 2026-09-29 02:27:18Z | decision | order_request_created | blair.bennett@corvetasurgical.com | Vantis | 01a0eafc-e86a-79b6-b898-909bc2869d83 | yes | Order request OR-1 created (importSource=manual) |
| 2026-09-29 02:27:18Z | decision | representatives.gate_rep_action | blair.bennett@corvetasurgical.com | Vantis | a1b2c3d4-e5f6-7890-abcd-ef1234567890 | no | no_blocking_relationship |

## Email Evidence

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

### 1. Representative Request Rejected - Vantis

**Template:** `Representative_Request_Rejected_-_Vantis`

![Representative Request Rejected - Vantis](screenshots/emails/2026-09-29T02-25-33-164Z-Representative_Request_Rejected_-_Vantis.png)

### 2. Representative Account Approved - Vantis

**Template:** `Representative_Account_Approved_-_Vantis`

![Representative Account Approved - Vantis](screenshots/emails/2026-09-29T02-26-43-026Z-Representative_Account_Approved_-_Vantis.png)

### 3. Your signing code for LiraLock Implant System Certification

**Template:** `Your_signing_code_for_LiraLock_Implant_System_Certification`

![Your signing code for LiraLock Implant System Certification](screenshots/emails/2026-09-29T02-26-51-561Z-Your_signing_code_for_LiraLock_Implant_System_Certification.png)
