{
  "ursId": "URS-039",
  "title": "Returns form supports multiple item questionnaires",
  "timestamp": "2026-04-23T03:42:20.319Z",
  "durationMs": 61035,
  "config": {
    "inboxUrl": "http://localhost:64510",
    "dbHost": "localhost",
    "dbPort": 64511,
    "dbName": "cc_repinbox_dev"
  },
  "setup": {
    "status": "pass"
  },
  "scenarios": [
    {
      "name": "Step 1: Login and navigate to returns",
      "status": "pass",
      "description": "Step 1: Login and navigate to returns",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-01-logged-in.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-01-returns-list.png"
      ],
      "explanation": "A sales rep logs in and navigates to the returns list. This verifies the returns feature is accessible and that the rep's permissions permit viewing returns.",
      "expectedAuditActions": [
        "user_log:user:login"
      ],
      "startedAt": "2026-04-23T03:42:25.234Z",
      "finishedAt": "2026-04-23T03:42:28.491Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/videos/step-01-navigate-returns.webm"
    },
    {
      "name": "Step 2: Submit return request with multiple item questionnaires",
      "status": "pass",
      "description": "Step 2: Submit return request with multiple item questionnaires",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-02-new-return-form.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-02-products-selected.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-02-per-item-cards-rendered.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-02-per-item-questions-filled.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-02-review.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-02-submission-success.png"
      ],
      "explanation": "The rep completes the multi-step return form with two different products. Each product has its own return question, so the per-item questionnaire step renders one distinct card per returned item. The rep fills a different answer per item and submits the return. This verifies the URS-039 requirement that the form supports submitting multiple individual item questionnaires.",
      "startedAt": "2026-04-23T03:42:33.811Z",
      "finishedAt": "2026-04-23T03:42:59.928Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/videos/step-02-submit-return.webm"
    },
    {
      "name": "Step 3: View output form for each returned item",
      "status": "pass",
      "description": "Step 3: View output form for each returned item",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-03-return-detail-top.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-03-return-detail-items-visible.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-03-return-detail-bottom.png"
      ],
      "explanation": "Immediately after submission, the rep opens the return detail page — the \"output form\" that URS-039 asks the system to generate per returned item. The detail page shows each item with its product, lot number, and the per-item questionnaire response captured on the previous step. This is the primary URS-039 evidence that one form is generated per returned item.",
      "startedAt": "2026-04-23T03:43:07.451Z",
      "finishedAt": "2026-04-23T03:43:09.594Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/videos/step-03-view-output-form.webm"
    },
    {
      "name": "Step 4: Verify return appears in returns list",
      "status": "pass",
      "description": "Step 4: Verify return appears in returns list",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/screenshots/step-04-returns-list-with-return.png"
      ],
      "explanation": "The rep returns to the Returns list and confirms the new return appears with Submitted status. This verifies the system persisted the return and that it is discoverable for follow-up actions.",
      "startedAt": "2026-04-23T03:43:18.317Z",
      "finishedAt": "2026-04-23T03:43:18.317Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z/videos/step-04-verify-in-list.webm"
    }
  ],
  "dbValidations": [
    {
      "name": "Return created for StellarTech → ZuriMED",
      "query": "SELECT id, return_number, status, date_of_event, notes, created_at\n    FROM returns\n    WHERE sales_organization_id = $1\n      AND manufacturer_organization_id = $2\n      AND notes LIKE '%URS-039%'\n      AND created_at > NOW() - INTERVAL '2 hours'\n    ORDER BY created_at DESC",
      "status": "pass",
      "rows": [
        {
          "id": "019db86f-111e-7aab-838a-681ae885f1ff",
          "return_number": "RET-1",
          "status": "submitted",
          "date_of_event": "2026-04-22T05:00:00.000Z",
          "notes": "URS-039 validation run — submitted at 2026-04-23T03:42:41.530Z",
          "created_at": "2026-04-23T03:42:59.841Z"
        }
      ],
      "assertion": "A URS-039 return with status=submitted should exist (marker: \"URS-039 validation run\")."
    },
    {
      "name": "Return number generated",
      "query": "-- return_number from the row above",
      "status": "pass",
      "rows": [
        {
          "return_number": "RET-1"
        }
      ],
      "assertion": "Return should have a return number in RET-XXXXX format."
    },
    {
      "name": "One return_items row per returned product",
      "query": "SELECT ri.id, ri.product_id, op.sku, op.title, ri.lot_number,\n      ri.return_item_number, ri.created_at\n    FROM return_items ri\n    JOIN org_products op ON op.id = ri.product_id\n    WHERE ri.return_id = $1\n    ORDER BY op.sku, ri.lot_number",
      "status": "pass",
      "rows": [
        {
          "id": "019db86f-1120-78bf-baae-b07d9bd8b5e3",
          "product_id": "01989ca1-f2f8-7ab7-8269-7179342797cc",
          "sku": "FL516SNA",
          "title": "FiberLocker® Instrument SN",
          "lot_number": "URS039-FL-001",
          "return_item_number": "RET-1-FL516SNA-1",
          "created_at": "2026-04-23T03:42:59.841Z"
        },
        {
          "id": "019db86f-1120-78bf-baae-b07c8818435d",
          "product_id": "01989ca2-6a54-7834-8376-06a0251bacd8",
          "sku": "SP019N1A",
          "title": "SpeedPatch® PET",
          "lot_number": "URS039-SP-001",
          "return_item_number": "RET-1-SP019N1A-1",
          "created_at": "2026-04-23T03:42:59.841Z"
        }
      ],
      "assertion": "Expected 2 return_items rows (one per returned product)."
    },
    {
      "name": "Each returned item has its own distinct lot number",
      "query": "-- Expected lot numbers: URS039-SP-001, URS039-FL-001",
      "status": "pass",
      "rows": [
        {
          "lot_number": "URS039-FL-001",
          "sku": "FL516SNA",
          "title": "FiberLocker® Instrument SN"
        },
        {
          "lot_number": "URS039-SP-001",
          "sku": "SP019N1A",
          "title": "SpeedPatch® PET"
        }
      ],
      "assertion": "All expected per-item lot numbers should appear exactly once, proving per-item data was stored."
    },
    {
      "name": "Each returned item has its own questionnaire response",
      "query": "SELECT riqr.id, riqr.return_item_id, riqr.question_version_id,\n      riqr.response_text, ri.lot_number, rpqv.question_text, rpqv.question_type\n    FROM return_item_question_responses riqr\n    JOIN return_items ri ON ri.id = riqr.return_item_id\n    JOIN return_product_question_versions rpqv ON rpqv.id = riqr.question_version_id\n    WHERE ri.return_id = $1\n    ORDER BY ri.lot_number",
      "status": "pass",
      "rows": [
        {
          "id": "019db86f-1122-7061-90b1-3ea20d818475",
          "return_item_id": "019db86f-1120-78bf-baae-b07d9bd8b5e3",
          "question_version_id": "03922222-2222-4222-8222-222222222222",
          "response_text": "URS-039 FiberLocker: instrument returned unopened, customer downgraded procedure plan and no longer needs the unit.",
          "lot_number": "URS039-FL-001",
          "question_text": "Describe the condition and reason for returning this FiberLocker unit",
          "question_type": "text"
        },
        {
          "id": "019db86f-1122-7061-90b1-3ea16405e801",
          "return_item_id": "019db86f-1120-78bf-baae-b07c8818435d",
          "question_version_id": "03911111-2222-4222-8222-222222222222",
          "response_text": "URS-039 SpeedPatch: outer seal ruptured on arrival, adhesive layer contaminated and unusable.",
          "lot_number": "URS039-SP-001",
          "question_text": "Describe the defect observed for this SpeedPatch unit",
          "question_type": "text"
        }
      ],
      "assertion": "Every return_items row should have at least one return_item_question_responses row, proving one questionnaire was generated per returned item."
    },
    {
      "name": "Per-item answers persisted match the spec input",
      "query": "-- compares response_text per lot against RETURN_ITEMS definitions",
      "status": "pass",
      "rows": [
        {
          "lot_number": "URS039-FL-001",
          "question_text": "Describe the condition and reason for returning this FiberLocker unit",
          "response_text": "URS-039 FiberLocker: instrument returned unopened, customer downgraded procedure plan and no longer needs the unit.",
          "question_version_id": "03922222-2222-4222-8222-222222222222"
        },
        {
          "lot_number": "URS039-SP-001",
          "question_text": "Describe the defect observed for this SpeedPatch unit",
          "response_text": "URS-039 SpeedPatch: outer seal ruptured on arrival, adhesive layer contaminated and unusable.",
          "question_version_id": "03911111-2222-4222-8222-222222222222"
        }
      ],
      "assertion": "Each item's saved response should be distinct and match the answer the spec entered for that product."
    },
    {
      "name": "Return linked to ZuriMED (manufacturer) and StellarTech (distributor)",
      "query": "SELECT r.manufacturer_organization_id, r.sales_organization_id\n    FROM returns r\n    WHERE r.id = $1",
      "status": "pass",
      "rows": [
        {
          "manufacturer_organization_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
          "sales_organization_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901"
        }
      ],
      "assertion": "Return should be linked to ZuriMED (manufacturer) and StellarTech (distributor)."
    }
  ],
  "overallStatus": "pass",
  "outputDir": "/Users/jason/projects/casecohort/code/validation_test_results/urs-039-return-submission-processing/2026-04-23T03-42-20-318Z",
  "auditStartTime": "2026-04-23T03:42:18.416Z",
  "auditEventEvidence": [
    {
      "createdAt": "2026-04-23T03:42:22.559Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "bob.kauffman@stellartech.com",
      "userId": "17b8c9d0-e1f2-3456-1234-567890123456",
      "organizationName": "StellarTech Medical Solutions",
      "organizationId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "bob.kauffman@stellartech.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:42:29.821Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "bob.kauffman@stellartech.com",
      "userId": "17b8c9d0-e1f2-3456-1234-567890123456",
      "organizationName": "StellarTech Medical Solutions",
      "organizationId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "bob.kauffman@stellartech.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:43:01.187Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "bob.kauffman@stellartech.com",
      "userId": "17b8c9d0-e1f2-3456-1234-567890123456",
      "organizationName": "StellarTech Medical Solutions",
      "organizationId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "bob.kauffman@stellartech.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:43:14.399Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "bob.kauffman@stellartech.com",
      "userId": "17b8c9d0-e1f2-3456-1234-567890123456",
      "organizationName": "StellarTech Medical Solutions",
      "organizationId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "bob.kauffman@stellartech.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    }
  ],
  "auditQuery": "SELECT\n    ae.created_at,\n    ae.event_type,\n    ae.action,\n    ae.user_id,\n    u.email AS user_email,\n    ae.organization_id,\n    o.name AS organization_name,\n    ae.object_id,\n    ae.secondary_object_id,\n    ae.payload,\n    ae.route,\n    ae.trace_id\n  FROM audit_events ae\n  LEFT JOIN users u ON u.id = ae.user_id\n  LEFT JOIN organizations o ON o.id = ae.organization_id\n  WHERE ae.created_at >= $1\n    AND ae.organization_id = ANY($2::uuid[])\n  ORDER BY ae.created_at ASC",
  "auditAssertions": [
    {
      "stepName": "Step 1: Login and navigate to returns",
      "expectedAction": "user_log:user:login",
      "found": true
    }
  ],
  "emailAssertions": []
}