{
  "ursId": "URS-023",
  "title": "Generate Shipping Documentation Linked to Orders",
  "timestamp": "2026-04-23T03:38:55.098Z",
  "durationMs": 110284,
  "config": {
    "inboxUrl": "http://localhost:63510",
    "dbHost": "localhost",
    "dbPort": 63511,
    "dbName": "cc_repinbox_dev"
  },
  "setup": {
    "status": "pass"
  },
  "scenarios": [
    {
      "name": "Step 1: Create order",
      "status": "pass",
      "description": "Step 1: Create order",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-01-location-selected.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-01-products-selected.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-01-review.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-01-order-submitted.png"
      ],
      "explanation": "A sales rep creates a new order in the system. This establishes the source document that shipping documentation will later be linked to, verifying the order initiation flow.",
      "expectedEmailTemplates": [
        "Consignment Order Created"
      ],
      "expectedAuditActions": [
        "user_log:user:login"
      ],
      "startedAt": "2026-04-23T03:39:09.627Z",
      "finishedAt": "2026-04-23T03:39:27.019Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/videos/step-01-create-order.webm"
    },
    {
      "name": "Step 2: Approve and find fulfillment",
      "status": "pass",
      "description": "Step 2: Approve and find fulfillment",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-02-order-requests-list.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-02-order-detail.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-02-approval-dialog.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-02-order-approved.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-02-fulfillment-list.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-02-fulfillment-detail.png"
      ],
      "explanation": "A manufacturer user approves the submitted order and locates the associated fulfillment record. This verifies the order transitions to an approvable state and that the system correctly resolves the fulfillment entry for the order.",
      "expectedAuditActions": [
        "user_log:user:login"
      ],
      "startedAt": "2026-04-23T03:39:35.947Z",
      "finishedAt": "2026-04-23T03:40:04.168Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/videos/step-02-approve-and-find.webm"
    },
    {
      "name": "Step 3: Create shipment",
      "status": "pass",
      "description": "Step 3: Create shipment",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-03-linked-packages.png"
      ],
      "explanation": "A shipping-notice CSV manifest is generated for the fulfillment order, uploaded to S3, and imported via the production Restate `Import.runImportJob` handler — the same path the UI `/packages/upload` form uses. This creates the shipping_package + items, links the package to the fulfillment order, and advances the fulfillment-order status.",
      "startedAt": "2026-04-23T03:40:17.022Z",
      "finishedAt": "2026-04-23T03:40:17.022Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/videos/step-03-create-shipment.webm"
    },
    {
      "name": "Step 4: Verify package",
      "status": "pass",
      "description": "Step 4: Verify package",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-04-fulfillment-with-package.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-04-shipping-documentation.png"
      ],
      "explanation": "The shipment package record is verified to be linked to the originating order. This confirms that shipping documentation is correctly associated with the source order, satisfying the traceability requirement.",
      "startedAt": "2026-04-23T03:40:28.795Z",
      "finishedAt": "2026-04-23T03:40:31.183Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/videos/step-04-verify-package.webm"
    },
    {
      "name": "Step 5: Verify linkage",
      "status": "pass",
      "description": "Step 5: Verify linkage",
      "screenshots": [
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-05-order-with-shipment.png",
        "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/step-05-order-status.png"
      ],
      "explanation": "This step proves the shipment is correctly linked to the order in the database. It provides direct evidence that the shipping record references the originating order, confirming the required order-to-shipment traceability.",
      "startedAt": "2026-04-23T03:40:41.019Z",
      "finishedAt": "2026-04-23T03:40:41.088Z",
      "videoPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/videos/step-05-verify-linkage.webm"
    }
  ],
  "dbValidations": [
    {
      "name": "Order request created",
      "query": "SELECT orq.id, orq.request_number, orq.status, orq.shipping_status,\n        orq.created_at, orq.requested_by_user_id\n      FROM order_requests orq\n      WHERE orq.requested_by_user_id = $1\n        AND orq.created_at > NOW() - INTERVAL '30 minutes'\n      ORDER BY orq.created_at DESC\n      LIMIT 5",
      "status": "pass",
      "rows": [
        {
          "id": "019db86b-be52-7d41-9abc-970d5aa82787",
          "request_number": "OR-1",
          "status": "approved",
          "shipping_status": null,
          "created_at": "2026-04-23T03:39:22.030Z",
          "requested_by_user_id": "17b8c9d0-e1f2-3456-1234-567890123456"
        }
      ],
      "assertion": "At least one order request should have been created by Bob Kauffman recently"
    },
    {
      "name": "Fulfillment order created and linked to order request",
      "query": "SELECT fo.id, fo.order_number, fo.status, fo.order_request_id,\n        fo.fulfilling_organization_id, fo.requesting_organization_id,\n        fo.shipping_street_address, fo.shipping_city, fo.shipping_state, fo.shipping_zip,\n        fo.created_at\n      FROM fulfillment_orders fo\n      JOIN order_requests orq ON fo.order_request_id = orq.id\n      WHERE orq.requested_by_user_id = $1\n        AND orq.created_at > NOW() - INTERVAL '30 minutes'\n      ORDER BY fo.created_at DESC\n      LIMIT 5",
      "status": "pass",
      "rows": [
        {
          "id": "019db86c-1473-796a-82f2-9db373a39f2e",
          "order_number": "OR-1-FO-1",
          "status": "shipped",
          "order_request_id": "019db86b-be52-7d41-9abc-970d5aa82787",
          "fulfilling_organization_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
          "requesting_organization_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
          "shipping_street_address": "100 Charles River Plaza, Suite 300",
          "shipping_city": "Boston",
          "shipping_state": "MA",
          "shipping_zip": "02114",
          "created_at": "2026-04-23T03:39:44.064Z"
        }
      ],
      "assertion": "A fulfillment order should exist linked to the order request"
    },
    {
      "name": "Fulfillment order items match ordered products",
      "query": "SELECT foi.id, foi.fulfillment_order_id, foi.product_id, foi.description, foi.quantity,\n        op.title as product_name, op.sku\n      FROM fulfillment_order_items foi\n      JOIN org_products op ON foi.product_id = op.id\n      JOIN fulfillment_orders fo ON foi.fulfillment_order_id = fo.id\n      JOIN order_requests orq ON fo.order_request_id = orq.id\n      WHERE orq.requested_by_user_id = $1\n        AND orq.created_at > NOW() - INTERVAL '30 minutes'\n      ORDER BY op.title",
      "status": "pass",
      "rows": [
        {
          "id": "019db86c-1474-7f51-9808-33f92938c760",
          "fulfillment_order_id": "019db86c-1473-796a-82f2-9db373a39f2e",
          "product_id": "01978a05-ba4c-7f6d-91c8-bac1498e9bbe",
          "description": "FiberLocker® Instrument (For Cadaver lab use)",
          "quantity": 2,
          "product_name": "FiberLocker® Instrument (For Cadaver lab use)",
          "sku": "FL2025CL"
        },
        {
          "id": "019db86c-1474-7f51-9808-33fac4dd6b0c",
          "fulfillment_order_id": "019db86c-1473-796a-82f2-9db373a39f2e",
          "product_id": "01989ca2-6a54-7834-8376-06a0251bacd8",
          "description": "SpeedPatch® PET",
          "quantity": 3,
          "product_name": "SpeedPatch® PET",
          "sku": "SP019N1A"
        }
      ],
      "assertion": "Fulfillment order should contain both SpeedPatch and FiberLocker products"
    },
    {
      "name": "Shipping package created with correct tracking",
      "query": "SELECT sp.id, sp.tracking_number, sp.carrier, sp.status,\n        sp.organization_id, sp.created_at\n      FROM shipping_packages sp\n      WHERE sp.tracking_number LIKE $1\n        AND sp.organization_id IN ($2, $3)\n        AND sp.created_at > NOW() - INTERVAL '30 minutes'\n      ORDER BY sp.created_at DESC\n      LIMIT 1",
      "status": "pass",
      "rows": [
        {
          "id": "019db86c-7e55-7a5b-88f3-65d08521b59f",
          "tracking_number": "URS023-TEST-1776915536723",
          "carrier": "ups",
          "status": "unknown",
          "organization_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
          "created_at": "2026-04-23T03:40:11.226Z"
        }
      ],
      "assertion": "Shipping package should exist with tracking prefix URS023-TEST- and carrier UPS"
    },
    {
      "name": "Shipping package linked to fulfillment order",
      "query": "SELECT spfo.id, spfo.shipping_package_id, spfo.fulfillment_order_id,\n        sp.tracking_number, fo.order_number\n      FROM shipping_package_fulfillment_orders spfo\n      JOIN shipping_packages sp ON spfo.shipping_package_id = sp.id\n      JOIN fulfillment_orders fo ON spfo.fulfillment_order_id = fo.id\n      WHERE sp.tracking_number LIKE $1\n        AND sp.organization_id IN ($2, $3)\n        AND sp.created_at > NOW() - INTERVAL '30 minutes'",
      "status": "pass",
      "rows": [
        {
          "id": "019db86c-7e5c-7c79-89db-e3e8515d224c",
          "shipping_package_id": "019db86c-7e55-7a5b-88f3-65d08521b59f",
          "fulfillment_order_id": "019db86c-1473-796a-82f2-9db373a39f2e",
          "tracking_number": "URS023-TEST-1776915536723",
          "order_number": "OR-1-FO-1"
        }
      ],
      "assertion": "The shipping_package_fulfillment_orders join table should link the package to the fulfillment order"
    },
    {
      "name": "Shipping package items contain correct products with order linkage",
      "query": "SELECT spi.id, spi.package_id, spi.quantity, spi.order_number, spi.order_line_number,\n        spi.info->>'sku' as sku, spi.info->>'productId' as product_id\n      FROM shipping_package_items spi\n      JOIN shipping_packages sp ON spi.package_id = sp.id\n      WHERE sp.tracking_number LIKE $1\n        AND sp.organization_id IN ($2, $3)\n        AND sp.created_at > NOW() - INTERVAL '30 minutes'\n      ORDER BY spi.id",
      "status": "pass",
      "rows": [
        {
          "id": "019db86c-7e5b-784b-aa2b-0a9996303bf1",
          "package_id": "019db86c-7e55-7a5b-88f3-65d08521b59f",
          "quantity": 3,
          "order_number": "OR-1-FO-1",
          "order_line_number": "1",
          "sku": "SP019N1A",
          "product_id": null
        },
        {
          "id": "019db86c-7e5b-784b-aa2b-0a9ae2b4ad81",
          "package_id": "019db86c-7e55-7a5b-88f3-65d08521b59f",
          "quantity": 2,
          "order_number": "OR-1-FO-1",
          "order_line_number": "2",
          "sku": "FL516SNA",
          "product_id": null
        }
      ],
      "assertion": "Shipping package items should reference the ordered products with correct quantities AND populate order_number + order_line_number for traceability"
    },
    {
      "name": "Fulfillment order status advanced after shipment creation",
      "query": "SELECT fo.id, fo.order_number, fo.status\n      FROM fulfillment_orders fo\n      JOIN order_requests orq ON fo.order_request_id = orq.id\n      WHERE orq.requested_by_user_id = $1\n        AND orq.created_at > NOW() - INTERVAL '30 minutes'\n      ORDER BY fo.created_at DESC\n      LIMIT 1",
      "status": "pass",
      "rows": [
        {
          "id": "019db86c-1473-796a-82f2-9db373a39f2e",
          "order_number": "OR-1-FO-1",
          "status": "shipped"
        }
      ],
      "assertion": "Fulfillment order status should be one of [partially_fulfilled, fulfilled, partially_shipped, shipped, delivered, partially_delivered, completed] once a shipment exists"
    }
  ],
  "overallStatus": "pass",
  "outputDir": "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z",
  "auditStartTime": "2026-04-23T03:38:53.225Z",
  "emailEvidence": [
    {
      "subject": "Consignment Order Created - OR-1-FO-1",
      "template": "Consignment_Order_Created_-_OR-1-FO-1",
      "screenshotPath": "/Users/jason/projects/casecohort/code/validation_test_results/urs-023-shipping-documentation/2026-04-23T03-38-55-096Z/screenshots/emails/2026-04-23T03-39-44-137Z-Consignment_Order_Created_-_OR-1-FO-1.png"
    }
  ],
  "auditEventEvidence": [
    {
      "createdAt": "2026-04-23T03:38:58.163Z",
      "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:39:22.030Z",
      "eventType": "decision",
      "action": "order_request_created",
      "userEmail": "bob.kauffman@stellartech.com",
      "userId": "17b8c9d0-e1f2-3456-1234-567890123456",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": "019db86b-be52-7d41-9abc-970d5aa82787",
      "secondaryObjectId": null,
      "payload": {
        "reason": "Order request OR-1 created (importSource=manual)",
        "priority": "normal",
        "itemCount": 2,
        "orderType": "consignment",
        "performed": true,
        "entityType": "order_request",
        "importSource": "manual",
        "requestNumber": "OR-1",
        "resolvedLocationId": "6ea3b4c5-d6e7-8901-6789-012345678901",
        "resolvedSalesAccountId": "fea7b8c9-d0e1-2345-0123-456789012345",
        "fulfillingOrganizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "requestingOrganizationId": "b2c3d4e5-f6a7-8901-bcde-f12345678901"
      },
      "route": null,
      "traceId": null
    },
    {
      "createdAt": "2026-04-23T03:39:30.549Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "mark.manufacturer@zurimed.com",
      "userId": "d4e5f6a7-b8c9-0123-def1-234567890123",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "mark.manufacturer@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:39:44.169Z",
      "eventType": "transactional_email",
      "action": "order_created",
      "userEmail": null,
      "userId": null,
      "organizationName": "StellarTech Medical Solutions",
      "organizationId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "objectId": "019db86c-1473-796a-82f2-9db373a39f2e",
      "secondaryObjectId": null,
      "payload": {
        "to": [
          "bob.kauffman@stellartech.com"
        ],
        "s3Path": "email-audit/b2c3d4e5-f6a7-8901-bcde-f12345678901/019db86c-148f-7cbf-a847-736b61a3661c/",
        "subject": "Consignment Order Created - OR-1-FO-1",
        "messageId": "dev-console-log",
        "relatedEntityType": "fulfillment_order"
      },
      "route": null,
      "traceId": null
    },
    {
      "createdAt": "2026-04-23T03:40:07.684Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "mark.manufacturer@zurimed.com",
      "userId": "d4e5f6a7-b8c9-0123-def1-234567890123",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "mark.manufacturer@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:40:23.419Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "mark.manufacturer@zurimed.com",
      "userId": "d4e5f6a7-b8c9-0123-def1-234567890123",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "mark.manufacturer@zurimed.com"
      },
      "route": "/login",
      "traceId": "00000000000000000000000000000000"
    },
    {
      "createdAt": "2026-04-23T03:40:35.669Z",
      "eventType": "user_log",
      "action": "user:login",
      "userEmail": "mark.manufacturer@zurimed.com",
      "userId": "d4e5f6a7-b8c9-0123-def1-234567890123",
      "organizationName": "ZuriMED",
      "organizationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "objectId": null,
      "secondaryObjectId": null,
      "payload": {
        "email": "mark.manufacturer@zurimed.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: Create order",
      "expectedAction": "user_log:user:login",
      "found": true
    },
    {
      "stepName": "Step 2: Approve and find fulfillment",
      "expectedAction": "user_log:user:login",
      "found": true
    }
  ],
  "emailAssertions": [
    {
      "stepName": "Step 1: Create order",
      "expectedTemplate": "Consignment Order Created",
      "found": true
    }
  ]
}