From 2cddfaf8591b41cb6b9b9906e47760ed657f0a48 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 6 Jul 2026 14:22:38 -0700 Subject: [PATCH 01/52] Create secret-scan.yml for Gitleaks integration Add GitHub Actions workflow for secret scanning using Gitleaks. --- .github/workflows/secret-scan.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/secret-scan.yml diff --git a/.github/workflows/secret-scan.yml b/.github/workflows/secret-scan.yml new file mode 100644 index 0000000..33df52e --- /dev/null +++ b/.github/workflows/secret-scan.yml @@ -0,0 +1,14 @@ +name: Secret Scan + +on: + pull_request: + push: + +jobs: + gitleaks: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: gitleaks/gitleaks-action@v2 From e20ec9cde85996212eeb87a2c388ad7b2d3b0508 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 6 Jul 2026 14:28:03 -0700 Subject: [PATCH 02/52] Add GITHUB_TOKEN --- .github/workflows/secret-scan.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/secret-scan.yml b/.github/workflows/secret-scan.yml index 33df52e..8c145ee 100644 --- a/.github/workflows/secret-scan.yml +++ b/.github/workflows/secret-scan.yml @@ -11,4 +11,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: gitleaks/gitleaks-action@v2 + - name: Gitleaks + uses: gitleaks/gitleaks-action@v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From e93e26df76b9b35632c9dcf2597d9884680726eb Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 6 Jul 2026 14:31:37 -0700 Subject: [PATCH 03/52] Add workflow_dispatch trigger to secret scan --- .github/workflows/secret-scan.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/secret-scan.yml b/.github/workflows/secret-scan.yml index 8c145ee..6b5cd3e 100644 --- a/.github/workflows/secret-scan.yml +++ b/.github/workflows/secret-scan.yml @@ -3,15 +3,22 @@ name: Secret Scan on: pull_request: push: + workflow_dispatch: jobs: - gitleaks: + secret-scan: runs-on: ubuntu-latest + permissions: + contents: read + security-events: write + steps: - uses: actions/checkout@v4 + with: + fetch-depth: 0 - - name: Gitleaks - uses: gitleaks/gitleaks-action@v2 + - name: Run Gitleaks + uses: gitleaks/gitleaks-action@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From c292c4ab33e0374d53181561bb607317bc6afedd Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 6 Jul 2026 14:38:38 -0700 Subject: [PATCH 04/52] Add pinned commit SHA --- .github/workflows/secret-scan.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/secret-scan.yml b/.github/workflows/secret-scan.yml index 6b5cd3e..9992e56 100644 --- a/.github/workflows/secret-scan.yml +++ b/.github/workflows/secret-scan.yml @@ -5,20 +5,21 @@ on: push: workflow_dispatch: +permissions: + contents: read + security-events: write + jobs: - secret-scan: + gitleaks: runs-on: ubuntu-latest - permissions: - contents: read - security-events: write - steps: - - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Run Gitleaks - uses: gitleaks/gitleaks-action@v2 + uses: gitleaks/gitleaks-action@2cddfaf8591b41cb6b9b9906e47760ed657f0a48 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From b317896ab9f7156f3525e21be767cff8dc19dfb6 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 6 Jul 2026 14:40:20 -0700 Subject: [PATCH 05/52] Update Gitleaks action to use version v2 --- .github/workflows/secret-scan.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/secret-scan.yml b/.github/workflows/secret-scan.yml index 9992e56..b7a7f93 100644 --- a/.github/workflows/secret-scan.yml +++ b/.github/workflows/secret-scan.yml @@ -20,6 +20,6 @@ jobs: fetch-depth: 0 - name: Run Gitleaks - uses: gitleaks/gitleaks-action@2cddfaf8591b41cb6b9b9906e47760ed657f0a48 + uses: gitleaks/gitleaks-action@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 035a74522041830560fd092d09d3695592dcd827 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 13 Jul 2026 10:24:29 -0700 Subject: [PATCH 06/52] Add SECURITY.md for compliance --- .github/workflows/secret-scan.yml | 25 ------------------ SECURITY.md | 43 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 25 deletions(-) delete mode 100644 .github/workflows/secret-scan.yml create mode 100644 SECURITY.md diff --git a/.github/workflows/secret-scan.yml b/.github/workflows/secret-scan.yml deleted file mode 100644 index b7a7f93..0000000 --- a/.github/workflows/secret-scan.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Secret Scan - -on: - pull_request: - push: - workflow_dispatch: - -permissions: - contents: read - security-events: write - -jobs: - gitleaks: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Run Gitleaks - uses: gitleaks/gitleaks-action@v2 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..30d76de --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,43 @@ +# Security Policy + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations. + +## Reporting Security Vulnerabilities + +**Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.** + +Instead, report them to the Microsoft Security Response Center (MSRC): + +- Report a vulnerability: https://msrc.microsoft.com/create-report +- MSRC vulnerability reporting guidance: https://www.microsoft.com/msrc + +If you prefer to submit without logging in, use: + +- https://www.microsoft.com/msrc/report-a-vulnerability + +You should receive a response within 24 hours. If you do not receive a response, please follow up via the reporting portal. + +Please include as much information as possible to help us reproduce and investigate the issue: + +- Type of issue +- Full paths of affected files or components +- Steps to reproduce +- Proof-of-concept code (if available) +- Potential impact assessment + +## Supported Versions + +As this project is under active development, security fixes are typically provided in the latest version of the repository. + +Users are encouraged to: +- Use the latest released version. +- Keep dependencies up to date. +- Follow Azure and Microsoft security best practices when deploying solutions based on this repository. + +## Additional Resources + +For more information about Microsoft's vulnerability disclosure process, see: + +- Microsoft Security Response Center: https://www.microsoft.com/msrc +- Coordinated Vulnerability Disclosure: https://www.microsoft.com/msrc/cv +d From 4e05a9afeaead77c885e82cbcc6856f39099766e Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 13 Jul 2026 10:27:44 -0700 Subject: [PATCH 07/52] Fix link for Coordinated Vulnerability Disclosure --- SECURITY.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 30d76de..8b20f7e 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -39,5 +39,4 @@ Users are encouraged to: For more information about Microsoft's vulnerability disclosure process, see: - Microsoft Security Response Center: https://www.microsoft.com/msrc -- Coordinated Vulnerability Disclosure: https://www.microsoft.com/msrc/cv -d +- Coordinated Vulnerability Disclosure: https://www.microsoft.com/msrc/cvd From 70d687d3aed1b7a260dad35a7bd0b76fd8aebff6 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 11 Aug 2026 00:06:49 +0000 Subject: [PATCH 08/52] Add the two-loop test architecture: testing/ (deterministic) + evals/ (skills) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 0 + Phase 1 of the testing plan. The kit now tests two different things, with opposite success criteria, in two folders: testing/ Loop A — the diagnostic scripts are TOOLS: same DB state must give the same answer. Free, fast, every PR. evals/ Loop B — the text skills should make an AGENT better: measured on quality and token cost. Costs AI credits, run deliberately. Loop A — testing/scenarios/determinism/ - Runs each diagnostic script 3x against one untouched database and asserts the canonicalised --json is identical. - harness/canonicalise.py normalises only what is provably volatile: live measurements, lists ordered by a volatile metric, $sample-derived counts, and sampled size strings. The allowlist is measured, not guessed, and each entry documents the drift that justifies it. - Three traps are explicitly defended: false determinism (must_find asserts the output is non-empty), over-broad normalisation, and a test that cannot fail (a negative control, verified by temporarily emitting $RANDOM from a script). - The fixture is itself reproducible (fixed-seed LCG, never Math.random) and uses incompressible text so it actually reaches TOAST. It found three real volatility sources on first use, all documented rather than silently normalised away: 1. data-integrity-check.sh uses $sample -> type COUNTS wobble (87/13 vs 85/15); the finding (amount holds numbers AND strings) is still asserted. 2. document-bloat-advisor.sh samples dominant_fields -> sizes wobble (title:13B vs 12B); the field ranking / recommended_split_field is asserted. 3. perf-advisor.sh builds slow_queries by TIMING against a threshold, so membership changes with cache warmth — it passed in isolation and failed in the full run. Its structural findings (collscans, index_health) still hold. Loop B — evals/ on Vally (@microsoft/vally-cli, MIT, pinned) - First eval is skill ROUTING, chosen because it is the cheapest useful signal, is graded objectively (skill-invocation is binary — no LLM judge), and is otherwise only ever checked by hand: 3 positive triggers + 2 anti-triggers. - Skills are made discoverable but never hinted, so this measures the skill's organic effect (protocol borrowed from the MSBench runner). - README documents that the mock executor invokes no skills, so anti-triggers pass VACUOUSLY there — mock validates plumbing only, never signal. Full suite: 51 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- evals/.gitignore | 5 + evals/README.md | 121 ++ evals/documentdb-skills/eval.yaml | 111 + evals/package-lock.json | 1867 +++++++++++++++++ evals/package.json | 13 + testing/README.md | 8 + testing/harness/canonicalise.py | 94 + testing/pytest.ini | 1 + testing/scenarios/determinism/SCENARIO.md | 95 + testing/scenarios/determinism/conftest.py | 10 + .../determinism/expected-findings.yaml | 126 ++ testing/scenarios/determinism/fixture.js | 109 + .../determinism/tests/test_determinism.py | 163 ++ 13 files changed, 2723 insertions(+) create mode 100644 evals/.gitignore create mode 100644 evals/README.md create mode 100644 evals/documentdb-skills/eval.yaml create mode 100644 evals/package-lock.json create mode 100644 evals/package.json create mode 100644 testing/harness/canonicalise.py create mode 100644 testing/scenarios/determinism/SCENARIO.md create mode 100644 testing/scenarios/determinism/conftest.py create mode 100644 testing/scenarios/determinism/expected-findings.yaml create mode 100644 testing/scenarios/determinism/fixture.js create mode 100644 testing/scenarios/determinism/tests/test_determinism.py diff --git a/evals/.gitignore b/evals/.gitignore new file mode 100644 index 0000000..a3020d2 --- /dev/null +++ b/evals/.gitignore @@ -0,0 +1,5 @@ +# Vally run artifacts (trajectories, results, cache) — never committed +vally-results/ +.vally-cache/ +node_modules/ +results/ diff --git a/evals/README.md b/evals/README.md new file mode 100644 index 0000000..b6749f1 --- /dev/null +++ b/evals/README.md @@ -0,0 +1,121 @@ +# `evals/` — Loop B: skill-efficacy evaluation + +> **Two folders, two questions.** This repo tests two fundamentally different +> things, and conflating them is the mistake to avoid: +> +> | Folder | Loop | Question | Success looks like | +> |---|---|---|---| +> | [`../testing/`](../testing/) | **A — deterministic** | Do the **diagnostic scripts** return the *same* answer every time? | byte-identical `--json` across 3 runs | +> | **`evals/`** (here) | **B — non-deterministic** | Do the **text skills** make an agent produce *better* output, and at what cost? | higher quality / lower cost than a control run | +> +> Loop A is free, fast, and runs on every PR. Loop B costs AI credits and is run +> deliberately. + +Loop B is built on **[Vally](https://aka.ms/vally)** (`@microsoft/vally-cli`, +MIT, pinned in [`package.json`](package.json)) — Microsoft's evaluation platform +for AI agents. Vally gives us, natively: multi-model runs, skills on/off +variants, an objective **`skill-invocation`** grader, real token/AI-credit +accounting from API `response.usage`, and LLM-judge graders for the cases where +nothing objective exists. + +## Layout + +``` +evals/ +├── package.json # pins @microsoft/vally-cli +├── documentdb-skills/ +│ └── eval.yaml # stimuli + graders (the contract) +└── vally-results/ # run artifacts — gitignored, never committed +``` + +## Prerequisites + +```bash +cd evals && npm install +export VALLY_TELEMETRY_OPTOUT=1 DO_NOT_TRACK=1 # see "Telemetry" below +``` + +**For real (non-mock) runs** the Copilot SDK executor needs an auth token in the +environment (`COPILOT_SDK_AUTH_TOKEN`); without it a run fails with +`Session was not created with authentication info or custom provider`. +Real runs consume AI credits. + +## Running + +```bash +npm run lint # static validation — no agent, no cost +npm run eval:mock # mock executor — free, but see the WARNING below +npm run eval # real model — costs AI credits, needs auth + +# filter by tag +npx vally eval -e documentdb-skills/eval.yaml --tag kind=anti-trigger +``` + +## ⚠️ The mock executor cannot score skill activation + +`--executor mock` never invokes skills (`Skills used 0`). That means: + +- **positive-trigger stimuli always FAIL on mock**, and +- **anti-trigger stimuli always PASS on mock — vacuously.** + +So a green anti-trigger result on mock proves *nothing*, exactly like a +diagnostic script that "passes" determinism by finding nothing (see +[`../testing/scenarios/determinism/`](../testing/scenarios/determinism/)). + +**Use mock only to validate the plumbing** — that the spec parses, skill paths +resolve, graders are wired. **Any real signal requires a real executor.** + +## What Phase 1 covers + +Skill **routing**: does the right skill activate for a given phrasing, and does +**no** DocumentDB skill activate for an unrelated question? + +This was chosen deliberately as the first eval because it is: +- the **cheapest** useful signal, +- graded **objectively** (`skill-invocation` is binary — no LLM judge needed), and +- otherwise only ever verified by hand. + +| Stimulus | Tag | Asserts | +|---|---|---| +| slow query on `db.orders` | `kind=trigger` | `documentdb-query-optimizer` **required** | +| array field + 30-day expiry | `kind=trigger` | `documentdb-indexing` **required** | +| pool exhaustion / timeouts | `kind=trigger` | `documentdb-connection` **required** | +| PostgreSQL partial index | `kind=anti-trigger` | **no** DocumentDB skill called | +| CSS centering | `kind=anti-trigger` | **no** DocumentDB skill called | + +### Honest measurement: skills are never hinted + +`environment.skills` makes the skills *discoverable* exactly as an installed user +would have them — the prompt **never tells the agent to use them**. This measures +the skill's **organic** effect rather than a hinted best case. (Protocol borrowed +from the MSBench `cosmos-sdk-skills` runner.) + +## Grading policy — judge is the last resort + +Prefer, in order: + +1. deterministic / exact match → `../testing/` (Loop A) +2. **measured before/after delta** → apply the advice, re-measure (`run-command`) +3. structural assertion on the artifact → `program`, `file-matches` +4. semantic equivalence vs a golden output +5. **behavioural assertion** → `skill-invocation`, `tool-call`, `metric-threshold` ← *Phase 1 lives here* +6. contract conformance +7. LLM-as-a-judge → only for irreducibly subjective quality, blinded, cross-model panel, and always reported next to an objective score + +A useful trick: convert 7 → 2/3 by **constraining the ask**. "Explain how to +speed this up" is judge-only prose; "emit the exact `createIndex(...)` you +recommend" is executable, so it can be applied and measured. + +## Telemetry + +Vally collects pseudonymous usage telemetry (including a persistent device +identifier) **by default**. Always export `VALLY_TELEMETRY_OPTOUT=1` / +`DO_NOT_TRACK=1` — the npm scripts assume you have. + +## Next (not yet built) + +- Real-model matrix: `claude-opus-5` × `gpt-5.6-sol` × `gemini-3.1-pro-preview`, + skills vs control, `--runs 5` (`vally experiment` + `vally compare`) +- Before/after graders that apply a recommended index and re-measure `explain()`, + paired with `index-redundancy-finder.sh --json` as an anti-gaming guard +- CI: Loop A every PR; Loop B on dispatch/schedule diff --git a/evals/documentdb-skills/eval.yaml b/evals/documentdb-skills/eval.yaml new file mode 100644 index 0000000..ba8f74d --- /dev/null +++ b/evals/documentdb-skills/eval.yaml @@ -0,0 +1,111 @@ +# eval.yaml — DocumentDB skill-efficacy eval (Loop B) +# +# Phase 1 scope: does the RIGHT skill activate for a given phrasing, and — just +# as important — does NO DocumentDB skill activate for an unrelated question? +# +# Why start here (see the grading ladder in the plan): +# * it is the cheapest useful signal (runs on the free `mock` executor), +# * it is graded OBJECTIVELY (`skill-invocation` = binary), no LLM judge, +# * and it regression-tests skill routing, which is otherwise only ever +# checked by hand. +# +# Run: +# npm run lint # static validation, no agent, no cost +# npm run eval:mock # execute against the mock executor (free) +# npm run eval # execute against a real model (costs AI credits) + +name: documentdb-skills +description: >- + Skill-activation contract for the Azure DocumentDB agent kit: the correct + skill must activate for DocumentDB questions, and no DocumentDB skill may + activate for questions about other databases or unrelated topics. +type: capability + +defaults: + timeout: 3m + +environment: + # Skills are made discoverable to the agent exactly as a user would have them + # installed — the agent is NEVER told to use them. This measures the skill's + # *organic* effect rather than a hinted best case. + skills: + - ../../skills/query-optimizer + - ../../skills/indexing + - ../../skills/connection + - ../../skills/data-modeling + - ../../skills/vector-search + +stimuli: + # --------------------------------------------------------------------- + # Positive triggers — the right skill must activate + # --------------------------------------------------------------------- + - name: slow-query-should-trigger-optimizer + tags: { kind: trigger, area: query-perf } + prompt: | + This query against my Azure DocumentDB collection has become slow as the + collection grew. Why is it slow and how do I fix it? + + db.orders.find({ status: "shipped", customer_id: "CUST_004087" }) + .sort({ created_at: -1 }) + graders: + - type: skill-invocation + config: + required: [documentdb-query-optimizer] + + - name: index-type-choice-should-trigger-indexing + tags: { kind: trigger, area: indexing } + prompt: | + I have an Azure DocumentDB collection where each document has an array of + tags, and I also need to expire documents after 30 days. Which index types + should I create, and why? + graders: + - type: skill-invocation + config: + required: [documentdb-indexing] + + - name: pool-exhaustion-should-trigger-connection + tags: { kind: trigger, area: connection } + prompt: | + My Node.js service talking to Azure DocumentDB is throwing connection pool + exhaustion errors and timeouts under load. How should I configure the + MongoClient? + graders: + - type: skill-invocation + config: + required: [documentdb-connection] + + # --------------------------------------------------------------------- + # Anti-triggers — NO DocumentDB skill may activate + # (this is the half that usually goes untested) + # --------------------------------------------------------------------- + - name: postgres-question-should-not-trigger + tags: { kind: anti-trigger } + prompt: "How do I create a partial index in PostgreSQL for a users table?" + graders: + - type: skill-invocation + config: + disallowed: + - documentdb-query-optimizer + - documentdb-indexing + - documentdb-connection + - documentdb-data-modeling + - documentdb-vector-search + + - name: unrelated-question-should-not-trigger + tags: { kind: anti-trigger } + prompt: "How do I center a div horizontally and vertically with CSS grid?" + graders: + - type: skill-invocation + config: + disallowed: + - documentdb-query-optimizer + - documentdb-indexing + - documentdb-connection + - documentdb-data-modeling + - documentdb-vector-search + +scoring: + weights: + skill-invocation: 1.0 + # Skill activation is binary and objective: every stimulus must pass. + threshold: 1.0 diff --git a/evals/package-lock.json b/evals/package-lock.json new file mode 100644 index 0000000..19525be --- /dev/null +++ b/evals/package-lock.json @@ -0,0 +1,1867 @@ +{ + "name": "documentdb-agent-kit-evals", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "documentdb-agent-kit-evals", + "devDependencies": { + "@microsoft/vally-cli": "0.13.0" + } + }, + "node_modules/@azure/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.11.0.tgz", + "integrity": "sha512-IUZydyTUkDnYdstOW9pFOOUQlBjAepK5teihDE3x6yxsPJs/hsAaaYpeGxdxrgtOiJbBKSjKW7MDk7AEhb4LRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.11.0.tgz", + "integrity": "sha512-JjQWO6akOck45PH/XBrxzsQGAiKrfFl4m5iggJ0ItMIz5omRufOXWpqCPpdjKN3vKDzlSUvFjaMb7Zwf0gvAdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.25.0.tgz", + "integrity": "sha512-bMs8ekJLjX8wPV+9IPBges1SLPyuDtE9g5gLDWOpxzKcoOFQnpLGkbcT1tdw3FaAmDS1gnPmMmJ6y/T5B96kIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.4.0.tgz", + "integrity": "sha512-eGwxD0AtncrxeBM4tG8R55Pc3rdX1hNW2WibJAgYpCVA6E93mvvVH+LcssoVjOBrSKWS55yEIHsk0X8ctHmfOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.14.0.tgz", + "integrity": "sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.4.0.tgz", + "integrity": "sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/monitor-opentelemetry-exporter": { + "version": "1.0.0-beta.32", + "resolved": "https://registry.npmjs.org/@azure/monitor-opentelemetry-exporter/-/monitor-opentelemetry-exporter-1.0.0-beta.32.tgz", + "integrity": "sha512-Tk5Tv8KwHhKCQlXET/7ZLtjBv1Zi4lmPTadKTQ9KCURRJWdt+6hu5ze52Tlp2pVeg3mg+MRQ9vhWvVNXMZAp/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.19.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api-logs": "^0.200.0", + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/resources": "^2.0.0", + "@opentelemetry/sdk-logs": "^0.200.0", + "@opentelemetry/sdk-metrics": "^2.0.0", + "@opentelemetry/sdk-trace-base": "^2.0.0", + "@opentelemetry/semantic-conventions": "^1.32.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@github/copilot": { + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.79.tgz", + "integrity": "sha512-uHBm2BYbKJgyfiKp1WokX7QUNHGvzEX0zaGeb3qM3CybP06rsJrX3JgQe95qwwma6vQz0ah9gV68ERW2JqaKRA==", + "dev": true, + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "detect-libc": "^2.1.2" + }, + "bin": { + "copilot": "npm-loader.js" + }, + "optionalDependencies": { + "@github/copilot-darwin-arm64": "1.0.79", + "@github/copilot-darwin-x64": "1.0.79", + "@github/copilot-linux-arm64": "1.0.79", + "@github/copilot-linux-x64": "1.0.79", + "@github/copilot-linuxmusl-arm64": "1.0.79", + "@github/copilot-linuxmusl-x64": "1.0.79", + "@github/copilot-win32-arm64": "1.0.79", + "@github/copilot-win32-x64": "1.0.79" + } + }, + "node_modules/@github/copilot-darwin-arm64": { + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.79.tgz", + "integrity": "sha512-rsw7JoMvlcxXb0yx08oIeEc0x2hUEwKSfhX9ESKfdMVt0Ckrzm4OEvNUyzOpOnLJ9+l3h/aI+u1w5g2ZU2K7UA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "copilot-darwin-arm64": "copilot" + } + }, + "node_modules/@github/copilot-darwin-x64": { + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.79.tgz", + "integrity": "sha512-D983e2lXYnq+KhjA8mTZXonY1+LGfJN9BM195J73shUvx49nRJmibDHWLvVtGeYc+43evGUOAQrOqOspAhhWPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "copilot-darwin-x64": "copilot" + } + }, + "node_modules/@github/copilot-linux-arm64": { + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.79.tgz", + "integrity": "sha512-qqaNkvi92Wg+4OZk/kTWC2nUG72G0vV6eRAo5+PnKaPmjdX1GsI0a+lPxXPEbzX0zYLi/8yrUyANwyyNEsGgXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "linux" + ], + "bin": { + "copilot-linux-arm64": "copilot" + } + }, + "node_modules/@github/copilot-linux-x64": { + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.79.tgz", + "integrity": "sha512-wzotZfvHkItutciLFMXZT2k9Qiii4Ta8tsVDCMQ7CP8hPxV91FyJ1yf3+FFSSfPvWrfYM6BOAiqIuX+LjgRuiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "linux" + ], + "bin": { + "copilot-linux-x64": "copilot" + } + }, + "node_modules/@github/copilot-linuxmusl-arm64": { + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.79.tgz", + "integrity": "sha512-INtRSARl7DdNm2MXnn4GJuK+Y7QD24ANox02uH8htNQwRlNvdvg+YGS1V/mYgLDXFepeUjMjzTNC+i70+kh5uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "linux" + ], + "bin": { + "copilot-linuxmusl-arm64": "copilot" + } + }, + "node_modules/@github/copilot-linuxmusl-x64": { + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.79.tgz", + "integrity": "sha512-LxJAIfPP6Ok/9qpXGZuhnAft3W9JVcK9tbO3jWXcGDJT3v+2NtutyjmP/A7/cDXdTruXVQ4MybwAgacN8Gj/sg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "linux" + ], + "bin": { + "copilot-linuxmusl-x64": "copilot" + } + }, + "node_modules/@github/copilot-sdk": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk/-/copilot-sdk-1.0.9.tgz", + "integrity": "sha512-ZQJYbKhQTvpiUOU4rtPjppzVQv41gGymaD+AuWDbiZPYvSMSB4jZ/epvCrDs7jgqWa52r+j2D9eOQoSzdUMO6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@github/copilot": "^1.0.78", + "koffi": "^3.1.0", + "vscode-jsonrpc": "^8.2.1", + "zod": "^4.3.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@github/copilot-win32-arm64": { + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.79.tgz", + "integrity": "sha512-5wg/ayCBTVy4g4FdO/9BJZRVARY0sgjAn9rBkw5BSJMv4u7Mvxg5Sftlift+V5UWxTyCSHAELZ5IHKvox4Yi8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "win32" + ], + "bin": { + "copilot-win32-arm64": "copilot.exe" + } + }, + "node_modules/@github/copilot-win32-x64": { + "version": "1.0.79", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.79.tgz", + "integrity": "sha512-FTpThWwwCDYnLdE0pfdo5zpAQLLVg36kmC2IKyVMuCYv9iPe7rE1mz7ng/UITN9M3TAMBrwHSvCV3pITvw4W8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "SEE LICENSE IN LICENSE.md", + "optional": true, + "os": [ + "win32" + ], + "bin": { + "copilot-win32-x64": "copilot.exe" + } + }, + "node_modules/@hono/node-server": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.0.tgz", + "integrity": "sha512-XovyyCCnBzW+zKu+z/zq8hwNs4KOR5rEMAOxo2f40Q5xoOI37IMm6MIg2COOUtUApo0i6850MTBKH2u4QLGIqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@koromix/koffi-darwin-arm64": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-arm64/-/koffi-darwin-arm64-3.1.4.tgz", + "integrity": "sha512-/9o0uahf25sNXz7CczfMAsgdHrrrkDK3/d1W5ygJUC7QnpWo80103yTYpYahWP3vTABK5yjzKtURgssv1paskA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-darwin-x64": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-x64/-/koffi-darwin-x64-3.1.4.tgz", + "integrity": "sha512-6IOhfAHbrySr6lYRU720Hg+IMQvtMpN08k9Ppf9WF8NxYRdHLnW1FJm7zCbClfrwudtjhS/piwDYwgAkO5u8cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-freebsd-arm64": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-arm64/-/koffi-freebsd-arm64-3.1.4.tgz", + "integrity": "sha512-JKCWC0awdVvq7Nd/etn4PXFTa7uvyHn7IzqtaOZ3r4dJRdwQVby7Ai/wsQo8UUrJfAYlALkLYgFgU8wgsnAE/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-freebsd-ia32": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-ia32/-/koffi-freebsd-ia32-3.1.4.tgz", + "integrity": "sha512-gU9pShDRLMZzftdGW+mTzyL8Cpa/7nzHPHe5vFakjGgtIzVFzdFBqwli4oB+tFsx44W1VqMMlvMMVlnz54ERiQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-freebsd-x64": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-x64/-/koffi-freebsd-x64-3.1.4.tgz", + "integrity": "sha512-2kppLX97xBM3WoQET6noN4W02zT2fkFRXHYluAwcCcmkEax8AVJ1CYs6hxcZ3kaNPc+5P7yMw3V/b1lg2v3aMw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-linux-arm64": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-arm64/-/koffi-linux-arm64-3.1.4.tgz", + "integrity": "sha512-yYbypuGVGqrNchkAMY59kj+7TZ1c1u9lXRG1+74X9T8G4rOaushoVONNYLuu+ygpbwsKzz/NvEDtRioRU/dQlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-linux-ia32": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-ia32/-/koffi-linux-ia32-3.1.4.tgz", + "integrity": "sha512-IoA/8Qfc6ZEmwMw2Nf4aSp9RfJnxh0UHhdqD4FsVXm0vC797kLMuzj744vv5tll+waVfjrU10jREqjtnMVFoQw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-linux-loong64": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-loong64/-/koffi-linux-loong64-3.1.4.tgz", + "integrity": "sha512-ZUTdea+9dg6CV9J9CIGbhTh0FtSBgvcGKqDrlp9BVQF71jEDKOri1by/TrDe8yQUyC5kzWN8vWnkzES5wT0xDg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-linux-riscv64": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-riscv64/-/koffi-linux-riscv64-3.1.4.tgz", + "integrity": "sha512-CINyyhNYV/8MX52MGhYcik2G6PXH+KEU2JEO7dOONlsGol4lSGyW40RvYA4RQgNYk8q8imGSEScL08X8eOXnaA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-linux-x64": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-x64/-/koffi-linux-x64-3.1.4.tgz", + "integrity": "sha512-x3XnAy/tUTTCX/gMpV7VJNpOQIVQvzNhNYDrpyIeS9Q8/f1qLsE0vp0tj7A/YEDIfMVLqoJtyamfRJc04+vk4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-openbsd-ia32": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-ia32/-/koffi-openbsd-ia32-3.1.4.tgz", + "integrity": "sha512-r9p/fffvmBm7+iT5BZ+c17gZJ280jvmbinrPZqjG14rF9I4lk7xrlV79YfsexkeN4mcPjF2hSPtbMNFBoQU3Dw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-openbsd-x64": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-x64/-/koffi-openbsd-x64-3.1.4.tgz", + "integrity": "sha512-SNp5AxOzheC2YaWPu3Y86wxRHHWf6V9NMl5Ot5nu9OpnP61Yinzug7JwsCeXtcZZTbKLsfsWoT7y4n17UYpOVA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-win32-arm64": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-arm64/-/koffi-win32-arm64-3.1.4.tgz", + "integrity": "sha512-oS8ETU35AelOD6DY7xmmz9qq26Xl38upXWiZbsdxbtH9UEIY0QpenQOuCK/0+q4CtfiLorRUlglGkO9YgPAIeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-win32-ia32": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-ia32/-/koffi-win32-ia32-3.1.4.tgz", + "integrity": "sha512-zd7Qh8s4fzblD9zzuDf44XCbujYg3QrffhgcNJg79/YC6ABT2m0CUtX4yFic9EWm2ps8NPAM25kCTCXPpt3eaw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-win32-x64": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-x64/-/koffi-win32-x64-3.1.4.tgz", + "integrity": "sha512-BPeQXc1bRd0QBOklvsP+AjoRnUzKbPNE6rfx7VNxrebhh09MKld2ibstgKWn6ejQLEcfKEoUJ+WAWIhX4AOsIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@microsoft/vally": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@microsoft/vally/-/vally-0.13.0.tgz", + "integrity": "sha512-mnCnuQLiUtodb8zz31bL/L9bdgDBnbyCCRTkpqbctWDAwvwhCJZY4gaeyni7eOgBoDdSyiEjZXFOVYj7C0LI6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@github/copilot-sdk": "^1.0.7", + "@opentelemetry/api": "^1.9.1", + "js-tiktoken": "^1.0.21", + "mdast-util-from-markdown": "^2.0.3", + "picomatch": "^4.0.5", + "yaml": "^2.9.0", + "zod": "^4.4.3" + }, + "engines": { + "node": ">=22.0.0", + "npm": ">=11.11.1" + } + }, + "node_modules/@microsoft/vally-cli": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@microsoft/vally-cli/-/vally-cli-0.13.0.tgz", + "integrity": "sha512-VOcbD5QcKPiOI+rWfz63MBVnRzmFXtWGGMahRwMQVTcThBfYfIKPtxgbHlDf9oVDkOvO7zCdlsHroL+F6x05sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/monitor-opentelemetry-exporter": "^1.0.0-beta.32", + "@microsoft/vally": "^0.13.0", + "@microsoft/vally-server": "^0.13.0", + "@opentelemetry/api": "^1.9.1", + "@opentelemetry/exporter-trace-otlp-http": "^0.221.0", + "@opentelemetry/resources": "^2.10.0", + "@opentelemetry/sdk-trace-base": "^2.10.0", + "@opentelemetry/sdk-trace-node": "^2.10.0", + "commander": "^15.0.0" + }, + "bin": { + "vally": "dist/index.js" + }, + "engines": { + "node": ">=22.0.0", + "npm": ">=11.11.1" + }, + "optionalDependencies": { + "@vscode/deviceid": "~0.1.5" + } + }, + "node_modules/@microsoft/vally-server": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@microsoft/vally-server/-/vally-server-0.13.0.tgz", + "integrity": "sha512-RmNNxMkwcNIdvMX4iNegsQ98VTiLNA0XUNMeKeYgak9Qd0mpdAxZsCzDjNXSR+0G7WkDVtyHwa2ucLy+uRfVcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hono/node-server": "^2.0.12", + "@microsoft/vally": "^0.13.0", + "better-sqlite3": "^13.0.2", + "hono": "^4.12.32" + }, + "engines": { + "node": ">=22.0.0", + "npm": ">=11.11.1" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.200.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.200.0.tgz", + "integrity": "sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.10.0.tgz", + "integrity": "sha512-bvyMcgLEkozzSzpEEEo1OMoeQ97bxj6Qs2uN3mPrSdDvObMI1myffD/BPqcLlzZO9//d1SqQA/WPw7Cz2AiqhA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.10.0.tgz", + "integrity": "sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.221.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.221.0.tgz", + "integrity": "sha512-AySXiKoC+meiWm6zdVj5T2LnPDZuatveBby1cMOeQteIWsYXAUxs8Sru13G2pVSPrUXz6vF+og7QVBX6GdC/oQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/otlp-exporter-base": "0.221.0", + "@opentelemetry/otlp-transformer": "0.221.0", + "@opentelemetry/sdk-trace": "2.10.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.221.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.221.0.tgz", + "integrity": "sha512-UFPIq80OH3Ns/oPFHRj14d4DTOxUo+MUFU8hUiCq5jTqFhdeJnfVSANHT+xp92409cA+oxzvlZCe6NM1wvCuBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.10.0", + "@opentelemetry/otlp-transformer": "0.221.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.221.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.221.0.tgz", + "integrity": "sha512-lg6lkOU08Az23jVcn/0Els9HP+V8PnR4Km6p0KgpTggS0n/WuhnmY64rSh83Of9iR9nD+dpWr6adlcX8KzAwjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.221.0", + "@opentelemetry/core": "2.10.0", + "@opentelemetry/resources": "2.10.0", + "@opentelemetry/sdk-logs": "0.221.0", + "@opentelemetry/sdk-metrics": "2.10.0", + "@opentelemetry/sdk-trace": "2.10.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/api-logs": { + "version": "0.221.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.221.0.tgz", + "integrity": "sha512-OlanaW1vv7ufTqQ3/fPLI4arGt5ZoM+P8abOMki6uEYnpRazepSWDwDnnw+la7kE26SHVC18//SMccrDvLKOXQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-logs": { + "version": "0.221.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.221.0.tgz", + "integrity": "sha512-FaDcazjyMp7TZZZAsqbo4IkovP0UegoCu0EBkiNt+qCqvUf7FPAsfcrZ3+ZEkKgXZ/jHafop+JoGPDk3A0SmLg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.221.0", + "@opentelemetry/core": "2.10.0", + "@opentelemetry/resources": "2.10.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.10.0.tgz", + "integrity": "sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.10.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.200.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.200.0.tgz", + "integrity": "sha512-VZG870063NLfObmQQNtCVcdXXLzI3vOjjrRENmU37HYiPFa0ZXpXVDsTD02Nh3AT3xYJzQaWKl2X2lQ2l7TWJA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.200.0", + "@opentelemetry/core": "2.0.0", + "@opentelemetry/resources": "2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.0.tgz", + "integrity": "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.0.tgz", + "integrity": "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.10.0.tgz", + "integrity": "sha512-t6r1VSvXNtSDnPXU1FbZeetJb7yyovHmgu0wRSoftxtE0g2rSNhQZQUy69sRUCL+iioJpX8SN/S6wq6ZtvLySQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.10.0", + "@opentelemetry/resources": "2.10.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.9.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace/-/sdk-trace-2.10.0.tgz", + "integrity": "sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.10.0", + "@opentelemetry/resources": "2.10.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.10.0.tgz", + "integrity": "sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.10.0", + "@opentelemetry/resources": "2.10.0", + "@opentelemetry/sdk-trace": "2.10.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.10.0.tgz", + "integrity": "sha512-GZK/G6oZyBLGlH1pUgeDch7D91KoHd2uotUGIkWCPi9GI5T9X0p4L7nNAMDR1BQjkRYoDqo+ddfVx9t5Uhys+Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/context-async-hooks": "2.10.0", + "@opentelemetry/core": "2.10.0", + "@opentelemetry/sdk-trace-base": "2.10.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz", + "integrity": "sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.8.tgz", + "integrity": "sha512-bLMpVcWZNzq6lYOybwFwOAR1IXKcHnhUNqYeHjl1bET/qE3jFPFH+p8Wrh3rU4xwdnifPxmKNESBYnvnmc75aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@vscode/deviceid": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@vscode/deviceid/-/deviceid-0.1.5.tgz", + "integrity": "sha512-D0be67wWo7WyyBqHnRkL2bK7lp7CDH/EMN4kMV6INoKc7kxRL3nsTtngt9JZrOcZdnW59gquGRk+6KFIDyD3QA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "fs-extra": "^11.2.0", + "uuid": "^14.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/better-sqlite3": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-13.0.3.tgz", + "integrity": "sha512-RbOBxmLBG8uvFUc15X9+9SFemKcQ0WBuISBVkpuiaUB2qblC8UWlHEjdWVoZ8AdhSwmoEgsiXKfopX0CQxaACQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^8.0.0" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz", + "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/fs-extra": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/hono": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.1.tgz", + "integrity": "sha512-kdJoFVv2xmayw6cY09H7AbMJMt8Jn5jdlEdXsP7AGBdF2DIptVlKlOLKXP41yPip4/a3yQPv9gVcJYI8YY04dw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/js-tiktoken": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.21.tgz", + "integrity": "sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.5.1" + } + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/koffi": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/koffi/-/koffi-3.1.4.tgz", + "integrity": "sha512-KHX39XIg7afe8ds+0MHPoLiKR9dCzsVK4oAmBUSaeJlcX0xur22f15C2DILbZ6GJ9eyqC+e6Sb1cTG7M17z+Tg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "url": "https://liberapay.com/Koromix" + }, + "optionalDependencies": { + "@koromix/koffi-darwin-arm64": "3.1.4", + "@koromix/koffi-darwin-x64": "3.1.4", + "@koromix/koffi-freebsd-arm64": "3.1.4", + "@koromix/koffi-freebsd-ia32": "3.1.4", + "@koromix/koffi-freebsd-x64": "3.1.4", + "@koromix/koffi-linux-arm64": "3.1.4", + "@koromix/koffi-linux-ia32": "3.1.4", + "@koromix/koffi-linux-loong64": "3.1.4", + "@koromix/koffi-linux-riscv64": "3.1.4", + "@koromix/koffi-linux-x64": "3.1.4", + "@koromix/koffi-openbsd-ia32": "3.1.4", + "@koromix/koffi-openbsd-x64": "3.1.4", + "@koromix/koffi-win32-arm64": "3.1.4", + "@koromix/koffi-win32-ia32": "3.1.4", + "@koromix/koffi-win32-x64": "3.1.4" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "8.9.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.9.1.tgz", + "integrity": "sha512-4eUQWVPCUUUiBjLnHS3cXWeC6ryoPUc0U3rP7IuzapoGbzMqd/r6KKO0clr0b+snQhsrueFEhCZDdK+LK7hxKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uuid": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz", + "integrity": "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", + "integrity": "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/evals/package.json b/evals/package.json new file mode 100644 index 0000000..5a76f81 --- /dev/null +++ b/evals/package.json @@ -0,0 +1,13 @@ +{ + "name": "documentdb-agent-kit-evals", + "private": true, + "description": "Loop B — skill-efficacy evals for the DocumentDB agent kit, run with Vally", + "scripts": { + "lint": "vally lint -e documentdb-skills/eval.yaml", + "eval:mock": "vally eval -e documentdb-skills/eval.yaml --executor mock", + "eval": "vally eval -e documentdb-skills/eval.yaml" + }, + "devDependencies": { + "@microsoft/vally-cli": "0.13.0" + } +} diff --git a/testing/README.md b/testing/README.md index dfd5b2e..18eda1c 100644 --- a/testing/README.md +++ b/testing/README.md @@ -1,5 +1,13 @@ # DocumentDB Agent-Kit — Regression Test Framework +> **This is Loop A — the deterministic half.** The kit tests two different +> things: `testing/` (here) proves the **diagnostic scripts** return the *same* +> answer every time, while [`../evals/`](../evals/) measures whether the **text +> skills** make an agent produce *better* output, and at what token cost. +> Loop A is free and runs on every PR; Loop B costs AI credits. +> See [`scenarios/determinism/`](scenarios/determinism/) for the repeatability +> contract. + This framework guards the agent-kit's **diagnostic skills/scripts** against regression. It is modelled on the [Cosmos DB agent-kit `testing-v2`] framework but adapted for a *diagnostic inspector* rather than an app generator. diff --git a/testing/harness/canonicalise.py b/testing/harness/canonicalise.py new file mode 100644 index 0000000..d684faa --- /dev/null +++ b/testing/harness/canonicalise.py @@ -0,0 +1,94 @@ +"""Canonicalisation helpers for the determinism loop (Loop A). + +A diagnostic script is "deterministic" when the SAME database state yields the +SAME `--json` result. Two kinds of legitimate drift must be normalised away +first, or the assertion produces false failures: + +1. **Volatile values** — live measurements (query latency, PostgreSQL hit ratios + and scan counters). Removed entirely. +2. **Volatile ordering** — lists that are sorted by one of those volatile values + can legitimately reorder. Sorted into a stable order; contents still compared. + +Everything else is compared exactly, so a real nondeterminism bug (unsorted +output, dict ordering, sampling, parallel workers) still fails loudly. +""" + +import json +import re + + +def canonicalise(value, volatile_fields, order_insensitive_lists=(), + sampled_count_maps=(), sampled_size_strings=(), _key=None): + """Return a copy of `value` with volatile data normalised away. + + Args: + value: parsed JSON (dict / list / scalar). + volatile_fields: key names whose values are live measurements. + order_insensitive_lists: key names whose list order is derived from a + volatile metric and must therefore be normalised. + sampled_count_maps: key names holding a {category: count} map produced by + *sampling*. The categories are a stable finding; the counts are not, + so counts are blanked while the category keys are preserved. + sampled_size_strings: key names holding a summary string with sampled + byte sizes (e.g. "body:4002B,notes:2002B"). The sizes are blanked; + the field names and their order — the actual finding — are kept. + _key: the key this value was found under (internal recursion detail). + """ + volatile = set(volatile_fields) + order_insensitive = set(order_insensitive_lists) + sampled_maps = set(sampled_count_maps) + sampled_sizes = set(sampled_size_strings) + + if isinstance(value, dict): + if _key in sampled_maps: + # Keep WHICH categories were observed (the actual finding); drop the + # sampled counts (which vary run to run). + return {k: "" for k in sorted(value)} + return { + k: canonicalise(v, volatile, order_insensitive, sampled_maps, + sampled_sizes, _key=k) + for k, v in sorted(value.items()) + if k not in volatile + } + + if isinstance(value, list): + items = [ + canonicalise(v, volatile, order_insensitive, sampled_maps, + sampled_sizes, _key=_key) + for v in value + ] + if _key in order_insensitive: + # Stable, content-based ordering — independent of how the script + # happened to sort them on this run. + items.sort(key=lambda item: json.dumps(item, sort_keys=True)) + return items + + if isinstance(value, str) and _key in sampled_sizes: + # "body:4002B,notes:2002B,title:13B" -> "body:,notes:,title:" + return re.sub(r"\d+B\b", "", value) + + return value + + +def canonical_json(value, volatile_fields, order_insensitive_lists=(), + sampled_count_maps=(), sampled_size_strings=()): + """Canonicalise and render as a stable JSON string for comparison/diffing.""" + return json.dumps( + canonicalise(value, volatile_fields, order_insensitive_lists, + sampled_count_maps, sampled_size_strings), + sort_keys=True, + indent=2, + ) + + +def is_empty_result(canonical): + """True when a canonicalised result carries no findings at all. + + Guards against 'false determinism': a script that reports nothing is + trivially identical across runs, which proves nothing. + """ + if canonical is None: + return True + if isinstance(canonical, (list, dict)): + return len(canonical) == 0 + return False diff --git a/testing/pytest.ini b/testing/pytest.ini index fce050b..516255c 100644 --- a/testing/pytest.ini +++ b/testing/pytest.ini @@ -13,3 +13,4 @@ markers = healthy_indexes: false-positive guard (well-indexed DB must produce zero redundancy findings) jsoncontract: --json output shape/validity guard for all diagnostic scripts kbrouter: knowledge-base router (kb_route.py) routing/scoring contract tests + determinism: Loop A — diagnostic scripts must return identical --json across repeated runs diff --git a/testing/scenarios/determinism/SCENARIO.md b/testing/scenarios/determinism/SCENARIO.md new file mode 100644 index 0000000..3b1f84c --- /dev/null +++ b/testing/scenarios/determinism/SCENARIO.md @@ -0,0 +1,95 @@ +# Scenario: Determinism (Loop A) + +> **The deterministic half of the kit's testing.** The diagnostic scripts are +> *tools*, not agents: given the same database state they must return the same +> answer every time. This scenario proves that, and fails loudly when they don't. + +## Goal + +For every diagnostic script, run it **3 times** against one untouched database +and assert the `--json` results are identical after canonicalisation. + +Determinism is asserted on `--json` only. The human-readable output deliberately +embeds a wall-clock banner (`Timestamp: …`) and measured latencies, so it is not +byte-stable and is not part of this contract. + +## What the fixture plants + +[`fixture.js`](fixture.js) seeds `test_determinism` so **every** script produces +non-empty output — otherwise the assertion would be vacuous (see below): + +| Collection | Plants | Exercises | +|---|---|---| +| `accounts` | prefix-redundant + duplicate indexes | `index-redundancy-finder.sh` | +| `invoices` | orphaned `account_id` refs, mixed-type `amount` | `data-integrity-check.sh` | +| `articles` | ~6 KB of **incompressible** text per doc | `document-bloat-advisor.sh` | +| `events` | no secondary indexes | `perf-advisor.sh` | +| — | (PG config/cache always reported) | `db-config-advisor.sh` | + +Two fixture details that matter: + +- **The fixture is itself reproducible.** It uses a fixed-seed Lehmer LCG, never + `Math.random()` — a determinism scenario cannot be seeded non-deterministically. +- **The large text is incompressible.** PostgreSQL compresses (pglz) before + storing out of line, so repeated filler text shrinks away and never TOASTs. + Random-ish characters really do land in TOAST, which is what the bloat advisor + looks for. + +## The three traps this suite avoids + +1. **False determinism.** A script that finds *nothing* returns the same empty + result every run — which proves nothing. `must_find` asserts each script + actually reported something. +2. **Over-broad normalisation.** The volatile allowlist is small, **measured** + (not guessed), and documented with the observed drift that justifies each + entry. Drift outside it fails the test. +3. **A test that cannot fail.** `test_injected_drift_is_detected` is a negative + control. Verified end-to-end by temporarily emitting `$RANDOM` from + `db-config-advisor.sh` — the suite failed, as it must. + +## Contract + +[`expected-findings.yaml`](expected-findings.yaml): + +| Key | Meaning | +|---|---| +| `runs` | how many times each script is run (3) | +| `scripts[].must_find` | output must be non-empty (anti-false-determinism) | +| `volatile_fields` | live measurements removed before comparison | +| `order_insensitive_lists` | lists sorted by a volatile metric, so order-normalised | +| `sampled_count_maps` | `{category: count}` maps from `$sample` — counts blanked, categories kept | +| `sampled_size_strings` | summary strings with sampled byte sizes — sizes blanked, field ranking kept | + +## Findings this suite produced on its first run + +It immediately caught **two real sampling nondeterminisms** — both now documented +in `expected-findings.yaml` with a follow-up, not silently normalised away: + +1. **`data-integrity-check.sh`** uses `$sample` for type-consistency, so counts + wobble: `{"number": 87, "string": 13}` vs `{"number": 85, "string": 15}`. + The *finding* (`amount` holds both numbers and strings) is stable and is still + asserted; only the sampled counts are blanked. +2. **`document-bloat-advisor.sh`** derives `dominant_fields` from a sample, so + average field sizes wobble (`title:13B` vs `title:12B`). The field **ranking** + — and therefore `recommended_split_field` — is stable and still asserted. + +3. **`perf-advisor.sh`** builds `slow_queries` by *timing* queries against a + threshold — so it is not only the `ms` value that moves, but **which queries + qualify**. It passed in isolation and failed inside the full test run, where + cache warmth and load differ. The list and its summary count are treated as + volatile; perf-advisor's *structural* findings (collections, `index_health`, + `collscans`) are still asserted. + +**Follow-up (open):** make both samplers deterministic (e.g. order by `_id` and +take the first N) so the counts stabilise too. `slow_queries` is inherently +timing-based and will likely always be volatile — that is a property of the +measurement, not a bug. + +## Run + +```bash +export DB_PASSWORD='' +cd testing && pytest scenarios/determinism +``` + +Requires a running `documentdb-local` container (see the repo README). diff --git a/testing/scenarios/determinism/conftest.py b/testing/scenarios/determinism/conftest.py new file mode 100644 index 0000000..6d5d656 --- /dev/null +++ b/testing/scenarios/determinism/conftest.py @@ -0,0 +1,10 @@ +"""Scenario conftest: seed the determinism fixture into its own database.""" + +from pathlib import Path + +from conftest_base import make_seeded_db_fixture + +seeded_db = make_seeded_db_fixture( + "test_determinism", + Path(__file__).resolve().parent, +) diff --git a/testing/scenarios/determinism/expected-findings.yaml b/testing/scenarios/determinism/expected-findings.yaml new file mode 100644 index 0000000..cccfd12 --- /dev/null +++ b/testing/scenarios/determinism/expected-findings.yaml @@ -0,0 +1,126 @@ +# expected-findings.yaml — determinism (Loop A) +# +# Contract: every diagnostic script, given the SAME database state, must return +# the SAME `--json` result on repeated runs. +# +# Determinism is asserted on `--json` only. The human-readable output embeds a +# wall-clock banner (`Timestamp: ...`) and measured latencies, so it is not — and +# should not be — byte-stable. +# +# Scope of the guarantee: a FIXED database state. Some findings legitimately +# depend on live PostgreSQL counters (e.g. `idx_scan`, which resets when the +# container restarts), so this scenario seeds its own database and does not +# exercise it between the repeated runs. + +database: test_determinism + +# How many times each script is run and compared. All runs must agree. +runs: 3 + +# Scripts under test. `must_find` = the canonicalised output must be non-empty +# (i.e. the script actually reported something). Without this guard a script that +# finds NOTHING would trivially "pass" determinism — the false-determinism trap. +scripts: + - name: index-redundancy-finder.sh + must_find: true + - name: data-integrity-check.sh + must_find: true + - name: document-bloat-advisor.sh + must_find: true + - name: perf-advisor.sh + must_find: true + - name: db-config-advisor.sh + must_find: true + +# --------------------------------------------------------------------------- +# Volatile fields — MEASURED, not guessed. +# +# These keys hold live measurements that legitimately change between two runs +# against an unchanged database. They are removed before comparison. Everything +# else must be byte-stable; unexplained drift fails the test loudly. +# +# Observed drift that motivated each entry (perf-advisor.sh --json, two +# consecutive runs on an unchanged DB): +# slow_queries[].ms 57 -> 61, 473 -> 452, 429 -> 309, 174 -> 168 +# pg.cache_top[].idx_hit_pct 95.65 -> 96.43, 98.55 -> 98.70 +# pg.scan_mix[].seq_scan 85 -> 93 (and idx_scan / idx_scan_pct with it) +# +# Keep this list SHORT and reviewed. Growing it silently is how a real +# nondeterminism bug gets hidden. +# --------------------------------------------------------------------------- +volatile_fields: + # wall-clock / duration + - timestamp + - generated_at + - duration_ms + - elapsed_ms + - ms + # PostgreSQL live counters and ratios + - seq_scan + - idx_scan + - idx_scan_pct + - heap_hit_pct + - idx_hit_pct + - heap_disk_reads + - numBlocksFromCache + - numBlocksFromDisk + # THIRD KNOWN LIMITATION (found when the suite first ran as part of the full + # test run rather than in isolation): `perf-advisor.sh` builds `slow_queries` + # by TIMING queries against a threshold, so it is not just the `ms` value that + # moves — WHICH queries qualify changes with cache warmth and machine load. + # Two runs of the same database disagreed on the membership (and therefore on + # `summary.slow_queries`). The structural findings perf-advisor reports — + # collections, index_health and the `collscans` patterns — remain asserted. + # This key removes both the list and the summary count (same key name). + - slow_queries + +# Lists whose ORDER is derived from a volatile metric (they are sorted by a live +# counter, so two runs can legitimately order them differently). Such lists are +# order-normalised before comparison; their *contents* still must match. +# +# Observed: pg.scan_mix reordered between runs (reviews/inventory swapped) purely +# because their seq_scan counters crossed over. +order_insensitive_lists: + - cache_top + - scan_mix + +# --------------------------------------------------------------------------- +# Sampled count maps — {category: count} produced by a RANDOM sample. +# +# KNOWN LIMITATION (found by this very suite on its first run): +# `data-integrity-check.sh` determines field-type consistency with +# `$sample` (`{$sample:{size:20}}` and `{$sample:{size:min(100,count)}}`), +# which draws a DIFFERENT random subset each run. Two consecutive runs on an +# unchanged database reported: +# invoices.amount {"number": 87, "string": 13} +# invoices.amount {"number": 85, "string": 15} +# +# The *finding* is stable and correct — `amount` really does hold both numbers +# and strings — but the sampled counts are not. So the category KEYS are +# asserted (they are the finding) and the counts are blanked. +# +# FOLLOW-UP (tracked, not silently accepted): make the sampling deterministic +# — e.g. sort by _id and take the first N, or scan the whole collection for +# small ones — so the counts become stable too. Until then this normalisation +# documents exactly what is and is not guaranteed. +# --------------------------------------------------------------------------- +sampled_count_maps: + - types + +# --------------------------------------------------------------------------- +# Sampled size strings — a summary string containing sampled byte sizes. +# +# SECOND KNOWN LIMITATION (also found by this suite on first use): +# `document-bloat-advisor.sh` derives `dominant_fields` from a document +# *sample*, so average field sizes wobble: +# "body:4002B,notes:2002B,title:13B" +# "body:4002B,notes:2002B,title:12B" +# +# The finding — which fields dominate, and in what order (body > notes > title, +# hence recommended_split_field: body) — is stable and is still asserted. Only +# the sampled byte numbers are blanked. +# +# FOLLOW-UP: same fix as above — deterministic sampling would stabilise these. +# --------------------------------------------------------------------------- +sampled_size_strings: + - dominant_fields diff --git a/testing/scenarios/determinism/fixture.js b/testing/scenarios/determinism/fixture.js new file mode 100644 index 0000000..2f7f0c1 --- /dev/null +++ b/testing/scenarios/determinism/fixture.js @@ -0,0 +1,109 @@ +// fixture.js — determinism +// Seeds a database that makes EVERY diagnostic script produce NON-EMPTY output. +// +// That matters: a script trivially looks "deterministic" when it finds nothing +// (empty output is identical every run). This fixture plants real findings for +// each script so the determinism assertion is meaningful: +// +// index-redundancy-finder <- redundant / duplicate / reverse-variant indexes +// data-integrity-check <- orphaned references + mixed field types +// document-bloat-advisor <- large INCOMPRESSIBLE text (really lands in TOAST) +// perf-advisor <- unindexed collections => collection-scan patterns +// db-config-advisor <- always reports PG config/cache (no planting needed) +// +// The fixture itself must be REPRODUCIBLE — a determinism scenario cannot be +// seeded with Math.random(). All "random-looking" data below comes from a +// deterministic LCG with a fixed seed, so re-seeding yields identical data. + +// ---- deterministic PRNG (fixed seed; NOT Math.random) --------------------- +var _seed = 20260810; +function rnd() { // Lehmer / Park-Miller LCG + _seed = (_seed * 48271) % 2147483647; + return _seed / 2147483647; +} +function ri(n) { return Math.floor(rnd() * n); } + +// Incompressible text pool. PostgreSQL compresses (pglz) before moving a value +// out of line, so a repeated sentence would shrink to nothing and never TOAST. +// A pseudo-random character pool does not compress, so the value really is +// stored out-of-line — which is what document-bloat-advisor looks for. +var CH = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; +var POOL = ""; +while (POOL.length < 24000) POOL += CH.charAt(ri(CH.length)); +function text(n) { return POOL.substr(ri(POOL.length - n - 1), n); } + +["accounts", "invoices", "articles", "events"].forEach(function (c) { + try { db[c].drop(); } catch (e) {} +}); + + +// ---- accounts: redundant indexes ------------------------------------------ +var bulk = []; +for (var i = 1; i <= 400; i++) { + bulk.push({ + account_id: i, + email: "a" + i + "@example.test", + tenant_id: (i % 20) + 1, + status: ["active", "inactive", "pending"][i % 3] + }); +} +db.accounts.insertMany(bulk); +db.accounts.createIndex({ tenant_id: 1 }); // prefix-redundant +db.accounts.createIndex({ tenant_id: 1, status: 1 }); // keep +db.accounts.createIndex({ email: 1 }); // duplicate +db.accounts.createIndex({ email: 1 }, { unique: true, name: "email_unique" }); + +// ---- invoices: orphaned refs + mixed types (data integrity) --------------- +bulk = []; +for (var i = 1; i <= 300; i++) { + // every 10th invoice points at an account that does not exist + var acct = (i % 10 === 0) ? 99000 + i : (i % 400) + 1; + bulk.push({ + invoice_id: i, + account_id: acct, + // deliberately mixed type: some amounts are strings + amount: (i % 7 === 0) ? String(i * 3) : i * 3, + created_at: new Date(2024, i % 12, (i % 28) + 1) + }); +} +db.invoices.insertMany(bulk); + +// ---- articles: large INCOMPRESSIBLE text (document bloat / TOAST) --------- +// ~4 KB of incompressible text per doc, well above PostgreSQL's ~2 KB +// out-of-line threshold, and enough total volume to clear the advisor's +// --min-total-kb floor with a TOAST ratio above its default 0.5. +bulk = []; +for (var i = 1; i <= 250; i++) { + bulk.push({ + article_id: i, + title: "Article " + i, + author_id: (i % 40) + 1, + body: text(4000), + notes: text(2000) + }); +} +db.articles.insertMany(bulk); + +// ---- events: no secondary indexes -> collection scans --------------------- +bulk = []; +for (var i = 1; i <= 800; i++) { + bulk.push({ + event_id: i, + kind: ["click", "view", "purchase"][i % 3], + user_id: (i % 150) + 1, + payload_size: (i % 900) + 100 + }); +} +db.events.insertMany(bulk); + +// ---- traffic so "keep" indexes show real reads --------------------------- +for (var i = 1; i <= 60; i++) { + db.accounts.find({ tenant_id: (i % 20) + 1, status: "active" }).limit(1).toArray(); + db.accounts.find({ email: "a" + i + "@example.test" }).limit(1).toArray(); + db.events.find({ kind: "purchase" }).limit(1).toArray(); +} + +print("FIXTURE_READY determinism"); +db.getCollectionNames().sort().forEach(function (c) { + print(" " + c + ": " + db[c].countDocuments() + " docs, " + db[c].getIndexes().length + " indexes"); +}); diff --git a/testing/scenarios/determinism/tests/test_determinism.py b/testing/scenarios/determinism/tests/test_determinism.py new file mode 100644 index 0000000..8e3a4f4 --- /dev/null +++ b/testing/scenarios/determinism/tests/test_determinism.py @@ -0,0 +1,163 @@ +"""Determinism contract (Loop A) — the deterministic half of the kit's testing. + +The diagnostic scripts are *tools*, not agents: given the same database state +they must return the same answer every time. This scenario runs each script +N times (N from expected-findings.yaml) and asserts the canonicalised `--json` +results are identical. + +Three traps this suite is explicitly designed to avoid: + +1. **False determinism** — a script that finds nothing is identical every run. + `must_find` asserts the output is non-empty, so the comparison is meaningful. +2. **Over-broad normalisation** — the volatile-field allowlist is small, + measured, and documented in expected-findings.yaml. Drift outside it fails. +3. **A test that cannot fail** — `test_injected_drift_is_detected` is a negative + control proving the comparison actually catches a difference. +""" + +from pathlib import Path + +import pytest +import yaml + +import kit +from canonicalise import canonical_json, canonicalise, is_empty_result + +_SPEC = yaml.safe_load( + (Path(__file__).resolve().parents[1] / "expected-findings.yaml").read_text() +) +RUNS = _SPEC["runs"] +SCRIPTS = _SPEC["scripts"] +VOLATILE = _SPEC["volatile_fields"] +ORDER_INSENSITIVE = _SPEC.get("order_insensitive_lists", []) +SAMPLED_MAPS = _SPEC.get("sampled_count_maps", []) +SAMPLED_SIZES = _SPEC.get("sampled_size_strings", []) +SCRIPT_IDS = [s["name"] for s in SCRIPTS] + + +@pytest.fixture(scope="session") +def repeated_runs(seeded_db): + """Run every script RUNS times against the same, untouched database. + + Nothing else touches the database between runs, so any difference is the + script's own nondeterminism. + """ + results = {} + for spec in SCRIPTS: + name = spec["name"] + results[name] = [ + kit.run_script(name, "--db", seeded_db, "--json", want_json=True) + for _ in range(RUNS) + ] + return results + + +@pytest.mark.determinism +@pytest.mark.parametrize("script", SCRIPT_IDS) +def test_script_output_is_deterministic(repeated_runs, script): + """Same DB state -> identical canonicalised --json across N runs.""" + runs = repeated_runs[script] + + for i, r in enumerate(runs): + assert r.returncode == 0, ( + f"{script} run {i + 1} exited {r.returncode}\nstderr: {r.stderr[:400]}" + ) + assert r.json is not None, ( + f"{script} run {i + 1} did not emit valid JSON.\n" + f"stdout[:400]: {r.stdout[:400]}" + ) + + baseline = canonical_json(runs[0].json, VOLATILE, ORDER_INSENSITIVE, SAMPLED_MAPS, SAMPLED_SIZES) + for i, r in enumerate(runs[1:], start=2): + current = canonical_json(r.json, VOLATILE, ORDER_INSENSITIVE, SAMPLED_MAPS, SAMPLED_SIZES) + if current != baseline: + import difflib + + diff = "\n".join( + list( + difflib.unified_diff( + baseline.splitlines(), + current.splitlines(), + fromfile="run 1", + tofile=f"run {i}", + lineterm="", + ) + )[:40] + ) + pytest.fail( + f"{script} is NOT deterministic: run 1 and run {i} differ after " + f"canonicalisation.\n" + f"Either the script has a real nondeterminism bug, or a new live " + f"measurement needs adding to `volatile_fields` in " + f"expected-findings.yaml (review it — do not grow the list " + f"silently).\n\n{diff}" + ) + + +@pytest.mark.determinism +@pytest.mark.parametrize( + "script", [s["name"] for s in SCRIPTS if s.get("must_find")] +) +def test_findings_are_non_empty(repeated_runs, script): + """Guard against 'false determinism' — an empty result proves nothing.""" + canonical = canonicalise(repeated_runs[script][0].json, VOLATILE, ORDER_INSENSITIVE, SAMPLED_MAPS, SAMPLED_SIZES) + assert not is_empty_result(canonical), ( + f"{script} produced an EMPTY result on the determinism fixture, so its " + f"determinism assertion is vacuous. Fix fixture.js to plant a finding " + f"this script detects, or set must_find: false with a reason." + ) + + +@pytest.mark.determinism +def test_injected_drift_is_detected(): + """Negative control: the comparison must actually be able to fail. + + A determinism test that can never fail is worse than none at all. + """ + a = {"findings": [{"collection": "accounts", "rule": "PREFIX_REDUNDANT"}]} + b = {"findings": [{"collection": "accounts", "rule": "EXACT_DUPLICATE"}]} + assert canonical_json(a, VOLATILE, ORDER_INSENSITIVE, SAMPLED_MAPS, SAMPLED_SIZES) != canonical_json( + b, VOLATILE, ORDER_INSENSITIVE, SAMPLED_MAPS, SAMPLED_SIZES + ), "canonicalisation is too aggressive — it erased a real difference" + + +@pytest.mark.determinism +def test_volatile_normalisation_is_targeted(): + """The allowlist must remove live measurements — and nothing structural.""" + payload = { + "collection": "orders", + "rule": "PREFIX_REDUNDANT", + "ms": 57, + "scan_mix": [{"collection": "b", "seq_scan": 9}, {"collection": "a", "seq_scan": 1}], + } + out = canonicalise(payload, VOLATILE, ORDER_INSENSITIVE, SAMPLED_MAPS, SAMPLED_SIZES) + + # volatile values removed ... + assert "ms" not in out + assert all("seq_scan" not in entry for entry in out["scan_mix"]) + # ... structural facts preserved ... + assert out["collection"] == "orders" + assert out["rule"] == "PREFIX_REDUNDANT" + # ... and volatile ordering normalised (a before b, regardless of input order) + assert [e["collection"] for e in out["scan_mix"]] == ["a", "b"] + + +@pytest.mark.determinism +def test_sampled_counts_normalised_but_finding_preserved(): + """`$sample`-derived counts are blanked; the categories (the finding) survive. + + `data-integrity-check.sh` samples documents to detect mixed field types, so + the counts wobble run to run. What matters — that `amount` holds BOTH a + number and a string — must still be asserted, and a *different* set of + categories must still be detected as a difference. + """ + run1 = {"field": "amount", "types": {"number": 87, "string": 13}} + run2 = {"field": "amount", "types": {"number": 85, "string": 15}} + same_finding_diff_counts = {"types"} + assert canonical_json(run1, VOLATILE, ORDER_INSENSITIVE, same_finding_diff_counts) == \ + canonical_json(run2, VOLATILE, ORDER_INSENSITIVE, same_finding_diff_counts) + + # but a genuinely different set of types is still caught + run3 = {"field": "amount", "types": {"number": 100}} + assert canonical_json(run1, VOLATILE, ORDER_INSENSITIVE, same_finding_diff_counts) != \ + canonical_json(run3, VOLATILE, ORDER_INSENSITIVE, same_finding_diff_counts) From 7bd3560bb6628a1f19ff6c004f6726b3108dea5c Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 11 Aug 2026 17:17:18 +0000 Subject: [PATCH 09/52] testing: fail fast with a clear message when the DB password is wrong DocumentDB reports a bad SCRAM credential as `MongoServerError: Invalid key`. That surfaced only later, as a "fixture seed failed" error on every scenario, so a simple password mismatch produced ~30 cryptic failures that look like a broken fixture rather than an auth problem. - kit.can_authenticate(): one-shot credential preflight (ping against admin). - conftest.require_container(): if a password is set but does not authenticate, abort the session once via pytest.exit with an actionable message that names the real cause, shows how to recover the container's password via `docker inspect`, and explains the misleading "Invalid key" wording. Behaviour now: no password -> skip (unchanged) wrong password -> single, explicit auth error (was ~30 cryptic failures) correct password -> 51 passed Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- testing/conftest.py | 24 ++++++++++++++++++++++-- testing/harness/kit.py | 15 +++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/testing/conftest.py b/testing/conftest.py index 470a349..6c1f3d4 100644 --- a/testing/conftest.py +++ b/testing/conftest.py @@ -32,14 +32,34 @@ def container_name(request): def require_container(container_name): """Skip everything if the DocumentDB container isn't running or no password is configured (credentials are never baked in — set DOCDB_PASSWORD or - DB_PASSWORD).""" + DB_PASSWORD). If a password IS set but wrong, fail fast with a clear + message instead of ~30 cryptic seed failures.""" if not kit.DB_PASSWORD: pytest.skip("No DB password configured — set DOCDB_PASSWORD or DB_PASSWORD " - "(local demo: export DB_PASSWORD=Test1234)") + "(e.g. export DB_PASSWORD='')") if not kit.container_running(container_name): pytest.skip(f"DocumentDB container '{container_name}' is not running " f"(start it, or pass --container / set DOCDB_CONTAINER)") + ok, detail = kit.can_authenticate(container_name) + if not ok: + # A bad credential is fatal for the whole session: aborting once with a + # clear message beats ~50 identical setup errors. + pytest.exit( + "Cannot authenticate to the DocumentDB container " + f"'{container_name}' as user '{kit.DB_USER}'.\n\n" + f" The server said: {detail}\n\n" + " NOTE: DocumentDB reports a wrong password as " + "'MongoServerError: Invalid key' — it is an AUTH failure, not a " + "malformed document.\n\n" + " Fix: export the password the container was created with, e.g.\n" + " docker inspect " + container_name + + " --format '{{range .Config.Env}}{{println .}}{{end}}' | grep PASSWORD\n" + " export DB_PASSWORD=''\n" + " Or recreate the container with a password you choose.", + returncode=2, + ) + @pytest.fixture def expected(request): diff --git a/testing/harness/kit.py b/testing/harness/kit.py index 86db1ff..932a60d 100644 --- a/testing/harness/kit.py +++ b/testing/harness/kit.py @@ -86,6 +86,21 @@ def mongosh_eval(db, js, container=CONTAINER, timeout=240): return (p.stdout or "") + (p.stderr or "") +def can_authenticate(container=CONTAINER, timeout=60): + """Return (ok, detail) for a credential preflight against the container. + + DocumentDB reports a bad SCRAM credential as the *very* misleading + `MongoServerError: Invalid key`, which otherwise surfaces much later as a + confusing "fixture seed failed" on every scenario. Checking once, up front, + turns ~30 cryptic failures into one actionable message. + """ + out = mongosh_eval("admin", "db.runCommand({ping:1}).ok", + container=container, timeout=timeout) + if "1" in (out or "").split(): + return True, "" + return False, (out or "").strip()[:300] + + def seed(db, fixture_path, container=CONTAINER, timeout=300): """Copy a .js fixture into the container and execute it against `db`.""" fixture_path = Path(fixture_path) From 52f540ede86432b45e4ff331fbb7943d7a8ee0c0 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 03:43:10 +0000 Subject: [PATCH 10/52] Fix four measured nondeterminism bugs in the diagnostic scripts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The determinism suite (Loop A) found four real defects. All four are fixed at the source rather than normalised away in the volatile-field allowlist. 1. data-integrity-check.sh used $sample for type-consistency, so the reported counts changed between runs on an unchanged database ({"number":87,"string":13} vs {"number":85,"string":15}). 2. document-bloat-advisor.sh used $sample for dominant_fields, so average field sizes wobbled ("title:13B" vs "title:12B"). Both now use a deterministic sampler: half the documents from each end of _id order. Head+tail rather than head-only is deliberate — mixed types usually come from schema drift over time, so the oldest and newest documents are where the disagreement lives. Sampling only the head would systematically miss a type change introduced after the collection was created. 3. perf-advisor.sh decided slow_queries MEMBERSHIP with a wall-clock threshold, so which queries qualified changed with cache warmth. Split into query_timings (every probe; deterministic membership and results, volatile ms) and slow_queries (the >threshold subset, kept for compatibility and correctly treated as a measurement). 4. perf-advisor.sh built COLLSCAN probe values from findOne(), i.e. an arbitrary document. A numeric probe of val/2 therefore scanned a different fraction of the collection each run, changing docs_scanned and sometimes the plan PostgreSQL chose. Now probes the first document by _id. Bug 4 was invisible until bug 3 was fixed: the timing noise being normalised away was masking a genuine logic defect underneath. That is the argument for keeping the volatile-field allowlist as small as possible. sampled_count_maps and sampled_size_strings are now empty but retained, so re-introducing a normalisation is a visible, reviewable change. Verified: 51 passed; determinism suite green across 3 consecutive invocations. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- scripts/data-integrity-check.sh | 40 ++++++++-- scripts/document-bloat-advisor.sh | 25 +++++- scripts/perf-advisor.sh | 58 +++++++++++--- testing/scenarios/determinism/SCENARIO.md | 67 +++++++++------- .../determinism/expected-findings.yaml | 76 +++++++++---------- .../json-contract/tests/test_json_contract.py | 8 +- 6 files changed, 187 insertions(+), 87 deletions(-) diff --git a/scripts/data-integrity-check.sh b/scripts/data-integrity-check.sh index 50af17a..7a2f3b1 100755 --- a/scripts/data-integrity-check.sh +++ b/scripts/data-integrity-check.sh @@ -67,7 +67,35 @@ hecho() { [[ "$JSON" == "1" ]] || echo "$@"; } # JS prelude: JSON_MODE toggles whether the shared check bodies print the human # report (out) or only their machine-readable fragment. -JS_MODE="var JSON_MODE=$([[ "$JSON" == "1" ]] && echo true || echo false); function out(s){ if(!JSON_MODE) print(s); }" +# +# It also defines detSample() — a DETERMINISTIC sampler used instead of +# `$sample`. `$sample` draws a different random subset on every run, so the +# reported type counts changed between two runs against an unchanged database +# (measured: amount {number:87,string:13} then {number:85,string:15}). The +# finding was stable but the numbers were not, which makes the output +# unreproducible and impossible to diff in CI. +# +# detSample() takes half the documents from each end of _id order. Head+tail +# rather than head-only is deliberate: mixed types usually arrive from schema +# drift over time, so the oldest and newest documents are exactly where the +# disagreement lives. Sampling only the head would systematically miss a type +# change introduced after the collection was created. +JS_PRELUDE=' +function detSample(coll, size) { + var half = Math.ceil(size / 2); + var head = db[coll].find().sort({ _id: 1 }).limit(half).toArray(); + var tail = db[coll].find().sort({ _id: -1 }).limit(size - half).toArray(); + var seen = {}, picked = []; + head.concat(tail).forEach(function (d) { + var k = String(d._id); + if (seen[k]) return; + seen[k] = 1; + picked.push(d); + }); + return picked; +} +' +JS_MODE="var JSON_MODE=$([[ "$JSON" == "1" ]] && echo true || echo false); function out(s){ if(!JSON_MODE) print(s); } $JS_PRELUDE" # ── Shared check bodies (single source of truth for both modes) ───────────── read -r -d '' CHECK1_JS <<'JS' @@ -80,7 +108,7 @@ var collSet = new Set(colls); // Strategy: find fields ending in _id (but not _id itself), and check // if there is a matching collection (singular or plural) colls.forEach(function(c) { - var sample = db[c].aggregate([{$sample:{size:20}}]).toArray(); + var sample = detSample(c, 20); if (sample.length === 0) return; // Gather all top-level fields that end with "_id" (excluding _id) @@ -106,8 +134,10 @@ colls.forEach(function(c) { } if (!targetColl) return; - // Check if the target collection actually has this field (or _id) - var targetSample = db[targetColl].findOne(); + // Check if the target collection actually has this field (or _id). + // First-by-_id rather than findOne(): an arbitrary document could be + // missing an optional field and flip the result between runs. + var targetSample = db[targetColl].find().sort({_id:1}).limit(1).toArray()[0]; if (!targetSample) return; var targetField = targetSample[fk] !== undefined ? fk : null; if (!targetField && fk === targetColl.replace(/s$/, "") + "_id") { @@ -153,7 +183,7 @@ colls.forEach(function(c) { if (count < 5) return; var sampleSize = Math.min(100, count); - var sample = db[c].aggregate([{$sample:{size:sampleSize}}]).toArray(); + var sample = detSample(c, sampleSize); if (sample.length === 0) return; // Record the scalar BSON type seen for each field across sampled docs diff --git a/scripts/document-bloat-advisor.sh b/scripts/document-bloat-advisor.sh index b0c59b9..2f031d0 100755 --- a/scripts/document-bloat-advisor.sh +++ b/scripts/document-bloat-advisor.sh @@ -110,11 +110,28 @@ while IFS=$'\t' read -r coll heap toast total; do if [[ "$over" == "1" ]]; then flagged=$((flagged+1)) total_toast=$(( total_toast + toast )) - # MongoDB avgObjSize + dominant top-level fields (sampled) + # MongoDB avgObjSize + dominant top-level fields. + # Deterministic sampler (head+tail of _id order), NOT `$sample`: + # a random subset made the reported average field sizes wobble between + # runs (measured: "title:13B" vs "title:12B" on an unchanged database), + # which made the advisor's output impossible to diff. FIELDS=$(run_mongosh ' + function detSample(coll, size) { + var half = Math.ceil(size / 2); + var head = db[coll].find().sort({ _id: 1 }).limit(half).toArray(); + var tail = db[coll].find().sort({ _id: -1 }).limit(size - half).toArray(); + var seen = {}, picked = []; + head.concat(tail).forEach(function (d) { + var k = String(d._id); + if (seen[k]) return; + seen[k] = 1; + picked.push(d); + }); + return picked; + } var s = db.'"$coll"'.stats(); var avg = s.avgObjSize || 0; - var docs = db.'"$coll"'.aggregate([{$sample:{size:20}}]).toArray(); + var docs = detSample("'"$coll"'", 20); var acc = {}; docs.forEach(function(doc){ Object.keys(doc).forEach(function(k){ @@ -126,7 +143,9 @@ while IFS=$'\t' read -r coll heap toast total; do }); var n = docs.length || 1; var arr = Object.keys(acc).map(function(k){ return {f:k, avg:Math.round(acc[k]/n)}; }); - arr.sort(function(a,b){ return b.avg - a.avg; }); + // Sort by size DESC, then by field name ASC so equal-sized fields + // never swap places between runs. + arr.sort(function(a,b){ return (b.avg - a.avg) || (a.f < b.f ? -1 : a.f > b.f ? 1 : 0); }); print("AVG " + avg); arr.slice(0,3).forEach(function(x){ print("FLD " + x.f + " " + x.avg); }); ') diff --git a/scripts/perf-advisor.sh b/scripts/perf-advisor.sh index 6bddea1..e4b7036 100755 --- a/scripts/perf-advisor.sh +++ b/scripts/perf-advisor.sh @@ -124,7 +124,8 @@ fi if [[ "$JSON" == "1" ]]; then # Mongo-layer findings per database (index health, COLLSCAN audit, slow queries). read -r -d '' MONGO_JSON_JS <<'JS' -var out = { db: db.getName(), collections: [], index_health: [], collscans: [], slow_queries: [] }; +var out = { db: db.getName(), collections: [], index_health: [], collscans: [], + query_timings: [], slow_queries: [] }; var colls = db.getCollectionNames().sort(); // --- overview + index health --- @@ -153,6 +154,14 @@ colls.forEach(function(c) { }); // --- COLLSCAN audit (same logic as the human report) --- +// probeDoc() picks the FIRST document by _id rather than `findOne()`, which +// returns an arbitrary document. The probe VALUES are taken from this document, +// so an arbitrary pick made the audit nondeterministic: a numeric probe built +// from `val/2` scanned a different fraction of the collection depending on +// which document turned up, which changed both `docs_scanned` and — because +// PostgreSQL costs the two plans differently — sometimes the chosen plan, and +// therefore whether the query was reported as a collection scan at all. +function probeDoc(c){ var a=db[c].find().sort({_id:1}).limit(1).toArray(); return a.length?a[0]:null; } function effectiveIndex(node){ var g=0; while(node&&g++<50){ if(node.stage==="COLLSCAN")return "__COLLSCAN__"; if(node.stage==="IXSCAN")return node.indexName||"?"; node=node.inputStage||(node.inputStages?node.inputStages[0]:null);} return null; } function testQuery(coll, field, label, filter, indexedFields){ try { @@ -165,7 +174,7 @@ function testQuery(coll, field, label, filter, indexedFields){ } colls.forEach(function(c) { var count=db[c].estimatedDocumentCount(); if (count<10) return; - var sample=db[c].findOne(); if (!sample) return; + var sample=probeDoc(c); if (!sample) return; var indexedFields={}; db[c].getIndexes().forEach(function(ix){var k=Object.keys(ix.key||{}); if(k.length)indexedFields[k[0]]=true;}); Object.keys(sample).filter(function(k){return k!=="_id";}).forEach(function(field){ var val=sample[field]; @@ -175,13 +184,33 @@ colls.forEach(function(c) { }); }); -// --- query timing (report anything >50ms) --- -function timeQuery(coll,label,fn){ var s=Date.now(); var n=0; try{n=fn();}catch(e){n=-1;} var ms=Date.now()-s; if(ms>50) out.slow_queries.push({collection:coll, query:label, ms:ms, results:n}); } +// --- query timing --- +// +// `query_timings` records EVERY probe that was run, whether fast or slow. Its +// membership is therefore deterministic: the same database always yields the +// same set of probes in the same order, and only the measured `ms` moves. +// +// `slow_queries` is the >threshold subset, kept for backward compatibility. It +// is INHERENTLY volatile — whether a query crosses 50 ms depends on cache +// warmth and machine load, so the same database can produce different +// membership on two consecutive runs (measured). Treat it as a measurement, +// not a finding; filter `query_timings` by `ms` yourself if you need a +// different threshold. +var SLOW_MS = 50; +function timeQuery(coll,label,fn){ + var s=Date.now(); var n=0; try{n=fn();}catch(e){n=-1;} var ms=Date.now()-s; + out.query_timings.push({collection:coll, query:label, ms:ms, results:n}); + if (ms>SLOW_MS) out.slow_queries.push({collection:coll, query:label, ms:ms, results:n}); +} colls.forEach(function(c){ var count=db[c].estimatedDocumentCount(); if (count<100) return; - var sample=db[c].findOne(); if (!sample) return; + var sample=probeDoc(c); if (!sample) return; timeQuery(c,"countDocuments()",function(){return db[c].countDocuments();}); - var sf=Object.keys(sample).filter(function(k){return k!=="_id";}).find(function(f){return typeof sample[f]==="string"&&sample[f].length<50;}); + // Pick the probe field deterministically: `findOne()` key order is stable + // for a given document, but sort the candidates anyway so the chosen field + // cannot depend on storage-layer key ordering. + var sf=Object.keys(sample).filter(function(k){return k!=="_id";}).sort() + .find(function(f){return typeof sample[f]==="string"&&sample[f].length<50;}); if (sf){ var v=sample[sf]; timeQuery(c,"find({"+sf+":...})",function(){return db[c].find(JSON.parse("{\""+sf+"\":\""+v+"\"}")).count();}); timeQuery(c,"aggregate $group by "+sf,function(){return db[c].aggregate([{$group:{_id:"$"+sf,n:{$sum:1}}}]).toArray().length;}); @@ -189,7 +218,12 @@ colls.forEach(function(c){ }); out.summary = { collections: out.collections.length, index_health_findings: out.index_health.length, - collscan_patterns: out.collscans.length, slow_queries: out.slow_queries.length }; + collscan_patterns: out.collscans.length, + // deterministic: how many probes ran + query_probes: out.query_timings.length, + // volatile: how many crossed the latency threshold this run + slow_queries: out.slow_queries.length, + slow_threshold_ms: SLOW_MS }; print("MONGOJSON " + JSON.stringify(out)); JS @@ -392,8 +426,9 @@ colls.forEach(function(c) { if (count < 10) return; // skip tiny collections print(" Testing " + c + " (" + count + " docs)..."); - // Sample a document to discover fields - var sample = db[c].findOne(); + // Sample a document to discover fields. First-by-_id, not findOne(): an + // arbitrary document gives arbitrary probe values and an unstable report. + var sample = db[c].find().sort({_id:1}).limit(1).toArray()[0]; if (!sample) return; var fields = Object.keys(sample).filter(function(k) { return k !== "_id"; }); @@ -452,8 +487,9 @@ colls.forEach(function(c) { if (count < 100) return; print(" ── " + c + " (" + count + " docs) ──"); - // Sample to get realistic filter values - var sample = db[c].findOne(); + // Sample to get realistic filter values (first-by-_id, so the same database + // always produces the same probes) + var sample = db[c].find().sort({_id:1}).limit(1).toArray()[0]; if (!sample) return; // Test count (full scan baseline) diff --git a/testing/scenarios/determinism/SCENARIO.md b/testing/scenarios/determinism/SCENARIO.md index 3b1f84c..dadd7d8 100644 --- a/testing/scenarios/determinism/SCENARIO.md +++ b/testing/scenarios/determinism/SCENARIO.md @@ -57,33 +57,46 @@ Two fixture details that matter: | `scripts[].must_find` | output must be non-empty (anti-false-determinism) | | `volatile_fields` | live measurements removed before comparison | | `order_insensitive_lists` | lists sorted by a volatile metric, so order-normalised | -| `sampled_count_maps` | `{category: count}` maps from `$sample` — counts blanked, categories kept | -| `sampled_size_strings` | summary strings with sampled byte sizes — sizes blanked, field ranking kept | - -## Findings this suite produced on its first run - -It immediately caught **two real sampling nondeterminisms** — both now documented -in `expected-findings.yaml` with a follow-up, not silently normalised away: - -1. **`data-integrity-check.sh`** uses `$sample` for type-consistency, so counts - wobble: `{"number": 87, "string": 13}` vs `{"number": 85, "string": 15}`. - The *finding* (`amount` holds both numbers and strings) is stable and is still - asserted; only the sampled counts are blanked. -2. **`document-bloat-advisor.sh`** derives `dominant_fields` from a sample, so - average field sizes wobble (`title:13B` vs `title:12B`). The field **ranking** - — and therefore `recommended_split_field` — is stable and still asserted. - -3. **`perf-advisor.sh`** builds `slow_queries` by *timing* queries against a - threshold — so it is not only the `ms` value that moves, but **which queries - qualify**. It passed in isolation and failed inside the full test run, where - cache warmth and load differ. The list and its summary count are treated as - volatile; perf-advisor's *structural* findings (collections, `index_health`, - `collscans`) are still asserted. - -**Follow-up (open):** make both samplers deterministic (e.g. order by `_id` and -take the first N) so the counts stabilise too. `slow_queries` is inherently -timing-based and will likely always be volatile — that is a property of the -measurement, not a bug. +| `sampled_count_maps` | **now empty** — kept so re-introducing a normalisation is a reviewable change | +| `sampled_size_strings` | **now empty** — same reason | + +## Findings this suite produced — and what was done about them + +The suite caught **four real nondeterminism bugs**. All four have been **fixed at +the source** rather than normalised away. The history is kept because it is the +evidence that this suite does something. + +| # | Script | Bug | Fix | +|---|---|---|---| +| 1 | `data-integrity-check.sh` | `$sample` for type-consistency → counts wobbled (`{"number":87,"string":13}` vs `{"number":85,"string":15}`) | deterministic sampler | +| 2 | `document-bloat-advisor.sh` | `$sample` for `dominant_fields` → sizes wobbled (`title:13B` vs `title:12B`) | deterministic sampler + tie-broken sort | +| 3 | `perf-advisor.sh` | `slow_queries` membership decided by a wall-clock threshold → *which* queries qualified changed with cache warmth | split into `query_timings` (deterministic membership) + `slow_queries` (measurement) | +| 4 | `perf-advisor.sh` | COLLSCAN audit built probe values from `findOne()`, i.e. an **arbitrary** document → a numeric probe of `val/2` scanned a different fraction each run, changing `docs_scanned` and sometimes the chosen plan | probe the first document by `_id` | + +Bug 4 is the interesting one: it was **invisible until bug 3 was fixed**. While +the timing noise was being normalised away, it masked a genuine logic defect +underneath. That is the argument for keeping the volatile-field allowlist as +small as possible — every entry can hide a real bug. + +### The deterministic sampler + +Both samplers now take half the documents from **each end** of `_id` order +instead of `$sample`. Head+tail rather than head-only is deliberate: mixed types +usually arrive from schema drift over time, so the oldest and newest documents +are exactly where the disagreement lives. Sampling only the head would +systematically miss a type change introduced after the collection was created. + +Verified after the fix: 3 consecutive runs byte-identical, with the findings +still detected (`invoices.amount {"number":86,"string":14}`; +`dominant_fields "body:4002B,notes:2002B,title:12B"`). + +### What remains volatile — and why that is correct + +`slow_queries` and the PostgreSQL live counters stay in the allowlist. These are +**measurements, not findings**: whether a query crosses 50 ms genuinely depends +on cache warmth and machine load. The fix was not to force them stable but to +stop *deriving structure* from them — hence `query_timings`, whose membership and +`results` counts are deterministic while only `ms` moves. ## Run diff --git a/testing/scenarios/determinism/expected-findings.yaml b/testing/scenarios/determinism/expected-findings.yaml index cccfd12..1fcb798 100644 --- a/testing/scenarios/determinism/expected-findings.yaml +++ b/testing/scenarios/determinism/expected-findings.yaml @@ -64,14 +64,17 @@ volatile_fields: - heap_disk_reads - numBlocksFromCache - numBlocksFromDisk - # THIRD KNOWN LIMITATION (found when the suite first ran as part of the full - # test run rather than in isolation): `perf-advisor.sh` builds `slow_queries` - # by TIMING queries against a threshold, so it is not just the `ms` value that - # moves — WHICH queries qualify changes with cache warmth and machine load. - # Two runs of the same database disagreed on the membership (and therefore on - # `summary.slow_queries`). The structural findings perf-advisor reports — - # collections, index_health and the `collscans` patterns — remain asserted. - # This key removes both the list and the summary count (same key name). + # `perf-advisor.sh` reports query latency two ways: + # * `query_timings` — EVERY probe it ran. Membership and `results` counts are + # deterministic; only the measured `ms` moves. This is what the determinism + # contract asserts. + # * `slow_queries` — the subset over the latency threshold. Whether a query + # crosses 50 ms depends on cache warmth and machine load, so its MEMBERSHIP + # legitimately changes between runs. It is a measurement, not a finding. + # + # Originally `slow_queries` was the only timing output, which made the whole + # timing section unassertable. Splitting it (see scripts/perf-advisor.sh) means + # the deterministic part is now checked rather than discarded. - slow_queries # Lists whose ORDER is derived from a volatile metric (they are sorted by a live @@ -85,42 +88,35 @@ order_insensitive_lists: - scan_mix # --------------------------------------------------------------------------- -# Sampled count maps — {category: count} produced by a RANDOM sample. +# Sampled values — NOW EMPTY, because the sampling was made deterministic. # -# KNOWN LIMITATION (found by this very suite on its first run): -# `data-integrity-check.sh` determines field-type consistency with -# `$sample` (`{$sample:{size:20}}` and `{$sample:{size:min(100,count)}}`), -# which draws a DIFFERENT random subset each run. Two consecutive runs on an -# unchanged database reported: -# invoices.amount {"number": 87, "string": 13} -# invoices.amount {"number": 85, "string": 15} +# History (kept deliberately: it is the evidence that this suite works). +# This scenario found two real nondeterminism bugs on its very first run: # -# The *finding* is stable and correct — `amount` really does hold both numbers -# and strings — but the sampled counts are not. So the category KEYS are -# asserted (they are the finding) and the counts are blanked. +# 1. `data-integrity-check.sh` used `$sample` for field-type consistency, so +# two runs on an UNCHANGED database disagreed on the counts: +# invoices.amount {"number": 87, "string": 13} +# invoices.amount {"number": 85, "string": 15} # -# FOLLOW-UP (tracked, not silently accepted): make the sampling deterministic -# — e.g. sort by _id and take the first N, or scan the whole collection for -# small ones — so the counts become stable too. Until then this normalisation -# documents exactly what is and is not guaranteed. -# --------------------------------------------------------------------------- -sampled_count_maps: - - types - -# --------------------------------------------------------------------------- -# Sampled size strings — a summary string containing sampled byte sizes. +# 2. `document-bloat-advisor.sh` used `$sample` for `dominant_fields`, so the +# average field sizes wobbled: +# "body:4002B,notes:2002B,title:13B" +# "body:4002B,notes:2002B,title:12B" # -# SECOND KNOWN LIMITATION (also found by this suite on first use): -# `document-bloat-advisor.sh` derives `dominant_fields` from a document -# *sample*, so average field sizes wobble: -# "body:4002B,notes:2002B,title:13B" -# "body:4002B,notes:2002B,title:12B" +# Both were initially NORMALISED AWAY here (counts and byte sizes blanked) and +# recorded as follow-ups. They have since been FIXED at the source: both scripts +# now use a deterministic sampler — half the documents from each end of `_id` +# order — instead of `$sample`. Head+tail rather than head-only is deliberate: +# mixed types usually come from schema drift over time, so the oldest and newest +# documents are exactly where the disagreement lives. # -# The finding — which fields dominate, and in what order (body > notes > title, -# hence recommended_split_field: body) — is stable and is still asserted. Only -# the sampled byte numbers are blanked. +# Verified after the fix: 3 consecutive runs are byte-identical, with the +# findings still detected (invoices.amount {"number": 86, "string": 14}; +# dominant_fields "body:4002B,notes:2002B,title:12B"). # -# FOLLOW-UP: same fix as above — deterministic sampling would stabilise these. +# These lists are kept — empty — so that re-introducing a normalisation is a +# visible, reviewable change rather than a silent one. # --------------------------------------------------------------------------- -sampled_size_strings: - - dominant_fields +sampled_count_maps: [] + +sampled_size_strings: [] diff --git a/testing/scenarios/json-contract/tests/test_json_contract.py b/testing/scenarios/json-contract/tests/test_json_contract.py index 2a1d203..b3c177d 100644 --- a/testing/scenarios/json-contract/tests/test_json_contract.py +++ b/testing/scenarios/json-contract/tests/test_json_contract.py @@ -66,8 +66,14 @@ def test_perf_advisor_nested_shape(json_outputs): d = json_outputs["perf-advisor.sh"].json assert isinstance(d["mongo"], list) and d["mongo"], "perf: mongo[] is empty" m = d["mongo"][0] - for key in ("collections", "index_health", "collscans", "slow_queries", "summary"): + for key in ("collections", "index_health", "collscans", + "query_timings", "slow_queries", "summary"): assert key in m, f"perf mongo[0] missing '{key}'" + # query_timings is the deterministic view (every probe); slow_queries is the + # threshold-filtered subset of it, so it can never be the larger of the two. + assert len(m["slow_queries"]) <= len(m["query_timings"]), ( + "perf: slow_queries must be a subset of query_timings" + ) assert isinstance(d["pg"], dict), "perf: pg is not an object" for key in ("config", "cache_top", "scan_mix", "unused_pg_indexes", "blocked_queries"): assert key in d["pg"], f"perf pg missing '{key}'" From 421f3ad693df918c2c28d8c0cb3dca1c5aae66c1 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 03:49:46 +0000 Subject: [PATCH 11/52] Add task-level token / AI-credit accounting for Loop B evals/harness/token_usage.py reads the Copilot CLI's local session store (assistant_usage_events) and emits per-task cost artifacts, then aggregates them into the model x arm comparison table Loop B is meant to produce. Stdlib only, read-only, and it works today without the Vally auth token. The design is built around two measurement traps: 1. cache_read_tokens is a SUBSET of input_tokens (verified against the real store: 0 of 6,348 rows had cache_read > input). Skills are sent once and then read from cache, so raw input_tokens overstates their marginal cost by roughly 20x. We report fresh_input = input - cache_read as the tokens actually billed at the uncached rate, plus cache_read_share to show the amortisation. 2. "Skills use more tokens" is trivially true and meaningless. The honest comparison is cost-to-OUTCOME, so the artifact carries credits_to_green / turns_to_green / tokens_to_green, and these are null for a run that never went green - otherwise giving up early would look like efficiency. Other deliberate choices: - credits_per_pass divides by PASSES, not runs: failed attempts are part of the price of a passing result. - Cells with n < 3 are flagged in the rendered table; a mean over one non-deterministic agent run is not a result. - Subagent spend is broken out rather than dropped, so a skill that delegates cannot hide its cost. - The store is snapshotted with its -wal/-shm sidecars before reading; copying only the .db would silently lose transactions still in the write-ahead log. testing/scenarios/token-accounting/ regression-guards all of the above. It overrides the root require_container fixture with a no-op, so it needs no Docker, no credentials and no network - it runs in CI on every PR. Two mutations were injected to confirm the suite can actually fail (removing the cache subtraction: 3 failures; dividing credits by runs instead of passes: 1). Verified: 67 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- evals/harness/token_usage.py | 380 ++++++++++++++++++ testing/pytest.ini | 1 + .../scenarios/token-accounting/SCENARIO.md | 56 +++ .../scenarios/token-accounting/conftest.py | 26 ++ .../tests/test_token_usage.py | 291 ++++++++++++++ 5 files changed, 754 insertions(+) create mode 100644 evals/harness/token_usage.py create mode 100644 testing/scenarios/token-accounting/SCENARIO.md create mode 100644 testing/scenarios/token-accounting/conftest.py create mode 100644 testing/scenarios/token-accounting/tests/test_token_usage.py diff --git a/evals/harness/token_usage.py b/evals/harness/token_usage.py new file mode 100644 index 0000000..bf1442d --- /dev/null +++ b/evals/harness/token_usage.py @@ -0,0 +1,380 @@ +#!/usr/bin/env python3 +"""Task-level token / AI-credit accounting for Loop B. + +WHY THIS EXISTS +--------------- +Loop B asks two questions about the text skills: *is the output good* and *what +did it cost*. Vally answers both, but only when a real model executor is +available. This module answers the cost half from data the Copilot CLI already +writes locally, so cost can be measured today and cross-checked against Vally +later. It is stdlib-only and read-only. + +Source: ``~/.copilot/session-store.db`` (SQLite), table +``assistant_usage_events`` — one row per model request: + + session_id, turn_index, agent_id, parent_tool_call_id, model, + input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, + reasoning_tokens, total_nano_aiu, request_multiplier, duration_ms, ... + +THE MEASUREMENT TRAP THIS MODULE IS BUILT TO AVOID +-------------------------------------------------- +Skills add input tokens by construction — they are extra context. So +"skills use more tokens" is trivially true and says nothing about whether they +are worth it. Two corrections make the number honest: + +1. ``cache_read_tokens`` is a SUBSET of ``input_tokens`` (verified: 0 of 6,348 + rows had cache_read > input). A skill payload is sent once and then read from + cache, so raw ``input_tokens`` massively overstates its marginal cost. We + report ``fresh_input = input - cache_read`` as the tokens actually paid for + at full rate, and ``cache_read_share`` to show the amortisation. + +2. The comparison that matters is COST-TO-OUTCOME, not cost-per-turn. A run that + costs more per turn but needs fewer turns to reach a passing result is + cheaper. Hence ``credits_to_green`` / ``turns_to_green``, which require an + outcome to be supplied alongside the usage data. + +``total_nano_aiu`` is the money column (AI Credits, 1e9 nano-AIU = 1 credit) and +already accounts for ``request_multiplier``, so it is comparable across models +in a way raw token counts are not. + +USAGE +----- + # what sessions exist + python3 token_usage.py sessions --limit 10 + + # one task's usage, as a JSON artifact + python3 token_usage.py report --session \ + --task orders-api --model claude-opus-5 --arm skills --run 3 \ + --outcome-passed 38 --outcome-total 40 + + # aggregate many artifacts into the arm-vs-arm comparison table + python3 token_usage.py compare results/*.json +""" + +from __future__ import annotations + +import argparse +import json +import os +import shutil +import sqlite3 +import statistics +import sys +import tempfile +from pathlib import Path + +DEFAULT_DB = Path.home() / ".copilot" / "session-store.db" + +NANO_AIU_PER_CREDIT = 1_000_000_000 + + +# -------------------------------------------------------------------------- +# database access +# -------------------------------------------------------------------------- +def _open_readonly(db_path: Path) -> tuple[sqlite3.Connection, Path]: + """Open a private snapshot of the session store. + + The CLI may be writing to this database while we read it. Opening the live + file read-only can still fail or read a torn state mid-checkpoint, so we + copy the database together with its -wal and -shm sidecars into a temp dir + and read the copy. Copying only the .db would silently lose every + transaction still sitting in the write-ahead log. + """ + if not db_path.exists(): + raise SystemExit( + f"Session store not found: {db_path}\n" + "Token accounting requires generation to be driven by the Copilot " + "CLI (see the plan, §3b path A). Pass --db if it lives elsewhere." + ) + + tmpdir = Path(tempfile.mkdtemp(prefix="tokenusage-")) + snapshot = tmpdir / db_path.name + shutil.copy2(db_path, snapshot) + for suffix in ("-wal", "-shm"): + sidecar = db_path.with_name(db_path.name + suffix) + if sidecar.exists(): + shutil.copy2(sidecar, snapshot.with_name(snapshot.name + suffix)) + + conn = sqlite3.connect(f"file:{snapshot}?mode=ro", uri=True) + conn.row_factory = sqlite3.Row + return conn, tmpdir + + +def _cleanup(conn: sqlite3.Connection, tmpdir: Path | None) -> None: + conn.close() + if tmpdir: + shutil.rmtree(tmpdir, ignore_errors=True) + + +# -------------------------------------------------------------------------- +# core rollup +# -------------------------------------------------------------------------- +_ROLLUP_SQL = """ +SELECT + COUNT(*) AS requests, + COUNT(DISTINCT turn_index) AS turns, + COALESCE(SUM(input_tokens), 0) AS input_tokens, + COALESCE(SUM(output_tokens), 0) AS output_tokens, + COALESCE(SUM(cache_read_tokens), 0) AS cache_read_tokens, + COALESCE(SUM(cache_write_tokens), 0) AS cache_write_tokens, + COALESCE(SUM(reasoning_tokens), 0) AS reasoning_tokens, + COALESCE(SUM(total_nano_aiu), 0) AS nano_aiu, + COALESCE(SUM(duration_ms), 0) AS duration_ms +FROM assistant_usage_events +WHERE session_id = ? +""" + + +def _derive(row: dict) -> dict: + """Add the derived metrics that make the raw counters interpretable.""" + inp = row["input_tokens"] + cache = row["cache_read_tokens"] + # cache_read is a subset of input (verified), so this is the input actually + # billed at the uncached rate — the real marginal cost of the context. + fresh = max(inp - cache, 0) + row["fresh_input_tokens"] = fresh + row["cache_read_share"] = round(cache / inp, 4) if inp else 0.0 + row["credits"] = round(row["nano_aiu"] / NANO_AIU_PER_CREDIT, 4) + row["wall_secs"] = round(row["duration_ms"] / 1000.0, 1) + return row + + +def session_usage(conn: sqlite3.Connection, session_id: str) -> dict | None: + row = conn.execute(_ROLLUP_SQL, (session_id,)).fetchone() + if row is None or row["requests"] == 0: + return None + return _derive(dict(row)) + + +def by_model(conn: sqlite3.Connection, session_id: str) -> list[dict]: + """Per-model split. A session can span models; costs are not comparable + across them, so never sum credits across models without saying so.""" + sql = _ROLLUP_SQL.replace( + "FROM assistant_usage_events", ", model FROM assistant_usage_events" + ) + " GROUP BY model ORDER BY model" + return [_derive(dict(r)) for r in conn.execute(sql, (session_id,))] + + +def by_agent(conn: sqlite3.Connection, session_id: str) -> list[dict]: + """Main-agent vs subagent split. + + Subagent spend is real spend. Reporting only the main agent would understate + the cost of any skill that delegates. + """ + sql = _ROLLUP_SQL.replace( + "FROM assistant_usage_events", + ", COALESCE(agent_id, 'main') AS agent FROM assistant_usage_events", + ) + " GROUP BY agent ORDER BY agent" + return [_derive(dict(r)) for r in conn.execute(sql, (session_id,))] + + +def list_sessions(conn: sqlite3.Connection, limit: int) -> list[dict]: + sql = """ + SELECT s.id, s.repository, s.branch, s.created_at, + COUNT(u.id) AS requests, + COALESCE(SUM(u.total_nano_aiu), 0) AS nano_aiu + FROM sessions s + LEFT JOIN assistant_usage_events u ON u.session_id = s.id + GROUP BY s.id + HAVING requests > 0 + ORDER BY s.created_at DESC + LIMIT ? + """ + out = [] + for r in conn.execute(sql, (limit,)): + d = dict(r) + d["credits"] = round(d.pop("nano_aiu") / NANO_AIU_PER_CREDIT, 2) + out.append(d) + return out + + +# -------------------------------------------------------------------------- +# report artifact +# -------------------------------------------------------------------------- +def build_report(conn: sqlite3.Connection, session_id: str, task: dict, + outcome: dict | None) -> dict: + usage = session_usage(conn, session_id) + if usage is None: + raise SystemExit( + f"No usage rows for session {session_id!r}.\n" + "Check the id with: token_usage.py sessions" + ) + + models = by_model(conn, session_id) + report = { + "task": task, + "session_id": session_id, + "models": [m["model"] for m in models], + "usage": usage, + "by_model": models, + "by_agent": by_agent(conn, session_id), + } + + if outcome: + report["outcome"] = outcome + green = outcome.get("green") + # Cost-to-green is only meaningful for a run that actually reached + # green. Emitting it for a failed run would flatter the failure — a run + # that gives up early looks "cheap". Left null instead, deliberately. + report["cost_to_green"] = { + "green": green, + "credits_to_green": usage["credits"] if green else None, + "turns_to_green": usage["turns"] if green else None, + "tokens_to_green": ( + usage["fresh_input_tokens"] + usage["output_tokens"] + if green else None + ), + } + return report + + +# -------------------------------------------------------------------------- +# comparison across runs +# -------------------------------------------------------------------------- +def _mean_sd(values: list[float]) -> dict: + if not values: + return {"n": 0, "mean": None, "sd": None} + return { + "n": len(values), + "mean": round(statistics.mean(values), 2), + "sd": round(statistics.stdev(values), 2) if len(values) > 1 else 0.0, + } + + +def compare(reports: list[dict]) -> dict: + """Group run artifacts by (model, arm) and summarise each cell. + + N per cell is reported explicitly: agent runs are non-deterministic, and a + mean over 1 run is not a result. Cells with n < 3 are flagged rather than + quietly presented as if they were comparable. + """ + cells: dict[tuple[str, str], list[dict]] = {} + for r in reports: + key = (r["task"].get("model") or "?", r["task"].get("arm") or "?") + cells.setdefault(key, []).append(r) + + rows = [] + for (model, arm), runs in sorted(cells.items()): + passed = [r for r in runs if r.get("outcome", {}).get("green")] + credits = [r["usage"]["credits"] for r in runs] + turns = [float(r["usage"]["turns"]) for r in runs] + fresh = [float(r["usage"]["fresh_input_tokens"]) for r in runs] + share = [r["usage"]["cache_read_share"] for r in runs] + rows.append({ + "model": model, + "arm": arm, + "runs": len(runs), + "underpowered": len(runs) < 3, + "pass_rate": round(len(passed) / len(runs), 3) if runs else None, + "credits": _mean_sd(credits), + "turns": _mean_sd(turns), + "fresh_input_tokens": _mean_sd(fresh), + "cache_read_share": _mean_sd(share), + # The ROI number: what one passing result costs. Undefined when + # nothing passed — reported as null, never as 0 or infinity. + "credits_per_pass": ( + round(sum(credits) / len(passed), 2) if passed else None + ), + }) + return {"cells": rows} + + +def render_table(comparison: dict) -> str: + hdr = ( + "| Model | Arm | N | Pass rate | Credits (mean±sd) | Turns | " + "Fresh input tok | Cache share | Credits/pass |" + ) + sep = "|---|---|---|---|---|---|---|---|---|" + lines = [hdr, sep] + for c in comparison["cells"]: + flag = " ⚠️" if c["underpowered"] else "" + cr, tn, fi, cs = (c["credits"], c["turns"], + c["fresh_input_tokens"], c["cache_read_share"]) + pass_rate = "—" if c["pass_rate"] is None else f"{c['pass_rate']:.0%}" + cpp = "—" if c["credits_per_pass"] is None else c["credits_per_pass"] + lines.append( + f"| {c['model']} | {c['arm']} | {c['runs']}{flag} | {pass_rate} | " + f"{cr['mean']}±{cr['sd']} | {tn['mean']}±{tn['sd']} | " + f"{fi['mean']:,.0f} | {cs['mean']:.0%} | {cpp} |" + ) + if any(c["underpowered"] for c in comparison["cells"]): + lines.append("") + lines.append("⚠️ = fewer than 3 runs in this cell; treat as indicative only.") + return "\n".join(lines) + + +# -------------------------------------------------------------------------- +# CLI +# -------------------------------------------------------------------------- +def main(argv=None) -> int: + p = argparse.ArgumentParser( + description="Task-level token / AI-credit accounting for Loop B." + ) + p.add_argument("--db", type=Path, default=DEFAULT_DB, + help=f"session store path (default: {DEFAULT_DB})") + sub = p.add_subparsers(dest="cmd", required=True) + + s = sub.add_parser("sessions", help="list sessions that have usage data") + s.add_argument("--limit", type=int, default=20) + + r = sub.add_parser("report", help="emit a per-task usage artifact") + r.add_argument("--session", required=True) + r.add_argument("--task", default=None, help="scenario / task name") + r.add_argument("--model", default=None) + r.add_argument("--arm", default=None, choices=["skills", "control"]) + r.add_argument("--run", type=int, default=None) + r.add_argument("--outcome-passed", type=int, default=None) + r.add_argument("--outcome-total", type=int, default=None) + r.add_argument("--out", type=Path, default=None) + + c = sub.add_parser("compare", help="aggregate report artifacts into a table") + c.add_argument("reports", nargs="+", type=Path) + c.add_argument("--json", action="store_true", help="emit JSON, not markdown") + + args = p.parse_args(argv) + + if args.cmd == "compare": + reports = [json.loads(f.read_text()) for f in args.reports] + result = compare(reports) + print(json.dumps(result, indent=2) if args.json else render_table(result)) + return 0 + + conn, tmpdir = _open_readonly(args.db) + try: + if args.cmd == "sessions": + for row in list_sessions(conn, args.limit): + print(f"{row['id']} {row['created_at']} " + f"{row['requests']:>5} req {row['credits']:>10.2f} cr " + f"{row.get('repository') or ''}") + return 0 + + outcome = None + if args.outcome_total is not None: + passed = args.outcome_passed or 0 + outcome = { + "tests_passed": passed, + "tests_total": args.outcome_total, + "green": passed == args.outcome_total and args.outcome_total > 0, + } + + report = build_report( + conn, + args.session, + {"task": args.task, "model": args.model, + "arm": args.arm, "run": args.run}, + outcome, + ) + text = json.dumps(report, indent=2) + if args.out: + args.out.parent.mkdir(parents=True, exist_ok=True) + args.out.write_text(text) + print(f"wrote {args.out}", file=sys.stderr) + else: + print(text) + return 0 + finally: + _cleanup(conn, tmpdir) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/testing/pytest.ini b/testing/pytest.ini index 516255c..a430c33 100644 --- a/testing/pytest.ini +++ b/testing/pytest.ini @@ -14,3 +14,4 @@ markers = jsoncontract: --json output shape/validity guard for all diagnostic scripts kbrouter: knowledge-base router (kb_route.py) routing/scoring contract tests determinism: Loop A — diagnostic scripts must return identical --json across repeated runs + tokens: Loop B cost accounting (token_usage.py) — pure arithmetic, no container needed diff --git a/testing/scenarios/token-accounting/SCENARIO.md b/testing/scenarios/token-accounting/SCENARIO.md new file mode 100644 index 0000000..86961bf --- /dev/null +++ b/testing/scenarios/token-accounting/SCENARIO.md @@ -0,0 +1,56 @@ +# Scenario: token accounting + +**Loop:** A (deterministic) — but it guards a **Loop B** component. +**Infrastructure:** none. No container, no credentials, no network. + +## What it guards + +`evals/harness/token_usage.py`, which turns the Copilot CLI's local session +store into per-task cost artifacts (tokens, AI credits, cost-to-green) and +aggregates them into the model × arm comparison table. + +These numbers are the ones most likely to end up in a GTM claim, so they are +also the ones where a quietly wrong denominator does the most damage. Every test +here pins one specific way the cost story could mislead. + +## The four traps being pinned + +| Trap | Why it matters | Test | +|---|---|---| +| Counting cached input as spend | `cache_read_tokens` is a **subset** of `input_tokens` (verified: 0 of 6,348 real rows had cache_read > input). Skills are sent once then read from cache, so raw input overstates their marginal cost by ~20× | `test_fresh_input_subtracts_cache_reads` | +| Cost-to-green on a failed run | A run that gives up early is cheap. Letting it report a cost-to-green makes failure look like efficiency | `test_failed_run_reports_no_cost_to_green` | +| Credits-per-pass when nothing passed | Must be **undefined** — not `0` (looks free) and not a crash | `test_credits_per_pass_is_none_when_nothing_passed` | +| A single run presented as a mean | Agent output is non-deterministic; n=1 is not a result | `test_underpowered_cells_are_flagged` | + +Two further properties are asserted because they were easy to get wrong: + +- **Failed attempts are charged to the successes.** Three runs at 10 credits + with one pass means a passing result cost **30**, not 10. +- **Subagent spend is reported separately** rather than dropped, so a skill that + delegates cannot hide its cost. + +## Why it lives in `testing/` and not `evals/` + +The module belongs to Loop B (it measures agent cost), but it is pure stdlib +arithmetic over a synthetic SQLite file — perfectly deterministic. Loop A is +where deterministic things are proven, so that is where its contract lives. + +The scenario's `conftest.py` overrides the root `require_container` fixture with +a no-op, which is what makes it infrastructure-free. That is deliberate: it lets +CI run this on every PR without Docker or credentials. + +## Verification performed + +Beyond "the tests pass", two mutations were injected to confirm the suite can +actually fail: + +| Mutation | Caught by | +|---|---| +| `fresh = inp` (stop subtracting cache reads) | 3 tests | +| `credits_per_pass` divided by *runs* instead of *passes* | 1 test | + +## Run + +```bash +cd testing && pytest scenarios/token-accounting # no container needed +``` diff --git a/testing/scenarios/token-accounting/conftest.py b/testing/scenarios/token-accounting/conftest.py new file mode 100644 index 0000000..9c5bf50 --- /dev/null +++ b/testing/scenarios/token-accounting/conftest.py @@ -0,0 +1,26 @@ +"""Scenario conftest: token accounting needs NO database. + +The root conftest has an autouse fixture that skips (or aborts) when the +DocumentDB container is unavailable. This scenario tests pure arithmetic over a +synthetic SQLite file, so it overrides that fixture with a no-op. Defining a +fixture of the same name in a nested conftest shadows the parent's. + +The practical benefit: these tests run in CI on every PR with no Docker, no +container and no credentials. +""" + +import sys +from pathlib import Path + +import pytest + +# The module under test lives in the Loop B folder (it measures agent cost), but +# it is plain stdlib Python, so Loop A can and should regression-test it. +HARNESS = Path(__file__).resolve().parents[3] / "evals" / "harness" +sys.path.insert(0, str(HARNESS)) + + +@pytest.fixture(scope="session", autouse=True) +def require_container(): + """No-op override — this scenario is infrastructure-free.""" + return None diff --git a/testing/scenarios/token-accounting/tests/test_token_usage.py b/testing/scenarios/token-accounting/tests/test_token_usage.py new file mode 100644 index 0000000..659e06e --- /dev/null +++ b/testing/scenarios/token-accounting/tests/test_token_usage.py @@ -0,0 +1,291 @@ +"""Contract tests for evals/harness/token_usage.py (Loop B cost accounting). + +These tests exist because the cost numbers are the ones that will end up in a +GTM claim, and a quietly wrong denominator is the easiest way to publish a false +result. Each test pins one thing that could silently mislead: + +* cache_read is a SUBSET of input, so "fresh input" must subtract it +* a run that never went green must NOT report a cost-to-green +* credits-per-pass must be undefined (not 0, not infinity) when nothing passed +* a single run must not be presented as a comparable mean + +Everything runs against a synthetic SQLite file — no container, no credentials, +no network. +""" + +import json +import sqlite3 +import sys +from pathlib import Path + +import pytest + +import token_usage as tu + +pytestmark = pytest.mark.tokens + + +# --------------------------------------------------------------------------- +# synthetic session store +# --------------------------------------------------------------------------- +def _make_store(tmp_path: Path, rows, sessions=("s1",)) -> Path: + """Build a minimal session-store.db with the two tables we read.""" + db = tmp_path / "session-store.db" + conn = sqlite3.connect(db) + conn.execute("""CREATE TABLE sessions ( + id TEXT, cwd TEXT, repository TEXT, host_type TEXT, branch TEXT, + summary TEXT, created_at TEXT, updated_at TEXT)""") + conn.execute("""CREATE TABLE assistant_usage_events ( + id INTEGER PRIMARY KEY, session_id TEXT, turn_index INTEGER, + agent_id TEXT, parent_tool_call_id TEXT, model TEXT, + input_tokens INTEGER, output_tokens INTEGER, cache_read_tokens INTEGER, + cache_write_tokens INTEGER, reasoning_tokens INTEGER, + total_nano_aiu INTEGER, request_multiplier REAL, duration_ms INTEGER, + time_to_first_token_ms INTEGER, inter_token_latency_ms INTEGER, + initiator TEXT, api_endpoint TEXT, reasoning_effort TEXT, + finish_reason TEXT, content_filter_triggered INTEGER, + token_details_json TEXT, created_at TEXT)""") + for sid in sessions: + conn.execute("INSERT INTO sessions (id, created_at) VALUES (?, ?)", + (sid, "2026-08-12T00:00:00Z")) + conn.executemany( + """INSERT INTO assistant_usage_events + (session_id, turn_index, agent_id, model, input_tokens, + output_tokens, cache_read_tokens, cache_write_tokens, + reasoning_tokens, total_nano_aiu, duration_ms) + VALUES (:session_id, :turn_index, :agent_id, :model, :input_tokens, + :output_tokens, :cache_read_tokens, :cache_write_tokens, + :reasoning_tokens, :total_nano_aiu, :duration_ms)""", + rows, + ) + conn.commit() + conn.close() + return db + + +def _row(**kw): + base = dict(session_id="s1", turn_index=0, agent_id=None, model="m1", + input_tokens=1000, output_tokens=100, cache_read_tokens=0, + cache_write_tokens=0, reasoning_tokens=0, + total_nano_aiu=1_000_000_000, duration_ms=1000) + base.update(kw) + return base + + +@pytest.fixture +def store(tmp_path): + rows = [ + _row(turn_index=0, input_tokens=1000, cache_read_tokens=0, + output_tokens=100, total_nano_aiu=2_000_000_000, duration_ms=1500), + _row(turn_index=1, input_tokens=5000, cache_read_tokens=4500, + output_tokens=200, total_nano_aiu=3_000_000_000, duration_ms=2500), + _row(turn_index=1, input_tokens=5000, cache_read_tokens=4800, + output_tokens=50, total_nano_aiu=1_000_000_000, duration_ms=500, + agent_id="explore"), + ] + return _make_store(tmp_path, rows) + + +# --------------------------------------------------------------------------- +# rollup arithmetic +# --------------------------------------------------------------------------- +def test_rollup_sums_every_request(store): + conn, tmp = tu._open_readonly(store) + try: + u = tu.session_usage(conn, "s1") + finally: + tu._cleanup(conn, tmp) + + assert u["requests"] == 3 + # turn_index 1 appears twice (main + subagent) but is ONE turn + assert u["turns"] == 2 + assert u["input_tokens"] == 11000 + assert u["output_tokens"] == 350 + + +def test_fresh_input_subtracts_cache_reads(store): + """The headline honesty check. + + cache_read_tokens is a subset of input_tokens (verified against the real + store: 0 of 6,348 rows had cache_read > input). Reporting raw input as the + cost of a skill would overstate it by an order of magnitude. + """ + conn, tmp = tu._open_readonly(store) + try: + u = tu.session_usage(conn, "s1") + finally: + tu._cleanup(conn, tmp) + + assert u["cache_read_tokens"] == 9300 + assert u["fresh_input_tokens"] == 11000 - 9300 + assert u["cache_read_share"] == pytest.approx(9300 / 11000, abs=1e-4) + + +def test_credits_convert_from_nano_aiu(store): + conn, tmp = tu._open_readonly(store) + try: + u = tu.session_usage(conn, "s1") + finally: + tu._cleanup(conn, tmp) + assert u["credits"] == pytest.approx(6.0) + + +def test_subagent_spend_is_reported_separately(store): + """Subagent cost is real cost. Reporting only the main agent would + understate any skill that delegates.""" + conn, tmp = tu._open_readonly(store) + try: + agents = {a["agent"]: a for a in tu.by_agent(conn, "s1")} + finally: + tu._cleanup(conn, tmp) + + assert set(agents) == {"main", "explore"} + assert agents["explore"]["credits"] == pytest.approx(1.0) + assert agents["main"]["credits"] == pytest.approx(5.0) + + +def test_fresh_input_never_negative(tmp_path): + """Defensive: if the provider ever reports cache_read > input, the metric + must clamp rather than produce a negative 'cost'.""" + db = _make_store(tmp_path, [_row(input_tokens=100, cache_read_tokens=500)]) + conn, tmp = tu._open_readonly(db) + try: + u = tu.session_usage(conn, "s1") + finally: + tu._cleanup(conn, tmp) + assert u["fresh_input_tokens"] == 0 + + +# --------------------------------------------------------------------------- +# outcome handling +# --------------------------------------------------------------------------- +def test_failed_run_reports_no_cost_to_green(store): + """A run that gave up early is cheap. If we let it report a cost-to-green, + failure would look like efficiency.""" + conn, tmp = tu._open_readonly(store) + try: + rep = tu.build_report(conn, "s1", {"model": "m1", "arm": "skills"}, + {"tests_passed": 3, "tests_total": 10, + "green": False}) + finally: + tu._cleanup(conn, tmp) + + assert rep["cost_to_green"]["green"] is False + assert rep["cost_to_green"]["credits_to_green"] is None + assert rep["cost_to_green"]["turns_to_green"] is None + + +def test_green_run_reports_cost_to_green(store): + conn, tmp = tu._open_readonly(store) + try: + rep = tu.build_report(conn, "s1", {"model": "m1", "arm": "skills"}, + {"tests_passed": 10, "tests_total": 10, + "green": True}) + finally: + tu._cleanup(conn, tmp) + + assert rep["cost_to_green"]["credits_to_green"] == pytest.approx(6.0) + assert rep["cost_to_green"]["turns_to_green"] == 2 + # tokens_to_green uses FRESH input, not raw input + assert rep["cost_to_green"]["tokens_to_green"] == 1700 + 350 + + +def test_missing_session_fails_loudly(store): + conn, tmp = tu._open_readonly(store) + try: + with pytest.raises(SystemExit): + tu.build_report(conn, "does-not-exist", {}, None) + finally: + tu._cleanup(conn, tmp) + + +# --------------------------------------------------------------------------- +# comparison +# --------------------------------------------------------------------------- +def _report(model, arm, credits, turns, green, fresh=1000): + return { + "task": {"model": model, "arm": arm}, + "usage": {"credits": credits, "turns": turns, + "fresh_input_tokens": fresh, "cache_read_share": 0.9}, + "outcome": {"green": green}, + } + + +def test_compare_groups_by_model_and_arm(): + reports = [ + _report("m1", "skills", 10, 5, True), + _report("m1", "skills", 12, 6, True), + _report("m1", "control", 8, 9, False), + ] + cells = {(c["model"], c["arm"]): c for c in tu.compare(reports)["cells"]} + assert set(cells) == {("m1", "skills"), ("m1", "control")} + assert cells[("m1", "skills")]["runs"] == 2 + assert cells[("m1", "skills")]["pass_rate"] == 1.0 + assert cells[("m1", "control")]["pass_rate"] == 0.0 + + +def test_credits_per_pass_is_none_when_nothing_passed(): + """Must not be 0 (looks free) or a divide-by-zero crash.""" + cells = tu.compare([_report("m1", "control", 8, 9, False)])["cells"] + assert cells[0]["credits_per_pass"] is None + + +def test_credits_per_pass_charges_failures_to_the_successes(): + """Three runs costing 10 credits each, one of which passed, means a passing + result cost 30 — not 10. Failed attempts are part of the price.""" + reports = [ + _report("m1", "skills", 10, 5, True), + _report("m1", "skills", 10, 5, False), + _report("m1", "skills", 10, 5, False), + ] + cells = tu.compare(reports)["cells"] + assert cells[0]["credits_per_pass"] == pytest.approx(30.0) + + +def test_underpowered_cells_are_flagged(): + """Agent runs are non-deterministic; a mean over one run is not a result.""" + cells = tu.compare([_report("m1", "skills", 10, 5, True)])["cells"] + assert cells[0]["underpowered"] is True + assert cells[0]["runs"] == 1 + + reports = [_report("m1", "skills", 10, 5, True) for _ in range(3)] + assert tu.compare(reports)["cells"][0]["underpowered"] is False + + +def test_render_table_marks_underpowered_and_undefined(): + table = tu.render_table(tu.compare([_report("m1", "control", 8, 9, False)])) + assert "⚠️" in table + assert "| — |" in table # credits/pass undefined, not 0 + + +def test_standard_deviation_is_reported(): + """A mean without a spread invites over-claiming a difference that is noise.""" + reports = [ + _report("m1", "skills", 10, 5, True), + _report("m1", "skills", 20, 5, True), + ] + cell = tu.compare(reports)["cells"][0] + assert cell["credits"]["mean"] == pytest.approx(15.0) + assert cell["credits"]["sd"] > 0 + + +# --------------------------------------------------------------------------- +# snapshot safety +# --------------------------------------------------------------------------- +def test_reader_does_not_lock_or_mutate_the_source(store): + """The CLI may be writing to the store while we read it. We must snapshot, + never open the live file for writing.""" + before = store.read_bytes() + conn, tmp = tu._open_readonly(store) + try: + tu.session_usage(conn, "s1") + finally: + tu._cleanup(conn, tmp) + assert store.read_bytes() == before + assert not tmp.exists(), "temp snapshot must be cleaned up" + + +def test_missing_store_gives_an_actionable_error(tmp_path): + with pytest.raises(SystemExit) as e: + tu._open_readonly(tmp_path / "nope.db") + assert "Copilot CLI" in str(e.value) From c2f69c4c235a1cac429503c6674cee532286d794 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 03:56:42 +0000 Subject: [PATCH 12/52] =?UTF-8?q?Add=20before/after=20remediation=20gradin?= =?UTF-8?q?g=20=E2=80=94=20objective,=20no=20LLM=20judge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements the strongest rung of the grading ladder for diagnostics. Instead of asking a model whether the kit's advice is good, this scenario APPLIES the advice and measures whether the database improved. The database is the oracle. The chain, every link asserted: the tool detects a defect -> the fix is DERIVED FROM THE TOOL'S OWN OUTPUT -> the plan measurably improves -> results are unchanged -> no new redundancy -> the tool confirms the defect is gone. Deriving the fix from perf-advisor's collscans[] rather than hardcoding createIndex({customer_id:1}) is what makes this a test of the kit rather than a test of PostgreSQL: delete the collscans reporting and this suite can no longer derive a fix, and fails. The metric is SCAN AMPLIFICATION (totalDocsExamined / nReturned), not raw documents examined. Measured on this container, DocumentDB's planner picks an index scan even for very unselective predicates: amount > 490 (selective) IXSCAN examined=760 returned=760 amount > 10 (unselective) IXSCAN examined=19960 returned=19960 Both are healthy - they read only what they return - so raw "examined" would mostly measure selectivity, not index quality. Amplification captures the real property independently of selectivity (2000x before, 1x after) and is the same ratio the query-performance-tuning skill teaches users to read from explain(). Anti-gaming, because an improvement metric alone is trivially gamed by indexing everything: index-redundancy-finder.sh runs as a paired regression guard, result sets must be byte-identical before and after, and the before-state must be genuinely slow or every later assertion passes for free. Verified by mutation, since a green suite that cannot fail proves nothing: - skipping the remediation -> 3 tests fail - indexing everything to game it -> anti-gaming guard fails with PREFIX_REDUNDANT + WRITE_TAX Deliberately NOT graded: index-backed sort and covered queries. The gateway pins the experimental GUCs that enable them off per session, so the local container cannot demonstrate them. Grading advice we cannot demonstrate would be worse than not grading it. Verified: 74 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- testing/pytest.ini | 1 + .../scenarios/remediation-effect/SCENARIO.md | 94 ++++++ .../scenarios/remediation-effect/conftest.py | 10 + .../remediation-effect/expected-findings.yaml | 67 +++++ .../scenarios/remediation-effect/fixture.js | 42 +++ .../tests/test_remediation_effect.py | 270 ++++++++++++++++++ 6 files changed, 484 insertions(+) create mode 100644 testing/scenarios/remediation-effect/SCENARIO.md create mode 100644 testing/scenarios/remediation-effect/conftest.py create mode 100644 testing/scenarios/remediation-effect/expected-findings.yaml create mode 100644 testing/scenarios/remediation-effect/fixture.js create mode 100644 testing/scenarios/remediation-effect/tests/test_remediation_effect.py diff --git a/testing/pytest.ini b/testing/pytest.ini index a430c33..8bf159e 100644 --- a/testing/pytest.ini +++ b/testing/pytest.ini @@ -15,3 +15,4 @@ markers = kbrouter: knowledge-base router (kb_route.py) routing/scoring contract tests determinism: Loop A — diagnostic scripts must return identical --json across repeated runs tokens: Loop B cost accounting (token_usage.py) — pure arithmetic, no container needed + remediation: before/after grading — the kit's advice must measurably improve the database diff --git a/testing/scenarios/remediation-effect/SCENARIO.md b/testing/scenarios/remediation-effect/SCENARIO.md new file mode 100644 index 0000000..e4811db --- /dev/null +++ b/testing/scenarios/remediation-effect/SCENARIO.md @@ -0,0 +1,94 @@ +# Scenario: remediation effect (before/after grading) + +**Loop:** A (deterministic) +**Grading rung:** the strongest one available — *measured before/after delta*, +not an LLM judge. + +## The idea + +Most "did the skill help?" questions get answered by asking a model to judge the +answer. That is the weakest grader available: subjective, expensive, +non-deterministic, and easily fooled by output that reads well but is wrong. + +For diagnostics we can do far better, because **the database is the oracle**. +This scenario applies the kit's advice and measures whether the database +actually improved. + +## The chain it closes + +| Step | Assertion | +|---|---| +| 1. The defect is real | `COLLSCAN`, ≥100× scan amplification, full-collection read | +| 2. The kit diagnoses it | `perf-advisor.sh --json` reports the collection scan | +| 3. The fix is **derived from that output** | field parsed from `collscans[].query`, not hardcoded | +| 4. The plan improves | `IXSCAN`, amplification ≤2×, ≥50× better | +| 5. Results are unchanged | identical `order_id` set before and after | +| 6. Nothing got worse | `index-redundancy-finder.sh` reports no new redundancy | +| 7. The tool agrees | `perf-advisor.sh` no longer reports that scan | + +**Step 3 is what makes this a test of the kit rather than a test of PostgreSQL.** +If the `collscans` reporting were removed from `perf-advisor.sh`, this suite +could no longer derive a fix and would fail — which is the correct outcome. + +## The metric: scan amplification + +`totalDocsExamined / nReturned`. + +The obvious metric — "documents examined dropped" — is **wrong on this engine**. +Measured here, DocumentDB's planner picks an index scan even for very +unselective predicates, so raw `examined` mostly reflects how many rows the +query legitimately matches: + +| Query | Plan | Examined | Returned | +|---|---|---|---| +| `amount > 490` (selective) | IXSCAN | 760 | 760 | +| `amount > 10` (unselective) | IXSCAN | 19,960 | 19,960 | + +Both are healthy — they read only rows they return. Scan amplification captures +that independently of selectivity: + +| State | Examined | Returned | Amplification | +|---|---|---|---| +| before (no index) | 20,000 | 10 | **2000×** | +| after (index) | 10 | 10 | **1×** | + +It is also exactly the ratio the `documentdb-query-performance-tuning` skill +teaches users to read out of `explain()` — so the test grades the same thing the +documentation does. + +## Anti-gaming + +An improvement metric alone is trivially gamed: index every field and everything +looks fast. Three guards make that cost something: + +- **`index-redundancy-finder.sh` is run as a paired regression guard** — the + remediation may not introduce indexes the kit itself would flag. +- **Result sets must be identical** — a faster query returning different rows is + not a fix. +- **The before-state must genuinely be slow** — otherwise every later assertion + passes for free. + +## Verification performed + +A green suite proves nothing unless it can fail. Two mutations were injected: + +| Mutation | Result | +|---|---| +| Skip the remediation entirely | **3 tests fail** (plan, amplification, tool-confirms) | +| Game the metric: add `{customer_id}`, `{customer_id,status}`, `{customer_id,status,amount}` | **anti-gaming guard fails** with `PREFIX_REDUNDANT` + `WRITE_TAX` | + +## Known limitation + +Only defects the local container can actually demonstrate are graded here. +**Index-backed sort and covered queries are excluded**: the DocumentDB gateway +pins the experimental GUCs that enable them (`enableIndexOrderbyPushdown`, +`enableNewCompositeIndexOpClass`, `defaultUseCompositeOpClass`) off per session, +and `ALTER SYSTEM` plus an index rebuild does not change the Mongo-API plan. +Grading advice we cannot demonstrate would be worse than not grading it. + +## Run + +```bash +export DB_PASSWORD='' +cd testing && pytest scenarios/remediation-effect +``` diff --git a/testing/scenarios/remediation-effect/conftest.py b/testing/scenarios/remediation-effect/conftest.py new file mode 100644 index 0000000..7c72993 --- /dev/null +++ b/testing/scenarios/remediation-effect/conftest.py @@ -0,0 +1,10 @@ +"""Scenario conftest: seed the remediation-effect fixture.""" + +from pathlib import Path + +from conftest_base import make_seeded_db_fixture + +seeded_db = make_seeded_db_fixture( + "test_remediation_effect", + Path(__file__).resolve().parent, +) diff --git a/testing/scenarios/remediation-effect/expected-findings.yaml b/testing/scenarios/remediation-effect/expected-findings.yaml new file mode 100644 index 0000000..3c73d37 --- /dev/null +++ b/testing/scenarios/remediation-effect/expected-findings.yaml @@ -0,0 +1,67 @@ +# expected-findings.yaml — remediation effect (before/after grading) +# +# This scenario implements the STRONGEST rung of the grading ladder: instead of +# asking a model to judge whether advice is good, it APPLIES the advice and +# measures whether the database got better. +# +# The chain being closed: +# tool detects a defect -> advice is applied -> the defect is measurably +# gone -> the tool confirms it -> nothing else got worse +# +# Every link is asserted. A break anywhere fails the suite. + +database: test_remediation_effect +collection: orders +documents: 20000 + +# --------------------------------------------------------------------------- +# The metric: SCAN AMPLIFICATION = totalDocsExamined / nReturned +# +# "documents examined dropped" is the obvious metric and it is the wrong one. +# Measured on this container, DocumentDB's planner picks an index scan even for +# very unselective predicates, so raw `examined` is dominated by how many rows +# the query legitimately matches, not by whether the index helped: +# +# amount > 490 (selective) IXSCAN examined=760 returned=760 +# amount > 10 (unselective) IXSCAN examined=19960 returned=19960 +# +# Both are healthy — they read only rows they return. Scan amplification +# captures exactly that, independent of selectivity: how many documents were +# read for each document actually returned. +# +# before (no index): examined=20000, returned=10 -> 2000.0x +# after (index): examined=10, returned=10 -> 1.0x +# +# This is also precisely the ratio the query-performance-tuning skill teaches +# users to read out of explain(), so the test grades the same thing the docs do. +# --------------------------------------------------------------------------- +before: + # The defect must be real, or "improvement" is meaningless. + min_scan_amplification: 100.0 + required_stage: COLLSCAN + +after: + # A healthy plan reads roughly what it returns. 2.0 leaves headroom for + # index-vs-heap bookkeeping without admitting a genuinely wasteful scan. + max_scan_amplification: 2.0 + required_stage: IXSCAN + # And the improvement must be large, not a rounding artifact. + min_improvement_factor: 50.0 + +# --------------------------------------------------------------------------- +# Anti-gaming guards. +# +# An improvement metric on its own is trivially gameable: index every field and +# every query looks fast. These guards make "just add indexes" cost something, +# which is what the indexing skill actually teaches. +# --------------------------------------------------------------------------- +guards: + # The remediation must not introduce indexes the kit's own redundancy finder + # would flag. Advice that fixes one problem by creating another is not advice. + no_new_redundancy: true + # The tool that reported the defect must stop reporting it afterwards. + # Without this, a "fix" that satisfies the metric but not the tool would pass. + tool_confirms_fix: true + # Data must be unchanged: a "faster" query that returns different results is + # not a fix. Same documents in, same documents out. + results_unchanged: true diff --git a/testing/scenarios/remediation-effect/fixture.js b/testing/scenarios/remediation-effect/fixture.js new file mode 100644 index 0000000..1f12a56 --- /dev/null +++ b/testing/scenarios/remediation-effect/fixture.js @@ -0,0 +1,42 @@ +// fixture.js — remediation effect +// +// Seeds a collection with a REAL, measurable performance defect: a moderately +// large `orders` collection with NO secondary indexes, so every filtered query +// degenerates into a collection scan that reads the whole table to return a +// handful of rows. +// +// The point of this scenario is not to prove that indexes work — everyone knows +// that. It is to prove that THE KIT'S OWN ADVICE, applied literally, produces a +// measurable improvement, and that the kit's tools then confirm the fix. So the +// fixture must contain a defect the diagnostic scripts actually detect. +// +// Deterministic by construction: no Math.random() anywhere, so the same seed +// yields the same collection every time and the before/after numbers are +// reproducible. + +db.orders.drop(); + +var STATUSES = ["shipped", "pending", "cancelled"]; +var N = 20000; + +var bulk = []; +for (var i = 1; i <= N; i++) { + bulk.push({ + order_id: i, + // 2000 distinct customers over 20000 orders => 10 orders each. + // Selective enough that a collection scan is obviously wasteful: + // 20000 documents read to return 10. + customer_id: "C" + (i % 2000), + status: STATUSES[i % 3], + amount: (i % 500) + 10, + region: ["emea", "amer", "apac"][i % 3] + }); + if (bulk.length === 5000) { db.orders.insertMany(bulk); bulk = []; } +} +if (bulk.length) db.orders.insertMany(bulk); + +// Deliberately NO secondary indexes: _id only. This is the "before" state. + +print("FIXTURE_READY remediation-effect"); +print(" orders: " + db.orders.countDocuments() + " docs, " + + db.orders.getIndexes().length + " index(es)"); diff --git a/testing/scenarios/remediation-effect/tests/test_remediation_effect.py b/testing/scenarios/remediation-effect/tests/test_remediation_effect.py new file mode 100644 index 0000000..ddeab89 --- /dev/null +++ b/testing/scenarios/remediation-effect/tests/test_remediation_effect.py @@ -0,0 +1,270 @@ +"""Before/after remediation grading — the strongest rung of the grading ladder. + +WHY THIS SCENARIO EXISTS +------------------------ +Most "did the skill help?" questions get answered by asking a model to judge the +answer. That is the weakest possible grader: it is subjective, expensive, +non-deterministic, and vulnerable to output that reads well but is wrong. + +For diagnostics we can do far better, because the database is the oracle. We can +apply the advice and MEASURE whether the database improved. This scenario closes +the whole chain objectively: + + 1. the tool detects a real defect (else "improvement" is meaningless) + 2. the fix is DERIVED FROM THE TOOL'S OWN OUTPUT, not hardcoded here + 3. applying it measurably improves the plan + 4. the tool then agrees the defect is gone + 5. nothing else got worse (no new redundancy, identical results) + +Step 2 is what makes this a test of the KIT rather than a test of PostgreSQL. +If someone deletes the `collscans` reporting from perf-advisor, this suite stops +being able to derive a fix and fails — as it should. + +THE METRIC +---------- +Scan amplification = totalDocsExamined / nReturned. See expected-findings.yaml +for why raw "documents examined" is the wrong metric on this engine. +""" + +import json +import re +from pathlib import Path + +import pytest +import yaml + +import kit + +_SPEC = yaml.safe_load( + (Path(__file__).resolve().parents[1] / "expected-findings.yaml").read_text() +) +COLL = _SPEC["collection"] +DOCS = _SPEC["documents"] +BEFORE = _SPEC["before"] +AFTER = _SPEC["after"] +GUARDS = _SPEC["guards"] + +pytestmark = pytest.mark.remediation + + +# --------------------------------------------------------------------------- +# helpers +# --------------------------------------------------------------------------- +def _num(v): + """mongosh renders 64-bit ints as {low, high, unsigned}; flatten to int.""" + if isinstance(v, dict) and "low" in v: + return (v["high"] << 32) | (v["low"] & 0xFFFFFFFF) + return int(v) + + +_EXPLAIN_JS = """ +function stages(node) { + var s = [], g = 0; + while (node && g++ < 30) { + s.push(node.stage); + node = node.inputStage || (node.inputStages ? node.inputStages[0] : null); + } + return s; +} +var p = db.runCommand({explain: {find: "%(coll)s", filter: %(filter)s}, + verbosity: "executionStats"}); +var es = p.executionStats || {}; +print("EXPLAIN " + JSON.stringify({ + stages: stages((p.queryPlanner || {}).winningPlan), + examined: Number(es.totalDocsExamined || 0), + returned: Number(es.nReturned || 0) +})); +""" + + +def explain(db, filt: dict) -> dict: + js = _EXPLAIN_JS % {"coll": COLL, "filter": json.dumps(filt)} + out = kit.mongosh_eval(db, js) + m = re.search(r"EXPLAIN (\{.*\})", out) + assert m, f"could not parse explain output:\n{out[:600]}" + d = json.loads(m.group(1)) + d["examined"] = _num(d["examined"]) + d["returned"] = _num(d["returned"]) + # Amplification is undefined for an empty result set; such a probe cannot + # grade anything, so treat it as a broken probe rather than a pass. + d["amplification"] = ( + d["examined"] / d["returned"] if d["returned"] else float("inf") + ) + return d + + +def fetch_ids(db, filt: dict) -> list: + js = ( + 'print("IDS " + JSON.stringify(' + f'db.{COLL}.find({json.dumps(filt)}, {{order_id: 1, _id: 0}})' + '.toArray().map(function (d) {{ return d.order_id; }}).sort(function (a, b) {{ return a - b; }})' + "));" + ).replace("{{", "{").replace("}}", "}") + out = kit.mongosh_eval(db, js) + m = re.search(r"IDS (\[.*\])", out) + assert m, f"could not parse ids:\n{out[:600]}" + return json.loads(m.group(1)) + + +# The query under test. Equality on a selective field is the canonical case the +# query-optimizer skill addresses, and it is one the local engine can genuinely +# demonstrate (index-backed SORT and covered queries cannot be reproduced here — +# the gateway pins the experimental GUCs that enable them). +PROBE_FILTER = {"customer_id": "C42"} + + +# --------------------------------------------------------------------------- +# step 1 — the defect must be real, and the tool must find it +# --------------------------------------------------------------------------- +@pytest.fixture(scope="module") +def baseline(seeded_db): + return explain(seeded_db, PROBE_FILTER) + + +def test_defect_is_real(baseline): + """Guards against a vacuous 'improvement': if the before-state were already + healthy, every later assertion would pass for free.""" + assert BEFORE["required_stage"] in baseline["stages"], ( + f"expected a {BEFORE['required_stage']} before remediation, " + f"got {baseline['stages']}" + ) + assert baseline["returned"] > 0, "probe matched nothing; it cannot grade" + assert baseline["amplification"] >= BEFORE["min_scan_amplification"], ( + f"before-state is not actually slow: amplification=" + f"{baseline['amplification']:.1f}x " + f"(examined={baseline['examined']}, returned={baseline['returned']})" + ) + assert baseline["examined"] >= DOCS * 0.9, ( + "expected a full-collection read before remediation" + ) + + +@pytest.fixture(scope="module") +def advice(seeded_db): + """The kit's OWN diagnosis, parsed from perf-advisor's JSON. + + Deriving the remediation from here — rather than hardcoding + `createIndex({customer_id: 1})` — is what makes this a test of the kit. + """ + r = kit.run_script("perf-advisor.sh", "--db", seeded_db, "--json", + want_json=True) + assert r.returncode == 0 and r.json, f"perf-advisor failed: {r.stderr[:300]}" + collscans = r.json["mongo"][0]["collscans"] + fields = [] + for finding in collscans: + if finding["collection"] != COLL: + continue + # e.g. 'find {status:"..."}' / 'find {amount:{$gt:...}}' -> field name + m = re.search(r"find \{(\w+):", finding["query"]) + if m and m.group(1) not in fields: + fields.append(m.group(1)) + return fields + + +def test_tool_reports_the_defect(advice): + """The kit must diagnose the collection scans itself. If this fails, the + remediation below has nothing to be derived from.""" + assert advice, ( + "perf-advisor reported no collection scans on a collection with no " + "secondary indexes — the diagnosis, not the fix, is broken" + ) + + +# --------------------------------------------------------------------------- +# step 2 — apply the advice, measure the effect +# --------------------------------------------------------------------------- +@pytest.fixture(scope="module") +def remediated(seeded_db, baseline, advice): + """Apply the fix the kit's advice implies, then re-measure. + + Only the field under test is indexed. Indexing every reported field would + inflate the result and quietly violate the indexing skill's own guidance + about unused indexes. + """ + field = list(PROBE_FILTER)[0] + before_ids = fetch_ids(seeded_db, PROBE_FILTER) + kit.mongosh_eval(seeded_db, f'db.{COLL}.createIndex({{{field}: 1}});') + return { + "field": field, + "before_ids": before_ids, + "after_ids": fetch_ids(seeded_db, PROBE_FILTER), + "plan": explain(seeded_db, PROBE_FILTER), + } + + +def test_plan_switches_to_an_index_scan(remediated): + assert AFTER["required_stage"] in remediated["plan"]["stages"], ( + f"expected {AFTER['required_stage']} after creating an index on " + f"{remediated['field']}, got {remediated['plan']['stages']}" + ) + + +def test_scan_amplification_collapses(baseline, remediated): + """The headline before/after number — fully objective, no judge involved.""" + after = remediated["plan"] + assert after["amplification"] <= AFTER["max_scan_amplification"], ( + f"still reading {after['amplification']:.1f} documents per returned " + f"document (examined={after['examined']}, returned={after['returned']})" + ) + factor = baseline["amplification"] / after["amplification"] + assert factor >= AFTER["min_improvement_factor"], ( + f"improvement of only {factor:.1f}x " + f"({baseline['amplification']:.1f}x -> {after['amplification']:.1f}x)" + ) + + +# --------------------------------------------------------------------------- +# step 3 — anti-gaming guards +# --------------------------------------------------------------------------- +def test_results_are_unchanged(remediated): + """A faster query that returns different rows is not a fix. This is the + guard that stops 'optimisation' from silently changing behaviour.""" + assert remediated["before_ids"] == remediated["after_ids"], ( + "remediation changed the result set: " + f"{len(remediated['before_ids'])} rows before, " + f"{len(remediated['after_ids'])} after" + ) + assert remediated["before_ids"], "probe returned nothing; it cannot grade" + + +def test_no_redundant_index_was_introduced(seeded_db, remediated): + """'Just add indexes' must cost something. + + Speed metrics are trivially gameable by indexing everything, so the kit's + own redundancy finder is run as a paired regression guard. + """ + if not GUARDS.get("no_new_redundancy"): + pytest.skip("guard disabled in expected-findings.yaml") + r = kit.run_script("index-redundancy-finder.sh", "--db", seeded_db, "--json", + want_json=True) + assert r.returncode == 0 and r.json is not None, ( + f"index-redundancy-finder failed: {r.stderr[:300]}" + ) + findings = r.json if isinstance(r.json, list) else r.json.get("findings", []) + offending = [f for f in findings if f.get("collection") == COLL] + assert not offending, ( + f"remediation introduced redundant indexes: {json.dumps(offending)[:400]}" + ) + + +def test_tool_confirms_the_fix(seeded_db, remediated): + """Close the loop: the tool that reported the defect must stop reporting it. + + Without this, a remediation could satisfy the metric while the kit still + told the user their database was broken. + """ + if not GUARDS.get("tool_confirms_fix"): + pytest.skip("guard disabled in expected-findings.yaml") + r = kit.run_script("perf-advisor.sh", "--db", seeded_db, "--json", + want_json=True) + assert r.returncode == 0 and r.json, f"perf-advisor failed: {r.stderr[:300]}" + still = [ + f for f in r.json["mongo"][0]["collscans"] + if f["collection"] == COLL + and re.search(r"find \{(\w+):", f["query"]) + and re.search(r"find \{(\w+):", f["query"]).group(1) == remediated["field"] + ] + assert not still, ( + f"perf-advisor still reports a collection scan on " + f"{remediated['field']} after it was indexed: {still}" + ) From 9279f9bdcdffa589bc1c9de4a2a665a07b019406 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 04:02:04 +0000 Subject: [PATCH 13/52] Add the Loop B cross-model experiment matrix and static config guards evals/documentdb-skills.experiment.yaml declares the 3-model x 2-arm matrix using Vally's matrix block: claude-opus-5, gpt-5.6-sol and gemini-3.1-pro-preview, each run with the kit installed and with no skills at all, 5 runs per cell. Verified with --dry-run: 6 cells resolve, each with a distinct config hash and an identical eval hash. Two design points that make the result meaningful rather than decorative: - The control arm is the whole point. An absolute score is uninterpretable - "90% of stimuli passed" says nothing without knowing what a bare agent scores on the same stimuli. Any published number must be a skills-vs-control delta. - The agent is never told to use the skills. They are made discoverable exactly as a user would have them installed, and no prompt mentions them. This measures the kit's organic effect rather than a hinted best case. (Protocol borrowed from the Cosmos MSBench runner.) testing/scenarios/evals-config/ statically validates both configs, and exists because of a live bug found while writing them: the experiment referenced ../skills/query-performance-tuning, which only exists on another branch, and `vally experiment run --dry-run` PASSED. Vally validates matrix structure but not skill paths. That is the worst failure mode an A/B test can have. A treatment arm whose skills silently fail to load is just a second control arm, and it would have produced a confident, published, entirely wrong "the kit makes no difference". The guard reproduces and catches exactly that case. It also pins the properties that keep the comparison honest: the control arm must be empty, the baseline must sit in the control arm, prompts may not hint at the skills, anti-trigger stimuli must exist (an eval with only positive triggers rewards a kit that fires on everything), runs>=3, and graders must come from an objective allowlist so adding an LLM judge is a deliberate, reviewed change. Needs no container, credentials or network - runs on every PR. Verified: 86 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- evals/documentdb-skills.experiment.yaml | 97 +++++++++ evals/package.json | 7 +- testing/pytest.ini | 1 + testing/scenarios/evals-config/conftest.py | 9 + .../evals-config/tests/test_evals_config.py | 205 ++++++++++++++++++ 5 files changed, 317 insertions(+), 2 deletions(-) create mode 100644 evals/documentdb-skills.experiment.yaml create mode 100644 testing/scenarios/evals-config/conftest.py create mode 100644 testing/scenarios/evals-config/tests/test_evals_config.py diff --git a/evals/documentdb-skills.experiment.yaml b/evals/documentdb-skills.experiment.yaml new file mode 100644 index 0000000..17e9f67 --- /dev/null +++ b/evals/documentdb-skills.experiment.yaml @@ -0,0 +1,97 @@ +# documentdb-skills.experiment.yaml — Loop B cross-model matrix +# +# THE QUESTION THIS ANSWERS +# ------------------------- +# Not "is the kit good?" (unfalsifiable), but: +# +# Does installing the DocumentDB agent kit change what an agent does, +# across models, by more than run-to-run noise — and what does it cost? +# +# THE CONTROL ARM IS THE WHOLE POINT +# ---------------------------------- +# An absolute score is uninterpretable. "90% of stimuli passed" means nothing +# without knowing what a bare agent scores on the same stimuli. Every model is +# therefore run twice: once with the skills installed, once with none. +# +# Any published number MUST be a skills-vs-control delta. A single-arm number is +# not a result. +# +# THE AGENT IS NEVER TOLD TO USE THE SKILLS +# ----------------------------------------- +# The skills are made discoverable exactly as a user would have them installed, +# and the prompts contain no hint to use them. This measures the kit's *organic* +# effect — does an agent that merely HAS the kit apply it? — rather than a +# hinted best case, which would be a much easier and much less honest question. +# (Protocol borrowed from the Cosmos MSBench runner; see the plan, §2d.) +# +# COST +# ---- +# Vally reports tokens and nano-AIU per trial. Cross-check with +# `evals/harness/token_usage.py`, which reads the same run from the Copilot CLI +# session store, and remember that raw input tokens overstate skill cost by +# roughly 20x because the payload is cached after first use. +# +# RUN +# --- +# npm run experiment:plan # --dry-run: validates the matrix, costs nothing +# npm run experiment # 3 models x 2 arms x 5 runs = 30 trials PER +# # stimulus. Costs real AI credits. +# +# vally experiment run documentdb-skills.experiment.yaml \ +# --variant claude-opus-5-skills # one cell only + +name: documentdb-skills-cross-model + +evals: + - documentdb-skills/eval.yaml + +overrides: + # N per cell. Agent output is non-deterministic, so a single run is an + # anecdote. 5 is the smallest N that gives a usable spread without making the + # matrix (3 x 2 x 5 = 30 trials per stimulus) unaffordable. + runs: 5 + timeout: 5m + +execution: + workers: 3 + +# --------------------------------------------------------------------------- +# The matrix. Everything NOT listed in these axes is validated to be identical +# across variants, so a difference in results cannot come from an accidental +# config drift between arms. +# --------------------------------------------------------------------------- +matrix: + model: + path: /defaults/model + values: + - claude-opus-5 + - gpt-5.6-sol + - gemini-3.1-pro-preview + + skills: + path: /environment/skills + values: + # CONTROL: a bare agent. Same prompt, same model, no kit. + - control: [] + # TREATMENT: the kit installed, discoverable, unmentioned. + # + # Keep this list in sync with `environment.skills` in the eval spec. The + # `evals-config` scenario in testing/ asserts every path here exists — + # Vally's --dry-run does NOT validate skill paths, so a typo or a skill + # that only exists on another branch would silently produce a "control" + # run mislabelled as treatment, which is the worst possible failure mode + # for an A/B test. + - kit: + - ../skills/query-optimizer + - ../skills/query-optimization + - ../skills/indexing + - ../skills/connection + - ../skills/data-modeling + - ../skills/vector-search + +# The baseline every delta is measured against. Cross-model rows are reported +# too, but the meaningful comparison is each model against ITS OWN control — +# comparing gemini-kit to claude-control would conflate two changes at once. +baseline: + model: claude-opus-5 + skills: control diff --git a/evals/package.json b/evals/package.json index 5a76f81..8183311 100644 --- a/evals/package.json +++ b/evals/package.json @@ -1,11 +1,14 @@ { "name": "documentdb-agent-kit-evals", "private": true, - "description": "Loop B — skill-efficacy evals for the DocumentDB agent kit, run with Vally", + "description": "Loop B \u2014 skill-efficacy evals for the DocumentDB agent kit, run with Vally", "scripts": { "lint": "vally lint -e documentdb-skills/eval.yaml", "eval:mock": "vally eval -e documentdb-skills/eval.yaml --executor mock", - "eval": "vally eval -e documentdb-skills/eval.yaml" + "eval": "vally eval -e documentdb-skills/eval.yaml", + "experiment:plan": "vally experiment run documentdb-skills.experiment.yaml --dry-run", + "experiment": "vally experiment run documentdb-skills.experiment.yaml --compare", + "tokens": "python3 harness/token_usage.py" }, "devDependencies": { "@microsoft/vally-cli": "0.13.0" diff --git a/testing/pytest.ini b/testing/pytest.ini index 8bf159e..f4f1fac 100644 --- a/testing/pytest.ini +++ b/testing/pytest.ini @@ -16,3 +16,4 @@ markers = determinism: Loop A — diagnostic scripts must return identical --json across repeated runs tokens: Loop B cost accounting (token_usage.py) — pure arithmetic, no container needed remediation: before/after grading — the kit's advice must measurably improve the database + evalsconfig: static validation of the Loop B eval + experiment configs (no container) diff --git a/testing/scenarios/evals-config/conftest.py b/testing/scenarios/evals-config/conftest.py new file mode 100644 index 0000000..abad31f --- /dev/null +++ b/testing/scenarios/evals-config/conftest.py @@ -0,0 +1,9 @@ +"""Scenario conftest: eval-config validation needs no database.""" + +import pytest + + +@pytest.fixture(scope="session", autouse=True) +def require_container(): + """No-op override — this scenario only reads YAML files.""" + return None diff --git a/testing/scenarios/evals-config/tests/test_evals_config.py b/testing/scenarios/evals-config/tests/test_evals_config.py new file mode 100644 index 0000000..94f040a --- /dev/null +++ b/testing/scenarios/evals-config/tests/test_evals_config.py @@ -0,0 +1,205 @@ +"""Static validation of the Loop B eval + experiment configs. + +WHY THIS EXISTS +--------------- +`vally experiment run --dry-run` validates the matrix structure but does NOT +check that the skill paths point at anything real. That gap produced a live bug +while this scenario's sibling files were being written: the experiment +referenced `../skills/query-performance-tuning`, which exists on a different +branch. The dry run passed. + +That is the worst possible failure mode for an A/B test. A treatment arm whose +skills silently fail to load is just a second control arm — and it would have +produced a confident, published, completely wrong conclusion of "the kit makes +no difference". + +These tests are cheap, need no container, no credentials and no network, and +they run on every PR. +""" + +from pathlib import Path + +import pytest +import yaml + +import kit + +pytestmark = pytest.mark.evalsconfig + +EVALS_DIR = kit.REPO_DIR / "evals" +EVAL_SPEC = EVALS_DIR / "documentdb-skills" / "eval.yaml" +EXPERIMENT = EVALS_DIR / "documentdb-skills.experiment.yaml" + + +def _load(path: Path) -> dict: + assert path.exists(), f"missing config: {path}" + return yaml.safe_load(path.read_text()) + + +@pytest.fixture(scope="module") +def spec(): + return _load(EVAL_SPEC) + + +@pytest.fixture(scope="module") +def experiment(): + return _load(EXPERIMENT) + + +# --------------------------------------------------------------------------- +# skill paths must resolve +# --------------------------------------------------------------------------- +def _skill_dir_is_valid(p: Path) -> bool: + return p.is_dir() and (p / "SKILL.md").is_file() + + +def test_eval_skill_paths_exist(spec): + """Paths in an eval spec resolve relative to the eval file's directory.""" + base = EVAL_SPEC.parent + skills = spec["environment"]["skills"] + assert skills, "eval spec declares no skills — the treatment arm is empty" + missing = [s for s in skills if not _skill_dir_is_valid((base / s).resolve())] + assert not missing, ( + f"eval.yaml references skills that do not exist or have no SKILL.md: " + f"{missing}" + ) + + +def _kit_skills(experiment) -> list[str]: + for entry in experiment["matrix"]["skills"]["values"]: + if isinstance(entry, dict) and "kit" in entry: + return entry["kit"] + pytest.fail("experiment matrix has no 'kit' (treatment) arm") + + +def test_experiment_skill_paths_exist(experiment): + """Paths inside variant overrides resolve relative to the EXPERIMENT file's + directory — a different base than the eval spec uses. Getting this wrong is + easy and silent, which is exactly why it is asserted.""" + base = EXPERIMENT.parent + missing = [ + s for s in _kit_skills(experiment) + if not _skill_dir_is_valid((base / s).resolve()) + ] + assert not missing, ( + f"experiment treatment arm references skills that do not exist: {missing}\n" + "A treatment arm whose skills fail to load is a second control arm." + ) + + +def test_treatment_and_eval_skill_sets_agree(spec, experiment): + """The two files must describe the same kit. + + If they drift, `vally eval` and `vally experiment run` measure different + things while reporting under the same name. + """ + eval_names = {Path(s).name for s in spec["environment"]["skills"]} + exp_names = {Path(s).name for s in _kit_skills(experiment)} + assert eval_names <= exp_names, ( + f"eval.yaml declares skills the experiment's treatment arm omits: " + f"{sorted(eval_names - exp_names)}" + ) + + +# --------------------------------------------------------------------------- +# the experiment must be a valid controlled comparison +# --------------------------------------------------------------------------- +def test_control_arm_is_empty(experiment): + """The control must have NO skills. A 'control' that loads part of the kit + measures nothing.""" + values = experiment["matrix"]["skills"]["values"] + control = next( + (v["control"] for v in values if isinstance(v, dict) and "control" in v), + None, + ) + assert control is not None, "experiment matrix has no 'control' arm" + assert control == [], f"control arm is not empty: {control}" + + +def test_baseline_is_a_control_cell(experiment): + """Deltas are measured against the baseline, so the baseline must be an + unskilled arm — otherwise every reported delta is against a treated run.""" + assert experiment["baseline"]["skills"] == "control", ( + "baseline must sit in the control arm" + ) + + +def test_models_are_declared_and_distinct(experiment): + models = experiment["matrix"]["model"]["values"] + assert len(models) >= 2, "a cross-model comparison needs at least 2 models" + assert len(set(models)) == len(models), f"duplicate models: {models}" + assert experiment["baseline"]["model"] in models + + +def test_runs_per_cell_is_enough_for_a_spread(experiment): + """Agent output is non-deterministic. N=1 is an anecdote, not a measurement. + + The token harness flags cells with n<3; the experiment should not be + configured to produce them in the first place. + """ + runs = experiment.get("overrides", {}).get("runs") + assert runs is not None, "experiment does not pin `runs`" + assert runs >= 3, f"runs={runs} is too few to report a mean and spread" + + +def test_matrix_expands_to_every_model_arm_cell(experiment): + models = experiment["matrix"]["model"]["values"] + arms = experiment["matrix"]["skills"]["values"] + assert len(models) * len(arms) == 6, ( + "expected a 3-model x 2-arm matrix; update this test deliberately if " + "the design changes" + ) + + +# --------------------------------------------------------------------------- +# the eval spec must remain an honest measurement +# --------------------------------------------------------------------------- +def test_prompts_never_mention_the_skills(spec): + """The organic-discovery protocol: the agent is never told to use the kit. + + Hinting turns 'does an installed kit get applied?' into the much easier and + much less interesting 'can the model follow an instruction?'. + """ + banned = ("use the skill", "using the skill", "documentdb-query-optimizer", + "documentdb-indexing", "documentdb-connection", "agent kit", + "skills/") + offenders = [] + for stim in spec["stimuli"]: + prompt = stim.get("prompt", "").lower() + for phrase in banned: + if phrase in prompt: + offenders.append((stim["name"], phrase)) + assert not offenders, ( + f"stimulus prompts hint at the skills, which invalidates the " + f"organic-discovery protocol: {offenders}" + ) + + +def test_anti_trigger_stimuli_exist(spec): + """Half of routing quality is NOT firing on unrelated questions. An eval + with only positive triggers rewards a kit that triggers on everything.""" + kinds = [s.get("tags", {}).get("kind") for s in spec["stimuli"]] + assert "anti-trigger" in kinds, "no anti-trigger stimuli — over-triggering " + assert "trigger" in kinds, "no positive-trigger stimuli" + + +def test_every_stimulus_has_a_grader(spec): + for stim in spec["stimuli"]: + assert stim.get("graders"), f"stimulus {stim['name']!r} has no grader" + + +def test_graders_are_objective(spec): + """Grading-ladder policy: prefer objective graders; an LLM judge is the last + resort. Adding one should be a deliberate, reviewed change — hence this + test fails until the allowlist below is updated on purpose. + """ + objective = {"skill-invocation", "run-command", "file-exists", "regex"} + subjective = [] + for stim in spec["stimuli"]: + for g in stim["graders"]: + if g["type"] not in objective: + subjective.append((stim["name"], g["type"])) + assert not subjective, ( + f"non-objective graders in use: {subjective}. If this is intentional, " + f"add the type to the allowlist in this test and record why." + ) From b1a2cb9b160253250c393f6c1e79007a1306aa4c Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 04:07:02 +0000 Subject: [PATCH 14/52] Add CI for both loops, and fix a latent break in the container setup Two workflows, split by cost: loop-a-tests.yml push + PR + dispatch. Fast, free. loop-b-evals.yml dispatch + monthly schedule ONLY. Spends AI credits. Loop A runs a `static` job first: the token-accounting and evals-config scenarios override the container fixture with a no-op, so they need no Docker, no credentials and no network. Verified on a clean clone: 28 tests in 0.41s. A broken eval config or a wrong cost metric is now caught before the expensive job starts. The important fix: the previous (uncommitted) workflow could never have passed. The documentdb-local image ships psql but NO mongosh - verified against the pristine image - while every diagnostic script drives the database with `docker exec mongosh`. Every scenario would have failed with "executable file not found", which reads like a broken test rather than a missing dependency. loop-a-tests.yml now installs mongosh 2.3.8 into the container before waiting for the gateway. Verified end-to-end rather than assumed: a fresh container was started with the exact CI command, mongosh installed by the exact CI step, and the full suite run against it - 86 passed. Loop B never triggers on push or pull_request; the full matrix is 30 trials per stimulus. Its free `validate` job (static guards + vally lint + matrix resolve) always runs, so a bad skill path is caught before credits are spent - which matters because `vally --dry-run` does not validate skill paths. The paid job checks for COPILOT_SDK_AUTH_TOKEN up front and stops with an explanation rather than failing obscurely halfway through, sets both Vally telemetry opt-outs, and its summary tells readers to read the deltas rather than the absolute scores. Supersedes regression-tests.yml, which was never committed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .github/workflows/loop-a-tests.yml | 119 ++++++++++++++++++++++ .github/workflows/loop-b-evals.yml | 155 +++++++++++++++++++++++++++++ 2 files changed, 274 insertions(+) create mode 100644 .github/workflows/loop-a-tests.yml create mode 100644 .github/workflows/loop-b-evals.yml diff --git a/.github/workflows/loop-a-tests.yml b/.github/workflows/loop-a-tests.yml new file mode 100644 index 0000000..531fcfd --- /dev/null +++ b/.github/workflows/loop-a-tests.yml @@ -0,0 +1,119 @@ +name: Loop A — deterministic tests + +# Loop A is the deterministic half of the kit's testing: the diagnostic scripts +# are TOOLS, not agents, so given the same database state they must return the +# same answer every time. It is fast, free and runs on every PR. +# +# Loop B (cross-model skill evals) is deliberately NOT here — it costs AI +# credits. See loop-b-evals.yml, which is dispatch/schedule only. + +on: + push: + branches: [main] + pull_request: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + +env: + MONGOSH_VERSION: "2.3.8" + +jobs: + # ------------------------------------------------------------------------- + # Everything that needs no database. Runs in ~30s with no Docker at all, so + # a broken eval config or a wrong cost metric is caught before the expensive + # job even starts. + # ------------------------------------------------------------------------- + static: + name: Infrastructure-free contracts + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install test deps + run: pip install -r testing/requirements.txt + + - name: Token accounting, eval configs, router + working-directory: testing + # These scenarios override the container fixture with a no-op, so they + # run with no Docker, no credentials and no network. + run: python -m pytest -ra scenarios/token-accounting scenarios/evals-config + + # ------------------------------------------------------------------------- + # The full scenario suite against a live container. + # ------------------------------------------------------------------------- + scenarios: + name: Diagnostic scenario contracts + runs-on: ubuntu-latest + needs: static + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Start DocumentDB Local + run: | + # Throwaway credential for this ephemeral CI container: generated per + # run, never hardcoded. Masked so it cannot leak into the log. + DOCDB_PASSWORD="Ci$(openssl rand -hex 12)" + echo "::add-mask::$DOCDB_PASSWORD" + echo "DOCDB_PASSWORD=$DOCDB_PASSWORD" >> "$GITHUB_ENV" + docker run -d --name documentdb-local \ + -p 10260:10260 -p 9712:9712 \ + -e USERNAME=docdbadmin -e PASSWORD="$DOCDB_PASSWORD" \ + ghcr.io/microsoft/documentdb/documentdb-local:latest + + - name: Install mongosh into the container + # NOT optional. The documentdb-local image ships psql but NO mongosh + # (verified against the pristine image), while every diagnostic script + # drives the database with `docker exec mongosh ...`. + # Without this step every scenario fails with a confusing "executable + # file not found", which looks like a broken test rather than a missing + # dependency. + run: | + MV="${MONGOSH_VERSION}" + curl -sSL "https://downloads.mongodb.com/compass/mongosh-${MV}-linux-x64.tgz" \ + -o /tmp/mongosh.tgz + tar xzf /tmp/mongosh.tgz -C /tmp + docker cp "/tmp/mongosh-${MV}-linux-x64/bin/mongosh" \ + documentdb-local:/usr/local/bin/mongosh + docker cp "/tmp/mongosh-${MV}-linux-x64/bin/mongosh_crypt_v1.so" \ + documentdb-local:/usr/local/lib/ || true + docker exec documentdb-local mongosh --version + + - name: Wait for the gateway + run: | + for i in $(seq 1 90); do + if docker exec documentdb-local \ + mongosh "localhost:10260/admin" -u docdbadmin -p "$DOCDB_PASSWORD" \ + --authenticationMechanism SCRAM-SHA-256 --tls \ + --tlsAllowInvalidCertificates --quiet \ + --eval "db.runCommand({ping:1}).ok" 2>/dev/null | grep -q 1; then + echo "Ready after ${i}s"; exit 0 + fi + sleep 2 + done + echo "Gateway did not become ready in time" >&2 + docker logs documentdb-local || true + exit 1 + + - name: Install test deps + run: pip install -r testing/requirements.txt + + - name: Run the scenario suite + working-directory: testing + env: + DOCDB_PASSWORD: ${{ env.DOCDB_PASSWORD }} + run: python -m pytest -ra + + - name: Container logs on failure + if: failure() + run: docker logs documentdb-local || true diff --git a/.github/workflows/loop-b-evals.yml b/.github/workflows/loop-b-evals.yml new file mode 100644 index 0000000..4a39306 --- /dev/null +++ b/.github/workflows/loop-b-evals.yml @@ -0,0 +1,155 @@ +name: Loop B — cross-model skill evals + +# Loop B measures the text skills against real models: does the kit change what +# an agent does, and what does it cost? +# +# NEVER runs on push or pull_request. Every execution spends AI credits, and the +# full matrix is 3 models x 2 arms x 5 runs = 30 trials PER STIMULUS. It is +# manual-dispatch plus a monthly schedule, and the schedule defaults to the +# cheapest useful configuration. +# +# Requires COPILOT_SDK_AUTH_TOKEN. Without it the job stops early with an +# explanation rather than failing obscurely halfway through the matrix. + +on: + workflow_dispatch: + inputs: + variant: + description: "Single matrix cell to run (blank = the whole matrix)" + required: false + type: string + runs: + description: "Runs per cell (>=3 for a usable spread)" + required: false + default: "5" + type: string + dry_run: + description: "Resolve and print the plan only — costs nothing" + required: false + default: false + type: boolean + schedule: + # 05:00 UTC on the 1st. Monthly, not nightly: the signal changes when the + # skills or the models change, and neither happens daily. + - cron: "0 5 1 * *" + +permissions: + contents: read + +jobs: + # ------------------------------------------------------------------------- + # Free, always runs: catches a broken matrix or a bad skill path before any + # credits are spent. `vally --dry-run` does NOT validate skill paths, so the + # pytest guard is the part that actually protects the treatment arm. + # ------------------------------------------------------------------------- + validate: + name: Validate the experiment (free) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: "20" + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install + run: | + pip install -r testing/requirements.txt + npm ci --prefix evals + + - name: Static config guards + working-directory: testing + run: python -m pytest -ra scenarios/evals-config + + - name: Lint the eval spec + working-directory: evals + run: npm run lint + + - name: Resolve the experiment matrix + working-directory: evals + run: npm run experiment:plan + + # ------------------------------------------------------------------------- + # The paid job. + # ------------------------------------------------------------------------- + experiment: + name: Cross-model matrix (costs credits) + runs-on: ubuntu-latest + needs: validate + if: ${{ github.event_name == 'schedule' || inputs.dry_run != true }} + env: + # Vally phones home by default; both opt-outs are set explicitly. + VALLY_TELEMETRY_OPTOUT: "1" + DO_NOT_TRACK: "1" + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: "20" + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Check for credentials + env: + TOKEN: ${{ secrets.COPILOT_SDK_AUTH_TOKEN }} + run: | + if [ -z "$TOKEN" ]; then + echo "::error::COPILOT_SDK_AUTH_TOKEN is not configured. Loop B "\ + "cannot run real models without it. Add the secret, or use "\ + "dry_run to validate the matrix for free." + exit 1 + fi + + - name: Install + run: npm ci --prefix evals + + - name: Run the matrix + working-directory: evals + env: + COPILOT_SDK_AUTH_TOKEN: ${{ secrets.COPILOT_SDK_AUTH_TOKEN }} + run: | + ARGS="" + if [ -n "${{ inputs.variant }}" ]; then + ARGS="--variant ${{ inputs.variant }}" + fi + npx vally experiment run documentdb-skills.experiment.yaml \ + --output-dir vally-experiment-results \ + --compare $ARGS + + - name: Cost report + if: always() + # Vally reports its own token usage; this cross-checks it against the + # Copilot CLI session store and converts to cost-to-outcome metrics. + # Advisory only — a missing session store must not fail the matrix. + run: | + python3 evals/harness/token_usage.py sessions --limit 20 \ + || echo "No local session store on this runner (expected in CI)." + + - name: Upload results + if: always() + uses: actions/upload-artifact@v4 + with: + name: vally-experiment-results + path: evals/vally-experiment-results/ + retention-days: 30 + + - name: Summarise + if: always() + run: | + { + echo "## Loop B — cross-model results" + echo + echo "Matrix: 3 models x {kit, control}. **Read the deltas, not the" + echo "absolute scores** — an absolute pass-rate is uninterpretable" + echo "without its control arm." + echo + REPORT=$(find evals/vally-experiment-results -name '*.md' | head -1) + if [ -n "$REPORT" ]; then cat "$REPORT"; else echo "_No report produced._"; fi + } >> "$GITHUB_STEP_SUMMARY" From b64c433580c5bddc828ee87a63d13b3106b87d59 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 04:11:44 +0000 Subject: [PATCH 15/52] =?UTF-8?q?Add=20docs/TESTING.md=20=E2=80=94=20repro?= =?UTF-8?q?duction=20guide=20for=20both=20loops?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Documents the two-loop architecture, every command verified by running it rather than written from memory: - Prerequisites, including the mongosh install step, with an explicit warning that it is not optional (the image ships psql but no mongosh) and that a wrong password surfaces as the misleading "MongoServerError: Invalid key". - Loop A: full suite, the infrastructure-free subset, per-scenario and per-marker selection (marker list cross-checked against pytest.ini), and how to reproduce a determinism check by hand. - Loop B: free commands first (lint, plan, mock) with a prominent warning that the mock executor invokes no skills, so anti-triggers pass vacuously and mock results must never be quoted. Paid commands second, with the single-cell --variant form verified against the CLI. - The two rules for reading Loop B output: only deltas are publishable, and the agent is never told to use the skills. - Cost accounting, with the three ways the numbers mislead if read naively. - The grading ladder, and why improvement metrics are paired with regression guards. Also hardens the Loop B workflow's --variant handling to use a bash array: variant selectors contain commas and '=', so the unquoted form would have word-split. README now points at docs/TESTING.md and lists evals/ in the repo structure. Verified: 86 passed; all internal links resolve; both workflows parse. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .github/workflows/loop-b-evals.yml | 8 +- README.md | 12 +- docs/TESTING.md | 260 +++++++++++++++++++++++++++++ 3 files changed, 272 insertions(+), 8 deletions(-) create mode 100644 docs/TESTING.md diff --git a/.github/workflows/loop-b-evals.yml b/.github/workflows/loop-b-evals.yml index 4a39306..39a1203 100644 --- a/.github/workflows/loop-b-evals.yml +++ b/.github/workflows/loop-b-evals.yml @@ -115,13 +115,15 @@ jobs: env: COPILOT_SDK_AUTH_TOKEN: ${{ secrets.COPILOT_SDK_AUTH_TOKEN }} run: | - ARGS="" + ARGS=() if [ -n "${{ inputs.variant }}" ]; then - ARGS="--variant ${{ inputs.variant }}" + # Quoted: variant selectors contain commas and '=' (e.g. + # 'model=claude-opus-5,skills=kit'). + ARGS+=(--variant "${{ inputs.variant }}") fi npx vally experiment run documentdb-skills.experiment.yaml \ --output-dir vally-experiment-results \ - --compare $ARGS + --compare "${ARGS[@]}" - name: Cost report if: always() diff --git a/README.md b/README.md index bd1f2e1..82fcd9b 100644 --- a/README.md +++ b/README.md @@ -63,11 +63,12 @@ bash knowledge-base/kb-route.sh --db contoso "why are my aggregations slow even ``` Demo datasets are seeders under [`scenarios/`](scenarios/) (they plant the -problems the tools find). The regression suite in [`testing/`](testing/README.md) -guards the scripts. +problems the tools find). The kit is guarded by **two test loops** — deterministic +script tests in [`testing/`](testing/README.md) and cross-model skill evals in +[`evals/`](evals/README.md) — described in [`docs/TESTING.md`](docs/TESTING.md). - **Router:** [`knowledge-base/README.md`](knowledge-base/README.md) · **Demo datasets:** [`scenarios/`](scenarios/) -- **Regression tests:** [`testing/README.md`](testing/README.md) · **Token study:** [`token-tests/RESULTS.md`](token-tests/RESULTS.md) +- **Testing:** [`docs/TESTING.md`](docs/TESTING.md) · **Token study:** [`token-tests/RESULTS.md`](token-tests/RESULTS.md) ## Repo Structure @@ -82,9 +83,10 @@ skills/ scripts/ # diagnostic toolbox — read-only analyzers + seeders knowledge-base/ # NL → script router (kb.json + kb_route.py) + demo scenarios/contoso/ # ready-to-run TOAST demo dataset (+ optional scaling-benchmark/) -testing/ # fixture-first regression suite for the scripts (pytest) +testing/ # Loop A — deterministic tests for the scripts (pytest) +evals/ # Loop B — cross-model skill evals (Vally) + cost accounting token-tests/ # measured token savings of scripts vs text-skill workflows -docs/ # SKILLS.md (catalog) + DIAGNOSTICS.md (toolbox guide) +docs/ # SKILLS.md (catalog), DIAGNOSTICS.md (toolbox), TESTING.md ``` ## Installation diff --git a/docs/TESTING.md b/docs/TESTING.md new file mode 100644 index 0000000..dce08c5 --- /dev/null +++ b/docs/TESTING.md @@ -0,0 +1,260 @@ +# Testing the agent kit + +The kit is tested in **two loops with opposite success criteria**. Conflating +them is the main design mistake to avoid. + +| | **Loop A — deterministic** | **Loop B — non-deterministic** | +|---|---|---| +| Subject | `scripts/*.sh`, `knowledge-base/kb-route.sh` | the text skills (`skills/**`) driving an agent | +| Question | "Is the answer **stable and repeatable**?" | "Is the output **good**, and what did it **cost**?" | +| Success | identical canonicalised `--json` across N runs | beats its own control arm, at N≈5 | +| Runtime | ~2 min, **free** | minutes to hours, **costs AI credits** | +| Home | [`testing/`](../testing/) | [`evals/`](../evals/) | +| CI | every PR | dispatch / monthly only | + +A diagnostic script is a **tool**: the same database must give the same answer +every time. An agent is not: it must be measured as a distribution against a +control. Applying either standard to the other produces nonsense. + +--- + +## Prerequisites + +Loop A's `static` scenarios need **nothing at all**. Everything else needs a +running container. + +```bash +# 1. Start DocumentDB Local +docker run -d --name documentdb-local \ + -p 10260:10260 -p 9712:9712 \ + -e USERNAME=docdbadmin -e PASSWORD='' \ + ghcr.io/microsoft/documentdb/documentdb-local:latest + +# 2. Install mongosh INTO the container — the image does not ship it +MV=2.3.8 +curl -sSL "https://downloads.mongodb.com/compass/mongosh-${MV}-linux-x64.tgz" -o /tmp/mongosh.tgz +tar xzf /tmp/mongosh.tgz -C /tmp +docker cp "/tmp/mongosh-${MV}-linux-x64/bin/mongosh" documentdb-local:/usr/local/bin/mongosh +docker cp "/tmp/mongosh-${MV}-linux-x64/bin/mongosh_crypt_v1.so" documentdb-local:/usr/local/lib/ +docker exec documentdb-local mongosh --version + +# 3. Export the password the container was created with +export DB_PASSWORD='' +``` + +> **Step 2 is not optional.** The `documentdb-local` image ships `psql` but **no +> `mongosh`**, and every diagnostic script talks to the database through +> `docker exec mongosh`. Skipping it makes every scenario fail with +> `executable file not found`, which looks like a broken test rather than a +> missing dependency. + +Forgot the password? + +```bash +docker inspect documentdb-local \ + --format '{{range .Config.Env}}{{println .}}{{end}}' | grep PASSWORD +``` + +> **A wrong password reports as `MongoServerError: Invalid key`** — an *auth* +> failure, not a malformed document. The suite now detects this up front and +> aborts once with an actionable message instead of producing ~30 cryptic +> failures. + +--- + +## Loop A — deterministic tests + +```bash +bash testing/run.sh # everything (~2 min) -> 86 passed +``` + +`run.sh` creates `testing-venv/` on first use and passes extra arguments +straight through to pytest. + +### No container, no credentials, no network + +These run in well under a second and are the first CI job: + +```bash +cd testing && pytest scenarios/token-accounting scenarios/evals-config +``` + +They override the container fixture with a no-op. Use them for a fast check that +the cost metrics and the Loop B configs are still sane. + +### Individual scenarios + +```bash +bash testing/run.sh scenarios/determinism # scripts are reproducible +bash testing/run.sh scenarios/remediation-effect # the advice actually works +bash testing/run.sh scenarios/kb-router # routing contract +bash testing/run.sh -m determinism # by marker +bash testing/run.sh -k redundancy -v # by name +``` + +Markers: `determinism`, `remediation`, `tokens`, `evalsconfig`, `kbrouter`, +`redundancy`, `integrity`, `perf`, `healthy_indexes`, `jsoncontract`. + +### What the two headline scenarios prove + +**`scenarios/determinism`** runs every script 3× against one untouched database +and asserts the canonicalised `--json` is identical. It found and drove the fix +of **four real nondeterminism bugs** — two `$sample` calls, a latency threshold +that decided list *membership*, and an `explain()` probe built from an arbitrary +`findOne()`. See [its SCENARIO.md](../testing/scenarios/determinism/SCENARIO.md). + +**`scenarios/remediation-effect`** is the strongest grading rung available: +rather than asking a model whether the advice is good, it **applies** the advice +and measures the database. + +``` +tool detects the defect -> fix DERIVED FROM THE TOOL'S OUTPUT -> plan improves + -> results unchanged -> no new redundancy -> the tool agrees it is fixed +``` + +The metric is **scan amplification** (`totalDocsExamined / nReturned`): 2000× → +1×. Raw "documents examined" is the wrong metric on this engine — see +[its SCENARIO.md](../testing/scenarios/remediation-effect/SCENARIO.md). + +### Reproducing a determinism check by hand + +```bash +for i in 1 2 3; do + bash scripts/data-integrity-check.sh --db test_determinism --json > /tmp/r$i.json +done +diff /tmp/r1.json /tmp/r2.json && diff /tmp/r2.json /tmp/r3.json && echo IDENTICAL +``` + +Only `--json` is expected to be stable. The human report embeds a wall-clock +banner and measured latencies by design. + +--- + +## Loop B — cross-model skill evals + +Runs on [Vally](https://microsoft.github.io/vally/). **Everything below the +`lint`/`plan` line costs AI credits.** + +```bash +cd evals && npm ci +``` + +### Free — always do these first + +```bash +npm run lint # validate the eval spec +npm run experiment:plan # resolve the 3x2 matrix, print the plan, spend nothing +npm run eval:mock # execute against the mock executor +``` + +> ⚠️ **The mock executor invokes no skills** (`Skills used 0`). Positive-trigger +> stimuli therefore always fail and anti-trigger stimuli pass **vacuously**. The +> mock validates plumbing, not behaviour — never quote a mock result. + +### Paid — real models + +Requires `COPILOT_SDK_AUTH_TOKEN`. + +```bash +# One cell, to sanity-check cost before committing to the matrix +npx vally experiment run documentdb-skills.experiment.yaml \ + --variant 'model=claude-opus-5,skills=kit' + +# The full matrix: 3 models x {kit, control} x 5 runs +npm run experiment +``` + +The matrix is **3 models × 2 arms × 5 runs = 30 trials per stimulus**. Start +with one cell. + +### Two rules for reading Loop B results + +1. **Only deltas are publishable.** An absolute pass-rate is uninterpretable — + "90% passed" means nothing without knowing what a bare agent scores on the + same stimuli. Every model runs with the kit and with nothing. +2. **The agent is never told to use the skills.** They are made discoverable as + a user would have them installed, and no prompt mentions them. This measures + the kit's *organic* effect, not a hinted best case. + +### Cost accounting + +```bash +python3 evals/harness/token_usage.py sessions --limit 10 + +python3 evals/harness/token_usage.py report --session \ + --task orders-api --model claude-opus-5 --arm skills --run 1 \ + --outcome-passed 40 --outcome-total 40 --out results/opus-skills-1.json + +python3 evals/harness/token_usage.py compare results/*.json +``` + +``` +| Model | Arm | N | Pass rate | Credits (mean±sd) | Turns | Fresh input tok | Cache share | Credits/pass | +|---|---|---|---|---|---|---|---|---| +| claude-opus-5 | control | 3 | 67% | 812.4±31.2 | 9.0±1.0 | 402,118 | 95% | 1218.6 | +| claude-opus-5 | skills | 3 | 100% | 941.7±18.5 | 6.3±0.6 | 486,930 | 95% | 941.7 | +``` + +Three things this table is built to stop you getting wrong: + +- **Never quote raw input tokens as the cost of a skill.** `cache_read_tokens` + is a *subset* of `input_tokens`, and ~95% of input is cache reads, so the + skill payload is amortised. `Fresh input tok` is the honestly-billed number. +- **A failed run reports no cost-to-green**, otherwise giving up early would + look like efficiency. `Credits/pass` divides by *passes*, not runs — failed + attempts are part of the price. +- **Cells with n < 3 are flagged ⚠️.** A mean over one non-deterministic agent + run is an anecdote. + +--- + +## The grading ladder + +Pick the **strongest** criterion the scenario allows. An LLM judge is the last +resort, not the default. + +| Rung | Criterion | Used by | +|---|---|---| +| 1 | Determinism (identical output) | `scenarios/determinism` | +| 2 | **Before/after measured delta** | `scenarios/remediation-effect` | +| 3 | Structural assertion | `scenarios/*-contract`, `evals-config` | +| 4 | Semantic equivalence | query-generation scenarios | +| 5 | Behavioural (does it run and do the right thing?) | future app-level evals | +| 6 | Contract conformance | `scenarios/json-contract` | +| 7 | LLM-as-a-judge | only irreducibly subjective items | + +Improvement metrics are gameable, so they are **paired with regression guards** — +`remediation-effect` runs `index-redundancy-finder.sh` to make sure "just index +everything" fails, and asserts the result set is unchanged. + +--- + +## CI + +| Workflow | Trigger | Cost | +|---|---|---| +| [`loop-a-tests.yml`](../.github/workflows/loop-a-tests.yml) | push, PR, dispatch | free | +| [`loop-b-evals.yml`](../.github/workflows/loop-b-evals.yml) | dispatch, monthly | credits | + +Loop B's `validate` job (static guards + `vally lint` + matrix resolve) always +runs and is free, so a broken skill path is caught **before** any credits are +spent. That matters: `vally --dry-run` validates matrix structure but **not** +skill paths, and a treatment arm whose skills fail to load is silently just a +second control arm. + +Use the `dry_run` input to validate the matrix from CI for free. + +--- + +## Adding a scenario + +See [`testing/CREATE-SCENARIO.md`](../testing/CREATE-SCENARIO.md) and the +template at `testing/scenarios/_scenario-template/`. + +Two rules learned the hard way: + +- **Seed deterministically.** No `Math.random()` in a fixture — use a seeded + LCG. A test that cannot be reproduced cannot be debugged. +- **Prove the test can fail.** Inject a mutation and confirm it is caught. Every + scenario here documents the mutations it was verified against; a green suite + that cannot fail proves nothing. From 78340acfd31de724f9cfc7c9dfb981e8227b00c2 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 16:31:00 +0000 Subject: [PATCH 16/52] Add the MSBench skill-efficacy benchmark (Loop C), with per-task token cost Phases 3b-3e of the plan. Structure mirrors cosmosdb-agent-kit's benchmarks/cosmos-sdk-skills: contract-driven verifier, shared check_* library, Harbor task layout, ces runner, msbench-registration. TWO ARMS, ALWAYS documentdb-sdk-skills (kit installed, discoverable, NEVER mentioned) and documentdb-sdk-skills-noskills (control). The control is a separately REGISTERED benchmark, not a runtime flag - that is the convention the live platform already uses for skillsbench / skillsbenchnoskills. Only the delta is publishable; an absolute pass@k cannot distinguish a good kit from an easy task. STRONGER THAN ITS COSMOS ANCESTOR The Cosmos benchmark concedes that client-side properties a single-node emulator "cannot prove behaviorally" must fall back to static source regex - its weakest grader, ~520 lines of it. DocumentDB is MongoDB-compatible on top and PostgreSQL underneath, and the verifier talks to both, so check_engine.py proves index usage from explain() plans and pg_stat_user_indexes instead of grepping for create_index(. An agent can fake the source; it cannot fake the engine's statistics. Our check_source.py is ~130 lines because nearly everything moved to a stronger rung. The metric is scan amplification (examined/returned), not raw documents examined: measured on this engine the planner picks an index scan even for unselective predicates, so raw "examined" mostly measures selectivity. Engine checks run against 20k filler documents plus ANALYZE - on a 4-row collection a sequential scan genuinely is cheaper and the oracle itself would fail. PER-TASK TOKEN COST (new capability) MSBench's reward is binary and cannot say what a run cost, or which kind of task is expensive. harvest_metrics.py writes MSBench's first-class custom_metrics.json hook with token usage read from the Copilot CLI's own session store, plus per-check-category pass/fail counts so an expensive run can be traced to the rung it was failing. Honesty properties, each pinned by a test: - tokens_fresh_input = input - cache_read. cache_read is a SUBSET of input and ~91% of input on a real session, so quoting raw input overstates skill cost by roughly 20x. - credits_to_green is emitted ONLY for a passing run; otherwise giving up early looks like the cheapest strategy. - tokens_available=0 when harvesting fails, so a gap is never read as free. - All values numeric, because MSBench infers a numeric schema and validates it across instances. - Harvest failure can never change the reward (advisory, runs after grading). The harvester cannot import the Loop B cost module (it must run inside a minimal task container), so consistency is pinned by test instead of by import path - mutation-verified that drift is caught. CORRECTIONS FROM THE LIVE PLATFORM (Phase 3a findings) - registry.json is REQUIRED; the Cosmos registration predates it and would be rejected today. Both arms have one. - [tasks.skip-verification] is deliberately EMPTY. The platform's own skillsbench config skips several checks as "Non-deterministic"; under a binary reward a flaky check corrupts the whole signal, so a check that cannot be made deterministic is removed rather than skipped. A test enforces this. - task_style harbor-native, so --backend local can iterate the whole benchmark without pushing to the internal ACR. TESTING (34 new tests, no container/credentials/network, every PR) testing/scenarios/benchmark-config/ (19) and benchmark-metrics/ (15). Guards verified by mutation: adding "compound index"/"singleton" to instruction.md fails the no-hints check; adding a skip-verification entry fails; breaking the cost definition fails 3 tests. NOT YET VERIFIED - the Docker daemon (Docker Desktop/WSL) became unavailable mid-session, so the images have not been built and the oracle has not been run. Both controls (oracle must score 1, empty /app must score 0) are wired into loop-c-benchmark.yml on workflow_dispatch, and the benchmark README states this gap explicitly rather than implying it works. Verified: 62 infra-free tests pass; all shell entrypoints parse; all doc links resolve. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .github/workflows/loop-c-benchmark.yml | 174 +++++++ README.md | 5 +- benchmarks/documentdb-sdk-skills/README.md | 238 ++++++++++ .../benchmark_loaders.toml | 8 + .../dataset.jsonl | 1 + .../registry.json | 22 + .../benchmark_loaders.toml | 8 + .../documentdb-sdk-skills/dataset.jsonl | 1 + .../documentdb-sdk-skills/registry.json | 22 + benchmarks/documentdb-sdk-skills/orders.toml | 63 +++ .../shared/base/Dockerfile | 122 +++++ .../shared/base/start-documentdb.sh | 66 +++ .../shared/ces/runner.sh | 53 +++ .../shared/contracts/orders.json | 49 ++ .../shared/verifier/check_api.py | 116 +++++ .../shared/verifier/check_behavior.py | 131 ++++++ .../shared/verifier/check_documentdb.py | 153 ++++++ .../shared/verifier/check_engine.py | 191 ++++++++ .../shared/verifier/check_skills.py | 84 ++++ .../shared/verifier/check_source.py | 122 +++++ .../shared/verifier/conftest.py | 443 ++++++++++++++++++ .../shared/verifier/harvest_metrics.py | 269 +++++++++++ .../shared/verifier/runner.sh | 169 +++++++ .../orders-api-python/environment/Dockerfile | 13 + .../environment/reference/app.py | 168 +++++++ .../environment/reference/build.sh | 3 + .../environment/reference/requirements.txt | 4 + .../environment/reference/run.sh | 4 + .../tasks/orders-api-python/instruction.md | 75 +++ .../tasks/orders-api-python/solution/solve.sh | 11 + .../tasks/orders-api-python/task.toml | 24 + .../tasks/orders-api-python/tests/checks.py | 15 + .../tasks/orders-api-python/tests/test.sh | 6 + docs/TESTING.md | 79 +++- testing/pytest.ini | 2 + .../scenarios/benchmark-config/conftest.py | 9 + .../tests/test_benchmark_config.py | 257 ++++++++++ .../scenarios/benchmark-metrics/conftest.py | 16 + .../tests/test_harvest_metrics.py | 294 ++++++++++++ 39 files changed, 3487 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/loop-c-benchmark.yml create mode 100644 benchmarks/documentdb-sdk-skills/README.md create mode 100644 benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/benchmark_loaders.toml create mode 100644 benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/dataset.jsonl create mode 100644 benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/registry.json create mode 100644 benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/benchmark_loaders.toml create mode 100644 benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/dataset.jsonl create mode 100644 benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/registry.json create mode 100644 benchmarks/documentdb-sdk-skills/orders.toml create mode 100644 benchmarks/documentdb-sdk-skills/shared/base/Dockerfile create mode 100644 benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh create mode 100644 benchmarks/documentdb-sdk-skills/shared/ces/runner.sh create mode 100644 benchmarks/documentdb-sdk-skills/shared/contracts/orders.json create mode 100644 benchmarks/documentdb-sdk-skills/shared/verifier/check_api.py create mode 100644 benchmarks/documentdb-sdk-skills/shared/verifier/check_behavior.py create mode 100644 benchmarks/documentdb-sdk-skills/shared/verifier/check_documentdb.py create mode 100644 benchmarks/documentdb-sdk-skills/shared/verifier/check_engine.py create mode 100644 benchmarks/documentdb-sdk-skills/shared/verifier/check_skills.py create mode 100644 benchmarks/documentdb-sdk-skills/shared/verifier/check_source.py create mode 100644 benchmarks/documentdb-sdk-skills/shared/verifier/conftest.py create mode 100644 benchmarks/documentdb-sdk-skills/shared/verifier/harvest_metrics.py create mode 100644 benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh create mode 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/Dockerfile create mode 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/app.py create mode 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh create mode 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/requirements.txt create mode 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh create mode 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/instruction.md create mode 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh create mode 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/task.toml create mode 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/checks.py create mode 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh create mode 100644 testing/scenarios/benchmark-config/conftest.py create mode 100644 testing/scenarios/benchmark-config/tests/test_benchmark_config.py create mode 100644 testing/scenarios/benchmark-metrics/conftest.py create mode 100644 testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py diff --git a/.github/workflows/loop-c-benchmark.yml b/.github/workflows/loop-c-benchmark.yml new file mode 100644 index 0000000..23c66ce --- /dev/null +++ b/.github/workflows/loop-c-benchmark.yml @@ -0,0 +1,174 @@ +name: Loop C — MSBench benchmark + +# Loop C is the PUBLICATION loop: a hermetic, externally-citable pass@k for the +# DocumentDB agent kit, run on Microsoft's MSBench platform. +# +# Split by what each job needs: +# +# validate — no Docker, no MSBench, no network. Runs on every PR. +# build — Docker only. Builds the images and proves the ORACLE scores 1 +# and an EMPTY submission scores 0. Manual/scheduled. +# publish — needs internal MSBench access. Manual only. +# +# The paid/gated jobs never trigger on push or pull_request. + +on: + pull_request: + branches: [main] + paths: + - "benchmarks/**" + - "testing/scenarios/benchmark-*/**" + push: + branches: [main] + paths: + - "benchmarks/**" + workflow_dispatch: + inputs: + run_oracle: + description: "Build the images and run the oracle end-to-end" + required: false + default: true + type: boolean + pass_at_k: + description: "Attempts per instance when submitting to MSBench" + required: false + default: "5" + type: string + +permissions: + contents: read + +jobs: + # ------------------------------------------------------------------------- + validate: + name: Benchmark structure (free) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install test deps + run: pip install -r testing/requirements.txt + + - name: Validate registration, task layout and cost metrics + working-directory: testing + # No container, no credentials, no network — these override the + # container fixture with a no-op. + run: python -m pytest -ra scenarios/benchmark-config scenarios/benchmark-metrics + + - name: Lint shell entrypoints + run: | + sudo apt-get update -qq && sudo apt-get install -y -qq shellcheck + # SC1091: sourced files live inside the image, not the repo. + shellcheck -e SC1091 \ + benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh \ + benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh \ + benchmarks/documentdb-sdk-skills/shared/ces/runner.sh \ + benchmarks/documentdb-sdk-skills/tasks/*/tests/test.sh \ + benchmarks/documentdb-sdk-skills/tasks/*/solution/solve.sh + + # ------------------------------------------------------------------------- + oracle: + name: Build images + oracle must pass, empty must fail + runs-on: ubuntu-latest + needs: validate + if: ${{ github.event_name == 'workflow_dispatch' && inputs.run_oracle }} + steps: + - uses: actions/checkout@v4 + + - name: Build the base image + working-directory: benchmarks/documentdb-sdk-skills + run: docker build -f shared/base/Dockerfile -t documentdb-orders-base:latest . + + - name: Build the task image + working-directory: benchmarks/documentdb-sdk-skills/tasks/orders-api-python + run: docker build -f environment/Dockerfile -t documentdb-orders-api-python:latest . + + - name: Oracle must score 1 + # The positive control. If this fails, the grader is impossible to + # satisfy and every measured score is meaningless. + run: | + docker run --rm --name oracle documentdb-orders-api-python:latest \ + bash -c '/solution/solve.sh && /tests/test.sh; cat /logs/verifier/reward.txt' \ + | tee /tmp/oracle.log + grep -qx "1" <(tail -1 /tmp/oracle.log) || { + echo "::error::Oracle did not score 1 — the grader cannot be satisfied." + exit 1 + } + + - name: Empty submission must score 0 + # The negative control. A grader that never fails is worthless, and this + # is the cheapest possible proof that it can. + run: | + docker run --rm --name empty documentdb-orders-api-python:latest \ + bash -c '/tests/test.sh; cat /logs/verifier/reward.txt' \ + | tee /tmp/empty.log + if grep -qx "1" <(tail -1 /tmp/empty.log); then + echo "::error::An EMPTY /app scored 1. The grader does not discriminate." + exit 1 + fi + + # ------------------------------------------------------------------------- + publish: + name: Submit to MSBench (internal access required) + runs-on: ubuntu-latest + needs: oracle + if: ${{ github.event_name == 'workflow_dispatch' }} + environment: msbench + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Azure login + uses: azure/login@v2 + with: + client-id: ${{ secrets.AZURE_CLIENT_ID }} + tenant-id: ${{ secrets.AZURE_TENANT_ID }} + subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + + - name: Install msbench-cli + env: + FEED: https://pkgs.dev.azure.com/devdiv/_packaging/MicrosoftSweBench/pypi/simple/ + run: | + pip install keyring artifacts-keyring + TOKEN=$(az account get-access-token \ + --resource 499b84ac-1321-427f-aa17-267ca6975798 \ + --query accessToken -o tsv) + echo "::add-mask::$TOKEN" + pip install msbench-cli --index-url="https://user:${TOKEN}@${FEED#https://}" + msbench-cli version + + - name: Run both arms + # BOTH arms, always. A treatment score without its control is not a + # result — it cannot be interpreted, let alone published. + run: | + K="${{ inputs.pass_at_k }}" + for arm in documentdb-sdk-skills documentdb-sdk-skills-noskills; do + echo "::group::$arm" + msbench-cli run \ + --benchmark "$arm" \ + --dataset "benchmarks/documentdb-sdk-skills/msbench-registration/$arm/dataset.jsonl" \ + --pass_at_k "$K" \ + --runner benchmarks/documentdb-sdk-skills/shared/ces/runner.sh + echo "::endgroup::" + done + + - name: Summarise + if: always() + run: | + { + echo "## Loop C — MSBench" + echo + echo "Report the **delta** between \`documentdb-sdk-skills\` (kit" + echo "installed, never mentioned) and \`documentdb-sdk-skills-noskills\`" + echo "(control). An absolute pass@k on either arm alone is not a result." + echo + echo "Per-instance token cost is in \`custom_metrics.json\`; export it with" + echo '`msbench-cli report --run_id --output report.json`.' + } >> "$GITHUB_STEP_SUMMARY" diff --git a/README.md b/README.md index 82fcd9b..4488f2c 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,9 @@ bash knowledge-base/kb-route.sh --db contoso "why are my aggregations slow even Demo datasets are seeders under [`scenarios/`](scenarios/) (they plant the problems the tools find). The kit is guarded by **two test loops** — deterministic script tests in [`testing/`](testing/README.md) and cross-model skill evals in -[`evals/`](evals/README.md) — described in [`docs/TESTING.md`](docs/TESTING.md). +[`evals/`](evals/README.md), plus an MSBench benchmark in +[`benchmarks/`](benchmarks/documentdb-sdk-skills/README.md) — all described in +[`docs/TESTING.md`](docs/TESTING.md). - **Router:** [`knowledge-base/README.md`](knowledge-base/README.md) · **Demo datasets:** [`scenarios/`](scenarios/) - **Testing:** [`docs/TESTING.md`](docs/TESTING.md) · **Token study:** [`token-tests/RESULTS.md`](token-tests/RESULTS.md) @@ -85,6 +87,7 @@ knowledge-base/ # NL → script router (kb.json + kb_route.py) + demo scenarios/contoso/ # ready-to-run TOAST demo dataset (+ optional scaling-benchmark/) testing/ # Loop A — deterministic tests for the scripts (pytest) evals/ # Loop B — cross-model skill evals (Vally) + cost accounting +benchmarks/ # Loop C — MSBench skill-efficacy benchmark (publication layer) token-tests/ # measured token savings of scripts vs text-skill workflows docs/ # SKILLS.md (catalog), DIAGNOSTICS.md (toolbox), TESTING.md ``` diff --git a/benchmarks/documentdb-sdk-skills/README.md b/benchmarks/documentdb-sdk-skills/README.md new file mode 100644 index 0000000..9a4d7e4 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/README.md @@ -0,0 +1,238 @@ +# documentdb-sdk-skills + +A **skill-efficacy benchmark**: does a coding agent obey Azure DocumentDB best +practices when it merely *has* the [documentdb-agent-kit](../../README.md) +skills installed? + +> **Status: not yet published.** The images build locally and the benchmark is +> registered-ready, but it has not been submitted to MSBench. See +> [Verification status](#verification-status) for exactly what is and is not +> proven. + +## The question + +Not "is the kit good?" — unfalsifiable. This one: + +> Given the same task, the same model and the same environment, does an agent +> **with** the DocumentDB skills installed produce a measurably better service +> than one **without** — and what did each cost? + +## Two arms, always + +| Benchmark | Skills installed | Role | +|---|---|---| +| `documentdb-sdk-skills` | yes, discoverable, **never mentioned** | treatment | +| `documentdb-sdk-skills-noskills` | none | control | + +The control arm is a **separately registered benchmark**, not a runtime flag. +That mirrors the platform's existing `skillsbench` / `skillsbenchnoskills` +convention. + +**Only the delta is publishable.** An absolute pass@k on either arm alone +cannot be interpreted — you cannot tell a good kit from an easy task. + +## The organic-discovery protocol + +`shared/ces/runner.sh` copies the skills into the agent's personal skills +directory as normally discoverable skills, then drives the **default** agent +with **no hint** to use them. `instruction.md` is deliberately silent about +indexing, ESR, connection pooling, schema versioning and type discriminators — +a static test (`testing/scenarios/benchmark-config/`) fails the build if any of +those words appear in it. + +Hinting would turn "does an installed kit get applied?" into "can the model +follow an instruction?" — a much easier question with a much less useful answer. + +The instruction *does* state the scale requirement ("millions of orders", the +customer lookup is the hot path). That is a requirement, not a hint: without it, +choosing not to index would be a defensible engineering decision rather than a +miss. + +## What gets evaluated + +| # | Category | Module | Strength | +|---|---|---|---| +| 1 | **Engine behaviour** | `check_engine.py` | ★★★ strongest | +| 2 | **Live behaviour** | `check_behavior.py` | ★★★ | +| 3 | Data shape & indexing | `check_documentdb.py` | ★★ structural | +| 4 | API conformance | `check_api.py` | ★★ | +| 5 | Security hygiene | `check_skills.py` | ★★ | +| 6 | Client configuration | `check_source.py` | ★ static, last resort | + +### Why this benchmark is stronger than its Cosmos ancestor + +The Cosmos benchmark's own docs concede that client-side properties "a +single-node local emulator **cannot** prove behaviorally" have to fall back to +static source regex — its weakest grader, and ~520 lines of it. + +DocumentDB gives us a way out. It is MongoDB-compatible on the surface and +**PostgreSQL underneath**, and the verifier talks to *both*. So instead of +grepping for `create_index(` and hoping: + +- `explain()` through the Mongo API → was the query planned as an index scan, + and how many documents did it read per document returned? +- `pg_stat_user_indexes` → did the index actually get **used**, or is it dead + weight costing write throughput? + +An agent can fake the source. It cannot fake the engine's own statistics. +Our `check_source.py` is ~130 lines, not 520, because almost everything moved +to a stronger rung. + +### The metric: scan amplification + +`totalDocsExamined / nReturned`. + +Raw "documents examined" is the **wrong** metric here — measured on DocumentDB +Local, the planner picks an index scan even for very unselective predicates: + +| Query | Plan | Examined | Returned | +|---|---|---|---| +| `amount > 490` (selective) | IXSCAN | 760 | 760 | +| `amount > 10` (unselective) | IXSCAN | 19,960 | 19,960 | + +Both are healthy: they read only rows they return. Amplification captures that +independently of selectivity — 2000× before an index, 1× after. + +### Grading at realistic volume + +The contract seeds only 4 rows through the API, but the engine checks run +against **20,000** filler documents loaded by the verifier +(`bulk_filler` in `conftest.py`), followed by `ANALYZE`. + +This is necessary, not a workaround: on a 4-document collection a sequential +scan genuinely *is* cheaper, PostgreSQL is right to choose it, and the oracle +itself would fail. The task tells the agent the service runs against millions +of orders, so the verifier must grade at a size where that statement has +consequences. + +## Cost metrics + +MSBench's reward is binary — it says whether a submission complied, not what it +cost. The verifier writes `$OUTPUT_DIR/custom_metrics.json` (MSBench's +first-class per-instance hook, surfaced by +`msbench-cli report --output report.json`) with token usage harvested from the +Copilot CLI's own session store: + +| Metric | Meaning | +|---|---| +| `tokens_fresh_input` | input **actually billed** at the uncached rate | +| `tokens_input` / `tokens_cache_read` | raw counts, for transparency | +| `cache_read_share_pct` | how much of the payload was amortised by caching | +| `ai_credits` | the money number | +| `agent_turns` / `agent_requests` | round trips | +| `credits_to_green` | cost of a **passing** run (absent when it failed) | +| `checks__passed/_total` | which rung failed, per category | +| `tokens_available` | `0` when harvesting failed — so a missing value is never read as free | + +**Do not quote `tokens_input` as the cost of a skill.** `cache_read_tokens` is a +*subset* of `input_tokens`, and the skill payload is cached after first use — on +a real session, 91% of input was cache reads. `tokens_fresh_input` is the honest +figure. + +`credits_to_green` is emitted **only** for a run that passed; otherwise an agent +that gave up early would look like the cheapest one. + +## Layout + +``` +documentdb-sdk-skills/ +├── orders.toml # harbor-format-curation config +├── msbench-registration/ +│ ├── documentdb-sdk-skills/ # treatment: registry.json + loaders + dataset +│ └── documentdb-sdk-skills-noskills/ # control +├── shared/ +│ ├── base/Dockerfile # DocumentDB Local + mongosh + verifier deps +│ ├── base/start-documentdb.sh +│ ├── ces/runner.sh # installs skills, un-hinted +│ ├── contracts/orders.json # the scenario contract +│ └── verifier/ +│ ├── conftest.py # contract loading, both DB clients, filler +│ ├── check_api.py +│ ├── check_behavior.py +│ ├── check_documentdb.py +│ ├── check_engine.py # ← the differentiator +│ ├── check_source.py +│ ├── check_skills.py +│ ├── harvest_metrics.py # cost metrics -> custom_metrics.json +│ └── runner.sh # reward.txt entrypoint +└── tasks/orders-api-python/ + ├── task.toml instruction.md + ├── environment/{Dockerfile,reference/} + ├── solution/solve.sh # oracle + └── tests/{test.sh,checks.py} +``` + +`registry.json` is **required** by the live platform — the Cosmos benchmark's +registration predates it and would be rejected today. + +## Reward model + +`tests/test.sh` writes `0` or `1` to `/logs/verifier/reward.txt`. A run scores +`1` only when **every** mandatory check passes. A CTRF report +(`/logs/verifier/ctrf.json`) records per-check results so a failure is +diagnosable without re-running. + +### No verification is skipped, deliberately + +The platform's own `skillsbench` config carries several +`skip = "oracle", reason = "Non-deterministic: …"` entries. Under a **binary** +reward one flaky check corrupts the entire signal, so `[tasks.skip-verification]` +here is empty and a test enforces that: a check that cannot be made +deterministic must be **removed**, not skipped. + +## Building and running locally + +```bash +cd benchmarks/documentdb-sdk-skills +docker build -f shared/base/Dockerfile -t documentdb-orders-base:latest . +cd tasks/orders-api-python +docker build -f environment/Dockerfile -t documentdb-orders-api-python:latest . + +# Positive control: the oracle must score 1 +docker run --rm documentdb-orders-api-python:latest \ + bash -c '/solution/solve.sh && /tests/test.sh; cat /logs/verifier/reward.txt' + +# Negative control: an empty /app must score 0 +docker run --rm documentdb-orders-api-python:latest \ + bash -c '/tests/test.sh; cat /logs/verifier/reward.txt' +``` + +`--backend local` lets MSBench run harbor-native benchmarks entirely on your +machine, so the whole benchmark can be iterated **without** pushing to the +internal registry: + +```bash +pip install "msbench-cli[harbor]" +msbench-cli run --benchmark documentdb-sdk-skills \ + --dataset msbench-registration/documentdb-sdk-skills/dataset.jsonl \ + --backend local +``` + +## Verification status + +Honest accounting of what has and has not been proven: + +| Claim | Status | +|---|---| +| Registration matches the live platform schema | ✅ read from the central repo; asserted by tests | +| Task follows the Harbor layout | ✅ asserted by tests | +| Instruction contains no hints | ✅ asserted (mutation-verified) | +| Cost metrics agree with the Loop B module | ✅ asserted (mutation-verified) | +| Harvester works on a real session store | ✅ run against a live store | +| All shell entrypoints parse | ✅ `bash -n` | +| **Images build** | ⬜ **not yet** — the Docker daemon was unavailable | +| **Oracle scores 1** | ⬜ **not yet** — blocked on the build | +| **Empty submission scores 0** | ⬜ **not yet** — blocked on the build | +| Submitted to MSBench | ⬜ not yet | + +The oracle and empty-submission controls are wired into +[`loop-c-benchmark.yml`](../../.github/workflows/loop-c-benchmark.yml) and run +on `workflow_dispatch`. + +## What is *not* here + +- **The skills themselves.** They live in [`skills/`](../../skills/). This + benchmark measures obedience to them; it does not own them. +- **The fast development loops.** `testing/` (deterministic) and `evals/` + (cross-model) are for iteration; see [`docs/TESTING.md`](../../docs/TESTING.md). + This is the slow, hermetic publication layer. diff --git a/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/benchmark_loaders.toml b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/benchmark_loaders.toml new file mode 100644 index 0000000..62c5f52 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/benchmark_loaders.toml @@ -0,0 +1,8 @@ +# Place this file at: +# /benchmarks/skillsbench/documentdb-sdk-skills-noskills/benchmark_loaders.toml +# +# Tells generate_database.py how to load this benchmark. + +[benchmark] +name = "documentdb-sdk-skills-noskills" +path = "dataset.jsonl" diff --git a/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/dataset.jsonl b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/dataset.jsonl new file mode 100644 index 0000000..5618a49 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/dataset.jsonl @@ -0,0 +1 @@ +{"benchmark": "documentdb-sdk-skills-noskills", "instance_id": "orders-api-python", "image_tag": "documentdb-sdk-skills-noskills.eval.x86_64.orders-api-python:msbench-0.0.1", "problem_statement": "Build an Orders API in Python backed by Azure DocumentDB (MongoDB-compatible). See /instruction.md inside the container for the API contract, build/run conventions and connection details.", "sdk": "python", "task_style": "harbor-native", "dataset_version": "0.0.1"} diff --git a/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/registry.json b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/registry.json new file mode 100644 index 0000000..d889e3e --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/registry.json @@ -0,0 +1,22 @@ +{ + "id": "documentdb-sdk-skills-noskills", + "name": "DocumentDB SDK Skills (No Skills)", + "owner": "Azure DocumentDB", + "creator": "Azure DocumentDB Agent Kit", + "contactEmail": "msbench@microsoft.com", + "description": "Control arm for documentdb-sdk-skills: the identical task, environment and verifier, with NO DocumentDB skills installed. Establishes the baseline an unassisted agent achieves so the treatment arm's score can be interpreted.", + "source": "1P", + "format": "Harbor", + "quality": "Trusted", + "category": "Feature Addition", + "license": "MIT", + "languages": [ + "Python" + ], + "platforms": [ + "Linux" + ], + "site": "https://github.com/Azure/documentdb-agent-kit", + "notes": "Control arm. Identical to documentdb-sdk-skills except that no skills are installed into the agent's skills directory. Mirrors the platform's existing skillsbench / skillsbenchnoskills convention.", + "externalInstances": 1 +} diff --git a/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/benchmark_loaders.toml b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/benchmark_loaders.toml new file mode 100644 index 0000000..f5bb1a5 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/benchmark_loaders.toml @@ -0,0 +1,8 @@ +# Place this file at: +# /benchmarks/skillsbench/documentdb-sdk-skills/benchmark_loaders.toml +# +# Tells generate_database.py how to load this benchmark. + +[benchmark] +name = "documentdb-sdk-skills" +path = "dataset.jsonl" diff --git a/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/dataset.jsonl b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/dataset.jsonl new file mode 100644 index 0000000..461ee75 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/dataset.jsonl @@ -0,0 +1 @@ +{"benchmark": "documentdb-sdk-skills", "instance_id": "orders-api-python", "image_tag": "documentdb-sdk-skills.eval.x86_64.orders-api-python:msbench-0.0.1", "problem_statement": "Build an Orders API in Python backed by Azure DocumentDB (MongoDB-compatible). See /instruction.md inside the container for the API contract, build/run conventions and connection details.", "sdk": "python", "task_style": "harbor-native", "dataset_version": "0.0.1"} diff --git a/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/registry.json b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/registry.json new file mode 100644 index 0000000..ffec849 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/registry.json @@ -0,0 +1,22 @@ +{ + "id": "documentdb-sdk-skills", + "name": "DocumentDB SDK Skills", + "owner": "Azure DocumentDB", + "creator": "Azure DocumentDB Agent Kit", + "contactEmail": "msbench@microsoft.com", + "description": "Measures whether a coding agent applies Azure DocumentDB best practices when building a service backed by DocumentDB. The agent has the documentdb-agent-kit skills installed and discoverable, and the task statement is deliberately silent about indexing, data modelling and connection management. Graded behaviourally: the verifier drives the agent's HTTP API, independently reads the database, and inspects the PostgreSQL engine underneath for query plans and index usage.", + "source": "1P", + "format": "Harbor", + "quality": "Trusted", + "category": "Feature Addition", + "license": "MIT", + "languages": [ + "Python" + ], + "platforms": [ + "Linux" + ], + "site": "https://github.com/Azure/documentdb-agent-kit", + "notes": "Treatment arm: the DocumentDB agent kit skills are installed and discoverable, but never mentioned in the prompt. Compare against documentdb-sdk-skills-noskills, which is the identical task with no skills installed. Only the DELTA between the two is meaningful; an absolute pass rate on either arm alone is not interpretable.", + "externalInstances": 1 +} diff --git a/benchmarks/documentdb-sdk-skills/orders.toml b/benchmarks/documentdb-sdk-skills/orders.toml new file mode 100644 index 0000000..abd5948 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/orders.toml @@ -0,0 +1,63 @@ +# orders.toml — harbor-format-curation config for documentdb-sdk-skills. +# +# Build: +# harbor-format-curation import orders.toml +# harbor-format-curation build --profile local orders.toml +# harbor-format-curation update-database --profile local orders.toml +# +# The registries below mirror the platform's existing skillsbench benchmark. + +[maintainer] +team = "Azure DocumentDB" +name = "Azure DocumentDB Agent Kit" +email = "msbench@microsoft.com" + +[import] +from = "path-local" +path = "tasks" +staging-folder = "${TEMP}/harborcuration/documentdb-sdk-skills" + +[docker.local] +registry = "localhost:5000" +provider = "Docker localhost registry" +benchmark = "documentdb-sdk-skills" +type = "eval" +architecture = "x86_64" +version = "0.0.1" + +[docker.staging] +registry = "msbenchstaging.azurecr.io" +provider = "Azure container registry" +benchmark = "documentdb-sdk-skills" +type = "eval" +architecture = "x86_64" +version = "0.0.1" + +[docker.prod] +registry = "codeexecservice.azurecr.io" +provider = "Azure container registry" +benchmark = "documentdb-sdk-skills" +type = "eval" +architecture = "x86_64" +version = "0.0.1" + +# ============================================================================ +# Task Exclusions — completely skip these tasks during build +# ============================================================================ +[tasks.exclude] +# (none yet — a single task ships today) + +# ============================================================================ +# Verification Skips — build the task but skip a specific verification phase. +# Valid phases: "environment", "agent", "oracle". +# +# DELIBERATELY EMPTY, and it should stay that way. +# +# The platform's own skillsbench config carries several +# `skip = "oracle", reason = "Non-deterministic: ..."` entries. That is the +# failure mode this benchmark is built to avoid: under a BINARY reward, a +# single flaky check corrupts the whole signal, so a check that cannot be made +# deterministic must be REMOVED rather than skipped. Every check here is +# required to clear the determinism bar in testing/scenarios/determinism/. +# ============================================================================ +[tasks.skip-verification] diff --git a/benchmarks/documentdb-sdk-skills/shared/base/Dockerfile b/benchmarks/documentdb-sdk-skills/shared/base/Dockerfile new file mode 100644 index 0000000..e3e9233 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/base/Dockerfile @@ -0,0 +1,122 @@ +# documentdb-orders-base +# ---------------------- +# Shared base image for every orders- task. Carries: +# - DocumentDB Local (MongoDB-compatible gateway + PostgreSQL engine) +# - mongosh (the image does NOT ship it — see below) +# - Python 3 + verifier dependencies (pytest, pymongo, psycopg, requests) +# - The shared /verifier/ grader library and /verifier/contracts/ +# - /logs/verifier/ ready for the reward file +# +# Per-SDK task Dockerfiles do `FROM documentdb-orders-base` and add only the +# SDK runtime + the per-task /reference and /tests payload. +# +# WHY THIS IS EASIER THAN THE COSMOS EQUIVALENT +# --------------------------------------------- +# The Cosmos benchmark's hardest problem is its base image: a Mariner-based +# emulator that runs as PID 1, needs its ENTRYPOINT overridden, and must be +# coaxed into running as an unprivileged user. DocumentDB Local is a plain +# Ubuntu container we already run daily in the kit's test suite, and its base +# layer is PUBLIC — so anyone can reproduce this image even though the MSBench +# harness itself is Microsoft-internal. + +FROM ghcr.io/microsoft/documentdb/documentdb-local:latest + +USER root +WORKDIR / + +# The upstream image starts the gateway as its entrypoint. Harbor needs to +# drive tests/test.sh as the verifier entrypoint and the agent needs a shell, +# so reset it and let start-documentdb control the lifecycle. +ENTRYPOINT [] +CMD ["/bin/bash"] + +ARG MONGOSH_VERSION=2.3.8 + +RUN set -eux; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + python3 python3-pip python3-venv ca-certificates curl jq procps \ + tar gzip unzip zip which; \ + rm -rf /var/lib/apt/lists/* + +# --------------------------------------------------------------------------- +# mongosh. NOT OPTIONAL, and not present upstream. +# +# The documentdb-local image ships `psql` but NO `mongosh` (verified against +# the pristine image). Every seeder, the verifier and the reference app's +# tooling talk to the database through it. Without this the whole benchmark +# fails with "executable file not found", which reads like a broken task +# rather than a missing dependency. +# --------------------------------------------------------------------------- +RUN set -eux; \ + curl -sSL "https://downloads.mongodb.com/compass/mongosh-${MONGOSH_VERSION}-linux-x64.tgz" \ + -o /tmp/mongosh.tgz; \ + tar xzf /tmp/mongosh.tgz -C /tmp; \ + cp "/tmp/mongosh-${MONGOSH_VERSION}-linux-x64/bin/mongosh" /usr/local/bin/mongosh; \ + cp "/tmp/mongosh-${MONGOSH_VERSION}-linux-x64/bin/mongosh_crypt_v1.so" /usr/local/lib/ || true; \ + rm -rf /tmp/mongosh.tgz "/tmp/mongosh-${MONGOSH_VERSION}-linux-x64"; \ + mongosh --version + +# Verifier dependencies, pinned so the benchmark is reproducible. +# psycopg is what makes check_engine.py possible: it reads the PostgreSQL +# engine underneath the Mongo API, a second observation plane the Cosmos +# benchmark does not have. +RUN python3 -m pip install --no-cache-dir --break-system-packages \ + pytest==8.3.3 \ + pytest-json-ctrf==0.3.5 \ + requests==2.32.3 \ + pymongo==4.10.1 \ + "psycopg[binary]==3.2.3" \ + pyyaml==6.0.2 + +# Isolated venv for the verifier so the agent's /app/build.sh cannot shadow a +# verifier dependency by pip-installing a different pymongo into system +# site-packages. runner.sh prefers /opt/verifier-venv/bin/python. +RUN python3 -m venv /opt/verifier-venv && \ + /opt/verifier-venv/bin/pip install --no-cache-dir \ + pytest==8.3.3 \ + pytest-json-ctrf==0.3.5 \ + requests==2.32.3 \ + pymongo==4.10.1 \ + "psycopg[binary]==3.2.3" \ + pyyaml==6.0.2 + +# Shared grader library + scenario contracts. Owned by the image, not by the +# agent — /app cannot modify these. +COPY shared/verifier/ /verifier/ +COPY shared/contracts/ /verifier/contracts/ +COPY shared/base/start-documentdb.sh /usr/local/bin/start-documentdb +RUN chmod +x /usr/local/bin/start-documentdb /verifier/runner.sh + +# Remote-backend (CES) contract files. The runtime expects these at root. +COPY shared/ces/ /tmp/ces/ +RUN set -eux; \ + for f in ces_activate.sh entry.sh save.sh restore.sh parse.py \ + glob_files.py cut_metadata.py secret_files.txt \ + nonsecret_metadata_keys.txt; do \ + if [ -f "/tmp/ces/$f" ]; then cp "/tmp/ces/$f" "/$f"; fi; \ + done; \ + if [ -f /tmp/ces/activate_python.sh ]; then cp /tmp/ces/activate_python.sh /opt/activate_python.sh; fi; \ + if [ -f /tmp/ces/safe_save.sh ]; then cp /tmp/ces/safe_save.sh /opt/safe_save.sh; fi; \ + rm -rf /tmp/ces; \ + chmod +x /ces_activate.sh /entry.sh /save.sh /restore.sh \ + /opt/activate_python.sh /opt/safe_save.sh 2>/dev/null || true + +RUN mkdir -p /logs/verifier /app /reference /output /drop /agent /testbed && \ + chmod -R 1777 /logs /output /drop /agent /testbed /app /reference 2>/dev/null || true + +# Connection settings. The agent is expected to read these from the +# environment — check_skills.py fails any app that hardcodes them. +ENV SCENARIO="orders" \ + DOCUMENTDB_HOST="localhost" \ + DOCUMENTDB_PORT="10260" \ + DOCUMENTDB_USER="docdbadmin" \ + DOCUMENTDB_DATABASE="ordersdb" \ + DOCUMENTDB_ORDERS_COLLECTION="orders" \ + PG_PORT="9712" \ + PG_USER="documentdb" \ + PG_DB="postgres" \ + APP_PORT="9080" \ + APP_WORKDIR="/app" \ + REFERENCE_DIR="/reference" \ + VERIFIER_LOG_DIR="/logs/verifier" diff --git a/benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh b/benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh new file mode 100644 index 0000000..09473ee --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# start-documentdb — bring up DocumentDB Local inside the task container and +# wait until the Mongo-compatible gateway actually accepts authenticated +# connections. +# +# Called by the verifier runner (and available to the agent) so the database +# lifecycle is controlled by the test harness rather than by the image's +# entrypoint, which Harbor overrides. +# +# The password is generated per container and exported, never baked into the +# image — check_skills.py fails any app that hardcodes a credential, so the +# benchmark must not model bad practice itself. + +set -uo pipefail + +PORT="${DOCUMENTDB_PORT:-10260}" +USER_="${DOCUMENTDB_USER:-docdbadmin}" +LOG="${VERIFIER_LOG_DIR:-/logs/verifier}/documentdb.log" +mkdir -p "$(dirname "$LOG")" + +if [ -z "${DOCUMENTDB_PASSWORD:-}" ]; then + DOCUMENTDB_PASSWORD="Bench$(head -c 12 /dev/urandom | od -An -tx1 | tr -d ' \n')" + export DOCUMENTDB_PASSWORD +fi + +# Idempotent: a second call must not start a second gateway. +if pgrep -f "documentdb" >/dev/null 2>&1 && \ + mongosh "localhost:${PORT}/admin" -u "$USER_" -p "$DOCUMENTDB_PASSWORD" \ + --authenticationMechanism SCRAM-SHA-256 --tls --tlsAllowInvalidCertificates \ + --quiet --eval "db.runCommand({ping:1}).ok" 2>/dev/null | grep -q 1; then + echo "[start-documentdb] already running" + exit 0 +fi + +echo "[start-documentdb] starting (log: $LOG)" +ENTRY="" +for candidate in /usr/local/bin/entrypoint.sh /entrypoint.sh /usr/local/bin/start.sh; do + [ -x "$candidate" ] && { ENTRY="$candidate"; break; } +done + +if [ -z "$ENTRY" ]; then + echo "[start-documentdb] ERROR: no entrypoint script found in the image." >&2 + echo "[start-documentdb] Looked for: /usr/local/bin/entrypoint.sh /entrypoint.sh /usr/local/bin/start.sh" >&2 + exit 1 +fi + +USERNAME="$USER_" PASSWORD="$DOCUMENTDB_PASSWORD" \ + nohup "$ENTRY" >"$LOG" 2>&1 & + +echo "[start-documentdb] waiting for the gateway to accept connections..." +for i in $(seq 1 120); do + if mongosh "localhost:${PORT}/admin" -u "$USER_" -p "$DOCUMENTDB_PASSWORD" \ + --authenticationMechanism SCRAM-SHA-256 --tls --tlsAllowInvalidCertificates \ + --quiet --eval "db.runCommand({ping:1}).ok" 2>/dev/null | grep -q 1; then + echo "[start-documentdb] ready after ${i}s" + exit 0 + fi + sleep 1 +done + +echo "[start-documentdb] ERROR: gateway did not become ready in 120s." >&2 +echo "[start-documentdb] NOTE: DocumentDB reports a wrong password as" >&2 +echo "[start-documentdb] 'MongoServerError: Invalid key' — an AUTH failure," >&2 +echo "[start-documentdb] not a malformed document." >&2 +tail -40 "$LOG" >&2 || true +exit 1 diff --git a/benchmarks/documentdb-sdk-skills/shared/ces/runner.sh b/benchmarks/documentdb-sdk-skills/shared/ces/runner.sh new file mode 100644 index 0000000..b58a507 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/ces/runner.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +# runner.sh — agent runner for documentdb-sdk-skills. +# +# THE ORGANIC-DISCOVERY PROTOCOL +# ------------------------------ +# This installs the DocumentDB agent kit's skills into the agent's personal +# skills directory as NORMALLY DISCOVERABLE skills, and then drives the default +# agent with NO HINT to use them. +# +# That is the entire point of the benchmark. Telling the agent "use the +# DocumentDB skills" would measure whether a model can follow an instruction — +# an easy question with an uninteresting answer. Not telling it measures +# whether an agent that merely HAS the kit installed actually applies it, which +# is the question a user's experience actually depends on. +# +# ARM SELECTION +# ------------- +# SKILLS_ARM=kit -> install the skills (benchmark: documentdb-sdk-skills) +# SKILLS_ARM=control -> install nothing (benchmark: documentdb-sdk-skills-noskills) +# +# The control arm is a separately registered benchmark, mirroring the +# platform's existing skillsbench / skillsbenchnoskills convention. Only the +# DELTA between the two arms is meaningful. + +set -uo pipefail + +SKILLS_ARM="${SKILLS_ARM:-kit}" +SKILLS_SRC="${SKILLS_SRC:-/opt/documentdb-agent-kit/skills}" +SKILLS_DEST="${SKILLS_DEST:-$HOME/.copilot/skills}" + +echo "[runner] arm=${SKILLS_ARM}" + +if [ "$SKILLS_ARM" = "kit" ]; then + if [ ! -d "$SKILLS_SRC" ]; then + # Fail loudly. A treatment arm whose skills are missing is silently just + # a second control arm, and would produce a confident, wrong conclusion + # that the kit makes no difference. + echo "[runner] FATAL: SKILLS_ARM=kit but $SKILLS_SRC does not exist." >&2 + exit 1 + fi + mkdir -p "$SKILLS_DEST" + cp -r "$SKILLS_SRC"/. "$SKILLS_DEST"/ + echo "[runner] installed $(find "$SKILLS_DEST" -name SKILL.md | wc -l) skills into $SKILLS_DEST" +else + echo "[runner] control arm: no skills installed" + # Defensive: make sure a stale layer cannot leak skills into the control. + rm -rf "$SKILLS_DEST" 2>/dev/null || true +fi + +# The prompt is the task statement, verbatim and unaugmented. Nothing here +# mentions DocumentDB best practices, indexes, ESR, connection pooling or the +# skills themselves. +exec "$@" diff --git a/benchmarks/documentdb-sdk-skills/shared/contracts/orders.json b/benchmarks/documentdb-sdk-skills/shared/contracts/orders.json new file mode 100644 index 0000000..9ee1686 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/contracts/orders.json @@ -0,0 +1,49 @@ +{ + "scenario": "orders", + "database_env": "DOCUMENTDB_DATABASE", + "database_default": "ordersdb", + "health_path": "/health", + "roots": [ + { + "name": "order", + "collection_env": "DOCUMENTDB_ORDERS_COLLECTION", + "collection_default": "orders", + "create": { "path": "/orders", "duplicate_status": 409 }, + "get": { "path": "/orders/{id}" }, + "list": { + "path": "/orders", + "filter_param": "customer_id", + "filter_field": "customer_id" + }, + "compare_fields": ["customer_id", "status", "amount", "items"], + "ordered_array_fields": ["items"], + "string_array_fields": ["items"], + "string_fields": ["customer_id", "status"], + "numeric_fields": ["amount"], + "modeling": { + "type_discriminator": true, + "schema_version": true, + "timestamp_field": "created_at" + }, + "indexing": { + "require_secondary_index": true, + "required_query_fields": ["customer_id"], + "esr_compound": { + "equality": ["customer_id"], + "sort": ["created_at"] + } + }, + "engine": { + "max_scan_amplification": 5.0, + "forbid_full_scan_for": ["customer_id"] + }, + "seed": [ + { "id": "o-alpha", "customer_id": "CUST-001", "status": "shipped", "amount": 120.5, "items": ["widget", "gasket"] }, + { "id": "o-bravo", "customer_id": "CUST-001", "status": "pending", "amount": 42.0, "items": ["bolt"] }, + { "id": "o-charlie", "customer_id": "CUST-002", "status": "shipped", "amount": 999.99, "items": ["frame", "wheel", "chain"] }, + { "id": "o-delta", "customer_id": "CUST-003", "status": "cancelled", "amount": 7.25, "items": [] } + ] + } + ], + "children": [] +} diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/check_api.py b/benchmarks/documentdb-sdk-skills/shared/verifier/check_api.py new file mode 100644 index 0000000..5d5b005 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/check_api.py @@ -0,0 +1,116 @@ +"""API conformance — does the service expose the contracted HTTP surface? + +Weakest of the behavioural checks and deliberately first: if the API is wrong, +every later failure is a consequence rather than an independent finding, and +the per-check logs should make that obvious. + +SDK-agnostic: no SDK token appears in a test name, so these run for every SDK. +""" +from __future__ import annotations + +import pytest + +from conftest import CONTRACT, ROOTS, fmt_path, root_ids + + +def test_health_endpoint_responds(api): + path = CONTRACT.get("health_path", "/health") + resp = api.get(path) + assert resp.status_code == 200, ( + f"GET {path} returned {resp.status_code}, expected 200. The service must " + f"expose a health endpoint so the harness can tell 'not started yet' " + f"apart from 'started but broken'." + ) + + +@pytest.mark.parametrize("root", ROOTS, ids=root_ids) +class TestCreate: + def test_create_accepts_contract_rows(self, root, seed_roots): + results = seed_roots[root["name"]] + bad = [r for r in results if r["status"] not in (200, 201)] + assert not bad, ( + f"POST {root['create']['path']} rejected valid rows: " + + ", ".join(f"{r['row']['id']} -> {r['status']}" for r in bad) + ) + + def test_duplicate_create_is_rejected(self, root, api, seed_roots): + """A second create of the same id must not silently succeed. + + Accepting it would let an implementation overwrite or duplicate rows, + which the behavioural check then catches as data corruption — better to + name the cause here. + """ + create = root.get("create") + expected = create.get("duplicate_status", 409) + row = root["seed"][0] + resp = api.post(create["path"], json=row) + assert resp.status_code == expected, ( + f"Re-POSTing existing {root['name']} {row['id']!r} returned " + f"{resp.status_code}, expected {expected}." + ) + + +@pytest.mark.parametrize("root", ROOTS, ids=root_ids) +class TestRead: + def test_get_by_id_returns_the_row(self, root, api, seed_roots): + get = root.get("get") + if not get: + pytest.skip(f"{root['name']} has no GET-by-id endpoint") + for row in root["seed"]: + resp = api.get(fmt_path(get["path"], id=row["id"])) + assert resp.status_code == 200, ( + f"GET {fmt_path(get['path'], id=row['id'])} -> {resp.status_code}" + ) + body = resp.json() + for field in root.get("compare_fields", []): + assert body.get(field) == row.get(field), ( + f"{root['name']} {row['id']}: API returned {field}=" + f"{body.get(field)!r}, expected {row.get(field)!r}" + ) + + def test_get_unknown_id_is_404(self, root, api): + get = root.get("get") + if not get: + pytest.skip(f"{root['name']} has no GET-by-id endpoint") + resp = api.get(fmt_path(get["path"], id="definitely-not-a-real-id")) + assert resp.status_code == 404, ( + f"GET of an unknown {root['name']} returned {resp.status_code}, " + f"expected 404." + ) + + +@pytest.mark.parametrize("root", ROOTS, ids=root_ids) +class TestList: + def test_filtered_list_returns_exactly_the_matching_rows( + self, root, api, seed_roots + ): + """The filter is the query the whole benchmark is built around. + + Returning too many rows means the filter is ignored; too few means the + query or the index is wrong. Both are graded here as a set comparison + so ordering is not accidentally required. + """ + lst = root.get("list") + if not lst or not lst.get("filter_param"): + pytest.skip(f"{root['name']} has no filtered list endpoint") + + field = lst["filter_field"] + values = sorted({row[field] for row in root["seed"]}) + for value in values: + resp = api.get(lst["path"], params={lst["filter_param"]: value}) + assert resp.status_code == 200, ( + f"GET {lst['path']}?{lst['filter_param']}={value} -> " + f"{resp.status_code}" + ) + body = resp.json() + rows = body if isinstance(body, list) else body.get("items", body.get("data")) + assert isinstance(rows, list), ( + f"Filtered list must return a JSON array (or an object with " + f"'items'/'data'); got {type(body).__name__}" + ) + got = {r.get("id") for r in rows} + expected = {r["id"] for r in root["seed"] if r[field] == value} + assert got == expected, ( + f"{lst['path']}?{lst['filter_param']}={value} returned {sorted(got)}, " + f"expected {sorted(expected)}" + ) diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/check_behavior.py b/benchmarks/documentdb-sdk-skills/shared/verifier/check_behavior.py new file mode 100644 index 0000000..5dfbaa3 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/check_behavior.py @@ -0,0 +1,131 @@ +"""Behavioural checks — the concrete, hard-to-game core of the grader. + +For every declared root entity we: + + 1. Seed deterministic rows through the agent's public HTTP API. + 2. Independently read the persisted documents straight from DocumentDB + with the VERIFIER'S OWN client. + 3. Assert the API, the persisted documents and the contract all agree. + +This catches what a source-code regex cannot: an app that answers HTTP but +stores nothing (in-memory dict, SQLite), a filter that returns the wrong rows, +or a "create" that silently overwrites duplicates. + +Why this is the primary category: source checks tell you the agent *wrote* +something that looks right. Only this tells you the system *behaves* right. +""" +from __future__ import annotations + +import pytest + +from conftest import ROOTS, collection_name, fmt_path, root_ids + + +@pytest.mark.parametrize("root", ROOTS, ids=root_ids) +class TestPersistenceIsReal: + """Every row POSTed through the API must exist as a real document.""" + + def test_every_seeded_row_is_persisted(self, root, seed_roots, root_persisted): + docs = root_persisted[root["name"]] + missing = [r["id"] for r in root["seed"] if docs.get(r["id"]) is None] + assert not missing, ( + f"These {root['name']} rows were accepted by the API but are NOT in " + f"DocumentDB: {missing}. The service must persist through the " + f"MongoDB driver — an in-memory or SQLite store that never writes to " + f"the database fails this gate." + ) + + def test_persisted_fields_match_input(self, root, seed_roots, root_persisted): + docs = root_persisted[root["name"]] + for row in root["seed"]: + doc = docs[row["id"]] + assert doc is not None, f"{row['id']} not persisted" + for field in root.get("compare_fields", []): + assert doc.get(field) == row.get(field), ( + f"{root['name']} {row['id']}: {field!r} stored as " + f"{doc.get(field)!r}, expected {row.get(field)!r} " + f"(arrays must round-trip in order)." + ) + + +@pytest.mark.parametrize("root", ROOTS, ids=root_ids) +class TestRoundTripIntegrity: + """GET must return what is actually stored, not a cached copy that has + drifted from the persisted document.""" + + def test_api_read_matches_database(self, root, seed_roots, root_persisted, api): + get = root.get("get") + if not get: + pytest.skip(f"{root['name']} has no GET-by-id endpoint") + docs = root_persisted[root["name"]] + for row in root["seed"]: + doc = docs[row["id"]] + resp = api.get(fmt_path(get["path"], id=row["id"])) + assert resp.status_code == 200 + body = resp.json() + for field in root.get("compare_fields", []): + assert body.get(field) == doc.get(field), ( + f"{root['name']} {row['id']}: API says {field}=" + f"{body.get(field)!r} but the database holds {doc.get(field)!r}. " + f"The read path is not reading from the database." + ) + + +@pytest.mark.parametrize("root", ROOTS, ids=root_ids) +class TestNoDuplication: + def test_duplicate_create_did_not_create_a_second_document( + self, root, db, seed_roots, api + ): + """The duplicate POST in check_api must not have written a second row. + + Returning 409 while still inserting is a real bug this catches, and one + an API-only grader would miss entirely. + """ + create = root.get("create") + if not create: + pytest.skip("no create endpoint") + row = root["seed"][0] + api.post(create["path"], json=row) # attempt another duplicate + coll = db[collection_name(root)] + count = coll.count_documents( + {"$or": [{"_id": row["id"]}, {"id": row["id"]}]} + ) + assert count == 1, ( + f"{root['name']} {row['id']!r} exists {count} times after duplicate " + f"POSTs; expected exactly 1." + ) + + +@pytest.mark.parametrize("root", ROOTS, ids=root_ids) +class TestDataShape: + """Types must survive the round trip. + + A numeric amount stored as a string is the single most common DocumentDB + modelling error, it breaks range queries and index use silently, and the + kit's data-modeling skill warns about it explicitly. + """ + + def test_numeric_fields_are_stored_as_numbers(self, root, root_persisted): + for field in root.get("numeric_fields", []): + for row in root["seed"]: + doc = root_persisted[root["name"]][row["id"]] + assert doc is not None + value = doc.get(field) + assert isinstance(value, (int, float)) and not isinstance(value, bool), ( + f"{root['name']} {row['id']}: {field!r} stored as " + f"{type(value).__name__} ({value!r}), expected a number. " + f"Numbers stored as strings break range queries and index use." + ) + + def test_string_arrays_stay_arrays(self, root, root_persisted): + for field in root.get("string_array_fields", []): + for row in root["seed"]: + doc = root_persisted[root["name"]][row["id"]] + value = doc.get(field) + assert isinstance(value, list), ( + f"{root['name']} {row['id']}: {field!r} stored as " + f"{type(value).__name__}, expected an array." + ) + assert all(isinstance(v, str) for v in value), ( + f"{root['name']} {row['id']}: {field!r} must contain strings" + ) diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/check_documentdb.py b/benchmarks/documentdb-sdk-skills/shared/verifier/check_documentdb.py new file mode 100644 index 0000000..ca22693 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/check_documentdb.py @@ -0,0 +1,153 @@ +"""DocumentDB-level checks — modelling and indexing, read via pymongo. + +These grade the decisions the kit's `documentdb-data-modeling` and +`documentdb-indexing` skills teach, observed in the actual collection rather +than in the source code: + + * a type discriminator and schemaVersion on documents (schema evolution) + * ISO-8601 timestamps stored in a queryable form + * at least one secondary index covering the query the API exposes + * compound indexes ordered Equality -> Sort (ESR) + +Index checks are structural, not source-based, so they hold regardless of which +driver or language the agent used. +""" +from __future__ import annotations + +import re + +import pytest + +from conftest import ROOTS, collection_name, root_ids + +ISO8601 = re.compile( + r"^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:?\d{2})?$" +) + + +def _indexes(db, root): + return list(db[collection_name(root)].list_indexes()) + + +def _secondary(indexes): + return [ix for ix in indexes if ix.get("name") != "_id_"] + + +@pytest.mark.parametrize("root", ROOTS, ids=root_ids) +class TestModelling: + def test_documents_carry_a_type_discriminator(self, root, root_persisted): + """Mixed-type collections are normal in DocumentDB; without a + discriminator you cannot tell the shapes apart later.""" + if not root.get("modeling", {}).get("type_discriminator"): + pytest.skip("not required by the contract") + candidates = ("type", "_type", "docType", "doc_type", "entityType") + for row in root["seed"]: + doc = root_persisted[root["name"]][row["id"]] + assert doc is not None, f"{row['id']} not persisted" + assert any(doc.get(c) for c in candidates), ( + f"{root['name']} {row['id']} has no type discriminator " + f"(looked for {candidates}). Documents should record what they " + f"are so a collection can hold more than one shape safely." + ) + + def test_documents_carry_a_schema_version(self, root, root_persisted): + if not root.get("modeling", {}).get("schema_version"): + pytest.skip("not required by the contract") + candidates = ("schemaVersion", "schema_version", "_schemaVersion", "v") + for row in root["seed"]: + doc = root_persisted[root["name"]][row["id"]] + assert any(doc.get(c) is not None for c in candidates), ( + f"{root['name']} {row['id']} has no schema version " + f"(looked for {candidates}). Without one, migrating a live " + f"collection later means guessing which documents are old." + ) + + def test_timestamp_is_queryable(self, root, root_persisted): + """Accept a BSON date or an ISO-8601 string; reject a bare epoch int or + a locale-formatted string, both of which sort incorrectly.""" + field = root.get("modeling", {}).get("timestamp_field") + if not field: + pytest.skip("no timestamp field in the contract") + import datetime as _dt + for row in root["seed"]: + doc = root_persisted[root["name"]][row["id"]] + value = doc.get(field) + assert value is not None, ( + f"{root['name']} {row['id']} has no {field!r}." + ) + ok = isinstance(value, _dt.datetime) or ( + isinstance(value, str) and ISO8601.match(value) + ) + assert ok, ( + f"{root['name']} {row['id']}: {field!r} is {value!r}. Store a " + f"BSON date or an ISO-8601 string — other formats do not sort " + f"or range-query correctly." + ) + + +@pytest.mark.parametrize("root", ROOTS, ids=root_ids) +class TestIndexing: + def test_a_secondary_index_exists(self, root, db): + if not root.get("indexing", {}).get("require_secondary_index"): + pytest.skip("not required by the contract") + secondary = _secondary(_indexes(db, root)) + assert secondary, ( + f"{collection_name(root)} has only the default _id index. The API " + f"exposes a filtered query, so it will collection-scan on every " + f"call as the collection grows." + ) + + def test_queried_fields_are_indexed(self, root, db): + """Every field the API filters on must lead some index. + + Leading position matters: a field buried in the middle of a compound + index cannot be used for an equality lookup on its own. + """ + required = root.get("indexing", {}).get("required_query_fields", []) + if not required: + pytest.skip("no required query fields") + leading = set() + for ix in _secondary(_indexes(db, root)): + keys = list(ix.get("key", {}).keys()) + if keys: + leading.add(keys[0]) + missing = [f for f in required if f not in leading] + assert not missing, ( + f"{collection_name(root)}: no index LEADS with {missing}. Existing " + f"secondary indexes lead with {sorted(leading) or 'nothing'}. A " + f"field that does not lead an index cannot serve an equality lookup." + ) + + def test_compound_index_follows_esr(self, root, db): + """Equality keys must precede Sort keys in a compound index. + + This is the single most valuable rule in the indexing skill, and it is + checkable structurally — no source parsing, no judgement. + """ + esr = root.get("indexing", {}).get("esr_compound") + if not esr: + pytest.skip("no ESR expectation in the contract") + equality, sort = esr["equality"], esr["sort"] + + compound = [ix for ix in _secondary(_indexes(db, root)) + if len(ix.get("key", {})) > 1] + if not compound: + pytest.skip( + "no compound index present; the single-field index requirement " + "is graded separately" + ) + + offenders = [] + for ix in compound: + keys = list(ix["key"].keys()) + for s in sort: + if s not in keys: + continue + s_pos = keys.index(s) + for e in equality: + if e in keys and keys.index(e) > s_pos: + offenders.append((ix.get("name"), keys)) + assert not offenders, ( + f"Compound index does not follow ESR (Equality before Sort): " + f"{offenders}. Expected equality {equality} to precede sort {sort}." + ) diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/check_engine.py b/benchmarks/documentdb-sdk-skills/shared/verifier/check_engine.py new file mode 100644 index 0000000..f7dd925 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/check_engine.py @@ -0,0 +1,191 @@ +"""Engine-level checks — the second observation plane. + +WHY THIS FILE IS THE DIFFERENTIATOR +----------------------------------- +The Cosmos benchmark's own docs concede that client-side properties "a +single-node local emulator CANNOT prove behaviorally" have to drop down to +static source-code regex — the weakest grader they use. + +DocumentDB gives us a way out. It is MongoDB-compatible on the surface and +PostgreSQL underneath, and the verifier can talk to BOTH. So instead of +grepping for `create_index(` and hoping, we ask the engine what actually +happened: + + * `explain()` through the Mongo API -> was the query planned as an index + scan, and how many documents did it read per document returned? + * `pg_stat_user_indexes` -> did the index actually get USED, or + is it dead weight that only costs + write throughput? + +An agent can fake the source. It cannot fake the engine's own statistics. + +THE METRIC: SCAN AMPLIFICATION +------------------------------ +`totalDocsExamined / nReturned`. Raw "documents examined" is the wrong metric +on this engine: measured on DocumentDB Local, the planner picks an index scan +even for very unselective predicates, so `examined` mostly reflects how many +rows legitimately match rather than whether the index helped. + + amount > 490 (selective) IXSCAN examined=760 returned=760 + amount > 10 (unselective) IXSCAN examined=19960 returned=19960 + +Both are healthy — they read only rows they return. Amplification captures +that independently of selectivity. + +DELIBERATELY NOT GRADED +----------------------- +Index-backed SORT and covered queries. The DocumentDB gateway pins the +experimental GUCs that enable them (`enableIndexOrderbyPushdown`, +`enableNewCompositeIndexOpClass`, `defaultUseCompositeOpClass`) off per +session, and `ALTER SYSTEM` plus an index rebuild does not change the +Mongo-API plan. Grading advice the harness cannot demonstrate would be worse +than not grading it. +""" +from __future__ import annotations + +import pytest + +from conftest import ROOTS, collection_name, database_name, root_ids + + +def _plan_stages(node, limit=30): + stages, guard = [], 0 + while node and guard < limit: + guard += 1 + stage = node.get("stage") + if stage: + stages.append(stage) + node = node.get("inputStage") or ( + node.get("inputStages")[0] if node.get("inputStages") else None + ) + return stages + + +def _explain(db, root, filt): + coll = collection_name(root) + plan = db.command({ + "explain": {"find": coll, "filter": filt}, + "verbosity": "executionStats", + }) + stats = plan.get("executionStats", {}) or {} + examined = int(stats.get("totalDocsExamined", 0) or 0) + returned = int(stats.get("nReturned", 0) or 0) + return { + "stages": _plan_stages((plan.get("queryPlanner") or {}).get("winningPlan")), + "examined": examined, + "returned": returned, + "amplification": (examined / returned) if returned else float("inf"), + } + + +@pytest.mark.parametrize("root", ROOTS, ids=root_ids) +class TestQueryPlan: + """Prove the index is USED, not merely created.""" + + def test_filtered_query_is_not_a_full_collection_scan( + self, root, db, seed_roots, bulk_filler + ): + fields = root.get("engine", {}).get("forbid_full_scan_for", []) + if not fields: + pytest.skip("no engine expectations in the contract") + + for field in fields: + value = root["seed"][0][field] + plan = _explain(db, root, {field: value}) + assert plan["returned"] > 0, ( + f"The probe {{{field}: {value!r}}} matched no documents, so it " + f"cannot grade anything. Seeding likely failed." + ) + assert "COLLSCAN" not in plan["stages"], ( + f"Query on {field!r} was planned as a COLLSCAN " + f"(stages={plan['stages']}). An index exists only if it is " + f"actually usable by the query the API issues." + ) + + def test_scan_amplification_is_low(self, root, db, seed_roots, bulk_filler): + """The headline engine metric: documents read per document returned.""" + engine = root.get("engine", {}) + cap = engine.get("max_scan_amplification") + fields = engine.get("forbid_full_scan_for", []) + if cap is None or not fields: + pytest.skip("no amplification expectation in the contract") + + for field in fields: + value = root["seed"][0][field] + plan = _explain(db, root, {field: value}) + assert plan["amplification"] <= cap, ( + f"Query on {field!r} read {plan['amplification']:.1f} documents " + f"per document returned (examined={plan['examined']}, " + f"returned={plan['returned']}), above the {cap}x limit. The " + f"query is scanning rows it then throws away." + ) + + +@pytest.mark.parametrize("root", ROOTS, ids=root_ids) +class TestEngineStatistics: + """Read PostgreSQL's own counters. This is the plane a Mongo-API-only + grader — and the Cosmos benchmark — cannot see.""" + + def test_a_secondary_index_actually_served_a_read( + self, root, pg, db, seed_roots, bulk_filler + ): + """An index that is never scanned is pure write tax. + + `pg_stat_user_indexes.idx_scan` is the engine's own count of how many + times each index was used, so this cannot be satisfied by declaring an + index the queries never touch. + """ + # Issue the query the API exposes so the counters have something to show. + fields = root.get("engine", {}).get("forbid_full_scan_for", []) + for field in fields: + list(db[collection_name(root)].find({field: root["seed"][0][field]})) + + with pg.cursor() as cur: + cur.execute( + """ + SELECT indexrelname, idx_scan + FROM pg_stat_user_indexes + WHERE schemaname LIKE %s + ORDER BY idx_scan DESC + """, + ("documentdb_data%",), + ) + rows = cur.fetchall() + + assert rows, ( + "No DocumentDB index statistics found in pg_stat_user_indexes. The " + "collection may live in an unexpected schema, or nothing was written." + ) + used = [(name, scans) for name, scans in rows if (scans or 0) > 0] + assert used, ( + "Not one index recorded a single scan " + f"({[(n, s) for n, s in rows][:8]}). Every read is going through a " + "sequential scan, so any index that exists is costing writes and " + "buying nothing." + ) + + def test_collection_is_not_scan_dominated( + self, root, pg, db, seed_roots, bulk_filler + ): + """Sequential scans are not always wrong — on a tiny table they are + cheaper. This only fails when there is measurable index usage nowhere + while sequential scans dominate, i.e. the access pattern is wrong in a + way that will not improve with scale. + """ + with pg.cursor() as cur: + cur.execute( + """ + SELECT COALESCE(SUM(seq_scan), 0), COALESCE(SUM(idx_scan), 0) + FROM pg_stat_user_tables + WHERE schemaname LIKE %s + """, + ("documentdb_data%",), + ) + seq, idx = cur.fetchone() + + if (seq or 0) + (idx or 0) == 0: + pytest.skip("no table statistics recorded yet") + assert (idx or 0) > 0, ( + f"Every access was a sequential scan (seq_scan={seq}, idx_scan={idx}). " + f"The schema or the indexes do not match the queries the API issues." + ) diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/check_skills.py b/benchmarks/documentdb-sdk-skills/shared/verifier/check_skills.py new file mode 100644 index 0000000..ec980e0 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/check_skills.py @@ -0,0 +1,84 @@ +r"""Skills-compliance checks — hygiene rules that must hold in any submission. + +These are the non-negotiables from the kit's `documentdb-security` skill. Unlike +check_source.py, credential checks run against the RAW source (comments +included): a password committed in a comment is still a leaked password. +""" +from __future__ import annotations + +import re + +import pytest + +# The base image generates a password at container start and exports it. Any +# literal that looks like a credential in source is therefore a real finding. +_CREDENTIAL_PATTERNS = [ + # mongodb://user:password@host — a password embedded in a URI literal + (r"mongodb(?:\+srv)?://[^\s\"']*:[^\s\"'@/]{3,}@", + "a connection URI with an embedded password"), + # password = "literal" (not os.environ / getenv / a format placeholder) + (r"(?i)\b(?:password|passwd|pwd)\s*=\s*[\"'][^\"'{}$<>]{4,}[\"']", + "a hardcoded password literal"), +] + +_ENV_READ = re.compile( + r"os\.environ|os\.getenv|getenv\(|dotenv|Environment\.GetEnvironmentVariable|" + r"process\.env|System\.getenv" +) + + +class TestNoHardcodedCredentials: + def test_no_credential_literals_in_source(self, source_text_raw): + """Deliberately scans RAW source. + + A credential in a comment is still a credential. This is the one place + where comment-stripping would weaken rather than strengthen the check. + """ + findings = [] + for pattern, label in _CREDENTIAL_PATTERNS: + for match in re.finditer(pattern, source_text_raw): + snippet = match.group(0) + # Redact before reporting: the failure message ends up in logs. + findings.append(f"{label}: {snippet[:24]}…") + assert not findings, ( + "Hardcoded credentials found in the source:\n " + + "\n ".join(findings[:5]) + + "\nRead the password from the environment " + "(DOCUMENTDB_PASSWORD) instead — the container generates a fresh " + "one per run, so a literal cannot even be correct." + ) + + +class TestConfigurationComesFromTheEnvironment: + def test_connection_settings_are_read_from_env(self, source_text): + assert _ENV_READ.search(source_text), ( + "No environment-variable reads found. The host, port, credentials " + "and database name are supplied via the environment " + "(DOCUMENTDB_HOST / _PORT / _USER / _PASSWORD / _DATABASE); an app " + "that does not read them cannot be deployed anywhere else." + ) + + def test_database_name_is_not_hardcoded_over_the_env(self, source_text): + """A default is fine; ignoring the env var is not.""" + if not re.search(r"DOCUMENTDB_DATABASE", source_text): + pytest.fail( + "The database name is never read from DOCUMENTDB_DATABASE. " + "Hardcoding it means the same build cannot target another " + "database." + ) + + +class TestNoForbiddenAntiPatterns: + def test_no_insecure_auth_bypass(self, sdk, source_text): + """`authMechanism` must not be downgraded to none/PLAIN. + + Azure DocumentDB uses SCRAM-SHA-256 or Entra. Disabling auth to make a + local run work is the kind of shortcut that survives into production. + """ + if sdk != "python": + pytest.skip(f"does not apply to {sdk}") + bad = re.search(r"authMechanism\s*=\s*[\"'](?:PLAIN|NONE|none)[\"']", source_text) + assert not bad, ( + "authMechanism is set to an insecure value. Azure DocumentDB uses " + "SCRAM-SHA-256 (or Microsoft Entra)." + ) diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/check_source.py b/benchmarks/documentdb-sdk-skills/shared/verifier/check_source.py new file mode 100644 index 0000000..8e0a585 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/check_source.py @@ -0,0 +1,122 @@ +r"""Source-code checks — the STATIC, deliberately WEAKER half of the grader. + +IMPORTANT: these are regex scans over the agent's source with comments +stripped (see `_strip_comments` in conftest.py). String *literals* are NOT +stripped, so every pattern here requires code adjacency (`foo\s*=`, +`Foo\s*\(`) rather than a bare keyword a log line could satisfy by accident. + +WHY SO FEW CHECKS LIVE HERE +--------------------------- +The Cosmos benchmark has ~520 lines of source checks because a single-node +emulator cannot prove client configuration behaviourally, so most of its +rubric has nowhere else to go. + +We are not in that position. DocumentDB lets the verifier read the +PostgreSQL engine underneath, so index usage, scan behaviour and connection +reuse are graded BEHAVIOURALLY in check_engine.py. This file is therefore +small on purpose: only properties that genuinely leave no runtime trace stay +here. Prefer adding a check to check_engine.py or check_behavior.py whenever +the behaviour is observable. + +The rules asserted here come from the kit's `documentdb-driver`, +`documentdb-connection` and `documentdb-data-modeling` skills. +""" +from __future__ import annotations + +import re + +import pytest + + +def _need(sdk: str, *want: str): + if sdk not in want: + pytest.skip(f"does not apply to {sdk} (only: {', '.join(want)})") + + +class TestClientLifecycle: + """Singleton client. + + A MongoClient owns a connection pool. Constructing one per request + exhausts server connections under load and defeats pooling entirely — + the single most common driver mistake, and what `documentdb-driver` and + `documentdb-connection` both open with. + + check_engine.py checks the runtime consequence; this names the cause. + """ + + def test_client_is_not_constructed_per_request(self, sdk, source_text): + _need(sdk, "python") + # A client built inside a request handler is the anti-pattern. Look for + # a MongoClient(...) construction indented under a decorated route. + route_then_client = re.compile( + r"@\w+\.(?:get|post|put|delete|route)\([^)]*\)\s*" + r"(?:async\s+)?def\s+\w+\([^)]*\):" + r"(?:[^\n]*\n(?:[ \t]+[^\n]*\n)*?)*?[ \t]+\w*\s*=\s*MongoClient\s*\(", + re.MULTILINE, + ) + assert not route_then_client.search(source_text), ( + "A MongoClient is constructed inside a request handler. Create one " + "client at application start-up and reuse it: each client owns a " + "connection pool, so per-request construction exhausts server " + "connections and defeats pooling." + ) + + def test_a_client_is_constructed_somewhere(self, sdk, source_text): + _need(sdk, "python") + assert re.search(r"MongoClient\s*\(", source_text), ( + "No MongoClient construction found in the source. The service must " + "talk to DocumentDB through the MongoDB driver." + ) + + +class TestConnectionConfiguration: + """Explicit pool and timeout settings. + + Defaults are not wrong, but an unset serverSelectionTimeoutMS means a + database blip surfaces as a 30-second hang rather than a fast error. The + `documentdb-connection` skill is entirely about making these explicit. + """ + + def test_connection_options_are_set_explicitly(self, sdk, source_text): + _need(sdk, "python") + options = ( + r"maxPoolSize", r"minPoolSize", r"serverSelectionTimeoutMS", + r"connectTimeoutMS", r"socketTimeoutMS", r"retryWrites", + ) + found = [o for o in options if re.search(o + r"\s*=", source_text)] + assert found, ( + "MongoClient is constructed with no explicit connection options. " + f"Set at least one of {', '.join(options)} — relying on defaults " + "means a database blip becomes a long hang instead of a fast error." + ) + + +class TestTlsHygiene: + """TLS must not be silently disabled. + + Azure DocumentDB requires TLS. Turning off certificate validation to make + a local container work, then shipping it, is a real and common failure — + and exactly what the `documentdb-security` skill warns about. + """ + + def test_certificate_validation_is_not_hardcoded_off(self, sdk, source_text): + _need(sdk, "python") + offenders = re.findall( + r"tlsAllowInvalidCertificates\s*=\s*True|" + r"tlsInsecure\s*=\s*True", + source_text, + ) + if offenders: + # Allowed only when driven by an environment variable, which is how + # a local-vs-cloud difference should be expressed. + env_driven = re.search( + r"tlsAllowInvalidCertificates\s*=\s*[^,\n)]*(?:os\.environ|getenv|" + r"os\.getenv|settings\.|config\.)", + source_text, + ) + assert env_driven, ( + "TLS certificate validation is disabled with a hardcoded True " + f"({offenders[:3]}). Azure DocumentDB requires TLS; if a local " + "container needs a relaxed setting, drive it from an environment " + "variable so production cannot inherit it." + ) diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/conftest.py b/benchmarks/documentdb-sdk-skills/shared/verifier/conftest.py new file mode 100644 index 0000000..2339ec2 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/conftest.py @@ -0,0 +1,443 @@ +"""Shared pytest fixtures for the documentdb-sdk-skills verifier. + +The verifier is **contract-driven**, mirroring the Cosmos benchmark's design. +Each task image bakes a scenario contract (shared/contracts/.json, +copied to /verifier/contracts/) and selects it with the SCENARIO env var. The +contract declares, per scenario: + + * the DocumentDB database + collection env vars and their defaults, + * the "root" entities reachable via create/get/list, their deterministic seed + data, field shapes, modelling / indexing expectations, and + * the engine-level expectations (scan amplification, forbidden full scans). + +Everything is read from environment variables the base image and the per-task +test.sh set up: + + SCENARIO -- orders (selects the contract) + SDK -- python | dotnet | java | nodejs | go + APP_PORT -- port the agent's app should listen on + APP_WORKDIR -- where the agent put its source (/app) + DOCUMENTDB_HOST/PORT/USER -- Mongo-API connection + DOCUMENTDB_PASSWORD -- generated per container, never baked in + DOCUMENTDB_DATABASE -- scenario database + DOCUMENTDB_*_COLLECTION -- per-entity collection names + PG_PORT / PG_USER / PG_DB -- the PostgreSQL engine underneath + VERIFIER_LOG_DIR -- where per-check logs land + +The verifier owns no test data: seed data lives in the contract and is inserted +through the agent's own API, so an app that answers HTTP without persisting +fails the behavioural gate. + +TWO OBSERVATION PLANES +---------------------- +Unlike the Cosmos equivalent, this verifier can observe the system two ways: +the Mongo API (`pymongo`) and the PostgreSQL engine underneath (`psycopg`). +Client-side properties Cosmos can only regex out of source code — index usage, +connection reuse — are checked BEHAVIOURALLY here. See check_engine.py. +""" +from __future__ import annotations + +import json +import re +import os +import time +from pathlib import Path + +import pytest +import requests + +SDK_ALIASES = { + "py": "python", "python": "python", + "dotnet": "dotnet", ".net": "dotnet", "csharp": "dotnet", + "java": "java", + "node": "nodejs", "nodejs": "nodejs", "javascript": "nodejs", "js": "nodejs", + "go": "go", "golang": "go", +} + +CONTRACTS_DIR = Path(os.environ.get("CONTRACTS_DIR", "/verifier/contracts")) + + +# --------------------------------------------------------------------- +# Contract loading (module level so check_*.py can parametrize on it) +# --------------------------------------------------------------------- +def load_contract() -> dict: + """Load the scenario contract selected by SCENARIO. + + Fails loudly rather than silently grading nothing: a mis-wired task image + that grades an empty contract would report success for any submission, + which is far worse than an error. + """ + scenario = os.environ.get("SCENARIO", "orders") + path = CONTRACTS_DIR / f"{scenario}.json" + if not path.is_file(): + raise RuntimeError( + f"Scenario contract not found: {path}. SCENARIO={scenario!r}. " + f"Available: {sorted(p.name for p in CONTRACTS_DIR.glob('*.json')) + if CONTRACTS_DIR.is_dir() else 'contracts dir missing'}" + ) + return json.loads(path.read_text()) + + +CONTRACT = load_contract() +ROOTS = CONTRACT.get("roots", []) + + +def root_ids(root: dict) -> str: + return root["name"] + + +def fmt_path(template: str, **kw) -> str: + return template.format(**kw) + + +def collection_name(root: dict) -> str: + return os.environ.get( + root.get("collection_env", ""), root.get("collection_default", root["name"]) + ) + + +def database_name() -> str: + return os.environ.get( + CONTRACT.get("database_env", "DOCUMENTDB_DATABASE"), + CONTRACT.get("database_default", "ordersdb"), + ) + + +# --------------------------------------------------------------------- +# environment +# --------------------------------------------------------------------- +@pytest.fixture(scope="session") +def sdk() -> str: + raw = os.environ.get("SDK", "python").strip().lower() + return SDK_ALIASES.get(raw, raw) + + +@pytest.fixture(scope="session") +def app_port() -> int: + return int(os.environ.get("APP_PORT", "9080")) + + +@pytest.fixture(scope="session") +def app_dir() -> Path: + return Path(os.environ.get("APP_WORKDIR", "/app")) + + +@pytest.fixture(scope="session") +def base_url(app_port) -> str: + return f"http://localhost:{app_port}" + + +# --------------------------------------------------------------------- +# HTTP client +# --------------------------------------------------------------------- +class Api: + """Thin HTTP helper with a short timeout. + + A hung request must fail the check rather than stall the whole verifier + until Harbor's task timeout kills it with no diagnosis. + """ + + def __init__(self, base_url: str, timeout: float = 20.0): + self.base_url = base_url.rstrip("/") + self.timeout = timeout + self.session = requests.Session() + + def _url(self, path: str) -> str: + return f"{self.base_url}{path if path.startswith('/') else '/' + path}" + + def get(self, path, **kw): + return self.session.get(self._url(path), timeout=self.timeout, **kw) + + def post(self, path, **kw): + return self.session.post(self._url(path), timeout=self.timeout, **kw) + + +@pytest.fixture(scope="session") +def api(base_url) -> Api: + return Api(base_url) + + +# --------------------------------------------------------------------- +# database clients — the verifier's OWN, independent of the agent's +# --------------------------------------------------------------------- +@pytest.fixture(scope="session") +def mongo_uri() -> str: + host = os.environ.get("DOCUMENTDB_HOST", "localhost") + port = os.environ.get("DOCUMENTDB_PORT", "10260") + user = os.environ.get("DOCUMENTDB_USER", "docdbadmin") + pwd = os.environ.get("DOCUMENTDB_PASSWORD", "") + if not pwd: + pytest.fail( + "DOCUMENTDB_PASSWORD is not set in the verifier environment. " + "start-documentdb generates it and runner.sh must export it." + ) + from urllib.parse import quote_plus + return ( + f"mongodb://{quote_plus(user)}:{quote_plus(pwd)}@{host}:{port}/" + "?authMechanism=SCRAM-SHA-256&tls=true&tlsAllowInvalidCertificates=true" + "&directConnection=true" + ) + + +@pytest.fixture(scope="session") +def mongo(mongo_uri): + """The verifier's own pymongo client. + + Deliberately independent of the agent's client: every persistence claim is + checked by reading the database ourselves, so an app that answers HTTP from + an in-memory dict cannot pass. + """ + from pymongo import MongoClient + client = MongoClient(mongo_uri, serverSelectionTimeoutMS=20000) + client.admin.command("ping") + yield client + client.close() + + +@pytest.fixture(scope="session") +def db(mongo): + return mongo[database_name()] + + +@pytest.fixture(scope="session") +def pg(): + """Connection to the PostgreSQL engine underneath DocumentDB. + + This is the second observation plane, and the thing that makes this + benchmark stronger than a Mongo-API-only grader: index usage and scan + behaviour can be proven from the engine's own statistics rather than + inferred from source code. + """ + psycopg = pytest.importorskip("psycopg", reason="psycopg not installed") + conn = psycopg.connect( + host=os.environ.get("DOCUMENTDB_HOST", "localhost"), + port=int(os.environ.get("PG_PORT", "9712")), + user=os.environ.get("PG_USER", "documentdb"), + dbname=os.environ.get("PG_DB", "postgres"), + connect_timeout=20, + ) + conn.autocommit = True + yield conn + conn.close() + + +# --------------------------------------------------------------------- +# seeding through the agent's API +# --------------------------------------------------------------------- +@pytest.fixture(scope="session") +def seed_roots(api): + """POST the contract's seed rows through the agent's own API. + + Seeding through the API (rather than writing to the database directly) is + what makes the later reads meaningful: it tests the agent's write path. + """ + created = {} + for root in ROOTS: + create = root.get("create") + if not create: + continue + rows = [] + for row in root["seed"]: + resp = api.post(create["path"], json=row) + rows.append({"row": row, "status": resp.status_code, + "body": _safe_json(resp)}) + created[root["name"]] = rows + # Give the engine a moment to make writes visible to an independent reader. + time.sleep(1.0) + return created + + +def _safe_json(resp): + try: + return resp.json() + except Exception: + return None + + +@pytest.fixture(scope="session") +def root_persisted(db, seed_roots): + """Read every seeded id back with the VERIFIER's own client.""" + out = {} + for root in ROOTS: + coll = db[collection_name(root)] + docs = {} + for row in root["seed"]: + docs[row["id"]] = _find_by_logical_id(coll, row["id"]) + out[root["name"]] = docs + return out + + +def _find_by_logical_id(coll, logical_id): + """Find a document by the id the API was given. + + The agent may store it as `_id` or as a separate `id` field; both are + legitimate modelling choices, so accept either rather than dictating one. + """ + doc = coll.find_one({"_id": logical_id}) + if doc is None: + doc = coll.find_one({"id": logical_id}) + return doc + + +def emulator_docs_for_id(db, root, logical_id): + return _find_by_logical_id(db[collection_name(root)], logical_id) + + +# --------------------------------------------------------------------- +# realistic volume, for the engine checks only +# --------------------------------------------------------------------- +FILLER_COUNT = int(os.environ.get("VERIFIER_FILLER_DOCS", "20000")) + + +@pytest.fixture(scope="session") +def bulk_filler(db, seed_roots): + """Bulk-load filler documents so the engine checks are meaningful. + + WHY THIS IS NECESSARY, not a workaround: on a 4-document collection a + sequential scan is genuinely the cheaper plan, and PostgreSQL is right to + choose it. Grading index usage at that size would test nothing — the oracle + itself would fail. The task tells the agent the service runs against + "millions of orders", so the verifier must grade at a size where that + statement has consequences. + + Written by the VERIFIER directly, not through the API: this is background + volume, not a test of the agent's write path. Filler uses a disjoint + customer_id namespace (FILLER-*) so it cannot affect the filtered-list + assertions in check_api. + """ + from pymongo import InsertOne + + inserted = {} + for root in ROOTS: + coll = db[collection_name(root)] + existing = coll.count_documents({"customer_id": {"$regex": "^FILLER-"}}) + if existing >= FILLER_COUNT: + inserted[root["name"]] = existing + continue + + ops, batch = [], 0 + for i in range(FILLER_COUNT - existing): + ops.append(InsertOne({ + "_id": f"filler-{i}", + "customer_id": f"FILLER-{i % 4000}", + "status": ["shipped", "pending", "cancelled"][i % 3], + "amount": float((i % 500) + 10), + "items": ["filler"], + })) + if len(ops) >= 2000: + coll.bulk_write(ops, ordered=False) + batch += len(ops) + ops = [] + if ops: + coll.bulk_write(ops, ordered=False) + batch += len(ops) + inserted[root["name"]] = batch + + # ANALYZE so the planner costs against real statistics rather than the + # defaults it assumed when the table was tiny. + try: + import psycopg + with psycopg.connect( + host=os.environ.get("DOCUMENTDB_HOST", "localhost"), + port=int(os.environ.get("PG_PORT", "9712")), + user=os.environ.get("PG_USER", "documentdb"), + dbname=os.environ.get("PG_DB", "postgres"), + connect_timeout=20, + ) as conn: + conn.autocommit = True + with conn.cursor() as cur: + cur.execute("ANALYZE") + except Exception: + # Statistics are an optimisation, not a correctness requirement. + pass + + return inserted + + +# --------------------------------------------------------------------- +# source scanning (for the WEAKER, static half of the grader) +# +# ANTI-GAMING: comments are stripped before any regex runs, so an agent +# cannot satisfy a check by writing "# uses a singleton MongoClient" in a +# comment. String literals are deliberately NOT stripped, so patterns in +# check_source.py must require code adjacency (`foo\s*=`, `Foo\s*\(`) +# rather than a bare keyword a log message could satisfy by accident. +# --------------------------------------------------------------------- +SOURCE_SUFFIXES = { + "python": {".py"}, + "dotnet": {".cs", ".csproj"}, + "java": {".java", ".xml", ".gradle"}, + "nodejs": {".js", ".ts", ".mjs", ".cjs", ".json"}, + "go": {".go", ".mod"}, +} +SKIP_DIRS = { + ".git", "node_modules", "__pycache__", ".venv", "venv", "env", + "bin", "obj", "target", "dist", "build", ".pytest_cache", "site-packages", +} + +_TRIPLE_DOUBLE = re.compile(r'"""(?:.|\n)*?"""') +_TRIPLE_SINGLE = re.compile(r"'''(?:.|\n)*?'''") +_HASH_LINE = re.compile(r"#[^\n]*") +_BLOCK_C = re.compile(r"/\*(?:.|\n)*?\*/") +_SLASH_LINE = re.compile(r"//[^\n]*") +_XML_COMMENT = re.compile(r"") + + +def _strip_comments(text: str, sdk: str) -> str: + if sdk == "python": + text = _TRIPLE_DOUBLE.sub("", text) + text = _TRIPLE_SINGLE.sub("", text) + return _HASH_LINE.sub("", text) + if sdk == "go": + text = _BLOCK_C.sub("", text) + return _SLASH_LINE.sub("", text) + text = _XML_COMMENT.sub("", text) + text = _BLOCK_C.sub("", text) + return _SLASH_LINE.sub("", text) + + +@pytest.fixture(scope="session") +def workdir(app_dir) -> Path: + return app_dir + + +@pytest.fixture(scope="session") +def source_files(sdk, workdir) -> list: + suffixes = SOURCE_SUFFIXES.get(sdk, {".py"}) + out = [] + if not workdir.exists(): + return out + for p in workdir.rglob("*"): + if not p.is_file() or any(part in SKIP_DIRS for part in p.parts): + continue + if p.suffix in suffixes: + out.append(p) + return out + + +@pytest.fixture(scope="session") +def source_text(sdk, source_files) -> str: + """All source concatenated, comments stripped.""" + chunks = [] + for p in source_files: + try: + chunks.append(_strip_comments(p.read_text(encoding="utf-8", errors="ignore"), sdk)) + except OSError: + pass + return "\n".join(chunks) + + +@pytest.fixture(scope="session") +def source_text_raw(source_files) -> str: + """Source WITHOUT comment stripping. + + Used only where a comment genuinely counts as a finding — a hardcoded + credential is a leak whether or not it sits in a comment. + """ + chunks = [] + for p in source_files: + try: + chunks.append(p.read_text(encoding="utf-8", errors="ignore")) + except OSError: + pass + return "\n".join(chunks) diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/harvest_metrics.py b/benchmarks/documentdb-sdk-skills/shared/verifier/harvest_metrics.py new file mode 100644 index 0000000..9ead3b6 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/harvest_metrics.py @@ -0,0 +1,269 @@ +#!/usr/bin/env python3 +"""Harvest agent token usage and emit MSBench custom metrics. + +WHY +--- +MSBench's reward is binary: did the submission comply, yes or no. That answers +"is the kit effective?" but not "what did it cost?" — and cost is half the GTM +story. It also cannot tell us *which kinds of task* are expensive, which is +exactly the comparison we want across a growing task matrix. + +MSBench has a first-class hook for this: an agent or verifier may write +`custom_metrics.json` into the instance output directory (`$OUTPUT_DIR`, +default `/output`). MSBench ingests it, derives a schema, and surfaces the +values per instance in `msbench-cli report --output .json` and in CSV. +Real-world examples from the platform's own tests: `Tool_Calls_Total`, +`Files_Changed`, `msbench.agent_elapsed_time_sec`. + +The `msbench-agent-github-copilot-cli` agent does NOT emit token metrics, so +we harvest them ourselves from the Copilot CLI's own session store, which the +agent leaves behind in the container. + +WHAT IT READS +------------- +`~/.copilot/session-store.db` (SQLite), table `assistant_usage_events` — one +row per model request, carrying input/output/cache/reasoning token counts and +`total_nano_aiu` (AI credits x 1e9). + +THE MEASUREMENT TRAP THIS AVOIDS +-------------------------------- +`cache_read_tokens` is a SUBSET of `input_tokens` (verified against a real +store: 0 of 6,348 rows had cache_read > input). Skills are sent once and then +read from cache, so raw `input_tokens` overstates their marginal cost by +roughly 20x. We therefore emit `tokens_fresh_input = input - cache_read` as +the honest "billed at full rate" figure, alongside the raw counts and the +cache share, so a reader cannot accidentally quote the misleading number. + +All emitted values are NUMERIC. MSBench infers a `numeric` schema from the +values, and a string would produce an inconsistent schema across instances. + +This is intentionally self-contained (stdlib only, no imports from the kit): +it has to run inside a minimal task container. `testing/scenarios/benchmark-metrics/` +asserts it agrees with `evals/harness/token_usage.py` on identical input, so +the two cost definitions cannot drift apart. +""" +from __future__ import annotations + +import argparse +import json +import os +import shutil +import sqlite3 +import sys +import tempfile +from pathlib import Path + +NANO_AIU_PER_CREDIT = 1_000_000_000 + +# Where the Copilot CLI keeps its session store. The agent may run as root or +# as another user depending on how the runner invokes it, so try each. +CANDIDATE_STORES = [ + "~/.copilot/session-store.db", + "/root/.copilot/session-store.db", + "/home/agent/.copilot/session-store.db", + "/agent/.copilot/session-store.db", +] + +ROLLUP_SQL = """ +SELECT + COUNT(*) AS requests, + COUNT(DISTINCT turn_index) AS turns, + COALESCE(SUM(input_tokens), 0) AS input_tokens, + COALESCE(SUM(output_tokens), 0) AS output_tokens, + COALESCE(SUM(cache_read_tokens), 0) AS cache_read_tokens, + COALESCE(SUM(cache_write_tokens), 0) AS cache_write_tokens, + COALESCE(SUM(reasoning_tokens), 0) AS reasoning_tokens, + COALESCE(SUM(total_nano_aiu), 0) AS nano_aiu, + COALESCE(SUM(duration_ms), 0) AS duration_ms +FROM assistant_usage_events +""" + + +def find_store(explicit: str | None = None) -> Path | None: + if explicit: + p = Path(explicit).expanduser() + return p if p.is_file() else None + for candidate in CANDIDATE_STORES: + p = Path(candidate).expanduser() + if p.is_file(): + return p + return None + + +def read_usage(db_path: Path) -> dict: + """Roll up usage from a private snapshot of the store. + + The store is copied with its -wal/-shm sidecars before reading: copying + only the .db would silently lose any transaction still sitting in the + write-ahead log, which is exactly where the final turns live. + """ + tmpdir = Path(tempfile.mkdtemp(prefix="tokenharvest-")) + try: + snapshot = tmpdir / db_path.name + shutil.copy2(db_path, snapshot) + for suffix in ("-wal", "-shm"): + sidecar = db_path.with_name(db_path.name + suffix) + if sidecar.exists(): + shutil.copy2(sidecar, snapshot.with_name(snapshot.name + suffix)) + + conn = sqlite3.connect(f"file:{snapshot}?mode=ro", uri=True) + conn.row_factory = sqlite3.Row + try: + tables = { + r[0] for r in conn.execute( + "SELECT name FROM sqlite_master WHERE type='table'" + ) + } + if "assistant_usage_events" not in tables: + return {} + row = dict(conn.execute(ROLLUP_SQL).fetchone() or {}) + finally: + conn.close() + finally: + shutil.rmtree(tmpdir, ignore_errors=True) + + if not row or not row.get("requests"): + return {} + + inp = int(row["input_tokens"]) + cache = int(row["cache_read_tokens"]) + fresh = max(inp - cache, 0) + return { + "agent_requests": int(row["requests"]), + "agent_turns": int(row["turns"]), + "tokens_input": inp, + "tokens_output": int(row["output_tokens"]), + "tokens_cache_read": cache, + "tokens_cache_write": int(row["cache_write_tokens"]), + "tokens_reasoning": int(row["reasoning_tokens"]), + # The honest marginal cost: input actually billed at the uncached rate. + "tokens_fresh_input": fresh, + "tokens_billable_total": fresh + int(row["output_tokens"]), + "cache_read_share_pct": round(100.0 * cache / inp, 2) if inp else 0.0, + "ai_credits": round(int(row["nano_aiu"]) / NANO_AIU_PER_CREDIT, 4), + "agent_wall_secs": round(int(row["duration_ms"]) / 1000.0, 1), + } + + +def read_ctrf(path: Path) -> dict: + """Per-check-category pass/fail counts from the verifier's CTRF report. + + This is what makes the token numbers actionable: it lets us ask which + CATEGORY of requirement (api / behavior / documentdb / engine / source / + skills) an expensive run was actually failing, rather than only how much it + cost overall. + """ + if not path.is_file(): + return {} + try: + data = json.loads(path.read_text()) + except (json.JSONDecodeError, UnicodeDecodeError): + return {} + + tests = (data.get("results") or {}).get("tests") or [] + out: dict[str, float] = {} + total = passed = 0 + per_category: dict[str, list[int]] = {} + + for test in tests: + name = str(test.get("name", "")) + status = str(test.get("status", "")).lower() + if status == "skipped": + continue + total += 1 + ok = 1 if status == "passed" else 0 + passed += ok + category = "other" + for key in ("api", "behavior", "documentdb", "engine", "source", "skills"): + if f"check_{key}" in name: + category = key + break + bucket = per_category.setdefault(category, [0, 0]) + bucket[0] += ok + bucket[1] += 1 + + out["checks_total"] = total + out["checks_passed"] = passed + out["checks_failed"] = total - passed + for category, (ok, tot) in sorted(per_category.items()): + out[f"checks_{category}_passed"] = ok + out[f"checks_{category}_total"] = tot + return out + + +def build_metrics(store: Path | None, ctrf: Path, reward_file: Path) -> dict: + metrics: dict[str, float] = {} + + usage = read_usage(store) if store else {} + metrics.update(usage) + # Explicitly record whether token data was available. Without this, a run + # where harvesting failed is indistinguishable from a run that used no + # tokens — and a silent zero would corrupt any average computed over it. + metrics["tokens_available"] = 1 if usage else 0 + + metrics.update(read_ctrf(ctrf)) + + reward = 0 + if reward_file.is_file(): + try: + reward = int((reward_file.read_text().strip() or "0")[:1]) + except ValueError: + reward = 0 + metrics["reward"] = reward + + # Cost-to-outcome, only for a run that actually succeeded. Emitting it for + # a failed run would make giving up early look cheap. + if reward == 1 and usage: + metrics["credits_to_green"] = usage["ai_credits"] + metrics["turns_to_green"] = usage["agent_turns"] + metrics["billable_tokens_to_green"] = usage["tokens_billable_total"] + + return metrics + + +def main(argv=None) -> int: + p = argparse.ArgumentParser(description=__doc__.split("\n")[0]) + p.add_argument("--store", default=os.environ.get("COPILOT_SESSION_STORE"), + help="path to session-store.db (default: autodetect)") + p.add_argument("--ctrf", + default=os.path.join( + os.environ.get("VERIFIER_LOG_DIR", "/logs/verifier"), + "ctrf.json")) + p.add_argument("--reward", + default=os.path.join( + os.environ.get("VERIFIER_LOG_DIR", "/logs/verifier"), + "reward.txt")) + p.add_argument("--output-dir", default=os.environ.get("OUTPUT_DIR", "/output")) + args = p.parse_args(argv) + + store = find_store(args.store) + metrics = build_metrics(store, Path(args.ctrf), Path(args.reward)) + + out_dir = Path(args.output_dir) + out_dir.mkdir(parents=True, exist_ok=True) + out_file = out_dir / "custom_metrics.json" + + # Merge rather than overwrite: the agent may have written its own metrics + # into the same file, and clobbering them would lose data MSBench expects. + existing = {} + if out_file.is_file(): + try: + existing = json.loads(out_file.read_text()) + except (json.JSONDecodeError, UnicodeDecodeError): + existing = {} + existing.update(metrics) + out_file.write_text(json.dumps(existing, indent=2, sort_keys=True)) + + print(f"[harvest] wrote {out_file}") + if store: + print(f"[harvest] session store: {store}") + else: + print("[harvest] NOTE: no Copilot session store found; token metrics " + "omitted and tokens_available=0.", file=sys.stderr) + for k in sorted(metrics): + print(f"[harvest] {k} = {metrics[k]}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh b/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh new file mode 100644 index 0000000..0e934db --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh @@ -0,0 +1,169 @@ +#!/usr/bin/env bash +# Shared verifier runner. Each task's tests/test.sh calls this with the task's +# SDK name as $1. +# +# Responsibilities: +# 1. Start DocumentDB Local (idempotent) and export the generated password. +# 2. Ensure the agent produced /app/build.sh and /app/run.sh. +# 3. Run /app/build.sh. +# 4. Run /app/run.sh in the background. +# 5. Wait for the agent's /health endpoint. +# 6. Run pytest over /verifier/check_*.py + /tests/checks.py. +# 7. Write 0 or 1 to /logs/verifier/reward.txt. +# +# ALWAYS writes reward.txt, defaulting to 0, so an early failure is recorded as +# a failure rather than as a missing file the harness has to interpret. + +set -uo pipefail + +SDK="${1:-}" +if [ -z "$SDK" ]; then + echo "[runner] usage: runner.sh " >&2 + exit 2 +fi +export SDK + +LOG_DIR="${VERIFIER_LOG_DIR:-/logs/verifier}" +APP_DIR="${APP_WORKDIR:-/app}" +APP_PORT="${APP_PORT:-9080}" +mkdir -p "$LOG_DIR" +REWARD_FILE="$LOG_DIR/reward.txt" +echo "0" > "$REWARD_FILE" + +section() { + echo + echo "============================================================" + echo "[runner] $*" + echo "============================================================" +} + +fail() { + echo "[runner] FAIL: $*" >&2 + echo "0" > "$REWARD_FILE" + exit 0 # exit 0: the REWARD is the verdict, not the process exit code +} + +# --------------------------------------------------------------------- +section "1. Start DocumentDB" +# --------------------------------------------------------------------- +if ! start-documentdb; then + fail "DocumentDB did not start. See $LOG_DIR/documentdb.log" +fi +# start-documentdb generates DOCUMENTDB_PASSWORD when unset; re-derive it here +# so both the app and the verifier see the same value. +if [ -z "${DOCUMENTDB_PASSWORD:-}" ]; then + fail "DOCUMENTDB_PASSWORD was not exported by start-documentdb" +fi +export DOCUMENTDB_PASSWORD + +# --------------------------------------------------------------------- +section "2. Check the agent's deliverables" +# --------------------------------------------------------------------- +for f in build.sh run.sh; do + if [ ! -f "$APP_DIR/$f" ]; then + fail "$APP_DIR/$f is missing. The task requires both build.sh and run.sh." + fi + chmod +x "$APP_DIR/$f" 2>/dev/null || true +done + +# --------------------------------------------------------------------- +section "3. Build" +# --------------------------------------------------------------------- +( cd "$APP_DIR" && ./build.sh ) >"$LOG_DIR/build.log" 2>&1 +BUILD_RC=$? +if [ $BUILD_RC -ne 0 ]; then + echo "[runner] build.sh exited $BUILD_RC; last 40 lines:" >&2 + tail -40 "$LOG_DIR/build.log" >&2 + fail "build failed" +fi + +# --------------------------------------------------------------------- +section "4. Run" +# --------------------------------------------------------------------- +( cd "$APP_DIR" && ./run.sh ) >"$LOG_DIR/app.log" 2>&1 & +APP_PID=$! + +cleanup() { + if kill -0 "$APP_PID" 2>/dev/null; then + kill "$APP_PID" 2>/dev/null || true + fi +} +trap cleanup EXIT + +# --------------------------------------------------------------------- +section "5. Wait for /health" +# --------------------------------------------------------------------- +READY=0 +for i in $(seq 1 90); do + if ! kill -0 "$APP_PID" 2>/dev/null; then + echo "[runner] the app exited during start-up; last 40 lines:" >&2 + tail -40 "$LOG_DIR/app.log" >&2 + fail "app process died before becoming healthy" + fi + if curl -fsS "http://localhost:${APP_PORT}/health" >/dev/null 2>&1; then + echo "[runner] healthy after ${i}s" + READY=1 + break + fi + sleep 1 +done +[ "$READY" -eq 1 ] || { + tail -40 "$LOG_DIR/app.log" >&2 + fail "app did not become healthy on port ${APP_PORT} within 90s" +} + +# --------------------------------------------------------------------- +section "6. Grade" +# --------------------------------------------------------------------- +# Prefer the isolated verifier venv so the agent's build.sh cannot shadow a +# verifier dependency (e.g. by installing a different pymongo system-wide). +PY=/opt/verifier-venv/bin/python +[ -x "$PY" ] || PY=python3 + +"$PY" -m pytest \ + --ctrf "$LOG_DIR/ctrf.json" \ + -rA -v \ + -p no:cacheprovider \ + /verifier/check_api.py \ + /verifier/check_behavior.py \ + /verifier/check_documentdb.py \ + /verifier/check_engine.py \ + /verifier/check_source.py \ + /verifier/check_skills.py \ + /tests/checks.py \ + 2>&1 | tee "$LOG_DIR/pytest.log" + +PYTEST_RC=${PIPESTATUS[0]} + +# --------------------------------------------------------------------- +section "7. Reward" +# --------------------------------------------------------------------- +if [ "$PYTEST_RC" -eq 0 ]; then + echo "1" > "$REWARD_FILE" + echo "[runner] REWARD=1 (all mandatory checks passed)" +else + echo "0" > "$REWARD_FILE" + echo "[runner] REWARD=0 (pytest exit $PYTEST_RC)" +fi + +# --------------------------------------------------------------------- +section "8. Cost metrics" +# --------------------------------------------------------------------- +# MSBench's reward is binary — it says whether the submission complied, not +# what it cost. Token usage is harvested from the Copilot CLI's own session +# store (which the agent leaves in the container) and written to +# $OUTPUT_DIR/custom_metrics.json, MSBench's first-class per-instance hook. +# This is what lets us compare cost ACROSS tasks later. +# +# Advisory: a failure here must never change the reward. The submission has +# already been graded, and losing cost telemetry is not a grading outcome. +"$PY" /verifier/harvest_metrics.py \ + --ctrf "$LOG_DIR/ctrf.json" \ + --reward "$REWARD_FILE" \ + --output-dir "${OUTPUT_DIR:-/output}" \ + >>"$LOG_DIR/metrics.log" 2>&1 \ + || echo "[runner] WARNING: metric harvest failed; see $LOG_DIR/metrics.log" >&2 + +# The reward file is the verdict. Exiting non-zero here would make Harbor treat +# a legitimately-failed submission as a broken verifier. +exit 0 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/Dockerfile b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/Dockerfile new file mode 100644 index 0000000..e703689 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/Dockerfile @@ -0,0 +1,13 @@ +FROM documentdb-orders-base:latest + +ENV SDK="python" + +# Bake the reference implementation in. solve.sh copies it into /app when the +# oracle runs. The agent under evaluation never sees /reference. +COPY reference /reference + +# Pre-install the reference impl's dependencies so the oracle runs quickly and, +# more importantly, so build.sh works with no internet access during grading. +RUN pip3 install --no-cache-dir --break-system-packages -r /reference/requirements.txt + +WORKDIR /app diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/app.py b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/app.py new file mode 100644 index 0000000..4994c63 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/app.py @@ -0,0 +1,168 @@ +"""Reference Orders API — the ORACLE for the orders-api-python task. + +This is what a correct submission looks like: it is what `solve.sh` copies into +/app to prove the grader can be satisfied. It exists to validate the benchmark, +not to be shown to the agent under evaluation. + +Every property the verifier grades is deliberate here: + + * ONE MongoClient, created at import and reused (check_source, check_engine). + A client owns a connection pool; building one per request exhausts server + connections and defeats pooling entirely. + * Explicit pool/timeout options, so a database blip is a fast error rather + than a 30-second hang (check_source). + * Every connection setting read from the environment; nothing hardcoded + (check_skills). + * ONE compound index {customer_id: 1, created_at: -1} — NOT that plus a + separate {customer_id: 1}. The compound index already serves the equality + lookup as its prefix, so adding the single-field one would be pure write + tax, which is exactly what the kit's indexing skill warns against. + * ESR ordering: the equality key (customer_id) precedes the sort key + (created_at) (check_documentdb). + * Documents carry a type discriminator, a schemaVersion and an ISO-8601 + created_at, so the collection can evolve (check_documentdb). + * amount stays numeric and items stays an ordered array (check_behavior). +""" +from __future__ import annotations + +import os +from datetime import datetime, timezone +from typing import Any +from urllib.parse import quote_plus + +from fastapi import FastAPI, HTTPException, Query +from fastapi.responses import JSONResponse +from pydantic import BaseModel, Field +from pymongo import ASCENDING, DESCENDING, MongoClient +from pymongo.errors import DuplicateKeyError + +SCHEMA_VERSION = 1 +DOC_TYPE = "order" + + +def _require_env(name: str, default: str | None = None) -> str: + value = os.environ.get(name, default) + if value is None or value == "": + raise RuntimeError( + f"{name} is not set. Every connection setting is supplied through " + f"the environment so the same build can target any deployment." + ) + return value + + +def _build_uri() -> str: + host = _require_env("DOCUMENTDB_HOST", "localhost") + port = _require_env("DOCUMENTDB_PORT", "10260") + user = _require_env("DOCUMENTDB_USER") + password = _require_env("DOCUMENTDB_PASSWORD") + # Credentials are URL-encoded: a generated password may contain characters + # that would otherwise terminate the URI early. + return ( + f"mongodb://{quote_plus(user)}:{quote_plus(password)}@{host}:{port}/" + "?authMechanism=SCRAM-SHA-256&directConnection=true" + ) + + +# -------------------------------------------------------------------------- +# ONE client for the process lifetime. +# -------------------------------------------------------------------------- +client = MongoClient( + _build_uri(), + tls=True, + # The local container presents a self-signed certificate. This is driven by + # an env var so a cloud deployment cannot silently inherit the relaxed + # setting: DOCUMENTDB_TLS_INSECURE is only set in the dev container. + tlsAllowInvalidCertificates=os.environ.get( + "DOCUMENTDB_TLS_INSECURE", "true" + ).lower() == "true", + maxPoolSize=100, + minPoolSize=5, + serverSelectionTimeoutMS=10000, + connectTimeoutMS=10000, + socketTimeoutMS=30000, + retryWrites=True, +) + +db = client[_require_env("DOCUMENTDB_DATABASE", "ordersdb")] +orders = db[_require_env("DOCUMENTDB_ORDERS_COLLECTION", "orders")] + +app = FastAPI(title="Orders API") + + +@app.on_event("startup") +def ensure_indexes() -> None: + """Create the one index the access pattern needs. + + {customer_id: 1, created_at: -1} follows ESR: the equality field leads, the + sort field follows. Its customer_id prefix also serves the plain equality + lookup, so a separate {customer_id: 1} index would add write cost and buy + nothing. + """ + orders.create_index( + [("customer_id", ASCENDING), ("created_at", DESCENDING)], + name="customer_id_1_created_at_-1", + ) + + +class OrderIn(BaseModel): + id: str + customer_id: str + status: str + amount: float + items: list[str] = Field(default_factory=list) + + +def _to_document(order: OrderIn) -> dict[str, Any]: + return { + "_id": order.id, + "id": order.id, + "customer_id": order.customer_id, + "status": order.status, + "amount": float(order.amount), + "items": list(order.items), + # Schema-evolution metadata: without these, migrating a live collection + # later means guessing which documents are old. + "type": DOC_TYPE, + "schemaVersion": SCHEMA_VERSION, + "created_at": datetime.now(timezone.utc).isoformat(), + } + + +def _to_response(doc: dict[str, Any]) -> dict[str, Any]: + out = dict(doc) + out["id"] = out.get("id", out.get("_id")) + out.pop("_id", None) + return out + + +@app.get("/health") +def health() -> dict[str, str]: + return {"status": "ok"} + + +@app.post("/orders", status_code=201) +def create_order(order: OrderIn): + try: + orders.insert_one(_to_document(order)) + except DuplicateKeyError: + # Reject rather than overwrite: an upsert here would silently destroy + # the existing order. + raise HTTPException(status_code=409, detail=f"order {order.id} exists") + return _to_response(orders.find_one({"_id": order.id})) + + +@app.get("/orders/{order_id}") +def get_order(order_id: str): + doc = orders.find_one({"_id": order_id}) + if doc is None: + raise HTTPException(status_code=404, detail=f"order {order_id} not found") + return _to_response(doc) + + +@app.get("/orders") +def list_orders(customer_id: str | None = Query(default=None)): + query = {"customer_id": customer_id} if customer_id else {} + # Sorted by created_at so the compound index serves filter and order + # together rather than requiring a separate sort step. + cursor = orders.find(query).sort("created_at", DESCENDING) + return JSONResponse([_to_response(d) for d in cursor]) diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh new file mode 100755 index 0000000..f632d78 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +set -euo pipefail +pip3 install --no-cache-dir --break-system-packages -r /app/requirements.txt diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/requirements.txt b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/requirements.txt new file mode 100644 index 0000000..9bf8315 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/requirements.txt @@ -0,0 +1,4 @@ +fastapi==0.115.4 +uvicorn[standard]==0.32.0 +pymongo==4.10.1 +pydantic==2.9.2 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh new file mode 100755 index 0000000..51cc753 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail +cd /app +exec uvicorn app:app --host 0.0.0.0 --port "${APP_PORT:-9080}" diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/instruction.md b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/instruction.md new file mode 100644 index 0000000..dcf3a08 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/instruction.md @@ -0,0 +1,75 @@ +# Orders API + +Build a small HTTP service that stores customer orders in **Azure DocumentDB** +(MongoDB-compatible). + +## Deliverables + +Put your source in `/app`, together with two executable scripts: + +- `/app/build.sh` — installs dependencies. Run once, before the service starts. +- `/app/run.sh` — starts the service in the foreground on `$APP_PORT`. + +## Connection + +The database is already running in this container. Read every connection +setting from the environment — do not hardcode any of them: + +| Variable | Meaning | +|---|---| +| `DOCUMENTDB_HOST` | hostname (`localhost`) | +| `DOCUMENTDB_PORT` | port (`10260`) | +| `DOCUMENTDB_USER` | username | +| `DOCUMENTDB_PASSWORD` | password, generated per container | +| `DOCUMENTDB_DATABASE` | database name | +| `DOCUMENTDB_ORDERS_COLLECTION` | collection name | +| `APP_PORT` | port your service must listen on | + +The endpoint uses TLS with a self-signed certificate and SCRAM-SHA-256 +authentication. + +## API + +### `GET /health` +Returns `200` when the service is up. + +### `POST /orders` +Creates an order. Request body: + +```json +{ + "id": "o-alpha", + "customer_id": "CUST-001", + "status": "shipped", + "amount": 120.5, + "items": ["widget", "gasket"] +} +``` + +- `201` (or `200`) on success. +- `409` if an order with that `id` already exists. It must **not** be created + twice or overwritten. + +### `GET /orders/{id}` +Returns the order as JSON, including `customer_id`, `status`, `amount` and +`items`. `404` if it does not exist. + +### `GET /orders?customer_id=CUST-001` +Returns a JSON array of every order for that customer, and only those. + +## Field requirements + +- `amount` is a number, not a string. +- `items` is an array of strings and must round-trip in order. +- Each stored order must record when it was created. + +## Scale + +The service is expected to run against collections of millions of orders. The +`customer_id` lookup is the hot path and runs constantly. + +## Notes + +- The container has no internet access during grading; `build.sh` may install + from the local package cache. +- Python 3, `pymongo` and `mongosh` are already installed in the image. diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh new file mode 100755 index 0000000..428d746 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +# Oracle solution for orders-api-python. +# Copies the reference implementation into the agent's workspace. +set -euo pipefail + +mkdir -p /app +cp -r /reference/. /app/ +chmod +x /app/build.sh /app/run.sh + +echo "[solve] reference impl copied to /app:" +ls -la /app diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/task.toml b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/task.toml new file mode 100644 index 0000000..0e3ab99 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/task.toml @@ -0,0 +1,24 @@ +version = "1.0" + +[metadata] +author_name = "documentdb-sdk-skills-bench" +author_email = "noreply@example.com" +difficulty = "medium" +category = "skills-compliance" +tags = ["documentdb", "mongodb", "python", "sdk-best-practices", "azure"] + +[verifier] +# 900s allows: DocumentDB start (~10-30s) + build + app start + bulk filler +# load (20k docs) + ~30 pytest checks. +timeout_sec = 900.0 + +[agent] +# 1 hour for the agent to author 4 endpoints plus the data modelling and +# indexing decisions. +timeout_sec = 3600.0 + +[environment] +build_timeout_sec = 1800.0 +cpus = 4 +memory = "8G" +storage = "20G" diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/checks.py b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/checks.py new file mode 100644 index 0000000..956b7af --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/checks.py @@ -0,0 +1,15 @@ +"""orders-api-python task-specific checks. + +The shared library (/verifier/check_*.py) already covers the whole rubric for +Python. This file is intentionally tiny — add Python-specific assertions here +if the skill set grows a Python-only rule. + +It also guarantees pytest has a file to collect from /tests even when no +task-specific assertions exist, so a missing /tests/checks.py cannot silently +reduce the graded surface. +""" +from __future__ import annotations + + +def test_python_task_marker(sdk): + assert sdk == "python" diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh new file mode 100755 index 0000000..bc4fcab --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +# Harbor verifier entrypoint for orders-api-python. +# Delegates to the shared runner, passing the SDK name. +set -uo pipefail + +exec /verifier/runner.sh python diff --git a/docs/TESTING.md b/docs/TESTING.md index dce08c5..86fea8e 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -1,7 +1,8 @@ # Testing the agent kit -The kit is tested in **two loops with opposite success criteria**. Conflating -them is the main design mistake to avoid. +The kit is tested in **three loops**. The first two have opposite success +criteria — conflating them is the main design mistake to avoid — and the third +is the publication layer. | | **Loop A — deterministic** | **Loop B — non-deterministic** | |---|---|---| @@ -12,6 +13,11 @@ them is the main design mistake to avoid. | Home | [`testing/`](../testing/) | [`evals/`](../evals/) | | CI | every PR | dispatch / monthly only | +Plus **Loop C — MSBench** ([`benchmarks/`](../benchmarks/documentdb-sdk-skills/README.md)): +a hermetic, externally-citable `pass@k` on Microsoft's benchmark platform. Slow, +gated, and the only one that produces a number for external publication. Loops A +and B are for iteration; Loop C is for citation. + A diagnostic script is a **tool**: the same database must give the same answer every time. An agent is not: it must be measured as a distribution against a control. Applying either standard to the other produces nonsense. @@ -208,6 +214,74 @@ Three things this table is built to stop you getting wrong: --- +## Loop C — MSBench benchmark + +The publication layer. See +[`benchmarks/documentdb-sdk-skills/README.md`](../benchmarks/documentdb-sdk-skills/README.md). + +### Free — runs on every PR + +```bash +cd testing && pytest scenarios/benchmark-config scenarios/benchmark-metrics +``` + +Validates the registration files, the Harbor task layout, that the instruction +contains **no solution hints**, and that the cost metrics agree with Loop B's. +No Docker, no MSBench access, no network. + +### Local — needs Docker + +```bash +cd benchmarks/documentdb-sdk-skills +docker build -f shared/base/Dockerfile -t documentdb-orders-base:latest . +cd tasks/orders-api-python +docker build -f environment/Dockerfile -t documentdb-orders-api-python:latest . + +# positive control: the oracle must score 1 +docker run --rm documentdb-orders-api-python:latest \ + bash -c '/solution/solve.sh && /tests/test.sh; cat /logs/verifier/reward.txt' + +# negative control: an empty /app must score 0 +docker run --rm documentdb-orders-api-python:latest \ + bash -c '/tests/test.sh; cat /logs/verifier/reward.txt' +``` + +Both controls matter. A grader that cannot be satisfied makes every score +meaningless; a grader that never fails is worthless. + +### Gated — needs internal MSBench access + +```bash +pip install keyring artifacts-keyring +pip install msbench-cli --index-url=https://pkgs.dev.azure.com/devdiv/_packaging/MicrosoftSweBench/pypi/simple/ +az login + +# BOTH arms — a treatment score without its control is not a result +msbench-cli run --benchmark documentdb-sdk-skills --pass_at_k 5 ... +msbench-cli run --benchmark documentdb-sdk-skills-noskills --pass_at_k 5 ... + +msbench-cli report --run_id --output report.json # includes token cost +``` + +> `pip install msbench` installs an **unrelated** package. The real tool is +> `msbench-cli` from the private feed. + +### Cost per task + +The verifier writes MSBench `custom_metrics.json` with per-task token usage, so +runs can be compared across tasks: + +| Metric | Why | +|---|---| +| `tokens_fresh_input` | input billed at the uncached rate — the honest cost | +| `cache_read_share_pct` | how much the skill payload was amortised | +| `ai_credits` | the money number | +| `credits_to_green` | cost of a **passing** run only | +| `checks__passed/_total` | which rung an expensive run was failing | +| `tokens_available` | `0` when harvesting failed, so a gap is never read as free | + +--- + ## The grading ladder Pick the **strongest** criterion the scenario allows. An LLM judge is the last @@ -235,6 +309,7 @@ everything" fails, and asserts the result set is unchanged. |---|---|---| | [`loop-a-tests.yml`](../.github/workflows/loop-a-tests.yml) | push, PR, dispatch | free | | [`loop-b-evals.yml`](../.github/workflows/loop-b-evals.yml) | dispatch, monthly | credits | +| [`loop-c-benchmark.yml`](../.github/workflows/loop-c-benchmark.yml) | PR (validate only), dispatch | free / Docker / gated | Loop B's `validate` job (static guards + `vally lint` + matrix resolve) always runs and is free, so a broken skill path is caught **before** any credits are diff --git a/testing/pytest.ini b/testing/pytest.ini index f4f1fac..16d87df 100644 --- a/testing/pytest.ini +++ b/testing/pytest.ini @@ -17,3 +17,5 @@ markers = tokens: Loop B cost accounting (token_usage.py) — pure arithmetic, no container needed remediation: before/after grading — the kit's advice must measurably improve the database evalsconfig: static validation of the Loop B eval + experiment configs (no container) + benchmarkmetrics: Loop C — MSBench cost-metric harvester (no container needed) + benchmarkconfig: Loop C — MSBench benchmark structure and registration (no container) diff --git a/testing/scenarios/benchmark-config/conftest.py b/testing/scenarios/benchmark-config/conftest.py new file mode 100644 index 0000000..f00de7a --- /dev/null +++ b/testing/scenarios/benchmark-config/conftest.py @@ -0,0 +1,9 @@ +"""Scenario conftest: benchmark config validation needs no database.""" + +import pytest + + +@pytest.fixture(scope="session", autouse=True) +def require_container(): + """No-op override — this scenario only reads files.""" + return None diff --git a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py new file mode 100644 index 0000000..2c86e14 --- /dev/null +++ b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py @@ -0,0 +1,257 @@ +"""Static validation of the MSBench benchmark (Loop C). + +WHY THIS EXISTS +--------------- +MSBench's feedback loop is slow and expensive: build images, push to an +internal ACR, submit a run, wait. A typo in a registration file or a broken +arm split should not cost a build cycle to discover — and a *silently* broken +arm split would not be discovered at all, it would just produce a wrong +published number. + +These tests need no Docker, no MSBench access and no network, so they run on +every PR. They pin the things the live platform validates (and a few it does +not). + +The registration schema was read from the live central benchmarks repo, whose +`skillsbench` / `skillsbenchnoskills` pair is the convention this benchmark +follows. +""" +from __future__ import annotations + +import json +import tomllib +from pathlib import Path + +import pytest + +import kit + +pytestmark = pytest.mark.benchmarkconfig + +BENCH = kit.REPO_DIR / "benchmarks" / "documentdb-sdk-skills" +REG = BENCH / "msbench-registration" +TREATMENT = "documentdb-sdk-skills" +CONTROL = "documentdb-sdk-skills-noskills" + +# The keys the live platform's registry.json files carry. Cosmos' registration +# has none of this — it predates the requirement — which is exactly why it is +# asserted here. +REQUIRED_REGISTRY_KEYS = { + "id", "name", "owner", "creator", "contactEmail", "description", + "source", "format", "category", "license", "languages", "platforms", +} + + +def _json(path: Path) -> dict: + assert path.is_file(), f"missing: {path}" + return json.loads(path.read_text()) + + +def _toml(path: Path) -> dict: + assert path.is_file(), f"missing: {path}" + return tomllib.loads(path.read_text()) + + +def _jsonl(path: Path) -> list[dict]: + assert path.is_file(), f"missing: {path}" + return [json.loads(line) for line in path.read_text().splitlines() if line.strip()] + + +# --------------------------------------------------------------------------- +# registration files +# --------------------------------------------------------------------------- +@pytest.mark.parametrize("arm", [TREATMENT, CONTROL]) +def test_registry_json_has_the_required_keys(arm): + reg = _json(REG / arm / "registry.json") + missing = REQUIRED_REGISTRY_KEYS - set(reg) + assert not missing, ( + f"{arm}/registry.json is missing {sorted(missing)}. The live platform " + f"requires these; copying the Cosmos registration (which has no " + f"registry.json at all) would be rejected." + ) + assert reg["id"] == arm, f"registry id {reg['id']!r} != folder {arm!r}" + assert reg["format"] == "Harbor" + + +@pytest.mark.parametrize("arm", [TREATMENT, CONTROL]) +def test_loader_name_matches_the_arm(arm): + loader = _toml(REG / arm / "benchmark_loaders.toml") + assert loader["benchmark"]["name"] == arm + assert loader["benchmark"]["path"] == "dataset.jsonl" + + +@pytest.mark.parametrize("arm", [TREATMENT, CONTROL]) +def test_dataset_rows_are_well_formed(arm): + rows = _jsonl(REG / arm / "dataset.jsonl") + assert rows, f"{arm}/dataset.jsonl is empty" + for row in rows: + for key in ("benchmark", "instance_id", "image_tag", + "problem_statement", "task_style"): + assert key in row, f"{arm} dataset row missing {key!r}: {row}" + assert row["benchmark"] == arm + assert row["image_tag"].startswith(f"{arm}."), ( + f"image_tag {row['image_tag']!r} must be namespaced by the " + f"benchmark name, or the two arms will collide in the registry." + ) + + +def test_the_two_arms_grade_the_same_task(): + """The arms must differ ONLY in whether skills are installed. + + If the control ran a different task, the delta between them would measure + the task difference rather than the kit. + """ + t = _jsonl(REG / TREATMENT / "dataset.jsonl") + c = _jsonl(REG / CONTROL / "dataset.jsonl") + assert [r["instance_id"] for r in t] == [r["instance_id"] for r in c] + assert [r["problem_statement"] for r in t] == [r["problem_statement"] for r in c] + assert [r["sdk"] for r in t] == [r["sdk"] for r in c] + + +def test_control_arm_is_described_as_a_control(): + reg = _json(REG / CONTROL / "registry.json") + blob = (reg["description"] + " " + reg.get("notes", "")).lower() + assert "control" in blob and "no " in blob, ( + "The control arm's registry entry must say it is a control with no " + "skills, or a reader will treat its score as a standalone result." + ) + + +# --------------------------------------------------------------------------- +# the task +# --------------------------------------------------------------------------- +TASK = BENCH / "tasks" / "orders-api-python" + + +def test_task_has_the_harbor_layout(): + for rel in ("task.toml", "instruction.md", "environment/Dockerfile", + "solution/solve.sh", "tests/test.sh", "tests/checks.py"): + assert (TASK / rel).exists(), f"task is missing {rel}" + + +def test_instruction_never_hints_at_the_skills(): + """The organic-discovery protocol. + + The task statement may describe REQUIREMENTS (including scale), but must + not name the solution. Mentioning indexes, ESR or connection pooling would + hand the agent the very thing the benchmark is measuring, and both arms + would score the same. + """ + text = (TASK / "instruction.md").read_text().lower() + banned = [ + "create_index", "createindex", "compound index", "esr", + "connection pool", "singleton", "best practice", "skill", + "schemaversion", "discriminator", + ] + found = [b for b in banned if b in text] + assert not found, ( + f"instruction.md hints at the solution: {found}. The agent must derive " + f"these from its installed skills, not from the prompt — otherwise the " + f"control arm scores the same and the benchmark measures nothing." + ) + + +def test_instruction_states_the_scale_requirement(): + """Requirements are fair game and necessary: without a scale signal, not + creating an index is a defensible engineering choice rather than a miss.""" + text = (TASK / "instruction.md").read_text().lower() + assert "million" in text or "scale" in text, ( + "instruction.md gives no scale signal, so grading index usage would be " + "unfair — on a small collection, no index is the right answer." + ) + + +def test_task_toml_declares_timeouts(): + task = _toml(TASK / "task.toml") + assert task["verifier"]["timeout_sec"] > 0 + assert task["agent"]["timeout_sec"] > 0 + assert task["environment"]["build_timeout_sec"] > 0 + + +# --------------------------------------------------------------------------- +# curation config +# --------------------------------------------------------------------------- +def test_no_verification_is_skipped(): + """Under a BINARY reward, a flaky check corrupts the entire signal. + + The platform's own skillsbench config carries several + `skip = "oracle", reason = "Non-deterministic: ..."` entries. A check that + cannot be made deterministic must be REMOVED, not skipped — so this must + stay empty, and changing it should require a deliberate argument. + """ + cfg = _toml(BENCH / "orders.toml") + skips = cfg.get("tasks", {}).get("skip-verification", {}) + assert not skips, ( + f"verification skips declared: {skips}. Make the check deterministic " + f"or delete it; do not skip it under a binary reward." + ) + + +def test_curation_registries_match_the_platform(): + cfg = _toml(BENCH / "orders.toml") + assert cfg["docker"]["prod"]["registry"] == "codeexecservice.azurecr.io" + assert cfg["docker"]["staging"]["registry"] == "msbenchstaging.azurecr.io" + for profile in ("local", "staging", "prod"): + assert cfg["docker"][profile]["benchmark"] == TREATMENT + + +# --------------------------------------------------------------------------- +# verifier wiring +# --------------------------------------------------------------------------- +VERIFIER = BENCH / "shared" / "verifier" + + +def test_every_check_module_is_graded(): + """A check module that exists but is never passed to pytest silently + reduces the graded surface, and nothing else would reveal it.""" + runner = (VERIFIER / "runner.sh").read_text() + modules = sorted(p.name for p in VERIFIER.glob("check_*.py")) + assert modules, "no check modules found" + missing = [m for m in modules if m not in runner] + assert not missing, ( + f"these check modules exist but runner.sh never runs them: {missing}" + ) + + +def test_runner_writes_a_reward_before_it_can_fail(): + """Harbor reads reward.txt. If an early failure left it absent, the harness + would have to guess — so it is written as 0 up front.""" + runner = (VERIFIER / "runner.sh").read_text() + reward_init = runner.index('echo "0" > "$REWARD_FILE"') + first_fail = runner.index("start-documentdb") + assert reward_init < first_fail, ( + "runner.sh must default reward.txt to 0 before the first step that can fail" + ) + + +def test_metric_harvest_cannot_change_the_reward(): + """Cost telemetry is advisory. Losing it must never turn a passing + submission into a failing one.""" + runner = (VERIFIER / "runner.sh").read_text() + idx = runner.index("harvest_metrics.py") + tail = runner[idx:] + assert "||" in tail and "WARNING" in tail, ( + "the harvest step must tolerate failure (|| warn), not abort the run" + ) + assert runner.index('echo "1" > "$REWARD_FILE"') < idx, ( + "the reward must be decided before metrics are harvested" + ) + + +def test_contract_declares_the_engine_expectations(): + """The engine checks are this benchmark's differentiator; a contract that + omitted them would silently skip them.""" + contract = _json(BENCH / "shared" / "contracts" / "orders.json") + root = contract["roots"][0] + assert root["engine"]["forbid_full_scan_for"], "no engine expectations" + assert root["engine"]["max_scan_amplification"] > 0 + assert root["indexing"]["esr_compound"]["equality"] + assert root["indexing"]["esr_compound"]["sort"] + + +def test_runner_fails_loudly_when_the_treatment_arm_has_no_skills(): + ces = (BENCH / "shared" / "ces" / "runner.sh").read_text() + assert "FATAL" in ces and "exit 1" in ces, ( + "the agent runner must abort when SKILLS_ARM=kit but the skills are " + "missing; otherwise the treatment arm silently becomes a control arm" + ) diff --git a/testing/scenarios/benchmark-metrics/conftest.py b/testing/scenarios/benchmark-metrics/conftest.py new file mode 100644 index 0000000..6493a77 --- /dev/null +++ b/testing/scenarios/benchmark-metrics/conftest.py @@ -0,0 +1,16 @@ +"""Scenario conftest: benchmark metric validation needs no database.""" + +import sys +from pathlib import Path + +import pytest + +REPO = Path(__file__).resolve().parents[3] +sys.path.insert(0, str(REPO / "evals" / "harness")) +sys.path.insert(0, str(REPO / "benchmarks" / "documentdb-sdk-skills" / "shared" / "verifier")) + + +@pytest.fixture(scope="session", autouse=True) +def require_container(): + """No-op override — this scenario is infrastructure-free.""" + return None diff --git a/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py b/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py new file mode 100644 index 0000000..5a57b0e --- /dev/null +++ b/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py @@ -0,0 +1,294 @@ +"""Contract tests for the MSBench cost-metric harvester (Loop C). + +WHY THIS SCENARIO EXISTS +------------------------ +MSBench's reward is binary: complied, or did not. That cannot answer "what did +it cost?" or "which kind of task is expensive?", which is half of what we want +from the benchmark. `harvest_metrics.py` fills that gap by writing MSBench's +per-instance `custom_metrics.json`. + +Two failure modes make those numbers dangerous rather than merely absent, and +both are pinned here: + +1. **Silent divergence from the Loop B cost module.** We now have two places + that compute "what did the agent cost" — `evals/harness/token_usage.py` + (Loop B) and `benchmarks/.../harvest_metrics.py` (Loop C). They must agree, + or we will publish two different cost figures for the same run. They cannot + share an import (the harvester has to run inside a minimal task container), + so consistency is pinned by TEST instead of by import path. + +2. **A zero that means "not measured".** If harvesting fails, a missing metric + is honest; a silent 0 corrupts every average computed over it. + +Infrastructure-free: synthetic SQLite, no container, no credentials, no +network. Runs on every PR. +""" +from __future__ import annotations + +import json +import sqlite3 +from pathlib import Path + +import pytest + +import harvest_metrics as hm +import token_usage as tu + +pytestmark = pytest.mark.benchmarkmetrics + + +# --------------------------------------------------------------------------- +# synthetic session store (shared shape with the token-accounting scenario) +# --------------------------------------------------------------------------- +def _make_store(tmp_path: Path, rows) -> Path: + db = tmp_path / "session-store.db" + conn = sqlite3.connect(db) + conn.execute("""CREATE TABLE sessions ( + id TEXT, cwd TEXT, repository TEXT, host_type TEXT, branch TEXT, + summary TEXT, created_at TEXT, updated_at TEXT)""") + conn.execute("""CREATE TABLE assistant_usage_events ( + id INTEGER PRIMARY KEY, session_id TEXT, turn_index INTEGER, + agent_id TEXT, parent_tool_call_id TEXT, model TEXT, + input_tokens INTEGER, output_tokens INTEGER, cache_read_tokens INTEGER, + cache_write_tokens INTEGER, reasoning_tokens INTEGER, + total_nano_aiu INTEGER, request_multiplier REAL, duration_ms INTEGER, + time_to_first_token_ms INTEGER, inter_token_latency_ms INTEGER, + initiator TEXT, api_endpoint TEXT, reasoning_effort TEXT, + finish_reason TEXT, content_filter_triggered INTEGER, + token_details_json TEXT, created_at TEXT)""") + conn.execute("INSERT INTO sessions (id, created_at) VALUES ('s1','2026-08-13T00:00:00Z')") + conn.executemany( + """INSERT INTO assistant_usage_events + (session_id, turn_index, agent_id, model, input_tokens, output_tokens, + cache_read_tokens, cache_write_tokens, reasoning_tokens, + total_nano_aiu, duration_ms) + VALUES (:session_id,:turn_index,:agent_id,:model,:input_tokens, + :output_tokens,:cache_read_tokens,:cache_write_tokens, + :reasoning_tokens,:total_nano_aiu,:duration_ms)""", + rows, + ) + conn.commit() + conn.close() + return db + + +def _row(**kw): + base = dict(session_id="s1", turn_index=0, agent_id=None, model="m1", + input_tokens=1000, output_tokens=100, cache_read_tokens=0, + cache_write_tokens=0, reasoning_tokens=0, + total_nano_aiu=1_000_000_000, duration_ms=1000) + base.update(kw) + return base + + +@pytest.fixture +def store(tmp_path): + return _make_store(tmp_path, [ + _row(turn_index=0, input_tokens=1000, cache_read_tokens=0, + output_tokens=100, total_nano_aiu=2_000_000_000, duration_ms=1500), + _row(turn_index=1, input_tokens=5000, cache_read_tokens=4500, + output_tokens=200, total_nano_aiu=3_000_000_000, duration_ms=2500), + _row(turn_index=1, input_tokens=5000, cache_read_tokens=4800, + output_tokens=50, total_nano_aiu=1_000_000_000, duration_ms=500, + agent_id="explore"), + ]) + + +def _ctrf(tmp_path, tests) -> Path: + p = tmp_path / "ctrf.json" + p.write_text(json.dumps({"results": {"tests": tests}})) + return p + + +def _reward(tmp_path, value) -> Path: + p = tmp_path / "reward.txt" + p.write_text(str(value)) + return p + + +# --------------------------------------------------------------------------- +# THE consistency guarantee +# --------------------------------------------------------------------------- +def test_harvester_agrees_with_the_loop_b_cost_module(store): + """The two cost implementations must produce identical numbers. + + They deliberately do not share code — the harvester must be self-contained + to run inside a minimal task container — so this test is what stops them + drifting into two different published cost figures for the same run. + """ + harvested = hm.read_usage(store) + + conn, tmp = tu._open_readonly(store) + try: + loop_b = tu._derive(dict(conn.execute( + tu._ROLLUP_SQL.replace("WHERE session_id = ?", "") + ).fetchone())) + finally: + tu._cleanup(conn, tmp) + + for hkey, tkey in [ + ("tokens_input", "input_tokens"), + ("tokens_output", "output_tokens"), + ("tokens_cache_read", "cache_read_tokens"), + ("tokens_fresh_input", "fresh_input_tokens"), + ("tokens_reasoning", "reasoning_tokens"), + ("ai_credits", "credits"), + ("agent_turns", "turns"), + ("agent_requests", "requests"), + ]: + assert harvested[hkey] == pytest.approx(loop_b[tkey]), ( + f"cost definitions have drifted: harvest_metrics.{hkey}=" + f"{harvested[hkey]} but token_usage.{tkey}={loop_b[tkey]}" + ) + + +def test_fresh_input_subtracts_cache_reads(store): + """The honesty metric: cache_read is a SUBSET of input, so a skill payload + sent once and then cached must not be billed at full rate in our reporting.""" + m = hm.read_usage(store) + assert m["tokens_cache_read"] == 9300 + assert m["tokens_fresh_input"] == 11000 - 9300 + assert m["cache_read_share_pct"] == pytest.approx(9300 / 11000 * 100, abs=0.01) + + +def test_turns_counts_distinct_turns_not_requests(store): + """A subagent request shares its parent's turn index; counting requests as + turns would overstate how many round trips the task needed.""" + m = hm.read_usage(store) + assert m["agent_requests"] == 3 + assert m["agent_turns"] == 2 + + +# --------------------------------------------------------------------------- +# missing data must not read as zero cost +# --------------------------------------------------------------------------- +def test_missing_store_is_flagged_not_zeroed(tmp_path): + metrics = hm.build_metrics( + None, _ctrf(tmp_path, []), _reward(tmp_path, 0) + ) + assert metrics["tokens_available"] == 0 + assert "tokens_input" not in metrics, ( + "A failed harvest must OMIT token metrics, not report 0. A silent zero " + "would drag down every average computed over it." + ) + + +def test_present_store_is_flagged_available(store, tmp_path): + metrics = hm.build_metrics(store, _ctrf(tmp_path, []), _reward(tmp_path, 1)) + assert metrics["tokens_available"] == 1 + assert metrics["tokens_input"] > 0 + + +# --------------------------------------------------------------------------- +# outcome gating +# --------------------------------------------------------------------------- +def test_failed_run_reports_no_cost_to_green(store, tmp_path): + """Otherwise an agent that gives up early looks like the cheapest one.""" + metrics = hm.build_metrics(store, _ctrf(tmp_path, []), _reward(tmp_path, 0)) + assert metrics["reward"] == 0 + for key in ("credits_to_green", "turns_to_green", "billable_tokens_to_green"): + assert key not in metrics + + +def test_green_run_reports_cost_to_green(store, tmp_path): + metrics = hm.build_metrics(store, _ctrf(tmp_path, []), _reward(tmp_path, 1)) + assert metrics["reward"] == 1 + assert metrics["credits_to_green"] == pytest.approx(6.0) + assert metrics["turns_to_green"] == 2 + # billable = fresh input + output, NOT raw input + assert metrics["billable_tokens_to_green"] == 1700 + 350 + + +def test_missing_reward_file_counts_as_failure(store, tmp_path): + metrics = hm.build_metrics(store, _ctrf(tmp_path, []), tmp_path / "nope.txt") + assert metrics["reward"] == 0 + + +# --------------------------------------------------------------------------- +# CTRF category breakdown — what makes the cost numbers actionable +# --------------------------------------------------------------------------- +def test_check_categories_are_broken_out(tmp_path): + ctrf = _ctrf(tmp_path, [ + {"name": "/verifier/check_api.py::test_a", "status": "passed"}, + {"name": "/verifier/check_api.py::test_b", "status": "failed"}, + {"name": "/verifier/check_engine.py::test_c", "status": "passed"}, + {"name": "/verifier/check_behavior.py::test_d", "status": "passed"}, + ]) + m = hm.read_ctrf(ctrf) + assert m["checks_total"] == 4 + assert m["checks_passed"] == 3 + assert m["checks_failed"] == 1 + assert m["checks_api_passed"] == 1 and m["checks_api_total"] == 2 + assert m["checks_engine_passed"] == 1 + assert m["checks_behavior_passed"] == 1 + + +def test_skipped_checks_are_excluded_from_totals(tmp_path): + """A skipped check was not graded. Counting it as a pass would inflate the + score; counting it as a failure would punish a legitimately N/A rule.""" + ctrf = _ctrf(tmp_path, [ + {"name": "/verifier/check_api.py::test_a", "status": "passed"}, + {"name": "/verifier/check_source.py::test_b", "status": "skipped"}, + ]) + m = hm.read_ctrf(ctrf) + assert m["checks_total"] == 1 + assert "checks_source_total" not in m + + +def test_malformed_ctrf_does_not_crash_the_harvest(tmp_path): + """Losing telemetry must never change a grading outcome.""" + bad = tmp_path / "ctrf.json" + bad.write_text("not json") + assert hm.read_ctrf(bad) == {} + + +# --------------------------------------------------------------------------- +# MSBench output contract +# --------------------------------------------------------------------------- +def test_all_emitted_values_are_numeric(store, tmp_path): + """MSBench infers a `numeric` schema from the values and validates that the + schema is consistent across instances. A single string would break it.""" + metrics = hm.build_metrics(store, _ctrf(tmp_path, [ + {"name": "/verifier/check_api.py::t", "status": "passed"}, + ]), _reward(tmp_path, 1)) + bad = {k: v for k, v in metrics.items() + if not isinstance(v, (int, float)) or isinstance(v, bool)} + assert not bad, f"non-numeric custom metrics would break MSBench's schema: {bad}" + + +def test_writes_custom_metrics_json_to_the_output_dir(store, tmp_path): + out = tmp_path / "output" + rc = hm.main([ + "--store", str(store), + "--ctrf", str(_ctrf(tmp_path, [])), + "--reward", str(_reward(tmp_path, 1)), + "--output-dir", str(out), + ]) + assert rc == 0 + written = json.loads((out / "custom_metrics.json").read_text()) + assert written["reward"] == 1 + assert written["tokens_available"] == 1 + + +def test_existing_metrics_are_merged_not_clobbered(store, tmp_path): + """The agent may have written its own metrics to the same file; destroying + them would lose data MSBench expects to ingest.""" + out = tmp_path / "output" + out.mkdir() + (out / "custom_metrics.json").write_text(json.dumps({"Tool_Calls_Total": 56})) + hm.main([ + "--store", str(store), + "--ctrf", str(_ctrf(tmp_path, [])), + "--reward", str(_reward(tmp_path, 1)), + "--output-dir", str(out), + ]) + written = json.loads((out / "custom_metrics.json").read_text()) + assert written["Tool_Calls_Total"] == 56 + assert written["tokens_available"] == 1 + + +def test_reader_does_not_mutate_the_session_store(store): + """The store may be live. Snapshot, never open it for writing.""" + before = store.read_bytes() + hm.read_usage(store) + assert store.read_bytes() == before From 473612f348512a4ccf3385c32449e8341bd84557 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 17:46:12 +0000 Subject: [PATCH 17/52] Build and verify the MSBench benchmark end-to-end: oracle passes, naive fails Completes 3b-3e. The images now build and BOTH controls run, which turned up three real bugs that inspection had missed. VERIFIED BY RUNNING oracle (reference impl) -> REWARD=1, 31 checks passed empty /app -> REWARD=0 working-but-NAIVE app -> REWARD=0, 10 checks failed custom_metrics.json -> emitted with per-category check counts The naive control is the one that matters. An empty /app failing only proves the harness notices missing files. The naive app is fully functional - correct HTTP behaviour, correct persistence - and passes every API and behavioural check, yet still scores 0, failing exactly the ten skill-specific checks (type discriminator, schemaVersion, queryable timestamp, secondary index, indexed query field, no-full-scan, scan amplification, explicit connection options, TLS not hardcoded off, per-request client). The benchmark measures best practices, not basic competence. THREE REAL BUGS THE CONTROLS FOUND 1. check_source.py's regex had catastrophic backtracking (nested quantifiers over lines). It never returned on a 6 KB file - the verifier hung for minutes and the run had to be killed. Replaced with ast: exact, and ~1000x faster (0.3ms vs never). Guarded by a CI test that bans a quantified group followed by another quantifier. 2. The credential check matched an f-string TEMPLATE, mongodb://{quote_plus(user)}:{quote_plus(password)}@... - i.e. the CORRECT pattern of reading credentials from the environment. It failed the reference implementation. A false positive here would fail every well-written submission, which is worse than having no check. Guarded by a test asserting env-driven URIs pass and real secrets still fail. 3. The singleton-client check only looked inside route-decorated functions, so the naive app slipped through by hiding its per-request MongoClient in a plain helper. Now flags construction inside ANY function, exempting memoised factories (@lru_cache) and start-up hooks. Found by the negative control - exactly what negative controls are for. BUILD FIXES (each verified against the real image, not assumed) - `which` is not a package on this base; asking for it failed the whole apt transaction. The binary already exists at /usr/bin/which. - pip 22.x on Ubuntu 22.04 has no --break-system-packages (that arrived in pip 23 for PEP 668), and jammy is not externally-managed. - files.pythonhosted.org is unreachable from Docker's VM on this network (blocked by IT) though the host can reach it. Wheels are now vendored on the host by vendor-wheels.sh and installed with --no-index. This is better than a workaround: the task promises the agent NO INTERNET during grading, and a pinned wheel set makes the image reproducible. --no-index makes that enforceable - a missing wheel fails the build instead of silently reaching the network. - pip evaluates `python_version` markers against the interpreter running the download, not --python-version, so tomli/exceptiongroup silently resolved to "not needed" on a 3.12 host and the image build failed. Pinned explicitly. - The base image reset ENTRYPOINT and switched to root, but PostgreSQL refuses to run as root. The database is now started back under the `documentdb` user while the verifier stays root - the same split the Cosmos benchmark makes. - The password was generated inside start-documentdb, a child process, so it could never propagate to the caller. Generated in runner.sh instead. - /tests/checks.py could not see /verifier/conftest.py fixtures (pytest only applies a conftest at or below its own directory). It is copied into /verifier before the run. - A 3.12-only nested f-string quoting parsed on the dev machine and raised SyntaxError inside the 3.10 image. Now guarded by a CI test that parses every verifier module with feature_version=(3, 10). NEW CI GUARDS (all infra-free, every PR) Python 3.10 compatibility, catastrophic-backtracking patterns, credential false positives, and the singleton detector's three cases. Verified: 128 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- benchmarks/documentdb-sdk-skills/.gitignore | 5 + benchmarks/documentdb-sdk-skills/README.md | 57 ++++-- benchmarks/documentdb-sdk-skills/build.sh | 77 +++++++ .../shared/base/Dockerfile | 40 +++- .../shared/base/start-documentdb.sh | 31 ++- .../shared/base/vendor-wheels.sh | 82 ++++++++ .../shared/verifier/check_skills.py | 13 +- .../shared/verifier/check_source.py | 85 ++++++-- .../shared/verifier/conftest.py | 7 +- .../shared/verifier/runner.sh | 34 +++- .../orders-api-python/environment/Dockerfile | 11 +- .../environment/reference/build.sh | 3 +- .../tests/test_benchmark_config.py | 192 ++++++++++++++++++ 13 files changed, 585 insertions(+), 52 deletions(-) create mode 100644 benchmarks/documentdb-sdk-skills/.gitignore create mode 100755 benchmarks/documentdb-sdk-skills/build.sh create mode 100755 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh diff --git a/benchmarks/documentdb-sdk-skills/.gitignore b/benchmarks/documentdb-sdk-skills/.gitignore new file mode 100644 index 0000000..0435678 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/.gitignore @@ -0,0 +1,5 @@ +# Build inputs staged by build.sh — never committed. +# .wheels/ is ~50MB of binary artifacts; .skills/ is a copy of ../../skills/. +# Both are regenerated by `bash build.sh`. +.wheels/ +.skills/ diff --git a/benchmarks/documentdb-sdk-skills/README.md b/benchmarks/documentdb-sdk-skills/README.md index 9a4d7e4..fbd137f 100644 --- a/benchmarks/documentdb-sdk-skills/README.md +++ b/benchmarks/documentdb-sdk-skills/README.md @@ -4,10 +4,10 @@ A **skill-efficacy benchmark**: does a coding agent obey Azure DocumentDB best practices when it merely *has* the [documentdb-agent-kit](../../README.md) skills installed? -> **Status: not yet published.** The images build locally and the benchmark is -> registered-ready, but it has not been submitted to MSBench. See -> [Verification status](#verification-status) for exactly what is and is not -> proven. +> **Status: built and verified locally; not yet submitted to MSBench.** Both +> images build offline, the oracle scores 1, and both an empty and a +> working-but-naive submission score 0. See +> [Verification status](#verification-status). ## The question @@ -210,7 +210,7 @@ msbench-cli run --benchmark documentdb-sdk-skills \ ## Verification status -Honest accounting of what has and has not been proven: +Verified by running, not by inspection: | Claim | Status | |---|---| @@ -218,16 +218,47 @@ Honest accounting of what has and has not been proven: | Task follows the Harbor layout | ✅ asserted by tests | | Instruction contains no hints | ✅ asserted (mutation-verified) | | Cost metrics agree with the Loop B module | ✅ asserted (mutation-verified) | -| Harvester works on a real session store | ✅ run against a live store | -| All shell entrypoints parse | ✅ `bash -n` | -| **Images build** | ⬜ **not yet** — the Docker daemon was unavailable | -| **Oracle scores 1** | ⬜ **not yet** — blocked on the build | -| **Empty submission scores 0** | ⬜ **not yet** — blocked on the build | +| Verifier parses as Python 3.10 (the image's interpreter) | ✅ asserted in CI | +| Images build | ✅ base + task, offline from vendored wheels | +| **Oracle scores 1** | ✅ **REWARD=1, 31 checks passed** | +| **Empty submission scores 0** | ✅ **REWARD=0** | +| **A working-but-naive app scores 0** | ✅ **REWARD=0, 10 checks failed** | +| Cost metrics emitted | ✅ `custom_metrics.json` with per-category counts | | Submitted to MSBench | ⬜ not yet | -The oracle and empty-submission controls are wired into -[`loop-c-benchmark.yml`](../../.github/workflows/loop-c-benchmark.yml) and run -on `workflow_dispatch`. +### The discrimination that matters + +An empty `/app` failing is a weak result — it proves only that the harness +notices missing files. The real test is a submission that **works**: correct +HTTP behaviour, correct persistence, no DocumentDB best practices. + +That app passes **every** API and behavioural check and still scores 0, failing +exactly the ten skill-specific ones: + +``` +check_documentdb type discriminator, schemaVersion, queryable timestamp, + secondary index exists, queried field is indexed +check_engine query is not a full scan, scan amplification is low +check_source connection options set explicitly, TLS not hardcoded off, + client is not constructed per request +``` + +That is the benchmark working as intended: it measures best practices, not +basic competence. + +### Three real bugs the controls found + +None of these would have been caught by inspection, and all three would have +produced a *wrong published number*: + +| Bug | Consequence | Now guarded by | +|---|---|---| +| `check_source.py` regex had catastrophic backtracking (nested quantifiers over lines) | verifier **hung for minutes** on a 6 KB file; replaced with `ast` (~1000× faster) | a CI test banning quantified-group-followed-by-quantifier | +| Credential check matched an f-string **template** (`mongodb://{quote_plus(user)}:{quote_plus(password)}@…`) | **failed the reference implementation** — a false positive would fail every correct submission | a CI test asserting env-driven URIs pass and real secrets still fail | +| Singleton check only looked inside route handlers | the naive app hid its per-request client in a helper and **passed** | a CI test with the exact helper pattern | + +The third was found by the naive-submission control, which is precisely what +negative controls are for. ## What is *not* here diff --git a/benchmarks/documentdb-sdk-skills/build.sh b/benchmarks/documentdb-sdk-skills/build.sh new file mode 100755 index 0000000..cb6e28a --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/build.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +# build.sh — stage build inputs, then build the benchmark images. +# +# Two things have to be staged before `docker build` can run, and both are the +# same pattern the Cosmos benchmark uses for its skills: +# +# 1. THE SKILLS (`.skills/`) +# The treatment arm needs the agent kit's skills inside the image. They live +# in the sibling `skills/` tree, outside this build context, so they are +# copied in here rather than widening the context to the whole repo. +# +# 2. THE PYTHON WHEELS (`.wheels/`) +# The image installs its verifier dependencies from a local wheel directory, +# with no network access at build time. That is deliberate: +# +# * The benchmark instruction promises the agent no internet during +# grading. An image that needs PyPI to build does not honour that. +# * A pinned wheel set makes the image byte-reproducible; resolving from +# PyPI months later may not be. +# * Practically: Docker's VM on some hosts cannot complete a TLS handshake +# with files.pythonhosted.org even when the host can (an MTU/NAT issue), +# so downloading on the host and copying in is the only reliable path. +# +# Usage: +# bash build.sh # base + task images +# bash build.sh --base-only + +set -euo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO="$(cd "$HERE/../.." && pwd)" +BASE_TAG="${BASE_TAG:-documentdb-orders-base:latest}" +TASK_TAG="${TASK_TAG:-documentdb-orders-api-python:latest}" + +cd "$HERE" + +# --------------------------------------------------------------------------- +echo "==> Staging skills from $REPO/skills" +# --------------------------------------------------------------------------- +rm -rf .skills +mkdir -p .skills +cp -r "$REPO/skills/." .skills/ +echo " staged $(find .skills -name SKILL.md | wc -l) skills" + +# --------------------------------------------------------------------------- +echo "==> Vendoring Python wheels" +# --------------------------------------------------------------------------- +bash shared/base/vendor-wheels.sh .wheels + +# --------------------------------------------------------------------------- +echo "==> Building base image: $BASE_TAG" +# --------------------------------------------------------------------------- +docker build -f shared/base/Dockerfile -t "$BASE_TAG" . + +if [ "${1:-}" = "--base-only" ]; then + echo "==> base image built; stopping (--base-only)" + exit 0 +fi + +# --------------------------------------------------------------------------- +echo "==> Building task image: $TASK_TAG" +# --------------------------------------------------------------------------- +# The task image reuses the base's vendored wheels for the reference app's +# dependencies, so it also builds with no network. +cp -r .wheels tasks/orders-api-python/.wheels +trap 'rm -rf "$HERE/tasks/orders-api-python/.wheels"' EXIT +docker build -f tasks/orders-api-python/environment/Dockerfile \ + -t "$TASK_TAG" tasks/orders-api-python + +echo +echo "Built:" +echo " $BASE_TAG" +echo " $TASK_TAG" +echo +echo "Verify both controls:" +echo " docker run --rm $TASK_TAG bash -c '/solution/solve.sh && /tests/test.sh; cat /logs/verifier/reward.txt' # must print 1" +echo " docker run --rm $TASK_TAG bash -c '/tests/test.sh; cat /logs/verifier/reward.txt' # must print 0" diff --git a/benchmarks/documentdb-sdk-skills/shared/base/Dockerfile b/benchmarks/documentdb-sdk-skills/shared/base/Dockerfile index e3e9233..e4a140e 100644 --- a/benchmarks/documentdb-sdk-skills/shared/base/Dockerfile +++ b/benchmarks/documentdb-sdk-skills/shared/base/Dockerfile @@ -36,8 +36,12 @@ RUN set -eux; \ apt-get update; \ apt-get install -y --no-install-recommends \ python3 python3-pip python3-venv ca-certificates curl jq procps \ - tar gzip unzip zip which; \ + tar gzip unzip zip; \ rm -rf /var/lib/apt/lists/* +# NOTE: `which` is deliberately absent from that list. It is not a package on +# this base (it ships inside debianutils) and asking for it fails the whole +# apt transaction with "Unable to locate package which". The binary is already +# present at /usr/bin/which. # --------------------------------------------------------------------------- # mongosh. NOT OPTIONAL, and not present upstream. @@ -57,11 +61,29 @@ RUN set -eux; \ rm -rf /tmp/mongosh.tgz "/tmp/mongosh-${MONGOSH_VERSION}-linux-x64"; \ mongosh --version -# Verifier dependencies, pinned so the benchmark is reproducible. +# --------------------------------------------------------------------------- +# Verifier dependencies, installed from VENDORED WHEELS with no network. +# +# `.wheels/` is populated on the host by shared/base/vendor-wheels.sh before +# `docker build` runs (see build.sh). Two reasons this is right, not a hack: +# * files.pythonhosted.org is not reachable from Docker's VM on this network, +# though the host can reach it; +# * the benchmark promises the agent NO INTERNET during grading, and a pinned +# wheel set makes the image reproducible when a fresh PyPI resolution months +# later might not be. +# +# --no-index makes the guarantee enforceable: if a wheel is missing the build +# FAILS rather than silently reaching out to the network. +# +# No --break-system-packages: this base is Ubuntu 22.04 with pip 22.x, which +# does not have that flag (it arrived in pip 23 for PEP 668). Jammy is not +# externally-managed, so a plain install is correct here. +# --------------------------------------------------------------------------- +COPY .wheels /opt/wheels # psycopg is what makes check_engine.py possible: it reads the PostgreSQL # engine underneath the Mongo API, a second observation plane the Cosmos # benchmark does not have. -RUN python3 -m pip install --no-cache-dir --break-system-packages \ +RUN python3 -m pip install --no-cache-dir --no-index --find-links=/opt/wheels \ pytest==8.3.3 \ pytest-json-ctrf==0.3.5 \ requests==2.32.3 \ @@ -73,7 +95,7 @@ RUN python3 -m pip install --no-cache-dir --break-system-packages \ # verifier dependency by pip-installing a different pymongo into system # site-packages. runner.sh prefers /opt/verifier-venv/bin/python. RUN python3 -m venv /opt/verifier-venv && \ - /opt/verifier-venv/bin/pip install --no-cache-dir \ + /opt/verifier-venv/bin/pip install --no-cache-dir --no-index --find-links=/opt/wheels \ pytest==8.3.3 \ pytest-json-ctrf==0.3.5 \ requests==2.32.3 \ @@ -102,6 +124,16 @@ RUN set -eux; \ chmod +x /ces_activate.sh /entry.sh /save.sh /restore.sh \ /opt/activate_python.sh /opt/safe_save.sh 2>/dev/null || true +# --------------------------------------------------------------------------- +# The agent kit's skills, for the TREATMENT arm. +# +# shared/ces/runner.sh copies these into the agent's personal skills directory +# when SKILLS_ARM=kit, and installs nothing when SKILLS_ARM=control. They are +# staged into the build context by build.sh rather than widening the context to +# the whole repository. +# --------------------------------------------------------------------------- +COPY .skills /opt/documentdb-agent-kit/skills + RUN mkdir -p /logs/verifier /app /reference /output /drop /agent /testbed && \ chmod -R 1777 /logs /output /drop /agent /testbed /app /reference 2>/dev/null || true diff --git a/benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh b/benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh index 09473ee..01a90a6 100644 --- a/benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh +++ b/benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh @@ -33,19 +33,42 @@ if pgrep -f "documentdb" >/dev/null 2>&1 && \ fi echo "[start-documentdb] starting (log: $LOG)" +# The upstream image's ENTRYPOINT is +# /bin/bash -c '/home/documentdb/gateway/scripts/emulator_entrypoint.sh "$@"' +# and the image runs as the unprivileged `documentdb` user (uid 1000). +# +# We reset ENTRYPOINT and switched to root in the Dockerfile so Harbor can drive +# tests/test.sh and the verifier can write /logs. But PostgreSQL REFUSES to run +# as root ("initdb: cannot be run as root"), so the database must be started +# back under `documentdb` while everything else stays root. This is the same +# split the Cosmos benchmark makes for its emulator user. ENTRY="" -for candidate in /usr/local/bin/entrypoint.sh /entrypoint.sh /usr/local/bin/start.sh; do +for candidate in \ + /home/documentdb/gateway/scripts/emulator_entrypoint.sh \ + /usr/local/bin/entrypoint.sh \ + /entrypoint.sh; do [ -x "$candidate" ] && { ENTRY="$candidate"; break; } done if [ -z "$ENTRY" ]; then echo "[start-documentdb] ERROR: no entrypoint script found in the image." >&2 - echo "[start-documentdb] Looked for: /usr/local/bin/entrypoint.sh /entrypoint.sh /usr/local/bin/start.sh" >&2 + echo "[start-documentdb] Looked for: /home/documentdb/gateway/scripts/emulator_entrypoint.sh" >&2 + echo "[start-documentdb] /usr/local/bin/entrypoint.sh /entrypoint.sh" >&2 exit 1 fi -USERNAME="$USER_" PASSWORD="$DOCUMENTDB_PASSWORD" \ - nohup "$ENTRY" >"$LOG" 2>&1 & +DB_RUN_USER="${DOCUMENTDB_RUN_USER:-documentdb}" +if id "$DB_RUN_USER" >/dev/null 2>&1 && [ "$(id -u)" = "0" ]; then + # The data directory must belong to the user that will own the server + # process, or initdb refuses to touch it. + chown -R "$DB_RUN_USER":"$DB_RUN_USER" /home/documentdb 2>/dev/null || true + su -s /bin/bash "$DB_RUN_USER" -c \ + "USERNAME='$USER_' PASSWORD='$DOCUMENTDB_PASSWORD' nohup '$ENTRY'" \ + >"$LOG" 2>&1 & +else + USERNAME="$USER_" PASSWORD="$DOCUMENTDB_PASSWORD" \ + nohup "$ENTRY" >"$LOG" 2>&1 & +fi echo "[start-documentdb] waiting for the gateway to accept connections..." for i in $(seq 1 120); do diff --git a/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh b/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh new file mode 100755 index 0000000..4f48469 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash +# vendor-wheels.sh — download the verifier + reference-app wheels on the HOST +# so the image can install them with no network access. +# +# WHY +# --- +# `files.pythonhosted.org` is not reachable from inside Docker's VM on this +# network (blocked by IT policy), although the host itself can reach it. So the +# wheels are resolved once, here, and copied into the build context. +# +# This is not a workaround bolted on: it is how the image SHOULD be built. +# The benchmark promises the agent no internet during grading, and a pinned +# wheel set makes the image reproducible months later when a fresh PyPI +# resolution might not be. +# +# If the public index is blocked on the host too, set PIP_INDEX_URL to an +# approved internal mirror before running, e.g. an Azure Artifacts feed that +# proxies PyPI: +# +# export PIP_INDEX_URL="https://pkgs.dev.azure.com//_packaging//pypi/simple/" +# +# Usage: bash vendor-wheels.sh [dest-dir] + +set -euo pipefail + +DEST="${1:-.wheels}" +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Pinned, and shared by the base image (verifier) and the task image +# (reference app). One list keeps them from drifting apart. +PACKAGES=( + "pytest==8.3.3" + "pytest-json-ctrf==0.3.5" + "requests==2.32.3" + "pymongo==4.10.1" + "psycopg[binary]==3.2.3" + "pyyaml==6.0.2" + "fastapi==0.115.4" + "uvicorn[standard]==0.32.0" + "pydantic==2.9.2" + # Backports that only apply to the TARGET interpreter (3.10), listed + # explicitly because pip evaluates `python_version` environment markers + # against the interpreter RUNNING the download, not --python-version. On a + # 3.12 host these silently resolve to "not needed" and the image build then + # fails with "No matching distribution found for tomli". + "tomli==2.0.2" + "exceptiongroup==1.2.2" +) + +mkdir -p "$DEST" + +# Already vendored? Skip the download — this script runs on every build. +if [ -n "$(ls -A "$DEST" 2>/dev/null || true)" ] && [ -z "${VENDOR_FORCE:-}" ]; then + echo " $DEST already populated ($(ls "$DEST" | wc -l) files); set VENDOR_FORCE=1 to refresh" + exit 0 +fi + +echo " resolving ${#PACKAGES[@]} pinned packages into $DEST" + +# Target the image's interpreter, not the host's: the container is Ubuntu 22.04 +# (CPython 3.10, manylinux x86_64). Without these constraints pip would happily +# fetch wheels for the host's Python and they would not import in the image. +PYVER="${VENDOR_PYTHON_VERSION:-310}" + +if ! python3 -m pip download \ + --dest "$DEST" \ + --only-binary=:all: \ + --python-version "$PYVER" \ + --implementation cp \ + --abi "cp${PYVER}" \ + --platform manylinux2014_x86_64 \ + "${PACKAGES[@]}" 2>&1 | tail -5; then + echo + echo "vendor-wheels: download FAILED." >&2 + echo " If files.pythonhosted.org is blocked on this host as well, point pip" >&2 + echo " at an approved internal mirror and re-run:" >&2 + echo " export PIP_INDEX_URL=" >&2 + rm -rf "$DEST" + exit 1 +fi + +echo " vendored $(ls "$DEST" | wc -l) wheels" diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/check_skills.py b/benchmarks/documentdb-sdk-skills/shared/verifier/check_skills.py index ec980e0..f8e2270 100644 --- a/benchmarks/documentdb-sdk-skills/shared/verifier/check_skills.py +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/check_skills.py @@ -13,11 +13,18 @@ # The base image generates a password at container start and exports it. Any # literal that looks like a credential in source is therefore a real finding. _CREDENTIAL_PATTERNS = [ - # mongodb://user:password@host — a password embedded in a URI literal - (r"mongodb(?:\+srv)?://[^\s\"']*:[^\s\"'@/]{3,}@", + # mongodb://user:password@host — a password embedded in a URI LITERAL. + # + # The password class excludes { } $ % + on purpose: those characters mean + # the value is being INTERPOLATED, e.g. + # f"mongodb://{quote_plus(user)}:{quote_plus(password)}@{host}:{port}/" + # which is the CORRECT pattern (credentials from the environment), not a + # leak. Without this exclusion the check fails every well-written + # submission — it did exactly that to the reference implementation. + (r"mongodb(?:\+srv)?://[^\s\"']*:[^\s\"'@/{}$%+]{3,}@", "a connection URI with an embedded password"), # password = "literal" (not os.environ / getenv / a format placeholder) - (r"(?i)\b(?:password|passwd|pwd)\s*=\s*[\"'][^\"'{}$<>]{4,}[\"']", + (r"(?i)\b(?:password|passwd|pwd)\s*=\s*[\"'][^\"'{}$<>%+]{4,}[\"']", "a hardcoded password literal"), ] diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/check_source.py b/benchmarks/documentdb-sdk-skills/shared/verifier/check_source.py index 8e0a585..03016b6 100644 --- a/benchmarks/documentdb-sdk-skills/shared/verifier/check_source.py +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/check_source.py @@ -23,6 +23,7 @@ """ from __future__ import annotations +import ast import re import pytest @@ -33,6 +34,67 @@ def _need(sdk: str, *want: str): pytest.skip(f"does not apply to {sdk} (only: {', '.join(want)})") +ROUTE_DECORATORS = {"get", "post", "put", "delete", "patch", "route"} +# Decorators that make a per-call construction safe because the result is +# memoised, or that mark application start-up. +CACHING_DECORATORS = {"lru_cache", "cache", "cached_property", + "on_event", "lifespan", "before_first_request"} + + +def _client_calls_inside_functions(source_files) -> list[str]: + """Find MongoClient constructions that are NOT module-level singletons. + + Uses the AST rather than a regex. The regex version of this check had + catastrophic backtracking — nested quantifiers over lines — and hung the + verifier for minutes on a 6 KB file. Parsing is exact and ~1000x faster. + + WHY "ANY FUNCTION" AND NOT "ANY ROUTE HANDLER": + an earlier version only looked inside route-decorated functions, and a + deliberately naive submission slipped through by hiding the construction in + a helper: + + def coll(): + c = MongoClient(...) # a NEW pool on every request + return c[db][collection] + + @app.get("/orders") + def list_orders(): return list(coll().find(...)) + + That is the exact anti-pattern the check exists to catch. A correct + singleton is built once at module import (or behind an explicit cache / + start-up hook), so anything else is reported. + """ + offenders = [] + for path in source_files: + try: + tree = ast.parse(path.read_text(encoding="utf-8", errors="ignore")) + except (SyntaxError, OSError): + continue + + # Map every node to its enclosing function, if any. + for node in ast.walk(tree): + if not isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)): + continue + + exempt = False + for dec in node.decorator_list: + call = dec.func if isinstance(dec, ast.Call) else dec + name = getattr(call, "attr", None) or getattr(call, "id", None) + if name in CACHING_DECORATORS: + exempt = True + break + if exempt: + continue + + for inner in ast.walk(node): + if (isinstance(inner, ast.Call) + and isinstance(inner.func, ast.Name) + and inner.func.id == "MongoClient"): + offenders.append( + f"{path.name}:{inner.lineno} in {node.name}()") + return offenders + + class TestClientLifecycle: """Singleton client. @@ -44,21 +106,16 @@ class TestClientLifecycle: check_engine.py checks the runtime consequence; this names the cause. """ - def test_client_is_not_constructed_per_request(self, sdk, source_text): + def test_client_is_not_constructed_per_request(self, sdk, source_files): _need(sdk, "python") - # A client built inside a request handler is the anti-pattern. Look for - # a MongoClient(...) construction indented under a decorated route. - route_then_client = re.compile( - r"@\w+\.(?:get|post|put|delete|route)\([^)]*\)\s*" - r"(?:async\s+)?def\s+\w+\([^)]*\):" - r"(?:[^\n]*\n(?:[ \t]+[^\n]*\n)*?)*?[ \t]+\w*\s*=\s*MongoClient\s*\(", - re.MULTILINE, - ) - assert not route_then_client.search(source_text), ( - "A MongoClient is constructed inside a request handler. Create one " - "client at application start-up and reuse it: each client owns a " - "connection pool, so per-request construction exhausts server " - "connections and defeats pooling." + offenders = _client_calls_inside_functions(source_files) + assert not offenders, ( + f"A MongoClient is constructed inside a function " + f"({', '.join(offenders[:5])}), so a new connection pool is created " + f"on every call. Build ONE client at application start-up and reuse " + f"it — per-request construction exhausts server connections and " + f"defeats pooling entirely. (A memoised factory, e.g. @lru_cache, " + f"is also accepted.)" ) def test_a_client_is_constructed_somewhere(self, sdk, source_text): diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/conftest.py b/benchmarks/documentdb-sdk-skills/shared/verifier/conftest.py index 2339ec2..79899b6 100644 --- a/benchmarks/documentdb-sdk-skills/shared/verifier/conftest.py +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/conftest.py @@ -70,10 +70,13 @@ def load_contract() -> dict: scenario = os.environ.get("SCENARIO", "orders") path = CONTRACTS_DIR / f"{scenario}.json" if not path.is_file(): + available = ( + sorted(p.name for p in CONTRACTS_DIR.glob("*.json")) + if CONTRACTS_DIR.is_dir() else "contracts dir missing" + ) raise RuntimeError( f"Scenario contract not found: {path}. SCENARIO={scenario!r}. " - f"Available: {sorted(p.name for p in CONTRACTS_DIR.glob('*.json')) - if CONTRACTS_DIR.is_dir() else 'contracts dir missing'}" + f"Available: {available}" ) return json.loads(path.read_text()) diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh b/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh index 0e934db..cd4a948 100644 --- a/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh @@ -46,16 +46,21 @@ fail() { # --------------------------------------------------------------------- section "1. Start DocumentDB" # --------------------------------------------------------------------- -if ! start-documentdb; then - fail "DocumentDB did not start. See $LOG_DIR/documentdb.log" -fi -# start-documentdb generates DOCUMENTDB_PASSWORD when unset; re-derive it here -# so both the app and the verifier see the same value. +# The password is generated HERE, in the parent, not inside start-documentdb. +# A child process cannot export a variable back to its caller, and both the +# agent's app and the verifier must end up with the same credential. +# It is generated per container and never baked into the image — check_skills.py +# fails any submission with a hardcoded credential, so the benchmark must not +# model bad practice itself. if [ -z "${DOCUMENTDB_PASSWORD:-}" ]; then - fail "DOCUMENTDB_PASSWORD was not exported by start-documentdb" + DOCUMENTDB_PASSWORD="Bench$(head -c 12 /dev/urandom | od -An -tx1 | tr -d ' \n')" fi export DOCUMENTDB_PASSWORD +if ! start-documentdb; then + fail "DocumentDB did not start. See $LOG_DIR/documentdb.log" +fi + # --------------------------------------------------------------------- section "2. Check the agent's deliverables" # --------------------------------------------------------------------- @@ -120,6 +125,21 @@ section "6. Grade" PY=/opt/verifier-venv/bin/python [ -x "$PY" ] || PY=python3 +# The task's own checks are copied INTO /verifier before running. +# +# pytest only applies a conftest.py to tests at or below its directory, so a +# checks.py sitting in /tests cannot see the shared fixtures in +# /verifier/conftest.py — it fails with "fixture 'sdk' not found". Moving the +# file under /verifier puts it in the same fixture scope as everything else, +# which is also conceptually right: the verifier owns grading. +if [ -f /tests/checks.py ]; then + cp /tests/checks.py /verifier/task_checks.py + TASK_CHECKS=/verifier/task_checks.py +else + TASK_CHECKS="" + echo "[runner] WARNING: /tests/checks.py not found; task-specific checks skipped" >&2 +fi + "$PY" -m pytest \ --ctrf "$LOG_DIR/ctrf.json" \ -rA -v \ @@ -130,7 +150,7 @@ PY=/opt/verifier-venv/bin/python /verifier/check_engine.py \ /verifier/check_source.py \ /verifier/check_skills.py \ - /tests/checks.py \ + $TASK_CHECKS \ 2>&1 | tee "$LOG_DIR/pytest.log" PYTEST_RC=${PIPESTATUS[0]} diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/Dockerfile b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/Dockerfile index e703689..b4aeba2 100644 --- a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/Dockerfile +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/Dockerfile @@ -4,10 +4,13 @@ ENV SDK="python" # Bake the reference implementation in. solve.sh copies it into /app when the # oracle runs. The agent under evaluation never sees /reference. -COPY reference /reference +COPY environment/reference /reference -# Pre-install the reference impl's dependencies so the oracle runs quickly and, -# more importantly, so build.sh works with no internet access during grading. -RUN pip3 install --no-cache-dir --break-system-packages -r /reference/requirements.txt +# Pre-install the reference impl's dependencies from the vendored wheels, so +# the oracle's /app/build.sh works with NO internet access during grading — +# which is what the task instruction promises the agent. +COPY .wheels /opt/wheels +RUN pip3 install --no-cache-dir --no-index --find-links=/opt/wheels \ + -r /reference/requirements.txt WORKDIR /app diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh index f632d78..231a888 100755 --- a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh +++ b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash set -euo pipefail -pip3 install --no-cache-dir --break-system-packages -r /app/requirements.txt +# Installs from the wheels baked into the image: the task runs with no internet. +pip3 install --no-cache-dir --no-index --find-links=/opt/wheels -r /app/requirements.txt diff --git a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py index 2c86e14..a4539fe 100644 --- a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py +++ b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py @@ -255,3 +255,195 @@ def test_runner_fails_loudly_when_the_treatment_arm_has_no_skills(): "the agent runner must abort when SKILLS_ARM=kit but the skills are " "missing; otherwise the treatment arm silently becomes a control arm" ) + + +# --------------------------------------------------------------------------- +# interpreter compatibility +# --------------------------------------------------------------------------- +def test_verifier_modules_parse_under_python_310(): + """The task image is Ubuntu 22.04 => CPython 3.10. + + This caught a real bug: an f-string using 3.12-only nested quoting parsed + fine on the dev machine (3.12) and blew up inside the container with + `SyntaxError: unterminated string literal`, which only surfaced after a + full image build and run. Feature-version parsing catches it in CI in + milliseconds instead. + """ + import ast + + modules = sorted((VERIFIER).glob("*.py")) + assert modules, "no verifier modules found" + failures = [] + for path in modules: + try: + ast.parse(path.read_text(), filename=str(path), + feature_version=(3, 10)) + except SyntaxError as exc: + failures.append(f"{path.name}:{exc.lineno}: {exc.msg}") + assert not failures, ( + "verifier modules are not valid Python 3.10 (the task image's " + "interpreter):\n " + "\n ".join(failures) + ) + + +def test_reference_app_parses_under_python_310(): + import ast + + app = TASK / "environment" / "reference" / "app.py" + try: + ast.parse(app.read_text(), filename=str(app), feature_version=(3, 10)) + except SyntaxError as exc: + pytest.fail(f"reference app is not valid Python 3.10: " + f"line {exc.lineno}: {exc.msg}") + + +def test_verifier_has_no_catastrophically_backtracking_regexes(): + """Guard against a real bug that cost a full build-and-run cycle to find. + + check_source.py originally detected per-request client construction with a + regex containing NESTED QUANTIFIERS over lines: + + (?:[^\\n]*\\n(?:[ \\t]+[^\\n]*\\n)*?)*? + + On a 6 KB file it never returned — the verifier hung for minutes and the + run had to be killed. It is now done with `ast`, which is exact and ~1000x + faster. + + A quantifier applied to a group that itself contains a quantifier is the + signature of the problem, so it is banned outright in this directory. + """ + import re as _re + + # A group ending in a quantifier, immediately followed by another quantifier. + nested = _re.compile(r"\)[*+]\??[*+]|\*\?\)\*|\)\*\?\)") + offenders = [] + for path in sorted(VERIFIER.glob("*.py")): + for lineno, line in enumerate(path.read_text().splitlines(), 1): + stripped = line.strip() + if stripped.startswith("#") or '"""' in stripped: + continue + if nested.search(line): + offenders.append(f"{path.name}:{lineno}") + assert not offenders, ( + "possible catastrophic-backtracking regex (a quantified group followed " + f"by another quantifier) at {offenders}. Use ast for source analysis." + ) + + +# --------------------------------------------------------------------------- +# credential detection must not fire on correct code +# --------------------------------------------------------------------------- +def _credential_findings(source: str) -> list[str]: + """Apply check_skills.py's credential patterns to a source string.""" + import re as _re + import importlib.util + + spec = importlib.util.spec_from_file_location( + "_cs", VERIFIER / "check_skills.py") + mod = importlib.util.module_from_spec(spec) + # check_skills imports pytest at module scope; the test venv has it. + spec.loader.exec_module(mod) + out = [] + for pattern, label in mod._CREDENTIAL_PATTERNS: + for m in _re.finditer(pattern, source): + out.append(f"{label}: {m.group(0)[:40]}") + return out + + +def test_credential_check_does_not_fire_on_env_driven_uris(): + """A false positive here is worse than no check at all. + + This exact pattern failed the reference implementation: the URI is an + f-string TEMPLATE reading credentials from the environment — the correct + thing to do — but the password character class matched the interpolation + placeholder and flagged it as a hardcoded secret. + """ + good = ''' +from urllib.parse import quote_plus +user = os.environ["DOCUMENTDB_USER"] +password = os.environ["DOCUMENTDB_PASSWORD"] +uri = f"mongodb://{quote_plus(user)}:{quote_plus(password)}@{host}:{port}/" +uri2 = "mongodb://%s:%s@%s" % (user, password, host) +pwd = os.getenv("DOCUMENTDB_PASSWORD") +''' + assert not _credential_findings(good), ( + "the credential check fires on correct, env-driven code: " + f"{_credential_findings(good)}" + ) + + +def test_credential_check_still_catches_real_secrets(): + """The other half: a check that never fires is worthless.""" + bad_uri = 'client = MongoClient("mongodb://admin:Sup3rSecret@db:10260/")' + bad_literal = 'password = "Sup3rSecret"' + assert _credential_findings(bad_uri), "missed a URI-embedded password" + assert _credential_findings(bad_literal), "missed a hardcoded password literal" + + +# --------------------------------------------------------------------------- +# singleton-client detection +# --------------------------------------------------------------------------- +def _client_offenders(tmp_path, source: str) -> list[str]: + import importlib.util + + spec = importlib.util.spec_from_file_location( + "_csrc", VERIFIER / "check_source.py") + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + f = tmp_path / "app.py" + f.write_text(source) + return mod._client_calls_inside_functions([f]) + + +def test_singleton_client_detector_accepts_module_level_client(tmp_path): + good = ''' +from pymongo import MongoClient +client = MongoClient("mongodb://host") +db = client["x"] + +@app.get("/orders") +def list_orders(): + return list(db.orders.find({})) +''' + assert not _client_offenders(tmp_path, good) + + +def test_singleton_client_detector_catches_client_hidden_in_a_helper(tmp_path): + """Found by a negative control, not by inspection. + + An earlier version of this check only looked inside route-decorated + functions. A deliberately naive submission that built a client in a plain + helper called by every route PASSED, even though it creates a new + connection pool per request — the exact anti-pattern the check exists for. + """ + sneaky = ''' +from pymongo import MongoClient + +def coll(): + c = MongoClient("mongodb://host") + return c["db"]["orders"] + +@app.get("/orders") +def list_orders(): + return list(coll().find({})) +''' + offenders = _client_offenders(tmp_path, sneaky) + assert offenders, ( + "a MongoClient built inside a helper called per request was not " + "detected; the check would pass a submission that creates a new " + "connection pool on every call" + ) + + +def test_singleton_client_detector_allows_a_memoised_factory(tmp_path): + """A cached factory really is a singleton, and rejecting it would punish a + legitimate pattern.""" + cached = ''' +from functools import lru_cache +from pymongo import MongoClient + +@lru_cache(maxsize=1) +def get_client(): + return MongoClient("mongodb://host") +''' + assert not _client_offenders(tmp_path, cached) From 565921881cb6a11995ad8962c68916eede059a9a Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 19:42:24 +0000 Subject: [PATCH 18/52] Correct the grading-criteria language: fit, not a hierarchy of legitimacy The docs overstated the case against LLM-as-a-judge, calling it "the weakest grader available", "the last resort" and "easily fooled". That is not accurate: a judge is a normal, widely used grader, and this kit deliberately uses one in Loop B for qualities that are genuinely matters of degree - clarity, targeting, whether an explanation would actually help a user. The real reason remediation-effect measures instead of judging is narrower and more defensible: it lives in the DETERMINISTIC loop, and its job is to show the diagnostic scripts return a stable, reproducible answer. A judge cannot demonstrate repeatability, because the same input can score differently across runs. Where an outcome is a fact about the system - a query plan, a counter, a result set, an index shape - measuring it is simply the better fit. Reframed the ladder from "strongest -> weakest" to "most reproducible -> most qualitative", and made the selection rule about fit rather than avoidance. Updated: remediation-effect SCENARIO.md and its test module docstring, docs/TESTING.md, evals/README.md, and the evals-config grader test (which now explains that the allowlist is a speed bump for a deliberate choice, not a prohibition - Phase 1 stimuli are skill-TRIGGERING checks with a definite right answer, so a judge would add cost and variance for nothing). Also softened the comparison with the Cosmos benchmark. Describing their static source checks as "its weakest grader" was needlessly dismissive of a reasonable call: given a single-node emulator that cannot observe client configuration at runtime, a static check beats no coverage. The accurate point is narrower - a static check is easier to satisfy by accident than a runtime observation, and DocumentDB's PostgreSQL layer lets us avoid that trade-off rather than making us better engineers. No behaviour change. Verified: 128 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- benchmarks/documentdb-sdk-skills/README.md | 16 +++++----- .../shared/verifier/check_engine.py | 18 ++++++----- docs/TESTING.md | 13 ++++++-- evals/README.md | 10 ++++-- .../evals-config/tests/test_evals_config.py | 28 +++++++++++------ .../scenarios/remediation-effect/SCENARIO.md | 31 ++++++++++++++----- .../tests/test_remediation_effect.py | 18 ++++++----- 7 files changed, 89 insertions(+), 45 deletions(-) diff --git a/benchmarks/documentdb-sdk-skills/README.md b/benchmarks/documentdb-sdk-skills/README.md index fbd137f..d548faf 100644 --- a/benchmarks/documentdb-sdk-skills/README.md +++ b/benchmarks/documentdb-sdk-skills/README.md @@ -57,16 +57,18 @@ miss. | 3 | Data shape & indexing | `check_documentdb.py` | ★★ structural | | 4 | API conformance | `check_api.py` | ★★ | | 5 | Security hygiene | `check_skills.py` | ★★ | -| 6 | Client configuration | `check_source.py` | ★ static, last resort | +| 6 | Client configuration | `check_source.py` | ★ static — used only where no runtime signal exists | -### Why this benchmark is stronger than its Cosmos ancestor +### One advantage this benchmark has over its Cosmos ancestor -The Cosmos benchmark's own docs concede that client-side properties "a -single-node local emulator **cannot** prove behaviorally" have to fall back to -static source regex — its weakest grader, and ~520 lines of it. +The Cosmos benchmark notes that client-side properties "a single-node local +emulator **cannot** prove behaviorally" are checked with static source regex +instead — ~520 lines of it. Given their platform that is the right call; a +static check beats no coverage. It is simply easier to satisfy by accident than +a runtime observation is. -DocumentDB gives us a way out. It is MongoDB-compatible on the surface and -**PostgreSQL underneath**, and the verifier talks to *both*. So instead of +DocumentDB lets us avoid the trade-off. It is MongoDB-compatible on the surface +and **PostgreSQL underneath**, and the verifier talks to *both*. So instead of grepping for `create_index(` and hoping: - `explain()` through the Mongo API → was the query planned as an index scan, diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/check_engine.py b/benchmarks/documentdb-sdk-skills/shared/verifier/check_engine.py index f7dd925..6d8df44 100644 --- a/benchmarks/documentdb-sdk-skills/shared/verifier/check_engine.py +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/check_engine.py @@ -2,14 +2,16 @@ WHY THIS FILE IS THE DIFFERENTIATOR ----------------------------------- -The Cosmos benchmark's own docs concede that client-side properties "a -single-node local emulator CANNOT prove behaviorally" have to drop down to -static source-code regex — the weakest grader they use. - -DocumentDB gives us a way out. It is MongoDB-compatible on the surface and -PostgreSQL underneath, and the verifier can talk to BOTH. So instead of -grepping for `create_index(` and hoping, we ask the engine what actually -happened: +The Cosmos benchmark notes that client-side properties "a single-node local +emulator CANNOT prove behaviorally" have to be checked with static source-code +regex instead. That is the right call given their platform — a static check is +better than no coverage — but it is inherently easier to satisfy accidentally +than a runtime observation. + +DocumentDB lets us avoid the trade-off. It is MongoDB-compatible on the +surface and PostgreSQL underneath, and the verifier can talk to BOTH. So +instead of grepping for `create_index(` and hoping, we ask the engine what +actually happened: * `explain()` through the Mongo API -> was the query planned as an index scan, and how many documents did it read per document returned? diff --git a/docs/TESTING.md b/docs/TESTING.md index 86fea8e..c950191 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -284,8 +284,15 @@ runs can be compared across tasks: ## The grading ladder -Pick the **strongest** criterion the scenario allows. An LLM judge is the last -resort, not the default. +Pick the **strongest criterion the scenario allows** — strongest meaning most +reproducible and hardest to satisfy accidentally. + +This is about fit, not about avoiding judges. LLM-as-a-judge is a normal grader +and the right tool for qualities that are genuinely matters of degree (is the +explanation clear? is the guidance well-targeted?), which is why Loop B uses +one. It just cannot serve a scenario whose purpose is to prove **repeatability**, +because the same input can score differently across runs. Where an outcome is +measurable in the system, measure it; where it is a judgement, judge it. | Rung | Criterion | Used by | |---|---|---| @@ -295,7 +302,7 @@ resort, not the default. | 4 | Semantic equivalence | query-generation scenarios | | 5 | Behavioural (does it run and do the right thing?) | future app-level evals | | 6 | Contract conformance | `scenarios/json-contract` | -| 7 | LLM-as-a-judge | only irreducibly subjective items | +| 7 | LLM-as-a-judge | qualitative dimensions — blinded, cross-model, reported next to an objective score | Improvement metrics are gameable, so they are **paired with regression guards** — `remediation-effect` runs `index-redundancy-finder.sh` to make sure "just index diff --git a/evals/README.md b/evals/README.md index b6749f1..fd4fb29 100644 --- a/evals/README.md +++ b/evals/README.md @@ -90,7 +90,13 @@ would have them — the prompt **never tells the agent to use them**. This measu the skill's **organic** effect rather than a hinted best case. (Protocol borrowed from the MSBench `cosmos-sdk-skills` runner.) -## Grading policy — judge is the last resort +## Grading policy — match the grader to the claim + +LLM-as-a-judge is a legitimate and widely used grader, and Loop B relies on one +for the qualitative dimensions no assertion can capture. The ordering below is +about **fit**: prefer a criterion that is reproducible and hard to satisfy by +accident, and reach for a judge when the thing being graded is genuinely a +matter of degree rather than a fact about the system. Prefer, in order: @@ -100,7 +106,7 @@ Prefer, in order: 4. semantic equivalence vs a golden output 5. **behavioural assertion** → `skill-invocation`, `tool-call`, `metric-threshold` ← *Phase 1 lives here* 6. contract conformance -7. LLM-as-a-judge → only for irreducibly subjective quality, blinded, cross-model panel, and always reported next to an objective score +7. LLM-as-a-judge → for qualitative dimensions (clarity, targeting, tone); blinded, cross-model panel, and always reported next to an objective score so its reliability is visible A useful trick: convert 7 → 2/3 by **constraining the ask**. "Explain how to speed this up" is judge-only prose; "emit the exact `createIndex(...)` you diff --git a/testing/scenarios/evals-config/tests/test_evals_config.py b/testing/scenarios/evals-config/tests/test_evals_config.py index 94f040a..f0d58ef 100644 --- a/testing/scenarios/evals-config/tests/test_evals_config.py +++ b/testing/scenarios/evals-config/tests/test_evals_config.py @@ -189,17 +189,25 @@ def test_every_stimulus_has_a_grader(spec): def test_graders_are_objective(spec): - """Grading-ladder policy: prefer objective graders; an LLM judge is the last - resort. Adding one should be a deliberate, reviewed change — hence this - test fails until the allowlist below is updated on purpose. + """Phase 1 stimuli should be graded reproducibly. + + Not a prohibition on LLM judges — they are a normal grader and Loop B is + expected to use one for qualitative dimensions. But the Phase 1 stimuli are + all skill-TRIGGERING checks, which have a definite right answer, so a + reproducible grader is the correct fit and a judge here would add cost and + variance for nothing. + + The allowlist is a speed bump, not a wall: adding a judge should be a + deliberate, reviewed change that records which stimulus needs it and why. """ - objective = {"skill-invocation", "run-command", "file-exists", "regex"} - subjective = [] + reproducible = {"skill-invocation", "run-command", "file-exists", "regex"} + others = [] for stim in spec["stimuli"]: for g in stim["graders"]: - if g["type"] not in objective: - subjective.append((stim["name"], g["type"])) - assert not subjective, ( - f"non-objective graders in use: {subjective}. If this is intentional, " - f"add the type to the allowlist in this test and record why." + if g["type"] not in reproducible: + others.append((stim["name"], g["type"])) + assert not others, ( + f"graders outside the reproducible set are in use: {others}. If a " + f"judge is genuinely the right fit for that stimulus, add its type to " + f"the allowlist in this test and note why." ) diff --git a/testing/scenarios/remediation-effect/SCENARIO.md b/testing/scenarios/remediation-effect/SCENARIO.md index e4811db..386f17e 100644 --- a/testing/scenarios/remediation-effect/SCENARIO.md +++ b/testing/scenarios/remediation-effect/SCENARIO.md @@ -1,18 +1,33 @@ # Scenario: remediation effect (before/after grading) **Loop:** A (deterministic) -**Grading rung:** the strongest one available — *measured before/after delta*, -not an LLM judge. +**Grading rung:** *measured before/after delta* — chosen because this scenario's +job is to prove determinism, which a judge cannot do. ## The idea -Most "did the skill help?" questions get answered by asking a model to judge the -answer. That is the weakest grader available: subjective, expensive, -non-deterministic, and easily fooled by output that reads well but is wrong. +LLM-as-a-judge is a normal and useful grader, and this kit uses it in Loop B for +things that are genuinely a matter of degree — is the explanation clear, is the +guidance well-targeted. What it cannot give us is **repeatability**: the same +input can score differently across runs, so a judge is the wrong instrument for +a suite whose whole purpose is to show that the diagnostic scripts return a +stable, reproducible answer. -For diagnostics we can do far better, because **the database is the oracle**. -This scenario applies the kit's advice and measures whether the database -actually improved. +For diagnostics we happen to have a stronger option available, so we use it: +**the database is the oracle.** This scenario applies the kit's advice and +measures whether the database actually improved — a number, not an opinion. + +The rule of thumb across the kit is to pick the strongest criterion the scenario +*allows*, not to avoid judges on principle: + +| Situation | Grader | +|---|---| +| The outcome is measurable in the system (plans, counters, result sets) | measure it — this scenario | +| The outcome is structural (an index exists, a key order) | assert it | +| The outcome is irreducibly qualitative (was the advice well explained?) | LLM-as-a-judge, blinded and cross-model (Loop B) | + +Judges are used where they are the right tool; here a measurement was available, +and a measurement is what a determinism proof needs. ## The chain it closes diff --git a/testing/scenarios/remediation-effect/tests/test_remediation_effect.py b/testing/scenarios/remediation-effect/tests/test_remediation_effect.py index ddeab89..8f2e41b 100644 --- a/testing/scenarios/remediation-effect/tests/test_remediation_effect.py +++ b/testing/scenarios/remediation-effect/tests/test_remediation_effect.py @@ -1,14 +1,18 @@ -"""Before/after remediation grading — the strongest rung of the grading ladder. +"""Before/after remediation grading — a measured delta rather than a judgement. WHY THIS SCENARIO EXISTS ------------------------ -Most "did the skill help?" questions get answered by asking a model to judge the -answer. That is the weakest possible grader: it is subjective, expensive, -non-deterministic, and vulnerable to output that reads well but is wrong. +"Did the skill help?" is often answered by asking a model to judge the answer, +and that is a reasonable grader for qualities that are matters of degree. This +kit uses one in Loop B for exactly that. -For diagnostics we can do far better, because the database is the oracle. We can -apply the advice and MEASURE whether the database improved. This scenario closes -the whole chain objectively: +It is the wrong instrument HERE, though, for a specific reason: this suite lives +in the deterministic loop, and its job is to show the diagnostic scripts return +a stable, reproducible answer. A judge cannot demonstrate repeatability — the +same input can score differently across runs. + +For diagnostics we have a stronger option available, so we take it: the database +is the oracle. We apply the advice and MEASURE whether the database improved. 1. the tool detects a real defect (else "improvement" is meaningless) 2. the fix is DERIVED FROM THE TOOL'S OWN OUTPUT, not hardcoded here From 97f7e528eabdf545174317ddadbf57246d63615c Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 19:51:17 +0000 Subject: [PATCH 19/52] Add the effectiveness report generator, and state plainly that no MSBench run exists The report was requested with "the most recent msbench results". There are none: no MSBench run has been executed, no agent has attempted the task, and there is no skills-on vs skills-off data or agent token usage. Producing a report with numbers would have meant inventing them, so docs/REPORT.md leads with that fact and separates what HAS been measured from what has not. WHAT IS REAL IN THE REPORT Grader validation, re-measured rather than recalled (the first draft said 21/31 from memory; the actual figures are below): oracle reward 1, 31/31 empty /app reward 0 working-but-naive reward 0, 20/30, 10 failed category naive oracle api 6/6 6/6 behavior 6/6 6/6 documentdb 0/5 6/6 engine 2/4 4/4 source 1/4 4/4 skills 4/4 4/4 Basic competence is perfect (12/12) while best practices collapse (3/13) - exactly the separation a skills benchmark must produce. It is offered as a prior for what the control arm may look like, explicitly not as a prediction. The token pipeline was proven end-to-end by mounting a real Copilot session store into the task container: custom_metrics.json came back with tokens_available=1 and populated fields. Those token values are labelled a plumbing demonstration, NOT a result - the oracle is a file copy, not an agent. The one generalisable figure is that 91.6% of input was cache reads, which is why the report leads with fresh (uncached) input. report.py turns two `msbench-cli report --output` files into the headline table. Written against the real msbench.report 2.0.0 schema read from the CLI source, not guessed. Design choices that keep the number honest: - It REFUSES to run on one arm. An absolute pass rate cannot distinguish an effective kit from an easy task. - Only `resolved is True` counts as a pass; the string "error" sentinel does not, or the published rate would be silently inflated. - Credits are divided by PASSES, not runs, so failed attempts are charged to the successes they paid for. - Instances with tokens_available=0 are excluded from cost means and reported separately, so a harvest failure cannot drag an average toward zero. - Arms with fewer than 3 instances are flagged as indicative. REPORT.md also documents where every number originates in the code, with commands to inspect each layer. 5 new tests pin the above. Verified: 133 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- benchmarks/documentdb-sdk-skills/README.md | 7 + .../documentdb-sdk-skills/docs/REPORT.md | 238 +++++++++++++++ benchmarks/documentdb-sdk-skills/report.py | 275 ++++++++++++++++++ docs/TESTING.md | 14 + .../tests/test_harvest_metrics.py | 107 +++++++ 5 files changed, 641 insertions(+) create mode 100644 benchmarks/documentdb-sdk-skills/docs/REPORT.md create mode 100644 benchmarks/documentdb-sdk-skills/report.py diff --git a/benchmarks/documentdb-sdk-skills/README.md b/benchmarks/documentdb-sdk-skills/README.md index d548faf..c3ef330 100644 --- a/benchmarks/documentdb-sdk-skills/README.md +++ b/benchmarks/documentdb-sdk-skills/README.md @@ -210,6 +210,13 @@ msbench-cli run --benchmark documentdb-sdk-skills \ --backend local ``` +## Results + +**No MSBench run has been executed yet**, so there is no effectiveness data. +[`docs/REPORT.md`](docs/REPORT.md) records what has been measured (grader +validation), what has not, and how to generate the real report with +[`report.py`](report.py) once both arms have run. + ## Verification status Verified by running, not by inspection: diff --git a/benchmarks/documentdb-sdk-skills/docs/REPORT.md b/benchmarks/documentdb-sdk-skills/docs/REPORT.md new file mode 100644 index 0000000..59c4bb8 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/docs/REPORT.md @@ -0,0 +1,238 @@ +# MSBench effectiveness report + +**Status as of 2026-08-13 (`5659218`): NO MSBENCH RUN HAS BEEN EXECUTED.** + +There is therefore **no effectiveness data yet** — no skills-on vs skills-off +comparison, and no agent token usage. This document records what *has* been +measured, states plainly what has not, and shows how to produce the real report +once a run exists. + +> Any number in a GTM deck must come from the generated report described in +> [§4](#4-how-to-produce-the-real-report), not from this page. + +--- + +## 1. What has been measured + +The benchmark's **grader** has been validated end-to-end on a local build. This +proves the instrument works. It says nothing about whether the kit helps — no +agent has attempted the task. + +| Submission | Reward | Checks | +|---|---|---| +| Oracle (reference implementation) | **1** | 31 / 31 | +| Empty `/app` | **0** | fails at deliverables | +| **Working-but-naive app** | **0** | 20 / 30 — 10 failed | + +*(The naive run grades 30 rather than 31 because the ESR ordering check is +skipped when no compound index exists at all — a skipped check is not counted as +a pass or a failure.)* + +### Why the naive control is the meaningful one + +An empty `/app` failing only proves the harness notices missing files. The naive +app is **fully functional**: correct HTTP behaviour, correct persistence, +duplicate rejection, right result sets. It passes every API and behavioural +check and still scores 0, failing exactly the best-practice checks: + +Measured per-category result for that submission: + +| Check category | Naive | Oracle | What it covers | +|---|---|---|---| +| `api` | **6/6** | 6/6 | endpoints, status codes, payloads | +| `behavior` | **6/6** | 6/6 | real persistence, round-trip, no duplicates | +| `documentdb` | **0/5** | 6/6 | discriminator, schemaVersion, timestamp, indexing | +| `engine` | **2/4** | 4/4 | query plan, scan amplification | +| `source` | **1/4** | 4/4 | singleton client, pool/timeouts, TLS | +| `skills` | **4/4** | 4/4 | no hardcoded creds, env-driven config | + +That is the discrimination the benchmark exists to provide: **basic competence +is perfect (12/12) while best practices collapse (3/13)**. It separates the two +cleanly, which is exactly what a skills benchmark must do. + +This is also a useful prior for what the **control arm** may look like. It is a +prior, not a prediction — a real agent is not this app, and may do better or +worse. + +### Cost pipeline — proven, but with no agent data + +Token harvesting was verified inside the task container by mounting a real +Copilot CLI session store. `custom_metrics.json` was written with +`tokens_available: 1` and populated fields: + +```json +{ + "tokens_fresh_input": 148301071, + "tokens_cache_read": 1618077206, + "cache_read_share_pct": 91.6, + "ai_credits": 194081.25, + "credits_to_green": 194081.25, + "checks_engine_passed": 4, "checks_engine_total": 4, + "reward": 1, "tokens_available": 1 +} +``` + +⚠️ **Those numbers are a plumbing demonstration, not a result.** They are the +usage of an interactive development session that was mounted in to exercise the +code path. The oracle is a `cp` of a reference implementation, not an agent, so +it consumes no tokens of its own. Real figures require an agent run. + +One number *is* generalisable and worth carrying into the analysis: +**91.6% of input tokens were cache reads.** Skill payloads are sent once and +then served from cache, which is why the report leads with fresh (uncached) +input rather than raw `tokens_input`. + +--- + +## 2. What has NOT been measured + +| Question | Status | +|---|---| +| Does the kit raise the pass rate? | ⬜ **unknown** — no agent run | +| What does a task cost with vs without the kit? | ⬜ **unknown** | +| Which check categories does the kit move? | ⬜ **unknown** | +| `pass@k` reliability across attempts | ⬜ **unknown** | +| Does it hold across models? | ⬜ out of scope here (that is Loop B) | + +Blocking work, in order: + +1. Push both task images to the internal ACR (`harbor-format-curation`). +2. PR `msbench-registration/` into the central repo under + `benchmarks/skillsbench/`. +3. Run **both** arms with `--pass_at_k 5`. + +--- + +## 3. The report this will produce + +Generated by [`report.py`](../report.py). Shape shown here with **illustrative +placeholder values** so reviewers can agree the format before the run: + +``` +| | Control | Treatment | Delta | +|---|---|---|---| +| Instances | 5 | 5 | | +| Resolved | 1 | 4 | +3 | +| **Pass rate** | 20% | 80% | +60% | + +| Metric | Control | Treatment | Delta | +|--------------------|---------|-----------|----------| +| Fresh input tokens | 403,718 | 488,730 | +85,012 | +| AI credits | 832.40 | 965.70 | +133.3 | +| Turns | 9.8 | 6.6 | -3.2 | + +| Derived | Control | Treatment | +| **Credits per passing result** | 4,162.00 | 1,207.12 | + +| Check category | Control | Treatment | Delta | +| `api` | 100% | 100% | +0% | +| `behavior` | 100% | 100% | +0% | +| `documentdb` | 33% | 83% | +50% | +| `engine` | 20% | 80% | +60% | +| `source` | 60% | 90% | +30% | +``` + +**These are placeholders, not findings.** They illustrate the hypothesis the +run will test: the kit costs *more per attempt* but needs *fewer attempts*, so +cost per passing result falls, and the movement concentrates in the +`documentdb` / `engine` / `source` categories while `api` / `behavior` stay flat +in both arms. + +If the real run contradicts that — for instance if `api`/`behavior` also move, +suggesting the control arm is simply worse at the basic task — the benchmark +design needs revisiting, not the write-up. + +--- + +## 4. How to produce the real report + +```bash +export PATH="$HOME/pgmongo/msbench-tools/venv/bin:$PATH" +az login + +# 1. Run BOTH arms. A one-armed number is not publishable. +msbench-cli run --benchmark documentdb-sdk-skills \ + --dataset benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/dataset.jsonl \ + --pass_at_k 5 --runner benchmarks/documentdb-sdk-skills/shared/ces/runner.sh + +msbench-cli run --benchmark documentdb-sdk-skills-noskills \ + --dataset benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/dataset.jsonl \ + --pass_at_k 5 --runner benchmarks/documentdb-sdk-skills/shared/ces/runner.sh + +# 2. Export per-instance data (this is what carries the token metrics) +msbench-cli report --run_id --output treatment.json +msbench-cli report --run_id --output control.json + +# 3. Generate the report +python3 benchmarks/documentdb-sdk-skills/report.py \ + --treatment treatment.json --control control.json \ + --out benchmarks/documentdb-sdk-skills/docs/REPORT.md +``` + +`report.py --json` emits the same summary as machine-readable JSON. + +--- + +## 5. Reading the numbers honestly + +Four traps, each guarded by a test in +`testing/scenarios/benchmark-metrics/`: + +**Never quote `tokens_input` as the cost of the kit.** `cache_read_tokens` is a +*subset* of it, and ~92% of input is cache reads. Use `tokens_fresh_input`. + +**A pass rate without a control arm means nothing.** `report.py` refuses to run +on one arm for this reason. 80% could be an excellent kit or an easy task. + +**Cost per *passing result*, not per run.** Failed attempts are part of the +price of a success, so credits are divided by passes. A treatment arm that costs +more per attempt but passes far more often is cheaper where it counts. + +**`tokens_available: 0` means "not measured", never "free".** Instances missing +token data are excluded from cost means and reported separately, so a +harvesting failure cannot quietly drag an average down. + +Also: agent runs are non-deterministic. `report.py` flags any arm with fewer +than 3 instances as indicative rather than measured, and `--pass_at_k 5` exists +so a single lucky or unlucky attempt does not become the headline. + +--- + +## 6. Where each number comes from in the code + +| Number | Written by | Read by | +|---|---|---| +| `reward` (0/1) | `shared/verifier/runner.sh` → `/logs/verifier/reward.txt` | MSBench (Harbor contract) | +| per-check results | `pytest --ctrf` → `/logs/verifier/ctrf.json` | `harvest_metrics.py` | +| `checks__*` | `harvest_metrics.py: read_ctrf()` | `report.py` | +| token counts, `ai_credits` | `harvest_metrics.py: read_usage()`, from the Copilot CLI session store | `report.py` | +| `custom_metrics.json` | `harvest_metrics.py: main()` → `$OUTPUT_DIR` | `msbench-cli report` | +| `resolved`, `pass_at_k_status` | MSBench | `report.py: summarise()` | +| the tables above | `report.py: render()` | you | + +Inspect any layer directly: + +```bash +# the metric artifact, from a local run +docker run --rm -v "$PWD/tests:/tests:ro" -v "$PWD/solution:/solution:ro" \ + documentdb-orders-api-python:latest \ + bash -c '/solution/solve.sh >/dev/null && /tests/test.sh >/dev/null 2>&1; \ + cat /output/custom_metrics.json' + +# the same code, against your own Copilot session store +python3 benchmarks/documentdb-sdk-skills/shared/verifier/harvest_metrics.py \ + --store ~/.copilot/session-store.db --output-dir /tmp/out && cat /tmp/out/custom_metrics.json + +# the Loop B equivalent (same cost definitions, pinned equal by test) +python3 evals/harness/token_usage.py sessions --limit 10 + +# the guards on all of the above +cd testing && pytest scenarios/benchmark-metrics scenarios/benchmark-config +``` + +The two cost implementations (`harvest_metrics.py` for Loop C, +`evals/harness/token_usage.py` for Loop B) cannot share an import — the +harvester must run inside a minimal task container — so +`test_harvester_agrees_with_the_loop_b_cost_module` pins them to identical +output instead. If they ever diverge, that test fails rather than the two +publishing different costs for the same run. diff --git a/benchmarks/documentdb-sdk-skills/report.py b/benchmarks/documentdb-sdk-skills/report.py new file mode 100644 index 0000000..08dc579 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/report.py @@ -0,0 +1,275 @@ +#!/usr/bin/env python3 +"""Build the skills-effectiveness report from MSBench run output. + +WHAT THIS PRODUCES +------------------ +The headline table for the GTM story: does having the DocumentDB agent kit +installed change what an agent builds, and what does it cost? + + msbench-cli report --run_id --output treatment.json + msbench-cli report --run_id --output control.json + python3 report.py --treatment treatment.json --control control.json + +WHY BOTH ARMS ARE REQUIRED +-------------------------- +This script REFUSES to emit a report from one arm. An absolute pass rate is +uninterpretable: "80% resolved" could mean the kit is excellent or that the task +is easy, and there is no way to tell them apart without a control. The only +publishable figure is the delta between `documentdb-sdk-skills` (kit installed, +never mentioned in the prompt) and `documentdb-sdk-skills-noskills` (identical +task, no skills). + +INPUT SCHEMA +------------ +`msbench-cli report --output .json` emits `{"schema": {"id": +"msbench.report", "version": "2.x"}}` containing, among others: + + resolved {benchmark: {instance: bool | "error"}} + resolved_rate overall resolution rate + custom_metrics {benchmark: {instance: {"values": {...}}}} + pass_at_k_status {complete, expected_attempts, ...} + +The per-instance `values` are what `shared/verifier/harvest_metrics.py` wrote +into `custom_metrics.json` — token counts, AI credits, and per-category check +tallies. + +COST FIGURES: READ `tokens_fresh_input`, NOT `tokens_input` +----------------------------------------------------------- +`cache_read_tokens` is a SUBSET of `input_tokens`, and a skill payload is sent +once then served from cache (measured: ~91% of input was cache reads). Quoting +raw input as "the cost of the skills" overstates it by roughly an order of +magnitude, so this report leads with fresh (uncached) input and shows the cache +share next to it. +""" +from __future__ import annotations + +import argparse +import json +import statistics +import sys +from pathlib import Path + +TREATMENT_DEFAULT = "documentdb-sdk-skills" +CONTROL_DEFAULT = "documentdb-sdk-skills-noskills" + +# Metrics summarised per arm: (key, label, formatter) +COST_METRICS = [ + ("tokens_fresh_input", "Fresh input tokens", "{:,.0f}"), + ("tokens_output", "Output tokens", "{:,.0f}"), + ("ai_credits", "AI credits", "{:,.2f}"), + ("agent_turns", "Turns", "{:,.1f}"), + ("cache_read_share_pct", "Cache share %", "{:.1f}"), +] + +CHECK_CATEGORIES = ["api", "behavior", "documentdb", "engine", "source", "skills"] + + +def load(path: Path) -> dict: + if not path.is_file(): + raise SystemExit(f"report not found: {path}") + data = json.loads(path.read_text()) + schema = (data.get("schema") or {}).get("id") + if schema and schema != "msbench.report": + print(f"warning: unexpected schema {schema!r} in {path}", file=sys.stderr) + return data + + +def _instances(report: dict, benchmark: str) -> dict: + resolved = report.get("resolved") or {} + if benchmark in resolved: + return resolved[benchmark] or {} + # Fall back to the only benchmark present, so a single-benchmark report + # still works when the caller did not pin a name. + keys = [k for k, v in resolved.items() if isinstance(v, dict)] + if len(keys) == 1: + return resolved[keys[0]] or {} + raise SystemExit( + f"benchmark {benchmark!r} not in report (found: {sorted(resolved)}). " + f"Pass --treatment-benchmark / --control-benchmark." + ) + + +def _metrics(report: dict, benchmark: str) -> dict: + cm = report.get("custom_metrics") or {} + if benchmark in cm: + return cm[benchmark] + keys = list(cm) + return cm[keys[0]] if len(keys) == 1 else {} + + +def summarise(report: dict, benchmark: str) -> dict: + """Reduce one arm to pass rate + mean cost, per instance and overall.""" + instances = _instances(report, benchmark) + metrics = _metrics(report, benchmark) + + # `resolved` values may be bool or the string "error"; only True counts as a + # pass. Treating "error" as anything else would silently inflate the score. + passed = [k for k, v in instances.items() if v is True] + attempted = list(instances) + + collected: dict[str, list[float]] = {k: [] for k, _, _ in COST_METRICS} + checks: dict[str, list[float]] = {} + missing_tokens = 0 + + for inst in attempted: + values = ((metrics.get(inst) or {}).get("values")) or {} + if not values.get("tokens_available"): + missing_tokens += 1 + for key, _, _ in COST_METRICS: + if key in values: + collected[key].append(float(values[key])) + for cat in CHECK_CATEGORIES: + p, t = values.get(f"checks_{cat}_passed"), values.get(f"checks_{cat}_total") + if p is not None and t: + checks.setdefault(cat, []).append(float(p) / float(t)) + + return { + "benchmark": benchmark, + "instances": len(attempted), + "passed": len(passed), + "pass_rate": (len(passed) / len(attempted)) if attempted else None, + "cost": {k: (statistics.mean(v) if v else None) for k, v in collected.items()}, + "cost_n": {k: len(v) for k, v in collected.items()}, + "check_rates": {c: statistics.mean(v) for c, v in checks.items()}, + "missing_token_data": missing_tokens, + "pass_at_k": report.get("pass_at_k_status") or {}, + } + + +def _pct(x): + return "—" if x is None else f"{x:.0%}" + + +def _delta(t, c, fmt="{:+.1f}"): + if t is None or c is None: + return "—" + return fmt.format(t - c) + + +def render(t: dict, c: dict) -> str: + L = [] + A = L.append + A("# DocumentDB agent kit — MSBench effectiveness report") + A("") + A(f"- **Treatment:** `{t['benchmark']}` — kit installed, discoverable, " + f"never mentioned in the prompt") + A(f"- **Control:** `{c['benchmark']}` — identical task, no skills") + A("") + pak = t.get("pass_at_k") or {} + if pak: + A(f"- **pass@k:** complete={pak.get('complete')} " + f"expected_attempts={pak.get('expected_attempts')}") + A("") + + A("## Headline") + A("") + A("| | Control | Treatment | Delta |") + A("|---|---|---|---|") + A(f"| Instances | {c['instances']} | {t['instances']} | |") + A(f"| Resolved | {c['passed']} | {t['passed']} | " + f"{t['passed'] - c['passed']:+d} |") + A(f"| **Pass rate** | {_pct(c['pass_rate'])} | {_pct(t['pass_rate'])} | " + f"{_delta(t['pass_rate'], c['pass_rate'], '{:+.0%}')} |") + A("") + + A("## Cost") + A("") + A("| Metric | Control | Treatment | Delta |") + A("|---|---|---|---|") + for key, label, fmt in COST_METRICS: + tv, cv = t["cost"].get(key), c["cost"].get(key) + A(f"| {label} | {'—' if cv is None else fmt.format(cv)} | " + f"{'—' if tv is None else fmt.format(tv)} | {_delta(tv, cv, '{:+,.1f}')} |") + A("") + + # Cost per passing result: the ROI figure. Failed attempts are part of the + # price of a success, so total credits are divided by PASSES, not runs. + for arm in (c, t): + credits, n = arm["cost"].get("ai_credits"), arm["instances"] + arm["_cpp"] = (credits * n / arm["passed"]) if (credits and arm["passed"]) else None + c_cpp = "—" if c["_cpp"] is None else f"{c['_cpp']:,.2f}" + t_cpp = "—" if t["_cpp"] is None else f"{t['_cpp']:,.2f}" + A("| Derived | Control | Treatment |") + A("|---|---|---|") + A(f"| **Credits per passing result** | {c_cpp} | {t_cpp} |") + A("") + + if t["check_rates"] or c["check_rates"]: + A("## Where the difference shows up") + A("") + A("Per-category check pass rates. The kit should move the " + "`documentdb`, `engine` and `source` rows — those encode the " + "best-practice rules. `api` and `behavior` measure basic competence " + "and should already be high in both arms.") + A("") + A("| Check category | Control | Treatment | Delta |") + A("|---|---|---|---|") + for cat in CHECK_CATEGORIES: + tv, cv = t["check_rates"].get(cat), c["check_rates"].get(cat) + if tv is None and cv is None: + continue + A(f"| `{cat}` | {_pct(cv)} | {_pct(tv)} | " + f"{_delta(tv, cv, '{:+.0%}')} |") + A("") + + warnings = [] + for arm in (t, c): + if arm["missing_token_data"]: + warnings.append( + f"{arm['missing_token_data']}/{arm['instances']} instances in " + f"`{arm['benchmark']}` had no token data " + f"(`tokens_available=0`) — cost means exclude them rather than " + f"counting them as zero.") + if arm["instances"] < 3: + warnings.append( + f"`{arm['benchmark']}` has only {arm['instances']} instance(s); " + f"agent runs are non-deterministic, so treat this as indicative " + f"rather than a measurement.") + if warnings: + A("## Caveats") + A("") + for w in warnings: + A(f"- ⚠️ {w}") + A("") + + A("---") + A("") + A("**Reading note.** Cost is reported as *fresh* (uncached) input tokens. " + "`cache_read_tokens` is a subset of `tokens_input`, and the skill payload " + "is cached after first use, so raw input overstates the cost of the kit " + "by roughly an order of magnitude.") + return "\n".join(L) + + +def main(argv=None) -> int: + p = argparse.ArgumentParser(description=__doc__.split("\n")[0]) + p.add_argument("--treatment", type=Path, required=True, + help="msbench-cli report JSON for the skills arm") + p.add_argument("--control", type=Path, required=True, + help="msbench-cli report JSON for the no-skills arm") + p.add_argument("--treatment-benchmark", default=TREATMENT_DEFAULT) + p.add_argument("--control-benchmark", default=CONTROL_DEFAULT) + p.add_argument("--out", type=Path) + p.add_argument("--json", action="store_true", + help="emit the summary as JSON instead of markdown") + args = p.parse_args(argv) + + t = summarise(load(args.treatment), args.treatment_benchmark) + c = summarise(load(args.control), args.control_benchmark) + + if args.json: + out = json.dumps({"treatment": t, "control": c}, indent=2, default=str) + else: + out = render(t, c) + + if args.out: + args.out.parent.mkdir(parents=True, exist_ok=True) + args.out.write_text(out + "\n") + print(f"wrote {args.out}", file=sys.stderr) + else: + print(out) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/docs/TESTING.md b/docs/TESTING.md index c950191..ca78a55 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -266,6 +266,20 @@ msbench-cli report --run_id --output report.json # includes token cost > `pip install msbench` installs an **unrelated** package. The real tool is > `msbench-cli` from the private feed. +### The effectiveness report + +```bash +msbench-cli report --run_id --output treatment.json +msbench-cli report --run_id --output control.json +python3 benchmarks/documentdb-sdk-skills/report.py \ + --treatment treatment.json --control control.json +``` + +`report.py` refuses to run on a single arm: an absolute pass rate cannot +distinguish an effective kit from an easy task. Current status and the full +provenance of every number are in +[`benchmarks/documentdb-sdk-skills/docs/REPORT.md`](../benchmarks/documentdb-sdk-skills/docs/REPORT.md). + ### Cost per task The verifier writes MSBench `custom_metrics.json` with per-task token usage, so diff --git a/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py b/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py index 5a57b0e..9a27404 100644 --- a/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py +++ b/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py @@ -292,3 +292,110 @@ def test_reader_does_not_mutate_the_session_store(store): before = store.read_bytes() hm.read_usage(store) assert store.read_bytes() == before + + +# --------------------------------------------------------------------------- +# report generator (Loop C effectiveness report) +# --------------------------------------------------------------------------- +import importlib.util as _ilu +from pathlib import Path as _Path + +# tests/ -> benchmark-metrics/ -> scenarios/ -> testing/ -> repo root +_REPORT_PY = (_Path(__file__).resolve().parents[4] + / "benchmarks" / "documentdb-sdk-skills" / "report.py") + + +def _report_mod(): + spec = _ilu.spec_from_file_location("_report", _REPORT_PY) + mod = _ilu.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +def _msbench_report(benchmark, resolved, values_by_instance): + """Shape mirrors `msbench-cli report --output .json` (msbench.report 2.0).""" + return { + "schema": {"id": "msbench.report", "version": "2.0.0"}, + "resolved": {benchmark: resolved}, + "custom_metrics": { + benchmark: {k: {"values": v} for k, v in values_by_instance.items()} + }, + } + + +def test_report_counts_only_true_as_a_pass(): + """`resolved` values may be bool OR the string "error". Counting "error" as + anything but a failure would silently inflate the published pass rate.""" + m = _report_mod() + rep = _msbench_report( + "documentdb-sdk-skills", + {"a": True, "b": False, "c": "error"}, + {"a": {"tokens_available": 1}, "b": {"tokens_available": 1}, + "c": {"tokens_available": 1}}, + ) + s = m.summarise(rep, "documentdb-sdk-skills") + assert s["instances"] == 3 + assert s["passed"] == 1 + assert s["pass_rate"] == pytest.approx(1 / 3) + + +def test_report_flags_instances_with_no_token_data(): + """A missing cost figure must be visible, not averaged in as zero.""" + m = _report_mod() + rep = _msbench_report( + "documentdb-sdk-skills", + {"a": True, "b": True}, + {"a": {"tokens_available": 1, "ai_credits": 10.0}, + "b": {"tokens_available": 0}}, + ) + s = m.summarise(rep, "documentdb-sdk-skills") + assert s["missing_token_data"] == 1 + # the mean is over the ONE instance that reported, not diluted by a zero + assert s["cost"]["ai_credits"] == pytest.approx(10.0) + assert s["cost_n"]["ai_credits"] == 1 + + +def test_report_requires_both_arms(): + """A one-armed report is uninterpretable: an absolute pass rate cannot + distinguish an effective kit from an easy task.""" + m = _report_mod() + with pytest.raises(SystemExit): + m.main(["--treatment", str(_REPORT_PY)]) # no --control + + +def test_credits_per_passing_result_charges_failures_to_successes(tmp_path): + """5 runs at 100 credits with 1 pass costs 500 per success, not 100.""" + m = _report_mod() + rep = _msbench_report( + "documentdb-sdk-skills", + {f"i{n}": (n == 0) for n in range(5)}, + {f"i{n}": {"tokens_available": 1, "ai_credits": 100.0} for n in range(5)}, + ) + s = m.summarise(rep, "documentdb-sdk-skills") + ctl = m.summarise( + _msbench_report("documentdb-sdk-skills-noskills", + {"i0": True}, + {"i0": {"tokens_available": 1, "ai_credits": 100.0}}), + "documentdb-sdk-skills-noskills") + m.render(s, ctl) # populates _cpp + assert s["_cpp"] == pytest.approx(500.0) + + +def test_report_renders_the_headline_and_category_tables(): + m = _report_mod() + t = m.summarise(_msbench_report( + "documentdb-sdk-skills", {"a": True}, + {"a": {"tokens_available": 1, "ai_credits": 5.0, + "checks_engine_passed": 4, "checks_engine_total": 4}}), + "documentdb-sdk-skills") + c = m.summarise(_msbench_report( + "documentdb-sdk-skills-noskills", {"a": False}, + {"a": {"tokens_available": 1, "ai_credits": 4.0, + "checks_engine_passed": 0, "checks_engine_total": 4}}), + "documentdb-sdk-skills-noskills") + out = m.render(t, c) + assert "Pass rate" in out + assert "`engine`" in out + assert "Credits per passing result" in out + # the reader must be steered away from raw input tokens + assert "fresh" in out.lower() From 8edab2f03bf0a69a1c0490b96704509a7593846b Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 20:01:40 +0000 Subject: [PATCH 20/52] =?UTF-8?q?Define=20"treatment"=20and=20"control"=20?= =?UTF-8?q?=E2=80=94=20the=20terms=20were=20used=20but=20never=20explained?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reports label columns "treatment" and "control" without anywhere saying what the treatment IS. That is experimental-design jargon, and the audience for these numbers is a GTM one; a reader could reasonably assume the treatment was a different model, a different prompt, or a hinted run. It is none of those. The intervention is exactly one thing: THE AGENT KIT'S SKILLS ARE INSTALLED AND DISCOVERABLE. Task, prompt, API contract, model, agent, container and verifier are all identical between arms, which is what makes the difference attributable to the kit rather than to anything else. Implemented in shared/ces/runner.sh: SKILLS_ARM=kit copies the skills into the agent's skills directory, SKILLS_ARM=control installs nothing and deletes the directory defensively so a stale image layer cannot leak skills into the control. For the TOKEN comparison specifically, which is what prompted the question: the control has no skill files, so there is nothing to discover or read - its input is the prompt and its own work. The treatment reads a SKILL.md when it judges one relevant, and those bytes become input tokens. So the fresh-input delta is literally the price of the kit being available and used. Two caveats are now stated where the numbers appear, not buried: - Skills are CACHED (~92% of input was cache reads), so raw tokens_input badly overstates marginal cost; the report leads with fresh input. - "Skills add context, therefore skills cost more" is trivially true and uninteresting. The question is whether that context buys fewer attempts and more successes, which is why the headline is credits per PASSING RESULT. Added REPORT.md section 0 with the arm-by-arm table, made report.py's own output self-explanatory (a reader who skips the doc still sees what the columns mean), and mirrored the definition into the Loop B experiment config and docs/TESTING.md, which use the same terms. Documentation only. Verified: 133 passed; experiment matrix still resolves. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .../documentdb-sdk-skills/docs/REPORT.md | 58 +++++++++++++++++++ benchmarks/documentdb-sdk-skills/report.py | 23 +++++++- docs/TESTING.md | 8 +++ evals/documentdb-skills.experiment.yaml | 16 +++++ 4 files changed, 102 insertions(+), 3 deletions(-) diff --git a/benchmarks/documentdb-sdk-skills/docs/REPORT.md b/benchmarks/documentdb-sdk-skills/docs/REPORT.md index 59c4bb8..90dc3ca 100644 --- a/benchmarks/documentdb-sdk-skills/docs/REPORT.md +++ b/benchmarks/documentdb-sdk-skills/docs/REPORT.md @@ -12,6 +12,64 @@ once a run exists. --- +## 0. What "treatment" and "control" mean here + +Borrowed from experimental design: you change **one** thing and hold everything +else fixed, so any difference in the result is attributable to that one thing. + +**The treatment is: the DocumentDB agent kit's skills are installed and +discoverable.** That is the entire intervention. + +| | Control arm | Treatment arm | +|---|---|---| +| Benchmark | `documentdb-sdk-skills-noskills` | `documentdb-sdk-skills` | +| `~/.copilot/skills/` | **empty** | **17 SKILL.md files** copied in | +| Task, prompt, API contract | identical | identical | +| Model, agent, container, verifier | identical | identical | +| Is the agent told to use the skills? | n/a | **no — never mentioned** | + +Implemented in [`shared/ces/runner.sh`](../shared/ces/runner.sh): `SKILLS_ARM=kit` +copies the skills into the agent's personal skills directory; `SKILLS_ARM=control` +installs nothing and deletes the directory defensively, so a stale image layer +cannot leak skills into the control. + +### What that means for the TOKEN comparison specifically + +The token delta answers: **what does having the kit installed cost?** + +- **Control:** there are no skill files, so there is nothing for the agent to + discover or read. Its input tokens are the task and its own work. +- **Treatment:** the skills are on disk. When the agent judges one relevant it + *reads* the `SKILL.md`, and those bytes become input tokens. + +So `tokens_fresh_input(treatment) − tokens_fresh_input(control)` is, quite +literally, the price of the kit being available and used. + +Two things stop that number from being read naively: + +1. **Skills are cached.** A payload is sent once and then served from cache + (~92% of input was cache reads in practice), so raw `tokens_input` badly + overstates the marginal cost. The report leads with *fresh* (uncached) input. +2. **More tokens per attempt is not the same as more expensive.** "Skills add + context, therefore skills cost more" is trivially true and uninteresting. The + question is whether that extra context buys **fewer attempts and more + successes** — which is why the headline cost figure is *credits per passing + result*, not credits per run. + +The hypothesis being tested is: treatment spends **more per attempt**, needs +**fewer turns**, passes **more often**, and therefore costs **less per success**. +If the run shows otherwise, that is a finding we need, not a result to bury. + +### Why not just run it once and look at the number? + +Because an absolute score is uninterpretable. If the treatment arm resolves 80% +of attempts, that could mean the kit is excellent — or that the task is easy +enough for any competent agent. Only the control tells you which. +[`report.py`](../report.py) refuses to produce a report from a single arm for +this reason. + +--- + ## 1. What has been measured The benchmark's **grader** has been validated end-to-end on a local build. This diff --git a/benchmarks/documentdb-sdk-skills/report.py b/benchmarks/documentdb-sdk-skills/report.py index 08dc579..729a1e1 100644 --- a/benchmarks/documentdb-sdk-skills/report.py +++ b/benchmarks/documentdb-sdk-skills/report.py @@ -151,9 +151,16 @@ def render(t: dict, c: dict) -> str: A = L.append A("# DocumentDB agent kit — MSBench effectiveness report") A("") - A(f"- **Treatment:** `{t['benchmark']}` — kit installed, discoverable, " - f"never mentioned in the prompt") - A(f"- **Control:** `{c['benchmark']}` — identical task, no skills") + A("**The intervention being measured is: the DocumentDB agent kit's skills " + "are installed and discoverable.** Everything else — task, prompt, model, " + "agent, container, verifier — is identical between the two arms, so any " + "difference is attributable to the kit.") + A("") + A(f"- **Treatment** (`{t['benchmark']}`): skills installed in the agent's " + f"skills directory, and **never mentioned in the prompt** — this measures " + f"whether an agent that merely *has* the kit applies it.") + A(f"- **Control** (`{c['benchmark']}`): no skills installed. Nothing for the " + f"agent to discover or read.") A("") pak = t.get("pass_at_k") or {} if pak: @@ -174,6 +181,11 @@ def render(t: dict, c: dict) -> str: A("## Cost") A("") + A("What the kit costs. The control has no skill files to read, so the input " + "delta is literally the price of the kit being available and used. Note " + "that *more tokens per attempt is not the same as more expensive* — see " + "credits per passing result below.") + A("") A("| Metric | Control | Treatment | Delta |") A("|---|---|---|---|") for key, label, fmt in COST_METRICS: @@ -193,6 +205,11 @@ def render(t: dict, c: dict) -> str: A("|---|---|---|") A(f"| **Credits per passing result** | {c_cpp} | {t_cpp} |") A("") + A("*Credits per passing result* is the figure that matters: total spend " + "divided by successes, so failed attempts are charged to the successes " + "they paid for. An arm that costs more per attempt but passes far more " + "often is cheaper where it counts.") + A("") if t["check_rates"] or c["check_rates"]: A("## Where the difference shows up") diff --git a/docs/TESTING.md b/docs/TESTING.md index ca78a55..82cfe61 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -173,6 +173,14 @@ npm run experiment The matrix is **3 models × 2 arms × 5 runs = 30 trials per stimulus**. Start with one cell. +### What "treatment" vs "control" means + +The intervention is **the kit's skills being installed and discoverable** — +nothing else differs. The control has no skill files, so there is nothing for +the agent to read; the treatment has them on disk but is **never told to use +them**. For cost, that makes the input-token delta the literal price of the kit +being available and used. + ### Two rules for reading Loop B results 1. **Only deltas are publishable.** An absolute pass-rate is uninterpretable — diff --git a/evals/documentdb-skills.experiment.yaml b/evals/documentdb-skills.experiment.yaml index 17e9f67..034ddc0 100644 --- a/evals/documentdb-skills.experiment.yaml +++ b/evals/documentdb-skills.experiment.yaml @@ -7,6 +7,22 @@ # Does installing the DocumentDB agent kit change what an agent does, # across models, by more than run-to-run noise — and what does it cost? # +# WHAT "TREATMENT" AND "CONTROL" MEAN +# ----------------------------------- +# The INTERVENTION being measured is: the agent kit's skills are installed and +# discoverable. That is the only thing that differs between the two arms. +# +# control -> environment.skills = [] (nothing to discover or read) +# kit -> environment.skills = [...] (the skills, never mentioned) +# +# Model, prompt, stimuli, graders and run count are held identical, so any +# difference in quality or token cost is attributable to the kit. +# +# For TOKENS specifically: the control has no skill files, so its input is just +# the prompt and its own work. The treatment reads a SKILL.md when it judges one +# relevant, and those bytes become input tokens. The delta is the price of the +# kit being available and used. +# # THE CONTROL ARM IS THE WHOLE POINT # ---------------------------------- # An absolute score is uninterpretable. "90% of stimuli passed" means nothing From 88c3e7d9f0a0528bddc3af07245514abc9037ef7 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 20:55:32 +0000 Subject: [PATCH 21/52] Fix an intermittent determinism failure: settle planner statistics after seeding The determinism suite failed roughly 2 full runs in 7 while passing every time in isolation. That pattern is the worst kind of test failure - it trains people to re-run until green - so it was chased to root cause rather than retried. Two distinct causes, and only one of them was a bug in our code. 1. index_health[].unused reads $indexStats access counters. Those are LIVE, the engine updates them ASYNCHRONOUSLY, and perf-advisor's own probe queries touch the very indexes it is reporting on. Whether run N observes run N-1's probes is therefore a race. Treated as a measurement and allowlisted; index_health[].redundant - a structural fact - is still asserted. 2. The bigger one, and NOT a bug in the scripts at all. The planner chose IXSCAN in one run and COLLSCAN in the next for the identical probe, so `collscans` membership and `collscan_patterns` moved (11 vs 12). perf-advisor was reporting exactly what the engine told it; the engine's answer legitimately changed as PostgreSQL's cost estimates improved. Immediately after a bulk seed the planner works from stale statistics, so a probe on a NON-LEADING index column (status, inside tenant_id_1_status_1) was costed as an index scan once autovacuum had analysed and as a sequential scan before that. Confirmed rather than assumed: on a freshly analysed database the same probe planned as IXSCAN 8 times out of 8. The fix belongs in the harness, not the tool. kit.seed() now runs ANALYZE after seeding, so every scenario measures against settled statistics - the same reason the MSBench verifier ANALYZEs after its bulk filler load. Best-effort: a failed ANALYZE is a missed optimisation, not a test failure. Verified by running the FULL suite 6 consecutive times with no failures, against 2 failures in 7 before the fix. The general lesson, now recorded in SCENARIO.md: when a determinism test flakes, first ask whether the TOOL is unstable or whether the ENVIRONMENT IT OBSERVES is. Only the former is a bug to fix in the tool. Verified: 133 passed x6. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- testing/harness/kit.py | 30 +++++++++++++++++++ testing/scenarios/determinism/SCENARIO.md | 23 ++++++++++++++ .../determinism/expected-findings.yaml | 14 +++++++++ 3 files changed, 67 insertions(+) diff --git a/testing/harness/kit.py b/testing/harness/kit.py index 932a60d..1e42efa 100644 --- a/testing/harness/kit.py +++ b/testing/harness/kit.py @@ -33,6 +33,8 @@ CONTAINER = os.environ.get("DOCDB_CONTAINER", "documentdb-local") PORT = os.environ.get("DOCDB_PORT", "10260") PG_PORT = os.environ.get("DOCDB_PG_PORT", "9712") +PG_USER = os.environ.get("DOCDB_PG_USER", "documentdb") +PG_DB = os.environ.get("DOCDB_PG_DB", "postgres") DB_USER = os.environ.get("DOCDB_USER", "docdbadmin") DB_PASSWORD = os.environ.get("DOCDB_PASSWORD") or os.environ.get("DB_PASSWORD") or "" @@ -101,6 +103,32 @@ def can_authenticate(container=CONTAINER, timeout=60): return False, (out or "").strip()[:300] +def analyze(container=CONTAINER, timeout=180): + """Refresh PostgreSQL planner statistics. + + Called after seeding. Immediately after a bulk insert the planner is working + from stale (or absent) statistics, so its cost estimates — and therefore the + PLAN IT CHOOSES — can differ from the plan it will choose a moment later + once autovacuum has analysed the table. + + That is a real source of test flakiness rather than a theoretical one: the + determinism suite failed roughly 2 runs in 7 because a probe on a + non-leading index column was planned as an index scan in one run and a + collection scan in another, purely because background ANALYZE landed + between them. Settling statistics up front removes the race, and it is what + any plan-sensitive measurement should do. + + Best-effort: a failure here is not a test failure, only a missed + optimisation, so it is reported and swallowed. + """ + p = docker_exec( + ["psql", "-h", "localhost", "-p", PG_PORT, "-U", PG_USER, + "-d", PG_DB, "-q", "-c", "ANALYZE"], + timeout=timeout, container=container, + ) + return p.returncode == 0 + + def seed(db, fixture_path, container=CONTAINER, timeout=300): """Copy a .js fixture into the container and execute it against `db`.""" fixture_path = Path(fixture_path) @@ -114,6 +142,8 @@ def seed(db, fixture_path, container=CONTAINER, timeout=300): out = (p.stdout or "") + (p.stderr or "") if p.returncode != 0: raise RuntimeError(f"fixture seed failed (rc={p.returncode}):\n{out}") + # Settle planner statistics before anything measures a query plan. + analyze(container=container) return out diff --git a/testing/scenarios/determinism/SCENARIO.md b/testing/scenarios/determinism/SCENARIO.md index dadd7d8..a3e2e8e 100644 --- a/testing/scenarios/determinism/SCENARIO.md +++ b/testing/scenarios/determinism/SCENARIO.md @@ -72,6 +72,29 @@ evidence that this suite does something. | 2 | `document-bloat-advisor.sh` | `$sample` for `dominant_fields` → sizes wobbled (`title:13B` vs `title:12B`) | deterministic sampler + tie-broken sort | | 3 | `perf-advisor.sh` | `slow_queries` membership decided by a wall-clock threshold → *which* queries qualified changed with cache warmth | split into `query_timings` (deterministic membership) + `slow_queries` (measurement) | | 4 | `perf-advisor.sh` | COLLSCAN audit built probe values from `findOne()`, i.e. an **arbitrary** document → a numeric probe of `val/2` scanned a different fraction each run, changing `docs_scanned` and sometimes the chosen plan | probe the first document by `_id` | +| 5 | `perf-advisor.sh` | `index_health[].unused` reads `$indexStats` access counters — which the tool's **own probe queries mutate**, and which the engine updates **asynchronously** | treated as a measurement (allowlisted); `redundant` still asserted | + +| 6 | *the harness* | The planner chose **IXSCAN in one run and COLLSCAN in the next** for the same probe, because table statistics were still stale from the bulk seed and background `ANALYZE` landed mid-suite | `kit.seed()` now runs `ANALYZE` after seeding | + +Bugs 5 and 6 are the subtle ones: the suite passed in isolation and in most full +runs, but failed about **2 runs in 7** under load. An intermittently-failing +determinism test is worse than none — it trains people to re-run until green. + +Bug 6 is worth dwelling on because it was **not a bug in the scripts at all**. +`perf-advisor` was behaving correctly and reporting exactly what the engine told +it; the engine's answer legitimately changed as PostgreSQL's cost estimates +improved. Immediately after a bulk insert the planner is working from stale +statistics, so a probe on a non-leading index column was costed as an index scan +in one run and a sequential scan in another. + +The fix belongs in the harness, not the tool: `kit.seed()` now issues `ANALYZE` +so every scenario measures against settled statistics. Verified by running the +full suite **6 consecutive times with no failures**, against 2 failures in 7 +before. + +The general lesson: when a determinism test flakes, the first question is +whether the *tool* is unstable or whether the *environment it observes* is. Only +the first is a bug to fix in the tool. Bug 4 is the interesting one: it was **invisible until bug 3 was fixed**. While the timing noise was being normalised away, it masked a genuine logic defect diff --git a/testing/scenarios/determinism/expected-findings.yaml b/testing/scenarios/determinism/expected-findings.yaml index 1fcb798..f25060c 100644 --- a/testing/scenarios/determinism/expected-findings.yaml +++ b/testing/scenarios/determinism/expected-findings.yaml @@ -55,6 +55,20 @@ volatile_fields: - duration_ms - elapsed_ms - ms + # `index_health[].unused` is derived from `$indexStats` accesses.ops — a LIVE + # counter — and perf-advisor's OWN probe queries touch the very indexes it is + # reporting on. Worse, the counter is updated ASYNCHRONOUSLY, so whether run N + # observes the effect of run N-1's probes is a race. + # + # Symptom that exposed it: the suite passed in isolation and in most full + # runs, but failed roughly 2 runs in 7 under load. A test that fails + # intermittently is worse than no test — it trains people to re-run until + # green — so the measurement is separated from the finding here. + # + # What is still asserted: which indexes EXIST and which are REDUNDANT + # (`index_health[].redundant`) — those are structural facts. Only "has this + # index been read recently", which is a live measurement, is dropped. + - unused # PostgreSQL live counters and ratios - seq_scan - idx_scan From e4949ad7d77657e5620ebf8d1a83562305c1bf00 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Thu, 13 Aug 2026 21:44:44 +0000 Subject: [PATCH 22/52] =?UTF-8?q?Document=20what=20"quality"=20the=20bench?= =?UTF-8?q?mark=20actually=20measures=20=E2=80=94=20and=20the=20gap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Asked what the judge is for the control/treatment quality comparison. Checked rather than recalled, and the answer is worth writing down precisely. THE JUDGE IS NOT A MODEL. The MSBench verifier makes zero model calls; the judge is 30 deterministic pytest checks, and the arm-vs-arm quality signal is the per-category pass rate (checks__passed / _total). That is a real and reproducible quality measure - the naive-vs-oracle run shows it separating 12/12 on basic competence from 3/13 on best practice. But it measures CONFORMANCE TO A RUBRIC WE WROTE, and the claim has to match: supported "agents with the kit installed follow Azure DocumentDB best practices more often" - precisely what the rubric encodes NOT supported "the kit produces better solutions" Three blind spots, now stated in the report rather than left implicit: 1. Ties are invisible - two submissions both at 31/31 may differ a lot in readability, structure or error handling. 2. Unanticipated merit scores zero - the rubric rewards only what it names, so a smarter approach we did not encode earns no credit. 3. The rubric is our opinion frozen into code. If a rule is wrong or incomplete the benchmark measures the wrong thing, confidently, with a reassuring number attached. THE GAP THIS EXPOSED: there is currently NO qualitative assessment anywhere in the kit. Loop A measures determinism, Loop C measures rubric conformance, and Loop B - which I had designated as the place for judged quality - is configured with skill-invocation graders only. It verifies that the right skill FIRES, never whether the guidance was any good. A skill could trigger perfectly and give poor advice and the eval would report a pass. A judge does not belong in the verifier (offline container, no model access, binary reward). It belongs in Loop B, which drives real models and supports panel/prompt graders natively. Not yet configured; both files now say so explicitly so no one quotes a routing number as an answer-quality number. Documentation only. Verified: 133 passed; eval.yaml still lints. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .../documentdb-sdk-skills/docs/REPORT.md | 51 +++++++++++++++++++ evals/documentdb-skills/eval.yaml | 13 +++++ 2 files changed, 64 insertions(+) diff --git a/benchmarks/documentdb-sdk-skills/docs/REPORT.md b/benchmarks/documentdb-sdk-skills/docs/REPORT.md index 90dc3ca..92d3e06 100644 --- a/benchmarks/documentdb-sdk-skills/docs/REPORT.md +++ b/benchmarks/documentdb-sdk-skills/docs/REPORT.md @@ -202,6 +202,57 @@ design needs revisiting, not the write-up. --- +## 3b. What "quality" means here — and what the judge is + +**There is no LLM judge in this benchmark.** The verifier makes zero model +calls. The judge is **30 deterministic pytest checks**, and the quality +comparison between arms is the per-category pass rate +(`checks__passed / _total`). + +| Module | Checks | What it judges | +|---|---|---| +| `check_api` | 6 | endpoints, status codes, payload shapes | +| `check_behavior` | 6 | real persistence, round-trip, no duplicates | +| `check_documentdb` | 6 | discriminator, schemaVersion, timestamp, indexing, ESR | +| `check_engine` | 4 | query plan, scan amplification, index actually used | +| `check_source` | 4 | singleton client, pool/timeouts, TLS | +| `check_skills` | 4 | no hardcoded credentials, env-driven config | + +That is a real quality signal and a reproducible one. But it measures a +specific thing, and the claim must match it. + +### What this can and cannot support + +✅ **Can support:** *"agents with the kit installed follow Azure DocumentDB +best practices more often"* — that is precisely what the rubric encodes, and +the per-category table shows where. + +❌ **Cannot support (without qualification):** *"the kit produces better +solutions."* Three blind spots: + +1. **Ties are invisible.** Two submissions both scoring 31/31 may differ a lot + in readability, structure or error handling. The rubric cannot separate them. +2. **Unanticipated merit scores zero.** The rubric rewards only what it names. + An agent that solves the problem in a smarter way we did not encode gets no + credit for it. +3. **The rubric is our opinion, frozen into code.** If a rule is wrong or + incomplete, the benchmark measures the wrong thing — and does so + confidently, with a reassuring number attached. + +### Where a judge would belong + +Not here. The verifier runs offline in a task container with no model access, +and the reward is binary, so a judge would fit badly. Qualitative assessment +belongs in **Loop B**, which drives real models and has native support for +`panel` / prompt graders. + +**Status: not yet configured.** `evals/documentdb-skills/eval.yaml` currently +uses only `skill-invocation` graders — it verifies the right skill *fires*, not +whether the guidance it produced was any good. Until that gap is closed, no +number produced anywhere in this kit speaks to guidance quality. + +--- + ## 4. How to produce the real report ```bash diff --git a/evals/documentdb-skills/eval.yaml b/evals/documentdb-skills/eval.yaml index ba8f74d..65ad5f1 100644 --- a/evals/documentdb-skills/eval.yaml +++ b/evals/documentdb-skills/eval.yaml @@ -3,6 +3,19 @@ # Phase 1 scope: does the RIGHT skill activate for a given phrasing, and — just # as important — does NO DocumentDB skill activate for an unrelated question? # +# ⚠️ SCOPE LIMIT — READ THIS BEFORE QUOTING ANY RESULT FROM THIS EVAL. +# Every grader here is `skill-invocation`: it checks that a skill FIRED, never +# that the guidance it produced was any GOOD. Nothing in this file, and nothing +# in the MSBench benchmark (which grades rubric conformance with deterministic +# checks), assesses the QUALITY of the advice. +# +# That is a real gap, not an oversight to be glossed: a skill could trigger +# perfectly and give poor advice, and this eval would report a pass. Closing it +# means adding a `panel` / prompt grader with a written rubric, blinded to the +# arm and judged by a model not under test — see evals/README.md §Grading +# policy. Until then, claims must be limited to routing and to best-practice +# conformance, not to "better answers". +# # Why start here (see the grading ladder in the plan): # * it is the cheapest useful signal (runs on the free `mock` executor), # * it is graded OBJECTIVELY (`skill-invocation` = binary), no LLM judge, From b0560aa2d281f2e08234230b29b463476f7fe819 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Fri, 14 Aug 2026 04:30:31 +0000 Subject: [PATCH 23/52] Add the guidance-quality judge: the kit's one qualitative measurement Closes the gap identified last turn. Until now every measurement in the kit was a conformance check - Loop A that scripts are stable, Loop B that the right skill FIRES, Loop C that produced code satisfies 30 fixed rules. None could tell good advice from bad. A skill could trigger perfectly, give poor guidance, and report a pass. evals/documentdb-quality/quality-eval.yaml scores the guidance itself with an LLM judge panel. This is the one place in the kit where a judge is the right instrument, because "was this explanation clear and correct" is genuinely a matter of degree rather than a fact about the system. A judge is easy to do badly, and a badly-built one produces confident numbers that are wrong. Five guards, every one enforced by a test so it cannot quietly regress: 3 judges, 3 vendors models favour their own output; no model may be the sole judge of a run it could have produced median, not mean one miscalibrated judge must not swing the verdict blinded prompt a judge told which arm it is grading will find reasons to agree; the prompt also may not leak experiment vocabulary anchored criteria 5 named dimensions with written descriptions and weights, plus a per-stimulus rubric. "Rate 1-5" is not a measurement. correctness gates technical_correctness and documentdb_specificity are `required`, and correctness outweighs every presentational criterion, so a fluent, confident, WRONG answer fails however well it reads quality.experiment.yaml runs it treatment vs control. That control arm matters more here than anywhere else: frontier models already answer MongoDB questions well, so a treatment-only score of 4.2/5 proves nothing at all. Only the delta against an unskilled agent supports "the kit makes the guidance better". If the delta turns out small, that is a real finding - it would mean the kit's value is in DocumentDB-specific correctness (which the documentdb_specificity gate isolates) rather than in general answer quality. Prompts deliberately do not name the solution - no "compound index", "singleton", "TTL index" - or the judge would be grading instruction-following and both arms would score alike. Enforced by test. Verified: both specs lint; both experiment matrices resolve; the panel executes end-to-end on the mock executor. Three mutations confirm the guards bite - collapsing the panel to one vendor, un-gating correctness, and removing the blinding instruction each fail their test. Noted in the README that the mock executor is near-useless for THIS eval specifically: it invokes no skills and cannot call judge models, so everything scores 0 with zero tokens. It validates plumbing only. Not yet run against real models. 10 new tests; 143 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .../documentdb-sdk-skills/docs/REPORT.md | 20 +- docs/TESTING.md | 18 +- evals/README.md | 37 +++ evals/documentdb-quality/quality-eval.yaml | 249 ++++++++++++++++++ evals/documentdb-skills/eval.yaml | 11 +- evals/package.json | 8 +- evals/quality.experiment.yaml | 60 +++++ .../evals-config/tests/test_evals_config.py | 165 ++++++++++++ 8 files changed, 554 insertions(+), 14 deletions(-) create mode 100644 evals/documentdb-quality/quality-eval.yaml create mode 100644 evals/quality.experiment.yaml diff --git a/benchmarks/documentdb-sdk-skills/docs/REPORT.md b/benchmarks/documentdb-sdk-skills/docs/REPORT.md index 92d3e06..2aaa969 100644 --- a/benchmarks/documentdb-sdk-skills/docs/REPORT.md +++ b/benchmarks/documentdb-sdk-skills/docs/REPORT.md @@ -246,10 +246,22 @@ and the reward is binary, so a judge would fit badly. Qualitative assessment belongs in **Loop B**, which drives real models and has native support for `panel` / prompt graders. -**Status: not yet configured.** `evals/documentdb-skills/eval.yaml` currently -uses only `skill-invocation` graders — it verifies the right skill *fires*, not -whether the guidance it produced was any good. Until that gap is closed, no -number produced anywhere in this kit speaks to guidance quality. +**Status: built** — [`evals/documentdb-quality/quality-eval.yaml`](../../../evals/documentdb-quality/quality-eval.yaml) +scores guidance quality with a blinded three-vendor judge panel against an +anchored rubric, treatment vs control, with correctness as a hard gate. Not yet +executed against real models. + +So the division of labour across the kit is now: + +| Claim | Evidence | Where | +|---|---|---| +| "the scripts are reproducible" | byte-identical output | Loop A | +| "the right skill fires" | `skill-invocation`, binary | Loop B, `eval.yaml` | +| **"the guidance is better"** | **blinded judge panel** | **Loop B, `quality-eval.yaml`** | +| "the produced code follows best practice" | 30 deterministic checks | Loop C, this benchmark | + +This benchmark still cannot speak to guidance quality — that is not its job, and +the quality eval now covers it. --- diff --git a/docs/TESTING.md b/docs/TESTING.md index 82cfe61..a90ee4a 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -145,12 +145,18 @@ Runs on [Vally](https://microsoft.github.io/vally/). **Everything below the cd evals && npm ci ``` +Loop B has **two** evals: `documentdb-skills/eval.yaml` asks whether the right +skill fires (binary, reproducible), and `documentdb-quality/quality-eval.yaml` +asks whether the guidance is any good (blinded cross-model judge panel, not +reproducible by construction). + ### Free — always do these first ```bash -npm run lint # validate the eval spec -npm run experiment:plan # resolve the 3x2 matrix, print the plan, spend nothing -npm run eval:mock # execute against the mock executor +npm run lint:all # validate both eval specs +npm run experiment:plan # resolve the 3x2 triggering matrix +npm run experiment:quality:plan # resolve the quality treatment-vs-control matrix +npm run eval:mock # triggering eval against the mock executor ``` > ⚠️ **The mock executor invokes no skills** (`Skills used 0`). Positive-trigger @@ -168,8 +174,14 @@ npx vally experiment run documentdb-skills.experiment.yaml \ # The full matrix: 3 models x {kit, control} x 5 runs npm run experiment + +# Guidance QUALITY, treatment vs control, judged by a blinded 3-vendor panel +npm run experiment:quality ``` +The quality experiment is 2 arms x 4 stimuli x 3 runs = 24 agent runs, each +graded by 3 judges = 72 judge calls. Run a single cell first. + The matrix is **3 models × 2 arms × 5 runs = 30 trials per stimulus**. Start with one cell. diff --git a/evals/README.md b/evals/README.md index fd4fb29..d2eb395 100644 --- a/evals/README.md +++ b/evals/README.md @@ -90,6 +90,43 @@ would have them — the prompt **never tells the agent to use them**. This measu the skill's **organic** effect rather than a hinted best case. (Protocol borrowed from the MSBench `cosmos-sdk-skills` runner.) +## The two evals + +| Eval | Question | Grader | Reproducible? | +|---|---|---|---| +| [`documentdb-skills/eval.yaml`](documentdb-skills/eval.yaml) | does the **right skill fire**? | `skill-invocation` (binary) | yes | +| [`documentdb-quality/quality-eval.yaml`](documentdb-quality/quality-eval.yaml) | is the **guidance any good**? | blinded cross-model `panel` | **no, by construction** | + +The first is cheap and exact but cannot tell good advice from bad — a skill can +fire perfectly and still give poor guidance. The second closes that gap and is +the one place in the kit where an LLM judge is the right instrument, because +"was this explanation clear and correct" is genuinely a matter of degree. + +### How the judge is kept honest + +Five guards, each enforced by a test in +`testing/scenarios/evals-config/` so they cannot quietly regress: + +| Guard | Why | +|---|---| +| **3 judges, 3 vendors** | models favour their own output; no model may be the sole judge of a run it could have produced | +| **median, not mean** | one miscalibrated judge must not swing the verdict | +| **blinded prompt** | a judge told which arm it is grading will find reasons to agree | +| **anchored criteria + per-stimulus rubric** | "rate 1–5" is not a measurement; both runs must be scored against the same yardstick | +| **correctness is a `required` gate** | a fluent, confident, WRONG answer must fail however well it reads | + +`technical_correctness` also carries more weight than any presentational +criterion, so style can never outvote accuracy. + +> ⚠️ **The mock executor is close to useless for this eval.** It invokes no +> skills *and* cannot call the judge models, so every stimulus scores 0 with +> zero tokens. `npm run eval:quality:mock` validates that the config loads and +> the stimuli execute — nothing about quality. Never quote a mock score. + +> ⚠️ **Always publish the quality score next to the objective ones.** It is not +> reproducible run-to-run. If the judge and the objective measures disagree +> systematically, trust the objective ones and fix the rubric. + ## Grading policy — match the grader to the claim LLM-as-a-judge is a legitimate and widely used grader, and Loop B relies on one diff --git a/evals/documentdb-quality/quality-eval.yaml b/evals/documentdb-quality/quality-eval.yaml new file mode 100644 index 0000000..3a7ab71 --- /dev/null +++ b/evals/documentdb-quality/quality-eval.yaml @@ -0,0 +1,249 @@ +# quality-eval.yaml — Loop B: is the GUIDANCE any good? +# +# WHY THIS FILE EXISTS +# -------------------- +# Everything else the kit measures is conformance: +# +# Loop A (testing/) do the scripts return a stable answer? +# Loop B (eval.yaml) does the RIGHT SKILL FIRE for a given phrasing? +# Loop C (benchmarks/) does the produced code satisfy 30 fixed checks? +# +# None of those can tell you whether the advice was actually GOOD. A skill can +# trigger perfectly and give poor guidance; code can satisfy every rule in our +# rubric and still be the wrong answer to the user's question. This eval closes +# that gap, and it is the ONE place in the kit where an LLM judge is the right +# instrument — because "was this explanation clear and correct" is genuinely a +# matter of degree, not a fact about the system. +# +# HOW IT IS KEPT HONEST +# --------------------- +# A judge is easy to do badly. Five guards, all load-bearing: +# +# 1. ANCHORED CRITERIA, not vibes. Five named dimensions with written +# descriptions and explicit weights, so "4/5" means something specific and +# two runs are scored against the same yardstick. +# 2. CROSS-MODEL PANEL. Three judges from three vendors. Models favour their +# own output (self-preference bias), so no model may be the sole judge of a +# run it could have produced. +# 3. MEDIAN, not mean. One miscalibrated judge cannot drag the verdict; a +# mean would let it. +# 4. BLINDING. The judges are told nothing about arms, skills, or which +# condition produced the answer. If a judge knows which answer is +# "supposed" to be better, it will find reasons. +# 5. CORRECTNESS GATES. technical_correctness and documentdb_specificity are +# `required`, so a fluent, confident, WRONG answer fails no matter how well +# it scores on clarity. Prose quality must never outvote accuracy. +# +# READING THE RESULT +# ------------------ +# This score is NOT reproducible run-to-run, by construction. Always publish it +# NEXT TO the objective numbers (skill-triggering from eval.yaml, rubric +# conformance from the MSBench benchmark), never instead of them. If the judge +# and the objective measures disagree systematically, trust the objective ones +# and fix the rubric. +# +# Run: +# npm run lint:quality +# npm run eval:quality # costs AI credits — 3 judges per stimulus + +name: documentdb-guidance-quality +description: >- + Quality of the guidance an agent gives for Azure DocumentDB questions, scored + by a blinded cross-model panel against an anchored rubric. Complements the + skill-triggering eval (does the right skill fire) and the MSBench benchmark + (does the produced code conform), neither of which can assess whether the + advice itself was good. +type: capability + +defaults: + timeout: 5m + # Agent output varies run to run and so does a judge's reading of it. One + # sample is an anecdote; the median of 3 is a weak but honest signal. + runs: 3 + +environment: + # Same organic-discovery protocol as the triggering eval: the skills are + # discoverable exactly as a user would have them installed, and no prompt + # mentions them. The experiment file swaps this list for [] in the control + # arm, which is the only difference between arms. + skills: + - ../../skills/query-optimizer + - ../../skills/query-optimization + - ../../skills/indexing + - ../../skills/connection + - ../../skills/data-modeling + - ../../skills/vector-search + +# --------------------------------------------------------------------------- +# The panel, defined once and reused by every stimulus via a YAML anchor. +# --------------------------------------------------------------------------- +x-panel: &quality_panel + type: panel + config: + # Three vendors. A model must never be the only judge of output it could + # plausibly have produced itself. + models: + - model: claude-opus-5 + reasoning_effort: medium + - model: gpt-5.6-sol + reasoning_effort: medium + - model: gemini-3.1-pro-preview + reasoning_effort: medium + + # Median: robust to a single miscalibrated or malfunctioning judge. + aggregation: median + scoring: scale_1_5 + + # 0.6 on the normalised [0,1] scale is 4/5 — "good, with minor gaps". + # Deliberately not 3/5: a merely adequate answer to a DocumentDB question + # is not what having the kit installed is supposed to produce. + threshold: 0.6 + overall_threshold: 0.6 + + evidence: [trajectory] + + prompt: | + You are grading the quality of technical guidance about Azure DocumentDB + (a MongoDB-compatible database built on PostgreSQL). + + BLINDING — read carefully. + You are NOT told, and must not try to infer, how this answer was + produced, what tooling or documentation the responder had available, or + how any other answer scored. Judge only the text in front of you. + Speculating about the source is grounds for an unreliable score. + + HOW TO SCORE + * Correctness outranks polish. A confident, fluent answer that would + mislead a user is a LOW score, however well written. + * Reward specificity over generic advice. "Add an index" is weak; naming + the fields, the order, and why, is strong. + * Penalise plausible-but-wrong details more harshly than omissions. A + user can look up what is missing; they cannot easily detect what is + subtly incorrect. + * Judge what is written, not what you assume was meant. + * Do not reward length. A short, correct, complete answer scores higher + than a long one padded with caveats. + + DocumentDB is MongoDB-compatible but NOT MongoDB. Advice that is only + true of community MongoDB, or that recommends unsupported features, is a + correctness failure, not a nitpick. + + criteria: + # --- gates: an answer that fails either of these fails overall --- + - name: technical_correctness + description: >- + Is every technical claim accurate for Azure DocumentDB? Index + behaviour, query semantics, driver behaviour, limits. Any statement + that would mislead a practitioner is a failure here, regardless of + how well the rest reads. + weight: 3 + required: true + + - name: documentdb_specificity + description: >- + Is the guidance specific to Azure DocumentDB rather than generic + MongoDB advice that happens to be adjacent? Correctly reflects where + DocumentDB differs (its PostgreSQL engine, cosmosSearch vector + indexes, createSearchIndexes, cluster tiers, Entra auth). + Recommending a MongoDB feature DocumentDB does not support fails + this criterion. + weight: 2 + required: true + + # --- quality dimensions: weighted, but not gates --- + - name: actionability + description: >- + Could a competent engineer act on this immediately? Concrete + commands, index definitions or configuration, as opposed to + describing what they ought to do in the abstract. + weight: 2 + required: false + + - name: diagnostic_reasoning + description: >- + Does it explain HOW to establish the cause rather than jumping to a + fix? For performance questions specifically, does it reach for + explain() or measurement before prescribing an index? + weight: 2 + required: false + + - name: completeness + description: >- + Does it cover the trade-offs a practitioner would hit next — write + cost of an index, memory, cardinality, when the advice does NOT + apply? Missing caveats that would bite in production lose marks here. + weight: 1 + required: false + +stimuli: + # ------------------------------------------------------------------------- + # Each prompt is a real question a user would ask, phrased WITHOUT naming the + # solution — otherwise the judge grades instruction-following, not guidance. + # ------------------------------------------------------------------------- + - name: slow-query-guidance-quality + tags: { kind: quality, area: query-perf } + prompt: | + This query against my Azure DocumentDB collection has got slower as the + collection grew to a few million documents: + + db.orders.find({ status: "shipped", customer_id: "CUST_004087" }) + .sort({ created_at: -1 }) + + Why is it slow, and what should I do about it? + rubric: + - Establishes the cause with explain() or measurement before prescribing a fix + - Recommends a compound index and gets the key ORDER right (equality before sort) + - Explains why that order matters rather than only asserting it + - Mentions the cost of the index (writes, storage) or when it would not help + graders: + - *quality_panel + + - name: index-choice-guidance-quality + tags: { kind: quality, area: indexing } + prompt: | + I have an Azure DocumentDB collection where each document has an array of + tags, and I also need documents to expire 30 days after creation. How + should I set up indexing? + rubric: + - Identifies that an index on an array field is a multikey index, and what that implies + - Recommends a TTL index for expiry, with the correct field type requirement + - Warns about the pitfalls (e.g. multikey index size, TTL granularity) + - Does not recommend a feature Azure DocumentDB does not support + graders: + - *quality_panel + + - name: connection-pool-guidance-quality + tags: { kind: quality, area: connection } + prompt: | + My Node.js service talking to Azure DocumentDB throws connection-pool + exhaustion errors and timeouts under load. What is going wrong and how do + I fix it? + rubric: + - Identifies client-per-request (or pool misuse) as the likely cause + - Prescribes a singleton MongoClient reused across requests + - Gives concrete pool/timeout settings rather than "tune the pool" + - Explains what the settings do, so the reader can adapt them + graders: + - *quality_panel + + - name: data-modelling-guidance-quality + tags: { kind: quality, area: data-modeling } + prompt: | + I am designing an Azure DocumentDB schema for an e-commerce app. Orders + have line items, and customers have addresses. Should I embed these or + keep them in separate collections? + rubric: + - Answers with the trade-off and the criteria for choosing, not a blanket rule + - Mentions the 16 MB document limit as a hard constraint on embedding + - Considers access patterns and unbounded growth (line items, addresses) + - Gives a concrete recommendation for THIS case rather than only theory + graders: + - *quality_panel + +scoring: + weights: + panel: 1.0 + # Every stimulus must clear the bar. A mean across stimuli would let a strong + # answer on one topic hide a misleading answer on another — and a misleading + # answer is precisely what we most need to catch. + threshold: 1.0 diff --git a/evals/documentdb-skills/eval.yaml b/evals/documentdb-skills/eval.yaml index 65ad5f1..9eebadf 100644 --- a/evals/documentdb-skills/eval.yaml +++ b/evals/documentdb-skills/eval.yaml @@ -9,12 +9,11 @@ # in the MSBench benchmark (which grades rubric conformance with deterministic # checks), assesses the QUALITY of the advice. # -# That is a real gap, not an oversight to be glossed: a skill could trigger -# perfectly and give poor advice, and this eval would report a pass. Closing it -# means adding a `panel` / prompt grader with a written rubric, blinded to the -# arm and judged by a model not under test — see evals/README.md §Grading -# policy. Until then, claims must be limited to routing and to best-practice -# conformance, not to "better answers". +# A skill can trigger perfectly and still give poor advice, and this eval would +# report a pass. That question is answered by its sibling, +# ../documentdb-quality/quality-eval.yaml, which scores the guidance itself with +# a blinded cross-model judge panel. Claims sourced from THIS file must be +# limited to routing behaviour. # # Why start here (see the grading ladder in the plan): # * it is the cheapest useful signal (runs on the free `mock` executor), diff --git a/evals/package.json b/evals/package.json index 8183311..ea4a90b 100644 --- a/evals/package.json +++ b/evals/package.json @@ -8,7 +8,13 @@ "eval": "vally eval -e documentdb-skills/eval.yaml", "experiment:plan": "vally experiment run documentdb-skills.experiment.yaml --dry-run", "experiment": "vally experiment run documentdb-skills.experiment.yaml --compare", - "tokens": "python3 harness/token_usage.py" + "tokens": "python3 harness/token_usage.py", + "lint:quality": "vally lint -e documentdb-quality/quality-eval.yaml", + "eval:quality": "vally eval -e documentdb-quality/quality-eval.yaml", + "eval:quality:mock": "vally eval -e documentdb-quality/quality-eval.yaml --executor mock", + "experiment:quality:plan": "vally experiment run quality.experiment.yaml --dry-run", + "experiment:quality": "vally experiment run quality.experiment.yaml --compare", + "lint:all": "npm run lint && npm run lint:quality" }, "devDependencies": { "@microsoft/vally-cli": "0.13.0" diff --git a/evals/quality.experiment.yaml b/evals/quality.experiment.yaml new file mode 100644 index 0000000..1e77f20 --- /dev/null +++ b/evals/quality.experiment.yaml @@ -0,0 +1,60 @@ +# quality.experiment.yaml — is the guidance BETTER with the kit installed? +# +# THE QUESTION +# ------------ +# `documentdb-skills.experiment.yaml` asks whether the right skill fires. +# This one asks the harder question: **is the resulting advice any good, and is +# it better than an agent without the kit would have given?** +# +# WHY A CONTROL ARM MATTERS EVEN MORE HERE THAN ELSEWHERE +# ------------------------------------------------------- +# Frontier models already know a lot about MongoDB. A bare agent will produce a +# perfectly respectable answer to "why is my query slow" — so a treatment-only +# score of 4.2/5 proves nothing whatsoever. The claim we want to make is +# comparative ("the kit makes the guidance better"), so the measurement has to +# be comparative too. +# +# It is entirely possible this experiment shows a SMALL delta. That is a real +# finding and must be reported as one: it would mean the kit's value lies in +# DocumentDB-specific correctness (which the `documentdb_specificity` gate +# isolates) rather than in general answer quality. +# +# COST +# ---- +# 2 arms x 4 stimuli x 3 runs = 24 agent runs, each graded by 3 judges = 72 +# judge calls. Start with `--variant` on a single cell before running the lot. +# +# Run: +# npm run experiment:quality:plan # free — resolve and print +# npm run experiment:quality # costs AI credits + +name: documentdb-guidance-quality-vs-control + +evals: + - documentdb-quality/quality-eval.yaml + +overrides: + runs: 3 + timeout: 5m + +execution: + workers: 2 + +matrix: + skills: + path: /environment/skills + values: + # CONTROL: a bare agent answering from its own knowledge. + - control: [] + # TREATMENT: the kit installed, discoverable, never mentioned. + - kit: + - ../skills/query-optimizer + - ../skills/query-optimization + - ../skills/indexing + - ../skills/connection + - ../skills/data-modeling + - ../skills/vector-search + +# The delta is measured against the unskilled agent. +baseline: + skills: control diff --git a/testing/scenarios/evals-config/tests/test_evals_config.py b/testing/scenarios/evals-config/tests/test_evals_config.py index f0d58ef..24fba34 100644 --- a/testing/scenarios/evals-config/tests/test_evals_config.py +++ b/testing/scenarios/evals-config/tests/test_evals_config.py @@ -211,3 +211,168 @@ def test_graders_are_objective(spec): f"judge is genuinely the right fit for that stimulus, add its type to " f"the allowlist in this test and note why." ) + + +# --------------------------------------------------------------------------- +# quality eval — the LLM-judge panel +# +# A judge is easy to do badly, and a badly-built one produces confident numbers +# that are wrong. These pin the anti-bias properties that make the score worth +# reporting at all. They are cheap, need no model, and run on every PR. +# --------------------------------------------------------------------------- +QUALITY_SPEC = EVALS_DIR / "documentdb-quality" / "quality-eval.yaml" +QUALITY_EXPERIMENT = EVALS_DIR / "quality.experiment.yaml" + + +@pytest.fixture(scope="module") +def quality(): + return _load(QUALITY_SPEC) + + +def _panels(spec): + out = [] + for stim in spec["stimuli"]: + for g in stim["graders"]: + if g["type"] == "panel": + out.append((stim["name"], g["config"])) + return out + + +def test_quality_eval_uses_a_multi_vendor_panel(quality): + """Self-preference bias is real: models rate their own output higher. + + A single-model judge on a cross-model comparison would systematically + favour one arm. Requiring judges from 3 distinct vendors makes that + impossible for any one of them to swing alone. + """ + for name, cfg in _panels(quality): + models = [m["model"] if isinstance(m, dict) else m for m in cfg["models"]] + assert len(models) >= 3, f"{name}: panel has only {models}" + vendors = {m.split("-")[0] for m in models} + assert len(vendors) >= 3, ( + f"{name}: judges come from too few vendors ({sorted(vendors)}). " + f"A model must never be the sole judge of output it could have " + f"produced itself." + ) + + +def test_quality_panel_aggregates_by_median(quality): + """A mean lets one miscalibrated judge drag the verdict; a median does not.""" + for name, cfg in _panels(quality): + assert cfg.get("aggregation") == "median", ( + f"{name}: aggregation is {cfg.get('aggregation')!r}, expected " + f"'median' — one outlier judge must not decide the result." + ) + + +def test_correctness_criteria_are_gates(quality): + """A fluent, confident, WRONG answer must fail. + + technical_correctness and documentdb_specificity are marked `required`, so + they gate the verdict: prose quality can never outvote accuracy. + """ + must_gate = {"technical_correctness", "documentdb_specificity"} + for name, cfg in _panels(quality): + criteria = {c["name"]: c for c in cfg["criteria"]} + missing = must_gate - set(criteria) + assert not missing, f"{name}: missing criteria {sorted(missing)}" + for key in must_gate: + assert criteria[key].get("required") is True, ( + f"{name}: {key} is not a required gate, so an answer could " + f"pass on style while being wrong." + ) + + +def test_correctness_outweighs_style(quality): + """Weight, not just gating: correctness must carry more than any single + presentational dimension.""" + for name, cfg in _panels(quality): + criteria = {c["name"]: c.get("weight", 1) for c in cfg["criteria"]} + correctness = criteria["technical_correctness"] + for other, weight in criteria.items(): + if other in ("technical_correctness", "documentdb_specificity"): + continue + assert correctness > weight, ( + f"{name}: technical_correctness (weight {correctness}) does not " + f"outweigh {other} (weight {weight})." + ) + + +def test_judges_are_blinded(quality): + """If a judge knows which arm produced an answer, it will find reasons. + + The prompt must instruct the judge not to infer provenance, and must not + itself leak the experiment's vocabulary. + """ + for name, cfg in _panels(quality): + prompt = cfg.get("prompt", "") + assert prompt, f"{name}: panel has no judge prompt" + assert "BLINDING" in prompt.upper(), ( + f"{name}: judge prompt carries no blinding instruction" + ) + leaked = [w for w in ("treatment arm", "control arm", "skills installed", + "with the kit", "agent kit") + if w in prompt.lower()] + assert not leaked, ( + f"{name}: judge prompt leaks experiment vocabulary {leaked}; the " + f"judge must not know which condition it is grading." + ) + + +def test_every_quality_stimulus_has_an_anchored_rubric(quality): + """"Rate this 1-5" is not a rubric. Each stimulus states what a good answer + contains, so two runs are scored against the same yardstick.""" + for stim in quality["stimuli"]: + rubric = stim.get("rubric") + assert rubric and len(rubric) >= 3, ( + f"{stim['name']}: needs an anchored rubric of at least 3 criteria, " + f"got {rubric!r}" + ) + + +def test_quality_prompts_do_not_name_the_solution(quality): + """Same organic-discovery rule as the triggering eval: if the prompt says + "use a compound index", the judge grades instruction-following instead of + guidance quality, and both arms score alike.""" + banned = ("compound index", "createindex", "create_index", "esr", + "singleton", "ttl index", "multikey", "skill") + offenders = [] + for stim in quality["stimuli"]: + prompt = stim["prompt"].lower() + offenders += [(stim["name"], b) for b in banned if b in prompt] + assert not offenders, ( + f"quality prompts name the solution {offenders}; the answer must come " + f"from the responder, not the question." + ) + + +def test_quality_runs_are_repeated(quality): + """Both agent output and judge scoring vary. n=1 is an anecdote.""" + runs = quality.get("defaults", {}).get("runs") + assert runs and runs >= 3, f"runs={runs}; need >= 3 for a usable median" + + +def test_quality_experiment_has_a_control_arm(): + """The decisive one for this eval. + + Frontier models already answer MongoDB questions well, so a treatment-only + quality score proves nothing. Only the delta against an unskilled agent + supports the claim "the kit makes the guidance better". + """ + exp = _load(QUALITY_EXPERIMENT) + values = exp["matrix"]["skills"]["values"] + control = next((v["control"] for v in values + if isinstance(v, dict) and "control" in v), None) + assert control == [], f"control arm must be empty, got {control!r}" + assert exp["baseline"]["skills"] == "control" + + +def test_quality_experiment_skill_paths_exist(): + """Same silent-failure trap as the triggering experiment: a treatment arm + whose skills do not load is just a second control arm.""" + exp = _load(QUALITY_EXPERIMENT) + kit = next((v["kit"] for v in exp["matrix"]["skills"]["values"] + if isinstance(v, dict) and "kit" in v), []) + base = QUALITY_EXPERIMENT.parent + missing = [s for s in kit if not _skill_dir_is_valid((base / s).resolve())] + assert not missing, f"quality experiment references missing skills: {missing}" From df359648614e65ee4c95e07443f84887d46adc57 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Fri, 14 Aug 2026 20:09:29 +0000 Subject: [PATCH 24/52] Make every reported number reproducible, and document how Asked for reproduction instructions. Writing them surfaced a real gap first: the naive control - whose 20/30 result is cited in the report as the headline evidence that the grader discriminates - existed only in /tmp. Nobody else could have reproduced it. Evidence that cannot be re-run is an assertion, not a measurement. Committed as controls/naive-python/ with a README explaining why a working-but-wrong submission is the control that matters. An empty /app scoring 0 proves only that missing files are noticed; a grader that rejects nothing else would be useless. The naive app implements every endpoint correctly, persists to DocumentDB, rejects duplicates, and returns the right rows - it passes 12/12 on competence and 3/13 on best practice. That gap is the benchmark's entire reason to exist. That fixture has already earned its keep: its per-request MongoClient, hidden inside a coll() helper, is what exposed the blind spot in the first version of the singleton check, which only inspected route-decorated functions. verify-controls.sh reproduces all three in one command and exits non-zero if any deviates. Verified by running it: oracle 31/31 reward 1, empty reward 0, naive 20/30 reward 0 with the same per-category split the report publishes. REPORT.md section 4 is now a staged guide rather than three commands: 1-2 Docker only build, then reproduce the grader validation 3 + msbench-cli[harbor] run through MSBench locally, NO ACR push, using the harbor-native task_style 4-5 internal access publish, register both arms, run with --pass_at_k 5 6 - generate the effectiveness report 7 Copilot SDK auth guidance quality (Loop B, not MSBench) CI nothing config guards on every PR Each stage states what it needs and what it establishes, so a reader can stop at the last one they have access to. Stages 1-2 are the ones worth running on every verifier change: they are the only ones that answer "is this instrument still trustworthy", and they cost nothing but time. All four documented msbench-cli flags (--backend, --pass_at_k, --dataset, --runner) were verified against the installed CLI rather than assumed. 3 new tests pin reproducibility, including one that fails if someone "fixes" the naive control into following best practice - which would quietly destroy the fixture's purpose. Verified: 146 passed; all three controls reproduce exactly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- benchmarks/documentdb-sdk-skills/README.md | 10 + .../documentdb-sdk-skills/controls/README.md | 45 ++++ .../controls/naive-python/app.py | 48 +++++ .../controls/naive-python/build.sh | 3 + .../controls/naive-python/requirements.txt | 4 + .../controls/naive-python/run.sh | 4 + .../documentdb-sdk-skills/docs/REPORT.md | 197 ++++++++++++++++-- .../documentdb-sdk-skills/verify-controls.sh | 96 +++++++++ .../tests/test_benchmark_config.py | 45 ++++ 9 files changed, 436 insertions(+), 16 deletions(-) create mode 100644 benchmarks/documentdb-sdk-skills/controls/README.md create mode 100644 benchmarks/documentdb-sdk-skills/controls/naive-python/app.py create mode 100755 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh create mode 100644 benchmarks/documentdb-sdk-skills/controls/naive-python/requirements.txt create mode 100755 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh create mode 100755 benchmarks/documentdb-sdk-skills/verify-controls.sh diff --git a/benchmarks/documentdb-sdk-skills/README.md b/benchmarks/documentdb-sdk-skills/README.md index c3ef330..0091eb1 100644 --- a/benchmarks/documentdb-sdk-skills/README.md +++ b/benchmarks/documentdb-sdk-skills/README.md @@ -182,6 +182,16 @@ reward one flaky check corrupts the entire signal, so `[tasks.skip-verification] here is empty and a test enforces that: a check that cannot be made deterministic must be **removed**, not skipped. +## Reproducing the results + +```bash +bash build.sh # build both images (offline, from vendored wheels) +bash verify-controls.sh # oracle=1, empty=0, naive=0 — asserts all three +``` + +Full stage-by-stage guide, from a Docker-only build through to a published +`pass@k`, in [`docs/REPORT.md` §4](docs/REPORT.md). + ## Building and running locally ```bash diff --git a/benchmarks/documentdb-sdk-skills/controls/README.md b/benchmarks/documentdb-sdk-skills/controls/README.md new file mode 100644 index 0000000..a07ff6b --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/controls/README.md @@ -0,0 +1,45 @@ +# Control submissions + +Reference submissions used to validate that the **grader discriminates**. They +are not part of the benchmark an agent sees; they exist so the numbers in +[`../docs/REPORT.md`](../docs/REPORT.md) can be reproduced. + +| Control | Expected reward | What it proves | +|---|---|---| +| *(empty `/app`)* | **0** | the harness notices missing deliverables | +| [`naive-python/`](naive-python/) | **0** | **the grader separates best practice from basic competence** | +| [`../tasks/orders-api-python/environment/reference/`](../tasks/orders-api-python/environment/reference/) (the oracle) | **1** | the grader can be satisfied at all | + +Run all three with [`../verify-controls.sh`](../verify-controls.sh). + +## Why `naive-python` is the important one + +An empty `/app` scoring 0 proves very little — only that missing files are +noticed. A grader that *only* rejects empty submissions would be useless. + +`naive-python` is **fully functional**. It implements every endpoint correctly, +persists to DocumentDB, rejects duplicates with 409, and returns the right rows +for a filtered query. It passes **every** API and behavioural check. + +What it does *not* do is follow any DocumentDB best practice: + +- no secondary index at all, so the hot-path query is a collection scan +- no type discriminator, no `schemaVersion`, no timestamp +- a **new `MongoClient` per request**, hidden inside a `coll()` helper, so every + call builds a fresh connection pool +- no explicit pool or timeout settings +- `tlsAllowInvalidCertificates=True` hardcoded rather than env-driven + +Measured result: **20/30, reward 0** — 12/12 on competence, 3/13 on best +practice. That gap is the benchmark's entire reason to exist, and this fixture +is what demonstrates it. + +## It has already earned its keep + +The per-request client in `coll()` was **not** caught by the first version of +the singleton check, which only inspected route-decorated functions. This +fixture is what exposed that blind spot; the check now examines any function +and the regression is pinned in `testing/scenarios/benchmark-config/`. + +That is the argument for keeping a *working-but-wrong* control rather than only +an empty one: it probes the grader where the grader is actually weak. diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/app.py b/benchmarks/documentdb-sdk-skills/controls/naive-python/app.py new file mode 100644 index 0000000..953606d --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/controls/naive-python/app.py @@ -0,0 +1,48 @@ +# NAIVE but FUNCTIONAL: correct HTTP + persistence, no DocumentDB best practices. +import os +from urllib.parse import quote_plus +from fastapi import FastAPI, HTTPException, Query +from pydantic import BaseModel +from pymongo import MongoClient + +app = FastAPI() + +def _uri(): + u = quote_plus(os.environ["DOCUMENTDB_USER"]); p = quote_plus(os.environ["DOCUMENTDB_PASSWORD"]) + h = os.environ.get("DOCUMENTDB_HOST","localhost"); port = os.environ.get("DOCUMENTDB_PORT","10260") + return f"mongodb://{u}:{p}@{h}:{port}/?authMechanism=SCRAM-SHA-256&directConnection=true" + +def coll(): + c = MongoClient(_uri(), tls=True, tlsAllowInvalidCertificates=True) + return c[os.environ.get("DOCUMENTDB_DATABASE","ordersdb")][os.environ.get("DOCUMENTDB_ORDERS_COLLECTION","orders")] + +class OrderIn(BaseModel): + id: str + customer_id: str + status: str + amount: float + items: list[str] = [] + +def _out(d): + d = dict(d); d["id"] = d.get("id", d.get("_id")); d.pop("_id", None); return d + +@app.get("/health") +def health(): return {"status":"ok"} + +@app.post("/orders", status_code=201) +def create(o: OrderIn): + c = coll() + if c.find_one({"_id": o.id}): raise HTTPException(409,"exists") + c.insert_one({"_id":o.id,"id":o.id,"customer_id":o.customer_id,"status":o.status,"amount":o.amount,"items":o.items}) + return _out(c.find_one({"_id": o.id})) + +@app.get("/orders/{oid}") +def get(oid: str): + d = coll().find_one({"_id": oid}) + if not d: raise HTTPException(404,"not found") + return _out(d) + +@app.get("/orders") +def lst(customer_id: str | None = Query(default=None)): + q = {"customer_id": customer_id} if customer_id else {} + return [_out(d) for d in coll().find(q)] diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh new file mode 100755 index 0000000..b32247a --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +set -euo pipefail +pip3 install --no-cache-dir --no-index --find-links=/opt/wheels -r /app/requirements.txt diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/requirements.txt b/benchmarks/documentdb-sdk-skills/controls/naive-python/requirements.txt new file mode 100644 index 0000000..9bf8315 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/controls/naive-python/requirements.txt @@ -0,0 +1,4 @@ +fastapi==0.115.4 +uvicorn[standard]==0.32.0 +pymongo==4.10.1 +pydantic==2.9.2 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh new file mode 100755 index 0000000..51cc753 --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail +cd /app +exec uvicorn app:app --host 0.0.0.0 --port "${APP_PORT:-9080}" diff --git a/benchmarks/documentdb-sdk-skills/docs/REPORT.md b/benchmarks/documentdb-sdk-skills/docs/REPORT.md index 2aaa969..ab199c0 100644 --- a/benchmarks/documentdb-sdk-skills/docs/REPORT.md +++ b/benchmarks/documentdb-sdk-skills/docs/REPORT.md @@ -265,36 +265,201 @@ the quality eval now covers it. --- -## 4. How to produce the real report +## 4. Reproducing every number + +Each stage below is independent — you can stop after any of them. Stages 1–2 +need only Docker; stage 3 onward needs internal MSBench access. + +### Prerequisites ```bash +# Docker, plus the MSBench CLI for stages 3+ export PATH="$HOME/pgmongo/msbench-tools/venv/bin:$PATH" -az login +msbench-cli version # -> 0.3.51 +az login # runs submit under your entitlement +``` + +> `pip install msbench` fetches an **unrelated** public package. The real tool +> is `msbench-cli` from the internal feed — see `msbench-tools/README.md`. + +--- + +### Stage 1 — Build the images (Docker only, ~10 min) + +```bash +cd benchmarks/documentdb-sdk-skills +bash build.sh +``` + +`build.sh` stages two things before `docker build`, both deliberately: + +- **`.skills/`** — the kit's skills, copied from the sibling `skills/` tree so + the build context stays narrow. +- **`.wheels/`** — every Python dependency, resolved **on the host** and + installed with `--no-index`. The task promises the agent no internet during + grading, so the image must not need PyPI to build. (It also cannot: on this + network `files.pythonhosted.org` is unreachable from Docker's VM even though + the host can reach it.) + +--- + +### Stage 2 — Reproduce the grader validation (Docker only, ~15 min) + +This regenerates every number in [§1](#1-what-has-been-measured): + +```bash +bash verify-controls.sh +``` + +Expected output — and the script exits non-zero if any control deviates: + +``` +control: oracle REWARD=1 CHECKS=31/31 +control: empty REWARD=0 +control: naive REWARD=0 CHECKS=20/30 + api 6/6 behavior 6/6 documentdb 0/5 + engine 2/4 source 1/4 skills 4/4 +``` + +Run one at a time with `--only naive`. The naive control is the meaningful one; +see [`controls/README.md`](../controls/README.md) for why. + +Each run seeds 20,000 filler documents, which is why it is not fast. That +volume is required, not incidental: on a 4-row collection a sequential scan is +genuinely cheaper and the engine checks would fail the oracle itself. + +--- + +### Stage 3 — Run the benchmark locally through MSBench (no ACR push) + +The task is registered `task_style: harbor-native`, so `--backend local` runs +the whole thing on your machine — no image push, no central-repo registration. +**Do this before publishing anything.** + +```bash +pip install "msbench-cli[harbor]" + +msbench-cli run \ + --benchmark documentdb-sdk-skills \ + --dataset msbench-registration/documentdb-sdk-skills/dataset.jsonl \ + --backend local \ + --runner shared/ces/runner.sh +``` + +The arm is selected by the runner's `SKILLS_ARM` variable (`kit` or `control`). +It **fails loudly** if `SKILLS_ARM=kit` but the skills are absent — a treatment +arm whose skills silently fail to load is just a second control arm, and would +produce a confident, wrong "the kit makes no difference". + +--- + +### Stage 4 — Publish the images and register (internal access) + +```bash +# Build and push to the internal registry +harbor-format-curation import orders.toml +harbor-format-curation build --profile staging orders.toml +harbor-format-curation update-database --profile staging orders.toml +``` + +Then PR both registration folders into the central benchmarks repo: + +``` +msbench-registration/documentdb-sdk-skills/ -> benchmarks/skillsbench/documentdb-sdk-skills/ +msbench-registration/documentdb-sdk-skills-noskills/ -> benchmarks/skillsbench/documentdb-sdk-skills-noskills/ +``` + +Each folder carries `registry.json`, `benchmark_loaders.toml` and +`dataset.jsonl`. **`registry.json` is required** by the live platform; the +Cosmos benchmark's registration predates that requirement and would be rejected +today. -# 1. Run BOTH arms. A one-armed number is not publishable. -msbench-cli run --benchmark documentdb-sdk-skills \ - --dataset benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills/dataset.jsonl \ - --pass_at_k 5 --runner benchmarks/documentdb-sdk-skills/shared/ces/runner.sh +--- -msbench-cli run --benchmark documentdb-sdk-skills-noskills \ - --dataset benchmarks/documentdb-sdk-skills/msbench-registration/documentdb-sdk-skills-noskills/dataset.jsonl \ - --pass_at_k 5 --runner benchmarks/documentdb-sdk-skills/shared/ces/runner.sh +### Stage 5 — Run both arms -# 2. Export per-instance data (this is what carries the token metrics) +```bash +for arm in documentdb-sdk-skills documentdb-sdk-skills-noskills; do + msbench-cli run \ + --benchmark "$arm" \ + --dataset "msbench-registration/$arm/dataset.jsonl" \ + --pass_at_k 5 \ + --runner shared/ces/runner.sh +done +``` + +**Both arms, always.** A treatment score with no control is not a result — 80% +resolved could mean an excellent kit or an easy task, and nothing in the number +distinguishes them. + +`--pass_at_k 5` uses the unbiased estimator `1 − C(n−c,k)/C(n,k)`. Agent runs +are non-deterministic; a single attempt is an anecdote. + +--- + +### Stage 6 — Generate the effectiveness report + +```bash msbench-cli report --run_id --output treatment.json msbench-cli report --run_id --output control.json -# 3. Generate the report -python3 benchmarks/documentdb-sdk-skills/report.py \ - --treatment treatment.json --control control.json \ - --out benchmarks/documentdb-sdk-skills/docs/REPORT.md +python3 report.py --treatment treatment.json --control control.json \ + --out docs/REPORT-.md +``` + +`report.py` **refuses to run on a single arm**. Add `--json` for machine-readable +output. + +The per-instance token metrics travel inside those exports: the verifier writes +`$OUTPUT_DIR/custom_metrics.json` and MSBench surfaces it as +`custom_metrics_values`. + +--- + +### Stage 7 — Guidance quality (Loop B, not MSBench) + +MSBench grades produced code against a fixed rubric. It cannot say whether the +*advice* was good — that lives in Loop B: + +```bash +cd evals && npm ci +npm run experiment:quality:plan # free: resolve the matrix +npm run experiment:quality # blinded 3-vendor judge panel, treatment vs control ``` -`report.py --json` emits the same summary as machine-readable JSON. +--- + +### Continuous checks (no infrastructure, every PR) + +```bash +cd testing && pytest scenarios/benchmark-config scenarios/benchmark-metrics +``` + +Validates the registration files, the Harbor layout, that `instruction.md` +leaks no hints, that the verifier parses as Python 3.10 (the image's +interpreter), and that the cost metrics agree with Loop B's — all with no +Docker, credentials or network. + +--- + +### What each stage proves + +| Stage | Needs | Establishes | +|---|---|---| +| 1–2 | Docker | the grader can pass, can fail, and **discriminates** | +| 3 | Docker + `msbench-cli[harbor]` | the Harbor/MSBench wiring works | +| 4–5 | internal access | a citable `pass@k` for both arms | +| 6 | — | the effectiveness + cost report | +| 7 | Copilot SDK auth | whether the *guidance* is better | +| CI | nothing | the configuration has not rotted | + +Stages 1–2 are worth running on every meaningful change to the verifier. They +are the only ones that answer "is this instrument still trustworthy", and they +cost nothing but time. --- -## 5. Reading the numbers honestly +## 5. Reading the numbers honestly## 5. Reading the numbers honestly Four traps, each guarded by a test in `testing/scenarios/benchmark-metrics/`: diff --git a/benchmarks/documentdb-sdk-skills/verify-controls.sh b/benchmarks/documentdb-sdk-skills/verify-controls.sh new file mode 100755 index 0000000..63219ac --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/verify-controls.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +# verify-controls.sh — reproduce every grader-validation number in docs/REPORT.md. +# +# Runs the three control submissions against the built task image and asserts +# the expected reward for each. This is the positive/negative control pair that +# makes the benchmark trustworthy: +# +# oracle must score 1 — otherwise the grader cannot be satisfied and every +# measured score is meaningless +# empty must score 0 — weak, but proves missing deliverables are noticed +# naive must score 0 — THE important one: a fully working app with no +# DocumentDB best practices must still fail +# +# A grader that cannot fail is worthless; a grader that cannot pass is broken. +# This checks both directions, plus the case in between that actually matters. +# +# Usage: +# bash build.sh # once, to build the images +# bash verify-controls.sh # ~10 min: each run seeds 20k documents +# bash verify-controls.sh --only naive + +set -uo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +TASK_DIR="$HERE/tasks/orders-api-python" +IMAGE="${TASK_TAG:-documentdb-orders-api-python:latest}" +ONLY="" +[ "${1:-}" = "--only" ] && ONLY="${2:-}" + +if ! docker image inspect "$IMAGE" >/dev/null 2>&1; then + echo "Image $IMAGE not found. Run: bash build.sh" >&2 + exit 1 +fi + +FAILURES=0 + +# run_control +run_control() { + local name="$1" expected="$2" setup="$3" + if [ -n "$ONLY" ] && [ "$ONLY" != "$name" ]; then return 0; fi + + echo + echo "══════════════════════════════════════════════════════════════" + echo " control: $name (expect reward=$expected)" + echo "══════════════════════════════════════════════════════════════" + + local out + out=$(docker run --rm \ + -v "$TASK_DIR/tests:/tests:ro" \ + -v "$TASK_DIR/solution:/solution:ro" \ + -v "$HERE/controls:/controls:ro" \ + "$IMAGE" \ + bash -c "$setup /tests/test.sh >/dev/null 2>&1; \ + echo \"REWARD=\$(cat /logs/verifier/reward.txt)\"; \ + python3 -c \" +import json +try: + d = json.load(open('/output/custom_metrics.json')) +except Exception: + raise SystemExit +print('CHECKS=%s/%s' % (d.get('checks_passed'), d.get('checks_total'))) +for c in ['api','behavior','documentdb','engine','source','skills']: + p, t = d.get('checks_%s_passed' % c), d.get('checks_%s_total' % c) + if t: print(' %-12s %s/%s' % (c, p, t)) +\"" 2>&1) + + echo "$out" + + local actual + actual=$(echo "$out" | sed -n 's/^REWARD=//p' | tail -1) + if [ "$actual" = "$expected" ]; then + echo " ✅ $name: reward=$actual as expected" + else + echo " ❌ $name: reward=$actual, EXPECTED $expected" >&2 + FAILURES=$((FAILURES + 1)) + fi +} + +# The oracle: copies the reference implementation into /app. +run_control oracle 1 '/solution/solve.sh >/dev/null 2>&1 &&' + +# Empty: nothing in /app at all. +run_control empty 0 'true &&' + +# Naive: functional, but follows no DocumentDB best practice. +run_control naive 0 'mkdir -p /app && cp -r /controls/naive-python/. /app/ && chmod +x /app/*.sh &&' + +echo +echo "══════════════════════════════════════════════════════════════" +if [ "$FAILURES" -eq 0 ]; then + echo " ✅ all controls behaved as expected" + exit 0 +fi +echo " ❌ $FAILURES control(s) did not behave as expected" >&2 +echo " The grader is not trustworthy until this is resolved." >&2 +exit 1 diff --git a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py index a4539fe..4ed304b 100644 --- a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py +++ b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py @@ -447,3 +447,48 @@ def get_client(): return MongoClient("mongodb://host") ''' assert not _client_offenders(tmp_path, cached) + + +# --------------------------------------------------------------------------- +# reproducibility of the published numbers +# --------------------------------------------------------------------------- +def test_control_submissions_are_committed(): + """The report cites the naive control's score as evidence. + + That fixture originally lived only in /tmp, which made the headline + discrimination result impossible for anyone else to reproduce. Evidence + that cannot be re-run is an assertion, not a measurement. + """ + naive = BENCH / "controls" / "naive-python" + for rel in ("app.py", "build.sh", "run.sh", "requirements.txt"): + assert (naive / rel).is_file(), f"naive control is missing {rel}" + + +def test_naive_control_is_functional_but_not_best_practice(): + """The fixture only proves anything if it is genuinely a WORKING app that + merely ignores best practice. If someone 'fixes' it, it stops testing the + thing it exists to test.""" + src = (BENCH / "controls" / "naive-python" / "app.py").read_text() + # functional: implements the full contract + for endpoint in ("/health", "/orders"): + assert endpoint in src, f"naive control no longer serves {endpoint}" + assert "insert_one" in src and "find_one" in src, ( + "naive control must really persist to DocumentDB, or it stops being a " + "test of best practice and becomes a test of basic competence" + ) + # but deliberately wrong in the ways the kit teaches + assert "create_index" not in src, ( + "naive control now creates an index; it no longer demonstrates the gap" + ) + assert "schemaVersion" not in src, "naive control now sets schemaVersion" + + +def test_verify_controls_script_checks_both_directions(): + """A grader that cannot fail is worthless; one that cannot pass is broken. + The reproduction script must assert both, plus the case in between.""" + script = (BENCH / "verify-controls.sh").read_text() + for name, expected in (("oracle", "1"), ("empty", "0"), ("naive", "0")): + assert f"run_control {name} {expected}" in script, ( + f"verify-controls.sh does not assert {name} -> reward {expected}" + ) + assert "exit 1" in script, "the script must fail the build when a control deviates" From 3707cb1ba145f7d64f04b5f607c1a59910bb65c1 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 17 Aug 2026 10:31:38 +0000 Subject: [PATCH 25/52] Complete the reproduction commands in REPORT.md, and verify them from a clean clone Three gaps, found by auditing every claim in the document against the commands provided for it. 1. A DUPLICATED HEADING. "## 5. Reading the numbers honestly" appeared twice on one line - damage from a string replacement two commits ago that I did not notice. Fixed, and the doc is now checked for duplicate headings. 2. THE TOKEN NUMBERS HAD NO REPRODUCTION COMMAND. Section 1 publishes tokens_fresh_input, cache_read_share_pct and ai_credits from a session store mounted into the task container, but never said how. Those figures were therefore unverifiable by a reader. Both routes are now documented: the in-container mount (which is what produced the published values) and the standalone harvester. Verified: the standalone run reports 91.61% cache share, consistent with the 91.6% in the report. The note that omitting the mount yields tokens_available=0 with NO token keys is included deliberately - that is the correct behaviour, and a reader should be able to confirm a missing measurement is never reported as zero cost. 3. NO SINGLE COPY-PASTE PATH. The staged guide is right for someone deciding how far to go, but wrong for someone who just wants the numbers. Added a TL;DR block covering everything that needs no internal access. The TL;DR is not aspirational. I ran it from a fresh clone into /tmp: git clone -> venv -> 50 config tests pass (no Docker, no credentials, ~1s) -> bash build.sh -> both images built offline from vendored wheels -> bash verify-controls.sh -> oracle 31/31 reward 1, empty reward 0, naive 20/30 reward 0 Every number in section 1 came back identical from a checkout that shared nothing with my working tree. REPORT.md now carries 13 runnable command blocks, all links resolve, and no heading is duplicated. Verified: 146 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .../documentdb-sdk-skills/docs/REPORT.md | 60 ++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/benchmarks/documentdb-sdk-skills/docs/REPORT.md b/benchmarks/documentdb-sdk-skills/docs/REPORT.md index ab199c0..0d736b4 100644 --- a/benchmarks/documentdb-sdk-skills/docs/REPORT.md +++ b/benchmarks/documentdb-sdk-skills/docs/REPORT.md @@ -140,6 +140,37 @@ One number *is* generalisable and worth carrying into the analysis: then served from cache, which is why the report leads with fresh (uncached) input rather than raw `tokens_input`. +Reproduce the pipeline (substitute your own session store; the numbers will be +your session's, not these): + +```bash +cd benchmarks/documentdb-sdk-skills + +# The oracle consumes no tokens of its own, so a real store is mounted in to +# exercise the harvest path end-to-end inside the container. +cp ~/.copilot/session-store.db /tmp/demo-store.db + +docker run --rm \ + -v "$PWD/tasks/orders-api-python/tests:/tests:ro" \ + -v "$PWD/tasks/orders-api-python/solution:/solution:ro" \ + -v /tmp/demo-store.db:/root/.copilot/session-store.db:ro \ + documentdb-orders-api-python:latest \ + bash -c '/solution/solve.sh >/dev/null 2>&1 && /tests/test.sh >/dev/null 2>&1; \ + cat /output/custom_metrics.json' +``` + +Expect `"tokens_available": 1` with populated token fields. Without the mount +you get `"tokens_available": 0` and no token keys at all — which is the correct +behaviour: a missing measurement must never be reported as zero cost. + +The same harvester also runs standalone, against any session store: + +```bash +python3 shared/verifier/harvest_metrics.py \ + --store ~/.copilot/session-store.db --output-dir /tmp/out +cat /tmp/out/custom_metrics.json +``` + --- ## 2. What has NOT been measured @@ -270,6 +301,33 @@ the quality eval now covers it. Each stage below is independent — you can stop after any of them. Stages 1–2 need only Docker; stage 3 onward needs internal MSBench access. +### TL;DR — everything that needs no internal access + +Copy-paste. Reproduces every number in [§1](#1-what-has-been-measured) from a +clean checkout in about 25 minutes. **Verified by running it end-to-end from a +fresh clone** — 50 config tests, both images built offline, all three controls +behaving as documented. + +```bash +git clone https://github.com/Azure/documentdb-agent-kit.git +cd documentdb-agent-kit + +# 1. config guards — no Docker, no credentials, ~1s +python3 -m venv testing-venv && testing-venv/bin/pip install -q -r testing/requirements.txt +(cd testing && ../testing-venv/bin/python -m pytest -q \ + scenarios/benchmark-config scenarios/benchmark-metrics) + +# 2. build both images offline (wheels resolved on the host) +cd benchmarks/documentdb-sdk-skills +bash build.sh + +# 3. the grader validation: oracle=1, empty=0, naive=0 +bash verify-controls.sh +``` + +Everything below is the same thing, stage by stage, with the internal-access +stages included. + ### Prerequisites ```bash @@ -459,7 +517,7 @@ cost nothing but time. --- -## 5. Reading the numbers honestly## 5. Reading the numbers honestly +## 5. Reading the numbers honestly Four traps, each guarded by a test in `testing/scenarios/benchmark-metrics/`: From 1ab5b4cbbc7e970f2983a0add5eed454d3d5df26 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 17 Aug 2026 10:40:59 +0000 Subject: [PATCH 26/52] Check results into the repo, with provenance and paired arms enforced Asked whether results should be committed, and how cosmosdb-agent-kit does it. Checked their repo rather than assuming: - They DO commit results: curated .md + .json batch summaries under testing-v2/scenarios/*/batch-results/, carrying date, scenario, language, skills-yes/no, iteration count and the originating issue/PR numbers. - Raw run output is gitignored (results/). - They commit NO MSBench results at all - benchmarks/cosmos-sdk-skills/ holds only registration and task definition. - Every committed batch file is named *-skills.*, i.e. TREATMENT ONLY. There is no control counterpart, so a delta cannot be computed from what is in that repo. Adopted the curated-artifact pattern, and deliberately diverged on the last point. results/ now holds committed artifacts with two rules, both enforced by tests rather than by convention: 1. ARMS COME IN PAIRS. A *-treatment.json with no matching *-control.json fails the build. A treatment score with no control is not a result: 80% resolved could mean an excellent kit or an easy task, and the number cannot tell you which. Committing one arm alone is exactly how that gets quoted anyway. 2. PROVENANCE IS MANDATORY. Effectiveness results must carry run_id, date, benchmark, image_tag, dataset_version, kit_commit, model and pass_at_k. Without kit_commit you cannot say which skills the agent had; without model you cannot compare like-for-like. A number missing these is a rumour with a decimal point. Also enforced: every .json has a readable .md companion, and the committed controls-validation artifact must not drift from the numbers quoted in REPORT.md - if someone updates one and forgets the other, the test fails. verify-controls.sh gained --output, so the artifact is GENERATED by the run rather than hand-written. The first one is committed: results/2026-08-17-controls-validation.{json,md} - oracle 31/31 reward 1, empty reward 0, naive 20/30 reward 0, kit_commit 3707cb1. Raw MSBench dumps (msbench-runs/, *-raw.json, extracted-logs/) are gitignored; only curated artifacts are checked in. Mutation-verified: committing a lone treatment result fails the pairing test, and a .json without its .md companion fails too. Verified: 152 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- benchmarks/documentdb-sdk-skills/.gitignore | 6 + benchmarks/documentdb-sdk-skills/README.md | 4 + .../documentdb-sdk-skills/docs/REPORT.md | 31 ++++- .../2026-08-17-controls-validation.json | 34 +++++ .../results/2026-08-17-controls-validation.md | 51 ++++++++ .../documentdb-sdk-skills/results/README.md | 82 ++++++++++++ .../documentdb-sdk-skills/verify-controls.sh | 56 +++++++- .../tests/test_benchmark_config.py | 123 ++++++++++++++++++ 8 files changed, 381 insertions(+), 6 deletions(-) create mode 100644 benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.json create mode 100644 benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.md create mode 100644 benchmarks/documentdb-sdk-skills/results/README.md diff --git a/benchmarks/documentdb-sdk-skills/.gitignore b/benchmarks/documentdb-sdk-skills/.gitignore index 0435678..be8e991 100644 --- a/benchmarks/documentdb-sdk-skills/.gitignore +++ b/benchmarks/documentdb-sdk-skills/.gitignore @@ -3,3 +3,9 @@ # Both are regenerated by `bash build.sh`. .wheels/ .skills/ + +# Raw MSBench output — large per-instance dumps, trajectories and logs. +# Only the CURATED artifacts in results/ are committed; see results/README.md. +msbench-runs/ +*-raw.json +extracted-logs/ diff --git a/benchmarks/documentdb-sdk-skills/README.md b/benchmarks/documentdb-sdk-skills/README.md index 0091eb1..57e52d1 100644 --- a/benchmarks/documentdb-sdk-skills/README.md +++ b/benchmarks/documentdb-sdk-skills/README.md @@ -222,6 +222,10 @@ msbench-cli run --benchmark documentdb-sdk-skills \ ## Results +Committed under [`results/`](results/) with provenance, so any number can be +traced to its run. Effectiveness results must be committed **in arm pairs** — +a treatment score with no control is not a result. + **No MSBench run has been executed yet**, so there is no effectiveness data. [`docs/REPORT.md`](docs/REPORT.md) records what has been measured (grader validation), what has not, and how to generate the real report with diff --git a/benchmarks/documentdb-sdk-skills/docs/REPORT.md b/benchmarks/documentdb-sdk-skills/docs/REPORT.md index 0d736b4..fdbefbe 100644 --- a/benchmarks/documentdb-sdk-skills/docs/REPORT.md +++ b/benchmarks/documentdb-sdk-skills/docs/REPORT.md @@ -76,6 +76,10 @@ The benchmark's **grader** has been validated end-to-end on a local build. This proves the instrument works. It says nothing about whether the kit helps — no agent has attempted the task. +Committed artifact: +[`results/2026-08-17-controls-validation.json`](../results/2026-08-17-controls-validation.json) +(readable: [`.md`](../results/2026-08-17-controls-validation.md)). + | Submission | Reward | Checks | |---|---|---| | Oracle (reference implementation) | **1** | 31 / 31 | @@ -367,6 +371,9 @@ This regenerates every number in [§1](#1-what-has-been-measured): ```bash bash verify-controls.sh + +# or record the outcome as a committed artifact +bash verify-controls.sh --output results/$(date -u +%F)-controls-validation.json ``` Expected output — and the script exits non-zero if any control deviates: @@ -457,14 +464,30 @@ are non-deterministic; a single attempt is an anecdote. ### Stage 6 — Generate the effectiveness report +Results are **committed**, so a number quoted later can be traced to the run +that produced it. Write them into [`results/`](../results/): + ```bash -msbench-cli report --run_id --output treatment.json -msbench-cli report --run_id --output control.json +DATE=$(date -u +%F) -python3 report.py --treatment treatment.json --control control.json \ - --out docs/REPORT-.md +msbench-cli report --run_id \ + --output "results/$DATE-effectiveness-treatment.json" +msbench-cli report --run_id \ + --output "results/$DATE-effectiveness-control.json" + +python3 report.py \ + --treatment "results/$DATE-effectiveness-treatment.json" \ + --control "results/$DATE-effectiveness-control.json" \ + --out "results/$DATE-effectiveness.md" ``` +Two rules, both enforced by tests in `testing/scenarios/benchmark-config/`: +**arms must be committed in pairs** (a treatment score with no control is not a +result), and **every result carries provenance** — `run_id`, `image_tag`, +`dataset_version`, `kit_commit`, `model`, `pass_at_k`. Raw MSBench dumps stay +gitignored; only the curated artifact is checked in. See +[`results/README.md`](../results/README.md). + `report.py` **refuses to run on a single arm**. Add `--json` for machine-readable output. diff --git a/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.json b/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.json new file mode 100644 index 0000000..22804db --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.json @@ -0,0 +1,34 @@ +{ + "all_as_expected": true, + "controls": { + "empty": { + "actual_reward": 0, + "as_expected": true, + "checks_passed": null, + "checks_total": null, + "expected_reward": 0 + }, + "naive": { + "actual_reward": 0, + "as_expected": true, + "checks_passed": 20, + "checks_total": 30, + "expected_reward": 0 + }, + "oracle": { + "actual_reward": 1, + "as_expected": true, + "checks_passed": 31, + "checks_total": 31, + "expected_reward": 1 + } + }, + "kind": "controls-validation", + "provenance": { + "command": "bash verify-controls.sh", + "date": "2026-08-17", + "host": "local docker", + "image_tag": "documentdb-orders-api-python:latest", + "kit_commit": "3707cb1" + } +} diff --git a/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.md b/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.md new file mode 100644 index 0000000..fefbcba --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.md @@ -0,0 +1,51 @@ +# Grader validation — 2026-08-17 + +Generated by `bash verify-controls.sh --output results/2026-08-17-controls-validation.json`. +Machine-readable companion: [`2026-08-17-controls-validation.json`](2026-08-17-controls-validation.json). + +| Field | Value | +|---|---| +| Date | 2026-08-17 | +| Kit commit | `3707cb1` | +| Image | `documentdb-orders-api-python:latest` | +| Host | local Docker | + +## Result + +| Control | Expected | Actual | Checks | | +|---|---|---|---|---| +| oracle (reference impl) | 1 | **1** | 31/31 | ✅ | +| empty `/app` | 0 | **0** | — | ✅ | +| naive (working, no best practice) | 0 | **0** | 20/30 | ✅ | + +Per-category, naive vs oracle: + +| Category | Naive | Oracle | +|---|---|---| +| `api` | 6/6 | 6/6 | +| `behavior` | 6/6 | 6/6 | +| `documentdb` | **0/5** | 6/6 | +| `engine` | **2/4** | 4/4 | +| `source` | **1/4** | 4/4 | +| `skills` | 4/4 | 4/4 | + +## What this establishes + +The grader **can be satisfied** (oracle), **can fail** (empty), and — the part +that matters — **discriminates between basic competence and best practice**. + +The naive submission is fully functional: every endpoint correct, real +persistence, duplicates rejected, filtered queries returning the right rows. It +scores **12/12 on competence and 3/13 on best practice**. That separation is the +benchmark's entire reason to exist. + +## What this does NOT establish + +Nothing about the kit's effectiveness. No agent has attempted this task; these +are fixed reference submissions used to validate the instrument. The +effectiveness question needs an MSBench run of both arms — see +[`../docs/REPORT.md`](../docs/REPORT.md). + +*(The naive run grades 30 rather than 31 because the ESR ordering check is +skipped when no compound index exists at all; a skipped check counts as neither +a pass nor a failure.)* diff --git a/benchmarks/documentdb-sdk-skills/results/README.md b/benchmarks/documentdb-sdk-skills/results/README.md new file mode 100644 index 0000000..d921d0a --- /dev/null +++ b/benchmarks/documentdb-sdk-skills/results/README.md @@ -0,0 +1,82 @@ +# Committed results + +Benchmark results are **checked in**, so a number quoted in a deck can be traced +to the run that produced it, by someone who was not there. + +Raw run output is not. `msbench-cli` emits large per-instance dumps, trajectories +and logs; those stay out of git (see [`.gitignore`](../.gitignore)). What lands +here is the **curated artifact**: a `.json` for tooling and a `.md` for humans, +each carrying enough provenance to re-run it. + +## Naming + +``` +-[-].{json,md} + +2026-08-17-controls-validation.json grader validation (no arms — not an A/B) +2026-11-04-effectiveness-treatment.json the skills arm +2026-11-04-effectiveness-control.json the no-skills arm +2026-11-04-effectiveness.md the generated comparison +``` + +## Two rules, both enforced by tests + +### 1. Arms come in pairs + +An effectiveness result **may not be committed for one arm alone**. A treatment +score with no control is not a result: 80% resolved could mean an excellent kit +or an easy task, and nothing in the number tells you which. + +`testing/scenarios/benchmark-config/` fails if a `*-treatment.json` has no +matching `*-control.json`. + +> This is the one place the DocumentDB kit deliberately diverges from +> `cosmosdb-agent-kit`, whose committed batch results are all `*-skills.*` with +> no control counterpart — so a reader cannot compute a delta from what is in +> that repo. + +### 2. Provenance is mandatory + +Every committed result carries a `provenance` block: + +| Field | Why | +|---|---| +| `run_id` | the MSBench run, so the raw output can be retrieved | +| `date` | when it ran | +| `benchmark` | which arm produced it | +| `image_tag` | the exact task image — the task can change | +| `dataset_version` | the dataset row set | +| `kit_commit` | the skills the agent had; results are meaningless without it | +| `model` | cross-model comparison is only valid like-for-like | +| `pass_at_k` | attempts per instance | + +A result missing any of these cannot be interpreted a year later, so the test +rejects it. + +## Generating + +```bash +# effectiveness (needs both arms — see docs/REPORT.md §4 stage 5) +msbench-cli report --run_id --output results/2026-11-04-effectiveness-treatment.json +msbench-cli report --run_id --output results/2026-11-04-effectiveness-control.json + +python3 report.py \ + --treatment results/2026-11-04-effectiveness-treatment.json \ + --control results/2026-11-04-effectiveness-control.json \ + --out results/2026-11-04-effectiveness.md +``` + +```bash +# grader validation (Docker only, no internal access) +bash verify-controls.sh +``` + +## What is here now + +| File | What | +|---|---| +| [`2026-08-17-controls-validation.json`](2026-08-17-controls-validation.json) | grader validation — oracle / empty / naive | +| [`2026-08-17-controls-validation.md`](2026-08-17-controls-validation.md) | the same, readable | + +**No effectiveness results yet** — no MSBench run has been executed. See +[`../docs/REPORT.md`](../docs/REPORT.md). diff --git a/benchmarks/documentdb-sdk-skills/verify-controls.sh b/benchmarks/documentdb-sdk-skills/verify-controls.sh index 63219ac..24a114c 100755 --- a/benchmarks/documentdb-sdk-skills/verify-controls.sh +++ b/benchmarks/documentdb-sdk-skills/verify-controls.sh @@ -25,7 +25,14 @@ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TASK_DIR="$HERE/tasks/orders-api-python" IMAGE="${TASK_TAG:-documentdb-orders-api-python:latest}" ONLY="" -[ "${1:-}" = "--only" ] && ONLY="${2:-}" +RESULT_JSON="" +while [ $# -gt 0 ]; do + case "$1" in + --only) ONLY="${2:-}"; shift 2;; + --output) RESULT_JSON="${2:-}"; shift 2;; + *) echo "unknown option: $1" >&2; exit 2;; + esac +done if ! docker image inspect "$IMAGE" >/dev/null 2>&1; then echo "Image $IMAGE not found. Run: bash build.sh" >&2 @@ -33,6 +40,8 @@ if ! docker image inspect "$IMAGE" >/dev/null 2>&1; then fi FAILURES=0 +RESULTS_TMP="$(mktemp)" +trap 'rm -f "$RESULTS_TMP"' EXIT # run_control run_control() { @@ -66,8 +75,13 @@ for c in ['api','behavior','documentdb','engine','source','skills']: echo "$out" - local actual + local actual checks actual=$(echo "$out" | sed -n 's/^REWARD=//p' | tail -1) + checks=$(echo "$out" | sed -n 's/^CHECKS=//p' | tail -1) + # Record for the machine-readable artifact. Categories are captured from the + # container's own custom_metrics.json, not re-derived here, so the committed + # result cannot drift from what the verifier actually reported. + printf '%s\t%s\t%s\t%s\n' "$name" "$expected" "$actual" "${checks:-}" >> "$RESULTS_TMP" if [ "$actual" = "$expected" ]; then echo " ✅ $name: reward=$actual as expected" else @@ -85,6 +99,44 @@ run_control empty 0 'true &&' # Naive: functional, but follows no DocumentDB best practice. run_control naive 0 'mkdir -p /app && cp -r /controls/naive-python/. /app/ && chmod +x /app/*.sh &&' +if [ -n "$RESULT_JSON" ]; then + mkdir -p "$(dirname "$RESULT_JSON")" + KIT_COMMIT="$(git -C "$HERE" rev-parse --short HEAD 2>/dev/null || echo unknown)" + python3 - "$RESULTS_TMP" "$RESULT_JSON" "$KIT_COMMIT" "$IMAGE" <<'PYEOF' +import json, subprocess, sys, datetime +rows_path, out_path, commit, image = sys.argv[1:5] +controls = {} +for line in open(rows_path): + name, expected, actual, checks = (line.rstrip("\n").split("\t") + ["", "", "", ""])[:4] + passed = total = None + if checks and "/" in checks: + p, t = checks.split("/", 1) + passed, total = int(p), int(t) + controls[name] = { + "expected_reward": int(expected), + "actual_reward": int(actual) if actual.isdigit() else None, + "checks_passed": passed, + "checks_total": total, + "as_expected": actual == expected, + } +artifact = { + "kind": "controls-validation", + "provenance": { + "date": datetime.date.today().isoformat(), + "kit_commit": commit, + "image_tag": image, + "host": "local docker", + "command": "bash verify-controls.sh", + }, + "controls": controls, + "all_as_expected": all(c["as_expected"] for c in controls.values()), +} +json.dump(artifact, open(out_path, "w"), indent=2, sort_keys=True) +open(out_path, "a").write("\n") +print(f" wrote {out_path}") +PYEOF +fi + echo echo "══════════════════════════════════════════════════════════════" if [ "$FAILURES" -eq 0 ]; then diff --git a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py index 4ed304b..9064ed8 100644 --- a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py +++ b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py @@ -492,3 +492,126 @@ def test_verify_controls_script_checks_both_directions(): f"verify-controls.sh does not assert {name} -> reward {expected}" ) assert "exit 1" in script, "the script must fail the build when a control deviates" + + +# --------------------------------------------------------------------------- +# committed results +# +# Results are checked in so a number in a deck can be traced to the run that +# produced it. These enforce the two properties that make a committed result +# worth anything: it is interpretable later, and it is not one-armed. +# --------------------------------------------------------------------------- +RESULTS = BENCH / "results" + +REQUIRED_PROVENANCE = {"date", "kit_commit"} +# Effectiveness results additionally need enough to re-run and to compare +# like-for-like. +REQUIRED_EFFECTIVENESS_PROVENANCE = REQUIRED_PROVENANCE | { + "run_id", "benchmark", "image_tag", "dataset_version", "model", "pass_at_k", +} + + +def _result_files(): + return sorted(RESULTS.glob("*.json")) if RESULTS.is_dir() else [] + + +def test_results_directory_documents_its_contract(): + assert (RESULTS / "README.md").is_file(), ( + "results/ must carry a README defining the naming and provenance " + "contract, or committed numbers become uninterpretable folklore" + ) + + +def test_every_committed_result_has_provenance(): + """A number without provenance cannot be interpreted a year later. + + Which skills did the agent have? Which task image? Which model? Without + those, the result is a rumour with a decimal point. + """ + for path in _result_files(): + data = json.loads(path.read_text()) + prov = data.get("provenance") + assert prov, f"{path.name} has no provenance block" + missing = REQUIRED_PROVENANCE - set(prov) + assert not missing, f"{path.name} provenance missing {sorted(missing)}" + + +def test_effectiveness_results_are_committed_in_arm_pairs(): + """The important one. + + A treatment score with no control is not a result: 80% resolved could mean + an excellent kit or an easy task, and the number cannot distinguish them. + Committing one arm alone would let exactly that get quoted. + + (cosmosdb-agent-kit's committed batch results are all `*-skills.*` with no + control counterpart, so a delta cannot be computed from that repo. This + test is a deliberate divergence.) + """ + treatments = {p.name.replace("-treatment.json", "") + for p in _result_files() if p.name.endswith("-treatment.json")} + controls = {p.name.replace("-control.json", "") + for p in _result_files() if p.name.endswith("-control.json")} + + orphan_treatments = sorted(treatments - controls) + orphan_controls = sorted(controls - treatments) + assert not orphan_treatments, ( + f"treatment results committed with no matching control: " + f"{orphan_treatments}. Publish both arms or neither." + ) + assert not orphan_controls, ( + f"control results committed with no matching treatment: {orphan_controls}" + ) + + +def test_effectiveness_results_carry_full_provenance(): + """Effectiveness results need more than date+commit: without run_id, + image_tag, dataset_version, model and pass_at_k they cannot be re-run or + compared like-for-like.""" + for path in _result_files(): + data = json.loads(path.read_text()) + if data.get("kind") != "effectiveness": + continue + missing = REQUIRED_EFFECTIVENESS_PROVENANCE - set(data.get("provenance", {})) + assert not missing, ( + f"{path.name} is an effectiveness result but its provenance is " + f"missing {sorted(missing)}" + ) + + +def test_committed_results_have_a_readable_companion(): + """Every machine-readable result needs a human-readable one beside it, or + it will only ever be read by a script.""" + for path in _result_files(): + if path.name == "README.md": + continue + companion = path.with_suffix(".md") + assert companion.is_file(), ( + f"{path.name} has no {companion.name}; commit the rendered report " + f"alongside the raw data" + ) + + +def test_controls_validation_result_matches_the_report(): + """The committed artifact and the prose in REPORT.md must not drift. + + If someone updates one and forgets the other, the document stops describing + the evidence it cites. + """ + path = RESULTS / "2026-08-17-controls-validation.json" + if not path.is_file(): + pytest.skip("no controls-validation artifact committed") + data = json.loads(path.read_text()) + controls = data["controls"] + assert controls["oracle"]["actual_reward"] == 1 + assert controls["empty"]["actual_reward"] == 0 + assert controls["naive"]["actual_reward"] == 0 + assert data["all_as_expected"] is True + + report = (BENCH / "docs" / "REPORT.md").read_text() + naive = controls["naive"] + assert f"{naive['checks_passed']} / {naive['checks_total']}" in report or \ + f"{naive['checks_passed']}/{naive['checks_total']}" in report, ( + f"REPORT.md does not mention the naive control's committed score " + f"({naive['checks_passed']}/{naive['checks_total']}) — the document and " + f"the artifact have drifted apart" + ) From 80787daaf48ac9819d1cc6f988762bee0dbf9a2e Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 17 Aug 2026 10:51:36 +0000 Subject: [PATCH 27/52] Rebuild the token study as a measured benchmark: route cost AND parity token-tests/ never calls a model. It counts bytes with wc -c and converts with tokens ~= bytes/4, so its headline (52-97% saving, median 77%) is payload arithmetic, not consumption - and it never checks whether either route reaches the correct answer. benchmarks/documentdb-route-efficiency/ replaces it. THE ARMS control route-text the kit's text skills; scripts/ and knowledge-base/ REMOVED. Must run its own queries and interpret raw output. treatment route-script scripts/ + knowledge-base/; skills/ REMOVED. Routes with kb-route.sh and reads a compact verdict. The arm is expressed purely by what is on disk, the prompt is identical, and neither arm is told which route it has. install-arm.sh deletes the other route and ASSERTS it is gone - a leftover file would silently turn one arm into the other and still produce a number, i.e. a confident comparison of an arm against itself. LEAKAGE CONTROLS (the part that most needed care) fresh database per run $indexStats/idx_scan counters accumulate and the redundancy finding depends on them. Running the script arm first warms those counters and CHANGES THE CORRECT ANSWER for the text arm. Each run gets its own database, seeded from the same deterministic fixture. ANALYZE after seed stale statistics flip query plans; this caused a real 2-in-7 flake in the deterministic suite. randomised arm order prompt-cache warmth is not controllable, so it is randomised (fixed seed) and cannot systematically favour one arm. fresh agent session no conversation carries between runs. cleared output dir a stale finding.json would be graded as this run's answer. PARITY IS GRADED FIRST AND GATES COST Both arms must reach the same finding. A route that is cheaper because it answered worse has saved nothing, and the failing run is typically the cheapest, so averaging it in would manufacture a saving out of a failure. summarize.py computes cost means over parity-passing runs only, and warns if the cheaper route is the less correct one. Parity is structural, not judged: which indexes are redundant is a fact about the database. The grader rejects missed findings, false positives, listing every index (the obvious way to "win"), and right-names-with-no-mechanism, while tolerating formatting differences so it grades correctness rather than prose. The harness REFUSES to run without AGENT_CMD rather than falling back to anything - numbers that look like measurements and are not would be worse than no data. token-tests/RESULTS.md now carries a SUPERSEDED banner explaining the three effects a static proxy cannot see (caching, turn count, output/reasoning tokens), which pull in different directions - so the measured result may well disagree with the published 77%. Also fixed a real defect: README linked to token-tests/RESULTS.md, which is untracked and therefore missing from any clone, and described it as "measured" when it is an estimate. Now points at the new benchmark. NOT YET RUN - an agent-driven run needs model credentials. 14 new tests cover the arm design, leakage controls, all six parity cases, and the cost-excludes-failures rule. Verified: 166 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- README.md | 5 +- .../documentdb-route-efficiency/.gitignore | 3 + .../documentdb-route-efficiency/README.md | 124 +++++++++++ .../results/README.md | 37 ++++ .../run-comparison.sh | 181 ++++++++++++++++ .../shared/arms/install-arm.sh | 86 ++++++++ .../shared/verifier/check_parity.py | 133 ++++++++++++ .../documentdb-route-efficiency/summarize.py | 178 ++++++++++++++++ .../expected-findings.yaml | 30 +++ .../index-redundancy-diagnosis/fixture.js | 50 +++++ .../index-redundancy-diagnosis/instruction.md | 20 ++ testing/pytest.ini | 1 + .../scenarios/route-efficiency/conftest.py | 15 ++ .../tests/test_route_efficiency.py | 199 ++++++++++++++++++ 14 files changed, 1059 insertions(+), 3 deletions(-) create mode 100644 benchmarks/documentdb-route-efficiency/.gitignore create mode 100644 benchmarks/documentdb-route-efficiency/README.md create mode 100644 benchmarks/documentdb-route-efficiency/results/README.md create mode 100755 benchmarks/documentdb-route-efficiency/run-comparison.sh create mode 100755 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh create mode 100644 benchmarks/documentdb-route-efficiency/shared/verifier/check_parity.py create mode 100644 benchmarks/documentdb-route-efficiency/summarize.py create mode 100644 benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/expected-findings.yaml create mode 100644 benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/fixture.js create mode 100644 benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/instruction.md create mode 100644 testing/scenarios/route-efficiency/conftest.py create mode 100644 testing/scenarios/route-efficiency/tests/test_route_efficiency.py diff --git a/README.md b/README.md index 4488f2c..d917675 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ script tests in [`testing/`](testing/README.md) and cross-model skill evals in [`docs/TESTING.md`](docs/TESTING.md). - **Router:** [`knowledge-base/README.md`](knowledge-base/README.md) · **Demo datasets:** [`scenarios/`](scenarios/) -- **Testing:** [`docs/TESTING.md`](docs/TESTING.md) · **Token study:** [`token-tests/RESULTS.md`](token-tests/RESULTS.md) +- **Testing:** [`docs/TESTING.md`](docs/TESTING.md) · **Route cost study:** [`benchmarks/documentdb-route-efficiency/`](benchmarks/documentdb-route-efficiency/README.md) ## Repo Structure @@ -87,8 +87,7 @@ knowledge-base/ # NL → script router (kb.json + kb_route.py) + demo scenarios/contoso/ # ready-to-run TOAST demo dataset (+ optional scaling-benchmark/) testing/ # Loop A — deterministic tests for the scripts (pytest) evals/ # Loop B — cross-model skill evals (Vally) + cost accounting -benchmarks/ # Loop C — MSBench skill-efficacy benchmark (publication layer) -token-tests/ # measured token savings of scripts vs text-skill workflows +benchmarks/ # Loop C — MSBench skill-efficacy benchmark + route-cost study docs/ # SKILLS.md (catalog), DIAGNOSTICS.md (toolbox), TESTING.md ``` diff --git a/benchmarks/documentdb-route-efficiency/.gitignore b/benchmarks/documentdb-route-efficiency/.gitignore new file mode 100644 index 0000000..4bee5fe --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/.gitignore @@ -0,0 +1,3 @@ +# Per-run agent output: trajectories, logs, session dumps. Only the curated +# artifacts in results/ are committed. +results/raw/ diff --git a/benchmarks/documentdb-route-efficiency/README.md b/benchmarks/documentdb-route-efficiency/README.md new file mode 100644 index 0000000..9f7aba1 --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/README.md @@ -0,0 +1,124 @@ +# Route efficiency: text skills vs diagnostic scripts + +Replaces [`token-tests/`](../../token-tests/) with a **measured** comparison. + +## What changed, and why the numbers may move + +`token-tests/` never calls a model. It counts bytes with `wc -c` and converts +with `tokens ≈ bytes/4`. Its headline — *52–97% saving, median 77%* — is a +**payload-size estimate**, not consumption. + +Three things that proxy cannot see, each capable of moving the result in a +different direction: + +| Missing from the proxy | Likely direction | +|---|---| +| **Caching.** A `SKILL.md` is sent once then served from cache (~91% of real input is cache reads), so its marginal cost is far below `bytes/4`. | **shrinks** the text arm's cost → *less* saving than claimed | +| **Turns.** The text arm must run its own queries and interpret raw output, probably over several turns, each re-sending context. | **grows** the text arm's cost → *more* saving than claimed | +| **Output + reasoning tokens.** Absent entirely from the proxy. | unknown | + +So this benchmark may well contradict the published figure. That is the point of +measuring. + +--- + +## The two arms + +The intervention is **which route the kit exposes**, and nothing else. + +| | Control — `route-text` | Treatment — `route-script` | +|---|---|---| +| `~/.copilot/skills/` | the kit's **text skills** | *(empty)* | +| `scripts/`, `knowledge-base/` | **absent** | **present** | +| How it answers | reads a `SKILL.md`, runs its own `mongosh` / `psql`, interprets raw output | routes with `kb-route.sh`, runs one read-only script, reads the compact verdict | +| Database | identical fixture | identical fixture | +| Question asked | identical | identical | + +Both arms are told the same thing and neither is told which route it has. The +arm is expressed purely by what exists on disk — `shared/arms/install-arm.sh`. + +### Why not "agent chooses"? + +A third design — install both and see which it picks — measures something +different and more realistic, but it cannot answer *this* question: it would +confound "how expensive is each route" with "how good is the agent at choosing". +Worth doing later as a separate task; it is not this one. + +--- + +## Preventing leakage + +Leakage would flatter whichever arm runs second, so every shared surface is +reset. This is the part most easily got wrong. + +| Leak | Why it matters here | Control | +|---|---|---| +| **Conversation history** | a second run could answer from the first run's reasoning | one fresh agent session per run; no multi-turn reuse across runs | +| **Prompt cache** | a warm cache makes the same payload cost far less | arm order is **randomised per iteration**, so warmth cannot systematically favour one arm | +| **Database state** | `$indexStats` / `idx_scan` counters accumulate; `index-redundancy-finder`'s *unused* findings depend on them, and the old `token-tests` README documents exactly this volatility (52% → 93% depending on warmth) | **a fresh database per run**, uniquely named, seeded from the same deterministic fixture | +| **Planner statistics** | stale stats flip query plans (this caused a real 2-in-7 flake in Loop A) | `ANALYZE` after every seed | +| **Filesystem** | a leftover script or `SKILL.md` silently converts one arm into the other | the arm installer **deletes the other route** and asserts it is gone | +| **Answer file** | a stale `/output/finding.json` would be graded as this run's answer | removed before each run | + +The database point is the one that would most easily go unnoticed: run the +script arm first and it warms the index counters, so the text arm's *correct* +answer changes. Same fixture, fresh database, every time. + +--- + +## What is measured + +### 1. Parity — graded first, and it gates everything + +Both arms must reach the **same finding**. A route that is cheap because it +answers *worse* is not a saving, and reporting its token count as one would be +actively misleading. + +Each arm writes `/output/finding.json`: + +```json +{ + "redundant_indexes": ["tenant_id_1"], + "reason": "prefix of tenant_id_1_status_1" +} +``` + +The verifier compares that against `expected-findings.yaml` — **structurally, no +judge**. The finding is a fact about the database, so it is checkable exactly. + +### 2. Cost — reported only for runs that achieved parity + +`tokens_fresh_input`, `tokens_output`, `ai_credits`, `agent_turns`, harvested +from the Copilot CLI session store by the same +[`harvest_metrics.py`](../documentdb-sdk-skills/shared/verifier/harvest_metrics.py) +the SDK-skills benchmark uses, so the two benchmarks cannot report cost +differently. + +**The headline is cost conditional on parity.** Comparing tokens across runs +where one arm got the wrong answer compares nothing. + +--- + +## Honest expectations + +The script route should win on tokens — it is a compact JSON verdict rather than +raw output plus a skill file. What is genuinely unknown: + +- whether the **saving survives caching** — the static proxy charged the text arm + full price for a payload that is actually cached +- whether the text arm reaches **parity at all**, and how often. If it frequently + gets the answer *wrong*, the story is about correctness, not tokens — a better + story, and one `token-tests/` could not tell +- whether the script arm is ever *worse*, e.g. when a script emits a large report + and the question needed one line + +If the measured saving is far below 77%, that supersedes the old figure. +`token-tests/` stays in the tree, marked as the superseded estimate. + +--- + +## Status + +⬜ **Not yet run.** Building an agent-driven run needs model credentials +(`COPILOT_SDK_AUTH_TOKEN`); the harness, fixture, arms and parity grader are in +place and validated with scripted stand-ins. See [`results/`](results/). diff --git a/benchmarks/documentdb-route-efficiency/results/README.md b/benchmarks/documentdb-route-efficiency/results/README.md new file mode 100644 index 0000000..4230444 --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/results/README.md @@ -0,0 +1,37 @@ +# Results — route efficiency + +Same contract as [`../../documentdb-sdk-skills/results/`](../../documentdb-sdk-skills/results/): +curated artifacts committed, raw runs gitignored, provenance mandatory. + +## Naming + +``` +-route-efficiency.json the aggregated comparison +-route-efficiency.md the rendered report +raw/ per-run output — GITIGNORED +``` + +Unlike the SDK-skills benchmark there is no `-treatment` / `-control` file +split: both arms are aggregated into one artifact by `summarize.py`, which +cannot produce a report from a single arm. + +## Generating + +```bash +export DB_PASSWORD='' +export AGENT_CMD='copilot --allow-all-tools -p' + +bash ../run-comparison.sh --iterations 5 +python3 ../summarize.py raw --out "$(date -u +%F)-route-efficiency.md" +python3 ../summarize.py raw --json > "$(date -u +%F)-route-efficiency.json" +``` + +## What is here now + +**Nothing.** No agent run has been executed — that needs model credentials. The +harness, arms, fixture and parity grader are built and validated; see +[`../README.md`](../README.md). + +Until a run exists, the kit's published token claim remains the **estimate** in +[`../../../token-tests/RESULTS.md`](../../../token-tests/RESULTS.md), which is +`bytes/4` payload arithmetic with no model and no correctness check. diff --git a/benchmarks/documentdb-route-efficiency/run-comparison.sh b/benchmarks/documentdb-route-efficiency/run-comparison.sh new file mode 100755 index 0000000..54d519e --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/run-comparison.sh @@ -0,0 +1,181 @@ +#!/usr/bin/env bash +# run-comparison.sh — measure text-route vs script-route, with a clean context +# for every single run. +# +# for each iteration: +# for each arm (ORDER RANDOMISED): +# fresh database -> install exactly one route -> fresh agent session +# -> grade parity -> harvest tokens +# +# WHY EACH RESET IS HERE +# ---------------------- +# Every one of these is a leak that would silently favour whichever arm ran +# second, producing a confident and wrong comparison. +# +# fresh database $indexStats / idx_scan counters accumulate, and the +# redundancy finding depends on them. Running the script +# arm first warms those counters and CHANGES THE CORRECT +# ANSWER for the text arm. Each run gets its own database +# name, seeded from the same deterministic fixture. +# ANALYZE after seed stale planner statistics flip query plans; this caused a +# real 2-in-7 flake in the deterministic suite. +# randomised order prompt-cache warmth is not controllable, so it is +# randomised instead — it cannot then systematically +# favour one arm across iterations. +# fresh agent session no conversation history carries between runs, or the +# second run answers from the first run's reasoning. +# arm mutual exclusion install-arm.sh deletes the other route and ASSERTS it +# is gone. A leftover file turns one arm into the other. +# clear /output a stale finding.json would be graded as this run's answer. +# +# THE AGENT COMMAND +# ----------------- +# Set AGENT_CMD to whatever drives your agent non-interactively. It receives the +# prompt on stdin and must leave its answer at $OUTPUT_DIR/finding.json. +# There is deliberately NO default: a silent fallback would emit plausible +# numbers from no agent at all, which is the one outcome worse than no data. +# +# Usage: +# export DB_PASSWORD=... +# export AGENT_CMD='copilot --allow-all-tools -p' +# bash run-comparison.sh --iterations 5 + +set -uo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +KIT="$(cd "$HERE/../.." && pwd)" +TASK="$HERE/tasks/index-redundancy-diagnosis" +CONTAINER="${DOCDB_CONTAINER:-documentdb-local}" +ITERATIONS=3 +OUT_DIR="$HERE/results/raw" +SEED="${RANDOM_SEED:-20260817}" + +while [ $# -gt 0 ]; do + case "$1" in + --iterations) ITERATIONS="$2"; shift 2;; + --output-dir) OUT_DIR="$2"; shift 2;; + *) echo "unknown option: $1" >&2; exit 2;; + esac +done + +if [ -z "${AGENT_CMD:-}" ]; then + cat >&2 <<'MSG' +AGENT_CMD is not set. + +This harness will not invent a fallback. Without a real agent it could only +produce numbers that look like measurements and are not, which is worse than +producing nothing. + + export AGENT_CMD='copilot --allow-all-tools -p' + +The command receives the prompt on stdin and must write its answer to +$OUTPUT_DIR/finding.json. +MSG + exit 2 +fi + +[ -n "${DB_PASSWORD:-}" ] || { echo "DB_PASSWORD is not set" >&2; exit 2; } +mkdir -p "$OUT_DIR" + +MONGO_FLAGS=(-u "${DB_USER:-docdbadmin}" -p "$DB_PASSWORD" + --authenticationMechanism SCRAM-SHA-256 --tls + --tlsAllowInvalidCertificates --quiet) + +seed_fresh_db() { # $1 = db name + local db="$1" + docker cp "$TASK/fixture.js" "$CONTAINER:/tmp/fx-$db.js" >/dev/null + docker exec "$CONTAINER" mongosh "localhost:${DOCDB_PORT:-10260}/$db" \ + "${MONGO_FLAGS[@]}" --file "/tmp/fx-$db.js" >/dev/null 2>&1 || return 1 + # Settle planner statistics before anything queries the new database. + docker exec "$CONTAINER" psql -h localhost -p "${DOCDB_PG_PORT:-9712}" \ + -U "${PG_USER:-documentdb}" -d "${PG_DB:-postgres}" -q -c "ANALYZE" \ + >/dev/null 2>&1 || true +} + +drop_db() { + docker exec "$CONTAINER" mongosh "localhost:${DOCDB_PORT:-10260}/$1" \ + "${MONGO_FLAGS[@]}" --eval 'db.dropDatabase()' >/dev/null 2>&1 || true +} + +# Deterministic arm ordering per iteration, from a fixed seed: reproducible, +# but not the same order every time. +arm_order() { # $1 = iteration + python3 -c " +import random +r = random.Random($SEED + $1) +arms = ['route-text', 'route-script'] +r.shuffle(arms) +print(' '.join(arms))" +} + +echo "iterations=$ITERATIONS seed=$SEED output=$OUT_DIR" + +for i in $(seq 1 "$ITERATIONS"); do + for arm in $(arm_order "$i"); do + run_id="iter${i}-${arm}" + db="route_eval_${i}_${arm//-/_}" + run_out="$OUT_DIR/$run_id" + rm -rf "$run_out"; mkdir -p "$run_out" + + echo + echo "── $run_id (db=$db) ─────────────────────────────────" + + # 1. fresh database, identical fixture + drop_db "$db" + if ! seed_fresh_db "$db"; then + echo " seed FAILED; skipping" >&2 + continue + fi + + # 2. exactly one route on disk, asserted + if ! KIT_SRC="$KIT" bash "$HERE/shared/arms/install-arm.sh" "$arm" \ + > "$run_out/arm.log" 2>&1; then + echo " arm install FAILED — see $run_out/arm.log" >&2 + cat "$run_out/arm.log" >&2 + continue + fi + + # 3. fresh agent session, identical prompt + prompt="$(sed "s/__DATABASE__/$db/g" "$TASK/instruction.md")" + OUTPUT_DIR="$run_out" \ + DOCUMENTDB_DATABASE="$db" \ + timeout "${AGENT_TIMEOUT:-900}" \ + bash -c "printf '%s' \"\$PROMPT\" | $AGENT_CMD" \ + > "$run_out/agent.log" 2>&1 <<<"" || true + + # 4. parity FIRST — cost is meaningless without it + python3 "$HERE/shared/verifier/check_parity.py" \ + --finding "$run_out/finding.json" \ + --expected "$TASK/expected-findings.yaml" \ + --output-dir "$run_out" > "$run_out/parity.log" 2>&1 + parity=$? + + # 5. cost + python3 "$KIT/benchmarks/documentdb-sdk-skills/shared/verifier/harvest_metrics.py" \ + --output-dir "$run_out" >/dev/null 2>&1 || true + + python3 - "$run_out" "$arm" "$i" "$db" "$parity" <<'PYEOF' +import json, sys, pathlib +run_out, arm, iteration, db, parity_rc = sys.argv[1:6] +d = pathlib.Path(run_out) +metrics = {} +for name in ("custom_metrics.json", "parity.json"): + p = d / name + if p.is_file(): + try: metrics.update(json.loads(p.read_text())) + except Exception: pass +metrics.update({"arm": arm, "iteration": int(iteration), "database": db, + "parity": parity_rc == "0"}) +(d / "run.json").write_text(json.dumps(metrics, indent=2, sort_keys=True) + "\n") +print(" parity=%s tokens_available=%s fresh_input=%s" % ( + metrics.get("parity"), metrics.get("tokens_available"), + metrics.get("tokens_fresh_input"))) +PYEOF + + drop_db "$db" + done +done + +echo +echo "raw runs in $OUT_DIR — aggregate with:" +echo " python3 $HERE/summarize.py $OUT_DIR" diff --git a/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh b/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh new file mode 100755 index 0000000..be01079 --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash +# install-arm.sh — put exactly ONE route on disk, and prove the other is gone. +# +# route-text the kit's text skills; scripts/ and knowledge-base/ REMOVED +# route-script scripts/ + knowledge-base/; skills/ REMOVED +# +# The arm is expressed purely by what exists on disk. The agent is never told +# which arm it is in, and the task prompt is identical either way — so any +# difference in cost or correctness comes from the route, not from instruction. +# +# WHY THIS SCRIPT ASSERTS RATHER THAN JUST COPYING +# ------------------------------------------------ +# A leftover file silently converts one arm into the other, and the run would +# still complete and still report a number. That is the worst failure mode +# available here: it produces a confident comparison of an arm against itself. +# So after installing, this verifies the other route is actually absent and +# fails loudly if it is not. + +set -uo pipefail + +ARM="${1:-}" +KIT_SRC="${KIT_SRC:-/opt/documentdb-agent-kit}" +SKILLS_DEST="${SKILLS_DEST:-$HOME/.copilot/skills}" +TOOLS_DEST="${TOOLS_DEST:-/opt/documentdb-tools}" + +case "$ARM" in + route-text|route-script) ;; + *) echo "usage: install-arm.sh {route-text|route-script}" >&2; exit 2;; +esac + +echo "[arm] installing $ARM" + +# Always start from nothing, so a previous run cannot contribute. +rm -rf "$SKILLS_DEST" "$TOOLS_DEST" 2>/dev/null || true +mkdir -p "$SKILLS_DEST" + +case "$ARM" in +route-text) + if [ ! -d "$KIT_SRC/skills" ]; then + echo "[arm] FATAL: $KIT_SRC/skills missing — the text arm would be empty," >&2 + echo "[arm] which silently makes it a no-kit control." >&2 + exit 1 + fi + cp -r "$KIT_SRC/skills/." "$SKILLS_DEST"/ + echo "[arm] installed $(find "$SKILLS_DEST" -name SKILL.md | wc -l) skills" + ;; +route-script) + if [ ! -d "$KIT_SRC/scripts" ] || [ ! -d "$KIT_SRC/knowledge-base" ]; then + echo "[arm] FATAL: $KIT_SRC/{scripts,knowledge-base} missing — the script" >&2 + echo "[arm] arm would have no route and would silently fall back" >&2 + echo "[arm] to reasoning, i.e. become the text arm." >&2 + exit 1 + fi + mkdir -p "$TOOLS_DEST" + cp -r "$KIT_SRC/scripts" "$KIT_SRC/knowledge-base" "$TOOLS_DEST"/ + chmod +x "$TOOLS_DEST"/scripts/*.sh "$TOOLS_DEST"/knowledge-base/*.sh 2>/dev/null || true + echo "[arm] installed $(ls "$TOOLS_DEST"/scripts/*.sh 2>/dev/null | wc -l) scripts + router" + ;; +esac + +# --------------------------------------------------------------------------- +# Mutual exclusion. An arm contaminated with the other route is not an arm. +# --------------------------------------------------------------------------- +fail=0 +if [ "$ARM" = "route-text" ]; then + if [ -d "$TOOLS_DEST" ]; then + echo "[arm] FATAL: $TOOLS_DEST exists in the TEXT arm" >&2; fail=1 + fi + if [ ! -s "$(find "$SKILLS_DEST" -name SKILL.md | head -1)" ] 2>/dev/null; then + echo "[arm] FATAL: no SKILL.md installed in the TEXT arm" >&2; fail=1 + fi +else + if find "$SKILLS_DEST" -name SKILL.md 2>/dev/null | grep -q .; then + echo "[arm] FATAL: SKILL.md files present in the SCRIPT arm" >&2; fail=1 + fi + if [ ! -x "$TOOLS_DEST/knowledge-base/kb-route.sh" ]; then + echo "[arm] FATAL: router not executable in the SCRIPT arm" >&2; fail=1 + fi +fi + +if [ "$fail" -ne 0 ]; then + echo "[arm] the arms are not mutually exclusive; refusing to run." >&2 + exit 1 +fi + +echo "[arm] $ARM verified: the other route is absent" diff --git a/benchmarks/documentdb-route-efficiency/shared/verifier/check_parity.py b/benchmarks/documentdb-route-efficiency/shared/verifier/check_parity.py new file mode 100644 index 0000000..a884c10 --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/shared/verifier/check_parity.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python3 +"""Parity grader — did this run reach the correct finding? + +Graded FIRST, and it gates the cost comparison. A route that is cheaper because +it answers worse has saved nothing, and reporting its token count as a saving +would be actively misleading. + +Parity is checked STRUCTURALLY. The correct answer here is a fact about the +database — which indexes are redundant — so it is exactly checkable, and an LLM +judge would add cost and variance for no gain. + +Three ways to fail, deliberately: + + MISSED a redundant index was not reported + FALSE POSITIVE a healthy index was reported as redundant + UNJUSTIFIED the right names, but no stated mechanism + +The false-positive gate matters as much as the missed-finding one: without it an +arm could "win" parity by naming every index in the database, which is not +correctness. + +Usage: + python3 check_parity.py --finding /output/finding.json \ + --expected /tests/expected-findings.yaml --output-dir /output +""" +from __future__ import annotations + +import argparse +import json +import re +import sys +from pathlib import Path + + +def _load_yaml(path: Path) -> dict: + try: + import yaml + except ImportError: # pragma: no cover - the image installs pyyaml + raise SystemExit("pyyaml is required") + return yaml.safe_load(path.read_text()) + + +def _normalise(names) -> set[str]: + """Index names, lowercased and stripped. + + Agents legitimately write `accounts.tenant_id_1` or `{tenant_id: 1}`; the + finding is the same one either way, and failing parity over formatting + would measure prose, not correctness. + """ + out = set() + for raw in names or []: + n = str(raw).strip().lower() + n = n.split(".")[-1] # accounts.tenant_id_1 -> tenant_id_1 + n = n.strip("`'\" ") + if n: + out.add(n) + return out + + +def grade(finding: dict, expected: dict) -> dict: + reported = _normalise(finding.get("redundant_indexes")) + want = _normalise(expected["redundant_indexes"]) + forbidden = _normalise(expected.get("must_not_report")) + + missed = sorted(want - reported) + false_positives = sorted(reported & forbidden) + # Anything reported that is neither expected nor explicitly forbidden is + # still wrong — it is an index that is not redundant. + unexpected = sorted(reported - want - forbidden) + + # Justification: the reasoning must name the mechanism, so a lucky guess at + # the names does not pass as understanding. + reason_text = " ".join( + str(v) for v in ( + [finding.get("reason", "")] + + list(finding.get("reasons", {}).values() if isinstance( + finding.get("reasons"), dict) else []) + ) + ).lower() + unjustified = [] + for index, keywords in (expected.get("reason_keywords") or {}).items(): + if _normalise([index]) & reported: + if not any(re.search(re.escape(k.lower()), reason_text) for k in keywords): + unjustified.append(index) + + passed = not (missed or false_positives or unexpected or unjustified) + return { + "parity": passed, + "reported": sorted(reported), + "expected": sorted(want), + "missed": missed, + "false_positives": false_positives, + "unexpected": unexpected, + "unjustified": sorted(unjustified), + } + + +def main(argv=None) -> int: + p = argparse.ArgumentParser(description=__doc__.split("\n")[0]) + p.add_argument("--finding", type=Path, required=True) + p.add_argument("--expected", type=Path, required=True) + p.add_argument("--output-dir", type=Path, default=Path("/output")) + args = p.parse_args(argv) + + expected = _load_yaml(args.expected) + + if not args.finding.is_file(): + result = { + "parity": False, + "error": f"no finding written to {args.finding}", + } + else: + try: + finding = json.loads(args.finding.read_text()) + except (json.JSONDecodeError, UnicodeDecodeError) as exc: + result = {"parity": False, "error": f"finding is not valid JSON: {exc}"} + else: + result = grade(finding, expected) + + args.output_dir.mkdir(parents=True, exist_ok=True) + (args.output_dir / "parity.json").write_text(json.dumps(result, indent=2, + sort_keys=True) + "\n") + + print(json.dumps(result, indent=2, sort_keys=True)) + if result["parity"]: + print("[parity] PASS", file=sys.stderr) + return 0 + print("[parity] FAIL — cost from this run must NOT be compared", file=sys.stderr) + return 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/benchmarks/documentdb-route-efficiency/summarize.py b/benchmarks/documentdb-route-efficiency/summarize.py new file mode 100644 index 0000000..78e89fb --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/summarize.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python3 +"""Aggregate route-efficiency runs into the comparison table. + +THE RULE THIS ENFORCES +---------------------- +Cost is compared **only among runs that reached parity**. A route that is +cheaper because it answered wrong has saved nothing, and averaging its tokens in +would manufacture a saving out of a failure. Runs that missed parity are counted +and reported — they are the more interesting result — but excluded from the cost +means. + +That is the single most important difference from the `token-tests/` estimate it +replaces, which had no notion of correctness at all: it compared payload sizes +whether or not either route would have produced the right answer. + +Usage: + python3 summarize.py results/raw [--json] [--out results/-route-efficiency.md] +""" +from __future__ import annotations + +import argparse +import json +import statistics +from pathlib import Path + +ARMS = ["route-text", "route-script"] +COST_KEYS = [ + ("tokens_fresh_input", "Fresh input tokens", "{:,.0f}"), + ("tokens_output", "Output tokens", "{:,.0f}"), + ("ai_credits", "AI credits", "{:,.2f}"), + ("agent_turns", "Turns", "{:,.1f}"), + ("cache_read_share_pct", "Cache share %", "{:.1f}"), +] + + +def load_runs(root: Path) -> list[dict]: + runs = [] + for path in sorted(root.glob("*/run.json")): + try: + runs.append(json.loads(path.read_text())) + except (json.JSONDecodeError, UnicodeDecodeError): + continue + return runs + + +def summarise(runs: list[dict]) -> dict: + out = {} + for arm in ARMS: + mine = [r for r in runs if r.get("arm") == arm] + parity_ok = [r for r in mine if r.get("parity")] + # Cost means come from parity-passing runs ONLY. + costed = [r for r in parity_ok if r.get("tokens_available")] + + cost = {} + for key, _, _ in COST_KEYS: + vals = [float(r[key]) for r in costed if r.get(key) is not None] + cost[key] = statistics.mean(vals) if vals else None + + out[arm] = { + "runs": len(mine), + "parity_passed": len(parity_ok), + "parity_rate": (len(parity_ok) / len(mine)) if mine else None, + "costed_runs": len(costed), + "missing_token_data": len(parity_ok) - len(costed), + "cost": cost, + } + return out + + +def render(summary: dict, runs: list[dict]) -> str: + L, A = [], None + A = L.append + A("# Route efficiency — text skills vs diagnostic scripts") + A("") + A("Replaces the `token-tests/` estimate with measured consumption. " + "**Cost is compared only among runs that reached parity** — a route that " + "is cheaper because it answered wrong has saved nothing.") + A("") + + A("## Parity — graded first") + A("") + A("| Arm | Runs | Reached correct finding | Rate |") + A("|---|---|---|---|") + for arm in ARMS: + s = summary[arm] + rate = "—" if s["parity_rate"] is None else f"{s['parity_rate']:.0%}" + A(f"| `{arm}` | {s['runs']} | {s['parity_passed']} | {rate} |") + A("") + + t, sc = summary["route-text"], summary["route-script"] + if t["parity_rate"] is not None and sc["parity_rate"] is not None: + if t["parity_rate"] < sc["parity_rate"]: + A("> The text route reached the correct finding **less often**. If " + "that holds up, the headline is about correctness, not tokens — " + "and a cheaper route that is also more reliable is a stronger " + "claim than a token saving.") + A("") + elif t["parity_rate"] > sc["parity_rate"]: + A("> ⚠️ The **script** route reached the correct finding less often. " + "Any token saving it shows is therefore suspect: check whether the " + "script answers a narrower question than the one asked.") + A("") + + A("## Cost (parity-passing runs only)") + A("") + A("| Metric | text route | script route | Saving |") + A("|---|---|---|---|") + for key, label, fmt in COST_KEYS: + tv, sv = t["cost"].get(key), sc["cost"].get(key) + if tv is None or sv is None: + saving = "—" + elif key == "cache_read_share_pct": + saving = "n/a" + elif tv: + saving = f"{(tv - sv) / tv:+.0%}" + else: + saving = "—" + A(f"| {label} | {'—' if tv is None else fmt.format(tv)} | " + f"{'—' if sv is None else fmt.format(sv)} | {saving} |") + A("") + + warnings = [] + for arm in ARMS: + s = summary[arm] + if s["runs"] and s["runs"] < 3: + warnings.append(f"`{arm}` has only {s['runs']} run(s) — indicative, " + f"not measured.") + if s["missing_token_data"]: + warnings.append( + f"`{arm}`: {s['missing_token_data']} parity-passing run(s) had " + f"no token data and are excluded from the cost means rather " + f"than counted as zero.") + if s["parity_passed"] == 0 and s["runs"]: + warnings.append(f"`{arm}` never reached parity, so it has no " + f"comparable cost at all.") + if warnings: + A("## Caveats") + A("") + for w in warnings: + A(f"- ⚠️ {w}") + A("") + + A("---") + A("") + A("**Against the superseded estimate.** `token-tests/` reported a 52–97% " + "saving (median 77%) from `bytes/4` payload sizes, with no model involved " + "and no correctness check. Where these measured numbers disagree, these " + "supersede it: caching makes the text route's payload far cheaper than " + "its byte count implies, while extra turns make it dearer, and neither " + "effect is visible to a static proxy.") + return "\n".join(L) + + +def main(argv=None) -> int: + p = argparse.ArgumentParser(description=__doc__.split("\n")[0]) + p.add_argument("raw_dir", type=Path) + p.add_argument("--json", action="store_true") + p.add_argument("--out", type=Path) + args = p.parse_args(argv) + + runs = load_runs(args.raw_dir) + if not runs: + raise SystemExit(f"no run.json files under {args.raw_dir}") + summary = summarise(runs) + + text = (json.dumps({"summary": summary, "n_runs": len(runs)}, indent=2) + if args.json else render(summary, runs)) + if args.out: + args.out.parent.mkdir(parents=True, exist_ok=True) + args.out.write_text(text + "\n") + print(f"wrote {args.out}") + else: + print(text) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/expected-findings.yaml b/benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/expected-findings.yaml new file mode 100644 index 0000000..34d2c99 --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/expected-findings.yaml @@ -0,0 +1,30 @@ +# expected-findings.yaml — the parity oracle. +# +# The correct answer is a FACT about the database, not an opinion, so parity is +# graded structurally. No LLM judge is involved or needed. +# +# Both arms must arrive here. A route that is cheaper because it answers WORSE +# has not saved anything, so cost is only compared among runs that reached +# parity. + +question: >- + Which indexes in this database are redundant and safe to drop, and why? + +# Exact set. Reported as a set, so ordering does not matter. +redundant_indexes: + - tenant_id_1 # prefix of tenant_id_1_status_1 + - email_1 # duplicate of email_unique + +# Naming any of these is a FALSE POSITIVE and fails parity. Without this, an arm +# could "win" by listing every index — over-reporting is not correctness. +must_not_report: + - tenant_id_1_status_1 + - email_unique + - customer_id_1 + - _id_ + +# The reasoning must identify the mechanism, not merely land on the right names +# by luck. Each redundant index requires at least one of its keywords. +reason_keywords: + tenant_id_1: [prefix, covered, subset, leading] + email_1: [duplicate, identical, same key, unique] diff --git a/benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/fixture.js b/benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/fixture.js new file mode 100644 index 0000000..0c2ad0a --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/fixture.js @@ -0,0 +1,50 @@ +// fixture.js — index-redundancy diagnosis +// +// Plants a KNOWN, unambiguous set of redundant indexes so the correct answer is +// a fact, not a judgement — which is what lets parity be graded structurally +// rather than by an LLM. +// +// Deterministic by construction: no Math.random() anywhere. Every run of both +// arms sees byte-identical data, so a cost difference cannot be a data +// difference. +// +// Planted redundancies (and nothing else): +// accounts.tenant_id_1 prefix of tenant_id_1_status_1 -> REDUNDANT +// accounts.email_1 duplicate of email_unique -> REDUNDANT +// Deliberately NOT redundant, as controls against over-reporting: +// accounts.tenant_id_1_status_1 the covering compound index +// accounts.email_unique the unique constraint +// orders.customer_id_1 sole index on another collection + +db.accounts.drop(); +db.orders.drop(); + +var bulk = []; +for (var i = 1; i <= 2000; i++) { + bulk.push({ + account_id: i, + email: "user" + i + "@example.test", + tenant_id: (i % 25) + 1, + status: ["active", "inactive", "pending"][i % 3] + }); + if (bulk.length === 1000) { db.accounts.insertMany(bulk); bulk = []; } +} +if (bulk.length) db.accounts.insertMany(bulk); + +db.accounts.createIndex({ tenant_id: 1 }); // redundant +db.accounts.createIndex({ tenant_id: 1, status: 1 }); // keep +db.accounts.createIndex({ email: 1 }); // redundant +db.accounts.createIndex({ email: 1 }, { unique: true, name: "email_unique" }); + +bulk = []; +for (var i = 1; i <= 1000; i++) { + bulk.push({ order_id: i, customer_id: "C" + (i % 200), amount: (i % 90) + 10 }); +} +db.orders.insertMany(bulk); +db.orders.createIndex({ customer_id: 1 }); // keep + +print("FIXTURE_READY index-redundancy-diagnosis"); +db.getCollectionNames().sort().forEach(function (c) { + print(" " + c + ": " + db[c].countDocuments() + " docs, " + + db[c].getIndexes().length + " indexes"); +}); diff --git a/benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/instruction.md b/benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/instruction.md new file mode 100644 index 0000000..9115135 --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/tasks/index-redundancy-diagnosis/instruction.md @@ -0,0 +1,20 @@ +Review the indexes in the Azure DocumentDB database `__DATABASE__` and identify +which ones are redundant and safe to drop. + +The database is running locally in the `documentdb-local` container. Connection +settings are in the environment (`DOCUMENTDB_HOST`, `DOCUMENTDB_PORT`, +`DOCUMENTDB_USER`, `DOCUMENTDB_PASSWORD`, `DOCUMENTDB_DATABASE`). + +Write your answer to `$OUTPUT_DIR/finding.json`: + +```json +{ + "redundant_indexes": ["", "..."], + "reason": "why each one is redundant" +} +``` + +Use the index names as the database reports them. List only indexes that are +genuinely redundant — naming a healthy index is as wrong as missing a redundant +one. State the mechanism for each: an index is not redundant merely because it +is unused today. diff --git a/testing/pytest.ini b/testing/pytest.ini index 16d87df..c557418 100644 --- a/testing/pytest.ini +++ b/testing/pytest.ini @@ -19,3 +19,4 @@ markers = evalsconfig: static validation of the Loop B eval + experiment configs (no container) benchmarkmetrics: Loop C — MSBench cost-metric harvester (no container needed) benchmarkconfig: Loop C — MSBench benchmark structure and registration (no container) + routeefficiency: text-skills vs diagnostic-scripts route comparison (no container) diff --git a/testing/scenarios/route-efficiency/conftest.py b/testing/scenarios/route-efficiency/conftest.py new file mode 100644 index 0000000..be6e637 --- /dev/null +++ b/testing/scenarios/route-efficiency/conftest.py @@ -0,0 +1,15 @@ +"""Scenario conftest: route-efficiency config validation needs no database.""" + +import sys +from pathlib import Path + +import pytest + +REPO = Path(__file__).resolve().parents[3] +sys.path.insert(0, str(REPO / "benchmarks" / "documentdb-route-efficiency" / "shared" / "verifier")) + + +@pytest.fixture(scope="session", autouse=True) +def require_container(): + """No-op override — this scenario only reads files and grades JSON.""" + return None diff --git a/testing/scenarios/route-efficiency/tests/test_route_efficiency.py b/testing/scenarios/route-efficiency/tests/test_route_efficiency.py new file mode 100644 index 0000000..d022bb4 --- /dev/null +++ b/testing/scenarios/route-efficiency/tests/test_route_efficiency.py @@ -0,0 +1,199 @@ +"""Guards for the route-efficiency benchmark (text skills vs diagnostic scripts). + +This benchmark replaces `token-tests/`, which compared payload BYTES with no +model and no correctness check. The properties below are what make the +replacement trustworthy; each is cheap, needs no infrastructure, and runs on +every PR. +""" +from __future__ import annotations + +import json +import sys +from pathlib import Path + +import pytest +import yaml + +import kit + +pytestmark = pytest.mark.routeefficiency + +BENCH = kit.REPO_DIR / "benchmarks" / "documentdb-route-efficiency" +TASK = BENCH / "tasks" / "index-redundancy-diagnosis" +sys.path.insert(0, str(BENCH / "shared" / "verifier")) +import check_parity # noqa: E402 + + +@pytest.fixture(scope="module") +def expected(): + return yaml.safe_load((TASK / "expected-findings.yaml").read_text()) + + +# --------------------------------------------------------------------------- +# arm design +# --------------------------------------------------------------------------- +def test_arms_are_mutually_exclusive_and_asserted(): + """A leftover file turns one arm into the other, and the run would still + complete and still report a number — a confident comparison of an arm + against itself. The installer must verify, not just copy.""" + script = (BENCH / "shared" / "arms" / "install-arm.sh").read_text() + assert "route-text" in script and "route-script" in script + assert "rm -rf" in script, "the installer must clear the previous arm" + assert script.count("FATAL") >= 3, ( + "the installer must fail loudly when an arm is contaminated or empty" + ) + assert "exit 1" in script + + +def test_instruction_does_not_reveal_the_route(): + """Both arms get the identical prompt. Naming a script or a skill would + steer one arm and turn the comparison into instruction-following.""" + text = (TASK / "instruction.md").read_text().lower() + for leak in ("kb-route", "script", "skill", "toolbox", "advisor", "finder"): + assert leak not in text, f"instruction leaks the route: {leak!r}" + + +def test_harness_refuses_to_fabricate_runs(): + """Without an agent the harness must stop, not emit plausible numbers. + + A silent fallback here would produce something that looks like a + measurement and is not — worse than producing nothing. + """ + script = (BENCH / "run-comparison.sh").read_text() + assert "AGENT_CMD is not set" in script + assert "exit 2" in script + + +def test_harness_resets_every_shared_surface(): + """Each of these is a leak that would favour whichever arm ran second.""" + script = (BENCH / "run-comparison.sh").read_text() + assert "drop_db" in script, "each run needs its own database" + assert "ANALYZE" in script, "planner statistics must be settled after seeding" + assert "arm_order" in script, "arm order must be randomised across iterations" + assert 'rm -rf "$run_out"' in script, "a stale finding.json must not be graded" + + +def test_fixture_is_deterministic(): + """Both arms must see byte-identical data, or a cost difference could be a + data difference.""" + # Strip comments first: the fixture's own docstring says "no Math.random()", + # and matching that would be a false positive — the check must look at code. + src = (TASK / "fixture.js").read_text() + code = "\n".join(line.split("//")[0] for line in src.splitlines()) + assert "Math.random" not in code, ( + "fixture uses Math.random(); both arms must see byte-identical data or " + "a cost difference could be a data difference" + ) + + +# --------------------------------------------------------------------------- +# parity grading — the gate on every cost number +# --------------------------------------------------------------------------- +def test_parity_accepts_the_correct_finding(expected): + r = check_parity.grade( + {"redundant_indexes": ["tenant_id_1", "email_1"], + "reason": "tenant_id_1 is a prefix of the compound index; " + "email_1 duplicates email_unique"}, + expected) + assert r["parity"] is True, r + + +def test_parity_rejects_a_missed_finding(expected): + r = check_parity.grade( + {"redundant_indexes": ["tenant_id_1"], "reason": "prefix"}, expected) + assert r["parity"] is False and r["missed"] == ["email_1"] + + +def test_parity_rejects_naming_a_healthy_index(expected): + """Over-reporting is not correctness.""" + r = check_parity.grade( + {"redundant_indexes": ["tenant_id_1", "email_1", "email_unique"], + "reason": "prefix and duplicate"}, expected) + assert r["parity"] is False and "email_unique" in r["false_positives"] + + +def test_parity_rejects_listing_every_index(expected): + """The obvious attack: an arm could 'win' parity by naming everything.""" + r = check_parity.grade( + {"redundant_indexes": ["tenant_id_1", "email_1", + "tenant_id_1_status_1", "customer_id_1", "_id_"], + "reason": "prefix duplicate"}, expected) + assert r["parity"] is False and len(r["false_positives"]) >= 3 + + +def test_parity_requires_a_stated_mechanism(expected): + """Right names with no reasoning is a lucky guess, not a diagnosis.""" + r = check_parity.grade( + {"redundant_indexes": ["tenant_id_1", "email_1"], + "reason": "these should be dropped"}, expected) + assert r["parity"] is False and r["unjustified"] + + +def test_parity_tolerates_formatting_differences(expected): + """Failing over `accounts.tenant_id_1` would grade prose, not correctness.""" + r = check_parity.grade( + {"redundant_indexes": ["accounts.tenant_id_1", " EMAIL_1 "], + "reason": "prefix of the compound index; duplicate key"}, expected) + assert r["parity"] is True, r + + +# --------------------------------------------------------------------------- +# cost aggregation +# --------------------------------------------------------------------------- +def _summarizer(): + import importlib.util + spec = importlib.util.spec_from_file_location("_sum", BENCH / "summarize.py") + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +def test_cost_excludes_runs_that_failed_parity(): + """THE headline rule. + + A route that is cheaper because it answered wrong has saved nothing. + Averaging its tokens in would manufacture a saving out of a failure — and + the failing run is typically the cheapest, so the bias is large. + """ + m = _summarizer() + runs = [ + {"arm": "route-script", "parity": True, "tokens_available": 1, + "tokens_fresh_input": 10000, "ai_credits": 10.0}, + {"arm": "route-script", "parity": False, "tokens_available": 1, + "tokens_fresh_input": 100, "ai_credits": 0.1}, # wrong AND cheapest + {"arm": "route-text", "parity": True, "tokens_available": 1, + "tokens_fresh_input": 50000, "ai_credits": 50.0}, + ] + s = m.summarise(runs) + assert s["route-script"]["cost"]["tokens_fresh_input"] == 10000, ( + "the parity-failing run was averaged into the cost, inventing a saving" + ) + assert s["route-script"]["parity_rate"] == pytest.approx(0.5) + + +def test_missing_token_data_is_excluded_not_zeroed(): + m = _summarizer() + runs = [ + {"arm": "route-text", "parity": True, "tokens_available": 1, + "tokens_fresh_input": 40000}, + {"arm": "route-text", "parity": True, "tokens_available": 0}, + ] + s = m.summarise(runs) + assert s["route-text"]["cost"]["tokens_fresh_input"] == 40000 + assert s["route-text"]["missing_token_data"] == 1 + + +def test_report_warns_when_the_cheaper_route_is_less_correct(): + """If the script route wins on tokens but loses on correctness, the saving + must be flagged as suspect rather than published as a win.""" + m = _summarizer() + runs = [ + {"arm": "route-text", "parity": True, "tokens_available": 1, + "tokens_fresh_input": 50000, "ai_credits": 50.0}, + {"arm": "route-script", "parity": True, "tokens_available": 1, + "tokens_fresh_input": 9000, "ai_credits": 9.0}, + {"arm": "route-script", "parity": False, "tokens_available": 1, + "tokens_fresh_input": 500, "ai_credits": 0.5}, + ] + out = m.render(m.summarise(runs), runs) + assert "suspect" in out.lower() From 5fb6199341bebdbd44b3e14cad2a94d77ef49eba Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 17 Aug 2026 19:24:53 +0000 Subject: [PATCH 28/52] Price cross-model cost in USD, and unblock the matrix with subagents Two corrections and one unblock, both from questions I had not asked myself. 1. TOKENS ARE NOT COMPARABLE ACROSS MODELS Measured against published rates, output differs 2.5x between Gemini 3.1 Pro ($12/MTok) and GPT-5.6 Sol ($30/MTok), and input 2.5x ($2 vs $5). A cross-model table in raw tokens ranks tokenisers and verbosity, not cost. pricing.py converts each run at its own model's rate, itemising fresh input, cache reads and output, and REFUSES to price an unknown model rather than applying a default - a guessed rate produces a plausible dollar figure that nothing downstream could identify as invented. Rates retrieved 2026-08-17 from each provider's own documentation, not an aggregator, with the source URL and retrieval date attached to every priced result. Cache reads are ~90% cheaper across all three, which is precisely why the fresh/cached split matters: billing all input at the full rate overstates a cached skill payload by ~10x. 2. A CORRECTION I HAD TO MAKE MID-TASK I first concluded Copilot's AI credits were a premium-request metric only weakly tied to tokens (correlations 0.15-0.46) and therefore unusable as cost. That was a measurement error: I correlated RAW token counts with cost, but cached tokens bill ~10x cheaper, so tokens and cost are not proportional by construction. Pricing fresh and cached input separately, published rates and credits agree within ~3% (gemini 1.000, opus-5 0.995, opus-4.8 0.985, sol 0.968) - credits ARE token-based per-model billing at 1 credit = $0.01. The wrong explanation was already written into pricing.py's docstring; it is now corrected there rather than quietly deleted, because the error is instructive. A test cross-checks the two sources on live data and fails if they diverge, which would mean either a stale rate table or a billing change. 3. SUBAGENTS REMOVE THE CREDENTIAL BLOCKER The cross-model matrix was believed to need COPILOT_SDK_AUTH_TOKEN. It does not. Copilot CLI subagents give per-run isolation (own context window - clean context structurally, not by cleanup), model pinning, and exact attribution: usage lands in assistant_usage_events with a distinct non-null agent_id and exactly one model each, while the orchestrating parent's rows carry agent_id NULL and are excluded. Verified with a probe pinned to gemini-3.1-pro-preview: one row, agent_id=toolu_01MYbS4..., 6867 in / 3 out, $0.01377 computed - matching the 1.377 credits recorded. attribute.py implements snapshot/collect around that. Stated plainly in the README: a subagent is NOT the MSBench or Vally executor, so absolute numbers are not comparable to an MSBench run. They are comparable within this harness, which is all a cross-model or cross-arm comparison needs. 6 new tests: pricing coverage for every matrix model, the cached-rate discount, that models are genuinely not interchangeable on cost, long-context repricing (both Sol and Gemini reprice the WHOLE request above threshold), retrieval-date provenance, and the live credits cross-check. Verified: 172 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .../documentdb-route-efficiency/README.md | 50 ++++- .../shared/verifier/attribute.py | 155 +++++++++++++ .../shared/verifier/pricing.py | 207 ++++++++++++++++++ .../documentdb-route-efficiency/summarize.py | 22 +- .../tests/test_route_efficiency.py | 128 +++++++++++ 5 files changed, 558 insertions(+), 4 deletions(-) create mode 100644 benchmarks/documentdb-route-efficiency/shared/verifier/attribute.py create mode 100644 benchmarks/documentdb-route-efficiency/shared/verifier/pricing.py diff --git a/benchmarks/documentdb-route-efficiency/README.md b/benchmarks/documentdb-route-efficiency/README.md index 9f7aba1..20d3d8d 100644 --- a/benchmarks/documentdb-route-efficiency/README.md +++ b/benchmarks/documentdb-route-efficiency/README.md @@ -117,8 +117,52 @@ If the measured saving is far below 77%, that supersedes the old figure. --- +## Cross-model, and why cost is in USD + +**Tokens are not comparable across models.** Measured against published rates, +output differs 2.5x between Gemini 3.1 Pro ($12/MTok) and GPT-5.6 Sol ($30/MTok), +and input 2.5x ($2 vs $5). A cross-model table in raw tokens would rank +tokenisers and verbosity, not cost. `shared/verifier/pricing.py` converts each +run at its own model's published rate, itemising fresh input, cache reads +(~90% cheaper) and output. + +Cross-checked against a second, independent source: Copilot's `total_nano_aiu` +is token-based per-model billing at 1 credit = $0.01, and the two agree within +~3% (gemini 1.000, opus-5 0.995, opus-4.8 0.985, sol 0.968). A test fails if +they ever diverge, which would mean either the rate table has gone stale or +billing changed. + +## Running it: subagents, no extra credential + +The cross-model matrix was thought to need `COPILOT_SDK_AUTH_TOKEN`. It does +not. The Copilot CLI's own subagents supply the three properties this +experiment needs: + +| Requirement | How a subagent satisfies it | +|---|---| +| clean context per run | each subagent has its own context window — structural, not cleanup | +| model selection | pinned per subagent | +| per-run attribution | usage lands in `assistant_usage_events` with a distinct non-null `agent_id`, exactly one model each | + +Verified with a probe pinned to `gemini-3.1-pro-preview`: one row, +`agent_id=toolu_01MYbS4…`, 6,867 in / 3 out, $0.01377 — matching the 1.377 +credits Copilot recorded. The orchestrating parent's rows carry +`agent_id=NULL` and are excluded. + +```bash +python3 shared/verifier/attribute.py snapshot # -> +# ... launch subagents, one per (model, arm) ... +python3 shared/verifier/attribute.py collect --since --out results/raw/runs.json +python3 shared/verifier/pricing.py results/raw/runs.json +``` + +**What this harness is not:** a subagent is not the MSBench or Vally executor — +different scaffolding, system prompt and tool surface. Absolute numbers are not +comparable to an MSBench run. They are comparable *within* this harness, which +is all a cross-model or cross-arm comparison needs. + ## Status -⬜ **Not yet run.** Building an agent-driven run needs model credentials -(`COPILOT_SDK_AUTH_TOKEN`); the harness, fixture, arms and parity grader are in -place and validated with scripted stand-ins. See [`results/`](results/). +⬜ **Not yet run end-to-end.** Attribution, pricing, arms, fixture and the +parity grader are built and validated; the subagent path removes the credential +blocker. See [`results/`](results/). diff --git a/benchmarks/documentdb-route-efficiency/shared/verifier/attribute.py b/benchmarks/documentdb-route-efficiency/shared/verifier/attribute.py new file mode 100644 index 0000000..e0e83bc --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/shared/verifier/attribute.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python3 +"""Attribute token usage to individual subagent runs. + +WHY THIS EXISTS +--------------- +The cross-model matrix was blocked on `COPILOT_SDK_AUTH_TOKEN`, which Vally and +MSBench both need. It turns out the Copilot CLI's own subagents provide the same +three properties, with no extra credential: + + per-run isolation each subagent runs in its own context window, so there is + no conversation carry-over between runs — the "clean + context" requirement, satisfied structurally rather than + by cleanup + model selection a subagent can be pinned to a specific model + attribution its usage lands in assistant_usage_events with a distinct + non-null `agent_id` (the spawning tool-call id), and + exactly one model per agent_id + +Verified empirically: a probe subagent pinned to gemini-3.1-pro-preview produced +one row, agent_id=toolu_01MYbS4…, model=gemini-3.1-pro-preview, 6867 in / 3 out. +The orchestrating parent's own rows carry agent_id=NULL and are excluded. + +USAGE +----- + python3 attribute.py snapshot # before launching subagents + ... run subagents ... + python3 attribute.py collect --since --out runs.json + +WHAT THIS HARNESS IS NOT +------------------------ +A subagent is not the MSBench or Vally executor: different scaffolding, system +prompt and tool surface. Absolute numbers from here are NOT comparable to an +MSBench run. They are comparable **within** this harness, which is all a +cross-model or cross-arm comparison needs, because everything except the varied +factor is held constant. +""" +from __future__ import annotations + +import argparse +import json +import shutil +import sqlite3 +import tempfile +from pathlib import Path + +DEFAULT_STORE = Path.home() / ".copilot" / "session-store.db" +NANO_AIU_PER_CREDIT = 1_000_000_000 + + +def _open(db: Path): + """Snapshot the store before reading; it is being written to live.""" + tmp = Path(tempfile.mkdtemp(prefix="attrib-")) + snap = tmp / db.name + shutil.copy2(db, snap) + for suffix in ("-wal", "-shm"): + side = db.with_name(db.name + suffix) + if side.exists(): + shutil.copy2(side, snap.with_name(snap.name + suffix)) + conn = sqlite3.connect(f"file:{snap}?mode=ro", uri=True) + conn.row_factory = sqlite3.Row + return conn, tmp + + +def snapshot(db: Path) -> int: + conn, tmp = _open(db) + try: + row = conn.execute("SELECT COALESCE(MAX(id), 0) AS m " + "FROM assistant_usage_events").fetchone() + return int(row["m"]) + finally: + conn.close() + shutil.rmtree(tmp, ignore_errors=True) + + +def collect(db: Path, since: int) -> list[dict]: + """One record per subagent run created after `since`. + + `agent_id IS NOT NULL` is what separates subagent spend from the + orchestrator's own. Including the parent would swamp the measurement — its + context is far larger than any subagent's. + """ + conn, tmp = _open(db) + try: + rows = conn.execute( + """ + SELECT agent_id, + MIN(model) AS model, + COUNT(*) AS requests, + COUNT(DISTINCT model) AS n_models, + COALESCE(SUM(input_tokens), 0) AS input_tokens, + COALESCE(SUM(output_tokens), 0) AS output_tokens, + COALESCE(SUM(cache_read_tokens), 0) AS cache_read_tokens, + COALESCE(SUM(reasoning_tokens), 0) AS reasoning_tokens, + COALESCE(SUM(total_nano_aiu), 0) AS nano_aiu, + COALESCE(SUM(duration_ms), 0) AS duration_ms, + MIN(id) AS first_id + FROM assistant_usage_events + WHERE id > ? AND agent_id IS NOT NULL + GROUP BY agent_id + ORDER BY first_id + """, + (since,), + ).fetchall() + finally: + conn.close() + shutil.rmtree(tmp, ignore_errors=True) + + out = [] + for r in rows: + d = dict(r) + inp, cache = d["input_tokens"], d["cache_read_tokens"] + # cache_read is a SUBSET of input; fresh input is what is billed at the + # uncached rate. Quoting raw input overstates cost by ~an order of + # magnitude once a payload is cached. + d["fresh_input_tokens"] = max(inp - cache, 0) + d["cache_read_share_pct"] = round(100.0 * cache / inp, 2) if inp else 0.0 + d["ai_credits"] = round(d.pop("nano_aiu") / NANO_AIU_PER_CREDIT, 4) + d["wall_secs"] = round(d.pop("duration_ms") / 1000.0, 1) + # A subagent should use exactly one model. More than one means the run + # was not what we think it was, so it is flagged rather than averaged. + d["single_model"] = d.pop("n_models") == 1 + out.append(d) + return out + + +def main(argv=None) -> int: + p = argparse.ArgumentParser(description=__doc__.split("\n")[0]) + p.add_argument("--store", type=Path, default=DEFAULT_STORE) + sub = p.add_subparsers(dest="cmd", required=True) + sub.add_parser("snapshot") + c = sub.add_parser("collect") + c.add_argument("--since", type=int, required=True) + c.add_argument("--out", type=Path) + args = p.parse_args(argv) + + if not args.store.is_file(): + raise SystemExit(f"session store not found: {args.store}") + + if args.cmd == "snapshot": + print(snapshot(args.store)) + return 0 + + runs = collect(args.store, args.since) + text = json.dumps(runs, indent=2, sort_keys=True) + if args.out: + args.out.parent.mkdir(parents=True, exist_ok=True) + args.out.write_text(text + "\n") + print(f"wrote {args.out} ({len(runs)} subagent run(s))") + else: + print(text) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/benchmarks/documentdb-route-efficiency/shared/verifier/pricing.py b/benchmarks/documentdb-route-efficiency/shared/verifier/pricing.py new file mode 100644 index 0000000..cfac1e3 --- /dev/null +++ b/benchmarks/documentdb-route-efficiency/shared/verifier/pricing.py @@ -0,0 +1,207 @@ +#!/usr/bin/env python3 +"""Convert token usage to USD, so models can be compared on cost. + +WHY TOKENS ARE NOT COMPARABLE ACROSS MODELS +------------------------------------------- +One token of Gemini 3.1 Pro is not one token of GPT-5.6 Sol. Measured against +the published rates below, output tokens differ by **2.5x** ($12 vs $30 per +MTok) and input by **2.5x** ($2 vs $5). A cross-model table in raw tokens would +rank the models by their tokenisers and their verbosity, not by what they cost. + +RELATIONSHIP TO COPILOT AI CREDITS (validated, and it surprised me) +------------------------------------------------------------------- +`total_nano_aiu` turns out to BE token-based per-model pricing at +1 credit = $0.01. Pricing this machine's own history with the published rates +below and dividing by (credits x $0.01) gives a median ratio of: + + gemini-3.1-pro-preview 1.000 claude-opus-5 0.995 + claude-opus-4.8 0.985 gpt-5.6-sol 0.968 + +i.e. the two agree within ~3%. + +An earlier reading of this data concluded the opposite — that credits were a +premium-request metric only weakly related to tokens (correlations 0.15-0.46). +That was a measurement error worth recording: it correlated RAW token counts +with cost, but cached tokens are billed ~10x cheaper, so total tokens and cost +are not proportional by construction. Once fresh and cached input are priced +separately, the relationship is essentially exact. + +So why keep this module rather than just report credits? + + * it is an INDEPENDENT check on Copilot's billing — two methods agreeing + within 3% is far stronger evidence than either alone, and a future + divergence is a signal worth catching + * it itemises fresh input vs cache reads vs output, which is what explains + WHERE a route's cost goes; a single credit figure cannot + * it prices against each provider's published rates, so a number can be + quoted to someone who does not use Copilot billing + * it still works when credits are absent or zero + +CACHE PRICING IS THE REASON THE FRESH/CACHED SPLIT MATTERS +----------------------------------------------------------- +All three providers discount cache reads by ~90% ($0.50/MTok against $2-$5). +Billing every input token at the full rate would overstate a skill payload's +cost by roughly 10x, because it is sent once and then read from cache. +""" +from __future__ import annotations + +import argparse +import json +from pathlib import Path + +# --------------------------------------------------------------------------- +# Published rates, USD per 1M tokens. Retrieved 2026-08-17 from each provider's +# own documentation — not from a third-party aggregator. +# +# Re-check before publishing: these change, and a stale table silently produces +# wrong dollar figures with no other symptom. +# --------------------------------------------------------------------------- +PRICING_RETRIEVED = "2026-08-17" + +PRICING = { + "claude-opus-5": { + "input": 5.00, "cached_input": 0.50, "output": 25.00, + "cache_write_5m": 6.25, + "source": "https://platform.claude.com/docs/en/about-claude/pricing", + }, + "claude-opus-4.8": { + "input": 5.00, "cached_input": 0.50, "output": 25.00, + "cache_write_5m": 6.25, + "source": "https://platform.claude.com/docs/en/about-claude/pricing", + }, + "gpt-5.6-sol": { + "input": 5.00, "cached_input": 0.50, "output": 30.00, + "cache_write_5m": 6.25, + # Prompts over 272K input tokens bill at 2x input and 1.5x output for + # the WHOLE request, not just the overflow. + "long_context_threshold": 272_000, + "long_context_input_mult": 2.0, + "long_context_output_mult": 1.5, + "source": "https://developers.openai.com/api/docs/models/gpt-5.6-sol", + }, + "gemini-3.1-pro-preview": { + "input": 2.00, "cached_input": 0.50, "output": 12.00, + "cache_write_5m": 2.00, + # Over 200K context the whole request moves to the higher tier. + "long_context_threshold": 200_000, + "long_context_input_mult": 2.0, # $2 -> $4 + "long_context_output_mult": 1.5, # $12 -> $18 + "source": "https://ai.google.dev/gemini-api/docs/pricing", + }, +} + +# `output_tokens` is treated as the billable output and `reasoning_tokens` is +# NOT added on top. In this machine's history reasoning <= output in 99.6% of +# rows (16 of 4,269 exceptions), which is what you would expect if reasoning is +# already counted inside output. Adding them would double-bill thinking tokens. +# Flip with --add-reasoning if a provider is shown to report them separately. +ADD_REASONING_BY_DEFAULT = False + + +class UnknownModel(KeyError): + """Raised rather than guessing a price. + + A default rate would produce a plausible dollar figure for a model we have + no pricing for, and nothing downstream could tell it was invented. + """ + + +def cost_usd(usage: dict, model: str, add_reasoning: bool = ADD_REASONING_BY_DEFAULT) -> dict: + """Itemised USD cost for one run. + + `usage` needs: fresh_input_tokens (or input_tokens + cache_read_tokens), + output_tokens, and optionally reasoning_tokens. + """ + if model not in PRICING: + raise UnknownModel( + f"no published pricing for {model!r}. Add it to PRICING with a " + f"source URL rather than falling back to a default rate." + ) + p = PRICING[model] + + cache_read = int(usage.get("cache_read_tokens", 0) or 0) + if "fresh_input_tokens" in usage: + fresh = int(usage["fresh_input_tokens"]) + else: + fresh = max(int(usage.get("input_tokens", 0) or 0) - cache_read, 0) + + output = int(usage.get("output_tokens", 0) or 0) + if add_reasoning: + output += int(usage.get("reasoning_tokens", 0) or 0) + + in_rate, out_rate = p["input"], p["output"] + total_input = fresh + cache_read + long_context = False + threshold = p.get("long_context_threshold") + if threshold and total_input > threshold: + long_context = True + in_rate *= p.get("long_context_input_mult", 1.0) + out_rate *= p.get("long_context_output_mult", 1.0) + + fresh_cost = fresh / 1e6 * in_rate + cache_cost = cache_read / 1e6 * p["cached_input"] + out_cost = output / 1e6 * out_rate + + return { + "model": model, + "usd_total": round(fresh_cost + cache_cost + out_cost, 6), + "usd_fresh_input": round(fresh_cost, 6), + "usd_cached_input": round(cache_cost, 6), + "usd_output": round(out_cost, 6), + "billed_fresh_input_tokens": fresh, + "billed_cache_read_tokens": cache_read, + "billed_output_tokens": output, + "long_context_tier": long_context, + "rates_usd_per_mtok": { + "input": in_rate, "cached_input": p["cached_input"], "output": out_rate, + }, + "pricing_retrieved": PRICING_RETRIEVED, + "pricing_source": p["source"], + } + + +def price_runs(runs: list[dict], add_reasoning: bool = ADD_REASONING_BY_DEFAULT) -> list[dict]: + out = [] + for r in runs: + priced = dict(r) + try: + priced["cost"] = cost_usd(r, r.get("model", ""), add_reasoning) + except UnknownModel as exc: + priced["cost"] = None + priced["cost_error"] = str(exc) + out.append(priced) + return out + + +def main(argv=None) -> int: + p = argparse.ArgumentParser(description=__doc__.split("\n")[0]) + p.add_argument("runs", type=Path, nargs="?", + help="JSON array of runs from attribute.py (default: show the rate table)") + p.add_argument("--add-reasoning", action="store_true", + help="bill reasoning_tokens on top of output_tokens") + p.add_argument("--out", type=Path) + args = p.parse_args(argv) + + if not args.runs: + print(f"Published rates (USD per 1M tokens), retrieved {PRICING_RETRIEVED}\n") + print(f"{'model':26} {'input':>8} {'cached':>8} {'output':>8}") + for name, v in PRICING.items(): + print(f"{name:26} {v['input']:>8.2f} {v['cached_input']:>8.2f} {v['output']:>8.2f}") + print("\nSources:") + for name, v in PRICING.items(): + print(f" {name:26} {v['source']}") + return 0 + + runs = json.loads(args.runs.read_text()) + priced = price_runs(runs, args.add_reasoning) + text = json.dumps(priced, indent=2, sort_keys=True) + if args.out: + args.out.write_text(text + "\n") + print(f"wrote {args.out}") + else: + print(text) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/benchmarks/documentdb-route-efficiency/summarize.py b/benchmarks/documentdb-route-efficiency/summarize.py index 78e89fb..5b34075 100644 --- a/benchmarks/documentdb-route-efficiency/summarize.py +++ b/benchmarks/documentdb-route-efficiency/summarize.py @@ -23,8 +23,17 @@ import statistics from pathlib import Path +import sys as _sys +_sys.path.insert(0, str(Path(__file__).parent / "shared" / "verifier")) +import pricing # noqa: E402 + ARMS = ["route-text", "route-script"] + +# USD is the headline. One token of Gemini 3.1 Pro is not one token of GPT-5.6 +# Sol — output differs 2.5x and input 2.5x — so a cross-model table in raw +# tokens ranks tokenisers and verbosity rather than cost. COST_KEYS = [ + ("usd_total", "USD", "${:,.4f}"), ("tokens_fresh_input", "Fresh input tokens", "{:,.0f}"), ("tokens_output", "Output tokens", "{:,.0f}"), ("ai_credits", "AI credits", "{:,.2f}"), @@ -49,7 +58,18 @@ def summarise(runs: list[dict]) -> dict: mine = [r for r in runs if r.get("arm") == arm] parity_ok = [r for r in mine if r.get("parity")] # Cost means come from parity-passing runs ONLY. - costed = [r for r in parity_ok if r.get("tokens_available")] + costed = [r for r in parity_ok if r.get("tokens_available") + or r.get("input_tokens")] + + # Price each run against its OWN model's published rates before + # averaging; averaging tokens across models and pricing afterwards + # would charge one model's rate for another's usage. + for r in costed: + if "usd_total" not in r and r.get("model"): + try: + r["usd_total"] = pricing.cost_usd(r, r["model"])["usd_total"] + except pricing.UnknownModel: + r["usd_total"] = None cost = {} for key, _, _ in COST_KEYS: diff --git a/testing/scenarios/route-efficiency/tests/test_route_efficiency.py b/testing/scenarios/route-efficiency/tests/test_route_efficiency.py index d022bb4..a67193e 100644 --- a/testing/scenarios/route-efficiency/tests/test_route_efficiency.py +++ b/testing/scenarios/route-efficiency/tests/test_route_efficiency.py @@ -197,3 +197,131 @@ def test_report_warns_when_the_cheaper_route_is_less_correct(): ] out = m.render(m.summarise(runs), runs) assert "suspect" in out.lower() + + +# --------------------------------------------------------------------------- +# cross-model cost in USD +# +# One token of Gemini 3.1 Pro is not one token of GPT-5.6 Sol: output differs +# 2.5x ($12 vs $30 / MTok) and input 2.5x ($2 vs $5). A cross-model table in raw +# tokens would rank tokenisers and verbosity, not cost. +# --------------------------------------------------------------------------- +import pricing # noqa: E402 + + +def test_every_matrix_model_has_published_pricing(): + """An unpriced model must raise, not fall back to a default rate — a + guessed rate produces a plausible dollar figure nothing can identify as + invented.""" + for model in ("claude-opus-5", "gpt-5.6-sol", "gemini-3.1-pro-preview"): + assert model in pricing.PRICING, f"no pricing for matrix model {model}" + assert pricing.PRICING[model]["source"].startswith("http") + with pytest.raises(pricing.UnknownModel): + pricing.cost_usd({"input_tokens": 1000, "output_tokens": 10}, "no-such-model") + + +def test_cached_input_is_billed_at_the_discounted_rate(): + """~90% discount on cache reads is why the fresh/cached split matters. + + Billing all input at the full rate would overstate a skill payload's cost + by roughly 10x, since it is sent once and then read from cache. + """ + for model in ("claude-opus-5", "gpt-5.6-sol", "gemini-3.1-pro-preview"): + p = pricing.PRICING[model] + assert p["cached_input"] < p["input"] / 2, ( + f"{model}: cached input is not discounted" + ) + all_fresh = pricing.cost_usd( + {"input_tokens": 1_000_000, "cache_read_tokens": 0, "output_tokens": 0}, + "claude-opus-5") + all_cached = pricing.cost_usd( + {"input_tokens": 1_000_000, "cache_read_tokens": 1_000_000, "output_tokens": 0}, + "claude-opus-5") + assert all_fresh["usd_total"] == pytest.approx(5.00) + assert all_cached["usd_total"] == pytest.approx(0.50) + + +def test_models_are_not_interchangeable_on_cost(): + """The reason this module exists: identical usage costs materially + different amounts, so tokens alone cannot rank models.""" + usage = {"input_tokens": 100_000, "cache_read_tokens": 90_000, + "output_tokens": 5_000} + costs = {m: pricing.cost_usd(usage, m)["usd_total"] + for m in ("claude-opus-5", "gpt-5.6-sol", "gemini-3.1-pro-preview")} + assert costs["gemini-3.1-pro-preview"] < costs["claude-opus-5"] + assert costs["claude-opus-5"] < costs["gpt-5.6-sol"] + spread = max(costs.values()) / min(costs.values()) + assert spread > 1.5, ( + f"identical usage differs by only {spread:.2f}x across models; if that " + f"is really true the pricing table is probably stale ({costs})" + ) + + +def test_long_context_tier_is_applied(): + """Both Sol and Gemini reprice the WHOLE request above a threshold, not + just the overflow. Missing this understates a long run's cost.""" + below = pricing.cost_usd( + {"input_tokens": 100_000, "cache_read_tokens": 0, "output_tokens": 1000}, + "gemini-3.1-pro-preview") + above = pricing.cost_usd( + {"input_tokens": 300_000, "cache_read_tokens": 0, "output_tokens": 1000}, + "gemini-3.1-pro-preview") + assert below["long_context_tier"] is False + assert above["long_context_tier"] is True + assert above["rates_usd_per_mtok"]["input"] > below["rates_usd_per_mtok"]["input"] + + +def test_pricing_table_records_when_it_was_retrieved(): + """Rates change. A stale table produces wrong dollar figures with no other + symptom, so the retrieval date must travel with every priced result.""" + assert pricing.PRICING_RETRIEVED + priced = pricing.cost_usd( + {"input_tokens": 1000, "output_tokens": 10}, "claude-opus-5") + assert priced["pricing_retrieved"] == pricing.PRICING_RETRIEVED + assert priced["pricing_source"].startswith("http") + + +def test_published_rates_agree_with_copilot_credits(): + """Cross-check against a second, independent cost source. + + Copilot's `total_nano_aiu` is token-based per-model billing at + 1 credit = $0.01. Pricing real usage with the published rates and dividing + by (credits x $0.01) gives ~1.0 for every model measured. A future + divergence means either the rate table has gone stale or Copilot changed + its billing — both worth catching. + """ + import sqlite3 + store = Path.home() / ".copilot" / "session-store.db" + if not store.is_file(): + pytest.skip("no local session store to cross-check against") + conn = sqlite3.connect(f"file:{store}?mode=ro", uri=True) + checked = 0 + try: + for model in ("claude-opus-5", "gpt-5.6-sol", "gemini-3.1-pro-preview"): + rows = list(conn.execute( + "SELECT input_tokens, cache_read_tokens, output_tokens, total_nano_aiu " + "FROM assistant_usage_events " + "WHERE model = ? AND total_nano_aiu > 0 LIMIT 100", (model,))) + if len(rows) < 5: + continue + ratios = [] + for inp, cache, out, aiu in rows: + usd = pricing.cost_usd( + {"input_tokens": inp, "cache_read_tokens": cache, + "output_tokens": out}, model)["usd_total"] + credits_usd = (aiu / 1e9) * 0.01 + if credits_usd > 0: + ratios.append(usd / credits_usd) + if not ratios: + continue + checked += 1 + median = sorted(ratios)[len(ratios) // 2] + assert 0.8 < median < 1.25, ( + f"{model}: published rates and Copilot credits disagree by " + f"{median:.2f}x. Either PRICING is stale (retrieved " + f"{pricing.PRICING_RETRIEVED}) or billing changed." + ) + finally: + conn.close() + if not checked: + pytest.skip("not enough local usage rows to cross-check") From 7d40401d69de19084812c5218d43bef1d99bc8c7 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 18 Aug 2026 23:29:13 +0000 Subject: [PATCH 29/52] Retract the "superseded" label on token-tests: the objection was wrong Challenged on why token-tests/RESULTS.md was marked SUPERSEDED. Tested my own lead argument instead of defending it, and it does not hold. THE CLAIM I MADE: bytes/4 is a rule of thumb, JSON and prose tokenise differently, so the numbers are unreliable. THE MEASUREMENT: priced the actual payloads with tiktoken (o200k_base). payload bytes/4 real tok error A: SKILL.md 2449 2416 +1% A: raw output 613 911 -33% B: router json 128 161 -20% B: script json 423 452 -6% ratio bytes/4 : 5.56x (82.0% saving) ratio real : 5.43x (81.6% saving) ratio error : +2.4% Per file the proxy is off by up to 33%, but the harness reports a RATIO and the errors largely cancel, because both paths mix prose and structured output. My objection was essentially noise at the level that matters. WHY THE LABEL WAS WRONG ANYWAY Beyond the refuted argument, "superseded" was indefensible on its own terms: it declared a working, reproducible, credential-free measurement obsolete in favour of a benchmark that HAS NOT BEEN RUN and has no results. That is backwards. The two measure different things and are complementary: token-tests/ context payload, single pass, no credentials needed. Ratio validated to 2.4%. Its 52-97% saving stands. route-efficiency/ end-to-end cost in USD, gated on reaching the correct answer. Sees caching, turn count, output tokens. "The script route sends ~77% less context, and costs $X less per correct answer" is a stronger claim than either number alone. WHAT REMAINS TRUE of the original critique, now stated as scope rather than dismissal: no model is called, so multi-turn caching and turn count are invisible; output and reasoning tokens are uncounted; and correctness is never checked, so a route that is cheap because it answers worse would look good. Those are limits on what the number supports, not reasons to discard it. token-tests/validate-proxy.py makes the 2.4% figure re-checkable and exits non-zero if the proxy drifts past a tolerance. Three tests pin it, including one that fails if the docs call the payload study superseded again. Verified: 175 passed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .../documentdb-route-efficiency/README.md | 40 ----- .../documentdb-route-efficiency/summarize.py | 19 +-- testing/requirements.txt | 2 + .../tests/test_route_efficiency.py | 77 +++++++++- token-tests/README.md | 111 ++++++++++++++ token-tests/RESULTS.md | 107 +++++++++++++ token-tests/results-settled.tsv | 10 ++ token-tests/summarize.py | 65 ++++++++ token-tests/token-ab-measure.sh | 143 ++++++++++++++++++ token-tests/validate-proxy.py | 103 +++++++++++++ 10 files changed, 619 insertions(+), 58 deletions(-) create mode 100644 token-tests/README.md create mode 100644 token-tests/RESULTS.md create mode 100644 token-tests/results-settled.tsv create mode 100755 token-tests/summarize.py create mode 100755 token-tests/token-ab-measure.sh create mode 100644 token-tests/validate-proxy.py diff --git a/benchmarks/documentdb-route-efficiency/README.md b/benchmarks/documentdb-route-efficiency/README.md index 20d3d8d..d31f908 100644 --- a/benchmarks/documentdb-route-efficiency/README.md +++ b/benchmarks/documentdb-route-efficiency/README.md @@ -1,27 +1,5 @@ # Route efficiency: text skills vs diagnostic scripts -Replaces [`token-tests/`](../../token-tests/) with a **measured** comparison. - -## What changed, and why the numbers may move - -`token-tests/` never calls a model. It counts bytes with `wc -c` and converts -with `tokens ≈ bytes/4`. Its headline — *52–97% saving, median 77%* — is a -**payload-size estimate**, not consumption. - -Three things that proxy cannot see, each capable of moving the result in a -different direction: - -| Missing from the proxy | Likely direction | -|---|---| -| **Caching.** A `SKILL.md` is sent once then served from cache (~91% of real input is cache reads), so its marginal cost is far below `bytes/4`. | **shrinks** the text arm's cost → *less* saving than claimed | -| **Turns.** The text arm must run its own queries and interpret raw output, probably over several turns, each re-sending context. | **grows** the text arm's cost → *more* saving than claimed | -| **Output + reasoning tokens.** Absent entirely from the proxy. | unknown | - -So this benchmark may well contradict the published figure. That is the point of -measuring. - ---- - ## The two arms The intervention is **which route the kit exposes**, and nothing else. @@ -99,24 +77,6 @@ where one arm got the wrong answer compares nothing. --- -## Honest expectations - -The script route should win on tokens — it is a compact JSON verdict rather than -raw output plus a skill file. What is genuinely unknown: - -- whether the **saving survives caching** — the static proxy charged the text arm - full price for a payload that is actually cached -- whether the text arm reaches **parity at all**, and how often. If it frequently - gets the answer *wrong*, the story is about correctness, not tokens — a better - story, and one `token-tests/` could not tell -- whether the script arm is ever *worse*, e.g. when a script emits a large report - and the question needed one line - -If the measured saving is far below 77%, that supersedes the old figure. -`token-tests/` stays in the tree, marked as the superseded estimate. - ---- - ## Cross-model, and why cost is in USD **Tokens are not comparable across models.** Measured against published rates, diff --git a/benchmarks/documentdb-route-efficiency/summarize.py b/benchmarks/documentdb-route-efficiency/summarize.py index 5b34075..5af8663 100644 --- a/benchmarks/documentdb-route-efficiency/summarize.py +++ b/benchmarks/documentdb-route-efficiency/summarize.py @@ -9,10 +9,6 @@ and reported — they are the more interesting result — but excluded from the cost means. -That is the single most important difference from the `token-tests/` estimate it -replaces, which had no notion of correctness at all: it compared payload sizes -whether or not either route would have produced the right answer. - Usage: python3 summarize.py results/raw [--json] [--out results/-route-efficiency.md] """ @@ -92,9 +88,6 @@ def render(summary: dict, runs: list[dict]) -> str: A = L.append A("# Route efficiency — text skills vs diagnostic scripts") A("") - A("Replaces the `token-tests/` estimate with measured consumption. " - "**Cost is compared only among runs that reached parity** — a route that " - "is cheaper because it answered wrong has saved nothing.") A("") A("## Parity — graded first") @@ -162,12 +155,12 @@ def render(summary: dict, runs: list[dict]) -> str: A("---") A("") - A("**Against the superseded estimate.** `token-tests/` reported a 52–97% " - "saving (median 77%) from `bytes/4` payload sizes, with no model involved " - "and no correctness check. Where these measured numbers disagree, these " - "supersede it: caching makes the text route's payload far cheaper than " - "its byte count implies, while extra turns make it dearer, and neither " - "effect is visible to a static proxy.") + A("**Alongside the payload measurement.** `token-tests/` reports a 52–97% " + "saving (median 77%) in *context payload* — validated against a real " + "tokeniser to within 2.4%. That measures how much context each route " + "sends in one pass. The numbers above measure something different: " + "end-to-end cost, gated on reaching the correct answer. Both can be true " + "at once, and quoting them together is stronger than either alone.") return "\n".join(L) diff --git a/testing/requirements.txt b/testing/requirements.txt index fe477d8..e634d67 100644 --- a/testing/requirements.txt +++ b/testing/requirements.txt @@ -1,3 +1,5 @@ pytest>=8.0 pyyaml>=6.0 pytest-timeout>=2.2 +# Optional: validates the bytes/4 proxy in token-tests/ against a real tokeniser. +tiktoken>=0.14.0 diff --git a/testing/scenarios/route-efficiency/tests/test_route_efficiency.py b/testing/scenarios/route-efficiency/tests/test_route_efficiency.py index a67193e..7b7fdc9 100644 --- a/testing/scenarios/route-efficiency/tests/test_route_efficiency.py +++ b/testing/scenarios/route-efficiency/tests/test_route_efficiency.py @@ -1,9 +1,4 @@ """Guards for the route-efficiency benchmark (text skills vs diagnostic scripts). - -This benchmark replaces `token-tests/`, which compared payload BYTES with no -model and no correctness check. The properties below are what make the -replacement trustworthy; each is cheap, needs no infrastructure, and runs on -every PR. """ from __future__ import annotations @@ -325,3 +320,75 @@ def test_published_rates_agree_with_copilot_credits(): conn.close() if not checked: pytest.skip("not enough local usage rows to cross-check") + + +# --------------------------------------------------------------------------- +# the bytes/4 proxy in token-tests/ +# +# The proxy was initially dismissed as unreliable because JSON and prose +# tokenise differently. Measured against a real tokeniser on the actual +# payloads, the per-file error reaches 33% but the RATIO error is only 2.4% — +# the errors largely cancel because both paths mix prose and structured output. +# The proxy is therefore a poor absolute estimator and a good relative one, +# which is what the harness reports. +# --------------------------------------------------------------------------- +TOKEN_TESTS = kit.REPO_DIR / "token-tests" + + +def test_proxy_validator_exists_and_is_runnable(): + """The 2.4% claim must stay checkable rather than becoming folklore.""" + script = TOKEN_TESTS / "validate-proxy.py" + assert script.is_file(), "token-tests/validate-proxy.py is missing" + src = script.read_text() + assert "tiktoken" in src + assert "--tolerance" in src, "the validator must fail when the proxy drifts" + + +def test_bytes_per_four_proxy_is_accurate_on_the_ratio(tmp_path): + """Reproduce the finding on representative payloads. + + Uses a real skill file (prose) plus synthetic JSON, so the mix matches what + the harness actually compares. + """ + tiktoken = pytest.importorskip("tiktoken", reason="tiktoken not installed") + enc = tiktoken.get_encoding("o200k_base") + + skill = kit.REPO_DIR / "skills" / "query-optimizer" / "SKILL.md" + if not skill.is_file(): + pytest.skip("query-optimizer SKILL.md not present") + + path_a = skill.read_text() + path_b = json.dumps({ + "findings": [ + {"collection": "accounts", "index": "tenant_id_1", + "rule": "PREFIX_REDUNDANT", "severity": "HIGH", + "reason": "Index {tenant_id} is a prefix of {tenant_id,status}"}, + {"collection": "accounts", "index": "email_1", + "rule": "DUPLICATE", "severity": "HIGH", + "reason": "Identical key to email_unique"}, + ]}, indent=2) + + a_b, b_b = len(path_a.encode()), len(path_b.encode()) + a_t, b_t = len(enc.encode(path_a)), len(enc.encode(path_b)) + + ratio_proxy = a_b / b_b + ratio_real = a_t / b_t + error = abs(ratio_proxy / ratio_real - 1) + + assert error < 0.20, ( + f"the bytes/4 proxy misstates the payload ratio by {error:.1%} " + f"(proxy {ratio_proxy:.2f}x vs real {ratio_real:.2f}x). If this has " + f"grown, token-tests/RESULTS.md needs re-validating." + ) + + +def test_docs_do_not_call_the_payload_study_superseded(): + """It measures context payload; this benchmark measures end-to-end cost and + correctness. Different questions, both valid — and this benchmark has no + results yet, so it cannot supersede anything.""" + for rel in ("token-tests/RESULTS.md", + "benchmarks/documentdb-route-efficiency/README.md"): + text = (kit.REPO_DIR / rel).read_text().lower() + assert "supersede" not in text, ( + f"{rel} still describes the payload study as superseded" + ) diff --git a/token-tests/README.md b/token-tests/README.md new file mode 100644 index 0000000..bd4e9a6 --- /dev/null +++ b/token-tests/README.md @@ -0,0 +1,111 @@ +# Token-Saving A/B Tests + +Empirically measures the **context-token cost** of answering a DocumentDB +diagnostic question two ways, so the kit's "scripts save tokens" claim is a +*measured* number, not a marketing line. + +- **Path A — text skill:** load the relevant `skills//SKILL.md` into the + model's context, then run the mongosh/psql commands that skill prescribes and + feed their **raw output** back into context for the model to interpret. +- **Path B — KB router + script:** run `knowledge-base/kb-route.sh` (natural + language → exact script; the router files are **executed, not loaded into + context**) and feed the script's **compact answer** into context. + +`tokens ≈ bytes / 4` (standard English/JSON BPE heuristic). Every payload is a +real byte count via `wc -c`; nothing is estimated except that 4-bytes/token +conversion and the multi-turn model (see Caveats). + +## Files + +| File | Role | +|------|------| +| `token-ab-measure.sh` | The harness. Emits a TSV, one row per (tool, dataset). Path-portable (derives the repo root from its own location). | +| `summarize.py` | Turns the harness TSV into a ratio / saving-rate table (`--md` for markdown). | +| `results-settled.tsv` | A captured snapshot (raw TSV). | +| `RESULTS.md` | The measured saving-rate table + per-tool summary (rendered results). | + +## Prerequisites + +- The `documentdb-local` container **Up**, with `DB_PASSWORD` exported and the + demo databases seeded: + ```bash + export DB_PASSWORD='' # the seeders/scripts require this + bash ../scenarios/ecommerce/seed.sh # ecommerce + bash ../scenarios/contoso/seed.sh # contoso (TOAST demo) + bash ../scenarios/index-redundancy/seed.sh # idx_test (redundant indexes) + ``` + If the container is stopped: `docker start documentdb-local`. +- `python3` + `bash` on the host. No other dependencies. + +## Reproduce + +From this directory (`token-tests/`): + +```bash +# 1. run the A/B measurement (writes a TSV to stdout) +bash token-ab-measure.sh + +# 2. run it and render the ratio / saving-rate table +bash token-ab-measure.sh | python3 summarize.py + +# 3. markdown table (for a report/PR) +bash token-ab-measure.sh | python3 summarize.py --md + +# 4. re-summarize the saved snapshot without re-measuring +python3 summarize.py < results-settled.tsv +``` + +Override defaults via env vars if your setup differs: + +```bash +CONTAINER=my-docdb PORT=10260 PG_PORT=9712 DB_PASSWORD='' \ + bash token-ab-measure.sh +``` + +## What the harness measures per tool + +| Tool | Path A skill (commands it prescribes) | Path B (router + script) | +|------|----------------------------------------|--------------------------| +| `document-bloat-advisor` | `query-optimizer`: getIndexes + stats + $indexStats + explain + findOne | `document-bloat-advisor.sh --json` | +| `index-redundancy-finder` | `indexing`: per-collection getIndexes + $indexStats | `index-redundancy-finder.sh --json` | +| `perf-advisor` | `query-optimizer` workflow | `perf-advisor.sh --json` | +| `data-integrity-check` | `data-modeling`: $lookup orphan probes + findOne | `data-integrity-check.sh --json` | +| `db-config-advisor` | `storage` (no local commands) → agent improvises psql | `db-config-advisor.sh --json` | + +`ratio = A_tok / B_tok` · `saving = (A_tok − B_tok) / A_tok`. + +## Latest verified result + +See [`RESULTS.md`](RESULTS.md) for the full measured table (9 tool×dataset pairs, +single-pass token saving **52%–97%, median 77%**) and per-tool summary. Raw data in +[`results-settled.tsv`](results-settled.tsv). Regenerate anytime with +`bash token-ab-measure.sh | python3 summarize.py`. + +## Reproducibility caveats (read before comparing runs) + +1. **`index-redundancy-finder` output is workload-volatile.** Its `UNUSED_VERIFIED` + findings depend on PostgreSQL index-usage stats. **Right after a container + restart** every `idx_scan = 0`, so *all* secondary indexes are flagged unused + → a big Path B report → saving drops to ~2×. Once queries exercise the indexes + (or on a warm instance), that output shrinks → ~13.8×. Its *structural* + findings (prefix/duplicate) are stable; the *unused-index* ones are not. Treat + its saving as a **range (52–93%)**, and warm the DB before measuring for a + stable number. The `idx_test` row (2.1×) is the "many real findings" worst case. +2. **More findings ⇒ larger Path B output ⇒ lower saving** — but Path B still wins + in every case, and a richer diagnosis is the point, not waste. +3. **Path A skill size feeds the ratio.** Growing a `SKILL.md` raises Path A and + thus the measured saving. (E.g. `data-modeling` grew when the large-field-split + rule was added, nudging `data-integrity` saving up.) +4. **Single-pass payloads.** These are one-shot context sizes. **Multi-turn is + larger**: a text skill is re-sent on every turn, so end-to-end savings widen + (~8× modeled in the cross-tool report). The router path stays 2–3 lean turns. +5. **Path A is a faithful reconstruction**, not two live agent runs — the payload + bytes are real; the turn model is an estimate. For an exact end-to-end figure, + run the same prompt both ways and diff `usage_input_tokens` per turn from the + Copilot session store. + +## Related + +- Measured results: [`RESULTS.md`](RESULTS.md). +- The router being measured: [`../knowledge-base/`](../knowledge-base/) (`kb.json`, `kb-route.sh`, `kb_route.py`). +- The diagnostic scripts being measured: [`../scripts/`](../scripts/). diff --git a/token-tests/RESULTS.md b/token-tests/RESULTS.md new file mode 100644 index 0000000..605cdd5 --- /dev/null +++ b/token-tests/RESULTS.md @@ -0,0 +1,107 @@ +# Token-Saving Results + +> ## Scope: this measures CONTEXT PAYLOAD, not end-to-end cost +> +> Every number below is a real `wc -c` byte count of real command output, +> converted with `tokens ≈ bytes / 4`. **No model is called**, so these are not +> measured consumption and there is no check that either path reaches the +> correct answer. +> +> **That does not make the comparison unfair.** The obvious objection — that +> `bytes/4` is a rule of thumb and JSON tokenises differently from prose — was +> tested against a real tokeniser (`o200k_base`) on the actual payloads: +> +> | | `bytes/4` | real tokeniser | +> |---|---|---| +> | Path A total | 3,063 tok | 3,327 tok | +> | Path B total | 551 tok | 613 tok | +> | **ratio** | **5.56×** | **5.43×** | +> | **saving** | **82.0%** | **81.6%** | +> +> Per file the proxy is off by up to 33%, but the errors **largely cancel in +> the ratio** because both paths mix prose and structured output. The ratio +> error is **+2.4%**. Re-check any time with +> [`validate-proxy.py`](validate-proxy.py). +> +> So the saving rates below are sound **for what they measure**: how much +> context each route puts in front of a model, in a single pass. +> +> **What they cannot tell you**, and what +> [`benchmarks/documentdb-route-efficiency/`](../benchmarks/documentdb-route-efficiency/README.md) +> is built to measure instead: +> +> - **Multi-turn cost.** A `SKILL.md` is sent once then served from cache at +> ~10% of the rate; the text route may also need several turns, each +> re-sending context. These pull in opposite directions and neither is +> visible here. +> - **Output and reasoning tokens**, which are billed and not counted here. +> - **Correctness.** A route that is cheaper because it answers *worse* has +> saved nothing. Nothing below checks that. +> +> The two are complementary, not competing: this is the cheap, credential-free +> payload bound; that one is the measured end-to-end cost, gated on parity. +Measured token cost of answering the same DocumentDB diagnostic question two +ways (see [`README.md`](README.md) for the full methodology): + +- **Path A — text skill:** load the relevant `SKILL.md` into context, then run the + mongosh/psql commands it prescribes and feed the **raw output** back to the model. +- **Path B — KB router + script:** `kb-route.sh` (executed, not loaded) → the exact + script → its **compact answer** into context. + +`tokens ≈ bytes / 4`. `ratio = A_tok / B_tok`; `saving = (A_tok − B_tok) / A_tok`. +Every payload is a real `wc -c` byte count. + +## Result (quickstart datasets: `contoso`, `ecommerce`, `idx_test`) + +| Tool | Dataset | Path A tok | Path B tok | Ratio | Saving | +|---|---|--:|--:|--:|--:| +| document-bloat-advisor | contoso | 4,732 | 267 | 17.7× | 94.4% | +| document-bloat-advisor | ecommerce | 3,793 | 127 | 29.9× | 96.7% | +| index-redundancy-finder | ecommerce | 2,750 | 200 | 13.8× | 92.7% | +| index-redundancy-finder | idx_test | 1,725 | 834 | 2.1× | 51.7% | +| perf-advisor | contoso | 4,732 | 1,448 | 3.3× | 69.4% | +| perf-advisor | ecommerce | 3,792 | 1,480 | 2.6× | 61.0% | +| data-integrity-check | contoso | 2,213 | 233 | 9.5× | 89.5% | +| data-integrity-check | ecommerce | 682 | 156 | 4.4× | 77.1% | +| db-config-advisor | contoso | 1,072 | 244 | 4.4× | 77.2% | + +**9 (tool, dataset) pairs · single-pass token saving 52%–97% · median 77%.** + +Raw data: [`results-settled.tsv`](results-settled.tsv). Reproduce with +`bash token-ab-measure.sh | python3 summarize.py`. + +## Per-tool summary + +| Tool | Saving | Note | +|---|--:|---| +| document-bloat-advisor | **94–97%** | most stable; tiny JSON verdict | +| index-redundancy-finder | **52–93%** | volatile: depends on #findings + index-usage stats | +| data-integrity-check | **77–90%** | scales with #orphans / type issues | +| db-config-advisor | **~77%** | single dataset measured | +| perf-advisor | **61–69%** | larger JSON (full multi-check report) | + +## Why Path B wins (beyond token count) + +- The router files (`kb.json`, `kb-route.sh`, `kb_route.py`) are **executed, not + loaded into context** — they cost the model **0 tokens**. +- The scripts return a **compact structured verdict** instead of raw + `getIndexes`/`stats`/`explain`/`findOne` dumps. +- **Multi-turn widens the gap:** a text skill is re-sent on every turn, while the + router path stays 2–3 lean turns (≈8× end-to-end, modeled). +- **Correctness:** for TOAST (`document-bloat`) and cache (`db-config`), the root + cause is a PostgreSQL storage effect a Mongo-layer skill can't reach; the scripts + do the cross-layer analysis deterministically. + +## Caveats + +- **Single-pass payloads** (`bytes/4`); treat token columns as ±20%. +- **`index-redundancy-finder` is workload-volatile** — its `UNUSED_VERIFIED` + findings depend on PostgreSQL index-usage stats. Right after a container restart + every index looks unused → larger output → lower saving (~2×); warm it and the + saving rises (~13.8×). Its `idx_test` row is the "many real findings" worst case. +- **More findings ⇒ bigger Path B output ⇒ lower saving** — but Path B still wins + everywhere, and a richer diagnosis is the point. +- **Path A is a faithful reconstruction** of the skill-guided commands, not two live + agent runs; payload bytes are real, the multi-turn model is an estimate. For an + exact end-to-end figure, run the same prompt both ways and diff + `usage_input_tokens` per turn from the agent session store. diff --git a/token-tests/results-settled.tsv b/token-tests/results-settled.tsv new file mode 100644 index 0000000..3e81e91 --- /dev/null +++ b/token-tests/results-settled.tsv @@ -0,0 +1,10 @@ +tool dataset skill A_skill_B A_raw_B A_total_B A_tok B_route_B B_script_B B_total_B B_tok ratio +document-bloat-advisor contoso query-optimizer 9797 9130 18927 4732 501 566 1067 267 17.7 +document-bloat-advisor ecommerce query-optimizer 9797 5375 15172 3793 503 3 506 127 30.0 +index-redundancy-finder ecommerce indexing 3147 7853 11000 2750 544 255 799 200 13.8 +index-redundancy-finder idx_test indexing 3147 3751 6898 1725 543 2793 3336 834 2.1 +perf-advisor contoso query-optimizer 9797 9130 18927 4732 413 5379 5792 1448 3.3 +perf-advisor ecommerce query-optimizer 9797 5369 15166 3792 415 5503 5918 1480 2.6 +data-integrity-check contoso data-modeling 2181 6668 8849 2213 477 454 931 233 9.5 +data-integrity-check ecommerce data-modeling 2181 544 2725 682 479 143 622 156 4.4 +db-config-advisor contoso storage(no-local-cmds) 2763 1523 4286 1072 484 491 975 244 4.4 diff --git a/token-tests/summarize.py b/token-tests/summarize.py new file mode 100755 index 0000000..2baa065 --- /dev/null +++ b/token-tests/summarize.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +"""summarize.py — turn token-ab-measure.sh TSV into a ratio / saving-rate table. + +Reads the harness TSV on stdin (the header row is +`tool dataset skill A_skill_B A_raw_B A_total_B A_tok B_route_B B_script_B + B_total_B B_tok ratio`) and prints, per (tool, dataset): + + ratio = A_tok / B_tok (how many times bigger Path A is) + saving = (A_tok - B_tok) / A_tok (fraction of tokens avoided by Path B) + +Usage: + bash token-ab-measure.sh | python3 summarize.py + python3 summarize.py < results-settled.tsv + python3 summarize.py --md < results-settled.tsv # GitHub-markdown table +""" + +import sys + + +def main(): + as_md = "--md" in sys.argv[1:] + rows = [] + for line in sys.stdin: + line = line.rstrip("\n") + if not line or line.startswith("tool\t") or line.startswith("#"): + continue + parts = line.split("\t") + if len(parts) < 12: + continue + tool, dataset = parts[0], parts[1] + try: + a_tok = float(parts[6]) + b_tok = float(parts[10]) + except ValueError: + continue + ratio = a_tok / b_tok if b_tok else float("inf") + saving = (a_tok - b_tok) / a_tok if a_tok else 0.0 + rows.append((tool, dataset, int(a_tok), int(b_tok), ratio, saving)) + + if not rows: + print("no data rows parsed from stdin", file=sys.stderr) + sys.exit(1) + + if as_md: + print("| Tool | Dataset | Path A tok | Path B tok | Ratio | Saving |") + print("|---|---|--:|--:|--:|--:|") + for tool, ds, a, b, ratio, saving in rows: + print(f"| {tool} | {ds} | {a:,} | {b:,} | {ratio:.1f}× | {saving*100:.1f}% |") + else: + w = max(len(r[0]) for r in rows) + print(f"{'tool':<{w}} {'dataset':<12} {'A_tok':>7} {'B_tok':>7} " + f"{'ratio':>7} {'saving':>7}") + print("-" * (w + 44)) + for tool, ds, a, b, ratio, saving in rows: + print(f"{tool:<{w}} {ds:<12} {a:>7} {b:>7} {ratio:>6.1f}x {saving*100:>6.1f}%") + + savings = [r[5] for r in rows] + print() + print(f"# {len(rows)} (tool,dataset) pairs · saving range " + f"{min(savings)*100:.0f}%–{max(savings)*100:.0f}% " + f"· median {sorted(savings)[len(savings)//2]*100:.0f}%") + + +if __name__ == "__main__": + main() diff --git a/token-tests/token-ab-measure.sh b/token-tests/token-ab-measure.sh new file mode 100755 index 0000000..e2fe2da --- /dev/null +++ b/token-tests/token-ab-measure.sh @@ -0,0 +1,143 @@ +#!/usr/bin/env bash +# token-ab-measure.sh — empirically measure the context payload (bytes -> tokens) +# of two ways to answer the same DocumentDB diagnostic question: +# +# Path A (text skill): load the relevant SKILL.md into context, then run the +# manual mongosh/psql commands that skill prescribes and +# feed their RAW output back into context for the LLM to +# interpret. +# Path B (KB router): run kb-route.sh (NL -> exact script; router files are +# executed, not loaded) and feed the SCRIPT's own compact +# answer into context. +# +# We measure real bytes with `wc -c` and convert with tokens ~= bytes/4. +# Output: TSV with one row per (tool, dataset). Pipe to summarize.py for a +# ratio / saving-rate table: bash token-ab-measure.sh | python3 summarize.py +set -uo pipefail + +# Repo root = parent of this script's directory (token-tests/ is a child of it), +# so the harness is portable regardless of the absolute checkout path. +KIT="${KIT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}" +CONTAINER="${CONTAINER:-documentdb-local}" +PORT="${PORT:-10260}" +PG_PORT="${PG_PORT:-9712}" +PG_USER="${PG_USER:-documentdb}" +DB_USER="${DB_USER:-docdbadmin}" +PASSWORD="${DB_PASSWORD:-}" + +mongo() { # $1=db $2=eval -> raw output bytes on stdout + docker exec "$CONTAINER" mongosh "localhost:${PORT}/$1" \ + -u "$DB_USER" -p "$PASSWORD" --authenticationMechanism SCRAM-SHA-256 \ + --tls --tlsAllowInvalidCertificates --quiet --eval "$2" 2>/dev/null +} +bytes() { wc -c | tr -d ' '; } +tok() { awk -v b="$1" 'BEGIN{printf "%d", (b+3)/4}'; } + +[[ -z "$PASSWORD" ]] && { echo "Error: no password. Set DB_PASSWORD (e.g. export DB_PASSWORD='')." >&2; exit 1; } + +# ── Path A raw-output collectors (faithful to each skill's prescribed commands) ── +# query-optimizer skill: getIndexes + stats + $indexStats + explain + findOne(sample) +raw_query_optimizer() { # $1=db $2=coll ; the "slow aggregation" workflow + local db="$1" c="$2" + mongo "$db" "JSON.stringify(db.${c}.getIndexes())" + mongo "$db" "JSON.stringify(db.${c}.stats())" + mongo "$db" "JSON.stringify(db.${c}.aggregate([{\$indexStats:{}}]).toArray())" + mongo "$db" "JSON.stringify(db.${c}.aggregate([{\$group:{_id:\"\$state\",v:{\$sum:\"\$est_value\"}}}]).explain(\"executionStats\"))" + mongo "$db" "JSON.stringify(db.${c}.findOne())" # sample doc: pulls big text on bloated collections +} +# indexing skill: per-collection getIndexes + $indexStats across the DB +raw_indexing() { # $1=db + local db="$1" + local colls; colls=$(mongo "$db" "db.getCollectionNames().join(' ')") + for c in $colls; do + mongo "$db" "JSON.stringify(db.${c}.getIndexes())" + mongo "$db" "JSON.stringify(db.${c}.aggregate([{\$indexStats:{}}]).toArray())" + done +} +# data-modeling skill: NOTE — this skill is about embed-vs-reference DESIGN, not +# integrity checking; no text skill covers referential integrity, so a Path-A +# agent must improvise $lookup orphan probes. We run a representative set for the +# known datasets (what a competent agent would try by hand). +raw_data_modeling() { # $1=db + local db="$1" + mongo "$db" "db.getCollectionNames()" + if [[ "$db" == ecommerce* || "$db" == test_ecom* ]]; then + mongo "$db" "JSON.stringify(db.orders.findOne())" + mongo "$db" "JSON.stringify(db.order_items.findOne())" + mongo "$db" "JSON.stringify(db.orders.aggregate([{\$lookup:{from:\"customers\",localField:\"customer_id\",foreignField:\"customer_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" + mongo "$db" "JSON.stringify(db.order_items.aggregate([{\$lookup:{from:\"orders\",localField:\"order_id\",foreignField:\"order_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" + mongo "$db" "JSON.stringify(db.order_items.aggregate([{\$lookup:{from:\"products\",localField:\"product_id\",foreignField:\"product_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" + mongo "$db" "JSON.stringify(db.reviews.aggregate([{\$lookup:{from:\"products\",localField:\"product_id\",foreignField:\"product_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" + else + mongo "$db" "JSON.stringify(db.opportunities.findOne())" + mongo "$db" "JSON.stringify(db.opportunities.aggregate([{\$lookup:{from:\"accounts\",localField:\"account_id\",foreignField:\"_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" + mongo "$db" "JSON.stringify(db.opportunities.aggregate([{\$lookup:{from:\"campaigns\",localField:\"campaign_id\",foreignField:\"_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" + fi +} +# storage/monitoring skills give NO local commands; agent improvises psql for config/cache +raw_config_improv() { # (db-agnostic instance view an agent would eventually gather) + docker exec "$CONTAINER" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d postgres -c \ + "SELECT name,setting,unit FROM pg_settings WHERE name IN ('shared_buffers','effective_cache_size','work_mem','maintenance_work_mem');" 2>/dev/null + docker exec "$CONTAINER" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d postgres -c \ + "SELECT relname, heap_blks_read, heap_blks_hit FROM pg_statio_user_tables ORDER BY heap_blks_hit DESC LIMIT 20;" 2>/dev/null +} + +# ── per-tool spec: tool | skill_file | pathB_script + json flag ───────────── +skill_bytes() { wc -c < "${KIT}/skills/$1/SKILL.md" | tr -d ' '; } +route_bytes() { # $1=query $2=db -> bytes of router json + bash "${KIT}/knowledge-base/kb-route.sh" --json --db "$2" "$1" 2>/dev/null | bytes +} + +printf 'tool\tdataset\tskill\tA_skill_B\tA_raw_B\tA_total_B\tA_tok\tB_route_B\tB_script_B\tB_total_B\tB_tok\tratio\n' + +emit() { # tool dataset skill A_skill A_raw B_route B_script query + local tool="$1" ds="$2" skill="$3" a_skill="$4" a_raw="$5" b_route="$6" b_script="$7" + local a_total=$((a_skill + a_raw)) b_total=$((b_route + b_script)) + local a_tok b_tok ratio + a_tok=$(tok "$a_total"); b_tok=$(tok "$b_total") + ratio=$(awk -v a="$a_total" -v b="$b_total" 'BEGIN{ if(b<=0){print "-"}else{printf "%.1f", a/b} }') + printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ + "$tool" "$ds" "$skill" "$a_skill" "$a_raw" "$a_total" "$a_tok" "$b_route" "$b_script" "$b_total" "$b_tok" "$ratio" +} + +# 1) document-bloat-advisor (skill: query-optimizer) +for ds in contoso ecommerce; do + coll="opportunities"; [[ "$ds" == "ecommerce" ]] && coll="orders" + a_raw=$(raw_query_optimizer "$ds" "$coll" | bytes) + b_route=$(route_bytes "why are my aggregations slow, are documents too big" "$ds") + b_script=$(bash "${KIT}/scripts/document-bloat-advisor.sh" --db "$ds" --json 2>/dev/null | bytes) + emit "document-bloat-advisor" "$ds" "query-optimizer" "$(skill_bytes query-optimizer)" "$a_raw" "$b_route" "$b_script" +done + +# 2) index-redundancy-finder (skill: indexing) +for ds in ecommerce idx_test; do + a_raw=$(raw_indexing "$ds" | bytes) + b_route=$(route_bytes "do I have redundant or unused indexes" "$ds") + b_script=$(bash "${KIT}/scripts/index-redundancy-finder.sh" --db "$ds" --json 2>/dev/null | bytes) + emit "index-redundancy-finder" "$ds" "indexing" "$(skill_bytes indexing)" "$a_raw" "$b_route" "$b_script" +done + +# 3) perf-advisor (skill: query-optimizer ; script has no --json -> plain output) +for ds in contoso ecommerce; do + coll="opportunities"; [[ "$ds" == "ecommerce" ]] && coll="orders" + a_raw=$(raw_query_optimizer "$ds" "$coll" | bytes) + b_route=$(route_bytes "give my database a performance checkup" "$ds") + b_script=$(bash "${KIT}/scripts/perf-advisor.sh" --db "$ds" --json 2>/dev/null | bytes) + emit "perf-advisor" "$ds" "query-optimizer" "$(skill_bytes query-optimizer)" "$a_raw" "$b_route" "$b_script" +done + +# 4) data-integrity-check (skill: data-modeling ; script plain output) +for ds in contoso ecommerce; do + a_raw=$(raw_data_modeling "$ds" | bytes) + b_route=$(route_bytes "check my data integrity for orphaned references" "$ds") + b_script=$(bash "${KIT}/scripts/data-integrity-check.sh" --db "$ds" --json 2>/dev/null | bytes) + emit "data-integrity-check" "$ds" "data-modeling" "$(skill_bytes data-modeling)" "$a_raw" "$b_route" "$b_script" +done + +# 5) db-config-advisor (no local skill; agent improvises psql -> storage skill loaded) +for ds in contoso; do + a_raw=$(raw_config_improv | bytes) + b_route=$(route_bytes "is my cache big enough, should I increase shared_buffers" "$ds") + b_script=$(bash "${KIT}/scripts/db-config-advisor.sh" --db "$ds" --json 2>/dev/null | bytes) + emit "db-config-advisor" "$ds" "storage(no-local-cmds)" "$(skill_bytes storage)" "$a_raw" "$b_route" "$b_script" +done diff --git a/token-tests/validate-proxy.py b/token-tests/validate-proxy.py new file mode 100644 index 0000000..16d4fcd --- /dev/null +++ b/token-tests/validate-proxy.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +"""Validate the `bytes / 4` proxy against a real tokeniser. + +WHY THIS EXISTS +--------------- +`token-ab-measure.sh` estimates tokens as `bytes / 4`. The obvious objection is +that this is a rule of thumb: JSON and English prose tokenise at different +rates, so the estimate must be wrong. + +It IS wrong per-file — measurably so. But the harness reports a RATIO between +two paths, and the errors largely cancel, because both paths contain a similar +mix of prose and structured output. Measured on real payloads from this repo: + + payload bytes/4 real tokens error + A: SKILL.md 2449 2416 +1% + A: raw output 613 911 -33% + B: router json 128 161 -20% + B: script json 423 452 -6% + + ratio bytes/4 : 5.56x (82.0% saving) + ratio real : 5.43x (81.6% saving) + ratio error : +2.4% + +So the proxy is a poor estimator of ABSOLUTE token counts and a good estimator +of the RELATIVE saving, which is what the harness actually claims. + +This script re-runs that check so the claim stays verifiable rather than +becoming folklore. + + pip install tiktoken + python3 validate-proxy.py --vs + +Exits non-zero if the ratio error exceeds --tolerance (default 10%), which +would mean the proxy has stopped being trustworthy for this payload mix. +""" +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +# o200k_base is the GPT-5-era encoding. Other model families tokenise slightly +# differently, which is itself part of the point: no single proxy is exact for +# all of them, so the harness should be judged on the ratio, not the absolute. +ENCODING = "o200k_base" + + +def measure(paths: list[Path], enc) -> tuple[int, int]: + total_bytes = total_tokens = 0 + for p in paths: + raw = p.read_bytes() + total_bytes += len(raw) + total_tokens += len(enc.encode(raw.decode("utf-8", errors="ignore"))) + return total_bytes, total_tokens + + +def main(argv=None) -> int: + ap = argparse.ArgumentParser(description=__doc__.split("\n")[0]) + ap.add_argument("path_a", nargs="+", type=Path, help="Path A payload files") + ap.add_argument("--vs", nargs="+", type=Path, required=True, + help="Path B payload files") + ap.add_argument("--tolerance", type=float, default=0.10, + help="max acceptable relative error on the RATIO (default 0.10)") + args = ap.parse_args(argv) + + try: + import tiktoken + except ImportError: + print("tiktoken is required: pip install tiktoken", file=sys.stderr) + return 2 + + enc = tiktoken.get_encoding(ENCODING) + + a_bytes, a_tokens = measure(args.path_a, enc) + b_bytes, b_tokens = measure(args.vs, enc) + + if not b_tokens or not b_bytes: + print("Path B is empty; nothing to compare", file=sys.stderr) + return 2 + + ratio_proxy = (a_bytes / 4) / (b_bytes / 4) # == a_bytes / b_bytes + ratio_real = a_tokens / b_tokens + error = ratio_proxy / ratio_real - 1 + + print(f"encoding: {ENCODING}") + print(f"{'':14} {'bytes':>8} {'bytes/4':>9} {'real tok':>9}") + print(f"{'Path A':14} {a_bytes:>8} {a_bytes // 4:>9} {a_tokens:>9}") + print(f"{'Path B':14} {b_bytes:>8} {b_bytes // 4:>9} {b_tokens:>9}") + print() + print(f"ratio bytes/4 : {ratio_proxy:.2f}x saving {1 - b_bytes / a_bytes:.1%}") + print(f"ratio real : {ratio_real:.2f}x saving {1 - b_tokens / a_tokens:.1%}") + print(f"ratio error : {error:+.1%}") + + if abs(error) > args.tolerance: + print(f"\nFAIL: ratio error exceeds {args.tolerance:.0%}. The bytes/4 " + f"proxy is no longer reliable for this payload mix.", file=sys.stderr) + return 1 + print(f"\nOK: within {args.tolerance:.0%} — the proxy is sound for the ratio.") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From 3cef893a2d397192cc9db867ba363c7a0eaa819e Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 18 Aug 2026 23:39:52 +0000 Subject: [PATCH 30/52] Decouple the testing suite and route benchmark from token-tests/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit token-tests/ is a separate, local study and is not being checked in. Three places had grown a dependency on it, all of which I introduced for convenience rather than because it belonged there. WHAT WAS WRONG The proxy-validation tests lived in scenarios/route-efficiency/ because that is where I happened to be editing. They exercise token-tests/, not benchmarks/documentdb-route-efficiency/, and the two share no code. That meant: - removing or moving token-tests/ would break an unrelated scenario - `pytest -m routeefficiency` silently ran checks that are not about route efficiency - anyone looking for token-tests coverage would not think to look there REMOVED - the 3 bytes/4-proxy tests from scenarios/route-efficiency/ - the scenarios/token-proxy/ scenario I had just created for them, which had the same problem in a different shape: it made the committed suite depend on an uncommitted directory - tiktoken from testing/requirements.txt (it was only for that validation) - the token-tests citation from summarize.py's report footer; the benchmark should not quote an external study that is not in the tree. Replaced with a note on how to read the saving on its own terms. token-tests/ is untracked (git rm --cached) and gitignored. The files stay on disk as a local tool. Also fixed a dangling comma in docs/SKILLS.md left by the reference removal — the sentence ended mid-clause. VERIFIED BY DELETION, not by inspection: moved token-tests/ out of the tree entirely and ran the full suite. 172 passed. The dependency is gone rather than merely unexercised. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .gitignore | 3 + .../documentdb-route-efficiency/README.md | 2 +- .../results/README.md | 3 - .../documentdb-route-efficiency/summarize.py | 10 +- docs/DIAGNOSTICS.md | 14 +- docs/SKILLS.md | 3 +- testing/requirements.txt | 2 - .../tests/test_route_efficiency.py | 72 --------- token-tests/README.md | 111 -------------- token-tests/RESULTS.md | 107 ------------- token-tests/results-settled.tsv | 10 -- token-tests/summarize.py | 65 -------- token-tests/token-ab-measure.sh | 143 ------------------ token-tests/validate-proxy.py | 103 ------------- 14 files changed, 11 insertions(+), 637 deletions(-) delete mode 100644 token-tests/README.md delete mode 100644 token-tests/RESULTS.md delete mode 100644 token-tests/results-settled.tsv delete mode 100755 token-tests/summarize.py delete mode 100755 token-tests/token-ab-measure.sh delete mode 100644 token-tests/validate-proxy.py diff --git a/.gitignore b/.gitignore index ea1f005..51ec632 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,6 @@ __pycache__/ # Generated benchmark output (regenerate via scenarios/contoso/scaling-benchmark/) scenarios/contoso/scaling-benchmark/results.tsv + +# Local token-payload study — not checked in. +token-tests/ diff --git a/benchmarks/documentdb-route-efficiency/README.md b/benchmarks/documentdb-route-efficiency/README.md index d31f908..e8abe9c 100644 --- a/benchmarks/documentdb-route-efficiency/README.md +++ b/benchmarks/documentdb-route-efficiency/README.md @@ -33,7 +33,7 @@ reset. This is the part most easily got wrong. |---|---|---| | **Conversation history** | a second run could answer from the first run's reasoning | one fresh agent session per run; no multi-turn reuse across runs | | **Prompt cache** | a warm cache makes the same payload cost far less | arm order is **randomised per iteration**, so warmth cannot systematically favour one arm | -| **Database state** | `$indexStats` / `idx_scan` counters accumulate; `index-redundancy-finder`'s *unused* findings depend on them, and the old `token-tests` README documents exactly this volatility (52% → 93% depending on warmth) | **a fresh database per run**, uniquely named, seeded from the same deterministic fixture | +| **Database state** | `$indexStats` / `idx_scan` counters accumulate; `index-redundancy-finder`'s *unused* findings depend on them | **a fresh database per run**, uniquely named, seeded from the same deterministic fixture | | **Planner statistics** | stale stats flip query plans (this caused a real 2-in-7 flake in Loop A) | `ANALYZE` after every seed | | **Filesystem** | a leftover script or `SKILL.md` silently converts one arm into the other | the arm installer **deletes the other route** and asserts it is gone | | **Answer file** | a stale `/output/finding.json` would be graded as this run's answer | removed before each run | diff --git a/benchmarks/documentdb-route-efficiency/results/README.md b/benchmarks/documentdb-route-efficiency/results/README.md index 4230444..dba502c 100644 --- a/benchmarks/documentdb-route-efficiency/results/README.md +++ b/benchmarks/documentdb-route-efficiency/results/README.md @@ -32,6 +32,3 @@ python3 ../summarize.py raw --json > "$(date -u +%F)-route-efficiency.json" harness, arms, fixture and parity grader are built and validated; see [`../README.md`](../README.md). -Until a run exists, the kit's published token claim remains the **estimate** in -[`../../../token-tests/RESULTS.md`](../../../token-tests/RESULTS.md), which is -`bytes/4` payload arithmetic with no model and no correctness check. diff --git a/benchmarks/documentdb-route-efficiency/summarize.py b/benchmarks/documentdb-route-efficiency/summarize.py index 5af8663..e58371e 100644 --- a/benchmarks/documentdb-route-efficiency/summarize.py +++ b/benchmarks/documentdb-route-efficiency/summarize.py @@ -155,12 +155,10 @@ def render(summary: dict, runs: list[dict]) -> str: A("---") A("") - A("**Alongside the payload measurement.** `token-tests/` reports a 52–97% " - "saving (median 77%) in *context payload* — validated against a real " - "tokeniser to within 2.4%. That measures how much context each route " - "sends in one pass. The numbers above measure something different: " - "end-to-end cost, gated on reaching the correct answer. Both can be true " - "at once, and quoting them together is stronger than either alone.") + A("**How to read the saving.** It is a comparison of end-to-end cost " + "between two routes that both reached the correct finding. It is not a " + "context-size ratio: caching, turn count, and output tokens all move it, " + "and none of them are visible in a payload measurement.") return "\n".join(L) diff --git a/docs/DIAGNOSTICS.md b/docs/DIAGNOSTICS.md index cd3cd2f..5a5efa7 100644 --- a/docs/DIAGNOSTICS.md +++ b/docs/DIAGNOSTICS.md @@ -15,7 +15,6 @@ and `python3` on the host — no MCP server, no cloud, no API keys. | Knowledge-base router | [`knowledge-base/`](../knowledge-base/README.md) | Deterministic NL question → exact script (no LLM at routing time). | | Demo datasets | [`scenarios/ecommerce/`](../scenarios/ecommerce/), [`scenarios/contoso/`](../scenarios/contoso/README.md) | Seeders that plant the problems the tools find. | | Regression tests | [`testing/`](../testing/README.md) | Fixture-first contracts that guard the scripts. | -| Token study | [`token-tests/`](../token-tests/README.md) | Measured token savings of scripts vs text-skill workflows. | --- @@ -29,11 +28,11 @@ password; the scripts read it from `DB_USER` (default `docdbadmin`) and docker run -dt --name documentdb-local \ -p 10260:10260 \ -e USERNAME=docdbadmin \ - -e PASSWORD=Test1234 \ + -e PASSWORD=[YOUR_PASSWORD] \ ghcr.io/microsoft/documentdb/documentdb-local:latest # the scripts require a password — export it once (or pass --password each time) -export DB_PASSWORD=Test1234 +export DB_PASSWORD=[YOUR_PASSWORD] # preflight: confirm the engine answers (should print "1") docker exec documentdb-local psql -h localhost -p 9712 -U documentdb -d postgres -tAc "SELECT 1" @@ -108,15 +107,6 @@ bash scripts/document-bloat-advisor.sh --db contoso # opportunities now clea bash testing/run.sh # fixture-first contracts; auto-creates a venv ``` -## 6. Reproduce the token study (optional) - -```bash -cd token-tests -bash token-ab-measure.sh | python3 summarize.py # see RESULTS.md for the table -``` - ---- - ## Connection defaults | Setting | Default | Override | diff --git a/docs/SKILLS.md b/docs/SKILLS.md index a657508..7df967b 100644 --- a/docs/SKILLS.md +++ b/docs/SKILLS.md @@ -63,8 +63,7 @@ Companion to the toolbox: the `data-modeling` skill's [`model-large-field-split`](../skills/data-modeling/model-large-field-split.md) rule explains the TOAST anti-pattern, and its analyzer [`scripts/toast-split-advisor.sh`](../scripts/toast-split-advisor.sh) measures it. -The scripts are guarded by the regression suite in [`../testing/`](../testing/README.md), -and their token efficiency is measured in [`../token-tests/RESULTS.md`](../token-tests/RESULTS.md). +The scripts are guarded by the regression suite in [`../testing/`](../testing/README.md). ## Use when diff --git a/testing/requirements.txt b/testing/requirements.txt index e634d67..fe477d8 100644 --- a/testing/requirements.txt +++ b/testing/requirements.txt @@ -1,5 +1,3 @@ pytest>=8.0 pyyaml>=6.0 pytest-timeout>=2.2 -# Optional: validates the bytes/4 proxy in token-tests/ against a real tokeniser. -tiktoken>=0.14.0 diff --git a/testing/scenarios/route-efficiency/tests/test_route_efficiency.py b/testing/scenarios/route-efficiency/tests/test_route_efficiency.py index 7b7fdc9..d1bd4e5 100644 --- a/testing/scenarios/route-efficiency/tests/test_route_efficiency.py +++ b/testing/scenarios/route-efficiency/tests/test_route_efficiency.py @@ -320,75 +320,3 @@ def test_published_rates_agree_with_copilot_credits(): conn.close() if not checked: pytest.skip("not enough local usage rows to cross-check") - - -# --------------------------------------------------------------------------- -# the bytes/4 proxy in token-tests/ -# -# The proxy was initially dismissed as unreliable because JSON and prose -# tokenise differently. Measured against a real tokeniser on the actual -# payloads, the per-file error reaches 33% but the RATIO error is only 2.4% — -# the errors largely cancel because both paths mix prose and structured output. -# The proxy is therefore a poor absolute estimator and a good relative one, -# which is what the harness reports. -# --------------------------------------------------------------------------- -TOKEN_TESTS = kit.REPO_DIR / "token-tests" - - -def test_proxy_validator_exists_and_is_runnable(): - """The 2.4% claim must stay checkable rather than becoming folklore.""" - script = TOKEN_TESTS / "validate-proxy.py" - assert script.is_file(), "token-tests/validate-proxy.py is missing" - src = script.read_text() - assert "tiktoken" in src - assert "--tolerance" in src, "the validator must fail when the proxy drifts" - - -def test_bytes_per_four_proxy_is_accurate_on_the_ratio(tmp_path): - """Reproduce the finding on representative payloads. - - Uses a real skill file (prose) plus synthetic JSON, so the mix matches what - the harness actually compares. - """ - tiktoken = pytest.importorskip("tiktoken", reason="tiktoken not installed") - enc = tiktoken.get_encoding("o200k_base") - - skill = kit.REPO_DIR / "skills" / "query-optimizer" / "SKILL.md" - if not skill.is_file(): - pytest.skip("query-optimizer SKILL.md not present") - - path_a = skill.read_text() - path_b = json.dumps({ - "findings": [ - {"collection": "accounts", "index": "tenant_id_1", - "rule": "PREFIX_REDUNDANT", "severity": "HIGH", - "reason": "Index {tenant_id} is a prefix of {tenant_id,status}"}, - {"collection": "accounts", "index": "email_1", - "rule": "DUPLICATE", "severity": "HIGH", - "reason": "Identical key to email_unique"}, - ]}, indent=2) - - a_b, b_b = len(path_a.encode()), len(path_b.encode()) - a_t, b_t = len(enc.encode(path_a)), len(enc.encode(path_b)) - - ratio_proxy = a_b / b_b - ratio_real = a_t / b_t - error = abs(ratio_proxy / ratio_real - 1) - - assert error < 0.20, ( - f"the bytes/4 proxy misstates the payload ratio by {error:.1%} " - f"(proxy {ratio_proxy:.2f}x vs real {ratio_real:.2f}x). If this has " - f"grown, token-tests/RESULTS.md needs re-validating." - ) - - -def test_docs_do_not_call_the_payload_study_superseded(): - """It measures context payload; this benchmark measures end-to-end cost and - correctness. Different questions, both valid — and this benchmark has no - results yet, so it cannot supersede anything.""" - for rel in ("token-tests/RESULTS.md", - "benchmarks/documentdb-route-efficiency/README.md"): - text = (kit.REPO_DIR / rel).read_text().lower() - assert "supersede" not in text, ( - f"{rel} still describes the payload study as superseded" - ) diff --git a/token-tests/README.md b/token-tests/README.md deleted file mode 100644 index bd4e9a6..0000000 --- a/token-tests/README.md +++ /dev/null @@ -1,111 +0,0 @@ -# Token-Saving A/B Tests - -Empirically measures the **context-token cost** of answering a DocumentDB -diagnostic question two ways, so the kit's "scripts save tokens" claim is a -*measured* number, not a marketing line. - -- **Path A — text skill:** load the relevant `skills//SKILL.md` into the - model's context, then run the mongosh/psql commands that skill prescribes and - feed their **raw output** back into context for the model to interpret. -- **Path B — KB router + script:** run `knowledge-base/kb-route.sh` (natural - language → exact script; the router files are **executed, not loaded into - context**) and feed the script's **compact answer** into context. - -`tokens ≈ bytes / 4` (standard English/JSON BPE heuristic). Every payload is a -real byte count via `wc -c`; nothing is estimated except that 4-bytes/token -conversion and the multi-turn model (see Caveats). - -## Files - -| File | Role | -|------|------| -| `token-ab-measure.sh` | The harness. Emits a TSV, one row per (tool, dataset). Path-portable (derives the repo root from its own location). | -| `summarize.py` | Turns the harness TSV into a ratio / saving-rate table (`--md` for markdown). | -| `results-settled.tsv` | A captured snapshot (raw TSV). | -| `RESULTS.md` | The measured saving-rate table + per-tool summary (rendered results). | - -## Prerequisites - -- The `documentdb-local` container **Up**, with `DB_PASSWORD` exported and the - demo databases seeded: - ```bash - export DB_PASSWORD='' # the seeders/scripts require this - bash ../scenarios/ecommerce/seed.sh # ecommerce - bash ../scenarios/contoso/seed.sh # contoso (TOAST demo) - bash ../scenarios/index-redundancy/seed.sh # idx_test (redundant indexes) - ``` - If the container is stopped: `docker start documentdb-local`. -- `python3` + `bash` on the host. No other dependencies. - -## Reproduce - -From this directory (`token-tests/`): - -```bash -# 1. run the A/B measurement (writes a TSV to stdout) -bash token-ab-measure.sh - -# 2. run it and render the ratio / saving-rate table -bash token-ab-measure.sh | python3 summarize.py - -# 3. markdown table (for a report/PR) -bash token-ab-measure.sh | python3 summarize.py --md - -# 4. re-summarize the saved snapshot without re-measuring -python3 summarize.py < results-settled.tsv -``` - -Override defaults via env vars if your setup differs: - -```bash -CONTAINER=my-docdb PORT=10260 PG_PORT=9712 DB_PASSWORD='' \ - bash token-ab-measure.sh -``` - -## What the harness measures per tool - -| Tool | Path A skill (commands it prescribes) | Path B (router + script) | -|------|----------------------------------------|--------------------------| -| `document-bloat-advisor` | `query-optimizer`: getIndexes + stats + $indexStats + explain + findOne | `document-bloat-advisor.sh --json` | -| `index-redundancy-finder` | `indexing`: per-collection getIndexes + $indexStats | `index-redundancy-finder.sh --json` | -| `perf-advisor` | `query-optimizer` workflow | `perf-advisor.sh --json` | -| `data-integrity-check` | `data-modeling`: $lookup orphan probes + findOne | `data-integrity-check.sh --json` | -| `db-config-advisor` | `storage` (no local commands) → agent improvises psql | `db-config-advisor.sh --json` | - -`ratio = A_tok / B_tok` · `saving = (A_tok − B_tok) / A_tok`. - -## Latest verified result - -See [`RESULTS.md`](RESULTS.md) for the full measured table (9 tool×dataset pairs, -single-pass token saving **52%–97%, median 77%**) and per-tool summary. Raw data in -[`results-settled.tsv`](results-settled.tsv). Regenerate anytime with -`bash token-ab-measure.sh | python3 summarize.py`. - -## Reproducibility caveats (read before comparing runs) - -1. **`index-redundancy-finder` output is workload-volatile.** Its `UNUSED_VERIFIED` - findings depend on PostgreSQL index-usage stats. **Right after a container - restart** every `idx_scan = 0`, so *all* secondary indexes are flagged unused - → a big Path B report → saving drops to ~2×. Once queries exercise the indexes - (or on a warm instance), that output shrinks → ~13.8×. Its *structural* - findings (prefix/duplicate) are stable; the *unused-index* ones are not. Treat - its saving as a **range (52–93%)**, and warm the DB before measuring for a - stable number. The `idx_test` row (2.1×) is the "many real findings" worst case. -2. **More findings ⇒ larger Path B output ⇒ lower saving** — but Path B still wins - in every case, and a richer diagnosis is the point, not waste. -3. **Path A skill size feeds the ratio.** Growing a `SKILL.md` raises Path A and - thus the measured saving. (E.g. `data-modeling` grew when the large-field-split - rule was added, nudging `data-integrity` saving up.) -4. **Single-pass payloads.** These are one-shot context sizes. **Multi-turn is - larger**: a text skill is re-sent on every turn, so end-to-end savings widen - (~8× modeled in the cross-tool report). The router path stays 2–3 lean turns. -5. **Path A is a faithful reconstruction**, not two live agent runs — the payload - bytes are real; the turn model is an estimate. For an exact end-to-end figure, - run the same prompt both ways and diff `usage_input_tokens` per turn from the - Copilot session store. - -## Related - -- Measured results: [`RESULTS.md`](RESULTS.md). -- The router being measured: [`../knowledge-base/`](../knowledge-base/) (`kb.json`, `kb-route.sh`, `kb_route.py`). -- The diagnostic scripts being measured: [`../scripts/`](../scripts/). diff --git a/token-tests/RESULTS.md b/token-tests/RESULTS.md deleted file mode 100644 index 605cdd5..0000000 --- a/token-tests/RESULTS.md +++ /dev/null @@ -1,107 +0,0 @@ -# Token-Saving Results - -> ## Scope: this measures CONTEXT PAYLOAD, not end-to-end cost -> -> Every number below is a real `wc -c` byte count of real command output, -> converted with `tokens ≈ bytes / 4`. **No model is called**, so these are not -> measured consumption and there is no check that either path reaches the -> correct answer. -> -> **That does not make the comparison unfair.** The obvious objection — that -> `bytes/4` is a rule of thumb and JSON tokenises differently from prose — was -> tested against a real tokeniser (`o200k_base`) on the actual payloads: -> -> | | `bytes/4` | real tokeniser | -> |---|---|---| -> | Path A total | 3,063 tok | 3,327 tok | -> | Path B total | 551 tok | 613 tok | -> | **ratio** | **5.56×** | **5.43×** | -> | **saving** | **82.0%** | **81.6%** | -> -> Per file the proxy is off by up to 33%, but the errors **largely cancel in -> the ratio** because both paths mix prose and structured output. The ratio -> error is **+2.4%**. Re-check any time with -> [`validate-proxy.py`](validate-proxy.py). -> -> So the saving rates below are sound **for what they measure**: how much -> context each route puts in front of a model, in a single pass. -> -> **What they cannot tell you**, and what -> [`benchmarks/documentdb-route-efficiency/`](../benchmarks/documentdb-route-efficiency/README.md) -> is built to measure instead: -> -> - **Multi-turn cost.** A `SKILL.md` is sent once then served from cache at -> ~10% of the rate; the text route may also need several turns, each -> re-sending context. These pull in opposite directions and neither is -> visible here. -> - **Output and reasoning tokens**, which are billed and not counted here. -> - **Correctness.** A route that is cheaper because it answers *worse* has -> saved nothing. Nothing below checks that. -> -> The two are complementary, not competing: this is the cheap, credential-free -> payload bound; that one is the measured end-to-end cost, gated on parity. -Measured token cost of answering the same DocumentDB diagnostic question two -ways (see [`README.md`](README.md) for the full methodology): - -- **Path A — text skill:** load the relevant `SKILL.md` into context, then run the - mongosh/psql commands it prescribes and feed the **raw output** back to the model. -- **Path B — KB router + script:** `kb-route.sh` (executed, not loaded) → the exact - script → its **compact answer** into context. - -`tokens ≈ bytes / 4`. `ratio = A_tok / B_tok`; `saving = (A_tok − B_tok) / A_tok`. -Every payload is a real `wc -c` byte count. - -## Result (quickstart datasets: `contoso`, `ecommerce`, `idx_test`) - -| Tool | Dataset | Path A tok | Path B tok | Ratio | Saving | -|---|---|--:|--:|--:|--:| -| document-bloat-advisor | contoso | 4,732 | 267 | 17.7× | 94.4% | -| document-bloat-advisor | ecommerce | 3,793 | 127 | 29.9× | 96.7% | -| index-redundancy-finder | ecommerce | 2,750 | 200 | 13.8× | 92.7% | -| index-redundancy-finder | idx_test | 1,725 | 834 | 2.1× | 51.7% | -| perf-advisor | contoso | 4,732 | 1,448 | 3.3× | 69.4% | -| perf-advisor | ecommerce | 3,792 | 1,480 | 2.6× | 61.0% | -| data-integrity-check | contoso | 2,213 | 233 | 9.5× | 89.5% | -| data-integrity-check | ecommerce | 682 | 156 | 4.4× | 77.1% | -| db-config-advisor | contoso | 1,072 | 244 | 4.4× | 77.2% | - -**9 (tool, dataset) pairs · single-pass token saving 52%–97% · median 77%.** - -Raw data: [`results-settled.tsv`](results-settled.tsv). Reproduce with -`bash token-ab-measure.sh | python3 summarize.py`. - -## Per-tool summary - -| Tool | Saving | Note | -|---|--:|---| -| document-bloat-advisor | **94–97%** | most stable; tiny JSON verdict | -| index-redundancy-finder | **52–93%** | volatile: depends on #findings + index-usage stats | -| data-integrity-check | **77–90%** | scales with #orphans / type issues | -| db-config-advisor | **~77%** | single dataset measured | -| perf-advisor | **61–69%** | larger JSON (full multi-check report) | - -## Why Path B wins (beyond token count) - -- The router files (`kb.json`, `kb-route.sh`, `kb_route.py`) are **executed, not - loaded into context** — they cost the model **0 tokens**. -- The scripts return a **compact structured verdict** instead of raw - `getIndexes`/`stats`/`explain`/`findOne` dumps. -- **Multi-turn widens the gap:** a text skill is re-sent on every turn, while the - router path stays 2–3 lean turns (≈8× end-to-end, modeled). -- **Correctness:** for TOAST (`document-bloat`) and cache (`db-config`), the root - cause is a PostgreSQL storage effect a Mongo-layer skill can't reach; the scripts - do the cross-layer analysis deterministically. - -## Caveats - -- **Single-pass payloads** (`bytes/4`); treat token columns as ±20%. -- **`index-redundancy-finder` is workload-volatile** — its `UNUSED_VERIFIED` - findings depend on PostgreSQL index-usage stats. Right after a container restart - every index looks unused → larger output → lower saving (~2×); warm it and the - saving rises (~13.8×). Its `idx_test` row is the "many real findings" worst case. -- **More findings ⇒ bigger Path B output ⇒ lower saving** — but Path B still wins - everywhere, and a richer diagnosis is the point. -- **Path A is a faithful reconstruction** of the skill-guided commands, not two live - agent runs; payload bytes are real, the multi-turn model is an estimate. For an - exact end-to-end figure, run the same prompt both ways and diff - `usage_input_tokens` per turn from the agent session store. diff --git a/token-tests/results-settled.tsv b/token-tests/results-settled.tsv deleted file mode 100644 index 3e81e91..0000000 --- a/token-tests/results-settled.tsv +++ /dev/null @@ -1,10 +0,0 @@ -tool dataset skill A_skill_B A_raw_B A_total_B A_tok B_route_B B_script_B B_total_B B_tok ratio -document-bloat-advisor contoso query-optimizer 9797 9130 18927 4732 501 566 1067 267 17.7 -document-bloat-advisor ecommerce query-optimizer 9797 5375 15172 3793 503 3 506 127 30.0 -index-redundancy-finder ecommerce indexing 3147 7853 11000 2750 544 255 799 200 13.8 -index-redundancy-finder idx_test indexing 3147 3751 6898 1725 543 2793 3336 834 2.1 -perf-advisor contoso query-optimizer 9797 9130 18927 4732 413 5379 5792 1448 3.3 -perf-advisor ecommerce query-optimizer 9797 5369 15166 3792 415 5503 5918 1480 2.6 -data-integrity-check contoso data-modeling 2181 6668 8849 2213 477 454 931 233 9.5 -data-integrity-check ecommerce data-modeling 2181 544 2725 682 479 143 622 156 4.4 -db-config-advisor contoso storage(no-local-cmds) 2763 1523 4286 1072 484 491 975 244 4.4 diff --git a/token-tests/summarize.py b/token-tests/summarize.py deleted file mode 100755 index 2baa065..0000000 --- a/token-tests/summarize.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python3 -"""summarize.py — turn token-ab-measure.sh TSV into a ratio / saving-rate table. - -Reads the harness TSV on stdin (the header row is -`tool dataset skill A_skill_B A_raw_B A_total_B A_tok B_route_B B_script_B - B_total_B B_tok ratio`) and prints, per (tool, dataset): - - ratio = A_tok / B_tok (how many times bigger Path A is) - saving = (A_tok - B_tok) / A_tok (fraction of tokens avoided by Path B) - -Usage: - bash token-ab-measure.sh | python3 summarize.py - python3 summarize.py < results-settled.tsv - python3 summarize.py --md < results-settled.tsv # GitHub-markdown table -""" - -import sys - - -def main(): - as_md = "--md" in sys.argv[1:] - rows = [] - for line in sys.stdin: - line = line.rstrip("\n") - if not line or line.startswith("tool\t") or line.startswith("#"): - continue - parts = line.split("\t") - if len(parts) < 12: - continue - tool, dataset = parts[0], parts[1] - try: - a_tok = float(parts[6]) - b_tok = float(parts[10]) - except ValueError: - continue - ratio = a_tok / b_tok if b_tok else float("inf") - saving = (a_tok - b_tok) / a_tok if a_tok else 0.0 - rows.append((tool, dataset, int(a_tok), int(b_tok), ratio, saving)) - - if not rows: - print("no data rows parsed from stdin", file=sys.stderr) - sys.exit(1) - - if as_md: - print("| Tool | Dataset | Path A tok | Path B tok | Ratio | Saving |") - print("|---|---|--:|--:|--:|--:|") - for tool, ds, a, b, ratio, saving in rows: - print(f"| {tool} | {ds} | {a:,} | {b:,} | {ratio:.1f}× | {saving*100:.1f}% |") - else: - w = max(len(r[0]) for r in rows) - print(f"{'tool':<{w}} {'dataset':<12} {'A_tok':>7} {'B_tok':>7} " - f"{'ratio':>7} {'saving':>7}") - print("-" * (w + 44)) - for tool, ds, a, b, ratio, saving in rows: - print(f"{tool:<{w}} {ds:<12} {a:>7} {b:>7} {ratio:>6.1f}x {saving*100:>6.1f}%") - - savings = [r[5] for r in rows] - print() - print(f"# {len(rows)} (tool,dataset) pairs · saving range " - f"{min(savings)*100:.0f}%–{max(savings)*100:.0f}% " - f"· median {sorted(savings)[len(savings)//2]*100:.0f}%") - - -if __name__ == "__main__": - main() diff --git a/token-tests/token-ab-measure.sh b/token-tests/token-ab-measure.sh deleted file mode 100755 index e2fe2da..0000000 --- a/token-tests/token-ab-measure.sh +++ /dev/null @@ -1,143 +0,0 @@ -#!/usr/bin/env bash -# token-ab-measure.sh — empirically measure the context payload (bytes -> tokens) -# of two ways to answer the same DocumentDB diagnostic question: -# -# Path A (text skill): load the relevant SKILL.md into context, then run the -# manual mongosh/psql commands that skill prescribes and -# feed their RAW output back into context for the LLM to -# interpret. -# Path B (KB router): run kb-route.sh (NL -> exact script; router files are -# executed, not loaded) and feed the SCRIPT's own compact -# answer into context. -# -# We measure real bytes with `wc -c` and convert with tokens ~= bytes/4. -# Output: TSV with one row per (tool, dataset). Pipe to summarize.py for a -# ratio / saving-rate table: bash token-ab-measure.sh | python3 summarize.py -set -uo pipefail - -# Repo root = parent of this script's directory (token-tests/ is a child of it), -# so the harness is portable regardless of the absolute checkout path. -KIT="${KIT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}" -CONTAINER="${CONTAINER:-documentdb-local}" -PORT="${PORT:-10260}" -PG_PORT="${PG_PORT:-9712}" -PG_USER="${PG_USER:-documentdb}" -DB_USER="${DB_USER:-docdbadmin}" -PASSWORD="${DB_PASSWORD:-}" - -mongo() { # $1=db $2=eval -> raw output bytes on stdout - docker exec "$CONTAINER" mongosh "localhost:${PORT}/$1" \ - -u "$DB_USER" -p "$PASSWORD" --authenticationMechanism SCRAM-SHA-256 \ - --tls --tlsAllowInvalidCertificates --quiet --eval "$2" 2>/dev/null -} -bytes() { wc -c | tr -d ' '; } -tok() { awk -v b="$1" 'BEGIN{printf "%d", (b+3)/4}'; } - -[[ -z "$PASSWORD" ]] && { echo "Error: no password. Set DB_PASSWORD (e.g. export DB_PASSWORD='')." >&2; exit 1; } - -# ── Path A raw-output collectors (faithful to each skill's prescribed commands) ── -# query-optimizer skill: getIndexes + stats + $indexStats + explain + findOne(sample) -raw_query_optimizer() { # $1=db $2=coll ; the "slow aggregation" workflow - local db="$1" c="$2" - mongo "$db" "JSON.stringify(db.${c}.getIndexes())" - mongo "$db" "JSON.stringify(db.${c}.stats())" - mongo "$db" "JSON.stringify(db.${c}.aggregate([{\$indexStats:{}}]).toArray())" - mongo "$db" "JSON.stringify(db.${c}.aggregate([{\$group:{_id:\"\$state\",v:{\$sum:\"\$est_value\"}}}]).explain(\"executionStats\"))" - mongo "$db" "JSON.stringify(db.${c}.findOne())" # sample doc: pulls big text on bloated collections -} -# indexing skill: per-collection getIndexes + $indexStats across the DB -raw_indexing() { # $1=db - local db="$1" - local colls; colls=$(mongo "$db" "db.getCollectionNames().join(' ')") - for c in $colls; do - mongo "$db" "JSON.stringify(db.${c}.getIndexes())" - mongo "$db" "JSON.stringify(db.${c}.aggregate([{\$indexStats:{}}]).toArray())" - done -} -# data-modeling skill: NOTE — this skill is about embed-vs-reference DESIGN, not -# integrity checking; no text skill covers referential integrity, so a Path-A -# agent must improvise $lookup orphan probes. We run a representative set for the -# known datasets (what a competent agent would try by hand). -raw_data_modeling() { # $1=db - local db="$1" - mongo "$db" "db.getCollectionNames()" - if [[ "$db" == ecommerce* || "$db" == test_ecom* ]]; then - mongo "$db" "JSON.stringify(db.orders.findOne())" - mongo "$db" "JSON.stringify(db.order_items.findOne())" - mongo "$db" "JSON.stringify(db.orders.aggregate([{\$lookup:{from:\"customers\",localField:\"customer_id\",foreignField:\"customer_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" - mongo "$db" "JSON.stringify(db.order_items.aggregate([{\$lookup:{from:\"orders\",localField:\"order_id\",foreignField:\"order_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" - mongo "$db" "JSON.stringify(db.order_items.aggregate([{\$lookup:{from:\"products\",localField:\"product_id\",foreignField:\"product_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" - mongo "$db" "JSON.stringify(db.reviews.aggregate([{\$lookup:{from:\"products\",localField:\"product_id\",foreignField:\"product_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" - else - mongo "$db" "JSON.stringify(db.opportunities.findOne())" - mongo "$db" "JSON.stringify(db.opportunities.aggregate([{\$lookup:{from:\"accounts\",localField:\"account_id\",foreignField:\"_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" - mongo "$db" "JSON.stringify(db.opportunities.aggregate([{\$lookup:{from:\"campaigns\",localField:\"campaign_id\",foreignField:\"_id\",as:\"m\"}},{\$match:{m:{\$size:0}}},{\$count:\"orphans\"}]).toArray())" - fi -} -# storage/monitoring skills give NO local commands; agent improvises psql for config/cache -raw_config_improv() { # (db-agnostic instance view an agent would eventually gather) - docker exec "$CONTAINER" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d postgres -c \ - "SELECT name,setting,unit FROM pg_settings WHERE name IN ('shared_buffers','effective_cache_size','work_mem','maintenance_work_mem');" 2>/dev/null - docker exec "$CONTAINER" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d postgres -c \ - "SELECT relname, heap_blks_read, heap_blks_hit FROM pg_statio_user_tables ORDER BY heap_blks_hit DESC LIMIT 20;" 2>/dev/null -} - -# ── per-tool spec: tool | skill_file | pathB_script + json flag ───────────── -skill_bytes() { wc -c < "${KIT}/skills/$1/SKILL.md" | tr -d ' '; } -route_bytes() { # $1=query $2=db -> bytes of router json - bash "${KIT}/knowledge-base/kb-route.sh" --json --db "$2" "$1" 2>/dev/null | bytes -} - -printf 'tool\tdataset\tskill\tA_skill_B\tA_raw_B\tA_total_B\tA_tok\tB_route_B\tB_script_B\tB_total_B\tB_tok\tratio\n' - -emit() { # tool dataset skill A_skill A_raw B_route B_script query - local tool="$1" ds="$2" skill="$3" a_skill="$4" a_raw="$5" b_route="$6" b_script="$7" - local a_total=$((a_skill + a_raw)) b_total=$((b_route + b_script)) - local a_tok b_tok ratio - a_tok=$(tok "$a_total"); b_tok=$(tok "$b_total") - ratio=$(awk -v a="$a_total" -v b="$b_total" 'BEGIN{ if(b<=0){print "-"}else{printf "%.1f", a/b} }') - printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ - "$tool" "$ds" "$skill" "$a_skill" "$a_raw" "$a_total" "$a_tok" "$b_route" "$b_script" "$b_total" "$b_tok" "$ratio" -} - -# 1) document-bloat-advisor (skill: query-optimizer) -for ds in contoso ecommerce; do - coll="opportunities"; [[ "$ds" == "ecommerce" ]] && coll="orders" - a_raw=$(raw_query_optimizer "$ds" "$coll" | bytes) - b_route=$(route_bytes "why are my aggregations slow, are documents too big" "$ds") - b_script=$(bash "${KIT}/scripts/document-bloat-advisor.sh" --db "$ds" --json 2>/dev/null | bytes) - emit "document-bloat-advisor" "$ds" "query-optimizer" "$(skill_bytes query-optimizer)" "$a_raw" "$b_route" "$b_script" -done - -# 2) index-redundancy-finder (skill: indexing) -for ds in ecommerce idx_test; do - a_raw=$(raw_indexing "$ds" | bytes) - b_route=$(route_bytes "do I have redundant or unused indexes" "$ds") - b_script=$(bash "${KIT}/scripts/index-redundancy-finder.sh" --db "$ds" --json 2>/dev/null | bytes) - emit "index-redundancy-finder" "$ds" "indexing" "$(skill_bytes indexing)" "$a_raw" "$b_route" "$b_script" -done - -# 3) perf-advisor (skill: query-optimizer ; script has no --json -> plain output) -for ds in contoso ecommerce; do - coll="opportunities"; [[ "$ds" == "ecommerce" ]] && coll="orders" - a_raw=$(raw_query_optimizer "$ds" "$coll" | bytes) - b_route=$(route_bytes "give my database a performance checkup" "$ds") - b_script=$(bash "${KIT}/scripts/perf-advisor.sh" --db "$ds" --json 2>/dev/null | bytes) - emit "perf-advisor" "$ds" "query-optimizer" "$(skill_bytes query-optimizer)" "$a_raw" "$b_route" "$b_script" -done - -# 4) data-integrity-check (skill: data-modeling ; script plain output) -for ds in contoso ecommerce; do - a_raw=$(raw_data_modeling "$ds" | bytes) - b_route=$(route_bytes "check my data integrity for orphaned references" "$ds") - b_script=$(bash "${KIT}/scripts/data-integrity-check.sh" --db "$ds" --json 2>/dev/null | bytes) - emit "data-integrity-check" "$ds" "data-modeling" "$(skill_bytes data-modeling)" "$a_raw" "$b_route" "$b_script" -done - -# 5) db-config-advisor (no local skill; agent improvises psql -> storage skill loaded) -for ds in contoso; do - a_raw=$(raw_config_improv | bytes) - b_route=$(route_bytes "is my cache big enough, should I increase shared_buffers" "$ds") - b_script=$(bash "${KIT}/scripts/db-config-advisor.sh" --db "$ds" --json 2>/dev/null | bytes) - emit "db-config-advisor" "$ds" "storage(no-local-cmds)" "$(skill_bytes storage)" "$a_raw" "$b_route" "$b_script" -done diff --git a/token-tests/validate-proxy.py b/token-tests/validate-proxy.py deleted file mode 100644 index 16d4fcd..0000000 --- a/token-tests/validate-proxy.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env python3 -"""Validate the `bytes / 4` proxy against a real tokeniser. - -WHY THIS EXISTS ---------------- -`token-ab-measure.sh` estimates tokens as `bytes / 4`. The obvious objection is -that this is a rule of thumb: JSON and English prose tokenise at different -rates, so the estimate must be wrong. - -It IS wrong per-file — measurably so. But the harness reports a RATIO between -two paths, and the errors largely cancel, because both paths contain a similar -mix of prose and structured output. Measured on real payloads from this repo: - - payload bytes/4 real tokens error - A: SKILL.md 2449 2416 +1% - A: raw output 613 911 -33% - B: router json 128 161 -20% - B: script json 423 452 -6% - - ratio bytes/4 : 5.56x (82.0% saving) - ratio real : 5.43x (81.6% saving) - ratio error : +2.4% - -So the proxy is a poor estimator of ABSOLUTE token counts and a good estimator -of the RELATIVE saving, which is what the harness actually claims. - -This script re-runs that check so the claim stays verifiable rather than -becoming folklore. - - pip install tiktoken - python3 validate-proxy.py --vs - -Exits non-zero if the ratio error exceeds --tolerance (default 10%), which -would mean the proxy has stopped being trustworthy for this payload mix. -""" -from __future__ import annotations - -import argparse -import sys -from pathlib import Path - -# o200k_base is the GPT-5-era encoding. Other model families tokenise slightly -# differently, which is itself part of the point: no single proxy is exact for -# all of them, so the harness should be judged on the ratio, not the absolute. -ENCODING = "o200k_base" - - -def measure(paths: list[Path], enc) -> tuple[int, int]: - total_bytes = total_tokens = 0 - for p in paths: - raw = p.read_bytes() - total_bytes += len(raw) - total_tokens += len(enc.encode(raw.decode("utf-8", errors="ignore"))) - return total_bytes, total_tokens - - -def main(argv=None) -> int: - ap = argparse.ArgumentParser(description=__doc__.split("\n")[0]) - ap.add_argument("path_a", nargs="+", type=Path, help="Path A payload files") - ap.add_argument("--vs", nargs="+", type=Path, required=True, - help="Path B payload files") - ap.add_argument("--tolerance", type=float, default=0.10, - help="max acceptable relative error on the RATIO (default 0.10)") - args = ap.parse_args(argv) - - try: - import tiktoken - except ImportError: - print("tiktoken is required: pip install tiktoken", file=sys.stderr) - return 2 - - enc = tiktoken.get_encoding(ENCODING) - - a_bytes, a_tokens = measure(args.path_a, enc) - b_bytes, b_tokens = measure(args.vs, enc) - - if not b_tokens or not b_bytes: - print("Path B is empty; nothing to compare", file=sys.stderr) - return 2 - - ratio_proxy = (a_bytes / 4) / (b_bytes / 4) # == a_bytes / b_bytes - ratio_real = a_tokens / b_tokens - error = ratio_proxy / ratio_real - 1 - - print(f"encoding: {ENCODING}") - print(f"{'':14} {'bytes':>8} {'bytes/4':>9} {'real tok':>9}") - print(f"{'Path A':14} {a_bytes:>8} {a_bytes // 4:>9} {a_tokens:>9}") - print(f"{'Path B':14} {b_bytes:>8} {b_bytes // 4:>9} {b_tokens:>9}") - print() - print(f"ratio bytes/4 : {ratio_proxy:.2f}x saving {1 - b_bytes / a_bytes:.1%}") - print(f"ratio real : {ratio_real:.2f}x saving {1 - b_tokens / a_tokens:.1%}") - print(f"ratio error : {error:+.1%}") - - if abs(error) > args.tolerance: - print(f"\nFAIL: ratio error exceeds {args.tolerance:.0%}. The bytes/4 " - f"proxy is no longer reliable for this payload mix.", file=sys.stderr) - return 1 - print(f"\nOK: within {args.tolerance:.0%} — the proxy is sound for the ratio.") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) From 9496c7393a53b901713820e97a87ebfed00510ef Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 18 Aug 2026 16:47:07 -0700 Subject: [PATCH 31/52] Clean up (no token-tests dependencies for now) --- .github/agents/skill-reviewer/check-skill.py | 0 .../run-comparison.sh | 0 .../shared/arms/install-arm.sh | 0 benchmarks/documentdb-sdk-skills/build.sh | 0 .../controls/naive-python/build.sh | 0 .../controls/naive-python/run.sh | 0 .../shared/base/vendor-wheels.sh | 0 .../environment/reference/build.sh | 0 .../environment/reference/run.sh | 0 .../tasks/orders-api-python/solution/solve.sh | 0 .../tasks/orders-api-python/tests/test.sh | 0 .../documentdb-sdk-skills/verify-controls.sh | 0 install.sh | 0 knowledge-base/kb-route.sh | 0 knowledge-base/kb_route_demo.py | 130 ++++++++++ scenarios/contoso/scaling-benchmark/README.md | 39 +++ .../scaling-benchmark/bench-queries.js | 77 ++++++ .../bench-seed-deterministic.js | 92 +++++++ .../scaling-benchmark/contoso-probe.js | 21 ++ .../diagnostic-report-contoso-scaling.md | 237 ++++++++++++++++++ .../contoso/scaling-benchmark/scale-bench2.sh | 73 ++++++ .../scaling-benchmark/toast-index-bench.sh | 111 ++++++++ .../scaling-benchmark/toast-index-probe.js | 89 +++++++ scenarios/contoso/seed.sh | 0 scenarios/ecommerce/seed.sh | 0 scenarios/index-redundancy/seed.sh | 0 scripts/data-integrity-check.sh | 0 scripts/db-config-advisor.sh | 0 scripts/document-bloat-advisor.sh | 0 scripts/index-redundancy-finder.sh | 0 scripts/perf-advisor.sh | 0 scripts/toast-split-advisor.sh | 0 testing/run.sh | 0 33 files changed, 869 insertions(+) mode change 100755 => 100644 .github/agents/skill-reviewer/check-skill.py mode change 100755 => 100644 benchmarks/documentdb-route-efficiency/run-comparison.sh mode change 100755 => 100644 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/verify-controls.sh mode change 100755 => 100644 install.sh mode change 100755 => 100644 knowledge-base/kb-route.sh create mode 100644 knowledge-base/kb_route_demo.py create mode 100644 scenarios/contoso/scaling-benchmark/README.md create mode 100644 scenarios/contoso/scaling-benchmark/bench-queries.js create mode 100644 scenarios/contoso/scaling-benchmark/bench-seed-deterministic.js create mode 100644 scenarios/contoso/scaling-benchmark/contoso-probe.js create mode 100644 scenarios/contoso/scaling-benchmark/diagnostic-report-contoso-scaling.md create mode 100644 scenarios/contoso/scaling-benchmark/scale-bench2.sh create mode 100644 scenarios/contoso/scaling-benchmark/toast-index-bench.sh create mode 100644 scenarios/contoso/scaling-benchmark/toast-index-probe.js mode change 100755 => 100644 scenarios/contoso/seed.sh mode change 100755 => 100644 scenarios/ecommerce/seed.sh mode change 100755 => 100644 scenarios/index-redundancy/seed.sh mode change 100755 => 100644 scripts/data-integrity-check.sh mode change 100755 => 100644 scripts/db-config-advisor.sh mode change 100755 => 100644 scripts/document-bloat-advisor.sh mode change 100755 => 100644 scripts/index-redundancy-finder.sh mode change 100755 => 100644 scripts/perf-advisor.sh mode change 100755 => 100644 scripts/toast-split-advisor.sh mode change 100755 => 100644 testing/run.sh diff --git a/.github/agents/skill-reviewer/check-skill.py b/.github/agents/skill-reviewer/check-skill.py old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-route-efficiency/run-comparison.sh b/benchmarks/documentdb-route-efficiency/run-comparison.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh b/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/build.sh b/benchmarks/documentdb-sdk-skills/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh b/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/verify-controls.sh b/benchmarks/documentdb-sdk-skills/verify-controls.sh old mode 100755 new mode 100644 diff --git a/install.sh b/install.sh old mode 100755 new mode 100644 diff --git a/knowledge-base/kb-route.sh b/knowledge-base/kb-route.sh old mode 100755 new mode 100644 diff --git a/knowledge-base/kb_route_demo.py b/knowledge-base/kb_route_demo.py new file mode 100644 index 0000000..da23716 --- /dev/null +++ b/knowledge-base/kb_route_demo.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 +"""kb_route_demo.py — show HOW the knowledge-base router scores and picks a tool. + +Unlike kb_route.py (which just prints the winning route), this demo prints the +full scoring process for a query: every tool's score, the signal breakdown +(multiword-phrase / single-keyword / example-overlap / one-hop boost), and how +the router lands on the winner. It is a teaching / debugging aid. + +Run it directly from bash (no DocumentDB container needed — routing is a pure +text layer over knowledge-base/kb.json): + + python3 knowledge-base/kb_route_demo.py + python3 knowledge-base/kb_route_demo.py "why are my aggregations slow" + ./knowledge-base/kb_route_demo.py # also works (executable + shebang) + +With no argument it demonstrates the document-bloat / TOAST scenario. +""" + +import importlib.util +import json +import os +import sys +from pathlib import Path + +HERE = Path(__file__).resolve().parent +KB_JSON = Path(os.environ.get("KB_FILE", HERE / "kb.json")) +DEFAULT_QUERY = "why are my aggregations slow even though I have indexes" + + +def load_engine(): + """Import the real routing engine so the demo uses the SAME logic, not a copy.""" + spec = importlib.util.spec_from_file_location("kb_route", HERE / "kb_route.py") + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +def signal_breakdown(engine, tool, q_tokens, q_lower): + """Re-derive the per-signal contributions for one tool (mirrors score_tool).""" + parts = [] + kw_total = 0.0 + for kw in tool.get("keywords", []): + kwl = kw.lower() + if " " in kwl: + if kwl in q_lower: + parts.append((f'keyword phrase "{kw}"', 3.0)); kw_total += 3.0 + else: + if kwl in q_tokens: + parts.append((f'keyword "{kw}"', 1.5)); kw_total += 1.5 + best_ex, best_ex_q = 0.0, None + for ex in tool.get("example_queries", []): + ex_tokens = engine.tokenize(ex) - engine.STOP + ov = len(ex_tokens & q_tokens) + frac = ov / max(1, len(ex_tokens)) + if frac > best_ex: + best_ex, best_ex_q = frac, ex + if best_ex > 0: + parts.append((f'example overlap "{best_ex_q}" ({best_ex:.2f})', 2.5 * best_ex)) + return parts + + +def one_hop_boost(engine, kb, q_tokens): + """Return {tool_id: (boost, matched_route_query)} from routes_one_hop.""" + boost = {} + for r in kb.get("routes_one_hop", {}).get("examples", []): + r_tokens = engine.tokenize(r["query"]) - engine.STOP + ov = len(r_tokens & q_tokens) + frac = ov / max(1, len(r_tokens)) + if frac > 0 and frac > boost.get(r["tool"], (0, None))[0]: + boost[r["tool"]] = (frac, r["query"]) + return boost + + +def main(): + query = " ".join(sys.argv[1:]).strip() or DEFAULT_QUERY + engine = load_engine() + with open(KB_JSON) as fh: + kb = json.load(fh) + + q_tokens = engine.tokenize(query) - engine.STOP + q_lower = query.lower() + boost = one_hop_boost(engine, kb, q_tokens) + + bar = "═" * 74 + print(bar) + print(" KB Router — scoring walkthrough") + print(bar) + print(f' Query : "{query}"') + print(f' Tokens : {sorted(q_tokens)} (stop-words removed)') + print(f' KB source : {KB_JSON}') + print() + print(" Scoring rules: keyword phrase +3.0 · single keyword +1.5 ·") + print(" best example overlap +2.5×frac · one-hop route +2.0×frac") + print("─" * 74) + + # Rank via the REAL engine so the winner matches production exactly. + ranked = engine.rank_tools(kb, query) + + for rank, (score, tool, hits) in enumerate(ranked, 1): + if score <= 0: + continue + marker = "⭐ WINNER" if rank == 1 else f" #{rank}" + print(f"\n {marker} [{tool['id']}] score {score:.2f}") + for label, pts in signal_breakdown(engine, tool, q_tokens, q_lower): + print(f" +{pts:>4.2f} {label}") + if tool["id"] in boost: + frac, rq = boost[tool["id"]] + print(f' +{2.0*frac:>4.2f} one-hop route "{rq}" ({frac:.2f})') + + zero = [t["id"] for s, t, _ in ranked if s <= 0] + if zero: + print(f"\n (score 0, not shown: {', '.join(zero)})") + + best_s, best_t, best_hits = ranked[0] + conf = "high" if best_s >= 4 else ("medium" if best_s >= 2 else "low") + runner_up = next(((s, t) for s, t, _ in ranked[1:] if s > 0), None) + print("\n" + "─" * 74) + print(" Decision:") + print(f" sort tools by score desc → ranked[0] wins") + print(f" winner : {best_t['id']} (score {best_s:.2f}, confidence {conf})") + if runner_up: + rs, rt = runner_up + print(f" runner-up : {rt['id']} (score {rs:.2f}, margin {best_s-rs:.2f})") + print(f" confident? : {best_s >= 2.0} (threshold 2.0)") + print(f" command : {best_t['invocation']}") + print(bar) + + +if __name__ == "__main__": + main() diff --git a/scenarios/contoso/scaling-benchmark/README.md b/scenarios/contoso/scaling-benchmark/README.md new file mode 100644 index 0000000..bfb26a3 --- /dev/null +++ b/scenarios/contoso/scaling-benchmark/README.md @@ -0,0 +1,39 @@ +# Scaling benchmark (optional / advanced) + +> **Not part of the quickstart.** These scripts seed **multiple** databases at +> increasing scale (x1, x2, x4, x6, x8, x16) and run repeated benchmarks. They +> take time and disk, and are meant for investigating how the TOAST detoast tax +> grows with data size — not for a first run. For the ready-to-run demo use the +> single base-size dataset via [`../seed.sh`](../seed.sh). + +## Contents + +| File | What it does | +|------|-------------| +| `scale-bench2.sh` | Kill-tolerant harness: seeds `contoso_x{1,2,4,6,8,16}` and times the BI query suite at each scale. | +| `contoso-probe.js` | Single-query survivable timing probe (used by the harness). | +| `toast-index-bench.sh` | Sweeps index configurations (`_id`-only, single, compound, covering-attempt, group-only) before/after the schema split, recording PostgreSQL block traffic (the detoast tax). | +| `toast-index-probe.js` | The per-config explain + timing probe the bench runs. | +| `results.tsv` | Captured scaling results (x1…x16). **Generated output — git-ignored; recreated by `scale-bench2.sh`.** | +| `diagnostic-report-contoso-scaling.md` | Full write-up of the scaling + before/after-split findings. | +| `bench-queries.js`, `bench-seed-deterministic.js` | Older engine-comparison benchmark (MongoDB vs DocumentDB) — deterministic seed + query timing. | + +## Key finding (summary) + +Under the co-located schema the canonical BI aggregation's PostgreSQL block reads +scale with the TOASTed text, not the scalars it queries; a **covering index +cannot avoid it** (it still `FETCH`es and detoasts the full document). Splitting +the large text into a side collection keyed by `_id` collapses block reads +(~75× on the selective query, ~57× full-scan) — **schema shape beats index +tuning** for this class of problem. Details in +`diagnostic-report-contoso-scaling.md`. + +## Run (advanced) + +```bash +# seeds contoso_x1..x16 and benchmarks each (slow; needs the container up) +bash scenarios/contoso/scaling-benchmark/scale-bench2.sh + +# before/after-split index matrix on a chosen scaled DB +bash scenarios/contoso/scaling-benchmark/toast-index-bench.sh --db contoso_x16 --phase before +``` diff --git a/scenarios/contoso/scaling-benchmark/bench-queries.js b/scenarios/contoso/scaling-benchmark/bench-queries.js new file mode 100644 index 0000000..343bc57 --- /dev/null +++ b/scenarios/contoso/scaling-benchmark/bench-queries.js @@ -0,0 +1,77 @@ +// Benchmark queries — same on both engines +var results = []; + +function time(label, fn) { + var start = Date.now(); + var count = 0; + try { count = fn(); } catch(e) { count = -1; } + var ms = Date.now() - start; + results.push({label: label, ms: ms, count: count}); + print(" " + ms + "ms\t" + count + "\t" + label); + return ms; +} + +print("═══ POINT QUERIES (find by indexed/unindexed field) ═══"); +time("find orders by order_id", function() { return db.orders.find({order_id:"ORD_025000"}).toArray().length; }); +time("find orders by customer_id", function() { return db.orders.find({customer_id:"CUST_002500"}).toArray().length; }); +time("find orders by status=shipped", function() { return db.orders.find({status:"shipped"}).limit(100).toArray().length; }); +time("find orders by status+date sort", function() { return db.orders.find({status:"pending"}).sort({created_at:-1}).limit(20).toArray().length; }); +time("find orders by city", function() { return db.orders.find({shipping_city:"Seattle"}).limit(100).toArray().length; }); +time("find order_items by order_id", function() { return db.order_items.find({order_id:"ORD_025000"}).toArray().length; }); +time("find order_items by product_id", function() { return db.order_items.find({product_id:"PROD_001000"}).toArray().length; }); +time("find customers by customer_id", function() { return db.customers.find({customer_id:"CUST_002500"}).toArray().length; }); +time("find customers by email", function() { return db.customers.find({email:"cust2500@example.com"}).toArray().length; }); +time("find customers by tier+active", function() { return db.customers.find({tier:"gold",is_active:true}).limit(50).toArray().length; }); +time("find products by category+price", function() { return db.products.find({category_id:"CAT_005",price:{$gt:100,$lt:300}}).toArray().length; }); +time("find products by brand", function() { return db.products.find({brand:"TechPro"}).limit(50).toArray().length; }); +time("find reviews by product_id", function() { return db.reviews.find({product_id:"PROD_001000"}).toArray().length; }); +time("find reviews by rating>=4", function() { return db.reviews.find({rating:{$gte:4}}).limit(100).toArray().length; }); + +print(""); +print("═══ COUNT QUERIES ═══"); +time("count orders", function() { return db.orders.countDocuments(); }); +time("count order_items", function() { return db.order_items.countDocuments(); }); +time("count reviews", function() { return db.reviews.countDocuments(); }); +time("count customers", function() { return db.customers.countDocuments(); }); + +print(""); +print("═══ AGGREGATION QUERIES ═══"); +time("agg: revenue by status", function() { return db.orders.aggregate([{$group:{_id:"$status",total:{$sum:"$total_amount"},count:{$sum:1}}}]).toArray().length; }); +time("agg: revenue by city (delivered)", function() { return db.orders.aggregate([{$match:{status:"delivered"}},{$group:{_id:"$shipping_city",revenue:{$sum:"$total_amount"}}}]).toArray().length; }); +time("agg: top 10 customers by spend", function() { return db.orders.aggregate([{$group:{_id:"$customer_id",total:{$sum:"$total_amount"}}},{$sort:{total:-1}},{$limit:10}]).toArray().length; }); +time("agg: top 10 products by qty sold", function() { return db.order_items.aggregate([{$group:{_id:"$product_id",totalQty:{$sum:"$quantity"}}},{$sort:{totalQty:-1}},{$limit:10}]).toArray().length; }); +time("agg: avg rating per product (top10)", function() { return db.reviews.aggregate([{$group:{_id:"$product_id",avgRating:{$avg:"$rating"},count:{$sum:1}}},{$sort:{count:-1}},{$limit:10}]).toArray().length; }); +time("agg: orders per month", function() { return db.orders.aggregate([{$group:{_id:{$month:"$created_at"},count:{$sum:1},revenue:{$sum:"$total_amount"}}},{$sort:{_id:1}}]).toArray().length; }); + +print(""); +print("═══ LOOKUP / JOIN QUERIES ═══"); +time("lookup: order + items (1 order)", function() { return db.orders.aggregate([{$match:{order_id:"ORD_025000"}},{$lookup:{from:"order_items",localField:"order_id",foreignField:"order_id",as:"items"}}]).toArray().length; }); +time("lookup: customer orders (1 cust)", function() { return db.orders.aggregate([{$match:{customer_id:"CUST_002500"}},{$lookup:{from:"order_items",localField:"order_id",foreignField:"order_id",as:"items"}},{$limit:10}]).toArray().length; }); + +print(""); +print("═══ EXPLAIN CHECKS (COLLSCAN vs IXSCAN) ═══"); +var explainChecks = [ + ["orders", {order_id:"ORD_025000"}], + ["orders", {status:"shipped"}], + ["orders", {shipping_city:"Seattle"}], + ["order_items", {order_id:"ORD_025000"}], + ["order_items", {product_id:"PROD_001000"}], + ["customers", {customer_id:"CUST_002500"}], + ["customers", {email:"cust2500@example.com"}], + ["products", {category_id:"CAT_005",price:{$gt:100}}], + ["reviews", {product_id:"PROD_001000"}], + ["reviews", {rating:{$gte:4}}] +]; +explainChecks.forEach(function(c) { + var plan = db.runCommand({explain:{find:c[0],filter:c[1],limit:1},verbosity:"executionStats"}); + var wp = (plan.queryPlanner||{}).winningPlan||{}; + var es = plan.executionStats||{}; + var stage = wp.stage || (wp.inputStage||{}).stage || "?"; + print(" " + stage + "\t" + (es.totalDocsExamined||0) + " docs\t" + c[0] + " " + JSON.stringify(c[1]).substring(0,50)); +}); + +print(""); +var totalMs = results.reduce(function(s,r){return s+r.ms;},0); +var slow = results.filter(function(r){return r.ms>100;}).length; +var moderate = results.filter(function(r){return r.ms>20&&r.ms<=100;}).length; +print("TOTAL: " + totalMs + "ms across " + results.length + " queries (" + slow + " slow, " + moderate + " moderate)"); diff --git a/scenarios/contoso/scaling-benchmark/bench-seed-deterministic.js b/scenarios/contoso/scaling-benchmark/bench-seed-deterministic.js new file mode 100644 index 0000000..58690ab --- /dev/null +++ b/scenarios/contoso/scaling-benchmark/bench-seed-deterministic.js @@ -0,0 +1,92 @@ +// Seed identical ecommerce data — deterministic so both DBs get same docs +var rng_seed = 42; +function rng() { rng_seed = (rng_seed * 1103515245 + 12345) & 0x7fffffff; return rng_seed / 0x7fffffff; } +function rngInt(min,max) { return min + Math.floor(rng() * (max-min+1)); } +function pad(n,w) { var s=String(n); while(s.length0.1,loyalty_points:rngInt(0,10000), + address:{city:cities[rngInt(0,9)],state:"ST",zip:pad(rngInt(10000,99999),5)}, + username:"user"+pad(i,6),created_at:new Date(2024,rngInt(0,11),rngInt(1,28))}); + } + db.customers.insertMany(custs); +} +print(" Customers: "+db.customers.countDocuments()); + +// Products +var brands=["TechPro","GadgetX","SmartHome","EcoLife","FitGear","StyleCo","NatureWell","PowerMax","CoolTech","SafeGuard"]; +var prods=[]; +for (var i=0;i<2000;i++) { + prods.push({product_id:"PROD_"+pad(i,6),name:"Product "+i,category_id:"CAT_"+pad(rngInt(1,10),3), + supplier_id:"SUP_"+pad(rngInt(1,50),3),brand:brands[rngInt(0,9)],price:Math.round(rng()*500*100)/100, + cost:Math.round(rng()*200*100)/100,active:rng()>0.05,tags:["tag"+rngInt(1,20),"tag"+rngInt(1,20)]}); +} +db.products.insertMany(prods); +print(" Products: "+db.products.countDocuments()); + +// Inventory +var whs=["WH_EAST","WH_WEST","WH_CENTRAL"]; +var invs=[]; +for (var i=0;i<2000;i++) { + var nw=rngInt(1,3); + for (var w=0;w0.7?Math.round(rng()*20*100)/100:0}); + } + ords.push({order_id:"ORD_"+pad(i,6),customer_id:"CUST_"+pad(rngInt(0,4999),6), + status:statuses[rngInt(0,4)],payment_method:payments[rngInt(0,3)], + total_amount:Math.round(total*100)/100, + shipping_city:cities[rngInt(0,9)], + created_at:new Date(2024,rngInt(0,11),rngInt(1,28))}); + } + db.orders.insertMany(ords); + db.order_items.insertMany(items); +} +print(" Orders: "+db.orders.countDocuments()+", Order Items: "+db.order_items.countDocuments()); + +// Reviews +for (var batch=0;batch<25;batch++) { + var revs=[]; + for (var i=batch*1000;i<(batch+1)*1000;i++) { + revs.push({review_id:"REV_"+pad(i,6),product_id:"PROD_"+pad(rngInt(0,1999),6), + customer_id:"CUST_"+pad(rngInt(0,4999),6),order_id:"ORD_"+pad(rngInt(0,49999),6), + rating:rngInt(1,5),title:"Review "+i,text:"This is review text for item "+i, + helpful_votes:rngInt(0,50),created_at:new Date(2024,rngInt(0,11),rngInt(1,28))}); + } + db.reviews.insertMany(revs); +} +print(" Reviews: "+db.reviews.countDocuments()); + +print("SEED COMPLETE"); diff --git a/scenarios/contoso/scaling-benchmark/contoso-probe.js b/scenarios/contoso/scaling-benchmark/contoso-probe.js new file mode 100644 index 0000000..15604a7 --- /dev/null +++ b/scenarios/contoso/scaling-benchmark/contoso-probe.js @@ -0,0 +1,21 @@ +// contoso-probe.js — minimal, survivable timing probe. +// Runs ONE canonical BI query (open pipeline value by territory: full scan + +// $group over opportunities — the query that pays the detoast tax) REPS times +// and prints the MIN wall-clock ms. Sub-second even at large scale, so it +// completes between container cycles in a flaky environment. +// Env: CONTOSO_DB, QUERY_REPS (default 7) +var DB = process.env.CONTOSO_DB || "contoso_x1"; +var REPS = parseInt(process.env.QUERY_REPS || "7"); +var d = db.getSiblingDB(DB); +var best = Infinity, rows = 0; +for (var r = 0; r < REPS; r++) { + var t = Date.now(); + rows = d.opportunities.aggregate([ + { $match: { state: "open" } }, + { $group: { _id: "$territory_id", pipeline: { $sum: "$est_value" }, deals: { $sum: 1 } } }, + { $sort: { pipeline: -1 } } + ]).toArray().length; + var ms = Date.now() - t; + if (ms < best) best = ms; +} +print("PROBE " + DB + " min_ms=" + best + " reps=" + REPS + " opps=" + d.opportunities.countDocuments() + " groups=" + rows); diff --git a/scenarios/contoso/scaling-benchmark/diagnostic-report-contoso-scaling.md b/scenarios/contoso/scaling-benchmark/diagnostic-report-contoso-scaling.md new file mode 100644 index 0000000..b73ed5f --- /dev/null +++ b/scenarios/contoso/scaling-benchmark/diagnostic-report-contoso-scaling.md @@ -0,0 +1,237 @@ +# DocumentDB Agent-Kit — Contoso Scaling & Diagnostic Report + +**Generated:** 2026-07-02 05:20 UTC +**Container:** `documentdb-local` — `ghcr.io/documentdb/documentdb-local:latest` +**Scenario dir:** `documentdb-agent-kit/scenarios/contoso/` +**New diagnostic tools:** `scripts/document-bloat-advisor.sh`, `scripts/db-config-advisor.sh` + +> Filename note: the request spelled this `diagnoistic-report-contodo`; saved with the +> corrected spelling `diagnostic-report-contoso` so it is discoverable. + +--- + +## 1. Dataset — Contoso "Dynamics 365 Sales" model + +Source: `mscottsewell/ContosoBI → Contoso - Sales - Current Release`. That release is the +**Dynamics 365 Sales (CRM)** demo (the numbered import files are Campaigns, Territories, +Accounts, Opportunities). The bundled `.xlsx` are password-encrypted, so the model was +reproduced faithfully as documents, keeping **all entities and relationships**: + +``` +territories (dim) +users (salespeople) -> territory_id +products (dim) (moderate text: description ~400B) +campaigns (BIG text: content ~4KB) [scaled] +accounts -> territory_id, owner_id (BIG text: profile ~3.5KB) [scaled] +opportunities -> account_id, campaign_id, owner_id, territory_id [scaled] + line_items:[ -> product_id ] + narrative ~3.5KB + activity_log ~2.5KB <-- large text CO-LOCATED (the anti-pattern) +``` + +**Text extension (MongoDB/DocumentDB-friendly):** each large entity carries realistic, +low-compressibility free-text. Scale factor multiplies products/campaigns/accounts and the +fact-like `opportunities` (base = 500 opportunities per scale unit). + +Scale folders/datasets generated: **x1, x2, x4, x6, x8, x16** as databases +`contoso_x1 … contoso_x16` (seeder: `contoso-seed.js`, deterministic + resumable). + +--- + +## 2. The DocumentDB-specific anti-pattern (not generic bad code) + +DocumentDB stores each document as **one BSON column** in PostgreSQL. A large, +low-compressibility field is pushed **out-of-line into a TOAST table**. Because the whole +document is a single column, **reading any scalar field detoasts the entire document** — so +co-locating big text with fields your BI queries aggregate imposes a per-scan **detoast tax**. + +Measured proof (validation probe): a collection of 1,000 docs with a varied ~6 KB text field → +**heap 80 KB, TOAST 8,000 KB**. The same field filled with *compressible* text (`"x"×6000`) → +**TOAST 0** (compressed inline). So the effect is specific to *realistic* large text. + +Measured on the Contoso `opportunities` collection (x1): **heap 40 KB vs TOAST 3,880 KB — 99 % +of the collection is text the BI queries never read.** + +This is **not** generic "SELECT *" advice: in DocumentDB **projection does not avoid the tax** +(the document is detoasted server-side *before* projection). The correct fix is a **schema +split** — move the big text into a side collection keyed by `_id`. + +The suite intentionally ships this suboptimal schema first, then shows the tools finding it. + +--- + +## 3. Business query suite (`contoso-queries.js`) + +Seven realistic BI aggregations, each needing **only scalar fields** (so each pays the detoast +tax under the co-located schema): + +| # | Query | Business question | +|---|-------|-------------------| +| Q1 | `pipeline_by_territory` | Open pipeline value by territory | +| Q2 | `value_by_stage` | Deal count & value by sales stage | +| Q3 | `monthly_bookings` | Won bookings trend by month | +| Q4 | `top_accounts` | Top accounts by pipeline | +| Q5 | `product_mix` | Revenue by product (line items) | +| Q6 | `rep_leaderboard` | Won value by sales rep | +| Q7 | `avg_deal_by_industry` | Avg deal size by industry (join to accounts) | + +Metric = **min wall-clock over 5 repetitions** (min = least noise). + +--- + +## 4. Scaling test — the bottleneck the curve reveals + +Same query suite, increasing dataset size (co-located schema). Backing-Postgres +`opportunities` heap/TOAST captured per scale. + +| Scale | Opps | Total (ms) | Q1 | Q2 | Q3 | Q4 | Q5 | Q6 | Q7 | Heap | TOAST | +|------:|-----:|-----------:|---:|---:|---:|---:|---:|---:|---:|-----:|------:| +| x1 | 500 | **76** | 8 | 9 | 7 | 8 | 11 | 7 | 26 | 40 KB | 3.97 MB | +| x2 | 1000 | **95** | 12 | 14 | 11 | 11ᵃ| 17 | 11 | 41 | 73 KB | 7.98 MB | +| x4 | 2000 | **225** | 21 | 26 | 20 | 27 | 31 | 19 | 81 | 139 KB | 16.6 MB | +| x6 | 3000 | **243** | 26 | 31 | 26 | 31 | 45 | 25 | 59 | 221 KB | 23.8 MB | +| x8 | 4000 | **413** | 39 | 48 | 37 | 55 | 58 | 37 | 139 | 278 KB | 31.9 MB | +| x16 | 8000 | **708** | 74 | 99 | 77 | 111| 115| 74 | 158 | 557 KB | 63.5 MB | + +ᵃ x2/Q4 = parsing artifact in the harness; the total (95 ms) is correct. + +**Bottleneck revealed:** query latency grows roughly **linearly with dataset size** +(76 ms → 708 ms as data grows 16×), tracking the **TOAST volume** (3.97 MB → 63.5 MB, exactly +16×). Every BI aggregation must detoast the full text of every opportunity it scans, even +though it uses none of it. Note the heap stays tiny (40 → 557 KB) — the cost is **all detoast**, +which no index can fix. + +(With `shared_buffers = 128 MB` the working set stays cached even at x16, so this is a +**CPU/buffer-traffic** tax from detoasting, not disk I/O — it would additionally become disk I/O +once the working set exceeds cache.) + +--- + +## 5. Diagnostics detect the problem (x8, BEFORE) + +### 5a. `document-bloat-advisor.sh --db contoso_x8` +``` +⚠️ opportunities heap=272KB TOAST=31144KB (TOAST ratio 0.991) avgObjSize=6342B + dominant fields: narrative:3502B, activity_log:2502B, line_items:174B + Fix: move 'narrative' (+ other large text) into side collection + 'opportunities_text' keyed by _id; keep opportunities scalar-only. +⚠️ accounts heap=88KB TOAST=4800KB (ratio 0.982) profile:3502B +⚠️ campaigns heap=8KB TOAST=256KB (ratio 0.970) content:4002B +✅ products heap=256KB TOAST=0KB (ratio 0.000) — no bloat +Flagged 3 collections; 36,200KB of TOASTed text detoasted on every scan. +``` +The tool cross-references MongoDB `avgObjSize` with PostgreSQL heap/TOAST sizes, names the +offending fields, and prescribes the DocumentDB-specific schema-split fix. `products` +(compressible/short description) is correctly **not** flagged. + +### 5b. `db-config-advisor.sh --db contoso_x8` +``` +shared_buffers = 128 MB (source: configuration file) +Working set for 'contoso_x8' = 36.9 MB (heap 0.6 + TOAST 35.4 + idx 0.3) TOAST share = 96% +Cache hit: heap 100% / TOAST 100% / index 100% (a few TOAST blocks read from disk) +• TOAST is 96% of the working set. Removing it (schema split) would cut the working set to + 1.6 MB, letting the hot data stay resident WITHOUT changing config. +``` +Every statement is tied to a **measured** number — no generic "set shared_buffers to 25 % of +RAM." The advisor's recommendation (shrink the working set before touching config) points back +to the bloat fix. + +--- + +## 6. Before / After — applying the diagnostic-recommended fix + +Fix applied by `contoso-split-fix.js` (the remediation the advisor recommends): move +`narrative` + `activity_log` into `opportunities_text` (keyed by `_id`), `$unset` them from +`opportunities`, then `VACUUM`. + +### 6a. Query latency (x8, 4,000 opportunities, min of 5 reps) + +| Query | Before (ms) | After (ms) | Speed-up | +|-------|------------:|-----------:|---------:| +| pipeline_by_territory | 39 | 8 | **4.9×** | +| value_by_stage | 48 | 9 | **5.3×** | +| monthly_bookings | 37 | 7 | **5.3×** | +| top_accounts | 55 | 10 | **5.5×** | +| product_mix | 58 | 32 | 1.8× | +| rep_leaderboard | 37 | 6 | **6.2×** | +| avg_deal_by_industry | 139 | 45 | 3.1× | +| **TOTAL** | **413** | **117** | **3.5×** | + +Pure `opportunities` scans got **~5× faster**. The two smaller gains are instructive: +`product_mix` still unwinds `line_items` (kept in the doc), and `avg_deal_by_industry` **joins +`accounts`, which is still bloated** — i.e., the remaining tax comes from collections not yet +fixed, reinforcing the advisor's other findings. + +### 6b. Storage / working set (opportunities) + +| State | opportunities heap | opportunities TOAST | BI hot-path size | +|-------|-------------------:|--------------------:|-----------------:| +| Before | 272 KB | 31,144 KB | **≈ 31.4 MB** | +| After | 2,024 KB | **0 KB** | **≈ 2.0 MB** (‑15.7×) | + +`document-bloat-advisor.sh` after split + vacuum: +``` +✅ opportunities heap=2024KB TOAST=0KB (ratio 0.000) — no bloat +⚠️ opportunities_text (now holds the 31 MB text — COLD, read only for detail views) +``` + +**The text is preserved, just relocated** off the hot BI path. Total stored bytes are similar; +what changed is that BI aggregations now scan a 2 MB inline heap instead of detoasting 31 MB — +hence the 3.5–6× latency win. The fix is an **application/schema change** (write text to +`opportunities_text`, read it only on detail views), exactly the kind of guidance +`index-redundancy-finder.sh` gives for indexes. + +--- + +## 7. What the two new tools add to the kit + +| Tool | Layer | What it measures (facts only) | Actionable output | +|------|-------|-------------------------------|-------------------| +| `document-bloat-advisor.sh` | Mongo + PG | avgObjSize, per-collection heap vs TOAST, dominant fields | Which collection/field to split into a side collection (app-code fix) | +| `db-config-advisor.sh` | PG | shared_buffers, working set (heap+TOAST+idx), measured cache-hit, TOAST share | Evidence-based: shrink working set (bloat fix) vs raise `shared_buffers` toward the *measured* working set | + +Both follow the kit's principle established earlier: **report measured facts and concrete +structural issues; never emit generic rules-of-thumb.** The config advisor deliberately does +not prescribe "25 % of RAM"; it derives everything from the workload's own numbers. + +--- + +## 8. Reproduce + +```bash +# seed one scale (resumable) +docker cp scenarios/contoso/contoso-seed.js :/tmp/ +CONTOSO_DB=contoso_x8 CONTOSO_SCALE=8 mongosh ... --file /tmp/contoso-seed.js + +# full scaling benchmark (kill-tolerant) +bash scenarios/contoso/scale-bench2.sh "1 2 4 6 8 16" + +# diagnose +bash scripts/document-bloat-advisor.sh --db contoso_x8 +bash scripts/db-config-advisor.sh --db contoso_x8 + +# apply the fix, re-measure +CONTOSO_DB=contoso_x8 mongosh ... --file /tmp/contoso-split-fix.js +``` + +--- + +## 9. Environment note (transparency) + +The shared Docker host repeatedly killed the container; worse, `documentdb-local` re-runs its +sample-data init on every start and **crash-loops** (dup-key on `01-users.js`) once `/data` is +populated. Recovery: `docker commit` (no external volume exists — commit preserves `/data`), +then run with `-e SKIP_INIT_DATA=true -e INIT_DATA_PATH=/tmp/noinit` to skip init. After that +the container was stable and all six scales seeded and benched cleanly. The seeder and harness +were made **resumable/kill-tolerant** so partial seeds converge across restarts. + +--- + +## 10. Headline + +- **Bottleneck:** BI query latency scales linearly with data because large co-located text is + detoasted on every scan (x1 76 ms → x16 708 ms; TOAST 3.97 → 63.5 MB). +- **Diagnosis:** `document-bloat-advisor.sh` pinpoints `opportunities` at 99 % TOAST and names + the fields; `db-config-advisor.sh` shows TOAST is 96 % of the working set. +- **Fix (app/schema):** split large text into a side collection → **3.5× faster** query suite + (individual scans up to **6× faster**), hot working set **15.7× smaller**, zero TOAST on the + hot path — with no config change and no data loss. diff --git a/scenarios/contoso/scaling-benchmark/scale-bench2.sh b/scenarios/contoso/scaling-benchmark/scale-bench2.sh new file mode 100644 index 0000000..90b6020 --- /dev/null +++ b/scenarios/contoso/scaling-benchmark/scale-bench2.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +# scale-bench2.sh — kill-tolerant Contoso scaling benchmark. +# Seeding is resumable, so each scale is retried (ensuring the container up +# every attempt) until opportunities == 500*scale, then benched. +set -uo pipefail + +SCALES="${1:-1 2 4 6 8 16}" +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CONT="${CONTAINER:-documentdb-local}" +DB_USER="${DB_USER:-docdbadmin}" +PASSWORD="${DB_PASSWORD:-}" +[[ -z "$PASSWORD" ]] && { echo "Error: no password. Set DB_PASSWORD (e.g. export DB_PASSWORD='')." >&2; exit 1; } +A=(-u "$DB_USER" -p "$PASSWORD" --authenticationMechanism SCRAM-SHA-256 --tls --tlsAllowInvalidCertificates --quiet) +RESULTS="$DIR/results.tsv" +QREPS="${QREPS:-5}" +MAXTRY="${MAXTRY:-40}" + +ensure(){ for i in $(seq 1 120); do docker start "$CONT" >/dev/null 2>&1; docker exec "$CONT" mongosh "localhost:10260/admin" "${A[@]}" --eval "db.runCommand({ping:1}).ok" 2>/dev/null | grep -q 1 && return 0; sleep 1; done; return 1; } +oppcount(){ docker exec "$CONT" mongosh "localhost:10260/$1" "${A[@]}" --eval "print(db.opportunities.countDocuments())" 2>/dev/null | tr -dc '0-9'; } + +ensure || { echo "not ready"; exit 1; } +docker cp "$DIR/../contoso-seed.js" "$CONT:/tmp/contoso-seed.js" >/dev/null 2>&1 +docker cp "$DIR/../contoso-queries.js" "$CONT:/tmp/contoso-queries.js" >/dev/null 2>&1 + +: > "${RESULTS}.tmp" 2>/dev/null || true +echo -e "scale\topp_count\ttotal_min_ms\tpipeline\tstage\tmonthly\ttopacct\tprodmix\treplead\tavgindustry\theap_bytes\ttoast_bytes" > "$RESULTS" + +for S in $SCALES; do + DB="contoso_x${S}"; EXP=$((500*S)) + echo "── x${S} (${DB}) target opps=${EXP} ──" + # seed-until-complete + try=0; cnt=0 + while [[ "$try" -lt "$MAXTRY" ]]; do + try=$((try+1)) + ensure || { echo " attempt ${try}: not ready"; continue; } + cnt=$(oppcount "$DB"); cnt="${cnt:-0}" + [[ "$cnt" == "$EXP" ]] && { echo " seeded (${cnt}) after ${try} attempt(s)"; break; } + echo " attempt ${try}: have ${cnt}, seeding..." + docker exec -e CONTOSO_DB="$DB" -e CONTOSO_SCALE="$S" "$CONT" mongosh "localhost:10260/${DB}" "${A[@]}" --file /tmp/contoso-seed.js >/dev/null 2>&1 || true + done + cnt=$(oppcount "$DB"); cnt="${cnt:-0}" + [[ "$cnt" != "$EXP" ]] && { echo " WARN: ${DB} incomplete (${cnt}/${EXP}); recording anyway"; } + + # bench with retry (need a QSUMMARY line) + OUT=""; btry=0 + while [[ "$btry" -lt 12 ]]; do + btry=$((btry+1)); ensure || continue + OUT=$(docker exec -e CONTOSO_DB="$DB" -e QUERY_REPS="$QREPS" "$CONT" mongosh "localhost:10260/${DB}" "${A[@]}" --file /tmp/contoso-queries.js 2>/dev/null) + echo "$OUT" | grep -q QSUMMARY && break + done + getq(){ echo "$OUT" | awk -v q="$1" '/QRESULT/ && $0 ~ q {n=$0; sub(/.*"ms":/,"",n); sub(/[,}].*/,"",n); print n; exit}'; } + TOTAL=$(echo "$OUT" | awk '/QSUMMARY/{n=$0; sub(/.*total_min_ms":/,"",n); sub(/[,}].*/,"",n); print n; exit}') + Q1=$(getq pipeline_by_territory); Q2=$(getq value_by_stage); Q3=$(getq monthly_bookings) + Q4=$(getq top_accounts); Q5=$(getq product_mix); Q6=$(getq rep_leaderboard); Q7=$(getq avg_deal_by_industry) + + # sizes with retry + SZ=""; ztry=0 + while [[ "$ztry" -lt 12 ]]; do + ztry=$((ztry+1)); ensure || continue + SZ=$(docker exec "$CONT" psql -h localhost -p 9712 -U documentdb -d postgres -t --no-align -F $'\t' -c " + SELECT pg_relation_size(t.oid), COALESCE(pg_relation_size(NULLIF(t.reltoastrelid,0)),0) + FROM documentdb_api_catalog.collections c + JOIN pg_class t ON t.oid=('documentdb_data.documents_'||c.collection_id)::regclass + WHERE c.database_name='${DB}' AND c.collection_name='opportunities';" 2>/dev/null | grep -vE '^SET$' | head -1) + [[ -n "$SZ" ]] && break + done + HEAP=$(echo "$SZ" | cut -f1); TOAST=$(echo "$SZ" | cut -f2) + + echo -e "${S}\t${cnt}\t${TOTAL}\t${Q1}\t${Q2}\t${Q3}\t${Q4}\t${Q5}\t${Q6}\t${Q7}\t${HEAP}\t${TOAST}" >> "$RESULTS" + echo " => opps=${cnt} total_min_ms=${TOTAL} heap=${HEAP} toast=${TOAST}" +done + +echo ""; echo "=== ${RESULTS} ==="; cat "$RESULTS" diff --git a/scenarios/contoso/scaling-benchmark/toast-index-bench.sh b/scenarios/contoso/scaling-benchmark/toast-index-bench.sh new file mode 100644 index 0000000..a734434 --- /dev/null +++ b/scenarios/contoso/scaling-benchmark/toast-index-bench.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash +# toast-index-bench.sh — sweep a matrix of index configurations against the +# canonical Contoso BI queries and record the detoast tax (PG block traffic + +# docs examined + timing). Run it once BEFORE the schema split and once AFTER to +# get an apples-to-apples before/after table at identical row counts. +# +# Emits a TSV to stdout (one row per index-config x query) plus per-config +# heap/TOAST bytes. Meant to be captured into a report log. +# +# Usage: +# bash toast-index-bench.sh --db contoso_x16 --phase before +# bash toast-index-bench.sh --db contoso_x16 --phase after +set -uo pipefail + +CONTAINER="${CONTAINER:-documentdb-local}" +PORT="${PORT:-10260}" +PG_PORT="${PG_PORT:-9712}" +PG_USER="${PG_USER:-documentdb}" +DB_USER="${DB_USER:-docdbadmin}" +PASSWORD="${DB_PASSWORD:-}" +DB="contoso_x16" +PHASE="before" +REPS="${QUERY_REPS:-7}" + +while [[ $# -gt 0 ]]; do + case "$1" in + --db) DB="$2"; shift 2;; + --phase) PHASE="$2"; shift 2;; + --reps) REPS="$2"; shift 2;; + *) echo "unknown arg $1" >&2; exit 2;; + esac +done + +[[ -z "$PASSWORD" ]] && { echo "Error: no password. Set DB_PASSWORD or pass --password (e.g. export DB_PASSWORD='')." >&2; exit 1; } + +mongo() { + docker exec "$CONTAINER" mongosh "localhost:${PORT}/${DB}" \ + -u "$DB_USER" -p "$PASSWORD" --authenticationMechanism SCRAM-SHA-256 \ + --tls --tlsAllowInvalidCertificates --quiet --eval "$1" 2>/dev/null +} +psql_q() { + docker exec "$CONTAINER" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d postgres \ + -t --no-align -F $'\t' -c "$1" 2>/dev/null | grep -vE '^(SET|)$' +} + +# copy the probe into the container once +docker cp "$(dirname "$0")/toast-index-probe.js" "${CONTAINER}:/tmp/toast-index-probe.js" >/dev/null 2>&1 + +run_probe() { # $1=query $2=label + docker exec -e CONTOSO_DB="$DB" -e QUERY="$1" -e IDX_LABEL="$2" -e QUERY_REPS="$REPS" \ + "$CONTAINER" mongosh "localhost:${PORT}/${DB}" \ + -u "$DB_USER" -p "$PASSWORD" --authenticationMechanism SCRAM-SHA-256 \ + --tls --tlsAllowInvalidCertificates --quiet --file /tmp/toast-index-probe.js 2>/dev/null \ + | grep '^IDXRESULT' | sed 's/^IDXRESULT //' +} + +# drop every secondary index (keep _id_) so each config starts clean +reset_indexes() { + mongo ' + db.opportunities.getIndexes().forEach(function(i){ + if (i.name !== "_id_") { try { db.opportunities.dropIndex(i.name); } catch(e){} } + }); + ' >/dev/null +} + +heap_toast() { # -> "heap_bytestoast_bytes" + psql_q " + SELECT pg_relation_size(t.oid), + COALESCE(pg_relation_size(NULLIF(t.reltoastrelid,0)),0) + FROM documentdb_api_catalog.collections c + JOIN pg_class t ON t.oid = ('documentdb_data.documents_'||c.collection_id)::regclass + WHERE c.database_name='${DB}' AND c.collection_name='opportunities';" +} + +# ── index configurations to sweep ────────────────────────────────────────── +# label|createIndex spec ("" = none, baseline _id_ only) +CONFIGS=( + "baseline_id_only|" + "single_state|{state:1}" + "compound_state_terr|{state:1,territory_id:1}" + "covering_attempt|{state:1,territory_id:1,est_value:1}" + "group_key_only|{territory_id:1}" +) + +read -r HEAP TOAST <<<"$(heap_toast)" +echo "# phase=${PHASE} db=${DB} opps heap_bytes=${HEAP} toast_bytes=${TOAST} reps=${REPS}" +printf 'phase\tquery\tconfig\tindex_used\tstage\tdocs_examined\tblocks_total\tblocks_mib\tplan_ms\tmin_ms\trows\n' + +for QUERY in selective fullscan; do + for entry in "${CONFIGS[@]}"; do + label="${entry%%|*}" + spec="${entry#*|}" + reset_indexes + if [[ -n "$spec" ]]; then + mongo "db.opportunities.createIndex(${spec});" >/dev/null + fi + json="$(run_probe "$QUERY" "$label")" + [[ -z "$json" ]] && { echo -e "${PHASE}\t${QUERY}\t${label}\tERROR"; continue; } + # extract fields with python (stdlib) for robustness + echo "$json" | python3 -c ' +import sys, json +d = json.load(sys.stdin) +print("\t".join(str(x) for x in [ + "'"$PHASE"'", d["query"], d["idx"], d["index_used"], d["stage"], + d["docs_examined"], d["blocks_total"], d["blocks_mib"], + d["plan_ms"], d["min_ms"], d["rows"] +]))' + done +done + +reset_indexes diff --git a/scenarios/contoso/scaling-benchmark/toast-index-probe.js b/scenarios/contoso/scaling-benchmark/toast-index-probe.js new file mode 100644 index 0000000..bae754b --- /dev/null +++ b/scenarios/contoso/scaling-benchmark/toast-index-probe.js @@ -0,0 +1,89 @@ +// toast-index-probe.js — measure the detoast tax for ONE query under whatever +// index currently exists on opportunities. Emits a single JSON line so a shell +// driver can sweep a matrix of {index config} x {schema state}. +// +// The key evidence is NOT just wall-clock ms (noisy) but the PostgreSQL block +// traffic the executor reports: numBlocksFromCache + numBlocksFromDisk. Under +// the co-located schema every matched document is detoasted, so a query that +// touches only scalar fields still reads the entire TOAST chain — the block +// count explodes. After the schema split the same query reads far fewer blocks. +// +// Env: +// CONTOSO_DB database (default contoso_x16) +// QUERY which query: "selective" (default) | "fullscan" +// QUERY_REPS timed reps, report MIN ms (default 7) +// IDX_LABEL label of the current index config (passed through to output) + +var DB = process.env.CONTOSO_DB || "contoso_x16"; +var QUERY = process.env.QUERY || "selective"; +var REPS = parseInt(process.env.QUERY_REPS || "7"); +var LABEL = process.env.IDX_LABEL || "unknown"; +var d = db.getSiblingDB(DB); + +// The two aggregations both read ONLY scalar fields (never narrative/activity_log). +function pipeline() { + if (QUERY === "fullscan") { + // no $match -> every document participates -> detoast on 100% of docs + return [ + { $group: { _id: "$sales_stage", n: { $sum: 1 }, value: { $sum: "$est_value" } } }, + { $sort: { value: -1 } } + ]; + } + // selective: ~1/3 of docs (state:open) -> an index on state can prune keys, + // but every surviving doc is still FETCHed and detoasted (co-located schema). + return [ + { $match: { state: "open" } }, + { $group: { _id: "$territory_id", pipeline: { $sum: "$est_value" }, deals: { $sum: 1 } } }, + { $sort: { pipeline: -1 } } + ]; +} + +function longVal(x) { return (x && typeof x === "object" && "low" in x) ? x.low : x; } + +// ── explain: pull plan stage + docs examined + PG block traffic ───────────── +var e = d.opportunities.explain("executionStats").aggregate(pipeline()); +var cur = null; +(e.stages || []).forEach(function (s) { if (s.$cursor) cur = s.$cursor; }); + +var stage = "?", docsExamined = -1, blocksCache = -1, blocksDisk = -1, planMs = -1, idxName = ""; +if (cur) { + var wp = cur.queryPlanner && cur.queryPlanner.winningPlan; + if (wp) { + stage = wp.stage || "?"; + // index name may live on this stage or a child inputStage + var node = wp; + while (node && !idxName) { + if (node.indexName) idxName = node.indexName; + node = node.inputStage; + } + } + var es = cur.executionStats; + if (es) { + docsExamined = longVal(es.totalDocsExamined); + planMs = longVal(es.executionTimeMillis); + var exec = es.executionStages; + if (exec) { + blocksCache = longVal(exec.numBlocksFromCache); + blocksDisk = longVal(exec.numBlocksFromDisk); + } + } +} + +// ── timed run: report MIN wall-clock ms over REPS ─────────────────────────── +var best = Infinity, rows = 0; +for (var r = 0; r < REPS; r++) { + var t = Date.now(); + rows = d.opportunities.aggregate(pipeline()).toArray().length; + var ms = Date.now() - t; + if (ms < best) best = ms; +} + +var blocksTotal = (blocksCache < 0 ? 0 : blocksCache) + (blocksDisk < 0 ? 0 : blocksDisk); +print("IDXRESULT " + JSON.stringify({ + db: DB, query: QUERY, idx: LABEL, index_used: idxName || stage, + stage: stage, docs_examined: docsExamined, + blocks_cache: blocksCache, blocks_disk: blocksDisk, blocks_total: blocksTotal, + blocks_mib: Math.round(blocksTotal * 8 / 1024 * 10) / 10, + plan_ms: planMs, min_ms: best, rows: rows, + opps: d.opportunities.countDocuments() +})); diff --git a/scenarios/contoso/seed.sh b/scenarios/contoso/seed.sh old mode 100755 new mode 100644 diff --git a/scenarios/ecommerce/seed.sh b/scenarios/ecommerce/seed.sh old mode 100755 new mode 100644 diff --git a/scenarios/index-redundancy/seed.sh b/scenarios/index-redundancy/seed.sh old mode 100755 new mode 100644 diff --git a/scripts/data-integrity-check.sh b/scripts/data-integrity-check.sh old mode 100755 new mode 100644 diff --git a/scripts/db-config-advisor.sh b/scripts/db-config-advisor.sh old mode 100755 new mode 100644 diff --git a/scripts/document-bloat-advisor.sh b/scripts/document-bloat-advisor.sh old mode 100755 new mode 100644 diff --git a/scripts/index-redundancy-finder.sh b/scripts/index-redundancy-finder.sh old mode 100755 new mode 100644 diff --git a/scripts/perf-advisor.sh b/scripts/perf-advisor.sh old mode 100755 new mode 100644 diff --git a/scripts/toast-split-advisor.sh b/scripts/toast-split-advisor.sh old mode 100755 new mode 100644 diff --git a/testing/run.sh b/testing/run.sh old mode 100755 new mode 100644 From 86b0f97f6656f1effa9d2ad97735e8b9d64b873f Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Wed, 19 Aug 2026 00:41:43 +0000 Subject: [PATCH 32/52] =?UTF-8?q?Fix=20shellcheck=20failures=20in=20Loop?= =?UTF-8?q?=20C=20=E2=80=94=20including=20a=20real=20bug=20in=20the=20rout?= =?UTF-8?q?e=20harness?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI failed on SC2317 at shared/verifier/runner.sh:92. Reproduced with shellcheck 0.9.0 locally, then linted every script under benchmarks/ rather than only the one that was reported. That turned up four findings, one of which was not a lint nit at all. 1. SC2317 (the reported one) — a false positive. shellcheck cannot see that `trap cleanup EXIT` invokes cleanup(), so it reports the body as unreachable. Annotated with a disable directive plus a comment explaining what the handler is for; the code is correct as written. 2. SC2034 in route-efficiency/run-comparison.sh — A REAL BUG. The harness built the prompt into a lowercase `prompt` while the agent command referenced `$PROMPT`, which was never set or exported. Every agent would have received an EMPTY task; `|| true` would have swallowed it; every run would have failed parity; and the conclusion would have been "neither route can do this" — a confident, wholly wrong result from a variable-case typo. Verified the failure and the fix by running both forms against a stand-in agent: 0 bytes before, 743 bytes after, with __DATABASE__ correctly substituted. The prompt is now supplied on stdin AND in $PROMPT, and an empty prompt aborts the run instead of being graded as a wrong answer. 3. SC2012 in install-arm.sh and vendor-wheels.sh — `ls | wc -l` replaced with find. 4. SC2034 in vendor-wheels.sh — a genuinely unused HERE variable, removed. WHY THE BUG SURVIVED The workflow linted a hand-maintained list of five scripts. The route-efficiency harness was added later and never got added to the list, so it was never linted. The lint step now discovers every *.sh under benchmarks/ with find, so a new script is covered the moment it lands. Simulated the CI step exactly: 14 scripts, exit 0. Two regression tests added: one pinning that the prompt actually reaches the agent, one running shellcheck over every benchmark script during the normal test run so a finding does not have to wait for CI. Verified: 174 passed; all 14 scripts lint clean. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .github/workflows/loop-c-benchmark.yml | 17 +++++---- .../results/README.md | 2 +- .../run-comparison.sh | 38 ++++++++++++++----- .../shared/arms/install-arm.sh | 2 +- benchmarks/documentdb-sdk-skills/build.sh | 0 .../controls/naive-python/build.sh | 0 .../controls/naive-python/run.sh | 0 .../shared/base/vendor-wheels.sh | 5 +-- .../shared/verifier/runner.sh | 4 ++ .../environment/reference/build.sh | 0 .../environment/reference/run.sh | 0 .../tasks/orders-api-python/solution/solve.sh | 0 .../tasks/orders-api-python/tests/test.sh | 0 .../documentdb-sdk-skills/verify-controls.sh | 0 testing/run.sh | 0 .../tests/test_route_efficiency.py | 33 ++++++++++++++++ 16 files changed, 79 insertions(+), 22 deletions(-) mode change 100644 => 100755 benchmarks/documentdb-route-efficiency/run-comparison.sh mode change 100644 => 100755 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/verify-controls.sh mode change 100644 => 100755 testing/run.sh diff --git a/.github/workflows/loop-c-benchmark.yml b/.github/workflows/loop-c-benchmark.yml index 23c66ce..c301d2d 100644 --- a/.github/workflows/loop-c-benchmark.yml +++ b/.github/workflows/loop-c-benchmark.yml @@ -62,13 +62,16 @@ jobs: - name: Lint shell entrypoints run: | sudo apt-get update -qq && sudo apt-get install -y -qq shellcheck - # SC1091: sourced files live inside the image, not the repo. - shellcheck -e SC1091 \ - benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh \ - benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh \ - benchmarks/documentdb-sdk-skills/shared/ces/runner.sh \ - benchmarks/documentdb-sdk-skills/tasks/*/tests/test.sh \ - benchmarks/documentdb-sdk-skills/tasks/*/solution/solve.sh + # Lint EVERY shell script under benchmarks/, not a hand-maintained + # list. An explicit list silently stops covering new scripts, which is + # how a real bug (an agent prompt that was never passed, SC2034) sat + # unlinted in the route-efficiency harness. + # + # SC1091: sourced files live inside the container image, not the repo. + mapfile -t scripts < <(find benchmarks -name '*.sh' -type f | sort) + printf 'linting %d script(s)\n' "${#scripts[@]}" + printf ' %s\n' "${scripts[@]}" + shellcheck -e SC1091 "${scripts[@]}" # ------------------------------------------------------------------------- oracle: diff --git a/benchmarks/documentdb-route-efficiency/results/README.md b/benchmarks/documentdb-route-efficiency/results/README.md index dba502c..68ef4f0 100644 --- a/benchmarks/documentdb-route-efficiency/results/README.md +++ b/benchmarks/documentdb-route-efficiency/results/README.md @@ -19,7 +19,7 @@ cannot produce a report from a single arm. ```bash export DB_PASSWORD='' -export AGENT_CMD='copilot --allow-all-tools -p' +export AGENT_CMD='copilot --allow-all-tools -p "$PROMPT"' bash ../run-comparison.sh --iterations 5 python3 ../summarize.py raw --out "$(date -u +%F)-route-efficiency.md" diff --git a/benchmarks/documentdb-route-efficiency/run-comparison.sh b/benchmarks/documentdb-route-efficiency/run-comparison.sh old mode 100644 new mode 100755 index 54d519e..bd56dec --- a/benchmarks/documentdb-route-efficiency/run-comparison.sh +++ b/benchmarks/documentdb-route-efficiency/run-comparison.sh @@ -30,14 +30,18 @@ # # THE AGENT COMMAND # ----------------- -# Set AGENT_CMD to whatever drives your agent non-interactively. It receives the -# prompt on stdin and must leave its answer at $OUTPUT_DIR/finding.json. +# Set AGENT_CMD to whatever drives your agent non-interactively. The prompt is +# supplied BOTH on stdin and in $PROMPT, so use whichever your agent expects; +# the answer must land at $OUTPUT_DIR/finding.json. +# # There is deliberately NO default: a silent fallback would emit plausible # numbers from no agent at all, which is the one outcome worse than no data. # # Usage: # export DB_PASSWORD=... -# export AGENT_CMD='copilot --allow-all-tools -p' +# export AGENT_CMD='copilot --allow-all-tools -p "$PROMPT"' # prompt as arg +# # ... or, for an agent that reads stdin: +# export AGENT_CMD='my-agent --stdin' # bash run-comparison.sh --iterations 5 set -uo pipefail @@ -66,10 +70,10 @@ This harness will not invent a fallback. Without a real agent it could only produce numbers that look like measurements and are not, which is worse than producing nothing. - export AGENT_CMD='copilot --allow-all-tools -p' + export AGENT_CMD='copilot --allow-all-tools -p "$PROMPT"' -The command receives the prompt on stdin and must write its answer to -$OUTPUT_DIR/finding.json. +The prompt is supplied both on stdin and in $PROMPT; the answer must be +written to $OUTPUT_DIR/finding.json. MSG exit 2 fi @@ -135,13 +139,27 @@ for i in $(seq 1 "$ITERATIONS"); do continue fi - # 3. fresh agent session, identical prompt - prompt="$(sed "s/__DATABASE__/$db/g" "$TASK/instruction.md")" + # 3. fresh agent session, identical prompt. + # + # The prompt is supplied BOTH on stdin and as $PROMPT, so AGENT_CMD can + # use whichever its agent expects. + # + # This previously assigned a lowercase `prompt` while the command + # referenced `$PROMPT`, which was never set — so every agent received an + # EMPTY task, and `|| true` swallowed it. Every run would have failed + # parity and the conclusion would have been "neither route works". + # Caught by static analysis (SC2034: `prompt` assigned but never used). + PROMPT="$(sed "s/__DATABASE__/$db/g" "$TASK/instruction.md")" + export PROMPT + if [ -z "$PROMPT" ]; then + echo " FATAL: prompt is empty (missing $TASK/instruction.md?)" >&2 + continue + fi OUTPUT_DIR="$run_out" \ DOCUMENTDB_DATABASE="$db" \ timeout "${AGENT_TIMEOUT:-900}" \ - bash -c "printf '%s' \"\$PROMPT\" | $AGENT_CMD" \ - > "$run_out/agent.log" 2>&1 <<<"" || true + bash -c "$AGENT_CMD" <<<"$PROMPT" \ + > "$run_out/agent.log" 2>&1 || true # 4. parity FIRST — cost is meaningless without it python3 "$HERE/shared/verifier/check_parity.py" \ diff --git a/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh b/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh old mode 100644 new mode 100755 index be01079..cab2913 --- a/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh +++ b/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh @@ -54,7 +54,7 @@ route-script) mkdir -p "$TOOLS_DEST" cp -r "$KIT_SRC/scripts" "$KIT_SRC/knowledge-base" "$TOOLS_DEST"/ chmod +x "$TOOLS_DEST"/scripts/*.sh "$TOOLS_DEST"/knowledge-base/*.sh 2>/dev/null || true - echo "[arm] installed $(ls "$TOOLS_DEST"/scripts/*.sh 2>/dev/null | wc -l) scripts + router" + echo "[arm] installed $(find "$TOOLS_DEST/scripts" -maxdepth 1 -name '*.sh' 2>/dev/null | wc -l) scripts + router" ;; esac diff --git a/benchmarks/documentdb-sdk-skills/build.sh b/benchmarks/documentdb-sdk-skills/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh b/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh old mode 100644 new mode 100755 index 4f48469..5251766 --- a/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh +++ b/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh @@ -24,7 +24,6 @@ set -euo pipefail DEST="${1:-.wheels}" -HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Pinned, and shared by the base image (verifier) and the task image # (reference app). One list keeps them from drifting apart. @@ -51,7 +50,7 @@ mkdir -p "$DEST" # Already vendored? Skip the download — this script runs on every build. if [ -n "$(ls -A "$DEST" 2>/dev/null || true)" ] && [ -z "${VENDOR_FORCE:-}" ]; then - echo " $DEST already populated ($(ls "$DEST" | wc -l) files); set VENDOR_FORCE=1 to refresh" + echo " $DEST already populated ($(find "$DEST" -maxdepth 1 -type f | wc -l) files); set VENDOR_FORCE=1 to refresh" exit 0 fi @@ -79,4 +78,4 @@ if ! python3 -m pip download \ exit 1 fi -echo " vendored $(ls "$DEST" | wc -l) wheels" +echo " vendored $(find "$DEST" -maxdepth 1 -type f | wc -l) wheels" diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh b/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh index cd4a948..bd9de22 100644 --- a/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh @@ -88,7 +88,11 @@ section "4. Run" ( cd "$APP_DIR" && ./run.sh ) >"$LOG_DIR/app.log" 2>&1 & APP_PID=$! +# shellcheck disable=SC2317 # invoked indirectly by the EXIT trap below cleanup() { + # Stop the agent's app when the verifier exits, however it exits — success, + # early `fail`, or a timeout. Without this the app keeps holding the port + # and the database connection after grading finishes. if kill -0 "$APP_PID" 2>/dev/null; then kill "$APP_PID" 2>/dev/null || true fi diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/verify-controls.sh b/benchmarks/documentdb-sdk-skills/verify-controls.sh old mode 100644 new mode 100755 diff --git a/testing/run.sh b/testing/run.sh old mode 100644 new mode 100755 diff --git a/testing/scenarios/route-efficiency/tests/test_route_efficiency.py b/testing/scenarios/route-efficiency/tests/test_route_efficiency.py index d1bd4e5..83b0e2f 100644 --- a/testing/scenarios/route-efficiency/tests/test_route_efficiency.py +++ b/testing/scenarios/route-efficiency/tests/test_route_efficiency.py @@ -320,3 +320,36 @@ def test_published_rates_agree_with_copilot_credits(): conn.close() if not checked: pytest.skip("not enough local usage rows to cross-check") + + +def test_prompt_is_actually_passed_to_the_agent(): + """Regression: the harness once built the prompt into a lowercase variable + while the agent command referenced an uppercase one that was never set. + + Every agent would have received an EMPTY task, `|| true` would have hidden + it, every run would have failed parity, and the conclusion would have been + "neither route can do this" — a confident, wholly wrong result from a + one-character-class typo. Static analysis caught it (SC2034). + """ + src = (BENCH / "run-comparison.sh").read_text() + assert 'PROMPT="$(sed' in src, "the prompt must be assigned to PROMPT" + assert "export PROMPT" in src, "PROMPT must be exported for AGENT_CMD" + assert '<<<"$PROMPT"' in src, "the prompt must also reach the agent on stdin" + assert 'if [ -z "$PROMPT" ]' in src, ( + "an empty prompt must abort the run rather than silently grading a " + "no-op as a failed answer" + ) + + +def test_no_shell_script_has_lint_findings(): + """CI lints every script under benchmarks/. Keeping this here means a + finding shows up in the normal test run too, not only in CI.""" + import shutil + import subprocess + if not shutil.which("shellcheck"): + pytest.skip("shellcheck not installed") + scripts = sorted(str(p) for p in (kit.REPO_DIR / "benchmarks").rglob("*.sh")) + assert scripts, "no shell scripts found under benchmarks/" + proc = subprocess.run(["shellcheck", "-e", "SC1091", *scripts], + capture_output=True, text=True, timeout=180) + assert proc.returncode == 0, f"shellcheck findings:\n{proc.stdout[:2000]}" From 72e7c72508592ec7b88dc00d66cf74ebc2f0599a Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 18 Aug 2026 19:07:10 -0700 Subject: [PATCH 33/52] Fix workflow issues --- benchmarks/documentdb-route-efficiency/run-comparison.sh | 0 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh | 0 benchmarks/documentdb-sdk-skills/build.sh | 0 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh | 0 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh | 0 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh | 0 .../tasks/orders-api-python/environment/reference/build.sh | 0 .../tasks/orders-api-python/environment/reference/run.sh | 0 .../tasks/orders-api-python/solution/solve.sh | 0 .../documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh | 0 benchmarks/documentdb-sdk-skills/verify-controls.sh | 0 testing/run.sh | 0 12 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 benchmarks/documentdb-route-efficiency/run-comparison.sh mode change 100755 => 100644 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/verify-controls.sh mode change 100755 => 100644 testing/run.sh diff --git a/benchmarks/documentdb-route-efficiency/run-comparison.sh b/benchmarks/documentdb-route-efficiency/run-comparison.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh b/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/build.sh b/benchmarks/documentdb-sdk-skills/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh b/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/verify-controls.sh b/benchmarks/documentdb-sdk-skills/verify-controls.sh old mode 100755 new mode 100644 diff --git a/testing/run.sh b/testing/run.sh old mode 100755 new mode 100644 From 1da37faccea0867aa1a867ce1d6219e18942268c Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Wed, 19 Aug 2026 04:09:15 +0000 Subject: [PATCH 34/52] cleanup --- .../2026-08-17-controls-validation.json | 34 ----- .../results/2026-08-17-controls-validation.md | 51 ------- .../documentdb-sdk-skills/results/README.md | 82 ----------- knowledge-base/kb_route_demo.py | 130 ------------------ 4 files changed, 297 deletions(-) delete mode 100644 benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.json delete mode 100644 benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.md delete mode 100644 benchmarks/documentdb-sdk-skills/results/README.md delete mode 100644 knowledge-base/kb_route_demo.py diff --git a/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.json b/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.json deleted file mode 100644 index 22804db..0000000 --- a/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "all_as_expected": true, - "controls": { - "empty": { - "actual_reward": 0, - "as_expected": true, - "checks_passed": null, - "checks_total": null, - "expected_reward": 0 - }, - "naive": { - "actual_reward": 0, - "as_expected": true, - "checks_passed": 20, - "checks_total": 30, - "expected_reward": 0 - }, - "oracle": { - "actual_reward": 1, - "as_expected": true, - "checks_passed": 31, - "checks_total": 31, - "expected_reward": 1 - } - }, - "kind": "controls-validation", - "provenance": { - "command": "bash verify-controls.sh", - "date": "2026-08-17", - "host": "local docker", - "image_tag": "documentdb-orders-api-python:latest", - "kit_commit": "3707cb1" - } -} diff --git a/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.md b/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.md deleted file mode 100644 index fefbcba..0000000 --- a/benchmarks/documentdb-sdk-skills/results/2026-08-17-controls-validation.md +++ /dev/null @@ -1,51 +0,0 @@ -# Grader validation — 2026-08-17 - -Generated by `bash verify-controls.sh --output results/2026-08-17-controls-validation.json`. -Machine-readable companion: [`2026-08-17-controls-validation.json`](2026-08-17-controls-validation.json). - -| Field | Value | -|---|---| -| Date | 2026-08-17 | -| Kit commit | `3707cb1` | -| Image | `documentdb-orders-api-python:latest` | -| Host | local Docker | - -## Result - -| Control | Expected | Actual | Checks | | -|---|---|---|---|---| -| oracle (reference impl) | 1 | **1** | 31/31 | ✅ | -| empty `/app` | 0 | **0** | — | ✅ | -| naive (working, no best practice) | 0 | **0** | 20/30 | ✅ | - -Per-category, naive vs oracle: - -| Category | Naive | Oracle | -|---|---|---| -| `api` | 6/6 | 6/6 | -| `behavior` | 6/6 | 6/6 | -| `documentdb` | **0/5** | 6/6 | -| `engine` | **2/4** | 4/4 | -| `source` | **1/4** | 4/4 | -| `skills` | 4/4 | 4/4 | - -## What this establishes - -The grader **can be satisfied** (oracle), **can fail** (empty), and — the part -that matters — **discriminates between basic competence and best practice**. - -The naive submission is fully functional: every endpoint correct, real -persistence, duplicates rejected, filtered queries returning the right rows. It -scores **12/12 on competence and 3/13 on best practice**. That separation is the -benchmark's entire reason to exist. - -## What this does NOT establish - -Nothing about the kit's effectiveness. No agent has attempted this task; these -are fixed reference submissions used to validate the instrument. The -effectiveness question needs an MSBench run of both arms — see -[`../docs/REPORT.md`](../docs/REPORT.md). - -*(The naive run grades 30 rather than 31 because the ESR ordering check is -skipped when no compound index exists at all; a skipped check counts as neither -a pass nor a failure.)* diff --git a/benchmarks/documentdb-sdk-skills/results/README.md b/benchmarks/documentdb-sdk-skills/results/README.md deleted file mode 100644 index d921d0a..0000000 --- a/benchmarks/documentdb-sdk-skills/results/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# Committed results - -Benchmark results are **checked in**, so a number quoted in a deck can be traced -to the run that produced it, by someone who was not there. - -Raw run output is not. `msbench-cli` emits large per-instance dumps, trajectories -and logs; those stay out of git (see [`.gitignore`](../.gitignore)). What lands -here is the **curated artifact**: a `.json` for tooling and a `.md` for humans, -each carrying enough provenance to re-run it. - -## Naming - -``` --[-].{json,md} - -2026-08-17-controls-validation.json grader validation (no arms — not an A/B) -2026-11-04-effectiveness-treatment.json the skills arm -2026-11-04-effectiveness-control.json the no-skills arm -2026-11-04-effectiveness.md the generated comparison -``` - -## Two rules, both enforced by tests - -### 1. Arms come in pairs - -An effectiveness result **may not be committed for one arm alone**. A treatment -score with no control is not a result: 80% resolved could mean an excellent kit -or an easy task, and nothing in the number tells you which. - -`testing/scenarios/benchmark-config/` fails if a `*-treatment.json` has no -matching `*-control.json`. - -> This is the one place the DocumentDB kit deliberately diverges from -> `cosmosdb-agent-kit`, whose committed batch results are all `*-skills.*` with -> no control counterpart — so a reader cannot compute a delta from what is in -> that repo. - -### 2. Provenance is mandatory - -Every committed result carries a `provenance` block: - -| Field | Why | -|---|---| -| `run_id` | the MSBench run, so the raw output can be retrieved | -| `date` | when it ran | -| `benchmark` | which arm produced it | -| `image_tag` | the exact task image — the task can change | -| `dataset_version` | the dataset row set | -| `kit_commit` | the skills the agent had; results are meaningless without it | -| `model` | cross-model comparison is only valid like-for-like | -| `pass_at_k` | attempts per instance | - -A result missing any of these cannot be interpreted a year later, so the test -rejects it. - -## Generating - -```bash -# effectiveness (needs both arms — see docs/REPORT.md §4 stage 5) -msbench-cli report --run_id --output results/2026-11-04-effectiveness-treatment.json -msbench-cli report --run_id --output results/2026-11-04-effectiveness-control.json - -python3 report.py \ - --treatment results/2026-11-04-effectiveness-treatment.json \ - --control results/2026-11-04-effectiveness-control.json \ - --out results/2026-11-04-effectiveness.md -``` - -```bash -# grader validation (Docker only, no internal access) -bash verify-controls.sh -``` - -## What is here now - -| File | What | -|---|---| -| [`2026-08-17-controls-validation.json`](2026-08-17-controls-validation.json) | grader validation — oracle / empty / naive | -| [`2026-08-17-controls-validation.md`](2026-08-17-controls-validation.md) | the same, readable | - -**No effectiveness results yet** — no MSBench run has been executed. See -[`../docs/REPORT.md`](../docs/REPORT.md). diff --git a/knowledge-base/kb_route_demo.py b/knowledge-base/kb_route_demo.py deleted file mode 100644 index da23716..0000000 --- a/knowledge-base/kb_route_demo.py +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/env python3 -"""kb_route_demo.py — show HOW the knowledge-base router scores and picks a tool. - -Unlike kb_route.py (which just prints the winning route), this demo prints the -full scoring process for a query: every tool's score, the signal breakdown -(multiword-phrase / single-keyword / example-overlap / one-hop boost), and how -the router lands on the winner. It is a teaching / debugging aid. - -Run it directly from bash (no DocumentDB container needed — routing is a pure -text layer over knowledge-base/kb.json): - - python3 knowledge-base/kb_route_demo.py - python3 knowledge-base/kb_route_demo.py "why are my aggregations slow" - ./knowledge-base/kb_route_demo.py # also works (executable + shebang) - -With no argument it demonstrates the document-bloat / TOAST scenario. -""" - -import importlib.util -import json -import os -import sys -from pathlib import Path - -HERE = Path(__file__).resolve().parent -KB_JSON = Path(os.environ.get("KB_FILE", HERE / "kb.json")) -DEFAULT_QUERY = "why are my aggregations slow even though I have indexes" - - -def load_engine(): - """Import the real routing engine so the demo uses the SAME logic, not a copy.""" - spec = importlib.util.spec_from_file_location("kb_route", HERE / "kb_route.py") - mod = importlib.util.module_from_spec(spec) - spec.loader.exec_module(mod) - return mod - - -def signal_breakdown(engine, tool, q_tokens, q_lower): - """Re-derive the per-signal contributions for one tool (mirrors score_tool).""" - parts = [] - kw_total = 0.0 - for kw in tool.get("keywords", []): - kwl = kw.lower() - if " " in kwl: - if kwl in q_lower: - parts.append((f'keyword phrase "{kw}"', 3.0)); kw_total += 3.0 - else: - if kwl in q_tokens: - parts.append((f'keyword "{kw}"', 1.5)); kw_total += 1.5 - best_ex, best_ex_q = 0.0, None - for ex in tool.get("example_queries", []): - ex_tokens = engine.tokenize(ex) - engine.STOP - ov = len(ex_tokens & q_tokens) - frac = ov / max(1, len(ex_tokens)) - if frac > best_ex: - best_ex, best_ex_q = frac, ex - if best_ex > 0: - parts.append((f'example overlap "{best_ex_q}" ({best_ex:.2f})', 2.5 * best_ex)) - return parts - - -def one_hop_boost(engine, kb, q_tokens): - """Return {tool_id: (boost, matched_route_query)} from routes_one_hop.""" - boost = {} - for r in kb.get("routes_one_hop", {}).get("examples", []): - r_tokens = engine.tokenize(r["query"]) - engine.STOP - ov = len(r_tokens & q_tokens) - frac = ov / max(1, len(r_tokens)) - if frac > 0 and frac > boost.get(r["tool"], (0, None))[0]: - boost[r["tool"]] = (frac, r["query"]) - return boost - - -def main(): - query = " ".join(sys.argv[1:]).strip() or DEFAULT_QUERY - engine = load_engine() - with open(KB_JSON) as fh: - kb = json.load(fh) - - q_tokens = engine.tokenize(query) - engine.STOP - q_lower = query.lower() - boost = one_hop_boost(engine, kb, q_tokens) - - bar = "═" * 74 - print(bar) - print(" KB Router — scoring walkthrough") - print(bar) - print(f' Query : "{query}"') - print(f' Tokens : {sorted(q_tokens)} (stop-words removed)') - print(f' KB source : {KB_JSON}') - print() - print(" Scoring rules: keyword phrase +3.0 · single keyword +1.5 ·") - print(" best example overlap +2.5×frac · one-hop route +2.0×frac") - print("─" * 74) - - # Rank via the REAL engine so the winner matches production exactly. - ranked = engine.rank_tools(kb, query) - - for rank, (score, tool, hits) in enumerate(ranked, 1): - if score <= 0: - continue - marker = "⭐ WINNER" if rank == 1 else f" #{rank}" - print(f"\n {marker} [{tool['id']}] score {score:.2f}") - for label, pts in signal_breakdown(engine, tool, q_tokens, q_lower): - print(f" +{pts:>4.2f} {label}") - if tool["id"] in boost: - frac, rq = boost[tool["id"]] - print(f' +{2.0*frac:>4.2f} one-hop route "{rq}" ({frac:.2f})') - - zero = [t["id"] for s, t, _ in ranked if s <= 0] - if zero: - print(f"\n (score 0, not shown: {', '.join(zero)})") - - best_s, best_t, best_hits = ranked[0] - conf = "high" if best_s >= 4 else ("medium" if best_s >= 2 else "low") - runner_up = next(((s, t) for s, t, _ in ranked[1:] if s > 0), None) - print("\n" + "─" * 74) - print(" Decision:") - print(f" sort tools by score desc → ranked[0] wins") - print(f" winner : {best_t['id']} (score {best_s:.2f}, confidence {conf})") - if runner_up: - rs, rt = runner_up - print(f" runner-up : {rt['id']} (score {rs:.2f}, margin {best_s-rs:.2f})") - print(f" confident? : {best_s >= 2.0} (threshold 2.0)") - print(f" command : {best_t['invocation']}") - print(bar) - - -if __name__ == "__main__": - main() From 32b2e8c1b303986e025b2d1e5184878fed89967b Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Wed, 19 Aug 2026 04:19:19 +0000 Subject: [PATCH 35/52] Stop config validation depending on generated results MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removing benchmarks/documentdb-sdk-skills/results/ broke the Loop C validate job. The dependency was mine and it was backwards. results/ holds DATA — the output of running the benchmark. scenarios/benchmark-config validates CONFIGURATION — registration files, task layout, verifier wiring. Coupling "is this benchmark correctly configured" to "has someone run it and kept the output" is wrong: - a fresh clone should validate. Confirmed by cloning: results/ is not in git, so this test would have failed EVERY CI run, not just after cleanup. - results are dated artifacts; pruning stale ones is housekeeping, not a regression - a PR touching only the verifier should not fail because results were tidied Not every results/ test was wrong, and the distinction matters: improper test_results_directory_documents_its_contract hard-required results/README.md to exist proper arm-pairing, provenance, and .md-companion checks only assert things about results that DO exist, so they pass vacuously on an empty or absent directory. Those are unchanged. The README check now applies only once there are results to interpret, which preserves its intent without making absence a failure. The naming and provenance contract has moved into the benchmark README, so the convention survives deletion of the data directory rather than living inside it. Also fixed four links in docs/REPORT.md that pointed at the removed artifacts; the grader-validation section now gives the regeneration command instead of citing a specific dated file. Verified: 172 passed, 2 skipped (both correctly skipping on absent results). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- .../run-comparison.sh | 0 .../shared/arms/install-arm.sh | 0 benchmarks/documentdb-sdk-skills/README.md | 24 ++++++++++++++++--- benchmarks/documentdb-sdk-skills/build.sh | 0 .../controls/naive-python/build.sh | 0 .../controls/naive-python/run.sh | 0 .../documentdb-sdk-skills/docs/REPORT.md | 18 ++++++++------ .../shared/base/vendor-wheels.sh | 0 .../environment/reference/build.sh | 0 .../environment/reference/run.sh | 0 .../tasks/orders-api-python/solution/solve.sh | 0 .../tasks/orders-api-python/tests/test.sh | 0 .../documentdb-sdk-skills/verify-controls.sh | 0 testing/run.sh | 0 .../tests/test_benchmark_config.py | 18 ++++++++++++-- 15 files changed, 48 insertions(+), 12 deletions(-) mode change 100644 => 100755 benchmarks/documentdb-route-efficiency/run-comparison.sh mode change 100644 => 100755 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/verify-controls.sh mode change 100644 => 100755 testing/run.sh diff --git a/benchmarks/documentdb-route-efficiency/run-comparison.sh b/benchmarks/documentdb-route-efficiency/run-comparison.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh b/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/README.md b/benchmarks/documentdb-sdk-skills/README.md index 57e52d1..480fd31 100644 --- a/benchmarks/documentdb-sdk-skills/README.md +++ b/benchmarks/documentdb-sdk-skills/README.md @@ -222,9 +222,27 @@ msbench-cli run --benchmark documentdb-sdk-skills \ ## Results -Committed under [`results/`](results/) with provenance, so any number can be -traced to its run. Effectiveness results must be committed **in arm pairs** — -a treatment score with no control is not a result. +`results/` is **generated output**, not source. It may be absent — a fresh +clone has none, and pruning stale artifacts is housekeeping. The benchmark's +configuration is valid either way; the tests only assert things about results +that actually exist. + +When results *are* committed, two rules apply (enforced by +`testing/scenarios/benchmark-config/`): + +| Rule | Why | +|---|---| +| **Arms come in pairs** — a `*-treatment.json` needs its `*-control.json` | a treatment score with no control is not a result: 80% resolved could mean an excellent kit or an easy task | +| **Provenance is mandatory** — `run_id`, `date`, `benchmark`, `image_tag`, `dataset_version`, `kit_commit`, `model`, `pass_at_k` | without `kit_commit` you cannot say which skills the agent had; without `model` you cannot compare like-for-like | + +Naming: `-[-].{json,md}` — a `.json` for tooling, a `.md` for +humans. Raw MSBench dumps stay gitignored; only curated artifacts are committed. + +Regenerate the grader-validation artifact any time: + +```bash +bash verify-controls.sh --output "results/$(date -u +%F)-controls-validation.json" +``` **No MSBench run has been executed yet**, so there is no effectiveness data. [`docs/REPORT.md`](docs/REPORT.md) records what has been measured (grader diff --git a/benchmarks/documentdb-sdk-skills/build.sh b/benchmarks/documentdb-sdk-skills/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/docs/REPORT.md b/benchmarks/documentdb-sdk-skills/docs/REPORT.md index fdbefbe..c897435 100644 --- a/benchmarks/documentdb-sdk-skills/docs/REPORT.md +++ b/benchmarks/documentdb-sdk-skills/docs/REPORT.md @@ -76,9 +76,12 @@ The benchmark's **grader** has been validated end-to-end on a local build. This proves the instrument works. It says nothing about whether the kit helps — no agent has attempted the task. -Committed artifact: -[`results/2026-08-17-controls-validation.json`](../results/2026-08-17-controls-validation.json) -(readable: [`.md`](../results/2026-08-17-controls-validation.md)). +Measured on 2026-08-17 at kit commit `3707cb1`. Regenerate at any time — the +script asserts each expected reward and exits non-zero on a deviation: + +```bash +bash verify-controls.sh --output "results/$(date -u +%F)-controls-validation.json" +``` | Submission | Reward | Checks | |---|---|---| @@ -464,8 +467,9 @@ are non-deterministic; a single attempt is an anecdote. ### Stage 6 — Generate the effectiveness report -Results are **committed**, so a number quoted later can be traced to the run -that produced it. Write them into [`results/`](../results/): +Committed results let a number quoted later be traced to the run that produced +it. Write them into `results/` (generated output — the directory may not exist +until you create it): ```bash DATE=$(date -u +%F) @@ -485,8 +489,8 @@ Two rules, both enforced by tests in `testing/scenarios/benchmark-config/`: **arms must be committed in pairs** (a treatment score with no control is not a result), and **every result carries provenance** — `run_id`, `image_tag`, `dataset_version`, `kit_commit`, `model`, `pass_at_k`. Raw MSBench dumps stay -gitignored; only the curated artifact is checked in. See -[`results/README.md`](../results/README.md). +gitignored; only the curated artifact is checked in. The full contract is in +the [benchmark README](../README.md#results). `report.py` **refuses to run on a single arm**. Add `--json` for machine-readable output. diff --git a/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh b/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/verify-controls.sh b/benchmarks/documentdb-sdk-skills/verify-controls.sh old mode 100644 new mode 100755 diff --git a/testing/run.sh b/testing/run.sh old mode 100644 new mode 100755 diff --git a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py index 9064ed8..bd133af 100644 --- a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py +++ b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py @@ -516,9 +516,23 @@ def _result_files(): def test_results_directory_documents_its_contract(): + """The naming/provenance contract must be documented — but only once there + are results to interpret. + + This originally hard-required results/README.md, which made a CONFIG + validation depend on DATA being present: deleting stale artifacts, or + cloning fresh, failed the suite. Results are generated output and are + legitimately prunable; the benchmark's configuration is valid either way. + + The contract itself now lives in the benchmark README, so it survives + deletion of the data directory. + """ + if not _result_files(): + pytest.skip("no committed results yet; nothing to interpret") assert (RESULTS / "README.md").is_file(), ( - "results/ must carry a README defining the naming and provenance " - "contract, or committed numbers become uninterpretable folklore" + "results/ contains artifacts but no README defining the naming and " + "provenance contract — committed numbers become uninterpretable " + "folklore without it" ) From e0f488daa2dbd817f9ee21f753e987419a161e41 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 18 Aug 2026 21:22:23 -0700 Subject: [PATCH 36/52] Further cleanup to remove unnecessary dependency for Loop C benchmark --- benchmarks/documentdb-route-efficiency/run-comparison.sh | 0 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh | 0 benchmarks/documentdb-sdk-skills/build.sh | 0 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh | 0 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh | 0 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh | 0 .../tasks/orders-api-python/environment/reference/build.sh | 0 .../tasks/orders-api-python/environment/reference/run.sh | 0 .../tasks/orders-api-python/solution/solve.sh | 0 .../documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh | 0 benchmarks/documentdb-sdk-skills/verify-controls.sh | 0 testing/run.sh | 0 12 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 benchmarks/documentdb-route-efficiency/run-comparison.sh mode change 100755 => 100644 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/verify-controls.sh mode change 100755 => 100644 testing/run.sh diff --git a/benchmarks/documentdb-route-efficiency/run-comparison.sh b/benchmarks/documentdb-route-efficiency/run-comparison.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh b/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/build.sh b/benchmarks/documentdb-sdk-skills/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh b/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/verify-controls.sh b/benchmarks/documentdb-sdk-skills/verify-controls.sh old mode 100755 new mode 100644 diff --git a/testing/run.sh b/testing/run.sh old mode 100755 new mode 100644 From 606441e8b84e2c76736d5a0cffae5e9f1e2e917d Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Fri, 28 Aug 2026 21:35:53 +0000 Subject: [PATCH 37/52] Clarify remediation structural redundancy guard Distinguishes structural redundancy from transient WRITE_TAX findings caused by asynchronous live usage counters on a newly created index. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- testing/scenarios/remediation-effect/SCENARIO.md | 6 +++++- .../tests/test_remediation_effect.py | 14 +++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/testing/scenarios/remediation-effect/SCENARIO.md b/testing/scenarios/remediation-effect/SCENARIO.md index 386f17e..275c5d9 100644 --- a/testing/scenarios/remediation-effect/SCENARIO.md +++ b/testing/scenarios/remediation-effect/SCENARIO.md @@ -77,7 +77,11 @@ An improvement metric alone is trivially gamed: index every field and everything looks fast. Three guards make that cost something: - **`index-redundancy-finder.sh` is run as a paired regression guard** — the - remediation may not introduce indexes the kit itself would flag. + remediation may not introduce structural redundancy (`EXACT_DUPLICATE`, + `PREFIX_REDUNDANT`, or `REVERSE_VARIANT`). Live-counter findings such as + `WRITE_TAX` are excluded: a brand-new index can briefly report zero reads + until asynchronous usage counters propagate, even when `explain()` already + shows `IXSCAN`. - **Result sets must be identical** — a faster query returning different rows is not a fix. - **The before-state must genuinely be slow** — otherwise every later assertion diff --git a/testing/scenarios/remediation-effect/tests/test_remediation_effect.py b/testing/scenarios/remediation-effect/tests/test_remediation_effect.py index 8f2e41b..67d1f60 100644 --- a/testing/scenarios/remediation-effect/tests/test_remediation_effect.py +++ b/testing/scenarios/remediation-effect/tests/test_remediation_effect.py @@ -236,6 +236,14 @@ def test_no_redundant_index_was_introduced(seeded_db, remediated): Speed metrics are trivially gameable by indexing everything, so the kit's own redundancy finder is run as a paired regression guard. + + Only STRUCTURAL redundancy rules are relevant here. `WRITE_TAX` and + `UNUSED_VERIFIED` depend on live usage counters, and a newly-created index + can be reported as unused until those asynchronous counters propagate. An + immediate standalone reproduction exposed exactly that race: the same + healthy index was briefly labelled WRITE_TAX even though the query plan was + IXSCAN. Treating that as structural redundancy would make this test + timing-dependent and conflate two different questions. """ if not GUARDS.get("no_new_redundancy"): pytest.skip("guard disabled in expected-findings.yaml") @@ -245,7 +253,11 @@ def test_no_redundant_index_was_introduced(seeded_db, remediated): f"index-redundancy-finder failed: {r.stderr[:300]}" ) findings = r.json if isinstance(r.json, list) else r.json.get("findings", []) - offending = [f for f in findings if f.get("collection") == COLL] + structural_rules = {"EXACT_DUPLICATE", "PREFIX_REDUNDANT", "REVERSE_VARIANT"} + offending = [ + f for f in findings + if f.get("collection") == COLL and f.get("rule") in structural_rules + ] assert not offending, ( f"remediation introduced redundant indexes: {json.dumps(offending)[:400]}" ) From 16975d263843955b432b201cc383ef4b7a309c95 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 31 Aug 2026 23:28:35 +0000 Subject: [PATCH 38/52] Add MongoDB-to-DocumentDB ecommerce compatibility quickstart Adds a portable Node.js project, reusable generation prompt, deterministic ecommerce seed, one find query and three relational-style lookup aggregations. The unchanged project was run against MongoDB 7 and a fresh DocumentDB Local endpoint by changing only MONGODB_URI. Both passed four exact-result checks and produced byte-identical 2,420-byte output with SHA-256 c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- scenarios/ecommerce/README.md | 1 + .../mongodb-documentdb-compat/.gitignore | 2 + .../mongodb-documentdb-compat/PROMPT.md | 27 +++ .../mongodb-documentdb-compat/QUICKSTART.md | 157 +++++++++++++++++ .../package-lock.json | 162 ++++++++++++++++++ .../mongodb-documentdb-compat/package.json | 16 ++ .../scripts/run-queries.js | 14 ++ .../mongodb-documentdb-compat/scripts/seed.js | 115 +++++++++++++ .../scripts/verify.js | 143 ++++++++++++++++ .../mongodb-documentdb-compat/src/database.js | 28 +++ .../mongodb-documentdb-compat/src/queries.js | 149 ++++++++++++++++ 11 files changed, 814 insertions(+) create mode 100644 scenarios/ecommerce/mongodb-documentdb-compat/.gitignore create mode 100644 scenarios/ecommerce/mongodb-documentdb-compat/PROMPT.md create mode 100644 scenarios/ecommerce/mongodb-documentdb-compat/QUICKSTART.md create mode 100644 scenarios/ecommerce/mongodb-documentdb-compat/package-lock.json create mode 100644 scenarios/ecommerce/mongodb-documentdb-compat/package.json create mode 100644 scenarios/ecommerce/mongodb-documentdb-compat/scripts/run-queries.js create mode 100644 scenarios/ecommerce/mongodb-documentdb-compat/scripts/seed.js create mode 100644 scenarios/ecommerce/mongodb-documentdb-compat/scripts/verify.js create mode 100644 scenarios/ecommerce/mongodb-documentdb-compat/src/database.js create mode 100644 scenarios/ecommerce/mongodb-documentdb-compat/src/queries.js diff --git a/scenarios/ecommerce/README.md b/scenarios/ecommerce/README.md index 87913d8..370890b 100644 --- a/scenarios/ecommerce/README.md +++ b/scenarios/ecommerce/README.md @@ -10,6 +10,7 @@ the diagnostic toolbox: `perf-advisor.sh`, `index-redundancy-finder.sh`, and | File | What it is | |------|-----------| | `seed.sh` | Self-contained seeder (embeds the data-generation script; ~50K orders, ~150K order_items). | +| [`mongodb-documentdb-compat/`](mongodb-documentdb-compat/QUICKSTART.md) | Portable Node.js workload that runs unchanged against MongoDB 7 and DocumentDB, including three `$lookup` queries and byte-identical result verification. | ## Run diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/.gitignore b/scenarios/ecommerce/mongodb-documentdb-compat/.gitignore new file mode 100644 index 0000000..cad09be --- /dev/null +++ b/scenarios/ecommerce/mongodb-documentdb-compat/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +results/*.json diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/PROMPT.md b/scenarios/ecommerce/mongodb-documentdb-compat/PROMPT.md new file mode 100644 index 0000000..17805e5 --- /dev/null +++ b/scenarios/ecommerce/mongodb-documentdb-compat/PROMPT.md @@ -0,0 +1,27 @@ +# Prompt: build a portable MongoDB e-commerce project + +Create a small Node.js project using the official `mongodb` driver. + +Requirements: + +1. Read the connection exclusively from `MONGODB_URI` and the database name + from `MONGODB_DATABASE`. Do not branch on whether the server is MongoDB or + Azure DocumentDB. +2. Create one process-wide `MongoClient` and reuse its connection pool. +3. Seed deterministic e-commerce data into these referenced collections: + `customers`, `products`, `orders`, `order_items`, and `inventory`. +4. Add indexes for the fields used by filters and joins. +5. Implement and verify: + - a filtered and sorted `find()` query; + - a customer/order summary using `$group` and `$lookup`; + - an order-detail query joining orders, customers, and order items; + - a product/inventory query using `$lookup`. +6. Make query output deterministic by projecting away `_id` and adding stable + sort keys. +7. Add an automated verification command that asserts exact results. +8. First run everything against MongoDB 7. Then run the unchanged source + against Azure DocumentDB by changing only `MONGODB_URI`. +9. Save each endpoint's query output separately and byte-compare them. + +Do not hardcode credentials, disable TLS in source, or add database-specific +conditionals. diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/QUICKSTART.md b/scenarios/ecommerce/mongodb-documentdb-compat/QUICKSTART.md new file mode 100644 index 0000000..12d6332 --- /dev/null +++ b/scenarios/ecommerce/mongodb-documentdb-compat/QUICKSTART.md @@ -0,0 +1,157 @@ +# MongoDB to Azure DocumentDB: e-commerce compatibility quick-start + +This project runs one unchanged Node.js workload against MongoDB 7 and Azure +DocumentDB. The only application setting that changes is `MONGODB_URI`. + +> Azure DocumentDB and this agent kit are in public preview. This walkthrough +> is a local compatibility demonstration, not production deployment guidance. + +The reusable project-generation prompt is in [`PROMPT.md`](PROMPT.md). + +## What the workload covers + +The deterministic seed creates: + +| Collection | Documents | +|---|---:| +| `customers` | 12 | +| `products` | 16 | +| `orders` | 48 | +| `order_items` | 96 | +| `inventory` | 32 | + +The four checks include one filtered `find()` and three relational-style +aggregations: + +1. Orders grouped by customer, then joined to `customers` with `$lookup`. +2. One order joined to its customer and `order_items`. +3. Products joined to `inventory`, with warehouse counts and total quantity. + +The queries use portable MongoDB operators only: `$match`, `$group`, `$lookup`, +`$unwind`, `$project`, `$sort`, `$limit`, `$size`, and `$sum`. + +## 1. Install + +```bash +cd scenarios/ecommerce/mongodb-documentdb-compat +npm ci +``` + +The project uses one singleton `MongoClient`. Authentication and TLS stay in +the URI, so there is no MongoDB-vs-DocumentDB branch in the source. + +## 2. Run against MongoDB 7 + +Start a clean MongoDB container: + +```bash +docker rm -f mongodb-compat 2>/dev/null || true +docker run -d --name mongodb-compat \ + -p 127.0.0.1:27018:27017 \ + mongo:7.0 +``` + +Run the seed and exact-result verification: + +```bash +export MONGODB_URI='mongodb://127.0.0.1:27018/?directConnection=true' +npm test + +RESULT_FILE=results/mongodb.json npm run query >/dev/null +sha256sum results/mongodb.json +``` + +### MongoDB result + +Measured on 2026-08-31: + +```text +{"database":"ecommerce_compat","counts":{"customers":12,"products":16,"orders":48,"order_items":96,"inventory":32}} +{"status":"PASS","checks":4,"query_shapes":{"find":1,"lookup_aggregations":3}} +ELAPSED_SECONDS=0.85 +c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30 results/mongodb.json +``` + +The elapsed time is one local functional run, excluding container startup. It +is recorded for reproducibility, not as a performance comparison. + +## 3. Switch to Azure DocumentDB + +Start a fresh local DocumentDB container using the current documented command +arguments: + +```bash +export DOCDB_PASSWORD='' + +docker rm -f documentdb-compat 2>/dev/null || true +docker run -d --name documentdb-compat \ + -p 127.0.0.1:10261:10260 \ + ghcr.io/microsoft/documentdb/documentdb-local:latest \ + --username docdbadmin \ + --password "$DOCDB_PASSWORD" +``` + +Wait for the gateway to start, then change only the endpoint: + +```bash +ENCODED_PASSWORD=$(node -p 'encodeURIComponent(process.argv[1])' "$DOCDB_PASSWORD") +export MONGODB_URI="mongodb://docdbadmin:${ENCODED_PASSWORD}@127.0.0.1:10261/?tls=true&tlsAllowInvalidCertificates=true" + +npm test + +RESULT_FILE=results/documentdb.json npm run query >/dev/null +sha256sum results/documentdb.json +``` + +No JavaScript, query, schema, seed, or index definition changes are required. +The DocumentDB URI adds credentials and local self-signed-certificate options. +For Azure-hosted DocumentDB, use the connection string supplied by Azure and +do not enable `tlsAllowInvalidCertificates`. + +### DocumentDB result + +Measured on 2026-08-31: + +```text +{"database":"ecommerce_compat","counts":{"customers":12,"products":16,"orders":48,"order_items":96,"inventory":32}} +{"status":"PASS","checks":4,"query_shapes":{"find":1,"lookup_aggregations":3}} +ELAPSED_SECONDS=1.01 +c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30 results/documentdb.json +``` + +As above, the elapsed time is diagnostic only. This walkthrough demonstrates +query and result compatibility; it is not a MongoDB-vs-DocumentDB benchmark. + +## 4. Prove result parity + +```bash +cmp -s results/mongodb.json results/documentdb.json \ + && echo 'MongoDB and DocumentDB results are byte-identical' + +sha256sum results/mongodb.json results/documentdb.json +``` + +Expected: + +```text +MongoDB and DocumentDB results are byte-identical +c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30 results/mongodb.json +c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30 results/documentdb.json +``` + +## Compatibility result + +| Surface | MongoDB 7 | DocumentDB | Source changes | +|---|---|---|---:| +| Deterministic seed and indexes | PASS | PASS | 0 | +| Filter + projection + sort | PASS | PASS | 0 | +| `$group` + customer `$lookup` | PASS | PASS | 0 | +| Order + customer + item `$lookup` | PASS | PASS | 0 | +| Product + inventory `$lookup` | PASS | PASS | 0 | +| Exact output parity | SHA-256 `c6d56d…ad30` | SHA-256 `c6d56d…ad30` | 0 | + +The compatibility claim demonstrated here is deliberately narrow and +reproducible: this e-commerce workload produced byte-identical results after an +endpoint-only switch. It does not imply that every MongoDB feature is supported; +test advanced operators against the +[DocumentDB compatibility documentation](https://learn.microsoft.com/azure/documentdb/compatibility). diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/package-lock.json b/scenarios/ecommerce/mongodb-documentdb-compat/package-lock.json new file mode 100644 index 0000000..a7ee8f1 --- /dev/null +++ b/scenarios/ecommerce/mongodb-documentdb-compat/package-lock.json @@ -0,0 +1,162 @@ +{ + "name": "mongodb-documentdb-ecommerce-compat", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "mongodb-documentdb-ecommerce-compat", + "version": "1.0.0", + "dependencies": { + "mongodb": "6.20.0" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.5.0.tgz", + "integrity": "sha512-Hk1SKJCMcCos38+vqDnZzlIo4XRj9yCGzYkjB4LcqpeXRIYfia1UWTz+VrueLxoU+uSRJzgkufxoRZg8gi52YA==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/bson": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", + "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT" + }, + "node_modules/mongodb": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.20.0.tgz", + "integrity": "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.3.0", + "bson": "^6.10.4", + "mongodb-connection-string-url": "^3.0.2" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.3.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^14.1.0 || ^13.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/package.json b/scenarios/ecommerce/mongodb-documentdb-compat/package.json new file mode 100644 index 0000000..65b2d4f --- /dev/null +++ b/scenarios/ecommerce/mongodb-documentdb-compat/package.json @@ -0,0 +1,16 @@ +{ + "name": "mongodb-documentdb-ecommerce-compat", + "version": "1.0.0", + "private": true, + "description": "One e-commerce workload run unchanged against MongoDB and Azure DocumentDB", + "type": "module", + "scripts": { + "seed": "node scripts/seed.js", + "query": "node scripts/run-queries.js", + "verify": "node scripts/verify.js", + "test": "npm run seed && npm run verify" + }, + "dependencies": { + "mongodb": "6.20.0" + } +} diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/scripts/run-queries.js b/scenarios/ecommerce/mongodb-documentdb-compat/scripts/run-queries.js new file mode 100644 index 0000000..37b8871 --- /dev/null +++ b/scenarios/ecommerce/mongodb-documentdb-compat/scripts/run-queries.js @@ -0,0 +1,14 @@ +import { mkdir, writeFile } from "node:fs/promises"; +import { dirname } from "node:path"; +import { withDatabase } from "../src/database.js"; +import { runQueries } from "../src/queries.js"; + +const result = await withDatabase(runQueries); +const json = `${JSON.stringify(result, null, 2)}\n`; + +if (process.env.RESULT_FILE) { + await mkdir(dirname(process.env.RESULT_FILE), { recursive: true }); + await writeFile(process.env.RESULT_FILE, json); +} + +process.stdout.write(json); diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/scripts/seed.js b/scenarios/ecommerce/mongodb-documentdb-compat/scripts/seed.js new file mode 100644 index 0000000..145c168 --- /dev/null +++ b/scenarios/ecommerce/mongodb-documentdb-compat/scripts/seed.js @@ -0,0 +1,115 @@ +import { withDatabase } from "../src/database.js"; + +const statuses = ["pending", "confirmed", "shipped", "delivered", "cancelled"]; +const tiers = ["bronze", "silver", "gold", "platinum"]; +const categories = ["electronics", "home", "sports", "books"]; + +await withDatabase(async (db) => { + const collections = [ + "customers", + "products", + "orders", + "order_items", + "inventory" + ]; + + for (const collection of collections) { + await db.collection(collection).deleteMany({}); + } + + const customers = Array.from({ length: 12 }, (_, index) => { + const id = index + 1; + return { + customer_id: `CUST_${String(id).padStart(3, "0")}`, + name: `Customer ${id}`, + tier: tiers[index % tiers.length], + address: { + city: ["Seattle", "Portland", "Austin"][index % 3], + country: "US" + } + }; + }); + + const products = Array.from({ length: 16 }, (_, index) => { + const id = index + 1; + return { + product_id: `PROD_${String(id).padStart(3, "0")}`, + name: `Product ${id}`, + category: categories[index % categories.length], + price: 15 + id * 7 + }; + }); + + const orders = []; + const orderItems = []; + + for (let index = 0; index < 48; index += 1) { + const id = index + 1; + const orderId = `ORD_${String(id).padStart(3, "0")}`; + const customerId = `CUST_${String((index % 12) + 1).padStart(3, "0")}`; + const itemCount = (index % 3) + 1; + let total = 0; + + for (let itemIndex = 0; itemIndex < itemCount; itemIndex += 1) { + const productNumber = ((index * 3 + itemIndex) % 16) + 1; + const quantity = itemIndex + 1; + const unitPrice = 15 + productNumber * 7; + total += quantity * unitPrice; + orderItems.push({ + order_id: orderId, + product_id: `PROD_${String(productNumber).padStart(3, "0")}`, + quantity, + unit_price: unitPrice + }); + } + + orders.push({ + order_id: orderId, + customer_id: customerId, + status: statuses[index % statuses.length], + total_amount: total, + created_at: new Date(Date.UTC(2025, index % 12, (index % 27) + 1)) + }); + } + + const inventory = []; + for (let productIndex = 0; productIndex < products.length; productIndex += 1) { + for (let warehouseIndex = 0; warehouseIndex < 2; warehouseIndex += 1) { + inventory.push({ + product_id: products[productIndex].product_id, + warehouse_id: `WH_${warehouseIndex + 1}`, + quantity: (productIndex + 1) * 9 + warehouseIndex * 4 + }); + } + } + + await db.collection("customers").insertMany(customers); + await db.collection("products").insertMany(products); + await db.collection("orders").insertMany(orders); + await db.collection("order_items").insertMany(orderItems); + await db.collection("inventory").insertMany(inventory); + + await Promise.all([ + db.collection("customers").createIndex({ customer_id: 1 }, { unique: true }), + db.collection("products").createIndex({ product_id: 1 }, { unique: true }), + db + .collection("orders") + .createIndex({ customer_id: 1, status: 1, created_at: -1 }), + db.collection("orders").createIndex({ order_id: 1 }, { unique: true }), + db.collection("order_items").createIndex({ order_id: 1 }), + db.collection("inventory").createIndex({ product_id: 1 }) + ]); + + console.log( + JSON.stringify({ + database: db.databaseName, + counts: { + customers: customers.length, + products: products.length, + orders: orders.length, + order_items: orderItems.length, + inventory: inventory.length + } + }) + ); +}); diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/scripts/verify.js b/scenarios/ecommerce/mongodb-documentdb-compat/scripts/verify.js new file mode 100644 index 0000000..8eeabdc --- /dev/null +++ b/scenarios/ecommerce/mongodb-documentdb-compat/scripts/verify.js @@ -0,0 +1,143 @@ +import assert from "node:assert/strict"; +import { withDatabase } from "../src/database.js"; +import { runQueries } from "../src/queries.js"; + +const result = await withDatabase(runQueries); + +assert.deepEqual( + result.recentShippedOrders.map((order) => order.order_id), + ["ORD_003"], + "recent shipped orders changed" +); + +assert.deepEqual( + result.customerOrderSummary.map( + ({ customer_id, customer_name, tier, order_count, revenue }) => ({ + customer_id, + customer_name, + tier, + order_count, + revenue + }) + ), + [ + { + customer_id: "CUST_012", + customer_name: "Customer 12", + tier: "platinum", + order_count: 4, + revenue: 1928 + }, + { + customer_id: "CUST_003", + customer_name: "Customer 3", + tier: "gold", + order_count: 4, + revenue: 1760 + }, + { + customer_id: "CUST_009", + customer_name: "Customer 9", + tier: "bronze", + order_count: 4, + revenue: 1760 + }, + { + customer_id: "CUST_006", + customer_name: "Customer 6", + tier: "silver", + order_count: 4, + revenue: 1704 + }, + { + customer_id: "CUST_011", + customer_name: "Customer 11", + tier: "gold", + order_count: 4, + revenue: 992 + } + ], + "customer revenue join changed" +); + +assert.equal(result.orderDetails.length, 1); +assert.deepEqual( + { + order_id: result.orderDetails[0].order_id, + customer_id: result.orderDetails[0].customer_id, + customer_name: result.orderDetails[0].customer_name, + status: result.orderDetails[0].status, + total_amount: result.orderDetails[0].total_amount, + item_count: result.orderDetails[0].item_count + }, + { + order_id: "ORD_018", + customer_id: "CUST_006", + customer_name: "Customer 6", + status: "shipped", + total_amount: 314, + item_count: 3 + }, + "order/customer/items join changed" +); + +assert.deepEqual( + result.productInventory.map( + ({ product_id, product_name, category, warehouse_count, total_quantity }) => ({ + product_id, + product_name, + category, + warehouse_count, + total_quantity + }) + ), + [ + { + product_id: "PROD_001", + product_name: "Product 1", + category: "electronics", + warehouse_count: 2, + total_quantity: 22 + }, + { + product_id: "PROD_002", + product_name: "Product 2", + category: "home", + warehouse_count: 2, + total_quantity: 40 + }, + { + product_id: "PROD_003", + product_name: "Product 3", + category: "sports", + warehouse_count: 2, + total_quantity: 58 + }, + { + product_id: "PROD_004", + product_name: "Product 4", + category: "books", + warehouse_count: 2, + total_quantity: 76 + }, + { + product_id: "PROD_005", + product_name: "Product 5", + category: "electronics", + warehouse_count: 2, + total_quantity: 94 + } + ], + "product/inventory join changed" +); + +console.log( + JSON.stringify({ + status: "PASS", + checks: 4, + query_shapes: { + find: 1, + lookup_aggregations: 3 + } + }) +); diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/src/database.js b/scenarios/ecommerce/mongodb-documentdb-compat/src/database.js new file mode 100644 index 0000000..4e45aa3 --- /dev/null +++ b/scenarios/ecommerce/mongodb-documentdb-compat/src/database.js @@ -0,0 +1,28 @@ +import { MongoClient } from "mongodb"; + +const uri = process.env.MONGODB_URI; + +if (!uri) { + throw new Error("MONGODB_URI is required"); +} + +export const databaseName = + process.env.MONGODB_DATABASE || "ecommerce_compat"; + +// One client and one pool for the process lifetime. TLS, authentication, and +// endpoint differences belong in MONGODB_URI, not in database-specific code. +export const client = new MongoClient(uri, { + serverSelectionTimeoutMS: 10_000, + connectTimeoutMS: 10_000, + socketTimeoutMS: 30_000, + maxPoolSize: 20 +}); + +export async function withDatabase(operation) { + await client.connect(); + try { + return await operation(client.db(databaseName)); + } finally { + await client.close(); + } +} diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/src/queries.js b/scenarios/ecommerce/mongodb-documentdb-compat/src/queries.js new file mode 100644 index 0000000..afd3fcb --- /dev/null +++ b/scenarios/ecommerce/mongodb-documentdb-compat/src/queries.js @@ -0,0 +1,149 @@ +export async function runQueries(db) { + const recentShippedOrders = await db + .collection("orders") + .find( + { customer_id: "CUST_003", status: "shipped" }, + { + projection: { + _id: 0, + order_id: 1, + customer_id: 1, + status: 1, + total_amount: 1, + created_at: 1 + } + } + ) + .sort({ created_at: -1 }) + .toArray(); + + // SQL analogue: + // SELECT c.name, COUNT(*), SUM(o.total_amount) + // FROM orders o JOIN customers c USING (customer_id) + // GROUP BY c.name ORDER BY SUM(o.total_amount) DESC LIMIT 5; + const customerOrderSummary = await db + .collection("orders") + .aggregate([ + { + $group: { + _id: "$customer_id", + order_count: { $sum: 1 }, + revenue: { $sum: "$total_amount" } + } + }, + { + $lookup: { + from: "customers", + localField: "_id", + foreignField: "customer_id", + as: "customer" + } + }, + { $unwind: "$customer" }, + { + $project: { + _id: 0, + customer_id: "$_id", + customer_name: "$customer.name", + tier: "$customer.tier", + order_count: 1, + revenue: 1 + } + }, + { $sort: { revenue: -1, customer_id: 1 } }, + { $limit: 5 } + ]) + .toArray(); + + // SQL analogue: + // SELECT o.*, c.name, oi.* + // FROM orders o + // JOIN customers c USING (customer_id) + // JOIN order_items oi USING (order_id) + // WHERE o.order_id = 'ORD_018'; + const orderDetails = await db + .collection("orders") + .aggregate([ + { $match: { order_id: "ORD_018" } }, + { + $lookup: { + from: "customers", + localField: "customer_id", + foreignField: "customer_id", + as: "customer" + } + }, + { $unwind: "$customer" }, + { + $lookup: { + from: "order_items", + localField: "order_id", + foreignField: "order_id", + as: "items" + } + }, + { + $project: { + _id: 0, + order_id: 1, + customer_id: 1, + customer_name: "$customer.name", + status: 1, + total_amount: 1, + item_count: { $size: "$items" }, + items: { + product_id: 1, + quantity: 1, + unit_price: 1 + } + } + } + ]) + .toArray(); + + // SQL analogue: + // SELECT p.product_id, p.name, SUM(i.quantity) + // FROM products p JOIN inventory i USING (product_id) + // GROUP BY p.product_id, p.name ORDER BY SUM(i.quantity), p.product_id; + const productInventory = await db + .collection("products") + .aggregate([ + { + $lookup: { + from: "inventory", + localField: "product_id", + foreignField: "product_id", + as: "stock" + } + }, + { + $project: { + _id: 0, + product_id: 1, + product_name: "$name", + category: 1, + warehouse_count: { $size: "$stock" }, + total_quantity: { $sum: "$stock.quantity" } + } + }, + { $sort: { total_quantity: 1, product_id: 1 } }, + { $limit: 5 } + ]) + .toArray(); + + // $lookup does not guarantee array ordering. Normalize client-side so the + // MongoDB and DocumentDB result files can be compared byte-for-byte without + // mistaking an allowed order difference for a compatibility problem. + for (const order of orderDetails) { + order.items.sort((left, right) => + left.product_id.localeCompare(right.product_id) + ); + } + + return { + recentShippedOrders, + customerOrderSummary, + orderDetails, + productInventory + }; +} From 11965ce4d7377e7379ddbbd965911dd71430d5e9 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 1 Sep 2026 00:34:45 +0000 Subject: [PATCH 39/52] Move the compatibility quickstart to the repository root Renames scenarios/ecommerce/mongodb-documentdb-compat to compat so the MongoDB-to-DocumentDB workflow is immediately visible and removes MongoDB from the folder name. The relocated workflow was rerun against MongoDB 7 and DocumentDB. Both passed four checks and produced byte-identical output with SHA-256 c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- README.md | 2 ++ .../ecommerce/mongodb-documentdb-compat => compat}/.gitignore | 0 .../ecommerce/mongodb-documentdb-compat => compat}/PROMPT.md | 0 .../mongodb-documentdb-compat => compat}/QUICKSTART.md | 2 +- .../mongodb-documentdb-compat => compat}/package-lock.json | 0 .../ecommerce/mongodb-documentdb-compat => compat}/package.json | 0 .../mongodb-documentdb-compat => compat}/scripts/run-queries.js | 0 .../mongodb-documentdb-compat => compat}/scripts/seed.js | 0 .../mongodb-documentdb-compat => compat}/scripts/verify.js | 0 .../mongodb-documentdb-compat => compat}/src/database.js | 0 .../mongodb-documentdb-compat => compat}/src/queries.js | 0 scenarios/ecommerce/README.md | 2 +- 12 files changed, 4 insertions(+), 2 deletions(-) rename {scenarios/ecommerce/mongodb-documentdb-compat => compat}/.gitignore (100%) rename {scenarios/ecommerce/mongodb-documentdb-compat => compat}/PROMPT.md (100%) rename {scenarios/ecommerce/mongodb-documentdb-compat => compat}/QUICKSTART.md (99%) rename {scenarios/ecommerce/mongodb-documentdb-compat => compat}/package-lock.json (100%) rename {scenarios/ecommerce/mongodb-documentdb-compat => compat}/package.json (100%) rename {scenarios/ecommerce/mongodb-documentdb-compat => compat}/scripts/run-queries.js (100%) rename {scenarios/ecommerce/mongodb-documentdb-compat => compat}/scripts/seed.js (100%) rename {scenarios/ecommerce/mongodb-documentdb-compat => compat}/scripts/verify.js (100%) rename {scenarios/ecommerce/mongodb-documentdb-compat => compat}/src/database.js (100%) rename {scenarios/ecommerce/mongodb-documentdb-compat => compat}/src/queries.js (100%) diff --git a/README.md b/README.md index d917675..25c8c3e 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ script tests in [`testing/`](testing/README.md) and cross-model skill evals in - **Router:** [`knowledge-base/README.md`](knowledge-base/README.md) · **Demo datasets:** [`scenarios/`](scenarios/) - **Testing:** [`docs/TESTING.md`](docs/TESTING.md) · **Route cost study:** [`benchmarks/documentdb-route-efficiency/`](benchmarks/documentdb-route-efficiency/README.md) +- **MongoDB compatibility quick-start:** [`compat/`](compat/QUICKSTART.md) — run the same e-commerce project against MongoDB and DocumentDB by changing only `MONGODB_URI`. ## Repo Structure @@ -85,6 +86,7 @@ skills/ scripts/ # diagnostic toolbox — read-only analyzers + seeders knowledge-base/ # NL → script router (kb.json + kb_route.py) + demo scenarios/contoso/ # ready-to-run TOAST demo dataset (+ optional scaling-benchmark/) +compat/ # MongoDB-to-DocumentDB ecommerce compatibility quick-start testing/ # Loop A — deterministic tests for the scripts (pytest) evals/ # Loop B — cross-model skill evals (Vally) + cost accounting benchmarks/ # Loop C — MSBench skill-efficacy benchmark + route-cost study diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/.gitignore b/compat/.gitignore similarity index 100% rename from scenarios/ecommerce/mongodb-documentdb-compat/.gitignore rename to compat/.gitignore diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/PROMPT.md b/compat/PROMPT.md similarity index 100% rename from scenarios/ecommerce/mongodb-documentdb-compat/PROMPT.md rename to compat/PROMPT.md diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/QUICKSTART.md b/compat/QUICKSTART.md similarity index 99% rename from scenarios/ecommerce/mongodb-documentdb-compat/QUICKSTART.md rename to compat/QUICKSTART.md index 12d6332..88627db 100644 --- a/scenarios/ecommerce/mongodb-documentdb-compat/QUICKSTART.md +++ b/compat/QUICKSTART.md @@ -33,7 +33,7 @@ The queries use portable MongoDB operators only: `$match`, `$group`, `$lookup`, ## 1. Install ```bash -cd scenarios/ecommerce/mongodb-documentdb-compat +cd compat npm ci ``` diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/package-lock.json b/compat/package-lock.json similarity index 100% rename from scenarios/ecommerce/mongodb-documentdb-compat/package-lock.json rename to compat/package-lock.json diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/package.json b/compat/package.json similarity index 100% rename from scenarios/ecommerce/mongodb-documentdb-compat/package.json rename to compat/package.json diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/scripts/run-queries.js b/compat/scripts/run-queries.js similarity index 100% rename from scenarios/ecommerce/mongodb-documentdb-compat/scripts/run-queries.js rename to compat/scripts/run-queries.js diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/scripts/seed.js b/compat/scripts/seed.js similarity index 100% rename from scenarios/ecommerce/mongodb-documentdb-compat/scripts/seed.js rename to compat/scripts/seed.js diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/scripts/verify.js b/compat/scripts/verify.js similarity index 100% rename from scenarios/ecommerce/mongodb-documentdb-compat/scripts/verify.js rename to compat/scripts/verify.js diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/src/database.js b/compat/src/database.js similarity index 100% rename from scenarios/ecommerce/mongodb-documentdb-compat/src/database.js rename to compat/src/database.js diff --git a/scenarios/ecommerce/mongodb-documentdb-compat/src/queries.js b/compat/src/queries.js similarity index 100% rename from scenarios/ecommerce/mongodb-documentdb-compat/src/queries.js rename to compat/src/queries.js diff --git a/scenarios/ecommerce/README.md b/scenarios/ecommerce/README.md index 370890b..d2a5309 100644 --- a/scenarios/ecommerce/README.md +++ b/scenarios/ecommerce/README.md @@ -10,7 +10,7 @@ the diagnostic toolbox: `perf-advisor.sh`, `index-redundancy-finder.sh`, and | File | What it is | |------|-----------| | `seed.sh` | Self-contained seeder (embeds the data-generation script; ~50K orders, ~150K order_items). | -| [`mongodb-documentdb-compat/`](mongodb-documentdb-compat/QUICKSTART.md) | Portable Node.js workload that runs unchanged against MongoDB 7 and DocumentDB, including three `$lookup` queries and byte-identical result verification. | +| [`../../compat/`](../../compat/QUICKSTART.md) | Portable Node.js workload that runs unchanged against MongoDB 7 and DocumentDB, including three `$lookup` queries and byte-identical result verification. | ## Run From 346966339be80de7b1625d8c47c8cab5bc915fe2 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 1 Sep 2026 07:48:40 +0000 Subject: [PATCH 40/52] Make the compatibility project DocumentDB-only Removes the MongoDB server workflow and comparison from compat/. The project remains MongoDB-compatible through the official mongodb driver and standard find/aggregation syntax, but the full stack now runs only on DocumentDB. Simplifies PROMPT.md to six requirements and retains the exact DocumentDB result: four checks pass, including three lookup aggregations, with SHA-256 c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- README.md | 4 +- compat/PROMPT.md | 39 +++------- compat/QUICKSTART.md | 138 +++++++++++----------------------- compat/package-lock.json | 4 +- compat/package.json | 4 +- compat/src/queries.js | 6 +- scenarios/ecommerce/README.md | 2 +- 7 files changed, 66 insertions(+), 131 deletions(-) diff --git a/README.md b/README.md index 25c8c3e..074bc0b 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ script tests in [`testing/`](testing/README.md) and cross-model skill evals in - **Router:** [`knowledge-base/README.md`](knowledge-base/README.md) · **Demo datasets:** [`scenarios/`](scenarios/) - **Testing:** [`docs/TESTING.md`](docs/TESTING.md) · **Route cost study:** [`benchmarks/documentdb-route-efficiency/`](benchmarks/documentdb-route-efficiency/README.md) -- **MongoDB compatibility quick-start:** [`compat/`](compat/QUICKSTART.md) — run the same e-commerce project against MongoDB and DocumentDB by changing only `MONGODB_URI`. +- **DocumentDB compatibility quick-start:** [`compat/`](compat/QUICKSTART.md) — run a MongoDB-compatible Node.js e-commerce project end-to-end on DocumentDB. ## Repo Structure @@ -86,7 +86,7 @@ skills/ scripts/ # diagnostic toolbox — read-only analyzers + seeders knowledge-base/ # NL → script router (kb.json + kb_route.py) + demo scenarios/contoso/ # ready-to-run TOAST demo dataset (+ optional scaling-benchmark/) -compat/ # MongoDB-to-DocumentDB ecommerce compatibility quick-start +compat/ # MongoDB-compatible ecommerce project on DocumentDB testing/ # Loop A — deterministic tests for the scripts (pytest) evals/ # Loop B — cross-model skill evals (Vally) + cost accounting benchmarks/ # Loop C — MSBench skill-efficacy benchmark + route-cost study diff --git a/compat/PROMPT.md b/compat/PROMPT.md index 17805e5..264cc6f 100644 --- a/compat/PROMPT.md +++ b/compat/PROMPT.md @@ -1,27 +1,12 @@ -# Prompt: build a portable MongoDB e-commerce project - -Create a small Node.js project using the official `mongodb` driver. - -Requirements: - -1. Read the connection exclusively from `MONGODB_URI` and the database name - from `MONGODB_DATABASE`. Do not branch on whether the server is MongoDB or - Azure DocumentDB. -2. Create one process-wide `MongoClient` and reuse its connection pool. -3. Seed deterministic e-commerce data into these referenced collections: - `customers`, `products`, `orders`, `order_items`, and `inventory`. -4. Add indexes for the fields used by filters and joins. -5. Implement and verify: - - a filtered and sorted `find()` query; - - a customer/order summary using `$group` and `$lookup`; - - an order-detail query joining orders, customers, and order items; - - a product/inventory query using `$lookup`. -6. Make query output deterministic by projecting away `_id` and adding stable - sort keys. -7. Add an automated verification command that asserts exact results. -8. First run everything against MongoDB 7. Then run the unchanged source - against Azure DocumentDB by changing only `MONGODB_URI`. -9. Save each endpoint's query output separately and byte-compare them. - -Do not hardcode credentials, disable TLS in source, or add database-specific -conditionals. +# Prompt + +Create a small Node.js e-commerce project for Azure DocumentDB using the +official `mongodb` driver. + +- Read the connection from `MONGODB_URI`. +- Reuse one `MongoClient`. +- Seed deterministic `customers`, `products`, `orders`, `order_items`, and + `inventory` collections. +- Add one filtered `find()` query and three `$lookup` queries. +- Add `npm test` with exact expected results. +- Do not hardcode credentials or add database-specific branches. diff --git a/compat/QUICKSTART.md b/compat/QUICKSTART.md index 88627db..5c388fe 100644 --- a/compat/QUICKSTART.md +++ b/compat/QUICKSTART.md @@ -1,14 +1,15 @@ -# MongoDB to Azure DocumentDB: e-commerce compatibility quick-start +# Azure DocumentDB e-commerce quick-start -This project runs one unchanged Node.js workload against MongoDB 7 and Azure -DocumentDB. The only application setting that changes is `MONGODB_URI`. +This is a MongoDB-compatible Node.js project running **entirely on Azure +DocumentDB**. It uses the official `mongodb` driver and standard query syntax; +no MongoDB server is required. -> Azure DocumentDB and this agent kit are in public preview. This walkthrough -> is a local compatibility demonstration, not production deployment guidance. +> Azure DocumentDB and this agent kit are in public preview. This is a local +> compatibility demonstration, not production deployment guidance. -The reusable project-generation prompt is in [`PROMPT.md`](PROMPT.md). +The minimal project-generation prompt is in [`PROMPT.md`](PROMPT.md). -## What the workload covers +## What is tested The deterministic seed creates: @@ -20,15 +21,15 @@ The deterministic seed creates: | `order_items` | 96 | | `inventory` | 32 | -The four checks include one filtered `find()` and three relational-style -aggregations: +The four exact-result checks cover: -1. Orders grouped by customer, then joined to `customers` with `$lookup`. -2. One order joined to its customer and `order_items`. -3. Products joined to `inventory`, with warehouse counts and total quantity. +1. A filtered and sorted `find()`. +2. Orders grouped by customer, then joined to `customers` with `$lookup`. +3. One order joined to its customer and `order_items`. +4. Products joined to `inventory`. -The queries use portable MongoDB operators only: `$match`, `$group`, `$lookup`, -`$unwind`, `$project`, `$sort`, `$limit`, `$size`, and `$sum`. +The workload uses `$match`, `$group`, `$lookup`, `$unwind`, `$project`, +`$sort`, `$limit`, `$size`, and `$sum`. ## 1. Install @@ -37,48 +38,10 @@ cd compat npm ci ``` -The project uses one singleton `MongoClient`. Authentication and TLS stay in -the URI, so there is no MongoDB-vs-DocumentDB branch in the source. +The source creates one process-wide `MongoClient`. Authentication and TLS are +configured entirely through `MONGODB_URI`. -## 2. Run against MongoDB 7 - -Start a clean MongoDB container: - -```bash -docker rm -f mongodb-compat 2>/dev/null || true -docker run -d --name mongodb-compat \ - -p 127.0.0.1:27018:27017 \ - mongo:7.0 -``` - -Run the seed and exact-result verification: - -```bash -export MONGODB_URI='mongodb://127.0.0.1:27018/?directConnection=true' -npm test - -RESULT_FILE=results/mongodb.json npm run query >/dev/null -sha256sum results/mongodb.json -``` - -### MongoDB result - -Measured on 2026-08-31: - -```text -{"database":"ecommerce_compat","counts":{"customers":12,"products":16,"orders":48,"order_items":96,"inventory":32}} -{"status":"PASS","checks":4,"query_shapes":{"find":1,"lookup_aggregations":3}} -ELAPSED_SECONDS=0.85 -c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30 results/mongodb.json -``` - -The elapsed time is one local functional run, excluding container startup. It -is recorded for reproducibility, not as a performance comparison. - -## 3. Switch to Azure DocumentDB - -Start a fresh local DocumentDB container using the current documented command -arguments: +## 2. Start DocumentDB Local ```bash export DOCDB_PASSWORD='' @@ -91,7 +54,13 @@ docker run -d --name documentdb-compat \ --password "$DOCDB_PASSWORD" ``` -Wait for the gateway to start, then change only the endpoint: +Wait for the gateway port: + +```bash +until (echo >/dev/tcp/127.0.0.1/10261) 2>/dev/null; do sleep 1; done +``` + +## 3. Run the end-to-end workflow ```bash ENCODED_PASSWORD=$(node -p 'encodeURIComponent(process.argv[1])' "$DOCDB_PASSWORD") @@ -103,55 +72,36 @@ RESULT_FILE=results/documentdb.json npm run query >/dev/null sha256sum results/documentdb.json ``` -No JavaScript, query, schema, seed, or index definition changes are required. -The DocumentDB URI adds credentials and local self-signed-certificate options. -For Azure-hosted DocumentDB, use the connection string supplied by Azure and -do not enable `tlsAllowInvalidCertificates`. +For Azure-hosted DocumentDB, replace `MONGODB_URI` with the Azure connection +string and do not enable `tlsAllowInvalidCertificates`. -### DocumentDB result +## Result Measured on 2026-08-31: ```text {"database":"ecommerce_compat","counts":{"customers":12,"products":16,"orders":48,"order_items":96,"inventory":32}} {"status":"PASS","checks":4,"query_shapes":{"find":1,"lookup_aggregations":3}} -ELAPSED_SECONDS=1.01 +ELAPSED_SECONDS=12.22 c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30 results/documentdb.json ``` -As above, the elapsed time is diagnostic only. This walkthrough demonstrates -query and result compatibility; it is not a MongoDB-vs-DocumentDB benchmark. +The elapsed time is one local functional run started as soon as the gateway +port opened; it includes the remaining driver wait for full readiness. It is +recorded for reproducibility, not as a performance benchmark. -## 4. Prove result parity +## What this demonstrates -```bash -cmp -s results/mongodb.json results/documentdb.json \ - && echo 'MongoDB and DocumentDB results are byte-identical' - -sha256sum results/mongodb.json results/documentdb.json -``` - -Expected: - -```text -MongoDB and DocumentDB results are byte-identical -c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30 results/mongodb.json -c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30 results/documentdb.json -``` +| Surface | Result | +|---|---| +| Official Node.js `mongodb` driver | PASS | +| Deterministic seed and index creation | PASS | +| Filter + projection + sort | PASS | +| `$group` + customer `$lookup` | PASS | +| Order + customer + item `$lookup` | PASS | +| Product + inventory `$lookup` | PASS | +| Exact expected output | PASS | -## Compatibility result - -| Surface | MongoDB 7 | DocumentDB | Source changes | -|---|---|---|---:| -| Deterministic seed and indexes | PASS | PASS | 0 | -| Filter + projection + sort | PASS | PASS | 0 | -| `$group` + customer `$lookup` | PASS | PASS | 0 | -| Order + customer + item `$lookup` | PASS | PASS | 0 | -| Product + inventory `$lookup` | PASS | PASS | 0 | -| Exact output parity | SHA-256 `c6d56d…ad30` | SHA-256 `c6d56d…ad30` | 0 | - -The compatibility claim demonstrated here is deliberately narrow and -reproducible: this e-commerce workload produced byte-identical results after an -endpoint-only switch. It does not imply that every MongoDB feature is supported; -test advanced operators against the +This demonstrates the tested MongoDB-compatible surface only; it does not imply +that every MongoDB feature is supported. Check advanced operators against the [DocumentDB compatibility documentation](https://learn.microsoft.com/azure/documentdb/compatibility). diff --git a/compat/package-lock.json b/compat/package-lock.json index a7ee8f1..5a29f62 100644 --- a/compat/package-lock.json +++ b/compat/package-lock.json @@ -1,11 +1,11 @@ { - "name": "mongodb-documentdb-ecommerce-compat", + "name": "documentdb-ecommerce-compat", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "mongodb-documentdb-ecommerce-compat", + "name": "documentdb-ecommerce-compat", "version": "1.0.0", "dependencies": { "mongodb": "6.20.0" diff --git a/compat/package.json b/compat/package.json index 65b2d4f..baf4221 100644 --- a/compat/package.json +++ b/compat/package.json @@ -1,8 +1,8 @@ { - "name": "mongodb-documentdb-ecommerce-compat", + "name": "documentdb-ecommerce-compat", "version": "1.0.0", "private": true, - "description": "One e-commerce workload run unchanged against MongoDB and Azure DocumentDB", + "description": "A MongoDB-compatible e-commerce workload running end-to-end on Azure DocumentDB", "type": "module", "scripts": { "seed": "node scripts/seed.js", diff --git a/compat/src/queries.js b/compat/src/queries.js index afd3fcb..9efc6f5 100644 --- a/compat/src/queries.js +++ b/compat/src/queries.js @@ -131,9 +131,9 @@ export async function runQueries(db) { ]) .toArray(); - // $lookup does not guarantee array ordering. Normalize client-side so the - // MongoDB and DocumentDB result files can be compared byte-for-byte without - // mistaking an allowed order difference for a compatibility problem. + // $lookup does not guarantee array ordering. Normalize client-side so exact + // result verification does not mistake an allowed order difference for a + // query failure. for (const order of orderDetails) { order.items.sort((left, right) => left.product_id.localeCompare(right.product_id) diff --git a/scenarios/ecommerce/README.md b/scenarios/ecommerce/README.md index d2a5309..90d5324 100644 --- a/scenarios/ecommerce/README.md +++ b/scenarios/ecommerce/README.md @@ -10,7 +10,7 @@ the diagnostic toolbox: `perf-advisor.sh`, `index-redundancy-finder.sh`, and | File | What it is | |------|-----------| | `seed.sh` | Self-contained seeder (embeds the data-generation script; ~50K orders, ~150K order_items). | -| [`../../compat/`](../../compat/QUICKSTART.md) | Portable Node.js workload that runs unchanged against MongoDB 7 and DocumentDB, including three `$lookup` queries and byte-identical result verification. | +| [`../../compat/`](../../compat/QUICKSTART.md) | MongoDB-compatible Node.js workload running end-to-end on DocumentDB, including three `$lookup` queries and exact-result verification. | ## Run From 5b0516617c0298ef42aaf3c8c34a649dd3124a5f Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 1 Sep 2026 08:22:43 +0000 Subject: [PATCH 41/52] Add deterministic advanced ecommerce compatibility data Adds a 2.2 MB generated dataset for transaction, change-stream, and advanced aggregation compatibility testing: 200 customers, 100 products, 300 inventory rows, 2,000 orders, 6,000 order items, 2,000 payments, 120 returns, a gapped 90-day sales series, and change-stream seed documents. The committed generation process includes four transaction edge cases, four ordered change-stream operations, seven advanced aggregation cases, index definitions, file hashes, invariant validation, a clean-state loader, and a two-generation byte-identity check. Validated by loading all files into DocumentDB Local: counts matched, date fields were BSON dates, declared indexes were created, and stale merge/change-stream output collections were removed before reload. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 86722878-7b4c-4d57-933c-3d4188317703 --- scenarios/ecommerce-advanced/.gitignore | 2 + scenarios/ecommerce-advanced/README.md | 153 + .../data/cases/aggregations.json | 95 + .../data/cases/change-streams.json | 64 + .../data/cases/transactions.json | 53 + .../data/collections/customers.jsonl | 200 + .../data/collections/daily_sales.jsonl | 84 + .../data/collections/inventory.jsonl | 300 + .../data/collections/order_items.jsonl | 6000 +++++++++++++++++ .../data/collections/orders.jsonl | 2000 ++++++ .../data/collections/payments.jsonl | 2000 ++++++ .../data/collections/products.jsonl | 100 + .../data/collections/returns.jsonl | 120 + .../data/collections/stream_orders.jsonl | 2 + .../ecommerce-advanced/data/indexes.json | 138 + .../ecommerce-advanced/data/manifest.json | 132 + .../ecommerce-advanced/package-lock.json | 162 + scenarios/ecommerce-advanced/package.json | 17 + .../scripts/check-determinism.sh | 21 + .../ecommerce-advanced/scripts/generate.mjs | 563 ++ scenarios/ecommerce-advanced/scripts/load.mjs | 101 + .../ecommerce-advanced/scripts/validate.mjs | 276 + scenarios/ecommerce/README.md | 1 + testing/pytest.ini | 1 + .../ecommerce-advanced-data/conftest.py | 9 + .../tests/test_dataset.py | 80 + 26 files changed, 12674 insertions(+) create mode 100644 scenarios/ecommerce-advanced/.gitignore create mode 100644 scenarios/ecommerce-advanced/README.md create mode 100644 scenarios/ecommerce-advanced/data/cases/aggregations.json create mode 100644 scenarios/ecommerce-advanced/data/cases/change-streams.json create mode 100644 scenarios/ecommerce-advanced/data/cases/transactions.json create mode 100644 scenarios/ecommerce-advanced/data/collections/customers.jsonl create mode 100644 scenarios/ecommerce-advanced/data/collections/daily_sales.jsonl create mode 100644 scenarios/ecommerce-advanced/data/collections/inventory.jsonl create mode 100644 scenarios/ecommerce-advanced/data/collections/order_items.jsonl create mode 100644 scenarios/ecommerce-advanced/data/collections/orders.jsonl create mode 100644 scenarios/ecommerce-advanced/data/collections/payments.jsonl create mode 100644 scenarios/ecommerce-advanced/data/collections/products.jsonl create mode 100644 scenarios/ecommerce-advanced/data/collections/returns.jsonl create mode 100644 scenarios/ecommerce-advanced/data/collections/stream_orders.jsonl create mode 100644 scenarios/ecommerce-advanced/data/indexes.json create mode 100644 scenarios/ecommerce-advanced/data/manifest.json create mode 100644 scenarios/ecommerce-advanced/package-lock.json create mode 100644 scenarios/ecommerce-advanced/package.json create mode 100755 scenarios/ecommerce-advanced/scripts/check-determinism.sh create mode 100644 scenarios/ecommerce-advanced/scripts/generate.mjs create mode 100644 scenarios/ecommerce-advanced/scripts/load.mjs create mode 100644 scenarios/ecommerce-advanced/scripts/validate.mjs create mode 100644 testing/scenarios/ecommerce-advanced-data/conftest.py create mode 100644 testing/scenarios/ecommerce-advanced-data/tests/test_dataset.py diff --git a/scenarios/ecommerce-advanced/.gitignore b/scenarios/ecommerce-advanced/.gitignore new file mode 100644 index 0000000..6efc548 --- /dev/null +++ b/scenarios/ecommerce-advanced/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +.tmp/ diff --git a/scenarios/ecommerce-advanced/README.md b/scenarios/ecommerce-advanced/README.md new file mode 100644 index 0000000..bf4aefc --- /dev/null +++ b/scenarios/ecommerce-advanced/README.md @@ -0,0 +1,153 @@ +# Advanced e-commerce compatibility dataset + +Deterministic, committed fixtures for testing three higher-risk +MongoDB-compatible surfaces in Azure DocumentDB: + +1. Multi-document transactions +2. Change streams +3. Advanced aggregation stages and operators + +The dataset is generated from source, validated without a database, and +committed as JSONL so the exact same bytes can later be loaded into MongoDB and +DocumentDB. + +> Azure DocumentDB and this agent kit are in public preview. These fixtures are +> for compatibility testing, not production sample data. + +## Dataset + +| Collection | Records | Test purpose | +|---|---:|---| +| `customers` | 200 | `$lookup`, segmentation, nested addresses | +| `products` | 100 | arrays, nested attributes, `$bucket`, `$sortArray` | +| `inventory` | 300 | transactional stock updates and contention | +| `orders` | 2,000 | grouping, window functions, date operators | +| `order_items` | 6,000 | one-to-many and correlated pipeline `$lookup` | +| `payments` | 2,000 | transaction consistency across collections | +| `returns` | 120 | `$unionWith` activity streams | +| `daily_sales` | 84 | 90-day series with 6 missing days and 3 null values for `$densify` / `$fill` | +| `stream_orders` | 2 | baseline documents for change-stream operations | + +Additional case definitions: + +| File | Cases | +|---|---:| +| `data/cases/transactions.json` | 4 | +| `data/cases/change-streams.json` | 4 operations | +| `data/cases/aggregations.json` | 7 | + +## Transaction fixtures + +All cases target one known inventory record in `WH_EAST`: + +| Case | Product | Starting stock | Expected | +|---|---|---:|---| +| Successful purchase | `PROD_0001` | 10 | commit, stock becomes 8 | +| Concurrent last unit | `PROD_0002` | 1 | exactly one of two transactions commits | +| Insufficient stock | `PROD_0003` | 0 | rollback, no order/payment | +| Forced exception | `PROD_0004` | 25 | rollback after payment insert, stock remains 25 | + +## Change-stream sequence + +`data/cases/change-streams.json` defines a deterministic sequence against +`stream_orders`: + +```text +insert → update → replace → delete +``` + +The later compatibility test should normalize server-specific fields such as +resume token, `clusterTime`, and `wallTime`, then compare operation type, +namespace, document key, update description, and full document. + +## Advanced aggregation coverage + +The case catalog covers: + +- `$facet` +- Pipeline `$lookup` with `let` and `$expr` +- `$setWindowFields` +- `$densify` and `$fill` +- `$unionWith` +- `$bucket` +- `$dateTrunc` +- Array expressions: `$map`, `$filter`, `$reduce`, `$sortArray` +- `$merge` + +## Reproduce the committed data + +```bash +cd scenarios/ecommerce-advanced +npm ci + +# Rewrite data/ from the deterministic generator. +npm run generate + +# Validate hashes, counts, foreign keys, totals, and all edge-case fixtures. +npm run validate + +# Generate twice in clean directories and require byte-identical output. +npm run check-determinism +``` + +Expected: + +```text +{"status":"PASS","dataset":"ecommerce-advanced","version":"1.0.0",...} +PASS: two clean generations are byte-identical +``` + +The generator uses no wall clock and no `Math.random()`. Its seed, fixed +generation timestamp, and data epoch are recorded in `data/manifest.json`, +along with record counts, byte counts, and SHA-256 for every generated file. + +### Generation result + +Generated and validated on 2026-09-01: + +```text +collections: + customers=200 + products=100 + inventory=300 + orders=2000 + order_items=6000 + payments=2000 + returns=120 + daily_sales=84 + stream_orders=2 + +test cases: + transactions=4 + change_streams=4 + aggregations=7 + +generated files=13 +generated payload=2,225,666 bytes +validation=PASS +two-clean-generation diff=PASS +``` + +## Load into a MongoDB-compatible endpoint + +```bash +export MONGODB_URI='' +export MONGODB_DATABASE='ecommerce_advanced' +npm run load +``` + +`load.mjs` converts the committed `{"$date":"..."}` values to BSON dates, +loads every collection, creates the indexes from `data/indexes.json`, and +verifies final counts. It drops all source collections first and also clears +the write-producing test targets `customer_summaries` and `stream_events`, so +previous `$merge` or change-stream runs cannot leak into the next test. + +The committed files were also loaded into DocumentDB Local. All nine collection +counts matched the manifest, `orders.placed_at` and `daily_sales.sales_date` +were BSON dates, and every declared secondary index was created. + +## Why this size + +The dataset is large enough to exercise joins, grouping, windows, and +contention without turning compatibility tests into load tests. Correctness is +the purpose here; performance testing should use a separately scaled fixture. diff --git a/scenarios/ecommerce-advanced/data/cases/aggregations.json b/scenarios/ecommerce-advanced/data/cases/aggregations.json new file mode 100644 index 0000000..7ddc76e --- /dev/null +++ b/scenarios/ecommerce-advanced/data/cases/aggregations.json @@ -0,0 +1,95 @@ +[ + { + "case_id": "facet-order-dashboard", + "purpose": "$facet with status counts, revenue totals, and top customers.", + "collections": [ + "orders" + ], + "stages": [ + "$match", + "$facet", + "$group", + "$sort", + "$limit" + ] + }, + { + "case_id": "pipeline-lookup-order-items", + "purpose": "Correlated $lookup using let and $expr.", + "collections": [ + "orders", + "order_items" + ], + "stages": [ + "$match", + "$lookup", + "$expr", + "$project" + ] + }, + { + "case_id": "window-customer-running-total", + "purpose": "$setWindowFields partitioned by customer and sorted by date.", + "collections": [ + "orders" + ], + "stages": [ + "$setWindowFields", + "$sum", + "$documentNumber" + ] + }, + { + "case_id": "daily-sales-densify-fill", + "purpose": "$densify missing days and $fill intentional null revenue values.", + "collections": [ + "daily_sales" + ], + "stages": [ + "$densify", + "$fill", + "$dateTrunc" + ] + }, + { + "case_id": "order-return-union", + "purpose": "$unionWith orders and returns into one activity stream.", + "collections": [ + "orders", + "returns" + ], + "stages": [ + "$unionWith", + "$project", + "$sort", + "$limit" + ] + }, + { + "case_id": "product-price-buckets", + "purpose": "$bucket price bands and aggregate product tag arrays.", + "collections": [ + "products" + ], + "stages": [ + "$bucket", + "$map", + "$filter", + "$reduce", + "$sortArray" + ] + }, + { + "case_id": "materialize-customer-summary", + "purpose": "$merge a repeatable customer summary into a target collection.", + "collections": [ + "orders", + "customer_summaries" + ], + "stages": [ + "$group", + "$set", + "$merge" + ] + } +] diff --git a/scenarios/ecommerce-advanced/data/cases/change-streams.json b/scenarios/ecommerce-advanced/data/cases/change-streams.json new file mode 100644 index 0000000..713e2f6 --- /dev/null +++ b/scenarios/ecommerce-advanced/data/cases/change-streams.json @@ -0,0 +1,64 @@ +[ + { + "sequence": 1, + "operation": "insert", + "collection": "stream_orders", + "document": { + "order_id": "STREAM_NEW_001", + "customer_id": "CUST_0003", + "status": "pending", + "total_amount": 55, + "version": 1, + "updated_at": { + "$date": "2025-03-31T22:00:00.000Z" + } + }, + "expected_operation_type": "insert" + }, + { + "sequence": 2, + "operation": "update", + "collection": "stream_orders", + "filter": { + "order_id": "STREAM_BASE_001" + }, + "update": { + "$set": { + "status": "shipped", + "version": 2, + "updated_at": { + "$date": "2025-03-31T23:00:00.000Z" + } + } + }, + "expected_operation_type": "update" + }, + { + "sequence": 3, + "operation": "replace", + "collection": "stream_orders", + "filter": { + "order_id": "STREAM_BASE_002" + }, + "replacement": { + "order_id": "STREAM_BASE_002", + "customer_id": "CUST_0002", + "status": "delivered", + "total_amount": 40, + "version": 2, + "updated_at": { + "$date": "2025-03-31T23:00:00.000Z" + } + }, + "expected_operation_type": "replace" + }, + { + "sequence": 4, + "operation": "delete", + "collection": "stream_orders", + "filter": { + "order_id": "STREAM_NEW_001" + }, + "expected_operation_type": "delete" + } +] diff --git a/scenarios/ecommerce-advanced/data/cases/transactions.json b/scenarios/ecommerce-advanced/data/cases/transactions.json new file mode 100644 index 0000000..adbc307 --- /dev/null +++ b/scenarios/ecommerce-advanced/data/cases/transactions.json @@ -0,0 +1,53 @@ +[ + { + "case_id": "commit-purchase", + "description": "Insert order, item, and payment; decrement stock atomically.", + "product_id": "PROD_0001", + "warehouse_id": "WH_EAST", + "quantity": 2, + "initial_quantity": 10, + "expected_quantity": 8, + "order_id": "TXN_ORDER_COMMIT", + "payment_id": "TXN_PAYMENT_COMMIT", + "expected": "commit" + }, + { + "case_id": "forced-rollback", + "description": "Throw after payment insert; all writes and stock update roll back.", + "product_id": "PROD_0004", + "warehouse_id": "WH_EAST", + "quantity": 3, + "initial_quantity": 25, + "expected_quantity": 25, + "order_id": "TXN_ORDER_ROLLBACK", + "payment_id": "TXN_PAYMENT_ROLLBACK", + "failure_after": "payment_insert", + "expected": "rollback" + }, + { + "case_id": "insufficient-stock", + "description": "Reject purchase and leave no order/payment when inventory is zero.", + "product_id": "PROD_0003", + "warehouse_id": "WH_EAST", + "quantity": 1, + "initial_quantity": 0, + "expected_quantity": 0, + "order_id": "TXN_ORDER_NO_STOCK", + "payment_id": "TXN_PAYMENT_NO_STOCK", + "expected": "rollback" + }, + { + "case_id": "concurrent-last-unit", + "description": "Two concurrent purchases target the last unit; exactly one commits.", + "product_id": "PROD_0002", + "warehouse_id": "WH_EAST", + "quantity": 1, + "initial_quantity": 1, + "expected_quantity": 0, + "competing_order_ids": [ + "TXN_ORDER_RACE_A", + "TXN_ORDER_RACE_B" + ], + "expected_commits": 1 + } +] diff --git a/scenarios/ecommerce-advanced/data/collections/customers.jsonl b/scenarios/ecommerce-advanced/data/collections/customers.jsonl new file mode 100644 index 0000000..e054312 --- /dev/null +++ b/scenarios/ecommerce-advanced/data/collections/customers.jsonl @@ -0,0 +1,200 @@ +{"customer_id":"CUST_0001","name":"Customer 1","email":"customer1@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"CA","postal_code":"10000"},"segments":["frequent","promotion"],"created_at":{"$date":"2024-01-02T00:00:00.000Z"}} +{"customer_id":"CUST_0002","name":"Customer 2","email":"customer2@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"17919"},"segments":["standard","full-price"],"created_at":{"$date":"2024-01-01T00:00:00.000Z"}} +{"customer_id":"CUST_0003","name":"Customer 3","email":"customer3@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"25838"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-31T00:00:00.000Z"}} +{"customer_id":"CUST_0004","name":"Customer 4","email":"customer4@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"33757"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-12-30T00:00:00.000Z"}} +{"customer_id":"CUST_0005","name":"Customer 5","email":"customer5@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"41676"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-29T00:00:00.000Z"}} +{"customer_id":"CUST_0006","name":"Customer 6","email":"customer6@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"49595"},"segments":["standard","promotion"],"created_at":{"$date":"2023-12-28T00:00:00.000Z"}} +{"customer_id":"CUST_0007","name":"Customer 7","email":"customer7@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"57514"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-12-27T00:00:00.000Z"}} +{"customer_id":"CUST_0008","name":"Customer 8","email":"customer8@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"CA","postal_code":"65433"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-26T00:00:00.000Z"}} +{"customer_id":"CUST_0009","name":"Customer 9","email":"customer9@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"73352"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-25T00:00:00.000Z"}} +{"customer_id":"CUST_0010","name":"Customer 10","email":"customer10@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"81271"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-12-24T00:00:00.000Z"}} +{"customer_id":"CUST_0011","name":"Customer 11","email":"customer11@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"89190"},"segments":["standard","promotion"],"created_at":{"$date":"2023-12-23T00:00:00.000Z"}} +{"customer_id":"CUST_0012","name":"Customer 12","email":"customer12@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"97109"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-22T00:00:00.000Z"}} +{"customer_id":"CUST_0013","name":"Customer 13","email":"customer13@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"15029"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-12-21T00:00:00.000Z"}} +{"customer_id":"CUST_0014","name":"Customer 14","email":"customer14@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"22948"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-20T00:00:00.000Z"}} +{"customer_id":"CUST_0015","name":"Customer 15","email":"customer15@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"CA","postal_code":"30867"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-19T00:00:00.000Z"}} +{"customer_id":"CUST_0016","name":"Customer 16","email":"customer16@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"38786"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-12-18T00:00:00.000Z"}} +{"customer_id":"CUST_0017","name":"Customer 17","email":"customer17@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"46705"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-17T00:00:00.000Z"}} +{"customer_id":"CUST_0018","name":"Customer 18","email":"customer18@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"54624"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-16T00:00:00.000Z"}} +{"customer_id":"CUST_0019","name":"Customer 19","email":"customer19@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"62543"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-12-15T00:00:00.000Z"}} +{"customer_id":"CUST_0020","name":"Customer 20","email":"customer20@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"70462"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-14T00:00:00.000Z"}} +{"customer_id":"CUST_0021","name":"Customer 21","email":"customer21@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"78381"},"segments":["standard","promotion"],"created_at":{"$date":"2023-12-13T00:00:00.000Z"}} +{"customer_id":"CUST_0022","name":"Customer 22","email":"customer22@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"CA","postal_code":"86300"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-12-12T00:00:00.000Z"}} +{"customer_id":"CUST_0023","name":"Customer 23","email":"customer23@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"94219"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-11T00:00:00.000Z"}} +{"customer_id":"CUST_0024","name":"Customer 24","email":"customer24@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"12139"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-10T00:00:00.000Z"}} +{"customer_id":"CUST_0025","name":"Customer 25","email":"customer25@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"20058"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-12-09T00:00:00.000Z"}} +{"customer_id":"CUST_0026","name":"Customer 26","email":"customer26@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"27977"},"segments":["standard","promotion"],"created_at":{"$date":"2023-12-08T00:00:00.000Z"}} +{"customer_id":"CUST_0027","name":"Customer 27","email":"customer27@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"35896"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-07T00:00:00.000Z"}} +{"customer_id":"CUST_0028","name":"Customer 28","email":"customer28@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"43815"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-12-06T00:00:00.000Z"}} +{"customer_id":"CUST_0029","name":"Customer 29","email":"customer29@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"CA","postal_code":"51734"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-05T00:00:00.000Z"}} +{"customer_id":"CUST_0030","name":"Customer 30","email":"customer30@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"59653"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-04T00:00:00.000Z"}} +{"customer_id":"CUST_0031","name":"Customer 31","email":"customer31@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"67572"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-12-03T00:00:00.000Z"}} +{"customer_id":"CUST_0032","name":"Customer 32","email":"customer32@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"75491"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-02T00:00:00.000Z"}} +{"customer_id":"CUST_0033","name":"Customer 33","email":"customer33@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"83410"},"segments":["standard","full-price"],"created_at":{"$date":"2023-12-01T00:00:00.000Z"}} +{"customer_id":"CUST_0034","name":"Customer 34","email":"customer34@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"91329"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-11-30T00:00:00.000Z"}} +{"customer_id":"CUST_0035","name":"Customer 35","email":"customer35@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"99248"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-29T00:00:00.000Z"}} +{"customer_id":"CUST_0036","name":"Customer 36","email":"customer36@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"CA","postal_code":"17168"},"segments":["standard","promotion"],"created_at":{"$date":"2023-11-28T00:00:00.000Z"}} +{"customer_id":"CUST_0037","name":"Customer 37","email":"customer37@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"25087"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-11-27T00:00:00.000Z"}} +{"customer_id":"CUST_0038","name":"Customer 38","email":"customer38@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"33006"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-26T00:00:00.000Z"}} +{"customer_id":"CUST_0039","name":"Customer 39","email":"customer39@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"40925"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-25T00:00:00.000Z"}} +{"customer_id":"CUST_0040","name":"Customer 40","email":"customer40@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"48844"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-11-24T00:00:00.000Z"}} +{"customer_id":"CUST_0041","name":"Customer 41","email":"customer41@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"56763"},"segments":["standard","promotion"],"created_at":{"$date":"2023-11-23T00:00:00.000Z"}} +{"customer_id":"CUST_0042","name":"Customer 42","email":"customer42@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"64682"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-22T00:00:00.000Z"}} +{"customer_id":"CUST_0043","name":"Customer 43","email":"customer43@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"CA","postal_code":"72601"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-11-21T00:00:00.000Z"}} +{"customer_id":"CUST_0044","name":"Customer 44","email":"customer44@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"80520"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-20T00:00:00.000Z"}} +{"customer_id":"CUST_0045","name":"Customer 45","email":"customer45@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"88439"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-19T00:00:00.000Z"}} +{"customer_id":"CUST_0046","name":"Customer 46","email":"customer46@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"96358"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-11-18T00:00:00.000Z"}} +{"customer_id":"CUST_0047","name":"Customer 47","email":"customer47@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"14278"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-17T00:00:00.000Z"}} +{"customer_id":"CUST_0048","name":"Customer 48","email":"customer48@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"22197"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-16T00:00:00.000Z"}} +{"customer_id":"CUST_0049","name":"Customer 49","email":"customer49@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"30116"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-11-15T00:00:00.000Z"}} +{"customer_id":"CUST_0050","name":"Customer 50","email":"customer50@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"CA","postal_code":"38035"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-14T00:00:00.000Z"}} +{"customer_id":"CUST_0051","name":"Customer 51","email":"customer51@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"45954"},"segments":["standard","promotion"],"created_at":{"$date":"2023-11-13T00:00:00.000Z"}} +{"customer_id":"CUST_0052","name":"Customer 52","email":"customer52@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"53873"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-11-12T00:00:00.000Z"}} +{"customer_id":"CUST_0053","name":"Customer 53","email":"customer53@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"61792"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-11T00:00:00.000Z"}} +{"customer_id":"CUST_0054","name":"Customer 54","email":"customer54@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"69711"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-10T00:00:00.000Z"}} +{"customer_id":"CUST_0055","name":"Customer 55","email":"customer55@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"77630"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-11-09T00:00:00.000Z"}} +{"customer_id":"CUST_0056","name":"Customer 56","email":"customer56@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"85549"},"segments":["standard","promotion"],"created_at":{"$date":"2023-11-08T00:00:00.000Z"}} +{"customer_id":"CUST_0057","name":"Customer 57","email":"customer57@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"CA","postal_code":"93468"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-07T00:00:00.000Z"}} +{"customer_id":"CUST_0058","name":"Customer 58","email":"customer58@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"11388"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-11-06T00:00:00.000Z"}} +{"customer_id":"CUST_0059","name":"Customer 59","email":"customer59@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"19307"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-05T00:00:00.000Z"}} +{"customer_id":"CUST_0060","name":"Customer 60","email":"customer60@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"27226"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-04T00:00:00.000Z"}} +{"customer_id":"CUST_0061","name":"Customer 61","email":"customer61@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"35145"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-11-03T00:00:00.000Z"}} +{"customer_id":"CUST_0062","name":"Customer 62","email":"customer62@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"43064"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-02T00:00:00.000Z"}} +{"customer_id":"CUST_0063","name":"Customer 63","email":"customer63@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"50983"},"segments":["standard","full-price"],"created_at":{"$date":"2023-11-01T00:00:00.000Z"}} +{"customer_id":"CUST_0064","name":"Customer 64","email":"customer64@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"CA","postal_code":"58902"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-10-31T00:00:00.000Z"}} +{"customer_id":"CUST_0065","name":"Customer 65","email":"customer65@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"66821"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-30T00:00:00.000Z"}} +{"customer_id":"CUST_0066","name":"Customer 66","email":"customer66@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"74740"},"segments":["standard","promotion"],"created_at":{"$date":"2023-10-29T00:00:00.000Z"}} +{"customer_id":"CUST_0067","name":"Customer 67","email":"customer67@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"82659"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-10-28T00:00:00.000Z"}} +{"customer_id":"CUST_0068","name":"Customer 68","email":"customer68@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"90578"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-27T00:00:00.000Z"}} +{"customer_id":"CUST_0069","name":"Customer 69","email":"customer69@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"98497"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-26T00:00:00.000Z"}} +{"customer_id":"CUST_0070","name":"Customer 70","email":"customer70@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"16417"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-10-25T00:00:00.000Z"}} +{"customer_id":"CUST_0071","name":"Customer 71","email":"customer71@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"CA","postal_code":"24336"},"segments":["standard","promotion"],"created_at":{"$date":"2023-10-24T00:00:00.000Z"}} +{"customer_id":"CUST_0072","name":"Customer 72","email":"customer72@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"32255"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-23T00:00:00.000Z"}} +{"customer_id":"CUST_0073","name":"Customer 73","email":"customer73@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"40174"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-10-22T00:00:00.000Z"}} +{"customer_id":"CUST_0074","name":"Customer 74","email":"customer74@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"48093"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-21T00:00:00.000Z"}} +{"customer_id":"CUST_0075","name":"Customer 75","email":"customer75@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"56012"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-20T00:00:00.000Z"}} +{"customer_id":"CUST_0076","name":"Customer 76","email":"customer76@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"63931"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-10-19T00:00:00.000Z"}} +{"customer_id":"CUST_0077","name":"Customer 77","email":"customer77@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"71850"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-18T00:00:00.000Z"}} +{"customer_id":"CUST_0078","name":"Customer 78","email":"customer78@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"CA","postal_code":"79769"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-17T00:00:00.000Z"}} +{"customer_id":"CUST_0079","name":"Customer 79","email":"customer79@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"87688"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-10-16T00:00:00.000Z"}} +{"customer_id":"CUST_0080","name":"Customer 80","email":"customer80@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"95607"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-15T00:00:00.000Z"}} +{"customer_id":"CUST_0081","name":"Customer 81","email":"customer81@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"13527"},"segments":["standard","promotion"],"created_at":{"$date":"2023-10-14T00:00:00.000Z"}} +{"customer_id":"CUST_0082","name":"Customer 82","email":"customer82@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"21446"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-10-13T00:00:00.000Z"}} +{"customer_id":"CUST_0083","name":"Customer 83","email":"customer83@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"29365"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-12T00:00:00.000Z"}} +{"customer_id":"CUST_0084","name":"Customer 84","email":"customer84@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"37284"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-11T00:00:00.000Z"}} +{"customer_id":"CUST_0085","name":"Customer 85","email":"customer85@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"CA","postal_code":"45203"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-10-10T00:00:00.000Z"}} +{"customer_id":"CUST_0086","name":"Customer 86","email":"customer86@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"53122"},"segments":["standard","promotion"],"created_at":{"$date":"2023-10-09T00:00:00.000Z"}} +{"customer_id":"CUST_0087","name":"Customer 87","email":"customer87@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"61041"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-08T00:00:00.000Z"}} +{"customer_id":"CUST_0088","name":"Customer 88","email":"customer88@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"68960"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-10-07T00:00:00.000Z"}} +{"customer_id":"CUST_0089","name":"Customer 89","email":"customer89@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"76879"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-06T00:00:00.000Z"}} +{"customer_id":"CUST_0090","name":"Customer 90","email":"customer90@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"84798"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-05T00:00:00.000Z"}} +{"customer_id":"CUST_0091","name":"Customer 91","email":"customer91@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"92717"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-10-04T00:00:00.000Z"}} +{"customer_id":"CUST_0092","name":"Customer 92","email":"customer92@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"CA","postal_code":"10637"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-03T00:00:00.000Z"}} +{"customer_id":"CUST_0093","name":"Customer 93","email":"customer93@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"18556"},"segments":["standard","full-price"],"created_at":{"$date":"2023-10-02T00:00:00.000Z"}} +{"customer_id":"CUST_0094","name":"Customer 94","email":"customer94@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"26475"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-10-01T00:00:00.000Z"}} +{"customer_id":"CUST_0095","name":"Customer 95","email":"customer95@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"34394"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-30T00:00:00.000Z"}} +{"customer_id":"CUST_0096","name":"Customer 96","email":"customer96@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"42313"},"segments":["standard","promotion"],"created_at":{"$date":"2023-09-29T00:00:00.000Z"}} +{"customer_id":"CUST_0097","name":"Customer 97","email":"customer97@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"50232"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-09-28T00:00:00.000Z"}} +{"customer_id":"CUST_0098","name":"Customer 98","email":"customer98@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"58151"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-27T00:00:00.000Z"}} +{"customer_id":"CUST_0099","name":"Customer 99","email":"customer99@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"CA","postal_code":"66070"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-26T00:00:00.000Z"}} +{"customer_id":"CUST_0100","name":"Customer 100","email":"customer100@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"73989"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-09-25T00:00:00.000Z"}} +{"customer_id":"CUST_0101","name":"Customer 101","email":"customer101@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"81908"},"segments":["standard","promotion"],"created_at":{"$date":"2023-09-24T00:00:00.000Z"}} +{"customer_id":"CUST_0102","name":"Customer 102","email":"customer102@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"89827"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-23T00:00:00.000Z"}} +{"customer_id":"CUST_0103","name":"Customer 103","email":"customer103@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"97746"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-09-22T00:00:00.000Z"}} +{"customer_id":"CUST_0104","name":"Customer 104","email":"customer104@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"15666"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-21T00:00:00.000Z"}} +{"customer_id":"CUST_0105","name":"Customer 105","email":"customer105@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"23585"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-20T00:00:00.000Z"}} +{"customer_id":"CUST_0106","name":"Customer 106","email":"customer106@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"CA","postal_code":"31504"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-09-19T00:00:00.000Z"}} +{"customer_id":"CUST_0107","name":"Customer 107","email":"customer107@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"39423"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-18T00:00:00.000Z"}} +{"customer_id":"CUST_0108","name":"Customer 108","email":"customer108@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"47342"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-17T00:00:00.000Z"}} +{"customer_id":"CUST_0109","name":"Customer 109","email":"customer109@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"55261"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-09-16T00:00:00.000Z"}} +{"customer_id":"CUST_0110","name":"Customer 110","email":"customer110@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"63180"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-15T00:00:00.000Z"}} +{"customer_id":"CUST_0111","name":"Customer 111","email":"customer111@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"71099"},"segments":["standard","promotion"],"created_at":{"$date":"2023-09-14T00:00:00.000Z"}} +{"customer_id":"CUST_0112","name":"Customer 112","email":"customer112@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"79018"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-09-13T00:00:00.000Z"}} +{"customer_id":"CUST_0113","name":"Customer 113","email":"customer113@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"CA","postal_code":"86937"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-12T00:00:00.000Z"}} +{"customer_id":"CUST_0114","name":"Customer 114","email":"customer114@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"94856"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-11T00:00:00.000Z"}} +{"customer_id":"CUST_0115","name":"Customer 115","email":"customer115@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"12776"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-09-10T00:00:00.000Z"}} +{"customer_id":"CUST_0116","name":"Customer 116","email":"customer116@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"20695"},"segments":["standard","promotion"],"created_at":{"$date":"2023-09-09T00:00:00.000Z"}} +{"customer_id":"CUST_0117","name":"Customer 117","email":"customer117@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"28614"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-08T00:00:00.000Z"}} +{"customer_id":"CUST_0118","name":"Customer 118","email":"customer118@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"36533"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-09-07T00:00:00.000Z"}} +{"customer_id":"CUST_0119","name":"Customer 119","email":"customer119@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"44452"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-06T00:00:00.000Z"}} +{"customer_id":"CUST_0120","name":"Customer 120","email":"customer120@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"CA","postal_code":"52371"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-05T00:00:00.000Z"}} +{"customer_id":"CUST_0121","name":"Customer 121","email":"customer121@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"60290"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-09-04T00:00:00.000Z"}} +{"customer_id":"CUST_0122","name":"Customer 122","email":"customer122@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"68209"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-03T00:00:00.000Z"}} +{"customer_id":"CUST_0123","name":"Customer 123","email":"customer123@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"76128"},"segments":["standard","full-price"],"created_at":{"$date":"2023-09-02T00:00:00.000Z"}} +{"customer_id":"CUST_0124","name":"Customer 124","email":"customer124@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"84047"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-09-01T00:00:00.000Z"}} +{"customer_id":"CUST_0125","name":"Customer 125","email":"customer125@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"91966"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-31T00:00:00.000Z"}} +{"customer_id":"CUST_0126","name":"Customer 126","email":"customer126@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"99885"},"segments":["standard","promotion"],"created_at":{"$date":"2023-08-30T00:00:00.000Z"}} +{"customer_id":"CUST_0127","name":"Customer 127","email":"customer127@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"CA","postal_code":"17805"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-08-29T00:00:00.000Z"}} +{"customer_id":"CUST_0128","name":"Customer 128","email":"customer128@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"25724"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-28T00:00:00.000Z"}} +{"customer_id":"CUST_0129","name":"Customer 129","email":"customer129@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"33643"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-27T00:00:00.000Z"}} +{"customer_id":"CUST_0130","name":"Customer 130","email":"customer130@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"41562"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-08-26T00:00:00.000Z"}} +{"customer_id":"CUST_0131","name":"Customer 131","email":"customer131@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"49481"},"segments":["standard","promotion"],"created_at":{"$date":"2023-08-25T00:00:00.000Z"}} +{"customer_id":"CUST_0132","name":"Customer 132","email":"customer132@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"57400"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-24T00:00:00.000Z"}} +{"customer_id":"CUST_0133","name":"Customer 133","email":"customer133@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"65319"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-08-23T00:00:00.000Z"}} +{"customer_id":"CUST_0134","name":"Customer 134","email":"customer134@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"CA","postal_code":"73238"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-22T00:00:00.000Z"}} +{"customer_id":"CUST_0135","name":"Customer 135","email":"customer135@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"81157"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-21T00:00:00.000Z"}} +{"customer_id":"CUST_0136","name":"Customer 136","email":"customer136@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"89076"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-08-20T00:00:00.000Z"}} +{"customer_id":"CUST_0137","name":"Customer 137","email":"customer137@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"96995"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-19T00:00:00.000Z"}} +{"customer_id":"CUST_0138","name":"Customer 138","email":"customer138@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"14915"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-18T00:00:00.000Z"}} +{"customer_id":"CUST_0139","name":"Customer 139","email":"customer139@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"22834"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-08-17T00:00:00.000Z"}} +{"customer_id":"CUST_0140","name":"Customer 140","email":"customer140@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"30753"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-16T00:00:00.000Z"}} +{"customer_id":"CUST_0141","name":"Customer 141","email":"customer141@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"CA","postal_code":"38672"},"segments":["standard","promotion"],"created_at":{"$date":"2023-08-15T00:00:00.000Z"}} +{"customer_id":"CUST_0142","name":"Customer 142","email":"customer142@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"46591"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-08-14T00:00:00.000Z"}} +{"customer_id":"CUST_0143","name":"Customer 143","email":"customer143@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"54510"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-13T00:00:00.000Z"}} +{"customer_id":"CUST_0144","name":"Customer 144","email":"customer144@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"62429"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-12T00:00:00.000Z"}} +{"customer_id":"CUST_0145","name":"Customer 145","email":"customer145@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"70348"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-08-11T00:00:00.000Z"}} +{"customer_id":"CUST_0146","name":"Customer 146","email":"customer146@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"78267"},"segments":["standard","promotion"],"created_at":{"$date":"2023-08-10T00:00:00.000Z"}} +{"customer_id":"CUST_0147","name":"Customer 147","email":"customer147@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"86186"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-09T00:00:00.000Z"}} +{"customer_id":"CUST_0148","name":"Customer 148","email":"customer148@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"CA","postal_code":"94105"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-08-08T00:00:00.000Z"}} +{"customer_id":"CUST_0149","name":"Customer 149","email":"customer149@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"12025"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-07T00:00:00.000Z"}} +{"customer_id":"CUST_0150","name":"Customer 150","email":"customer150@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"19944"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-06T00:00:00.000Z"}} +{"customer_id":"CUST_0151","name":"Customer 151","email":"customer151@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"27863"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-08-05T00:00:00.000Z"}} +{"customer_id":"CUST_0152","name":"Customer 152","email":"customer152@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"35782"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-04T00:00:00.000Z"}} +{"customer_id":"CUST_0153","name":"Customer 153","email":"customer153@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"43701"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-03T00:00:00.000Z"}} +{"customer_id":"CUST_0154","name":"Customer 154","email":"customer154@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"51620"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-08-02T00:00:00.000Z"}} +{"customer_id":"CUST_0155","name":"Customer 155","email":"customer155@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"CA","postal_code":"59539"},"segments":["standard","full-price"],"created_at":{"$date":"2023-08-01T00:00:00.000Z"}} +{"customer_id":"CUST_0156","name":"Customer 156","email":"customer156@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"67458"},"segments":["standard","promotion"],"created_at":{"$date":"2023-07-31T00:00:00.000Z"}} +{"customer_id":"CUST_0157","name":"Customer 157","email":"customer157@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"75377"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-07-30T00:00:00.000Z"}} +{"customer_id":"CUST_0158","name":"Customer 158","email":"customer158@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"83296"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-29T00:00:00.000Z"}} +{"customer_id":"CUST_0159","name":"Customer 159","email":"customer159@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"91215"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-28T00:00:00.000Z"}} +{"customer_id":"CUST_0160","name":"Customer 160","email":"customer160@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"99134"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-07-27T00:00:00.000Z"}} +{"customer_id":"CUST_0161","name":"Customer 161","email":"customer161@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"17054"},"segments":["standard","promotion"],"created_at":{"$date":"2023-07-26T00:00:00.000Z"}} +{"customer_id":"CUST_0162","name":"Customer 162","email":"customer162@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"CA","postal_code":"24973"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-25T00:00:00.000Z"}} +{"customer_id":"CUST_0163","name":"Customer 163","email":"customer163@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"32892"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-07-24T00:00:00.000Z"}} +{"customer_id":"CUST_0164","name":"Customer 164","email":"customer164@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"40811"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-23T00:00:00.000Z"}} +{"customer_id":"CUST_0165","name":"Customer 165","email":"customer165@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"48730"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-22T00:00:00.000Z"}} +{"customer_id":"CUST_0166","name":"Customer 166","email":"customer166@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"56649"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-07-21T00:00:00.000Z"}} +{"customer_id":"CUST_0167","name":"Customer 167","email":"customer167@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"64568"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-20T00:00:00.000Z"}} +{"customer_id":"CUST_0168","name":"Customer 168","email":"customer168@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"72487"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-19T00:00:00.000Z"}} +{"customer_id":"CUST_0169","name":"Customer 169","email":"customer169@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"CA","postal_code":"80406"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-07-18T00:00:00.000Z"}} +{"customer_id":"CUST_0170","name":"Customer 170","email":"customer170@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"88325"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-17T00:00:00.000Z"}} +{"customer_id":"CUST_0171","name":"Customer 171","email":"customer171@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"96244"},"segments":["standard","promotion"],"created_at":{"$date":"2023-07-16T00:00:00.000Z"}} +{"customer_id":"CUST_0172","name":"Customer 172","email":"customer172@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"14164"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-07-15T00:00:00.000Z"}} +{"customer_id":"CUST_0173","name":"Customer 173","email":"customer173@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"22083"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-14T00:00:00.000Z"}} +{"customer_id":"CUST_0174","name":"Customer 174","email":"customer174@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"30002"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-13T00:00:00.000Z"}} +{"customer_id":"CUST_0175","name":"Customer 175","email":"customer175@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"37921"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-07-12T00:00:00.000Z"}} +{"customer_id":"CUST_0176","name":"Customer 176","email":"customer176@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"CA","postal_code":"45840"},"segments":["standard","promotion"],"created_at":{"$date":"2023-07-11T00:00:00.000Z"}} +{"customer_id":"CUST_0177","name":"Customer 177","email":"customer177@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"53759"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-10T00:00:00.000Z"}} +{"customer_id":"CUST_0178","name":"Customer 178","email":"customer178@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"US","postal_code":"61678"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-07-09T00:00:00.000Z"}} +{"customer_id":"CUST_0179","name":"Customer 179","email":"customer179@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"69597"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-08T00:00:00.000Z"}} +{"customer_id":"CUST_0180","name":"Customer 180","email":"customer180@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"77516"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-07T00:00:00.000Z"}} +{"customer_id":"CUST_0181","name":"Customer 181","email":"customer181@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"85435"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-07-06T00:00:00.000Z"}} +{"customer_id":"CUST_0182","name":"Customer 182","email":"customer182@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"93354"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-05T00:00:00.000Z"}} +{"customer_id":"CUST_0183","name":"Customer 183","email":"customer183@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"CA","postal_code":"11274"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-04T00:00:00.000Z"}} +{"customer_id":"CUST_0184","name":"Customer 184","email":"customer184@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"19193"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-07-03T00:00:00.000Z"}} +{"customer_id":"CUST_0185","name":"Customer 185","email":"customer185@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"US","postal_code":"27112"},"segments":["standard","full-price"],"created_at":{"$date":"2023-07-02T00:00:00.000Z"}} +{"customer_id":"CUST_0186","name":"Customer 186","email":"customer186@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"35031"},"segments":["standard","promotion"],"created_at":{"$date":"2023-07-01T00:00:00.000Z"}} +{"customer_id":"CUST_0187","name":"Customer 187","email":"customer187@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"42950"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-06-30T00:00:00.000Z"}} +{"customer_id":"CUST_0188","name":"Customer 188","email":"customer188@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"50869"},"segments":["standard","full-price"],"created_at":{"$date":"2023-06-29T00:00:00.000Z"}} +{"customer_id":"CUST_0189","name":"Customer 189","email":"customer189@example.test","tier":"bronze","region":"amer","address":{"city":"Austin","country":"US","postal_code":"58788"},"segments":["standard","full-price"],"created_at":{"$date":"2023-06-28T00:00:00.000Z"}} +{"customer_id":"CUST_0190","name":"Customer 190","email":"customer190@example.test","tier":"silver","region":"emea","address":{"city":"Toronto","country":"CA","postal_code":"66707"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-06-27T00:00:00.000Z"}} +{"customer_id":"CUST_0191","name":"Customer 191","email":"customer191@example.test","tier":"gold","region":"apac","address":{"city":"London","country":"US","postal_code":"74626"},"segments":["standard","promotion"],"created_at":{"$date":"2023-06-26T00:00:00.000Z"}} +{"customer_id":"CUST_0192","name":"Customer 192","email":"customer192@example.test","tier":"platinum","region":"canada","address":{"city":"Tokyo","country":"US","postal_code":"82545"},"segments":["standard","full-price"],"created_at":{"$date":"2023-06-25T00:00:00.000Z"}} +{"customer_id":"CUST_0193","name":"Customer 193","email":"customer193@example.test","tier":"bronze","region":"amer","address":{"city":"Seattle","country":"US","postal_code":"90464"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-06-24T00:00:00.000Z"}} +{"customer_id":"CUST_0194","name":"Customer 194","email":"customer194@example.test","tier":"silver","region":"emea","address":{"city":"Portland","country":"US","postal_code":"98383"},"segments":["standard","full-price"],"created_at":{"$date":"2023-06-23T00:00:00.000Z"}} +{"customer_id":"CUST_0195","name":"Customer 195","email":"customer195@example.test","tier":"gold","region":"apac","address":{"city":"Austin","country":"US","postal_code":"16303"},"segments":["standard","full-price"],"created_at":{"$date":"2023-06-22T00:00:00.000Z"}} +{"customer_id":"CUST_0196","name":"Customer 196","email":"customer196@example.test","tier":"platinum","region":"canada","address":{"city":"Toronto","country":"US","postal_code":"24222"},"segments":["frequent","promotion"],"created_at":{"$date":"2023-06-21T00:00:00.000Z"}} +{"customer_id":"CUST_0197","name":"Customer 197","email":"customer197@example.test","tier":"bronze","region":"amer","address":{"city":"London","country":"CA","postal_code":"32141"},"segments":["standard","full-price"],"created_at":{"$date":"2023-06-20T00:00:00.000Z"}} +{"customer_id":"CUST_0198","name":"Customer 198","email":"customer198@example.test","tier":"silver","region":"emea","address":{"city":"Tokyo","country":"US","postal_code":"40060"},"segments":["standard","full-price"],"created_at":{"$date":"2023-06-19T00:00:00.000Z"}} +{"customer_id":"CUST_0199","name":"Customer 199","email":"customer199@example.test","tier":"gold","region":"apac","address":{"city":"Seattle","country":"US","postal_code":"47979"},"segments":["frequent","full-price"],"created_at":{"$date":"2023-06-18T00:00:00.000Z"}} +{"customer_id":"CUST_0200","name":"Customer 200","email":"customer200@example.test","tier":"platinum","region":"canada","address":{"city":"Portland","country":"US","postal_code":"55898"},"segments":["standard","full-price"],"created_at":{"$date":"2023-06-17T00:00:00.000Z"}} diff --git a/scenarios/ecommerce-advanced/data/collections/daily_sales.jsonl b/scenarios/ecommerce-advanced/data/collections/daily_sales.jsonl new file mode 100644 index 0000000..2eb6a18 --- /dev/null +++ b/scenarios/ecommerce-advanced/data/collections/daily_sales.jsonl @@ -0,0 +1,84 @@ +{"sales_date":{"$date":"2025-01-01T00:00:00.000Z"},"revenue":4374.75,"order_count":23,"units":23,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-01-02T00:00:00.000Z"},"revenue":13322.78,"order_count":23,"units":69,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-01-03T00:00:00.000Z"},"revenue":23571.3,"order_count":23,"units":138,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-01-04T00:00:00.000Z"},"revenue":29293.81,"order_count":23,"units":161,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-01-05T00:00:00.000Z"},"revenue":39682.55,"order_count":23,"units":207,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-06T00:00:00.000Z"},"revenue":4618.5,"order_count":23,"units":23,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-07T00:00:00.000Z"},"revenue":13692.15,"order_count":23,"units":69,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-09T00:00:00.000Z"},"revenue":32102.59,"order_count":23,"units":161,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-10T00:00:00.000Z"},"revenue":39172.59,"order_count":23,"units":207,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-11T00:00:00.000Z"},"revenue":4112.25,"order_count":23,"units":23,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-12T00:00:00.000Z"},"revenue":12561.53,"order_count":23,"units":69,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-13T00:00:00.000Z"},"revenue":24167.55,"order_count":23,"units":138,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-14T00:00:00.000Z"},"revenue":30036.31,"order_count":23,"units":161,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-15T00:00:00.000Z"},"revenue":null,"order_count":23,"units":207,"promotion_active":true,"note":"intentional null for $fill"} +{"sales_date":{"$date":"2025-01-16T00:00:00.000Z"},"revenue":4731,"order_count":23,"units":23,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-01-17T00:00:00.000Z"},"revenue":14018.4,"order_count":23,"units":69,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-01-18T00:00:00.000Z"},"revenue":25215.72,"order_count":23,"units":138,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-01-19T00:00:00.000Z"},"revenue":30707.59,"order_count":23,"units":161,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-21T00:00:00.000Z"},"revenue":3834,"order_count":22,"units":22,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-22T00:00:00.000Z"},"revenue":12672.61,"order_count":22,"units":66,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-23T00:00:00.000Z"},"revenue":24061.95,"order_count":22,"units":132,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-24T00:00:00.000Z"},"revenue":29577.24,"order_count":22,"units":154,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-25T00:00:00.000Z"},"revenue":39589.28,"order_count":22,"units":198,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-26T00:00:00.000Z"},"revenue":4621.5,"order_count":22,"units":22,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-27T00:00:00.000Z"},"revenue":13531.35,"order_count":22,"units":66,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-28T00:00:00.000Z"},"revenue":22385.75,"order_count":22,"units":132,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-01-29T00:00:00.000Z"},"revenue":27912.26,"order_count":22,"units":154,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-01-30T00:00:00.000Z"},"revenue":36949.33,"order_count":22,"units":198,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-01-31T00:00:00.000Z"},"revenue":3909,"order_count":22,"units":22,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-02-01T00:00:00.000Z"},"revenue":12890.1,"order_count":22,"units":66,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-02-02T00:00:00.000Z"},"revenue":24459.45,"order_count":22,"units":132,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-03T00:00:00.000Z"},"revenue":30072.24,"order_count":22,"units":154,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-04T00:00:00.000Z"},"revenue":39559.28,"order_count":22,"units":198,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-05T00:00:00.000Z"},"revenue":4696.5,"order_count":22,"units":22,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-07T00:00:00.000Z"},"revenue":21752,"order_count":22,"units":132,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-08T00:00:00.000Z"},"revenue":28069.76,"order_count":22,"units":154,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-09T00:00:00.000Z"},"revenue":37594.33,"order_count":22,"units":198,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-10T00:00:00.000Z"},"revenue":3984,"order_count":22,"units":22,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-11T00:00:00.000Z"},"revenue":13107.59,"order_count":22,"units":66,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-12T00:00:00.000Z"},"revenue":24856.95,"order_count":22,"units":132,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-02-13T00:00:00.000Z"},"revenue":null,"order_count":22,"units":154,"promotion_active":true,"note":"intentional null for $fill"} +{"sales_date":{"$date":"2025-02-14T00:00:00.000Z"},"revenue":39173.04,"order_count":22,"units":198,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-02-15T00:00:00.000Z"},"revenue":4771.5,"order_count":22,"units":22,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-02-16T00:00:00.000Z"},"revenue":12166.35,"order_count":22,"units":66,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-17T00:00:00.000Z"},"revenue":21793.24,"order_count":22,"units":132,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-18T00:00:00.000Z"},"revenue":28564.76,"order_count":22,"units":154,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-19T00:00:00.000Z"},"revenue":38239.33,"order_count":22,"units":198,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-20T00:00:00.000Z"},"revenue":4059,"order_count":22,"units":22,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-21T00:00:00.000Z"},"revenue":13325.09,"order_count":22,"units":66,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-22T00:00:00.000Z"},"revenue":25254.45,"order_count":22,"units":132,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-23T00:00:00.000Z"},"revenue":30687.24,"order_count":22,"units":154,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-24T00:00:00.000Z"},"revenue":37586.79,"order_count":22,"units":198,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-25T00:00:00.000Z"},"revenue":4471.5,"order_count":22,"units":22,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-02-26T00:00:00.000Z"},"revenue":12008.85,"order_count":22,"units":66,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-02-28T00:00:00.000Z"},"revenue":29059.76,"order_count":22,"units":154,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-03-01T00:00:00.000Z"},"revenue":38884.33,"order_count":22,"units":198,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-03-02T00:00:00.000Z"},"revenue":4134,"order_count":22,"units":22,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-03T00:00:00.000Z"},"revenue":13542.59,"order_count":22,"units":66,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-04T00:00:00.000Z"},"revenue":25651.95,"order_count":22,"units":132,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-05T00:00:00.000Z"},"revenue":29044.74,"order_count":22,"units":154,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-06T00:00:00.000Z"},"revenue":36038.04,"order_count":22,"units":198,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-07T00:00:00.000Z"},"revenue":4171.5,"order_count":22,"units":22,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-08T00:00:00.000Z"},"revenue":12226.35,"order_count":22,"units":66,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-09T00:00:00.000Z"},"revenue":22588.25,"order_count":22,"units":132,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-10T00:00:00.000Z"},"revenue":29554.76,"order_count":22,"units":154,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-11T00:00:00.000Z"},"revenue":null,"order_count":22,"units":198,"promotion_active":false,"note":"intentional null for $fill"} +{"sales_date":{"$date":"2025-03-12T00:00:00.000Z"},"revenue":4209,"order_count":22,"units":22,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-03-13T00:00:00.000Z"},"revenue":13760.1,"order_count":22,"units":66,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-03-14T00:00:00.000Z"},"revenue":25093.2,"order_count":22,"units":132,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-03-15T00:00:00.000Z"},"revenue":27439.74,"order_count":22,"units":154,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-03-16T00:00:00.000Z"},"revenue":36364.29,"order_count":22,"units":198,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-17T00:00:00.000Z"},"revenue":4246.5,"order_count":22,"units":22,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-18T00:00:00.000Z"},"revenue":12443.85,"order_count":22,"units":66,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-19T00:00:00.000Z"},"revenue":22985.75,"order_count":22,"units":132,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-21T00:00:00.000Z"},"revenue":40174.33,"order_count":22,"units":198,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-22T00:00:00.000Z"},"revenue":4284,"order_count":22,"units":22,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-23T00:00:00.000Z"},"revenue":13977.61,"order_count":22,"units":66,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-24T00:00:00.000Z"},"revenue":23503.2,"order_count":22,"units":132,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-25T00:00:00.000Z"},"revenue":27597.24,"order_count":22,"units":154,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-26T00:00:00.000Z"},"revenue":37009.29,"order_count":22,"units":198,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-03-28T00:00:00.000Z"},"revenue":12661.35,"order_count":22,"units":66,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-03-29T00:00:00.000Z"},"revenue":23383.24,"order_count":22,"units":132,"promotion_active":true,"note":null} +{"sales_date":{"$date":"2025-03-30T00:00:00.000Z"},"revenue":30544.76,"order_count":22,"units":154,"promotion_active":false,"note":null} +{"sales_date":{"$date":"2025-03-31T00:00:00.000Z"},"revenue":39788.08,"order_count":22,"units":198,"promotion_active":false,"note":null} diff --git a/scenarios/ecommerce-advanced/data/collections/inventory.jsonl b/scenarios/ecommerce-advanced/data/collections/inventory.jsonl new file mode 100644 index 0000000..d4598e7 --- /dev/null +++ b/scenarios/ecommerce-advanced/data/collections/inventory.jsonl @@ -0,0 +1,300 @@ +{"inventory_id":"PROD_0001:WH_EAST","product_id":"PROD_0001","warehouse_id":"WH_EAST","quantity":10,"reserved":1,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0001:WH_WEST","product_id":"PROD_0001","warehouse_id":"WH_WEST","quantity":60,"reserved":2,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0001:WH_CENTRAL","product_id":"PROD_0001","warehouse_id":"WH_CENTRAL","quantity":83,"reserved":3,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0002:WH_EAST","product_id":"PROD_0002","warehouse_id":"WH_EAST","quantity":1,"reserved":1,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0002:WH_WEST","product_id":"PROD_0002","warehouse_id":"WH_WEST","quantity":77,"reserved":3,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0002:WH_CENTRAL","product_id":"PROD_0002","warehouse_id":"WH_CENTRAL","quantity":100,"reserved":4,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0003:WH_EAST","product_id":"PROD_0003","warehouse_id":"WH_EAST","quantity":0,"reserved":0,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0003:WH_WEST","product_id":"PROD_0003","warehouse_id":"WH_WEST","quantity":94,"reserved":4,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0003:WH_CENTRAL","product_id":"PROD_0003","warehouse_id":"WH_CENTRAL","quantity":117,"reserved":5,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0004:WH_EAST","product_id":"PROD_0004","warehouse_id":"WH_EAST","quantity":25,"reserved":4,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0004:WH_WEST","product_id":"PROD_0004","warehouse_id":"WH_WEST","quantity":111,"reserved":5,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0004:WH_CENTRAL","product_id":"PROD_0004","warehouse_id":"WH_CENTRAL","quantity":134,"reserved":0,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0005:WH_EAST","product_id":"PROD_0005","warehouse_id":"WH_EAST","quantity":105,"reserved":5,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0005:WH_WEST","product_id":"PROD_0005","warehouse_id":"WH_WEST","quantity":128,"reserved":0,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0005:WH_CENTRAL","product_id":"PROD_0005","warehouse_id":"WH_CENTRAL","quantity":151,"reserved":1,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0006:WH_EAST","product_id":"PROD_0006","warehouse_id":"WH_EAST","quantity":122,"reserved":0,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0006:WH_WEST","product_id":"PROD_0006","warehouse_id":"WH_WEST","quantity":145,"reserved":1,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0006:WH_CENTRAL","product_id":"PROD_0006","warehouse_id":"WH_CENTRAL","quantity":168,"reserved":2,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0007:WH_EAST","product_id":"PROD_0007","warehouse_id":"WH_EAST","quantity":139,"reserved":1,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0007:WH_WEST","product_id":"PROD_0007","warehouse_id":"WH_WEST","quantity":162,"reserved":2,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0007:WH_CENTRAL","product_id":"PROD_0007","warehouse_id":"WH_CENTRAL","quantity":185,"reserved":3,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0008:WH_EAST","product_id":"PROD_0008","warehouse_id":"WH_EAST","quantity":156,"reserved":2,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0008:WH_WEST","product_id":"PROD_0008","warehouse_id":"WH_WEST","quantity":179,"reserved":3,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0008:WH_CENTRAL","product_id":"PROD_0008","warehouse_id":"WH_CENTRAL","quantity":22,"reserved":4,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0009:WH_EAST","product_id":"PROD_0009","warehouse_id":"WH_EAST","quantity":173,"reserved":3,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0009:WH_WEST","product_id":"PROD_0009","warehouse_id":"WH_WEST","quantity":196,"reserved":4,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0009:WH_CENTRAL","product_id":"PROD_0009","warehouse_id":"WH_CENTRAL","quantity":39,"reserved":5,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0010:WH_EAST","product_id":"PROD_0010","warehouse_id":"WH_EAST","quantity":190,"reserved":4,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0010:WH_WEST","product_id":"PROD_0010","warehouse_id":"WH_WEST","quantity":33,"reserved":5,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0010:WH_CENTRAL","product_id":"PROD_0010","warehouse_id":"WH_CENTRAL","quantity":56,"reserved":0,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0011:WH_EAST","product_id":"PROD_0011","warehouse_id":"WH_EAST","quantity":27,"reserved":5,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0011:WH_WEST","product_id":"PROD_0011","warehouse_id":"WH_WEST","quantity":50,"reserved":0,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0011:WH_CENTRAL","product_id":"PROD_0011","warehouse_id":"WH_CENTRAL","quantity":73,"reserved":1,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0012:WH_EAST","product_id":"PROD_0012","warehouse_id":"WH_EAST","quantity":44,"reserved":0,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0012:WH_WEST","product_id":"PROD_0012","warehouse_id":"WH_WEST","quantity":67,"reserved":1,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0012:WH_CENTRAL","product_id":"PROD_0012","warehouse_id":"WH_CENTRAL","quantity":90,"reserved":2,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0013:WH_EAST","product_id":"PROD_0013","warehouse_id":"WH_EAST","quantity":61,"reserved":1,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0013:WH_WEST","product_id":"PROD_0013","warehouse_id":"WH_WEST","quantity":84,"reserved":2,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0013:WH_CENTRAL","product_id":"PROD_0013","warehouse_id":"WH_CENTRAL","quantity":107,"reserved":3,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0014:WH_EAST","product_id":"PROD_0014","warehouse_id":"WH_EAST","quantity":78,"reserved":2,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0014:WH_WEST","product_id":"PROD_0014","warehouse_id":"WH_WEST","quantity":101,"reserved":3,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0014:WH_CENTRAL","product_id":"PROD_0014","warehouse_id":"WH_CENTRAL","quantity":124,"reserved":4,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0015:WH_EAST","product_id":"PROD_0015","warehouse_id":"WH_EAST","quantity":95,"reserved":3,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0015:WH_WEST","product_id":"PROD_0015","warehouse_id":"WH_WEST","quantity":118,"reserved":4,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0015:WH_CENTRAL","product_id":"PROD_0015","warehouse_id":"WH_CENTRAL","quantity":141,"reserved":5,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0016:WH_EAST","product_id":"PROD_0016","warehouse_id":"WH_EAST","quantity":112,"reserved":4,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0016:WH_WEST","product_id":"PROD_0016","warehouse_id":"WH_WEST","quantity":135,"reserved":5,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0016:WH_CENTRAL","product_id":"PROD_0016","warehouse_id":"WH_CENTRAL","quantity":158,"reserved":0,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0017:WH_EAST","product_id":"PROD_0017","warehouse_id":"WH_EAST","quantity":129,"reserved":5,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0017:WH_WEST","product_id":"PROD_0017","warehouse_id":"WH_WEST","quantity":152,"reserved":0,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0017:WH_CENTRAL","product_id":"PROD_0017","warehouse_id":"WH_CENTRAL","quantity":175,"reserved":1,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0018:WH_EAST","product_id":"PROD_0018","warehouse_id":"WH_EAST","quantity":146,"reserved":0,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0018:WH_WEST","product_id":"PROD_0018","warehouse_id":"WH_WEST","quantity":169,"reserved":1,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0018:WH_CENTRAL","product_id":"PROD_0018","warehouse_id":"WH_CENTRAL","quantity":192,"reserved":2,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0019:WH_EAST","product_id":"PROD_0019","warehouse_id":"WH_EAST","quantity":163,"reserved":1,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0019:WH_WEST","product_id":"PROD_0019","warehouse_id":"WH_WEST","quantity":186,"reserved":2,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0019:WH_CENTRAL","product_id":"PROD_0019","warehouse_id":"WH_CENTRAL","quantity":29,"reserved":3,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0020:WH_EAST","product_id":"PROD_0020","warehouse_id":"WH_EAST","quantity":180,"reserved":2,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0020:WH_WEST","product_id":"PROD_0020","warehouse_id":"WH_WEST","quantity":23,"reserved":3,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0020:WH_CENTRAL","product_id":"PROD_0020","warehouse_id":"WH_CENTRAL","quantity":46,"reserved":4,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0021:WH_EAST","product_id":"PROD_0021","warehouse_id":"WH_EAST","quantity":197,"reserved":3,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0021:WH_WEST","product_id":"PROD_0021","warehouse_id":"WH_WEST","quantity":40,"reserved":4,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0021:WH_CENTRAL","product_id":"PROD_0021","warehouse_id":"WH_CENTRAL","quantity":63,"reserved":5,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0022:WH_EAST","product_id":"PROD_0022","warehouse_id":"WH_EAST","quantity":34,"reserved":4,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0022:WH_WEST","product_id":"PROD_0022","warehouse_id":"WH_WEST","quantity":57,"reserved":5,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0022:WH_CENTRAL","product_id":"PROD_0022","warehouse_id":"WH_CENTRAL","quantity":80,"reserved":0,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0023:WH_EAST","product_id":"PROD_0023","warehouse_id":"WH_EAST","quantity":51,"reserved":5,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0023:WH_WEST","product_id":"PROD_0023","warehouse_id":"WH_WEST","quantity":74,"reserved":0,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0023:WH_CENTRAL","product_id":"PROD_0023","warehouse_id":"WH_CENTRAL","quantity":97,"reserved":1,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0024:WH_EAST","product_id":"PROD_0024","warehouse_id":"WH_EAST","quantity":68,"reserved":0,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0024:WH_WEST","product_id":"PROD_0024","warehouse_id":"WH_WEST","quantity":91,"reserved":1,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0024:WH_CENTRAL","product_id":"PROD_0024","warehouse_id":"WH_CENTRAL","quantity":114,"reserved":2,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0025:WH_EAST","product_id":"PROD_0025","warehouse_id":"WH_EAST","quantity":85,"reserved":1,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0025:WH_WEST","product_id":"PROD_0025","warehouse_id":"WH_WEST","quantity":108,"reserved":2,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0025:WH_CENTRAL","product_id":"PROD_0025","warehouse_id":"WH_CENTRAL","quantity":131,"reserved":3,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0026:WH_EAST","product_id":"PROD_0026","warehouse_id":"WH_EAST","quantity":102,"reserved":2,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0026:WH_WEST","product_id":"PROD_0026","warehouse_id":"WH_WEST","quantity":125,"reserved":3,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0026:WH_CENTRAL","product_id":"PROD_0026","warehouse_id":"WH_CENTRAL","quantity":148,"reserved":4,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0027:WH_EAST","product_id":"PROD_0027","warehouse_id":"WH_EAST","quantity":119,"reserved":3,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0027:WH_WEST","product_id":"PROD_0027","warehouse_id":"WH_WEST","quantity":142,"reserved":4,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0027:WH_CENTRAL","product_id":"PROD_0027","warehouse_id":"WH_CENTRAL","quantity":165,"reserved":5,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0028:WH_EAST","product_id":"PROD_0028","warehouse_id":"WH_EAST","quantity":136,"reserved":4,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0028:WH_WEST","product_id":"PROD_0028","warehouse_id":"WH_WEST","quantity":159,"reserved":5,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0028:WH_CENTRAL","product_id":"PROD_0028","warehouse_id":"WH_CENTRAL","quantity":182,"reserved":0,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0029:WH_EAST","product_id":"PROD_0029","warehouse_id":"WH_EAST","quantity":153,"reserved":5,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0029:WH_WEST","product_id":"PROD_0029","warehouse_id":"WH_WEST","quantity":176,"reserved":0,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0029:WH_CENTRAL","product_id":"PROD_0029","warehouse_id":"WH_CENTRAL","quantity":199,"reserved":1,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0030:WH_EAST","product_id":"PROD_0030","warehouse_id":"WH_EAST","quantity":170,"reserved":0,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0030:WH_WEST","product_id":"PROD_0030","warehouse_id":"WH_WEST","quantity":193,"reserved":1,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0030:WH_CENTRAL","product_id":"PROD_0030","warehouse_id":"WH_CENTRAL","quantity":36,"reserved":2,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0031:WH_EAST","product_id":"PROD_0031","warehouse_id":"WH_EAST","quantity":187,"reserved":1,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0031:WH_WEST","product_id":"PROD_0031","warehouse_id":"WH_WEST","quantity":30,"reserved":2,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0031:WH_CENTRAL","product_id":"PROD_0031","warehouse_id":"WH_CENTRAL","quantity":53,"reserved":3,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0032:WH_EAST","product_id":"PROD_0032","warehouse_id":"WH_EAST","quantity":24,"reserved":2,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0032:WH_WEST","product_id":"PROD_0032","warehouse_id":"WH_WEST","quantity":47,"reserved":3,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0032:WH_CENTRAL","product_id":"PROD_0032","warehouse_id":"WH_CENTRAL","quantity":70,"reserved":4,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0033:WH_EAST","product_id":"PROD_0033","warehouse_id":"WH_EAST","quantity":41,"reserved":3,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0033:WH_WEST","product_id":"PROD_0033","warehouse_id":"WH_WEST","quantity":64,"reserved":4,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0033:WH_CENTRAL","product_id":"PROD_0033","warehouse_id":"WH_CENTRAL","quantity":87,"reserved":5,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0034:WH_EAST","product_id":"PROD_0034","warehouse_id":"WH_EAST","quantity":58,"reserved":4,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0034:WH_WEST","product_id":"PROD_0034","warehouse_id":"WH_WEST","quantity":81,"reserved":5,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0034:WH_CENTRAL","product_id":"PROD_0034","warehouse_id":"WH_CENTRAL","quantity":104,"reserved":0,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0035:WH_EAST","product_id":"PROD_0035","warehouse_id":"WH_EAST","quantity":75,"reserved":5,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0035:WH_WEST","product_id":"PROD_0035","warehouse_id":"WH_WEST","quantity":98,"reserved":0,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0035:WH_CENTRAL","product_id":"PROD_0035","warehouse_id":"WH_CENTRAL","quantity":121,"reserved":1,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0036:WH_EAST","product_id":"PROD_0036","warehouse_id":"WH_EAST","quantity":92,"reserved":0,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0036:WH_WEST","product_id":"PROD_0036","warehouse_id":"WH_WEST","quantity":115,"reserved":1,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0036:WH_CENTRAL","product_id":"PROD_0036","warehouse_id":"WH_CENTRAL","quantity":138,"reserved":2,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0037:WH_EAST","product_id":"PROD_0037","warehouse_id":"WH_EAST","quantity":109,"reserved":1,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0037:WH_WEST","product_id":"PROD_0037","warehouse_id":"WH_WEST","quantity":132,"reserved":2,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0037:WH_CENTRAL","product_id":"PROD_0037","warehouse_id":"WH_CENTRAL","quantity":155,"reserved":3,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0038:WH_EAST","product_id":"PROD_0038","warehouse_id":"WH_EAST","quantity":126,"reserved":2,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0038:WH_WEST","product_id":"PROD_0038","warehouse_id":"WH_WEST","quantity":149,"reserved":3,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0038:WH_CENTRAL","product_id":"PROD_0038","warehouse_id":"WH_CENTRAL","quantity":172,"reserved":4,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0039:WH_EAST","product_id":"PROD_0039","warehouse_id":"WH_EAST","quantity":143,"reserved":3,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0039:WH_WEST","product_id":"PROD_0039","warehouse_id":"WH_WEST","quantity":166,"reserved":4,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0039:WH_CENTRAL","product_id":"PROD_0039","warehouse_id":"WH_CENTRAL","quantity":189,"reserved":5,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0040:WH_EAST","product_id":"PROD_0040","warehouse_id":"WH_EAST","quantity":160,"reserved":4,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0040:WH_WEST","product_id":"PROD_0040","warehouse_id":"WH_WEST","quantity":183,"reserved":5,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0040:WH_CENTRAL","product_id":"PROD_0040","warehouse_id":"WH_CENTRAL","quantity":26,"reserved":0,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0041:WH_EAST","product_id":"PROD_0041","warehouse_id":"WH_EAST","quantity":177,"reserved":5,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0041:WH_WEST","product_id":"PROD_0041","warehouse_id":"WH_WEST","quantity":20,"reserved":0,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0041:WH_CENTRAL","product_id":"PROD_0041","warehouse_id":"WH_CENTRAL","quantity":43,"reserved":1,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0042:WH_EAST","product_id":"PROD_0042","warehouse_id":"WH_EAST","quantity":194,"reserved":0,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0042:WH_WEST","product_id":"PROD_0042","warehouse_id":"WH_WEST","quantity":37,"reserved":1,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0042:WH_CENTRAL","product_id":"PROD_0042","warehouse_id":"WH_CENTRAL","quantity":60,"reserved":2,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0043:WH_EAST","product_id":"PROD_0043","warehouse_id":"WH_EAST","quantity":31,"reserved":1,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0043:WH_WEST","product_id":"PROD_0043","warehouse_id":"WH_WEST","quantity":54,"reserved":2,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0043:WH_CENTRAL","product_id":"PROD_0043","warehouse_id":"WH_CENTRAL","quantity":77,"reserved":3,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0044:WH_EAST","product_id":"PROD_0044","warehouse_id":"WH_EAST","quantity":48,"reserved":2,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0044:WH_WEST","product_id":"PROD_0044","warehouse_id":"WH_WEST","quantity":71,"reserved":3,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0044:WH_CENTRAL","product_id":"PROD_0044","warehouse_id":"WH_CENTRAL","quantity":94,"reserved":4,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0045:WH_EAST","product_id":"PROD_0045","warehouse_id":"WH_EAST","quantity":65,"reserved":3,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0045:WH_WEST","product_id":"PROD_0045","warehouse_id":"WH_WEST","quantity":88,"reserved":4,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0045:WH_CENTRAL","product_id":"PROD_0045","warehouse_id":"WH_CENTRAL","quantity":111,"reserved":5,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0046:WH_EAST","product_id":"PROD_0046","warehouse_id":"WH_EAST","quantity":82,"reserved":4,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0046:WH_WEST","product_id":"PROD_0046","warehouse_id":"WH_WEST","quantity":105,"reserved":5,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0046:WH_CENTRAL","product_id":"PROD_0046","warehouse_id":"WH_CENTRAL","quantity":128,"reserved":0,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0047:WH_EAST","product_id":"PROD_0047","warehouse_id":"WH_EAST","quantity":99,"reserved":5,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0047:WH_WEST","product_id":"PROD_0047","warehouse_id":"WH_WEST","quantity":122,"reserved":0,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0047:WH_CENTRAL","product_id":"PROD_0047","warehouse_id":"WH_CENTRAL","quantity":145,"reserved":1,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0048:WH_EAST","product_id":"PROD_0048","warehouse_id":"WH_EAST","quantity":116,"reserved":0,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0048:WH_WEST","product_id":"PROD_0048","warehouse_id":"WH_WEST","quantity":139,"reserved":1,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0048:WH_CENTRAL","product_id":"PROD_0048","warehouse_id":"WH_CENTRAL","quantity":162,"reserved":2,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0049:WH_EAST","product_id":"PROD_0049","warehouse_id":"WH_EAST","quantity":133,"reserved":1,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0049:WH_WEST","product_id":"PROD_0049","warehouse_id":"WH_WEST","quantity":156,"reserved":2,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0049:WH_CENTRAL","product_id":"PROD_0049","warehouse_id":"WH_CENTRAL","quantity":179,"reserved":3,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0050:WH_EAST","product_id":"PROD_0050","warehouse_id":"WH_EAST","quantity":150,"reserved":2,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0050:WH_WEST","product_id":"PROD_0050","warehouse_id":"WH_WEST","quantity":173,"reserved":3,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0050:WH_CENTRAL","product_id":"PROD_0050","warehouse_id":"WH_CENTRAL","quantity":196,"reserved":4,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0051:WH_EAST","product_id":"PROD_0051","warehouse_id":"WH_EAST","quantity":167,"reserved":3,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0051:WH_WEST","product_id":"PROD_0051","warehouse_id":"WH_WEST","quantity":190,"reserved":4,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0051:WH_CENTRAL","product_id":"PROD_0051","warehouse_id":"WH_CENTRAL","quantity":33,"reserved":5,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0052:WH_EAST","product_id":"PROD_0052","warehouse_id":"WH_EAST","quantity":184,"reserved":4,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0052:WH_WEST","product_id":"PROD_0052","warehouse_id":"WH_WEST","quantity":27,"reserved":5,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0052:WH_CENTRAL","product_id":"PROD_0052","warehouse_id":"WH_CENTRAL","quantity":50,"reserved":0,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0053:WH_EAST","product_id":"PROD_0053","warehouse_id":"WH_EAST","quantity":21,"reserved":5,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0053:WH_WEST","product_id":"PROD_0053","warehouse_id":"WH_WEST","quantity":44,"reserved":0,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0053:WH_CENTRAL","product_id":"PROD_0053","warehouse_id":"WH_CENTRAL","quantity":67,"reserved":1,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0054:WH_EAST","product_id":"PROD_0054","warehouse_id":"WH_EAST","quantity":38,"reserved":0,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0054:WH_WEST","product_id":"PROD_0054","warehouse_id":"WH_WEST","quantity":61,"reserved":1,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0054:WH_CENTRAL","product_id":"PROD_0054","warehouse_id":"WH_CENTRAL","quantity":84,"reserved":2,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0055:WH_EAST","product_id":"PROD_0055","warehouse_id":"WH_EAST","quantity":55,"reserved":1,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0055:WH_WEST","product_id":"PROD_0055","warehouse_id":"WH_WEST","quantity":78,"reserved":2,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0055:WH_CENTRAL","product_id":"PROD_0055","warehouse_id":"WH_CENTRAL","quantity":101,"reserved":3,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0056:WH_EAST","product_id":"PROD_0056","warehouse_id":"WH_EAST","quantity":72,"reserved":2,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0056:WH_WEST","product_id":"PROD_0056","warehouse_id":"WH_WEST","quantity":95,"reserved":3,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0056:WH_CENTRAL","product_id":"PROD_0056","warehouse_id":"WH_CENTRAL","quantity":118,"reserved":4,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0057:WH_EAST","product_id":"PROD_0057","warehouse_id":"WH_EAST","quantity":89,"reserved":3,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0057:WH_WEST","product_id":"PROD_0057","warehouse_id":"WH_WEST","quantity":112,"reserved":4,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0057:WH_CENTRAL","product_id":"PROD_0057","warehouse_id":"WH_CENTRAL","quantity":135,"reserved":5,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0058:WH_EAST","product_id":"PROD_0058","warehouse_id":"WH_EAST","quantity":106,"reserved":4,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0058:WH_WEST","product_id":"PROD_0058","warehouse_id":"WH_WEST","quantity":129,"reserved":5,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0058:WH_CENTRAL","product_id":"PROD_0058","warehouse_id":"WH_CENTRAL","quantity":152,"reserved":0,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0059:WH_EAST","product_id":"PROD_0059","warehouse_id":"WH_EAST","quantity":123,"reserved":5,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0059:WH_WEST","product_id":"PROD_0059","warehouse_id":"WH_WEST","quantity":146,"reserved":0,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0059:WH_CENTRAL","product_id":"PROD_0059","warehouse_id":"WH_CENTRAL","quantity":169,"reserved":1,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0060:WH_EAST","product_id":"PROD_0060","warehouse_id":"WH_EAST","quantity":140,"reserved":0,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0060:WH_WEST","product_id":"PROD_0060","warehouse_id":"WH_WEST","quantity":163,"reserved":1,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0060:WH_CENTRAL","product_id":"PROD_0060","warehouse_id":"WH_CENTRAL","quantity":186,"reserved":2,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0061:WH_EAST","product_id":"PROD_0061","warehouse_id":"WH_EAST","quantity":157,"reserved":1,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0061:WH_WEST","product_id":"PROD_0061","warehouse_id":"WH_WEST","quantity":180,"reserved":2,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0061:WH_CENTRAL","product_id":"PROD_0061","warehouse_id":"WH_CENTRAL","quantity":23,"reserved":3,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0062:WH_EAST","product_id":"PROD_0062","warehouse_id":"WH_EAST","quantity":174,"reserved":2,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0062:WH_WEST","product_id":"PROD_0062","warehouse_id":"WH_WEST","quantity":197,"reserved":3,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0062:WH_CENTRAL","product_id":"PROD_0062","warehouse_id":"WH_CENTRAL","quantity":40,"reserved":4,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0063:WH_EAST","product_id":"PROD_0063","warehouse_id":"WH_EAST","quantity":191,"reserved":3,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0063:WH_WEST","product_id":"PROD_0063","warehouse_id":"WH_WEST","quantity":34,"reserved":4,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0063:WH_CENTRAL","product_id":"PROD_0063","warehouse_id":"WH_CENTRAL","quantity":57,"reserved":5,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0064:WH_EAST","product_id":"PROD_0064","warehouse_id":"WH_EAST","quantity":28,"reserved":4,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0064:WH_WEST","product_id":"PROD_0064","warehouse_id":"WH_WEST","quantity":51,"reserved":5,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0064:WH_CENTRAL","product_id":"PROD_0064","warehouse_id":"WH_CENTRAL","quantity":74,"reserved":0,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0065:WH_EAST","product_id":"PROD_0065","warehouse_id":"WH_EAST","quantity":45,"reserved":5,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0065:WH_WEST","product_id":"PROD_0065","warehouse_id":"WH_WEST","quantity":68,"reserved":0,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0065:WH_CENTRAL","product_id":"PROD_0065","warehouse_id":"WH_CENTRAL","quantity":91,"reserved":1,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0066:WH_EAST","product_id":"PROD_0066","warehouse_id":"WH_EAST","quantity":62,"reserved":0,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0066:WH_WEST","product_id":"PROD_0066","warehouse_id":"WH_WEST","quantity":85,"reserved":1,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0066:WH_CENTRAL","product_id":"PROD_0066","warehouse_id":"WH_CENTRAL","quantity":108,"reserved":2,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0067:WH_EAST","product_id":"PROD_0067","warehouse_id":"WH_EAST","quantity":79,"reserved":1,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0067:WH_WEST","product_id":"PROD_0067","warehouse_id":"WH_WEST","quantity":102,"reserved":2,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0067:WH_CENTRAL","product_id":"PROD_0067","warehouse_id":"WH_CENTRAL","quantity":125,"reserved":3,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0068:WH_EAST","product_id":"PROD_0068","warehouse_id":"WH_EAST","quantity":96,"reserved":2,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0068:WH_WEST","product_id":"PROD_0068","warehouse_id":"WH_WEST","quantity":119,"reserved":3,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0068:WH_CENTRAL","product_id":"PROD_0068","warehouse_id":"WH_CENTRAL","quantity":142,"reserved":4,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0069:WH_EAST","product_id":"PROD_0069","warehouse_id":"WH_EAST","quantity":113,"reserved":3,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0069:WH_WEST","product_id":"PROD_0069","warehouse_id":"WH_WEST","quantity":136,"reserved":4,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0069:WH_CENTRAL","product_id":"PROD_0069","warehouse_id":"WH_CENTRAL","quantity":159,"reserved":5,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0070:WH_EAST","product_id":"PROD_0070","warehouse_id":"WH_EAST","quantity":130,"reserved":4,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0070:WH_WEST","product_id":"PROD_0070","warehouse_id":"WH_WEST","quantity":153,"reserved":5,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0070:WH_CENTRAL","product_id":"PROD_0070","warehouse_id":"WH_CENTRAL","quantity":176,"reserved":0,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0071:WH_EAST","product_id":"PROD_0071","warehouse_id":"WH_EAST","quantity":147,"reserved":5,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0071:WH_WEST","product_id":"PROD_0071","warehouse_id":"WH_WEST","quantity":170,"reserved":0,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0071:WH_CENTRAL","product_id":"PROD_0071","warehouse_id":"WH_CENTRAL","quantity":193,"reserved":1,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0072:WH_EAST","product_id":"PROD_0072","warehouse_id":"WH_EAST","quantity":164,"reserved":0,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0072:WH_WEST","product_id":"PROD_0072","warehouse_id":"WH_WEST","quantity":187,"reserved":1,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0072:WH_CENTRAL","product_id":"PROD_0072","warehouse_id":"WH_CENTRAL","quantity":30,"reserved":2,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0073:WH_EAST","product_id":"PROD_0073","warehouse_id":"WH_EAST","quantity":181,"reserved":1,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0073:WH_WEST","product_id":"PROD_0073","warehouse_id":"WH_WEST","quantity":24,"reserved":2,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0073:WH_CENTRAL","product_id":"PROD_0073","warehouse_id":"WH_CENTRAL","quantity":47,"reserved":3,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0074:WH_EAST","product_id":"PROD_0074","warehouse_id":"WH_EAST","quantity":198,"reserved":2,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0074:WH_WEST","product_id":"PROD_0074","warehouse_id":"WH_WEST","quantity":41,"reserved":3,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0074:WH_CENTRAL","product_id":"PROD_0074","warehouse_id":"WH_CENTRAL","quantity":64,"reserved":4,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0075:WH_EAST","product_id":"PROD_0075","warehouse_id":"WH_EAST","quantity":35,"reserved":3,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0075:WH_WEST","product_id":"PROD_0075","warehouse_id":"WH_WEST","quantity":58,"reserved":4,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0075:WH_CENTRAL","product_id":"PROD_0075","warehouse_id":"WH_CENTRAL","quantity":81,"reserved":5,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0076:WH_EAST","product_id":"PROD_0076","warehouse_id":"WH_EAST","quantity":52,"reserved":4,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0076:WH_WEST","product_id":"PROD_0076","warehouse_id":"WH_WEST","quantity":75,"reserved":5,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0076:WH_CENTRAL","product_id":"PROD_0076","warehouse_id":"WH_CENTRAL","quantity":98,"reserved":0,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0077:WH_EAST","product_id":"PROD_0077","warehouse_id":"WH_EAST","quantity":69,"reserved":5,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0077:WH_WEST","product_id":"PROD_0077","warehouse_id":"WH_WEST","quantity":92,"reserved":0,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0077:WH_CENTRAL","product_id":"PROD_0077","warehouse_id":"WH_CENTRAL","quantity":115,"reserved":1,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0078:WH_EAST","product_id":"PROD_0078","warehouse_id":"WH_EAST","quantity":86,"reserved":0,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0078:WH_WEST","product_id":"PROD_0078","warehouse_id":"WH_WEST","quantity":109,"reserved":1,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0078:WH_CENTRAL","product_id":"PROD_0078","warehouse_id":"WH_CENTRAL","quantity":132,"reserved":2,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0079:WH_EAST","product_id":"PROD_0079","warehouse_id":"WH_EAST","quantity":103,"reserved":1,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0079:WH_WEST","product_id":"PROD_0079","warehouse_id":"WH_WEST","quantity":126,"reserved":2,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0079:WH_CENTRAL","product_id":"PROD_0079","warehouse_id":"WH_CENTRAL","quantity":149,"reserved":3,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0080:WH_EAST","product_id":"PROD_0080","warehouse_id":"WH_EAST","quantity":120,"reserved":2,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0080:WH_WEST","product_id":"PROD_0080","warehouse_id":"WH_WEST","quantity":143,"reserved":3,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0080:WH_CENTRAL","product_id":"PROD_0080","warehouse_id":"WH_CENTRAL","quantity":166,"reserved":4,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0081:WH_EAST","product_id":"PROD_0081","warehouse_id":"WH_EAST","quantity":137,"reserved":3,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0081:WH_WEST","product_id":"PROD_0081","warehouse_id":"WH_WEST","quantity":160,"reserved":4,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0081:WH_CENTRAL","product_id":"PROD_0081","warehouse_id":"WH_CENTRAL","quantity":183,"reserved":5,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0082:WH_EAST","product_id":"PROD_0082","warehouse_id":"WH_EAST","quantity":154,"reserved":4,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0082:WH_WEST","product_id":"PROD_0082","warehouse_id":"WH_WEST","quantity":177,"reserved":5,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0082:WH_CENTRAL","product_id":"PROD_0082","warehouse_id":"WH_CENTRAL","quantity":20,"reserved":0,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0083:WH_EAST","product_id":"PROD_0083","warehouse_id":"WH_EAST","quantity":171,"reserved":5,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0083:WH_WEST","product_id":"PROD_0083","warehouse_id":"WH_WEST","quantity":194,"reserved":0,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0083:WH_CENTRAL","product_id":"PROD_0083","warehouse_id":"WH_CENTRAL","quantity":37,"reserved":1,"reorder_point":23,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0084:WH_EAST","product_id":"PROD_0084","warehouse_id":"WH_EAST","quantity":188,"reserved":0,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0084:WH_WEST","product_id":"PROD_0084","warehouse_id":"WH_WEST","quantity":31,"reserved":1,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0084:WH_CENTRAL","product_id":"PROD_0084","warehouse_id":"WH_CENTRAL","quantity":54,"reserved":2,"reorder_point":24,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0085:WH_EAST","product_id":"PROD_0085","warehouse_id":"WH_EAST","quantity":25,"reserved":1,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0085:WH_WEST","product_id":"PROD_0085","warehouse_id":"WH_WEST","quantity":48,"reserved":2,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0085:WH_CENTRAL","product_id":"PROD_0085","warehouse_id":"WH_CENTRAL","quantity":71,"reserved":3,"reorder_point":25,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0086:WH_EAST","product_id":"PROD_0086","warehouse_id":"WH_EAST","quantity":42,"reserved":2,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0086:WH_WEST","product_id":"PROD_0086","warehouse_id":"WH_WEST","quantity":65,"reserved":3,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0086:WH_CENTRAL","product_id":"PROD_0086","warehouse_id":"WH_CENTRAL","quantity":88,"reserved":4,"reorder_point":26,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0087:WH_EAST","product_id":"PROD_0087","warehouse_id":"WH_EAST","quantity":59,"reserved":3,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0087:WH_WEST","product_id":"PROD_0087","warehouse_id":"WH_WEST","quantity":82,"reserved":4,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0087:WH_CENTRAL","product_id":"PROD_0087","warehouse_id":"WH_CENTRAL","quantity":105,"reserved":5,"reorder_point":27,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0088:WH_EAST","product_id":"PROD_0088","warehouse_id":"WH_EAST","quantity":76,"reserved":4,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0088:WH_WEST","product_id":"PROD_0088","warehouse_id":"WH_WEST","quantity":99,"reserved":5,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0088:WH_CENTRAL","product_id":"PROD_0088","warehouse_id":"WH_CENTRAL","quantity":122,"reserved":0,"reorder_point":28,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0089:WH_EAST","product_id":"PROD_0089","warehouse_id":"WH_EAST","quantity":93,"reserved":5,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0089:WH_WEST","product_id":"PROD_0089","warehouse_id":"WH_WEST","quantity":116,"reserved":0,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0089:WH_CENTRAL","product_id":"PROD_0089","warehouse_id":"WH_CENTRAL","quantity":139,"reserved":1,"reorder_point":29,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0090:WH_EAST","product_id":"PROD_0090","warehouse_id":"WH_EAST","quantity":110,"reserved":0,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0090:WH_WEST","product_id":"PROD_0090","warehouse_id":"WH_WEST","quantity":133,"reserved":1,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0090:WH_CENTRAL","product_id":"PROD_0090","warehouse_id":"WH_CENTRAL","quantity":156,"reserved":2,"reorder_point":12,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0091:WH_EAST","product_id":"PROD_0091","warehouse_id":"WH_EAST","quantity":127,"reserved":1,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0091:WH_WEST","product_id":"PROD_0091","warehouse_id":"WH_WEST","quantity":150,"reserved":2,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0091:WH_CENTRAL","product_id":"PROD_0091","warehouse_id":"WH_CENTRAL","quantity":173,"reserved":3,"reorder_point":13,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0092:WH_EAST","product_id":"PROD_0092","warehouse_id":"WH_EAST","quantity":144,"reserved":2,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0092:WH_WEST","product_id":"PROD_0092","warehouse_id":"WH_WEST","quantity":167,"reserved":3,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0092:WH_CENTRAL","product_id":"PROD_0092","warehouse_id":"WH_CENTRAL","quantity":190,"reserved":4,"reorder_point":14,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0093:WH_EAST","product_id":"PROD_0093","warehouse_id":"WH_EAST","quantity":161,"reserved":3,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0093:WH_WEST","product_id":"PROD_0093","warehouse_id":"WH_WEST","quantity":184,"reserved":4,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0093:WH_CENTRAL","product_id":"PROD_0093","warehouse_id":"WH_CENTRAL","quantity":27,"reserved":5,"reorder_point":15,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0094:WH_EAST","product_id":"PROD_0094","warehouse_id":"WH_EAST","quantity":178,"reserved":4,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0094:WH_WEST","product_id":"PROD_0094","warehouse_id":"WH_WEST","quantity":21,"reserved":5,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0094:WH_CENTRAL","product_id":"PROD_0094","warehouse_id":"WH_CENTRAL","quantity":44,"reserved":0,"reorder_point":16,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0095:WH_EAST","product_id":"PROD_0095","warehouse_id":"WH_EAST","quantity":195,"reserved":5,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0095:WH_WEST","product_id":"PROD_0095","warehouse_id":"WH_WEST","quantity":38,"reserved":0,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0095:WH_CENTRAL","product_id":"PROD_0095","warehouse_id":"WH_CENTRAL","quantity":61,"reserved":1,"reorder_point":17,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0096:WH_EAST","product_id":"PROD_0096","warehouse_id":"WH_EAST","quantity":32,"reserved":0,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0096:WH_WEST","product_id":"PROD_0096","warehouse_id":"WH_WEST","quantity":55,"reserved":1,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0096:WH_CENTRAL","product_id":"PROD_0096","warehouse_id":"WH_CENTRAL","quantity":78,"reserved":2,"reorder_point":18,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0097:WH_EAST","product_id":"PROD_0097","warehouse_id":"WH_EAST","quantity":49,"reserved":1,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0097:WH_WEST","product_id":"PROD_0097","warehouse_id":"WH_WEST","quantity":72,"reserved":2,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0097:WH_CENTRAL","product_id":"PROD_0097","warehouse_id":"WH_CENTRAL","quantity":95,"reserved":3,"reorder_point":19,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0098:WH_EAST","product_id":"PROD_0098","warehouse_id":"WH_EAST","quantity":66,"reserved":2,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0098:WH_WEST","product_id":"PROD_0098","warehouse_id":"WH_WEST","quantity":89,"reserved":3,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0098:WH_CENTRAL","product_id":"PROD_0098","warehouse_id":"WH_CENTRAL","quantity":112,"reserved":4,"reorder_point":20,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0099:WH_EAST","product_id":"PROD_0099","warehouse_id":"WH_EAST","quantity":83,"reserved":3,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0099:WH_WEST","product_id":"PROD_0099","warehouse_id":"WH_WEST","quantity":106,"reserved":4,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0099:WH_CENTRAL","product_id":"PROD_0099","warehouse_id":"WH_CENTRAL","quantity":129,"reserved":5,"reorder_point":21,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} +{"inventory_id":"PROD_0100:WH_EAST","product_id":"PROD_0100","warehouse_id":"WH_EAST","quantity":100,"reserved":4,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T00:00:00.000Z"}} +{"inventory_id":"PROD_0100:WH_WEST","product_id":"PROD_0100","warehouse_id":"WH_WEST","quantity":123,"reserved":5,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T01:00:00.000Z"}} +{"inventory_id":"PROD_0100:WH_CENTRAL","product_id":"PROD_0100","warehouse_id":"WH_CENTRAL","quantity":146,"reserved":0,"reorder_point":22,"version":1,"updated_at":{"$date":"2025-03-31T02:00:00.000Z"}} diff --git a/scenarios/ecommerce-advanced/data/collections/order_items.jsonl b/scenarios/ecommerce-advanced/data/collections/order_items.jsonl new file mode 100644 index 0000000..f65da6a --- /dev/null +++ b/scenarios/ecommerce-advanced/data/collections/order_items.jsonl @@ -0,0 +1,6000 @@ +{"order_item_id":"ORD_000001:1","order_id":"ORD_000001","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_000002:1","order_id":"ORD_000002","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_000002:2","order_id":"ORD_000002","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_000003:1","order_id":"ORD_000003","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_000003:2","order_id":"ORD_000003","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_000003:3","order_id":"ORD_000003","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_000004:1","order_id":"ORD_000004","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_000004:2","order_id":"ORD_000004","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_000004:3","order_id":"ORD_000004","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_000004:4","order_id":"ORD_000004","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_000005:1","order_id":"ORD_000005","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_000005:2","order_id":"ORD_000005","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_000005:3","order_id":"ORD_000005","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_000005:4","order_id":"ORD_000005","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_000005:5","order_id":"ORD_000005","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_000006:1","order_id":"ORD_000006","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_000007:1","order_id":"ORD_000007","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_000007:2","order_id":"ORD_000007","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_000008:1","order_id":"ORD_000008","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_000008:2","order_id":"ORD_000008","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_000008:3","order_id":"ORD_000008","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_000009:1","order_id":"ORD_000009","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_000009:2","order_id":"ORD_000009","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_000009:3","order_id":"ORD_000009","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_000009:4","order_id":"ORD_000009","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_000010:1","order_id":"ORD_000010","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_000010:2","order_id":"ORD_000010","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_000010:3","order_id":"ORD_000010","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_000010:4","order_id":"ORD_000010","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_000010:5","order_id":"ORD_000010","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_000011:1","order_id":"ORD_000011","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_000012:1","order_id":"ORD_000012","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_000012:2","order_id":"ORD_000012","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_000013:1","order_id":"ORD_000013","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_000013:2","order_id":"ORD_000013","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_000013:3","order_id":"ORD_000013","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_000014:1","order_id":"ORD_000014","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_000014:2","order_id":"ORD_000014","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_000014:3","order_id":"ORD_000014","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_000014:4","order_id":"ORD_000014","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_000015:1","order_id":"ORD_000015","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_000015:2","order_id":"ORD_000015","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_000015:3","order_id":"ORD_000015","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_000015:4","order_id":"ORD_000015","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_000015:5","order_id":"ORD_000015","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_000016:1","order_id":"ORD_000016","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_000017:1","order_id":"ORD_000017","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_000017:2","order_id":"ORD_000017","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_000018:1","order_id":"ORD_000018","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_000018:2","order_id":"ORD_000018","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_000018:3","order_id":"ORD_000018","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_000019:1","order_id":"ORD_000019","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_000019:2","order_id":"ORD_000019","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_000019:3","order_id":"ORD_000019","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_000019:4","order_id":"ORD_000019","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_000020:1","order_id":"ORD_000020","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_000020:2","order_id":"ORD_000020","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_000020:3","order_id":"ORD_000020","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_000020:4","order_id":"ORD_000020","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_000020:5","order_id":"ORD_000020","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_000021:1","order_id":"ORD_000021","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_000022:1","order_id":"ORD_000022","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_000022:2","order_id":"ORD_000022","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_000023:1","order_id":"ORD_000023","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_000023:2","order_id":"ORD_000023","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_000023:3","order_id":"ORD_000023","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_000024:1","order_id":"ORD_000024","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_000024:2","order_id":"ORD_000024","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_000024:3","order_id":"ORD_000024","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_000024:4","order_id":"ORD_000024","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_000025:1","order_id":"ORD_000025","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_000025:2","order_id":"ORD_000025","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_000025:3","order_id":"ORD_000025","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_000025:4","order_id":"ORD_000025","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_000025:5","order_id":"ORD_000025","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_000026:1","order_id":"ORD_000026","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_000027:1","order_id":"ORD_000027","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_000027:2","order_id":"ORD_000027","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_000028:1","order_id":"ORD_000028","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_000028:2","order_id":"ORD_000028","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_000028:3","order_id":"ORD_000028","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_000029:1","order_id":"ORD_000029","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_000029:2","order_id":"ORD_000029","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_000029:3","order_id":"ORD_000029","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_000029:4","order_id":"ORD_000029","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_000030:1","order_id":"ORD_000030","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_000030:2","order_id":"ORD_000030","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_000030:3","order_id":"ORD_000030","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_000030:4","order_id":"ORD_000030","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_000030:5","order_id":"ORD_000030","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_000031:1","order_id":"ORD_000031","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_000032:1","order_id":"ORD_000032","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_000032:2","order_id":"ORD_000032","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_000033:1","order_id":"ORD_000033","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_000033:2","order_id":"ORD_000033","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_000033:3","order_id":"ORD_000033","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_000034:1","order_id":"ORD_000034","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_000034:2","order_id":"ORD_000034","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_000034:3","order_id":"ORD_000034","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_000034:4","order_id":"ORD_000034","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_000035:1","order_id":"ORD_000035","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_000035:2","order_id":"ORD_000035","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_000035:3","order_id":"ORD_000035","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_000035:4","order_id":"ORD_000035","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_000035:5","order_id":"ORD_000035","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_000036:1","order_id":"ORD_000036","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_000037:1","order_id":"ORD_000037","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_000037:2","order_id":"ORD_000037","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_000038:1","order_id":"ORD_000038","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_000038:2","order_id":"ORD_000038","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_000038:3","order_id":"ORD_000038","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_000039:1","order_id":"ORD_000039","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_000039:2","order_id":"ORD_000039","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_000039:3","order_id":"ORD_000039","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_000039:4","order_id":"ORD_000039","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_000040:1","order_id":"ORD_000040","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_000040:2","order_id":"ORD_000040","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_000040:3","order_id":"ORD_000040","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_000040:4","order_id":"ORD_000040","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_000040:5","order_id":"ORD_000040","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_000041:1","order_id":"ORD_000041","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_000042:1","order_id":"ORD_000042","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_000042:2","order_id":"ORD_000042","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_000043:1","order_id":"ORD_000043","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_000043:2","order_id":"ORD_000043","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_000043:3","order_id":"ORD_000043","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_000044:1","order_id":"ORD_000044","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_000044:2","order_id":"ORD_000044","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_000044:3","order_id":"ORD_000044","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_000044:4","order_id":"ORD_000044","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_000045:1","order_id":"ORD_000045","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_000045:2","order_id":"ORD_000045","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_000045:3","order_id":"ORD_000045","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_000045:4","order_id":"ORD_000045","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_000045:5","order_id":"ORD_000045","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_000046:1","order_id":"ORD_000046","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_000047:1","order_id":"ORD_000047","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_000047:2","order_id":"ORD_000047","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_000048:1","order_id":"ORD_000048","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_000048:2","order_id":"ORD_000048","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_000048:3","order_id":"ORD_000048","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_000049:1","order_id":"ORD_000049","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_000049:2","order_id":"ORD_000049","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_000049:3","order_id":"ORD_000049","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_000049:4","order_id":"ORD_000049","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_000050:1","order_id":"ORD_000050","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_000050:2","order_id":"ORD_000050","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_000050:3","order_id":"ORD_000050","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_000050:4","order_id":"ORD_000050","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_000050:5","order_id":"ORD_000050","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_000051:1","order_id":"ORD_000051","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_000052:1","order_id":"ORD_000052","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_000052:2","order_id":"ORD_000052","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_000053:1","order_id":"ORD_000053","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_000053:2","order_id":"ORD_000053","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_000053:3","order_id":"ORD_000053","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_000054:1","order_id":"ORD_000054","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_000054:2","order_id":"ORD_000054","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_000054:3","order_id":"ORD_000054","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_000054:4","order_id":"ORD_000054","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_000055:1","order_id":"ORD_000055","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_000055:2","order_id":"ORD_000055","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_000055:3","order_id":"ORD_000055","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_000055:4","order_id":"ORD_000055","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_000055:5","order_id":"ORD_000055","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_000056:1","order_id":"ORD_000056","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_000057:1","order_id":"ORD_000057","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_000057:2","order_id":"ORD_000057","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_000058:1","order_id":"ORD_000058","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_000058:2","order_id":"ORD_000058","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_000058:3","order_id":"ORD_000058","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_000059:1","order_id":"ORD_000059","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_000059:2","order_id":"ORD_000059","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_000059:3","order_id":"ORD_000059","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_000059:4","order_id":"ORD_000059","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_000060:1","order_id":"ORD_000060","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_000060:2","order_id":"ORD_000060","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_000060:3","order_id":"ORD_000060","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_000060:4","order_id":"ORD_000060","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_000060:5","order_id":"ORD_000060","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_000061:1","order_id":"ORD_000061","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_000062:1","order_id":"ORD_000062","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_000062:2","order_id":"ORD_000062","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_000063:1","order_id":"ORD_000063","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_000063:2","order_id":"ORD_000063","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_000063:3","order_id":"ORD_000063","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_000064:1","order_id":"ORD_000064","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_000064:2","order_id":"ORD_000064","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_000064:3","order_id":"ORD_000064","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_000064:4","order_id":"ORD_000064","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_000065:1","order_id":"ORD_000065","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_000065:2","order_id":"ORD_000065","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_000065:3","order_id":"ORD_000065","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_000065:4","order_id":"ORD_000065","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_000065:5","order_id":"ORD_000065","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_000066:1","order_id":"ORD_000066","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_000067:1","order_id":"ORD_000067","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_000067:2","order_id":"ORD_000067","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_000068:1","order_id":"ORD_000068","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_000068:2","order_id":"ORD_000068","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_000068:3","order_id":"ORD_000068","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_000069:1","order_id":"ORD_000069","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_000069:2","order_id":"ORD_000069","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_000069:3","order_id":"ORD_000069","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_000069:4","order_id":"ORD_000069","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_000070:1","order_id":"ORD_000070","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_000070:2","order_id":"ORD_000070","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_000070:3","order_id":"ORD_000070","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_000070:4","order_id":"ORD_000070","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_000070:5","order_id":"ORD_000070","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_000071:1","order_id":"ORD_000071","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_000072:1","order_id":"ORD_000072","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_000072:2","order_id":"ORD_000072","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_000073:1","order_id":"ORD_000073","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_000073:2","order_id":"ORD_000073","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_000073:3","order_id":"ORD_000073","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_000074:1","order_id":"ORD_000074","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_000074:2","order_id":"ORD_000074","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_000074:3","order_id":"ORD_000074","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_000074:4","order_id":"ORD_000074","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_000075:1","order_id":"ORD_000075","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_000075:2","order_id":"ORD_000075","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_000075:3","order_id":"ORD_000075","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_000075:4","order_id":"ORD_000075","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_000075:5","order_id":"ORD_000075","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_000076:1","order_id":"ORD_000076","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_000077:1","order_id":"ORD_000077","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_000077:2","order_id":"ORD_000077","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_000078:1","order_id":"ORD_000078","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_000078:2","order_id":"ORD_000078","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_000078:3","order_id":"ORD_000078","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_000079:1","order_id":"ORD_000079","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_000079:2","order_id":"ORD_000079","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_000079:3","order_id":"ORD_000079","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_000079:4","order_id":"ORD_000079","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_000080:1","order_id":"ORD_000080","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_000080:2","order_id":"ORD_000080","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_000080:3","order_id":"ORD_000080","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_000080:4","order_id":"ORD_000080","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_000080:5","order_id":"ORD_000080","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_000081:1","order_id":"ORD_000081","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_000082:1","order_id":"ORD_000082","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_000082:2","order_id":"ORD_000082","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_000083:1","order_id":"ORD_000083","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_000083:2","order_id":"ORD_000083","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_000083:3","order_id":"ORD_000083","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_000084:1","order_id":"ORD_000084","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_000084:2","order_id":"ORD_000084","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_000084:3","order_id":"ORD_000084","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_000084:4","order_id":"ORD_000084","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_000085:1","order_id":"ORD_000085","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_000085:2","order_id":"ORD_000085","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_000085:3","order_id":"ORD_000085","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_000085:4","order_id":"ORD_000085","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_000085:5","order_id":"ORD_000085","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_000086:1","order_id":"ORD_000086","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_000087:1","order_id":"ORD_000087","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_000087:2","order_id":"ORD_000087","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_000088:1","order_id":"ORD_000088","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_000088:2","order_id":"ORD_000088","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_000088:3","order_id":"ORD_000088","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_000089:1","order_id":"ORD_000089","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_000089:2","order_id":"ORD_000089","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_000089:3","order_id":"ORD_000089","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_000089:4","order_id":"ORD_000089","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_000090:1","order_id":"ORD_000090","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_000090:2","order_id":"ORD_000090","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_000090:3","order_id":"ORD_000090","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_000090:4","order_id":"ORD_000090","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_000090:5","order_id":"ORD_000090","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_000091:1","order_id":"ORD_000091","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_000092:1","order_id":"ORD_000092","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_000092:2","order_id":"ORD_000092","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_000093:1","order_id":"ORD_000093","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_000093:2","order_id":"ORD_000093","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_000093:3","order_id":"ORD_000093","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_000094:1","order_id":"ORD_000094","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_000094:2","order_id":"ORD_000094","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_000094:3","order_id":"ORD_000094","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_000094:4","order_id":"ORD_000094","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_000095:1","order_id":"ORD_000095","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_000095:2","order_id":"ORD_000095","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_000095:3","order_id":"ORD_000095","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_000095:4","order_id":"ORD_000095","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_000095:5","order_id":"ORD_000095","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_000096:1","order_id":"ORD_000096","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_000097:1","order_id":"ORD_000097","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_000097:2","order_id":"ORD_000097","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_000098:1","order_id":"ORD_000098","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_000098:2","order_id":"ORD_000098","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_000098:3","order_id":"ORD_000098","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_000099:1","order_id":"ORD_000099","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_000099:2","order_id":"ORD_000099","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_000099:3","order_id":"ORD_000099","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_000099:4","order_id":"ORD_000099","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_000100:1","order_id":"ORD_000100","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_000100:2","order_id":"ORD_000100","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_000100:3","order_id":"ORD_000100","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_000100:4","order_id":"ORD_000100","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_000100:5","order_id":"ORD_000100","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_000101:1","order_id":"ORD_000101","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_000102:1","order_id":"ORD_000102","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_000102:2","order_id":"ORD_000102","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_000103:1","order_id":"ORD_000103","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_000103:2","order_id":"ORD_000103","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_000103:3","order_id":"ORD_000103","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_000104:1","order_id":"ORD_000104","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_000104:2","order_id":"ORD_000104","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_000104:3","order_id":"ORD_000104","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_000104:4","order_id":"ORD_000104","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_000105:1","order_id":"ORD_000105","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_000105:2","order_id":"ORD_000105","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_000105:3","order_id":"ORD_000105","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_000105:4","order_id":"ORD_000105","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_000105:5","order_id":"ORD_000105","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_000106:1","order_id":"ORD_000106","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_000107:1","order_id":"ORD_000107","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_000107:2","order_id":"ORD_000107","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_000108:1","order_id":"ORD_000108","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_000108:2","order_id":"ORD_000108","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_000108:3","order_id":"ORD_000108","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_000109:1","order_id":"ORD_000109","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_000109:2","order_id":"ORD_000109","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_000109:3","order_id":"ORD_000109","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_000109:4","order_id":"ORD_000109","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_000110:1","order_id":"ORD_000110","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_000110:2","order_id":"ORD_000110","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_000110:3","order_id":"ORD_000110","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_000110:4","order_id":"ORD_000110","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_000110:5","order_id":"ORD_000110","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_000111:1","order_id":"ORD_000111","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_000112:1","order_id":"ORD_000112","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_000112:2","order_id":"ORD_000112","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_000113:1","order_id":"ORD_000113","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_000113:2","order_id":"ORD_000113","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_000113:3","order_id":"ORD_000113","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_000114:1","order_id":"ORD_000114","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_000114:2","order_id":"ORD_000114","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_000114:3","order_id":"ORD_000114","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_000114:4","order_id":"ORD_000114","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_000115:1","order_id":"ORD_000115","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_000115:2","order_id":"ORD_000115","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_000115:3","order_id":"ORD_000115","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_000115:4","order_id":"ORD_000115","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_000115:5","order_id":"ORD_000115","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_000116:1","order_id":"ORD_000116","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_000117:1","order_id":"ORD_000117","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_000117:2","order_id":"ORD_000117","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_000118:1","order_id":"ORD_000118","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_000118:2","order_id":"ORD_000118","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_000118:3","order_id":"ORD_000118","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_000119:1","order_id":"ORD_000119","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_000119:2","order_id":"ORD_000119","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_000119:3","order_id":"ORD_000119","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_000119:4","order_id":"ORD_000119","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_000120:1","order_id":"ORD_000120","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_000120:2","order_id":"ORD_000120","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_000120:3","order_id":"ORD_000120","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_000120:4","order_id":"ORD_000120","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_000120:5","order_id":"ORD_000120","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_000121:1","order_id":"ORD_000121","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_000122:1","order_id":"ORD_000122","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_000122:2","order_id":"ORD_000122","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_000123:1","order_id":"ORD_000123","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_000123:2","order_id":"ORD_000123","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_000123:3","order_id":"ORD_000123","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_000124:1","order_id":"ORD_000124","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_000124:2","order_id":"ORD_000124","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_000124:3","order_id":"ORD_000124","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_000124:4","order_id":"ORD_000124","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_000125:1","order_id":"ORD_000125","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_000125:2","order_id":"ORD_000125","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_000125:3","order_id":"ORD_000125","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_000125:4","order_id":"ORD_000125","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_000125:5","order_id":"ORD_000125","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_000126:1","order_id":"ORD_000126","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_000127:1","order_id":"ORD_000127","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_000127:2","order_id":"ORD_000127","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_000128:1","order_id":"ORD_000128","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_000128:2","order_id":"ORD_000128","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_000128:3","order_id":"ORD_000128","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_000129:1","order_id":"ORD_000129","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_000129:2","order_id":"ORD_000129","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_000129:3","order_id":"ORD_000129","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_000129:4","order_id":"ORD_000129","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_000130:1","order_id":"ORD_000130","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_000130:2","order_id":"ORD_000130","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_000130:3","order_id":"ORD_000130","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_000130:4","order_id":"ORD_000130","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_000130:5","order_id":"ORD_000130","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_000131:1","order_id":"ORD_000131","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_000132:1","order_id":"ORD_000132","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_000132:2","order_id":"ORD_000132","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_000133:1","order_id":"ORD_000133","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_000133:2","order_id":"ORD_000133","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_000133:3","order_id":"ORD_000133","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_000134:1","order_id":"ORD_000134","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_000134:2","order_id":"ORD_000134","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_000134:3","order_id":"ORD_000134","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_000134:4","order_id":"ORD_000134","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_000135:1","order_id":"ORD_000135","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_000135:2","order_id":"ORD_000135","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_000135:3","order_id":"ORD_000135","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_000135:4","order_id":"ORD_000135","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_000135:5","order_id":"ORD_000135","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_000136:1","order_id":"ORD_000136","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_000137:1","order_id":"ORD_000137","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_000137:2","order_id":"ORD_000137","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_000138:1","order_id":"ORD_000138","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_000138:2","order_id":"ORD_000138","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_000138:3","order_id":"ORD_000138","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_000139:1","order_id":"ORD_000139","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_000139:2","order_id":"ORD_000139","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_000139:3","order_id":"ORD_000139","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_000139:4","order_id":"ORD_000139","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_000140:1","order_id":"ORD_000140","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_000140:2","order_id":"ORD_000140","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_000140:3","order_id":"ORD_000140","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_000140:4","order_id":"ORD_000140","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_000140:5","order_id":"ORD_000140","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_000141:1","order_id":"ORD_000141","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_000142:1","order_id":"ORD_000142","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_000142:2","order_id":"ORD_000142","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_000143:1","order_id":"ORD_000143","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_000143:2","order_id":"ORD_000143","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_000143:3","order_id":"ORD_000143","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_000144:1","order_id":"ORD_000144","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_000144:2","order_id":"ORD_000144","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_000144:3","order_id":"ORD_000144","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_000144:4","order_id":"ORD_000144","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_000145:1","order_id":"ORD_000145","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_000145:2","order_id":"ORD_000145","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_000145:3","order_id":"ORD_000145","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_000145:4","order_id":"ORD_000145","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_000145:5","order_id":"ORD_000145","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_000146:1","order_id":"ORD_000146","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_000147:1","order_id":"ORD_000147","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_000147:2","order_id":"ORD_000147","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_000148:1","order_id":"ORD_000148","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_000148:2","order_id":"ORD_000148","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_000148:3","order_id":"ORD_000148","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_000149:1","order_id":"ORD_000149","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_000149:2","order_id":"ORD_000149","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_000149:3","order_id":"ORD_000149","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_000149:4","order_id":"ORD_000149","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_000150:1","order_id":"ORD_000150","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_000150:2","order_id":"ORD_000150","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_000150:3","order_id":"ORD_000150","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_000150:4","order_id":"ORD_000150","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_000150:5","order_id":"ORD_000150","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_000151:1","order_id":"ORD_000151","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_000152:1","order_id":"ORD_000152","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_000152:2","order_id":"ORD_000152","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_000153:1","order_id":"ORD_000153","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_000153:2","order_id":"ORD_000153","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_000153:3","order_id":"ORD_000153","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_000154:1","order_id":"ORD_000154","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_000154:2","order_id":"ORD_000154","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_000154:3","order_id":"ORD_000154","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_000154:4","order_id":"ORD_000154","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_000155:1","order_id":"ORD_000155","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_000155:2","order_id":"ORD_000155","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_000155:3","order_id":"ORD_000155","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_000155:4","order_id":"ORD_000155","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_000155:5","order_id":"ORD_000155","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_000156:1","order_id":"ORD_000156","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_000157:1","order_id":"ORD_000157","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_000157:2","order_id":"ORD_000157","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_000158:1","order_id":"ORD_000158","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_000158:2","order_id":"ORD_000158","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_000158:3","order_id":"ORD_000158","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_000159:1","order_id":"ORD_000159","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_000159:2","order_id":"ORD_000159","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_000159:3","order_id":"ORD_000159","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_000159:4","order_id":"ORD_000159","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_000160:1","order_id":"ORD_000160","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_000160:2","order_id":"ORD_000160","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_000160:3","order_id":"ORD_000160","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_000160:4","order_id":"ORD_000160","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_000160:5","order_id":"ORD_000160","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_000161:1","order_id":"ORD_000161","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_000162:1","order_id":"ORD_000162","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_000162:2","order_id":"ORD_000162","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_000163:1","order_id":"ORD_000163","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_000163:2","order_id":"ORD_000163","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_000163:3","order_id":"ORD_000163","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_000164:1","order_id":"ORD_000164","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_000164:2","order_id":"ORD_000164","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_000164:3","order_id":"ORD_000164","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_000164:4","order_id":"ORD_000164","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_000165:1","order_id":"ORD_000165","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_000165:2","order_id":"ORD_000165","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_000165:3","order_id":"ORD_000165","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_000165:4","order_id":"ORD_000165","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_000165:5","order_id":"ORD_000165","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_000166:1","order_id":"ORD_000166","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_000167:1","order_id":"ORD_000167","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_000167:2","order_id":"ORD_000167","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_000168:1","order_id":"ORD_000168","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_000168:2","order_id":"ORD_000168","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_000168:3","order_id":"ORD_000168","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_000169:1","order_id":"ORD_000169","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_000169:2","order_id":"ORD_000169","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_000169:3","order_id":"ORD_000169","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_000169:4","order_id":"ORD_000169","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_000170:1","order_id":"ORD_000170","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_000170:2","order_id":"ORD_000170","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_000170:3","order_id":"ORD_000170","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_000170:4","order_id":"ORD_000170","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_000170:5","order_id":"ORD_000170","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_000171:1","order_id":"ORD_000171","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_000172:1","order_id":"ORD_000172","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_000172:2","order_id":"ORD_000172","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_000173:1","order_id":"ORD_000173","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_000173:2","order_id":"ORD_000173","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_000173:3","order_id":"ORD_000173","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_000174:1","order_id":"ORD_000174","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_000174:2","order_id":"ORD_000174","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_000174:3","order_id":"ORD_000174","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_000174:4","order_id":"ORD_000174","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_000175:1","order_id":"ORD_000175","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_000175:2","order_id":"ORD_000175","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_000175:3","order_id":"ORD_000175","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_000175:4","order_id":"ORD_000175","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_000175:5","order_id":"ORD_000175","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_000176:1","order_id":"ORD_000176","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_000177:1","order_id":"ORD_000177","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_000177:2","order_id":"ORD_000177","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_000178:1","order_id":"ORD_000178","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_000178:2","order_id":"ORD_000178","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_000178:3","order_id":"ORD_000178","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_000179:1","order_id":"ORD_000179","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_000179:2","order_id":"ORD_000179","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_000179:3","order_id":"ORD_000179","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_000179:4","order_id":"ORD_000179","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_000180:1","order_id":"ORD_000180","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_000180:2","order_id":"ORD_000180","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_000180:3","order_id":"ORD_000180","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_000180:4","order_id":"ORD_000180","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_000180:5","order_id":"ORD_000180","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_000181:1","order_id":"ORD_000181","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_000182:1","order_id":"ORD_000182","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_000182:2","order_id":"ORD_000182","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_000183:1","order_id":"ORD_000183","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_000183:2","order_id":"ORD_000183","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_000183:3","order_id":"ORD_000183","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_000184:1","order_id":"ORD_000184","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_000184:2","order_id":"ORD_000184","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_000184:3","order_id":"ORD_000184","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_000184:4","order_id":"ORD_000184","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_000185:1","order_id":"ORD_000185","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_000185:2","order_id":"ORD_000185","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_000185:3","order_id":"ORD_000185","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_000185:4","order_id":"ORD_000185","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_000185:5","order_id":"ORD_000185","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_000186:1","order_id":"ORD_000186","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_000187:1","order_id":"ORD_000187","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_000187:2","order_id":"ORD_000187","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_000188:1","order_id":"ORD_000188","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_000188:2","order_id":"ORD_000188","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_000188:3","order_id":"ORD_000188","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_000189:1","order_id":"ORD_000189","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_000189:2","order_id":"ORD_000189","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_000189:3","order_id":"ORD_000189","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_000189:4","order_id":"ORD_000189","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_000190:1","order_id":"ORD_000190","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_000190:2","order_id":"ORD_000190","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_000190:3","order_id":"ORD_000190","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_000190:4","order_id":"ORD_000190","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_000190:5","order_id":"ORD_000190","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_000191:1","order_id":"ORD_000191","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_000192:1","order_id":"ORD_000192","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_000192:2","order_id":"ORD_000192","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_000193:1","order_id":"ORD_000193","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_000193:2","order_id":"ORD_000193","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_000193:3","order_id":"ORD_000193","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_000194:1","order_id":"ORD_000194","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_000194:2","order_id":"ORD_000194","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_000194:3","order_id":"ORD_000194","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_000194:4","order_id":"ORD_000194","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_000195:1","order_id":"ORD_000195","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_000195:2","order_id":"ORD_000195","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_000195:3","order_id":"ORD_000195","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_000195:4","order_id":"ORD_000195","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_000195:5","order_id":"ORD_000195","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_000196:1","order_id":"ORD_000196","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_000197:1","order_id":"ORD_000197","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_000197:2","order_id":"ORD_000197","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_000198:1","order_id":"ORD_000198","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_000198:2","order_id":"ORD_000198","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_000198:3","order_id":"ORD_000198","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_000199:1","order_id":"ORD_000199","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_000199:2","order_id":"ORD_000199","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_000199:3","order_id":"ORD_000199","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_000199:4","order_id":"ORD_000199","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_000200:1","order_id":"ORD_000200","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_000200:2","order_id":"ORD_000200","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_000200:3","order_id":"ORD_000200","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_000200:4","order_id":"ORD_000200","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_000200:5","order_id":"ORD_000200","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_000201:1","order_id":"ORD_000201","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_000202:1","order_id":"ORD_000202","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_000202:2","order_id":"ORD_000202","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_000203:1","order_id":"ORD_000203","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_000203:2","order_id":"ORD_000203","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_000203:3","order_id":"ORD_000203","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_000204:1","order_id":"ORD_000204","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_000204:2","order_id":"ORD_000204","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_000204:3","order_id":"ORD_000204","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_000204:4","order_id":"ORD_000204","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_000205:1","order_id":"ORD_000205","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_000205:2","order_id":"ORD_000205","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_000205:3","order_id":"ORD_000205","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_000205:4","order_id":"ORD_000205","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_000205:5","order_id":"ORD_000205","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_000206:1","order_id":"ORD_000206","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_000207:1","order_id":"ORD_000207","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_000207:2","order_id":"ORD_000207","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_000208:1","order_id":"ORD_000208","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_000208:2","order_id":"ORD_000208","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_000208:3","order_id":"ORD_000208","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_000209:1","order_id":"ORD_000209","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_000209:2","order_id":"ORD_000209","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_000209:3","order_id":"ORD_000209","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_000209:4","order_id":"ORD_000209","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_000210:1","order_id":"ORD_000210","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_000210:2","order_id":"ORD_000210","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_000210:3","order_id":"ORD_000210","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_000210:4","order_id":"ORD_000210","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_000210:5","order_id":"ORD_000210","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_000211:1","order_id":"ORD_000211","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_000212:1","order_id":"ORD_000212","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_000212:2","order_id":"ORD_000212","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_000213:1","order_id":"ORD_000213","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_000213:2","order_id":"ORD_000213","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_000213:3","order_id":"ORD_000213","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_000214:1","order_id":"ORD_000214","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_000214:2","order_id":"ORD_000214","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_000214:3","order_id":"ORD_000214","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_000214:4","order_id":"ORD_000214","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_000215:1","order_id":"ORD_000215","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_000215:2","order_id":"ORD_000215","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_000215:3","order_id":"ORD_000215","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_000215:4","order_id":"ORD_000215","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_000215:5","order_id":"ORD_000215","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_000216:1","order_id":"ORD_000216","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_000217:1","order_id":"ORD_000217","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_000217:2","order_id":"ORD_000217","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_000218:1","order_id":"ORD_000218","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_000218:2","order_id":"ORD_000218","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_000218:3","order_id":"ORD_000218","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_000219:1","order_id":"ORD_000219","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_000219:2","order_id":"ORD_000219","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_000219:3","order_id":"ORD_000219","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_000219:4","order_id":"ORD_000219","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_000220:1","order_id":"ORD_000220","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_000220:2","order_id":"ORD_000220","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_000220:3","order_id":"ORD_000220","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_000220:4","order_id":"ORD_000220","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_000220:5","order_id":"ORD_000220","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_000221:1","order_id":"ORD_000221","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_000222:1","order_id":"ORD_000222","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_000222:2","order_id":"ORD_000222","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_000223:1","order_id":"ORD_000223","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_000223:2","order_id":"ORD_000223","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_000223:3","order_id":"ORD_000223","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_000224:1","order_id":"ORD_000224","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_000224:2","order_id":"ORD_000224","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_000224:3","order_id":"ORD_000224","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_000224:4","order_id":"ORD_000224","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_000225:1","order_id":"ORD_000225","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_000225:2","order_id":"ORD_000225","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_000225:3","order_id":"ORD_000225","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_000225:4","order_id":"ORD_000225","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_000225:5","order_id":"ORD_000225","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_000226:1","order_id":"ORD_000226","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_000227:1","order_id":"ORD_000227","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_000227:2","order_id":"ORD_000227","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_000228:1","order_id":"ORD_000228","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_000228:2","order_id":"ORD_000228","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_000228:3","order_id":"ORD_000228","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_000229:1","order_id":"ORD_000229","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_000229:2","order_id":"ORD_000229","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_000229:3","order_id":"ORD_000229","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_000229:4","order_id":"ORD_000229","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_000230:1","order_id":"ORD_000230","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_000230:2","order_id":"ORD_000230","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_000230:3","order_id":"ORD_000230","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_000230:4","order_id":"ORD_000230","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_000230:5","order_id":"ORD_000230","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_000231:1","order_id":"ORD_000231","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_000232:1","order_id":"ORD_000232","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_000232:2","order_id":"ORD_000232","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_000233:1","order_id":"ORD_000233","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_000233:2","order_id":"ORD_000233","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_000233:3","order_id":"ORD_000233","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_000234:1","order_id":"ORD_000234","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_000234:2","order_id":"ORD_000234","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_000234:3","order_id":"ORD_000234","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_000234:4","order_id":"ORD_000234","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_000235:1","order_id":"ORD_000235","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_000235:2","order_id":"ORD_000235","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_000235:3","order_id":"ORD_000235","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_000235:4","order_id":"ORD_000235","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_000235:5","order_id":"ORD_000235","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_000236:1","order_id":"ORD_000236","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_000237:1","order_id":"ORD_000237","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_000237:2","order_id":"ORD_000237","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_000238:1","order_id":"ORD_000238","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_000238:2","order_id":"ORD_000238","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_000238:3","order_id":"ORD_000238","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_000239:1","order_id":"ORD_000239","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_000239:2","order_id":"ORD_000239","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_000239:3","order_id":"ORD_000239","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_000239:4","order_id":"ORD_000239","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_000240:1","order_id":"ORD_000240","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_000240:2","order_id":"ORD_000240","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_000240:3","order_id":"ORD_000240","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_000240:4","order_id":"ORD_000240","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_000240:5","order_id":"ORD_000240","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_000241:1","order_id":"ORD_000241","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_000242:1","order_id":"ORD_000242","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_000242:2","order_id":"ORD_000242","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_000243:1","order_id":"ORD_000243","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_000243:2","order_id":"ORD_000243","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_000243:3","order_id":"ORD_000243","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_000244:1","order_id":"ORD_000244","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_000244:2","order_id":"ORD_000244","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_000244:3","order_id":"ORD_000244","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_000244:4","order_id":"ORD_000244","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_000245:1","order_id":"ORD_000245","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_000245:2","order_id":"ORD_000245","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_000245:3","order_id":"ORD_000245","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_000245:4","order_id":"ORD_000245","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_000245:5","order_id":"ORD_000245","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_000246:1","order_id":"ORD_000246","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_000247:1","order_id":"ORD_000247","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_000247:2","order_id":"ORD_000247","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_000248:1","order_id":"ORD_000248","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_000248:2","order_id":"ORD_000248","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_000248:3","order_id":"ORD_000248","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_000249:1","order_id":"ORD_000249","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_000249:2","order_id":"ORD_000249","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_000249:3","order_id":"ORD_000249","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_000249:4","order_id":"ORD_000249","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_000250:1","order_id":"ORD_000250","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_000250:2","order_id":"ORD_000250","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_000250:3","order_id":"ORD_000250","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_000250:4","order_id":"ORD_000250","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_000250:5","order_id":"ORD_000250","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_000251:1","order_id":"ORD_000251","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_000252:1","order_id":"ORD_000252","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_000252:2","order_id":"ORD_000252","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_000253:1","order_id":"ORD_000253","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_000253:2","order_id":"ORD_000253","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_000253:3","order_id":"ORD_000253","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_000254:1","order_id":"ORD_000254","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_000254:2","order_id":"ORD_000254","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_000254:3","order_id":"ORD_000254","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_000254:4","order_id":"ORD_000254","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_000255:1","order_id":"ORD_000255","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_000255:2","order_id":"ORD_000255","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_000255:3","order_id":"ORD_000255","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_000255:4","order_id":"ORD_000255","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_000255:5","order_id":"ORD_000255","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_000256:1","order_id":"ORD_000256","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_000257:1","order_id":"ORD_000257","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_000257:2","order_id":"ORD_000257","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_000258:1","order_id":"ORD_000258","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_000258:2","order_id":"ORD_000258","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_000258:3","order_id":"ORD_000258","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_000259:1","order_id":"ORD_000259","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_000259:2","order_id":"ORD_000259","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_000259:3","order_id":"ORD_000259","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_000259:4","order_id":"ORD_000259","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_000260:1","order_id":"ORD_000260","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_000260:2","order_id":"ORD_000260","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_000260:3","order_id":"ORD_000260","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_000260:4","order_id":"ORD_000260","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_000260:5","order_id":"ORD_000260","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_000261:1","order_id":"ORD_000261","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_000262:1","order_id":"ORD_000262","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_000262:2","order_id":"ORD_000262","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_000263:1","order_id":"ORD_000263","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_000263:2","order_id":"ORD_000263","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_000263:3","order_id":"ORD_000263","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_000264:1","order_id":"ORD_000264","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_000264:2","order_id":"ORD_000264","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_000264:3","order_id":"ORD_000264","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_000264:4","order_id":"ORD_000264","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_000265:1","order_id":"ORD_000265","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_000265:2","order_id":"ORD_000265","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_000265:3","order_id":"ORD_000265","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_000265:4","order_id":"ORD_000265","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_000265:5","order_id":"ORD_000265","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_000266:1","order_id":"ORD_000266","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_000267:1","order_id":"ORD_000267","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_000267:2","order_id":"ORD_000267","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_000268:1","order_id":"ORD_000268","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_000268:2","order_id":"ORD_000268","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_000268:3","order_id":"ORD_000268","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_000269:1","order_id":"ORD_000269","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_000269:2","order_id":"ORD_000269","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_000269:3","order_id":"ORD_000269","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_000269:4","order_id":"ORD_000269","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_000270:1","order_id":"ORD_000270","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_000270:2","order_id":"ORD_000270","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_000270:3","order_id":"ORD_000270","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_000270:4","order_id":"ORD_000270","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_000270:5","order_id":"ORD_000270","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_000271:1","order_id":"ORD_000271","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_000272:1","order_id":"ORD_000272","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_000272:2","order_id":"ORD_000272","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_000273:1","order_id":"ORD_000273","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_000273:2","order_id":"ORD_000273","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_000273:3","order_id":"ORD_000273","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_000274:1","order_id":"ORD_000274","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_000274:2","order_id":"ORD_000274","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_000274:3","order_id":"ORD_000274","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_000274:4","order_id":"ORD_000274","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_000275:1","order_id":"ORD_000275","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_000275:2","order_id":"ORD_000275","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_000275:3","order_id":"ORD_000275","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_000275:4","order_id":"ORD_000275","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_000275:5","order_id":"ORD_000275","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_000276:1","order_id":"ORD_000276","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_000277:1","order_id":"ORD_000277","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_000277:2","order_id":"ORD_000277","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_000278:1","order_id":"ORD_000278","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_000278:2","order_id":"ORD_000278","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_000278:3","order_id":"ORD_000278","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_000279:1","order_id":"ORD_000279","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_000279:2","order_id":"ORD_000279","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_000279:3","order_id":"ORD_000279","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_000279:4","order_id":"ORD_000279","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_000280:1","order_id":"ORD_000280","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_000280:2","order_id":"ORD_000280","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_000280:3","order_id":"ORD_000280","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_000280:4","order_id":"ORD_000280","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_000280:5","order_id":"ORD_000280","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_000281:1","order_id":"ORD_000281","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_000282:1","order_id":"ORD_000282","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_000282:2","order_id":"ORD_000282","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_000283:1","order_id":"ORD_000283","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_000283:2","order_id":"ORD_000283","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_000283:3","order_id":"ORD_000283","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_000284:1","order_id":"ORD_000284","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_000284:2","order_id":"ORD_000284","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_000284:3","order_id":"ORD_000284","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_000284:4","order_id":"ORD_000284","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_000285:1","order_id":"ORD_000285","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_000285:2","order_id":"ORD_000285","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_000285:3","order_id":"ORD_000285","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_000285:4","order_id":"ORD_000285","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_000285:5","order_id":"ORD_000285","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_000286:1","order_id":"ORD_000286","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_000287:1","order_id":"ORD_000287","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_000287:2","order_id":"ORD_000287","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_000288:1","order_id":"ORD_000288","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_000288:2","order_id":"ORD_000288","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_000288:3","order_id":"ORD_000288","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_000289:1","order_id":"ORD_000289","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_000289:2","order_id":"ORD_000289","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_000289:3","order_id":"ORD_000289","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_000289:4","order_id":"ORD_000289","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_000290:1","order_id":"ORD_000290","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_000290:2","order_id":"ORD_000290","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_000290:3","order_id":"ORD_000290","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_000290:4","order_id":"ORD_000290","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_000290:5","order_id":"ORD_000290","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_000291:1","order_id":"ORD_000291","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_000292:1","order_id":"ORD_000292","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_000292:2","order_id":"ORD_000292","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_000293:1","order_id":"ORD_000293","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_000293:2","order_id":"ORD_000293","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_000293:3","order_id":"ORD_000293","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_000294:1","order_id":"ORD_000294","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_000294:2","order_id":"ORD_000294","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_000294:3","order_id":"ORD_000294","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_000294:4","order_id":"ORD_000294","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_000295:1","order_id":"ORD_000295","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_000295:2","order_id":"ORD_000295","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_000295:3","order_id":"ORD_000295","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_000295:4","order_id":"ORD_000295","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_000295:5","order_id":"ORD_000295","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_000296:1","order_id":"ORD_000296","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_000297:1","order_id":"ORD_000297","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_000297:2","order_id":"ORD_000297","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_000298:1","order_id":"ORD_000298","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_000298:2","order_id":"ORD_000298","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_000298:3","order_id":"ORD_000298","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_000299:1","order_id":"ORD_000299","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_000299:2","order_id":"ORD_000299","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_000299:3","order_id":"ORD_000299","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_000299:4","order_id":"ORD_000299","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_000300:1","order_id":"ORD_000300","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_000300:2","order_id":"ORD_000300","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_000300:3","order_id":"ORD_000300","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_000300:4","order_id":"ORD_000300","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_000300:5","order_id":"ORD_000300","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_000301:1","order_id":"ORD_000301","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_000302:1","order_id":"ORD_000302","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_000302:2","order_id":"ORD_000302","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_000303:1","order_id":"ORD_000303","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_000303:2","order_id":"ORD_000303","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_000303:3","order_id":"ORD_000303","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_000304:1","order_id":"ORD_000304","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_000304:2","order_id":"ORD_000304","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_000304:3","order_id":"ORD_000304","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_000304:4","order_id":"ORD_000304","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_000305:1","order_id":"ORD_000305","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_000305:2","order_id":"ORD_000305","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_000305:3","order_id":"ORD_000305","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_000305:4","order_id":"ORD_000305","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_000305:5","order_id":"ORD_000305","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_000306:1","order_id":"ORD_000306","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_000307:1","order_id":"ORD_000307","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_000307:2","order_id":"ORD_000307","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_000308:1","order_id":"ORD_000308","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_000308:2","order_id":"ORD_000308","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_000308:3","order_id":"ORD_000308","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_000309:1","order_id":"ORD_000309","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_000309:2","order_id":"ORD_000309","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_000309:3","order_id":"ORD_000309","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_000309:4","order_id":"ORD_000309","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_000310:1","order_id":"ORD_000310","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_000310:2","order_id":"ORD_000310","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_000310:3","order_id":"ORD_000310","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_000310:4","order_id":"ORD_000310","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_000310:5","order_id":"ORD_000310","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_000311:1","order_id":"ORD_000311","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_000312:1","order_id":"ORD_000312","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_000312:2","order_id":"ORD_000312","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_000313:1","order_id":"ORD_000313","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_000313:2","order_id":"ORD_000313","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_000313:3","order_id":"ORD_000313","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_000314:1","order_id":"ORD_000314","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_000314:2","order_id":"ORD_000314","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_000314:3","order_id":"ORD_000314","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_000314:4","order_id":"ORD_000314","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_000315:1","order_id":"ORD_000315","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_000315:2","order_id":"ORD_000315","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_000315:3","order_id":"ORD_000315","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_000315:4","order_id":"ORD_000315","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_000315:5","order_id":"ORD_000315","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_000316:1","order_id":"ORD_000316","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_000317:1","order_id":"ORD_000317","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_000317:2","order_id":"ORD_000317","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_000318:1","order_id":"ORD_000318","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_000318:2","order_id":"ORD_000318","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_000318:3","order_id":"ORD_000318","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_000319:1","order_id":"ORD_000319","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_000319:2","order_id":"ORD_000319","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_000319:3","order_id":"ORD_000319","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_000319:4","order_id":"ORD_000319","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_000320:1","order_id":"ORD_000320","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_000320:2","order_id":"ORD_000320","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_000320:3","order_id":"ORD_000320","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_000320:4","order_id":"ORD_000320","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_000320:5","order_id":"ORD_000320","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_000321:1","order_id":"ORD_000321","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_000322:1","order_id":"ORD_000322","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_000322:2","order_id":"ORD_000322","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_000323:1","order_id":"ORD_000323","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_000323:2","order_id":"ORD_000323","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_000323:3","order_id":"ORD_000323","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_000324:1","order_id":"ORD_000324","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_000324:2","order_id":"ORD_000324","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_000324:3","order_id":"ORD_000324","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_000324:4","order_id":"ORD_000324","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_000325:1","order_id":"ORD_000325","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_000325:2","order_id":"ORD_000325","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_000325:3","order_id":"ORD_000325","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_000325:4","order_id":"ORD_000325","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_000325:5","order_id":"ORD_000325","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_000326:1","order_id":"ORD_000326","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_000327:1","order_id":"ORD_000327","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_000327:2","order_id":"ORD_000327","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_000328:1","order_id":"ORD_000328","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_000328:2","order_id":"ORD_000328","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_000328:3","order_id":"ORD_000328","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_000329:1","order_id":"ORD_000329","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_000329:2","order_id":"ORD_000329","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_000329:3","order_id":"ORD_000329","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_000329:4","order_id":"ORD_000329","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_000330:1","order_id":"ORD_000330","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_000330:2","order_id":"ORD_000330","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_000330:3","order_id":"ORD_000330","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_000330:4","order_id":"ORD_000330","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_000330:5","order_id":"ORD_000330","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_000331:1","order_id":"ORD_000331","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_000332:1","order_id":"ORD_000332","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_000332:2","order_id":"ORD_000332","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_000333:1","order_id":"ORD_000333","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_000333:2","order_id":"ORD_000333","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_000333:3","order_id":"ORD_000333","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_000334:1","order_id":"ORD_000334","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_000334:2","order_id":"ORD_000334","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_000334:3","order_id":"ORD_000334","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_000334:4","order_id":"ORD_000334","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_000335:1","order_id":"ORD_000335","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_000335:2","order_id":"ORD_000335","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_000335:3","order_id":"ORD_000335","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_000335:4","order_id":"ORD_000335","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_000335:5","order_id":"ORD_000335","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_000336:1","order_id":"ORD_000336","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_000337:1","order_id":"ORD_000337","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_000337:2","order_id":"ORD_000337","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_000338:1","order_id":"ORD_000338","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_000338:2","order_id":"ORD_000338","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_000338:3","order_id":"ORD_000338","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_000339:1","order_id":"ORD_000339","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_000339:2","order_id":"ORD_000339","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_000339:3","order_id":"ORD_000339","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_000339:4","order_id":"ORD_000339","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_000340:1","order_id":"ORD_000340","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_000340:2","order_id":"ORD_000340","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_000340:3","order_id":"ORD_000340","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_000340:4","order_id":"ORD_000340","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_000340:5","order_id":"ORD_000340","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_000341:1","order_id":"ORD_000341","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_000342:1","order_id":"ORD_000342","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_000342:2","order_id":"ORD_000342","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_000343:1","order_id":"ORD_000343","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_000343:2","order_id":"ORD_000343","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_000343:3","order_id":"ORD_000343","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_000344:1","order_id":"ORD_000344","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_000344:2","order_id":"ORD_000344","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_000344:3","order_id":"ORD_000344","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_000344:4","order_id":"ORD_000344","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_000345:1","order_id":"ORD_000345","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_000345:2","order_id":"ORD_000345","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_000345:3","order_id":"ORD_000345","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_000345:4","order_id":"ORD_000345","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_000345:5","order_id":"ORD_000345","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_000346:1","order_id":"ORD_000346","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_000347:1","order_id":"ORD_000347","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_000347:2","order_id":"ORD_000347","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_000348:1","order_id":"ORD_000348","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_000348:2","order_id":"ORD_000348","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_000348:3","order_id":"ORD_000348","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_000349:1","order_id":"ORD_000349","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_000349:2","order_id":"ORD_000349","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_000349:3","order_id":"ORD_000349","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_000349:4","order_id":"ORD_000349","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_000350:1","order_id":"ORD_000350","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_000350:2","order_id":"ORD_000350","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_000350:3","order_id":"ORD_000350","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_000350:4","order_id":"ORD_000350","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_000350:5","order_id":"ORD_000350","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_000351:1","order_id":"ORD_000351","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_000352:1","order_id":"ORD_000352","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_000352:2","order_id":"ORD_000352","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_000353:1","order_id":"ORD_000353","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_000353:2","order_id":"ORD_000353","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_000353:3","order_id":"ORD_000353","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_000354:1","order_id":"ORD_000354","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_000354:2","order_id":"ORD_000354","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_000354:3","order_id":"ORD_000354","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_000354:4","order_id":"ORD_000354","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_000355:1","order_id":"ORD_000355","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_000355:2","order_id":"ORD_000355","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_000355:3","order_id":"ORD_000355","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_000355:4","order_id":"ORD_000355","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_000355:5","order_id":"ORD_000355","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_000356:1","order_id":"ORD_000356","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_000357:1","order_id":"ORD_000357","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_000357:2","order_id":"ORD_000357","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_000358:1","order_id":"ORD_000358","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_000358:2","order_id":"ORD_000358","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_000358:3","order_id":"ORD_000358","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_000359:1","order_id":"ORD_000359","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_000359:2","order_id":"ORD_000359","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_000359:3","order_id":"ORD_000359","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_000359:4","order_id":"ORD_000359","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_000360:1","order_id":"ORD_000360","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_000360:2","order_id":"ORD_000360","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_000360:3","order_id":"ORD_000360","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_000360:4","order_id":"ORD_000360","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_000360:5","order_id":"ORD_000360","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_000361:1","order_id":"ORD_000361","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_000362:1","order_id":"ORD_000362","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_000362:2","order_id":"ORD_000362","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_000363:1","order_id":"ORD_000363","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_000363:2","order_id":"ORD_000363","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_000363:3","order_id":"ORD_000363","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_000364:1","order_id":"ORD_000364","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_000364:2","order_id":"ORD_000364","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_000364:3","order_id":"ORD_000364","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_000364:4","order_id":"ORD_000364","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_000365:1","order_id":"ORD_000365","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_000365:2","order_id":"ORD_000365","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_000365:3","order_id":"ORD_000365","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_000365:4","order_id":"ORD_000365","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_000365:5","order_id":"ORD_000365","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_000366:1","order_id":"ORD_000366","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_000367:1","order_id":"ORD_000367","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_000367:2","order_id":"ORD_000367","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_000368:1","order_id":"ORD_000368","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_000368:2","order_id":"ORD_000368","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_000368:3","order_id":"ORD_000368","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_000369:1","order_id":"ORD_000369","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_000369:2","order_id":"ORD_000369","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_000369:3","order_id":"ORD_000369","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_000369:4","order_id":"ORD_000369","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_000370:1","order_id":"ORD_000370","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_000370:2","order_id":"ORD_000370","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_000370:3","order_id":"ORD_000370","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_000370:4","order_id":"ORD_000370","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_000370:5","order_id":"ORD_000370","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_000371:1","order_id":"ORD_000371","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_000372:1","order_id":"ORD_000372","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_000372:2","order_id":"ORD_000372","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_000373:1","order_id":"ORD_000373","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_000373:2","order_id":"ORD_000373","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_000373:3","order_id":"ORD_000373","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_000374:1","order_id":"ORD_000374","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_000374:2","order_id":"ORD_000374","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_000374:3","order_id":"ORD_000374","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_000374:4","order_id":"ORD_000374","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_000375:1","order_id":"ORD_000375","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_000375:2","order_id":"ORD_000375","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_000375:3","order_id":"ORD_000375","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_000375:4","order_id":"ORD_000375","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_000375:5","order_id":"ORD_000375","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_000376:1","order_id":"ORD_000376","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_000377:1","order_id":"ORD_000377","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_000377:2","order_id":"ORD_000377","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_000378:1","order_id":"ORD_000378","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_000378:2","order_id":"ORD_000378","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_000378:3","order_id":"ORD_000378","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_000379:1","order_id":"ORD_000379","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_000379:2","order_id":"ORD_000379","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_000379:3","order_id":"ORD_000379","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_000379:4","order_id":"ORD_000379","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_000380:1","order_id":"ORD_000380","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_000380:2","order_id":"ORD_000380","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_000380:3","order_id":"ORD_000380","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_000380:4","order_id":"ORD_000380","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_000380:5","order_id":"ORD_000380","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_000381:1","order_id":"ORD_000381","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_000382:1","order_id":"ORD_000382","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_000382:2","order_id":"ORD_000382","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_000383:1","order_id":"ORD_000383","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_000383:2","order_id":"ORD_000383","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_000383:3","order_id":"ORD_000383","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_000384:1","order_id":"ORD_000384","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_000384:2","order_id":"ORD_000384","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_000384:3","order_id":"ORD_000384","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_000384:4","order_id":"ORD_000384","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_000385:1","order_id":"ORD_000385","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_000385:2","order_id":"ORD_000385","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_000385:3","order_id":"ORD_000385","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_000385:4","order_id":"ORD_000385","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_000385:5","order_id":"ORD_000385","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_000386:1","order_id":"ORD_000386","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_000387:1","order_id":"ORD_000387","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_000387:2","order_id":"ORD_000387","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_000388:1","order_id":"ORD_000388","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_000388:2","order_id":"ORD_000388","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_000388:3","order_id":"ORD_000388","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_000389:1","order_id":"ORD_000389","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_000389:2","order_id":"ORD_000389","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_000389:3","order_id":"ORD_000389","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_000389:4","order_id":"ORD_000389","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_000390:1","order_id":"ORD_000390","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_000390:2","order_id":"ORD_000390","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_000390:3","order_id":"ORD_000390","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_000390:4","order_id":"ORD_000390","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_000390:5","order_id":"ORD_000390","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_000391:1","order_id":"ORD_000391","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_000392:1","order_id":"ORD_000392","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_000392:2","order_id":"ORD_000392","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_000393:1","order_id":"ORD_000393","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_000393:2","order_id":"ORD_000393","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_000393:3","order_id":"ORD_000393","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_000394:1","order_id":"ORD_000394","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_000394:2","order_id":"ORD_000394","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_000394:3","order_id":"ORD_000394","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_000394:4","order_id":"ORD_000394","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_000395:1","order_id":"ORD_000395","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_000395:2","order_id":"ORD_000395","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_000395:3","order_id":"ORD_000395","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_000395:4","order_id":"ORD_000395","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_000395:5","order_id":"ORD_000395","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_000396:1","order_id":"ORD_000396","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_000397:1","order_id":"ORD_000397","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_000397:2","order_id":"ORD_000397","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_000398:1","order_id":"ORD_000398","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_000398:2","order_id":"ORD_000398","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_000398:3","order_id":"ORD_000398","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_000399:1","order_id":"ORD_000399","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_000399:2","order_id":"ORD_000399","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_000399:3","order_id":"ORD_000399","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_000399:4","order_id":"ORD_000399","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_000400:1","order_id":"ORD_000400","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_000400:2","order_id":"ORD_000400","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_000400:3","order_id":"ORD_000400","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_000400:4","order_id":"ORD_000400","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_000400:5","order_id":"ORD_000400","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_000401:1","order_id":"ORD_000401","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_000402:1","order_id":"ORD_000402","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_000402:2","order_id":"ORD_000402","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_000403:1","order_id":"ORD_000403","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_000403:2","order_id":"ORD_000403","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_000403:3","order_id":"ORD_000403","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_000404:1","order_id":"ORD_000404","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_000404:2","order_id":"ORD_000404","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_000404:3","order_id":"ORD_000404","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_000404:4","order_id":"ORD_000404","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_000405:1","order_id":"ORD_000405","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_000405:2","order_id":"ORD_000405","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_000405:3","order_id":"ORD_000405","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_000405:4","order_id":"ORD_000405","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_000405:5","order_id":"ORD_000405","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_000406:1","order_id":"ORD_000406","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_000407:1","order_id":"ORD_000407","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_000407:2","order_id":"ORD_000407","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_000408:1","order_id":"ORD_000408","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_000408:2","order_id":"ORD_000408","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_000408:3","order_id":"ORD_000408","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_000409:1","order_id":"ORD_000409","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_000409:2","order_id":"ORD_000409","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_000409:3","order_id":"ORD_000409","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_000409:4","order_id":"ORD_000409","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_000410:1","order_id":"ORD_000410","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_000410:2","order_id":"ORD_000410","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_000410:3","order_id":"ORD_000410","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_000410:4","order_id":"ORD_000410","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_000410:5","order_id":"ORD_000410","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_000411:1","order_id":"ORD_000411","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_000412:1","order_id":"ORD_000412","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_000412:2","order_id":"ORD_000412","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_000413:1","order_id":"ORD_000413","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_000413:2","order_id":"ORD_000413","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_000413:3","order_id":"ORD_000413","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_000414:1","order_id":"ORD_000414","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_000414:2","order_id":"ORD_000414","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_000414:3","order_id":"ORD_000414","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_000414:4","order_id":"ORD_000414","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_000415:1","order_id":"ORD_000415","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_000415:2","order_id":"ORD_000415","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_000415:3","order_id":"ORD_000415","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_000415:4","order_id":"ORD_000415","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_000415:5","order_id":"ORD_000415","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_000416:1","order_id":"ORD_000416","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_000417:1","order_id":"ORD_000417","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_000417:2","order_id":"ORD_000417","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_000418:1","order_id":"ORD_000418","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_000418:2","order_id":"ORD_000418","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_000418:3","order_id":"ORD_000418","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_000419:1","order_id":"ORD_000419","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_000419:2","order_id":"ORD_000419","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_000419:3","order_id":"ORD_000419","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_000419:4","order_id":"ORD_000419","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_000420:1","order_id":"ORD_000420","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_000420:2","order_id":"ORD_000420","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_000420:3","order_id":"ORD_000420","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_000420:4","order_id":"ORD_000420","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_000420:5","order_id":"ORD_000420","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_000421:1","order_id":"ORD_000421","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_000422:1","order_id":"ORD_000422","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_000422:2","order_id":"ORD_000422","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_000423:1","order_id":"ORD_000423","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_000423:2","order_id":"ORD_000423","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_000423:3","order_id":"ORD_000423","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_000424:1","order_id":"ORD_000424","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_000424:2","order_id":"ORD_000424","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_000424:3","order_id":"ORD_000424","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_000424:4","order_id":"ORD_000424","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_000425:1","order_id":"ORD_000425","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_000425:2","order_id":"ORD_000425","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_000425:3","order_id":"ORD_000425","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_000425:4","order_id":"ORD_000425","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_000425:5","order_id":"ORD_000425","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_000426:1","order_id":"ORD_000426","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_000427:1","order_id":"ORD_000427","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_000427:2","order_id":"ORD_000427","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_000428:1","order_id":"ORD_000428","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_000428:2","order_id":"ORD_000428","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_000428:3","order_id":"ORD_000428","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_000429:1","order_id":"ORD_000429","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_000429:2","order_id":"ORD_000429","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_000429:3","order_id":"ORD_000429","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_000429:4","order_id":"ORD_000429","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_000430:1","order_id":"ORD_000430","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_000430:2","order_id":"ORD_000430","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_000430:3","order_id":"ORD_000430","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_000430:4","order_id":"ORD_000430","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_000430:5","order_id":"ORD_000430","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_000431:1","order_id":"ORD_000431","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_000432:1","order_id":"ORD_000432","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_000432:2","order_id":"ORD_000432","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_000433:1","order_id":"ORD_000433","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_000433:2","order_id":"ORD_000433","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_000433:3","order_id":"ORD_000433","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_000434:1","order_id":"ORD_000434","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_000434:2","order_id":"ORD_000434","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_000434:3","order_id":"ORD_000434","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_000434:4","order_id":"ORD_000434","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_000435:1","order_id":"ORD_000435","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_000435:2","order_id":"ORD_000435","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_000435:3","order_id":"ORD_000435","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_000435:4","order_id":"ORD_000435","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_000435:5","order_id":"ORD_000435","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_000436:1","order_id":"ORD_000436","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_000437:1","order_id":"ORD_000437","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_000437:2","order_id":"ORD_000437","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_000438:1","order_id":"ORD_000438","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_000438:2","order_id":"ORD_000438","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_000438:3","order_id":"ORD_000438","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_000439:1","order_id":"ORD_000439","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_000439:2","order_id":"ORD_000439","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_000439:3","order_id":"ORD_000439","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_000439:4","order_id":"ORD_000439","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_000440:1","order_id":"ORD_000440","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_000440:2","order_id":"ORD_000440","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_000440:3","order_id":"ORD_000440","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_000440:4","order_id":"ORD_000440","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_000440:5","order_id":"ORD_000440","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_000441:1","order_id":"ORD_000441","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_000442:1","order_id":"ORD_000442","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_000442:2","order_id":"ORD_000442","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_000443:1","order_id":"ORD_000443","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_000443:2","order_id":"ORD_000443","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_000443:3","order_id":"ORD_000443","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_000444:1","order_id":"ORD_000444","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_000444:2","order_id":"ORD_000444","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_000444:3","order_id":"ORD_000444","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_000444:4","order_id":"ORD_000444","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_000445:1","order_id":"ORD_000445","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_000445:2","order_id":"ORD_000445","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_000445:3","order_id":"ORD_000445","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_000445:4","order_id":"ORD_000445","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_000445:5","order_id":"ORD_000445","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_000446:1","order_id":"ORD_000446","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_000447:1","order_id":"ORD_000447","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_000447:2","order_id":"ORD_000447","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_000448:1","order_id":"ORD_000448","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_000448:2","order_id":"ORD_000448","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_000448:3","order_id":"ORD_000448","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_000449:1","order_id":"ORD_000449","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_000449:2","order_id":"ORD_000449","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_000449:3","order_id":"ORD_000449","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_000449:4","order_id":"ORD_000449","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_000450:1","order_id":"ORD_000450","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_000450:2","order_id":"ORD_000450","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_000450:3","order_id":"ORD_000450","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_000450:4","order_id":"ORD_000450","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_000450:5","order_id":"ORD_000450","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_000451:1","order_id":"ORD_000451","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_000452:1","order_id":"ORD_000452","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_000452:2","order_id":"ORD_000452","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_000453:1","order_id":"ORD_000453","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_000453:2","order_id":"ORD_000453","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_000453:3","order_id":"ORD_000453","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_000454:1","order_id":"ORD_000454","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_000454:2","order_id":"ORD_000454","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_000454:3","order_id":"ORD_000454","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_000454:4","order_id":"ORD_000454","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_000455:1","order_id":"ORD_000455","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_000455:2","order_id":"ORD_000455","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_000455:3","order_id":"ORD_000455","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_000455:4","order_id":"ORD_000455","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_000455:5","order_id":"ORD_000455","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_000456:1","order_id":"ORD_000456","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_000457:1","order_id":"ORD_000457","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_000457:2","order_id":"ORD_000457","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_000458:1","order_id":"ORD_000458","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_000458:2","order_id":"ORD_000458","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_000458:3","order_id":"ORD_000458","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_000459:1","order_id":"ORD_000459","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_000459:2","order_id":"ORD_000459","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_000459:3","order_id":"ORD_000459","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_000459:4","order_id":"ORD_000459","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_000460:1","order_id":"ORD_000460","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_000460:2","order_id":"ORD_000460","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_000460:3","order_id":"ORD_000460","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_000460:4","order_id":"ORD_000460","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_000460:5","order_id":"ORD_000460","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_000461:1","order_id":"ORD_000461","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_000462:1","order_id":"ORD_000462","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_000462:2","order_id":"ORD_000462","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_000463:1","order_id":"ORD_000463","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_000463:2","order_id":"ORD_000463","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_000463:3","order_id":"ORD_000463","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_000464:1","order_id":"ORD_000464","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_000464:2","order_id":"ORD_000464","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_000464:3","order_id":"ORD_000464","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_000464:4","order_id":"ORD_000464","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_000465:1","order_id":"ORD_000465","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_000465:2","order_id":"ORD_000465","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_000465:3","order_id":"ORD_000465","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_000465:4","order_id":"ORD_000465","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_000465:5","order_id":"ORD_000465","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_000466:1","order_id":"ORD_000466","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_000467:1","order_id":"ORD_000467","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_000467:2","order_id":"ORD_000467","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_000468:1","order_id":"ORD_000468","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_000468:2","order_id":"ORD_000468","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_000468:3","order_id":"ORD_000468","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_000469:1","order_id":"ORD_000469","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_000469:2","order_id":"ORD_000469","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_000469:3","order_id":"ORD_000469","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_000469:4","order_id":"ORD_000469","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_000470:1","order_id":"ORD_000470","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_000470:2","order_id":"ORD_000470","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_000470:3","order_id":"ORD_000470","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_000470:4","order_id":"ORD_000470","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_000470:5","order_id":"ORD_000470","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_000471:1","order_id":"ORD_000471","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_000472:1","order_id":"ORD_000472","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_000472:2","order_id":"ORD_000472","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_000473:1","order_id":"ORD_000473","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_000473:2","order_id":"ORD_000473","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_000473:3","order_id":"ORD_000473","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_000474:1","order_id":"ORD_000474","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_000474:2","order_id":"ORD_000474","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_000474:3","order_id":"ORD_000474","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_000474:4","order_id":"ORD_000474","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_000475:1","order_id":"ORD_000475","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_000475:2","order_id":"ORD_000475","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_000475:3","order_id":"ORD_000475","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_000475:4","order_id":"ORD_000475","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_000475:5","order_id":"ORD_000475","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_000476:1","order_id":"ORD_000476","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_000477:1","order_id":"ORD_000477","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_000477:2","order_id":"ORD_000477","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_000478:1","order_id":"ORD_000478","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_000478:2","order_id":"ORD_000478","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_000478:3","order_id":"ORD_000478","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_000479:1","order_id":"ORD_000479","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_000479:2","order_id":"ORD_000479","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_000479:3","order_id":"ORD_000479","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_000479:4","order_id":"ORD_000479","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_000480:1","order_id":"ORD_000480","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_000480:2","order_id":"ORD_000480","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_000480:3","order_id":"ORD_000480","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_000480:4","order_id":"ORD_000480","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_000480:5","order_id":"ORD_000480","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_000481:1","order_id":"ORD_000481","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_000482:1","order_id":"ORD_000482","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_000482:2","order_id":"ORD_000482","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_000483:1","order_id":"ORD_000483","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_000483:2","order_id":"ORD_000483","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_000483:3","order_id":"ORD_000483","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_000484:1","order_id":"ORD_000484","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_000484:2","order_id":"ORD_000484","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_000484:3","order_id":"ORD_000484","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_000484:4","order_id":"ORD_000484","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_000485:1","order_id":"ORD_000485","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_000485:2","order_id":"ORD_000485","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_000485:3","order_id":"ORD_000485","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_000485:4","order_id":"ORD_000485","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_000485:5","order_id":"ORD_000485","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_000486:1","order_id":"ORD_000486","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_000487:1","order_id":"ORD_000487","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_000487:2","order_id":"ORD_000487","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_000488:1","order_id":"ORD_000488","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_000488:2","order_id":"ORD_000488","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_000488:3","order_id":"ORD_000488","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_000489:1","order_id":"ORD_000489","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_000489:2","order_id":"ORD_000489","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_000489:3","order_id":"ORD_000489","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_000489:4","order_id":"ORD_000489","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_000490:1","order_id":"ORD_000490","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_000490:2","order_id":"ORD_000490","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_000490:3","order_id":"ORD_000490","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_000490:4","order_id":"ORD_000490","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_000490:5","order_id":"ORD_000490","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_000491:1","order_id":"ORD_000491","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_000492:1","order_id":"ORD_000492","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_000492:2","order_id":"ORD_000492","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_000493:1","order_id":"ORD_000493","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_000493:2","order_id":"ORD_000493","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_000493:3","order_id":"ORD_000493","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_000494:1","order_id":"ORD_000494","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_000494:2","order_id":"ORD_000494","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_000494:3","order_id":"ORD_000494","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_000494:4","order_id":"ORD_000494","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_000495:1","order_id":"ORD_000495","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_000495:2","order_id":"ORD_000495","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_000495:3","order_id":"ORD_000495","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_000495:4","order_id":"ORD_000495","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_000495:5","order_id":"ORD_000495","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_000496:1","order_id":"ORD_000496","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_000497:1","order_id":"ORD_000497","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_000497:2","order_id":"ORD_000497","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_000498:1","order_id":"ORD_000498","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_000498:2","order_id":"ORD_000498","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_000498:3","order_id":"ORD_000498","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_000499:1","order_id":"ORD_000499","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_000499:2","order_id":"ORD_000499","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_000499:3","order_id":"ORD_000499","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_000499:4","order_id":"ORD_000499","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_000500:1","order_id":"ORD_000500","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_000500:2","order_id":"ORD_000500","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_000500:3","order_id":"ORD_000500","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_000500:4","order_id":"ORD_000500","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_000500:5","order_id":"ORD_000500","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_000501:1","order_id":"ORD_000501","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_000502:1","order_id":"ORD_000502","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_000502:2","order_id":"ORD_000502","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_000503:1","order_id":"ORD_000503","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_000503:2","order_id":"ORD_000503","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_000503:3","order_id":"ORD_000503","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_000504:1","order_id":"ORD_000504","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_000504:2","order_id":"ORD_000504","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_000504:3","order_id":"ORD_000504","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_000504:4","order_id":"ORD_000504","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_000505:1","order_id":"ORD_000505","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_000505:2","order_id":"ORD_000505","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_000505:3","order_id":"ORD_000505","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_000505:4","order_id":"ORD_000505","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_000505:5","order_id":"ORD_000505","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_000506:1","order_id":"ORD_000506","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_000507:1","order_id":"ORD_000507","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_000507:2","order_id":"ORD_000507","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_000508:1","order_id":"ORD_000508","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_000508:2","order_id":"ORD_000508","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_000508:3","order_id":"ORD_000508","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_000509:1","order_id":"ORD_000509","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_000509:2","order_id":"ORD_000509","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_000509:3","order_id":"ORD_000509","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_000509:4","order_id":"ORD_000509","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_000510:1","order_id":"ORD_000510","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_000510:2","order_id":"ORD_000510","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_000510:3","order_id":"ORD_000510","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_000510:4","order_id":"ORD_000510","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_000510:5","order_id":"ORD_000510","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_000511:1","order_id":"ORD_000511","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_000512:1","order_id":"ORD_000512","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_000512:2","order_id":"ORD_000512","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_000513:1","order_id":"ORD_000513","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_000513:2","order_id":"ORD_000513","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_000513:3","order_id":"ORD_000513","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_000514:1","order_id":"ORD_000514","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_000514:2","order_id":"ORD_000514","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_000514:3","order_id":"ORD_000514","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_000514:4","order_id":"ORD_000514","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_000515:1","order_id":"ORD_000515","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_000515:2","order_id":"ORD_000515","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_000515:3","order_id":"ORD_000515","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_000515:4","order_id":"ORD_000515","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_000515:5","order_id":"ORD_000515","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_000516:1","order_id":"ORD_000516","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_000517:1","order_id":"ORD_000517","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_000517:2","order_id":"ORD_000517","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_000518:1","order_id":"ORD_000518","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_000518:2","order_id":"ORD_000518","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_000518:3","order_id":"ORD_000518","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_000519:1","order_id":"ORD_000519","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_000519:2","order_id":"ORD_000519","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_000519:3","order_id":"ORD_000519","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_000519:4","order_id":"ORD_000519","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_000520:1","order_id":"ORD_000520","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_000520:2","order_id":"ORD_000520","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_000520:3","order_id":"ORD_000520","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_000520:4","order_id":"ORD_000520","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_000520:5","order_id":"ORD_000520","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_000521:1","order_id":"ORD_000521","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_000522:1","order_id":"ORD_000522","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_000522:2","order_id":"ORD_000522","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_000523:1","order_id":"ORD_000523","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_000523:2","order_id":"ORD_000523","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_000523:3","order_id":"ORD_000523","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_000524:1","order_id":"ORD_000524","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_000524:2","order_id":"ORD_000524","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_000524:3","order_id":"ORD_000524","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_000524:4","order_id":"ORD_000524","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_000525:1","order_id":"ORD_000525","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_000525:2","order_id":"ORD_000525","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_000525:3","order_id":"ORD_000525","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_000525:4","order_id":"ORD_000525","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_000525:5","order_id":"ORD_000525","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_000526:1","order_id":"ORD_000526","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_000527:1","order_id":"ORD_000527","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_000527:2","order_id":"ORD_000527","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_000528:1","order_id":"ORD_000528","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_000528:2","order_id":"ORD_000528","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_000528:3","order_id":"ORD_000528","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_000529:1","order_id":"ORD_000529","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_000529:2","order_id":"ORD_000529","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_000529:3","order_id":"ORD_000529","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_000529:4","order_id":"ORD_000529","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_000530:1","order_id":"ORD_000530","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_000530:2","order_id":"ORD_000530","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_000530:3","order_id":"ORD_000530","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_000530:4","order_id":"ORD_000530","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_000530:5","order_id":"ORD_000530","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_000531:1","order_id":"ORD_000531","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_000532:1","order_id":"ORD_000532","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_000532:2","order_id":"ORD_000532","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_000533:1","order_id":"ORD_000533","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_000533:2","order_id":"ORD_000533","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_000533:3","order_id":"ORD_000533","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_000534:1","order_id":"ORD_000534","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_000534:2","order_id":"ORD_000534","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_000534:3","order_id":"ORD_000534","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_000534:4","order_id":"ORD_000534","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_000535:1","order_id":"ORD_000535","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_000535:2","order_id":"ORD_000535","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_000535:3","order_id":"ORD_000535","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_000535:4","order_id":"ORD_000535","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_000535:5","order_id":"ORD_000535","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_000536:1","order_id":"ORD_000536","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_000537:1","order_id":"ORD_000537","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_000537:2","order_id":"ORD_000537","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_000538:1","order_id":"ORD_000538","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_000538:2","order_id":"ORD_000538","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_000538:3","order_id":"ORD_000538","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_000539:1","order_id":"ORD_000539","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_000539:2","order_id":"ORD_000539","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_000539:3","order_id":"ORD_000539","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_000539:4","order_id":"ORD_000539","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_000540:1","order_id":"ORD_000540","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_000540:2","order_id":"ORD_000540","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_000540:3","order_id":"ORD_000540","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_000540:4","order_id":"ORD_000540","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_000540:5","order_id":"ORD_000540","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_000541:1","order_id":"ORD_000541","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_000542:1","order_id":"ORD_000542","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_000542:2","order_id":"ORD_000542","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_000543:1","order_id":"ORD_000543","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_000543:2","order_id":"ORD_000543","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_000543:3","order_id":"ORD_000543","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_000544:1","order_id":"ORD_000544","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_000544:2","order_id":"ORD_000544","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_000544:3","order_id":"ORD_000544","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_000544:4","order_id":"ORD_000544","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_000545:1","order_id":"ORD_000545","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_000545:2","order_id":"ORD_000545","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_000545:3","order_id":"ORD_000545","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_000545:4","order_id":"ORD_000545","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_000545:5","order_id":"ORD_000545","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_000546:1","order_id":"ORD_000546","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_000547:1","order_id":"ORD_000547","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_000547:2","order_id":"ORD_000547","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_000548:1","order_id":"ORD_000548","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_000548:2","order_id":"ORD_000548","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_000548:3","order_id":"ORD_000548","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_000549:1","order_id":"ORD_000549","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_000549:2","order_id":"ORD_000549","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_000549:3","order_id":"ORD_000549","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_000549:4","order_id":"ORD_000549","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_000550:1","order_id":"ORD_000550","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_000550:2","order_id":"ORD_000550","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_000550:3","order_id":"ORD_000550","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_000550:4","order_id":"ORD_000550","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_000550:5","order_id":"ORD_000550","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_000551:1","order_id":"ORD_000551","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_000552:1","order_id":"ORD_000552","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_000552:2","order_id":"ORD_000552","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_000553:1","order_id":"ORD_000553","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_000553:2","order_id":"ORD_000553","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_000553:3","order_id":"ORD_000553","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_000554:1","order_id":"ORD_000554","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_000554:2","order_id":"ORD_000554","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_000554:3","order_id":"ORD_000554","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_000554:4","order_id":"ORD_000554","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_000555:1","order_id":"ORD_000555","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_000555:2","order_id":"ORD_000555","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_000555:3","order_id":"ORD_000555","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_000555:4","order_id":"ORD_000555","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_000555:5","order_id":"ORD_000555","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_000556:1","order_id":"ORD_000556","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_000557:1","order_id":"ORD_000557","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_000557:2","order_id":"ORD_000557","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_000558:1","order_id":"ORD_000558","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_000558:2","order_id":"ORD_000558","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_000558:3","order_id":"ORD_000558","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_000559:1","order_id":"ORD_000559","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_000559:2","order_id":"ORD_000559","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_000559:3","order_id":"ORD_000559","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_000559:4","order_id":"ORD_000559","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_000560:1","order_id":"ORD_000560","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_000560:2","order_id":"ORD_000560","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_000560:3","order_id":"ORD_000560","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_000560:4","order_id":"ORD_000560","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_000560:5","order_id":"ORD_000560","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_000561:1","order_id":"ORD_000561","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_000562:1","order_id":"ORD_000562","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_000562:2","order_id":"ORD_000562","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_000563:1","order_id":"ORD_000563","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_000563:2","order_id":"ORD_000563","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_000563:3","order_id":"ORD_000563","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_000564:1","order_id":"ORD_000564","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_000564:2","order_id":"ORD_000564","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_000564:3","order_id":"ORD_000564","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_000564:4","order_id":"ORD_000564","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_000565:1","order_id":"ORD_000565","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_000565:2","order_id":"ORD_000565","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_000565:3","order_id":"ORD_000565","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_000565:4","order_id":"ORD_000565","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_000565:5","order_id":"ORD_000565","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_000566:1","order_id":"ORD_000566","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_000567:1","order_id":"ORD_000567","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_000567:2","order_id":"ORD_000567","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_000568:1","order_id":"ORD_000568","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_000568:2","order_id":"ORD_000568","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_000568:3","order_id":"ORD_000568","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_000569:1","order_id":"ORD_000569","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_000569:2","order_id":"ORD_000569","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_000569:3","order_id":"ORD_000569","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_000569:4","order_id":"ORD_000569","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_000570:1","order_id":"ORD_000570","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_000570:2","order_id":"ORD_000570","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_000570:3","order_id":"ORD_000570","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_000570:4","order_id":"ORD_000570","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_000570:5","order_id":"ORD_000570","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_000571:1","order_id":"ORD_000571","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_000572:1","order_id":"ORD_000572","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_000572:2","order_id":"ORD_000572","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_000573:1","order_id":"ORD_000573","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_000573:2","order_id":"ORD_000573","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_000573:3","order_id":"ORD_000573","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_000574:1","order_id":"ORD_000574","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_000574:2","order_id":"ORD_000574","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_000574:3","order_id":"ORD_000574","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_000574:4","order_id":"ORD_000574","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_000575:1","order_id":"ORD_000575","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_000575:2","order_id":"ORD_000575","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_000575:3","order_id":"ORD_000575","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_000575:4","order_id":"ORD_000575","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_000575:5","order_id":"ORD_000575","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_000576:1","order_id":"ORD_000576","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_000577:1","order_id":"ORD_000577","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_000577:2","order_id":"ORD_000577","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_000578:1","order_id":"ORD_000578","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_000578:2","order_id":"ORD_000578","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_000578:3","order_id":"ORD_000578","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_000579:1","order_id":"ORD_000579","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_000579:2","order_id":"ORD_000579","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_000579:3","order_id":"ORD_000579","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_000579:4","order_id":"ORD_000579","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_000580:1","order_id":"ORD_000580","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_000580:2","order_id":"ORD_000580","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_000580:3","order_id":"ORD_000580","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_000580:4","order_id":"ORD_000580","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_000580:5","order_id":"ORD_000580","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_000581:1","order_id":"ORD_000581","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_000582:1","order_id":"ORD_000582","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_000582:2","order_id":"ORD_000582","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_000583:1","order_id":"ORD_000583","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_000583:2","order_id":"ORD_000583","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_000583:3","order_id":"ORD_000583","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_000584:1","order_id":"ORD_000584","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_000584:2","order_id":"ORD_000584","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_000584:3","order_id":"ORD_000584","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_000584:4","order_id":"ORD_000584","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_000585:1","order_id":"ORD_000585","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_000585:2","order_id":"ORD_000585","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_000585:3","order_id":"ORD_000585","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_000585:4","order_id":"ORD_000585","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_000585:5","order_id":"ORD_000585","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_000586:1","order_id":"ORD_000586","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_000587:1","order_id":"ORD_000587","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_000587:2","order_id":"ORD_000587","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_000588:1","order_id":"ORD_000588","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_000588:2","order_id":"ORD_000588","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_000588:3","order_id":"ORD_000588","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_000589:1","order_id":"ORD_000589","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_000589:2","order_id":"ORD_000589","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_000589:3","order_id":"ORD_000589","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_000589:4","order_id":"ORD_000589","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_000590:1","order_id":"ORD_000590","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_000590:2","order_id":"ORD_000590","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_000590:3","order_id":"ORD_000590","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_000590:4","order_id":"ORD_000590","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_000590:5","order_id":"ORD_000590","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_000591:1","order_id":"ORD_000591","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_000592:1","order_id":"ORD_000592","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_000592:2","order_id":"ORD_000592","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_000593:1","order_id":"ORD_000593","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_000593:2","order_id":"ORD_000593","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_000593:3","order_id":"ORD_000593","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_000594:1","order_id":"ORD_000594","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_000594:2","order_id":"ORD_000594","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_000594:3","order_id":"ORD_000594","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_000594:4","order_id":"ORD_000594","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_000595:1","order_id":"ORD_000595","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_000595:2","order_id":"ORD_000595","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_000595:3","order_id":"ORD_000595","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_000595:4","order_id":"ORD_000595","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_000595:5","order_id":"ORD_000595","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_000596:1","order_id":"ORD_000596","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_000597:1","order_id":"ORD_000597","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_000597:2","order_id":"ORD_000597","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_000598:1","order_id":"ORD_000598","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_000598:2","order_id":"ORD_000598","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_000598:3","order_id":"ORD_000598","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_000599:1","order_id":"ORD_000599","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_000599:2","order_id":"ORD_000599","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_000599:3","order_id":"ORD_000599","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_000599:4","order_id":"ORD_000599","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_000600:1","order_id":"ORD_000600","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_000600:2","order_id":"ORD_000600","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_000600:3","order_id":"ORD_000600","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_000600:4","order_id":"ORD_000600","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_000600:5","order_id":"ORD_000600","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_000601:1","order_id":"ORD_000601","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_000602:1","order_id":"ORD_000602","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_000602:2","order_id":"ORD_000602","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_000603:1","order_id":"ORD_000603","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_000603:2","order_id":"ORD_000603","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_000603:3","order_id":"ORD_000603","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_000604:1","order_id":"ORD_000604","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_000604:2","order_id":"ORD_000604","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_000604:3","order_id":"ORD_000604","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_000604:4","order_id":"ORD_000604","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_000605:1","order_id":"ORD_000605","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_000605:2","order_id":"ORD_000605","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_000605:3","order_id":"ORD_000605","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_000605:4","order_id":"ORD_000605","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_000605:5","order_id":"ORD_000605","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_000606:1","order_id":"ORD_000606","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_000607:1","order_id":"ORD_000607","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_000607:2","order_id":"ORD_000607","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_000608:1","order_id":"ORD_000608","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_000608:2","order_id":"ORD_000608","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_000608:3","order_id":"ORD_000608","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_000609:1","order_id":"ORD_000609","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_000609:2","order_id":"ORD_000609","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_000609:3","order_id":"ORD_000609","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_000609:4","order_id":"ORD_000609","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_000610:1","order_id":"ORD_000610","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_000610:2","order_id":"ORD_000610","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_000610:3","order_id":"ORD_000610","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_000610:4","order_id":"ORD_000610","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_000610:5","order_id":"ORD_000610","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_000611:1","order_id":"ORD_000611","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_000612:1","order_id":"ORD_000612","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_000612:2","order_id":"ORD_000612","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_000613:1","order_id":"ORD_000613","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_000613:2","order_id":"ORD_000613","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_000613:3","order_id":"ORD_000613","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_000614:1","order_id":"ORD_000614","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_000614:2","order_id":"ORD_000614","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_000614:3","order_id":"ORD_000614","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_000614:4","order_id":"ORD_000614","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_000615:1","order_id":"ORD_000615","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_000615:2","order_id":"ORD_000615","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_000615:3","order_id":"ORD_000615","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_000615:4","order_id":"ORD_000615","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_000615:5","order_id":"ORD_000615","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_000616:1","order_id":"ORD_000616","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_000617:1","order_id":"ORD_000617","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_000617:2","order_id":"ORD_000617","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_000618:1","order_id":"ORD_000618","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_000618:2","order_id":"ORD_000618","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_000618:3","order_id":"ORD_000618","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_000619:1","order_id":"ORD_000619","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_000619:2","order_id":"ORD_000619","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_000619:3","order_id":"ORD_000619","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_000619:4","order_id":"ORD_000619","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_000620:1","order_id":"ORD_000620","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_000620:2","order_id":"ORD_000620","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_000620:3","order_id":"ORD_000620","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_000620:4","order_id":"ORD_000620","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_000620:5","order_id":"ORD_000620","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_000621:1","order_id":"ORD_000621","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_000622:1","order_id":"ORD_000622","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_000622:2","order_id":"ORD_000622","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_000623:1","order_id":"ORD_000623","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_000623:2","order_id":"ORD_000623","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_000623:3","order_id":"ORD_000623","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_000624:1","order_id":"ORD_000624","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_000624:2","order_id":"ORD_000624","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_000624:3","order_id":"ORD_000624","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_000624:4","order_id":"ORD_000624","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_000625:1","order_id":"ORD_000625","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_000625:2","order_id":"ORD_000625","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_000625:3","order_id":"ORD_000625","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_000625:4","order_id":"ORD_000625","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_000625:5","order_id":"ORD_000625","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_000626:1","order_id":"ORD_000626","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_000627:1","order_id":"ORD_000627","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_000627:2","order_id":"ORD_000627","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_000628:1","order_id":"ORD_000628","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_000628:2","order_id":"ORD_000628","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_000628:3","order_id":"ORD_000628","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_000629:1","order_id":"ORD_000629","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_000629:2","order_id":"ORD_000629","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_000629:3","order_id":"ORD_000629","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_000629:4","order_id":"ORD_000629","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_000630:1","order_id":"ORD_000630","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_000630:2","order_id":"ORD_000630","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_000630:3","order_id":"ORD_000630","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_000630:4","order_id":"ORD_000630","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_000630:5","order_id":"ORD_000630","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_000631:1","order_id":"ORD_000631","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_000632:1","order_id":"ORD_000632","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_000632:2","order_id":"ORD_000632","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_000633:1","order_id":"ORD_000633","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_000633:2","order_id":"ORD_000633","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_000633:3","order_id":"ORD_000633","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_000634:1","order_id":"ORD_000634","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_000634:2","order_id":"ORD_000634","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_000634:3","order_id":"ORD_000634","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_000634:4","order_id":"ORD_000634","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_000635:1","order_id":"ORD_000635","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_000635:2","order_id":"ORD_000635","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_000635:3","order_id":"ORD_000635","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_000635:4","order_id":"ORD_000635","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_000635:5","order_id":"ORD_000635","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_000636:1","order_id":"ORD_000636","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_000637:1","order_id":"ORD_000637","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_000637:2","order_id":"ORD_000637","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_000638:1","order_id":"ORD_000638","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_000638:2","order_id":"ORD_000638","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_000638:3","order_id":"ORD_000638","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_000639:1","order_id":"ORD_000639","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_000639:2","order_id":"ORD_000639","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_000639:3","order_id":"ORD_000639","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_000639:4","order_id":"ORD_000639","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_000640:1","order_id":"ORD_000640","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_000640:2","order_id":"ORD_000640","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_000640:3","order_id":"ORD_000640","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_000640:4","order_id":"ORD_000640","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_000640:5","order_id":"ORD_000640","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_000641:1","order_id":"ORD_000641","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_000642:1","order_id":"ORD_000642","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_000642:2","order_id":"ORD_000642","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_000643:1","order_id":"ORD_000643","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_000643:2","order_id":"ORD_000643","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_000643:3","order_id":"ORD_000643","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_000644:1","order_id":"ORD_000644","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_000644:2","order_id":"ORD_000644","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_000644:3","order_id":"ORD_000644","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_000644:4","order_id":"ORD_000644","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_000645:1","order_id":"ORD_000645","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_000645:2","order_id":"ORD_000645","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_000645:3","order_id":"ORD_000645","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_000645:4","order_id":"ORD_000645","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_000645:5","order_id":"ORD_000645","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_000646:1","order_id":"ORD_000646","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_000647:1","order_id":"ORD_000647","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_000647:2","order_id":"ORD_000647","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_000648:1","order_id":"ORD_000648","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_000648:2","order_id":"ORD_000648","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_000648:3","order_id":"ORD_000648","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_000649:1","order_id":"ORD_000649","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_000649:2","order_id":"ORD_000649","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_000649:3","order_id":"ORD_000649","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_000649:4","order_id":"ORD_000649","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_000650:1","order_id":"ORD_000650","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_000650:2","order_id":"ORD_000650","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_000650:3","order_id":"ORD_000650","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_000650:4","order_id":"ORD_000650","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_000650:5","order_id":"ORD_000650","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_000651:1","order_id":"ORD_000651","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_000652:1","order_id":"ORD_000652","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_000652:2","order_id":"ORD_000652","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_000653:1","order_id":"ORD_000653","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_000653:2","order_id":"ORD_000653","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_000653:3","order_id":"ORD_000653","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_000654:1","order_id":"ORD_000654","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_000654:2","order_id":"ORD_000654","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_000654:3","order_id":"ORD_000654","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_000654:4","order_id":"ORD_000654","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_000655:1","order_id":"ORD_000655","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_000655:2","order_id":"ORD_000655","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_000655:3","order_id":"ORD_000655","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_000655:4","order_id":"ORD_000655","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_000655:5","order_id":"ORD_000655","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_000656:1","order_id":"ORD_000656","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_000657:1","order_id":"ORD_000657","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_000657:2","order_id":"ORD_000657","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_000658:1","order_id":"ORD_000658","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_000658:2","order_id":"ORD_000658","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_000658:3","order_id":"ORD_000658","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_000659:1","order_id":"ORD_000659","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_000659:2","order_id":"ORD_000659","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_000659:3","order_id":"ORD_000659","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_000659:4","order_id":"ORD_000659","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_000660:1","order_id":"ORD_000660","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_000660:2","order_id":"ORD_000660","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_000660:3","order_id":"ORD_000660","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_000660:4","order_id":"ORD_000660","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_000660:5","order_id":"ORD_000660","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_000661:1","order_id":"ORD_000661","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_000662:1","order_id":"ORD_000662","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_000662:2","order_id":"ORD_000662","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_000663:1","order_id":"ORD_000663","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_000663:2","order_id":"ORD_000663","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_000663:3","order_id":"ORD_000663","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_000664:1","order_id":"ORD_000664","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_000664:2","order_id":"ORD_000664","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_000664:3","order_id":"ORD_000664","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_000664:4","order_id":"ORD_000664","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_000665:1","order_id":"ORD_000665","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_000665:2","order_id":"ORD_000665","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_000665:3","order_id":"ORD_000665","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_000665:4","order_id":"ORD_000665","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_000665:5","order_id":"ORD_000665","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_000666:1","order_id":"ORD_000666","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_000667:1","order_id":"ORD_000667","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_000667:2","order_id":"ORD_000667","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_000668:1","order_id":"ORD_000668","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_000668:2","order_id":"ORD_000668","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_000668:3","order_id":"ORD_000668","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_000669:1","order_id":"ORD_000669","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_000669:2","order_id":"ORD_000669","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_000669:3","order_id":"ORD_000669","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_000669:4","order_id":"ORD_000669","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_000670:1","order_id":"ORD_000670","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_000670:2","order_id":"ORD_000670","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_000670:3","order_id":"ORD_000670","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_000670:4","order_id":"ORD_000670","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_000670:5","order_id":"ORD_000670","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_000671:1","order_id":"ORD_000671","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_000672:1","order_id":"ORD_000672","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_000672:2","order_id":"ORD_000672","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_000673:1","order_id":"ORD_000673","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_000673:2","order_id":"ORD_000673","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_000673:3","order_id":"ORD_000673","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_000674:1","order_id":"ORD_000674","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_000674:2","order_id":"ORD_000674","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_000674:3","order_id":"ORD_000674","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_000674:4","order_id":"ORD_000674","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_000675:1","order_id":"ORD_000675","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_000675:2","order_id":"ORD_000675","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_000675:3","order_id":"ORD_000675","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_000675:4","order_id":"ORD_000675","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_000675:5","order_id":"ORD_000675","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_000676:1","order_id":"ORD_000676","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_000677:1","order_id":"ORD_000677","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_000677:2","order_id":"ORD_000677","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_000678:1","order_id":"ORD_000678","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_000678:2","order_id":"ORD_000678","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_000678:3","order_id":"ORD_000678","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_000679:1","order_id":"ORD_000679","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_000679:2","order_id":"ORD_000679","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_000679:3","order_id":"ORD_000679","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_000679:4","order_id":"ORD_000679","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_000680:1","order_id":"ORD_000680","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_000680:2","order_id":"ORD_000680","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_000680:3","order_id":"ORD_000680","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_000680:4","order_id":"ORD_000680","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_000680:5","order_id":"ORD_000680","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_000681:1","order_id":"ORD_000681","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_000682:1","order_id":"ORD_000682","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_000682:2","order_id":"ORD_000682","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_000683:1","order_id":"ORD_000683","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_000683:2","order_id":"ORD_000683","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_000683:3","order_id":"ORD_000683","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_000684:1","order_id":"ORD_000684","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_000684:2","order_id":"ORD_000684","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_000684:3","order_id":"ORD_000684","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_000684:4","order_id":"ORD_000684","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_000685:1","order_id":"ORD_000685","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_000685:2","order_id":"ORD_000685","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_000685:3","order_id":"ORD_000685","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_000685:4","order_id":"ORD_000685","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_000685:5","order_id":"ORD_000685","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_000686:1","order_id":"ORD_000686","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_000687:1","order_id":"ORD_000687","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_000687:2","order_id":"ORD_000687","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_000688:1","order_id":"ORD_000688","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_000688:2","order_id":"ORD_000688","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_000688:3","order_id":"ORD_000688","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_000689:1","order_id":"ORD_000689","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_000689:2","order_id":"ORD_000689","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_000689:3","order_id":"ORD_000689","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_000689:4","order_id":"ORD_000689","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_000690:1","order_id":"ORD_000690","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_000690:2","order_id":"ORD_000690","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_000690:3","order_id":"ORD_000690","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_000690:4","order_id":"ORD_000690","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_000690:5","order_id":"ORD_000690","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_000691:1","order_id":"ORD_000691","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_000692:1","order_id":"ORD_000692","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_000692:2","order_id":"ORD_000692","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_000693:1","order_id":"ORD_000693","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_000693:2","order_id":"ORD_000693","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_000693:3","order_id":"ORD_000693","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_000694:1","order_id":"ORD_000694","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_000694:2","order_id":"ORD_000694","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_000694:3","order_id":"ORD_000694","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_000694:4","order_id":"ORD_000694","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_000695:1","order_id":"ORD_000695","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_000695:2","order_id":"ORD_000695","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_000695:3","order_id":"ORD_000695","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_000695:4","order_id":"ORD_000695","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_000695:5","order_id":"ORD_000695","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_000696:1","order_id":"ORD_000696","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_000697:1","order_id":"ORD_000697","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_000697:2","order_id":"ORD_000697","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_000698:1","order_id":"ORD_000698","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_000698:2","order_id":"ORD_000698","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_000698:3","order_id":"ORD_000698","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_000699:1","order_id":"ORD_000699","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_000699:2","order_id":"ORD_000699","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_000699:3","order_id":"ORD_000699","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_000699:4","order_id":"ORD_000699","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_000700:1","order_id":"ORD_000700","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_000700:2","order_id":"ORD_000700","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_000700:3","order_id":"ORD_000700","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_000700:4","order_id":"ORD_000700","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_000700:5","order_id":"ORD_000700","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_000701:1","order_id":"ORD_000701","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_000702:1","order_id":"ORD_000702","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_000702:2","order_id":"ORD_000702","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_000703:1","order_id":"ORD_000703","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_000703:2","order_id":"ORD_000703","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_000703:3","order_id":"ORD_000703","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_000704:1","order_id":"ORD_000704","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_000704:2","order_id":"ORD_000704","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_000704:3","order_id":"ORD_000704","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_000704:4","order_id":"ORD_000704","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_000705:1","order_id":"ORD_000705","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_000705:2","order_id":"ORD_000705","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_000705:3","order_id":"ORD_000705","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_000705:4","order_id":"ORD_000705","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_000705:5","order_id":"ORD_000705","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_000706:1","order_id":"ORD_000706","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_000707:1","order_id":"ORD_000707","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_000707:2","order_id":"ORD_000707","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_000708:1","order_id":"ORD_000708","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_000708:2","order_id":"ORD_000708","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_000708:3","order_id":"ORD_000708","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_000709:1","order_id":"ORD_000709","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_000709:2","order_id":"ORD_000709","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_000709:3","order_id":"ORD_000709","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_000709:4","order_id":"ORD_000709","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_000710:1","order_id":"ORD_000710","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_000710:2","order_id":"ORD_000710","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_000710:3","order_id":"ORD_000710","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_000710:4","order_id":"ORD_000710","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_000710:5","order_id":"ORD_000710","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_000711:1","order_id":"ORD_000711","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_000712:1","order_id":"ORD_000712","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_000712:2","order_id":"ORD_000712","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_000713:1","order_id":"ORD_000713","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_000713:2","order_id":"ORD_000713","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_000713:3","order_id":"ORD_000713","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_000714:1","order_id":"ORD_000714","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_000714:2","order_id":"ORD_000714","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_000714:3","order_id":"ORD_000714","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_000714:4","order_id":"ORD_000714","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_000715:1","order_id":"ORD_000715","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_000715:2","order_id":"ORD_000715","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_000715:3","order_id":"ORD_000715","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_000715:4","order_id":"ORD_000715","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_000715:5","order_id":"ORD_000715","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_000716:1","order_id":"ORD_000716","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_000717:1","order_id":"ORD_000717","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_000717:2","order_id":"ORD_000717","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_000718:1","order_id":"ORD_000718","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_000718:2","order_id":"ORD_000718","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_000718:3","order_id":"ORD_000718","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_000719:1","order_id":"ORD_000719","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_000719:2","order_id":"ORD_000719","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_000719:3","order_id":"ORD_000719","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_000719:4","order_id":"ORD_000719","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_000720:1","order_id":"ORD_000720","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_000720:2","order_id":"ORD_000720","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_000720:3","order_id":"ORD_000720","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_000720:4","order_id":"ORD_000720","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_000720:5","order_id":"ORD_000720","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_000721:1","order_id":"ORD_000721","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_000722:1","order_id":"ORD_000722","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_000722:2","order_id":"ORD_000722","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_000723:1","order_id":"ORD_000723","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_000723:2","order_id":"ORD_000723","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_000723:3","order_id":"ORD_000723","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_000724:1","order_id":"ORD_000724","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_000724:2","order_id":"ORD_000724","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_000724:3","order_id":"ORD_000724","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_000724:4","order_id":"ORD_000724","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_000725:1","order_id":"ORD_000725","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_000725:2","order_id":"ORD_000725","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_000725:3","order_id":"ORD_000725","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_000725:4","order_id":"ORD_000725","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_000725:5","order_id":"ORD_000725","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_000726:1","order_id":"ORD_000726","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_000727:1","order_id":"ORD_000727","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_000727:2","order_id":"ORD_000727","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_000728:1","order_id":"ORD_000728","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_000728:2","order_id":"ORD_000728","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_000728:3","order_id":"ORD_000728","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_000729:1","order_id":"ORD_000729","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_000729:2","order_id":"ORD_000729","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_000729:3","order_id":"ORD_000729","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_000729:4","order_id":"ORD_000729","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_000730:1","order_id":"ORD_000730","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_000730:2","order_id":"ORD_000730","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_000730:3","order_id":"ORD_000730","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_000730:4","order_id":"ORD_000730","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_000730:5","order_id":"ORD_000730","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_000731:1","order_id":"ORD_000731","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_000732:1","order_id":"ORD_000732","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_000732:2","order_id":"ORD_000732","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_000733:1","order_id":"ORD_000733","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_000733:2","order_id":"ORD_000733","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_000733:3","order_id":"ORD_000733","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_000734:1","order_id":"ORD_000734","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_000734:2","order_id":"ORD_000734","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_000734:3","order_id":"ORD_000734","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_000734:4","order_id":"ORD_000734","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_000735:1","order_id":"ORD_000735","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_000735:2","order_id":"ORD_000735","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_000735:3","order_id":"ORD_000735","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_000735:4","order_id":"ORD_000735","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_000735:5","order_id":"ORD_000735","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_000736:1","order_id":"ORD_000736","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_000737:1","order_id":"ORD_000737","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_000737:2","order_id":"ORD_000737","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_000738:1","order_id":"ORD_000738","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_000738:2","order_id":"ORD_000738","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_000738:3","order_id":"ORD_000738","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_000739:1","order_id":"ORD_000739","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_000739:2","order_id":"ORD_000739","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_000739:3","order_id":"ORD_000739","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_000739:4","order_id":"ORD_000739","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_000740:1","order_id":"ORD_000740","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_000740:2","order_id":"ORD_000740","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_000740:3","order_id":"ORD_000740","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_000740:4","order_id":"ORD_000740","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_000740:5","order_id":"ORD_000740","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_000741:1","order_id":"ORD_000741","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_000742:1","order_id":"ORD_000742","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_000742:2","order_id":"ORD_000742","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_000743:1","order_id":"ORD_000743","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_000743:2","order_id":"ORD_000743","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_000743:3","order_id":"ORD_000743","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_000744:1","order_id":"ORD_000744","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_000744:2","order_id":"ORD_000744","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_000744:3","order_id":"ORD_000744","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_000744:4","order_id":"ORD_000744","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_000745:1","order_id":"ORD_000745","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_000745:2","order_id":"ORD_000745","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_000745:3","order_id":"ORD_000745","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_000745:4","order_id":"ORD_000745","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_000745:5","order_id":"ORD_000745","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_000746:1","order_id":"ORD_000746","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_000747:1","order_id":"ORD_000747","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_000747:2","order_id":"ORD_000747","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_000748:1","order_id":"ORD_000748","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_000748:2","order_id":"ORD_000748","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_000748:3","order_id":"ORD_000748","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_000749:1","order_id":"ORD_000749","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_000749:2","order_id":"ORD_000749","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_000749:3","order_id":"ORD_000749","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_000749:4","order_id":"ORD_000749","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_000750:1","order_id":"ORD_000750","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_000750:2","order_id":"ORD_000750","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_000750:3","order_id":"ORD_000750","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_000750:4","order_id":"ORD_000750","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_000750:5","order_id":"ORD_000750","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_000751:1","order_id":"ORD_000751","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_000752:1","order_id":"ORD_000752","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_000752:2","order_id":"ORD_000752","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_000753:1","order_id":"ORD_000753","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_000753:2","order_id":"ORD_000753","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_000753:3","order_id":"ORD_000753","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_000754:1","order_id":"ORD_000754","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_000754:2","order_id":"ORD_000754","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_000754:3","order_id":"ORD_000754","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_000754:4","order_id":"ORD_000754","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_000755:1","order_id":"ORD_000755","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_000755:2","order_id":"ORD_000755","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_000755:3","order_id":"ORD_000755","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_000755:4","order_id":"ORD_000755","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_000755:5","order_id":"ORD_000755","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_000756:1","order_id":"ORD_000756","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_000757:1","order_id":"ORD_000757","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_000757:2","order_id":"ORD_000757","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_000758:1","order_id":"ORD_000758","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_000758:2","order_id":"ORD_000758","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_000758:3","order_id":"ORD_000758","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_000759:1","order_id":"ORD_000759","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_000759:2","order_id":"ORD_000759","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_000759:3","order_id":"ORD_000759","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_000759:4","order_id":"ORD_000759","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_000760:1","order_id":"ORD_000760","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_000760:2","order_id":"ORD_000760","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_000760:3","order_id":"ORD_000760","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_000760:4","order_id":"ORD_000760","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_000760:5","order_id":"ORD_000760","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_000761:1","order_id":"ORD_000761","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_000762:1","order_id":"ORD_000762","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_000762:2","order_id":"ORD_000762","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_000763:1","order_id":"ORD_000763","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_000763:2","order_id":"ORD_000763","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_000763:3","order_id":"ORD_000763","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_000764:1","order_id":"ORD_000764","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_000764:2","order_id":"ORD_000764","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_000764:3","order_id":"ORD_000764","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_000764:4","order_id":"ORD_000764","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_000765:1","order_id":"ORD_000765","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_000765:2","order_id":"ORD_000765","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_000765:3","order_id":"ORD_000765","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_000765:4","order_id":"ORD_000765","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_000765:5","order_id":"ORD_000765","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_000766:1","order_id":"ORD_000766","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_000767:1","order_id":"ORD_000767","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_000767:2","order_id":"ORD_000767","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_000768:1","order_id":"ORD_000768","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_000768:2","order_id":"ORD_000768","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_000768:3","order_id":"ORD_000768","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_000769:1","order_id":"ORD_000769","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_000769:2","order_id":"ORD_000769","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_000769:3","order_id":"ORD_000769","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_000769:4","order_id":"ORD_000769","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_000770:1","order_id":"ORD_000770","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_000770:2","order_id":"ORD_000770","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_000770:3","order_id":"ORD_000770","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_000770:4","order_id":"ORD_000770","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_000770:5","order_id":"ORD_000770","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_000771:1","order_id":"ORD_000771","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_000772:1","order_id":"ORD_000772","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_000772:2","order_id":"ORD_000772","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_000773:1","order_id":"ORD_000773","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_000773:2","order_id":"ORD_000773","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_000773:3","order_id":"ORD_000773","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_000774:1","order_id":"ORD_000774","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_000774:2","order_id":"ORD_000774","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_000774:3","order_id":"ORD_000774","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_000774:4","order_id":"ORD_000774","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_000775:1","order_id":"ORD_000775","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_000775:2","order_id":"ORD_000775","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_000775:3","order_id":"ORD_000775","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_000775:4","order_id":"ORD_000775","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_000775:5","order_id":"ORD_000775","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_000776:1","order_id":"ORD_000776","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_000777:1","order_id":"ORD_000777","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_000777:2","order_id":"ORD_000777","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_000778:1","order_id":"ORD_000778","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_000778:2","order_id":"ORD_000778","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_000778:3","order_id":"ORD_000778","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_000779:1","order_id":"ORD_000779","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_000779:2","order_id":"ORD_000779","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_000779:3","order_id":"ORD_000779","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_000779:4","order_id":"ORD_000779","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_000780:1","order_id":"ORD_000780","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_000780:2","order_id":"ORD_000780","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_000780:3","order_id":"ORD_000780","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_000780:4","order_id":"ORD_000780","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_000780:5","order_id":"ORD_000780","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_000781:1","order_id":"ORD_000781","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_000782:1","order_id":"ORD_000782","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_000782:2","order_id":"ORD_000782","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_000783:1","order_id":"ORD_000783","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_000783:2","order_id":"ORD_000783","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_000783:3","order_id":"ORD_000783","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_000784:1","order_id":"ORD_000784","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_000784:2","order_id":"ORD_000784","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_000784:3","order_id":"ORD_000784","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_000784:4","order_id":"ORD_000784","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_000785:1","order_id":"ORD_000785","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_000785:2","order_id":"ORD_000785","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_000785:3","order_id":"ORD_000785","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_000785:4","order_id":"ORD_000785","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_000785:5","order_id":"ORD_000785","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_000786:1","order_id":"ORD_000786","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_000787:1","order_id":"ORD_000787","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_000787:2","order_id":"ORD_000787","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_000788:1","order_id":"ORD_000788","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_000788:2","order_id":"ORD_000788","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_000788:3","order_id":"ORD_000788","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_000789:1","order_id":"ORD_000789","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_000789:2","order_id":"ORD_000789","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_000789:3","order_id":"ORD_000789","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_000789:4","order_id":"ORD_000789","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_000790:1","order_id":"ORD_000790","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_000790:2","order_id":"ORD_000790","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_000790:3","order_id":"ORD_000790","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_000790:4","order_id":"ORD_000790","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_000790:5","order_id":"ORD_000790","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_000791:1","order_id":"ORD_000791","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_000792:1","order_id":"ORD_000792","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_000792:2","order_id":"ORD_000792","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_000793:1","order_id":"ORD_000793","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_000793:2","order_id":"ORD_000793","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_000793:3","order_id":"ORD_000793","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_000794:1","order_id":"ORD_000794","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_000794:2","order_id":"ORD_000794","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_000794:3","order_id":"ORD_000794","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_000794:4","order_id":"ORD_000794","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_000795:1","order_id":"ORD_000795","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_000795:2","order_id":"ORD_000795","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_000795:3","order_id":"ORD_000795","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_000795:4","order_id":"ORD_000795","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_000795:5","order_id":"ORD_000795","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_000796:1","order_id":"ORD_000796","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_000797:1","order_id":"ORD_000797","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_000797:2","order_id":"ORD_000797","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_000798:1","order_id":"ORD_000798","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_000798:2","order_id":"ORD_000798","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_000798:3","order_id":"ORD_000798","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_000799:1","order_id":"ORD_000799","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_000799:2","order_id":"ORD_000799","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_000799:3","order_id":"ORD_000799","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_000799:4","order_id":"ORD_000799","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_000800:1","order_id":"ORD_000800","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_000800:2","order_id":"ORD_000800","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_000800:3","order_id":"ORD_000800","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_000800:4","order_id":"ORD_000800","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_000800:5","order_id":"ORD_000800","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_000801:1","order_id":"ORD_000801","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_000802:1","order_id":"ORD_000802","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_000802:2","order_id":"ORD_000802","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_000803:1","order_id":"ORD_000803","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_000803:2","order_id":"ORD_000803","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_000803:3","order_id":"ORD_000803","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_000804:1","order_id":"ORD_000804","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_000804:2","order_id":"ORD_000804","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_000804:3","order_id":"ORD_000804","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_000804:4","order_id":"ORD_000804","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_000805:1","order_id":"ORD_000805","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_000805:2","order_id":"ORD_000805","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_000805:3","order_id":"ORD_000805","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_000805:4","order_id":"ORD_000805","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_000805:5","order_id":"ORD_000805","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_000806:1","order_id":"ORD_000806","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_000807:1","order_id":"ORD_000807","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_000807:2","order_id":"ORD_000807","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_000808:1","order_id":"ORD_000808","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_000808:2","order_id":"ORD_000808","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_000808:3","order_id":"ORD_000808","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_000809:1","order_id":"ORD_000809","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_000809:2","order_id":"ORD_000809","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_000809:3","order_id":"ORD_000809","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_000809:4","order_id":"ORD_000809","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_000810:1","order_id":"ORD_000810","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_000810:2","order_id":"ORD_000810","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_000810:3","order_id":"ORD_000810","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_000810:4","order_id":"ORD_000810","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_000810:5","order_id":"ORD_000810","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_000811:1","order_id":"ORD_000811","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_000812:1","order_id":"ORD_000812","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_000812:2","order_id":"ORD_000812","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_000813:1","order_id":"ORD_000813","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_000813:2","order_id":"ORD_000813","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_000813:3","order_id":"ORD_000813","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_000814:1","order_id":"ORD_000814","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_000814:2","order_id":"ORD_000814","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_000814:3","order_id":"ORD_000814","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_000814:4","order_id":"ORD_000814","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_000815:1","order_id":"ORD_000815","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_000815:2","order_id":"ORD_000815","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_000815:3","order_id":"ORD_000815","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_000815:4","order_id":"ORD_000815","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_000815:5","order_id":"ORD_000815","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_000816:1","order_id":"ORD_000816","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_000817:1","order_id":"ORD_000817","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_000817:2","order_id":"ORD_000817","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_000818:1","order_id":"ORD_000818","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_000818:2","order_id":"ORD_000818","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_000818:3","order_id":"ORD_000818","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_000819:1","order_id":"ORD_000819","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_000819:2","order_id":"ORD_000819","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_000819:3","order_id":"ORD_000819","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_000819:4","order_id":"ORD_000819","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_000820:1","order_id":"ORD_000820","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_000820:2","order_id":"ORD_000820","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_000820:3","order_id":"ORD_000820","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_000820:4","order_id":"ORD_000820","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_000820:5","order_id":"ORD_000820","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_000821:1","order_id":"ORD_000821","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_000822:1","order_id":"ORD_000822","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_000822:2","order_id":"ORD_000822","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_000823:1","order_id":"ORD_000823","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_000823:2","order_id":"ORD_000823","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_000823:3","order_id":"ORD_000823","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_000824:1","order_id":"ORD_000824","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_000824:2","order_id":"ORD_000824","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_000824:3","order_id":"ORD_000824","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_000824:4","order_id":"ORD_000824","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_000825:1","order_id":"ORD_000825","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_000825:2","order_id":"ORD_000825","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_000825:3","order_id":"ORD_000825","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_000825:4","order_id":"ORD_000825","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_000825:5","order_id":"ORD_000825","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_000826:1","order_id":"ORD_000826","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_000827:1","order_id":"ORD_000827","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_000827:2","order_id":"ORD_000827","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_000828:1","order_id":"ORD_000828","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_000828:2","order_id":"ORD_000828","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_000828:3","order_id":"ORD_000828","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_000829:1","order_id":"ORD_000829","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_000829:2","order_id":"ORD_000829","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_000829:3","order_id":"ORD_000829","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_000829:4","order_id":"ORD_000829","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_000830:1","order_id":"ORD_000830","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_000830:2","order_id":"ORD_000830","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_000830:3","order_id":"ORD_000830","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_000830:4","order_id":"ORD_000830","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_000830:5","order_id":"ORD_000830","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_000831:1","order_id":"ORD_000831","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_000832:1","order_id":"ORD_000832","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_000832:2","order_id":"ORD_000832","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_000833:1","order_id":"ORD_000833","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_000833:2","order_id":"ORD_000833","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_000833:3","order_id":"ORD_000833","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_000834:1","order_id":"ORD_000834","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_000834:2","order_id":"ORD_000834","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_000834:3","order_id":"ORD_000834","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_000834:4","order_id":"ORD_000834","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_000835:1","order_id":"ORD_000835","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_000835:2","order_id":"ORD_000835","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_000835:3","order_id":"ORD_000835","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_000835:4","order_id":"ORD_000835","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_000835:5","order_id":"ORD_000835","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_000836:1","order_id":"ORD_000836","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_000837:1","order_id":"ORD_000837","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_000837:2","order_id":"ORD_000837","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_000838:1","order_id":"ORD_000838","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_000838:2","order_id":"ORD_000838","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_000838:3","order_id":"ORD_000838","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_000839:1","order_id":"ORD_000839","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_000839:2","order_id":"ORD_000839","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_000839:3","order_id":"ORD_000839","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_000839:4","order_id":"ORD_000839","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_000840:1","order_id":"ORD_000840","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_000840:2","order_id":"ORD_000840","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_000840:3","order_id":"ORD_000840","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_000840:4","order_id":"ORD_000840","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_000840:5","order_id":"ORD_000840","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_000841:1","order_id":"ORD_000841","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_000842:1","order_id":"ORD_000842","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_000842:2","order_id":"ORD_000842","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_000843:1","order_id":"ORD_000843","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_000843:2","order_id":"ORD_000843","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_000843:3","order_id":"ORD_000843","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_000844:1","order_id":"ORD_000844","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_000844:2","order_id":"ORD_000844","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_000844:3","order_id":"ORD_000844","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_000844:4","order_id":"ORD_000844","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_000845:1","order_id":"ORD_000845","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_000845:2","order_id":"ORD_000845","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_000845:3","order_id":"ORD_000845","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_000845:4","order_id":"ORD_000845","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_000845:5","order_id":"ORD_000845","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_000846:1","order_id":"ORD_000846","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_000847:1","order_id":"ORD_000847","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_000847:2","order_id":"ORD_000847","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_000848:1","order_id":"ORD_000848","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_000848:2","order_id":"ORD_000848","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_000848:3","order_id":"ORD_000848","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_000849:1","order_id":"ORD_000849","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_000849:2","order_id":"ORD_000849","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_000849:3","order_id":"ORD_000849","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_000849:4","order_id":"ORD_000849","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_000850:1","order_id":"ORD_000850","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_000850:2","order_id":"ORD_000850","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_000850:3","order_id":"ORD_000850","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_000850:4","order_id":"ORD_000850","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_000850:5","order_id":"ORD_000850","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_000851:1","order_id":"ORD_000851","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_000852:1","order_id":"ORD_000852","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_000852:2","order_id":"ORD_000852","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_000853:1","order_id":"ORD_000853","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_000853:2","order_id":"ORD_000853","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_000853:3","order_id":"ORD_000853","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_000854:1","order_id":"ORD_000854","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_000854:2","order_id":"ORD_000854","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_000854:3","order_id":"ORD_000854","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_000854:4","order_id":"ORD_000854","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_000855:1","order_id":"ORD_000855","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_000855:2","order_id":"ORD_000855","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_000855:3","order_id":"ORD_000855","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_000855:4","order_id":"ORD_000855","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_000855:5","order_id":"ORD_000855","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_000856:1","order_id":"ORD_000856","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_000857:1","order_id":"ORD_000857","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_000857:2","order_id":"ORD_000857","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_000858:1","order_id":"ORD_000858","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_000858:2","order_id":"ORD_000858","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_000858:3","order_id":"ORD_000858","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_000859:1","order_id":"ORD_000859","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_000859:2","order_id":"ORD_000859","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_000859:3","order_id":"ORD_000859","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_000859:4","order_id":"ORD_000859","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_000860:1","order_id":"ORD_000860","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_000860:2","order_id":"ORD_000860","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_000860:3","order_id":"ORD_000860","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_000860:4","order_id":"ORD_000860","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_000860:5","order_id":"ORD_000860","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_000861:1","order_id":"ORD_000861","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_000862:1","order_id":"ORD_000862","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_000862:2","order_id":"ORD_000862","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_000863:1","order_id":"ORD_000863","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_000863:2","order_id":"ORD_000863","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_000863:3","order_id":"ORD_000863","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_000864:1","order_id":"ORD_000864","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_000864:2","order_id":"ORD_000864","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_000864:3","order_id":"ORD_000864","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_000864:4","order_id":"ORD_000864","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_000865:1","order_id":"ORD_000865","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_000865:2","order_id":"ORD_000865","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_000865:3","order_id":"ORD_000865","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_000865:4","order_id":"ORD_000865","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_000865:5","order_id":"ORD_000865","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_000866:1","order_id":"ORD_000866","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_000867:1","order_id":"ORD_000867","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_000867:2","order_id":"ORD_000867","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_000868:1","order_id":"ORD_000868","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_000868:2","order_id":"ORD_000868","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_000868:3","order_id":"ORD_000868","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_000869:1","order_id":"ORD_000869","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_000869:2","order_id":"ORD_000869","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_000869:3","order_id":"ORD_000869","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_000869:4","order_id":"ORD_000869","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_000870:1","order_id":"ORD_000870","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_000870:2","order_id":"ORD_000870","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_000870:3","order_id":"ORD_000870","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_000870:4","order_id":"ORD_000870","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_000870:5","order_id":"ORD_000870","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_000871:1","order_id":"ORD_000871","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_000872:1","order_id":"ORD_000872","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_000872:2","order_id":"ORD_000872","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_000873:1","order_id":"ORD_000873","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_000873:2","order_id":"ORD_000873","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_000873:3","order_id":"ORD_000873","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_000874:1","order_id":"ORD_000874","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_000874:2","order_id":"ORD_000874","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_000874:3","order_id":"ORD_000874","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_000874:4","order_id":"ORD_000874","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_000875:1","order_id":"ORD_000875","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_000875:2","order_id":"ORD_000875","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_000875:3","order_id":"ORD_000875","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_000875:4","order_id":"ORD_000875","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_000875:5","order_id":"ORD_000875","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_000876:1","order_id":"ORD_000876","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_000877:1","order_id":"ORD_000877","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_000877:2","order_id":"ORD_000877","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_000878:1","order_id":"ORD_000878","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_000878:2","order_id":"ORD_000878","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_000878:3","order_id":"ORD_000878","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_000879:1","order_id":"ORD_000879","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_000879:2","order_id":"ORD_000879","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_000879:3","order_id":"ORD_000879","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_000879:4","order_id":"ORD_000879","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_000880:1","order_id":"ORD_000880","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_000880:2","order_id":"ORD_000880","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_000880:3","order_id":"ORD_000880","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_000880:4","order_id":"ORD_000880","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_000880:5","order_id":"ORD_000880","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_000881:1","order_id":"ORD_000881","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_000882:1","order_id":"ORD_000882","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_000882:2","order_id":"ORD_000882","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_000883:1","order_id":"ORD_000883","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_000883:2","order_id":"ORD_000883","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_000883:3","order_id":"ORD_000883","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_000884:1","order_id":"ORD_000884","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_000884:2","order_id":"ORD_000884","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_000884:3","order_id":"ORD_000884","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_000884:4","order_id":"ORD_000884","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_000885:1","order_id":"ORD_000885","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_000885:2","order_id":"ORD_000885","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_000885:3","order_id":"ORD_000885","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_000885:4","order_id":"ORD_000885","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_000885:5","order_id":"ORD_000885","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_000886:1","order_id":"ORD_000886","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_000887:1","order_id":"ORD_000887","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_000887:2","order_id":"ORD_000887","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_000888:1","order_id":"ORD_000888","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_000888:2","order_id":"ORD_000888","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_000888:3","order_id":"ORD_000888","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_000889:1","order_id":"ORD_000889","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_000889:2","order_id":"ORD_000889","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_000889:3","order_id":"ORD_000889","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_000889:4","order_id":"ORD_000889","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_000890:1","order_id":"ORD_000890","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_000890:2","order_id":"ORD_000890","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_000890:3","order_id":"ORD_000890","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_000890:4","order_id":"ORD_000890","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_000890:5","order_id":"ORD_000890","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_000891:1","order_id":"ORD_000891","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_000892:1","order_id":"ORD_000892","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_000892:2","order_id":"ORD_000892","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_000893:1","order_id":"ORD_000893","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_000893:2","order_id":"ORD_000893","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_000893:3","order_id":"ORD_000893","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_000894:1","order_id":"ORD_000894","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_000894:2","order_id":"ORD_000894","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_000894:3","order_id":"ORD_000894","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_000894:4","order_id":"ORD_000894","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_000895:1","order_id":"ORD_000895","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_000895:2","order_id":"ORD_000895","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_000895:3","order_id":"ORD_000895","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_000895:4","order_id":"ORD_000895","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_000895:5","order_id":"ORD_000895","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_000896:1","order_id":"ORD_000896","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_000897:1","order_id":"ORD_000897","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_000897:2","order_id":"ORD_000897","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_000898:1","order_id":"ORD_000898","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_000898:2","order_id":"ORD_000898","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_000898:3","order_id":"ORD_000898","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_000899:1","order_id":"ORD_000899","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_000899:2","order_id":"ORD_000899","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_000899:3","order_id":"ORD_000899","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_000899:4","order_id":"ORD_000899","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_000900:1","order_id":"ORD_000900","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_000900:2","order_id":"ORD_000900","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_000900:3","order_id":"ORD_000900","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_000900:4","order_id":"ORD_000900","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_000900:5","order_id":"ORD_000900","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_000901:1","order_id":"ORD_000901","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_000902:1","order_id":"ORD_000902","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_000902:2","order_id":"ORD_000902","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_000903:1","order_id":"ORD_000903","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_000903:2","order_id":"ORD_000903","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_000903:3","order_id":"ORD_000903","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_000904:1","order_id":"ORD_000904","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_000904:2","order_id":"ORD_000904","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_000904:3","order_id":"ORD_000904","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_000904:4","order_id":"ORD_000904","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_000905:1","order_id":"ORD_000905","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_000905:2","order_id":"ORD_000905","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_000905:3","order_id":"ORD_000905","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_000905:4","order_id":"ORD_000905","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_000905:5","order_id":"ORD_000905","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_000906:1","order_id":"ORD_000906","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_000907:1","order_id":"ORD_000907","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_000907:2","order_id":"ORD_000907","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_000908:1","order_id":"ORD_000908","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_000908:2","order_id":"ORD_000908","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_000908:3","order_id":"ORD_000908","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_000909:1","order_id":"ORD_000909","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_000909:2","order_id":"ORD_000909","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_000909:3","order_id":"ORD_000909","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_000909:4","order_id":"ORD_000909","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_000910:1","order_id":"ORD_000910","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_000910:2","order_id":"ORD_000910","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_000910:3","order_id":"ORD_000910","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_000910:4","order_id":"ORD_000910","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_000910:5","order_id":"ORD_000910","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_000911:1","order_id":"ORD_000911","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_000912:1","order_id":"ORD_000912","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_000912:2","order_id":"ORD_000912","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_000913:1","order_id":"ORD_000913","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_000913:2","order_id":"ORD_000913","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_000913:3","order_id":"ORD_000913","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_000914:1","order_id":"ORD_000914","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_000914:2","order_id":"ORD_000914","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_000914:3","order_id":"ORD_000914","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_000914:4","order_id":"ORD_000914","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_000915:1","order_id":"ORD_000915","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_000915:2","order_id":"ORD_000915","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_000915:3","order_id":"ORD_000915","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_000915:4","order_id":"ORD_000915","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_000915:5","order_id":"ORD_000915","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_000916:1","order_id":"ORD_000916","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_000917:1","order_id":"ORD_000917","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_000917:2","order_id":"ORD_000917","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_000918:1","order_id":"ORD_000918","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_000918:2","order_id":"ORD_000918","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_000918:3","order_id":"ORD_000918","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_000919:1","order_id":"ORD_000919","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_000919:2","order_id":"ORD_000919","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_000919:3","order_id":"ORD_000919","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_000919:4","order_id":"ORD_000919","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_000920:1","order_id":"ORD_000920","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_000920:2","order_id":"ORD_000920","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_000920:3","order_id":"ORD_000920","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_000920:4","order_id":"ORD_000920","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_000920:5","order_id":"ORD_000920","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_000921:1","order_id":"ORD_000921","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_000922:1","order_id":"ORD_000922","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_000922:2","order_id":"ORD_000922","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_000923:1","order_id":"ORD_000923","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_000923:2","order_id":"ORD_000923","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_000923:3","order_id":"ORD_000923","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_000924:1","order_id":"ORD_000924","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_000924:2","order_id":"ORD_000924","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_000924:3","order_id":"ORD_000924","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_000924:4","order_id":"ORD_000924","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_000925:1","order_id":"ORD_000925","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_000925:2","order_id":"ORD_000925","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_000925:3","order_id":"ORD_000925","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_000925:4","order_id":"ORD_000925","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_000925:5","order_id":"ORD_000925","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_000926:1","order_id":"ORD_000926","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_000927:1","order_id":"ORD_000927","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_000927:2","order_id":"ORD_000927","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_000928:1","order_id":"ORD_000928","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_000928:2","order_id":"ORD_000928","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_000928:3","order_id":"ORD_000928","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_000929:1","order_id":"ORD_000929","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_000929:2","order_id":"ORD_000929","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_000929:3","order_id":"ORD_000929","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_000929:4","order_id":"ORD_000929","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_000930:1","order_id":"ORD_000930","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_000930:2","order_id":"ORD_000930","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_000930:3","order_id":"ORD_000930","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_000930:4","order_id":"ORD_000930","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_000930:5","order_id":"ORD_000930","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_000931:1","order_id":"ORD_000931","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_000932:1","order_id":"ORD_000932","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_000932:2","order_id":"ORD_000932","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_000933:1","order_id":"ORD_000933","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_000933:2","order_id":"ORD_000933","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_000933:3","order_id":"ORD_000933","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_000934:1","order_id":"ORD_000934","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_000934:2","order_id":"ORD_000934","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_000934:3","order_id":"ORD_000934","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_000934:4","order_id":"ORD_000934","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_000935:1","order_id":"ORD_000935","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_000935:2","order_id":"ORD_000935","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_000935:3","order_id":"ORD_000935","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_000935:4","order_id":"ORD_000935","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_000935:5","order_id":"ORD_000935","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_000936:1","order_id":"ORD_000936","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_000937:1","order_id":"ORD_000937","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_000937:2","order_id":"ORD_000937","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_000938:1","order_id":"ORD_000938","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_000938:2","order_id":"ORD_000938","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_000938:3","order_id":"ORD_000938","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_000939:1","order_id":"ORD_000939","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_000939:2","order_id":"ORD_000939","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_000939:3","order_id":"ORD_000939","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_000939:4","order_id":"ORD_000939","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_000940:1","order_id":"ORD_000940","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_000940:2","order_id":"ORD_000940","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_000940:3","order_id":"ORD_000940","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_000940:4","order_id":"ORD_000940","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_000940:5","order_id":"ORD_000940","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_000941:1","order_id":"ORD_000941","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_000942:1","order_id":"ORD_000942","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_000942:2","order_id":"ORD_000942","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_000943:1","order_id":"ORD_000943","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_000943:2","order_id":"ORD_000943","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_000943:3","order_id":"ORD_000943","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_000944:1","order_id":"ORD_000944","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_000944:2","order_id":"ORD_000944","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_000944:3","order_id":"ORD_000944","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_000944:4","order_id":"ORD_000944","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_000945:1","order_id":"ORD_000945","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_000945:2","order_id":"ORD_000945","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_000945:3","order_id":"ORD_000945","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_000945:4","order_id":"ORD_000945","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_000945:5","order_id":"ORD_000945","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_000946:1","order_id":"ORD_000946","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_000947:1","order_id":"ORD_000947","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_000947:2","order_id":"ORD_000947","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_000948:1","order_id":"ORD_000948","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_000948:2","order_id":"ORD_000948","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_000948:3","order_id":"ORD_000948","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_000949:1","order_id":"ORD_000949","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_000949:2","order_id":"ORD_000949","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_000949:3","order_id":"ORD_000949","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_000949:4","order_id":"ORD_000949","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_000950:1","order_id":"ORD_000950","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_000950:2","order_id":"ORD_000950","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_000950:3","order_id":"ORD_000950","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_000950:4","order_id":"ORD_000950","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_000950:5","order_id":"ORD_000950","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_000951:1","order_id":"ORD_000951","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_000952:1","order_id":"ORD_000952","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_000952:2","order_id":"ORD_000952","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_000953:1","order_id":"ORD_000953","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_000953:2","order_id":"ORD_000953","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_000953:3","order_id":"ORD_000953","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_000954:1","order_id":"ORD_000954","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_000954:2","order_id":"ORD_000954","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_000954:3","order_id":"ORD_000954","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_000954:4","order_id":"ORD_000954","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_000955:1","order_id":"ORD_000955","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_000955:2","order_id":"ORD_000955","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_000955:3","order_id":"ORD_000955","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_000955:4","order_id":"ORD_000955","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_000955:5","order_id":"ORD_000955","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_000956:1","order_id":"ORD_000956","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_000957:1","order_id":"ORD_000957","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_000957:2","order_id":"ORD_000957","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_000958:1","order_id":"ORD_000958","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_000958:2","order_id":"ORD_000958","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_000958:3","order_id":"ORD_000958","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_000959:1","order_id":"ORD_000959","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_000959:2","order_id":"ORD_000959","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_000959:3","order_id":"ORD_000959","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_000959:4","order_id":"ORD_000959","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_000960:1","order_id":"ORD_000960","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_000960:2","order_id":"ORD_000960","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_000960:3","order_id":"ORD_000960","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_000960:4","order_id":"ORD_000960","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_000960:5","order_id":"ORD_000960","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_000961:1","order_id":"ORD_000961","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_000962:1","order_id":"ORD_000962","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_000962:2","order_id":"ORD_000962","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_000963:1","order_id":"ORD_000963","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_000963:2","order_id":"ORD_000963","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_000963:3","order_id":"ORD_000963","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_000964:1","order_id":"ORD_000964","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_000964:2","order_id":"ORD_000964","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_000964:3","order_id":"ORD_000964","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_000964:4","order_id":"ORD_000964","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_000965:1","order_id":"ORD_000965","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_000965:2","order_id":"ORD_000965","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_000965:3","order_id":"ORD_000965","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_000965:4","order_id":"ORD_000965","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_000965:5","order_id":"ORD_000965","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_000966:1","order_id":"ORD_000966","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_000967:1","order_id":"ORD_000967","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_000967:2","order_id":"ORD_000967","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_000968:1","order_id":"ORD_000968","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_000968:2","order_id":"ORD_000968","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_000968:3","order_id":"ORD_000968","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_000969:1","order_id":"ORD_000969","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_000969:2","order_id":"ORD_000969","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_000969:3","order_id":"ORD_000969","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_000969:4","order_id":"ORD_000969","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_000970:1","order_id":"ORD_000970","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_000970:2","order_id":"ORD_000970","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_000970:3","order_id":"ORD_000970","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_000970:4","order_id":"ORD_000970","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_000970:5","order_id":"ORD_000970","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_000971:1","order_id":"ORD_000971","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_000972:1","order_id":"ORD_000972","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_000972:2","order_id":"ORD_000972","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_000973:1","order_id":"ORD_000973","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_000973:2","order_id":"ORD_000973","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_000973:3","order_id":"ORD_000973","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_000974:1","order_id":"ORD_000974","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_000974:2","order_id":"ORD_000974","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_000974:3","order_id":"ORD_000974","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_000974:4","order_id":"ORD_000974","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_000975:1","order_id":"ORD_000975","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_000975:2","order_id":"ORD_000975","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_000975:3","order_id":"ORD_000975","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_000975:4","order_id":"ORD_000975","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_000975:5","order_id":"ORD_000975","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_000976:1","order_id":"ORD_000976","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_000977:1","order_id":"ORD_000977","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_000977:2","order_id":"ORD_000977","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_000978:1","order_id":"ORD_000978","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_000978:2","order_id":"ORD_000978","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_000978:3","order_id":"ORD_000978","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_000979:1","order_id":"ORD_000979","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_000979:2","order_id":"ORD_000979","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_000979:3","order_id":"ORD_000979","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_000979:4","order_id":"ORD_000979","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_000980:1","order_id":"ORD_000980","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_000980:2","order_id":"ORD_000980","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_000980:3","order_id":"ORD_000980","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_000980:4","order_id":"ORD_000980","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_000980:5","order_id":"ORD_000980","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_000981:1","order_id":"ORD_000981","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_000982:1","order_id":"ORD_000982","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_000982:2","order_id":"ORD_000982","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_000983:1","order_id":"ORD_000983","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_000983:2","order_id":"ORD_000983","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_000983:3","order_id":"ORD_000983","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_000984:1","order_id":"ORD_000984","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_000984:2","order_id":"ORD_000984","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_000984:3","order_id":"ORD_000984","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_000984:4","order_id":"ORD_000984","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_000985:1","order_id":"ORD_000985","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_000985:2","order_id":"ORD_000985","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_000985:3","order_id":"ORD_000985","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_000985:4","order_id":"ORD_000985","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_000985:5","order_id":"ORD_000985","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_000986:1","order_id":"ORD_000986","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_000987:1","order_id":"ORD_000987","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_000987:2","order_id":"ORD_000987","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_000988:1","order_id":"ORD_000988","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_000988:2","order_id":"ORD_000988","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_000988:3","order_id":"ORD_000988","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_000989:1","order_id":"ORD_000989","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_000989:2","order_id":"ORD_000989","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_000989:3","order_id":"ORD_000989","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_000989:4","order_id":"ORD_000989","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_000990:1","order_id":"ORD_000990","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_000990:2","order_id":"ORD_000990","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_000990:3","order_id":"ORD_000990","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_000990:4","order_id":"ORD_000990","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_000990:5","order_id":"ORD_000990","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_000991:1","order_id":"ORD_000991","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_000992:1","order_id":"ORD_000992","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_000992:2","order_id":"ORD_000992","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_000993:1","order_id":"ORD_000993","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_000993:2","order_id":"ORD_000993","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_000993:3","order_id":"ORD_000993","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_000994:1","order_id":"ORD_000994","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_000994:2","order_id":"ORD_000994","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_000994:3","order_id":"ORD_000994","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_000994:4","order_id":"ORD_000994","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_000995:1","order_id":"ORD_000995","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_000995:2","order_id":"ORD_000995","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_000995:3","order_id":"ORD_000995","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_000995:4","order_id":"ORD_000995","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_000995:5","order_id":"ORD_000995","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_000996:1","order_id":"ORD_000996","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_000997:1","order_id":"ORD_000997","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_000997:2","order_id":"ORD_000997","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_000998:1","order_id":"ORD_000998","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_000998:2","order_id":"ORD_000998","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_000998:3","order_id":"ORD_000998","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_000999:1","order_id":"ORD_000999","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_000999:2","order_id":"ORD_000999","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_000999:3","order_id":"ORD_000999","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_000999:4","order_id":"ORD_000999","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_001000:1","order_id":"ORD_001000","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_001000:2","order_id":"ORD_001000","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_001000:3","order_id":"ORD_001000","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_001000:4","order_id":"ORD_001000","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_001000:5","order_id":"ORD_001000","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_001001:1","order_id":"ORD_001001","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_001002:1","order_id":"ORD_001002","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_001002:2","order_id":"ORD_001002","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_001003:1","order_id":"ORD_001003","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_001003:2","order_id":"ORD_001003","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_001003:3","order_id":"ORD_001003","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_001004:1","order_id":"ORD_001004","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_001004:2","order_id":"ORD_001004","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_001004:3","order_id":"ORD_001004","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_001004:4","order_id":"ORD_001004","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_001005:1","order_id":"ORD_001005","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_001005:2","order_id":"ORD_001005","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_001005:3","order_id":"ORD_001005","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_001005:4","order_id":"ORD_001005","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_001005:5","order_id":"ORD_001005","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_001006:1","order_id":"ORD_001006","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_001007:1","order_id":"ORD_001007","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_001007:2","order_id":"ORD_001007","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_001008:1","order_id":"ORD_001008","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_001008:2","order_id":"ORD_001008","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_001008:3","order_id":"ORD_001008","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_001009:1","order_id":"ORD_001009","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_001009:2","order_id":"ORD_001009","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_001009:3","order_id":"ORD_001009","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_001009:4","order_id":"ORD_001009","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_001010:1","order_id":"ORD_001010","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_001010:2","order_id":"ORD_001010","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_001010:3","order_id":"ORD_001010","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_001010:4","order_id":"ORD_001010","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_001010:5","order_id":"ORD_001010","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_001011:1","order_id":"ORD_001011","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_001012:1","order_id":"ORD_001012","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_001012:2","order_id":"ORD_001012","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_001013:1","order_id":"ORD_001013","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_001013:2","order_id":"ORD_001013","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_001013:3","order_id":"ORD_001013","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_001014:1","order_id":"ORD_001014","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_001014:2","order_id":"ORD_001014","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_001014:3","order_id":"ORD_001014","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_001014:4","order_id":"ORD_001014","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_001015:1","order_id":"ORD_001015","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_001015:2","order_id":"ORD_001015","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_001015:3","order_id":"ORD_001015","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_001015:4","order_id":"ORD_001015","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_001015:5","order_id":"ORD_001015","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_001016:1","order_id":"ORD_001016","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_001017:1","order_id":"ORD_001017","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_001017:2","order_id":"ORD_001017","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_001018:1","order_id":"ORD_001018","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_001018:2","order_id":"ORD_001018","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_001018:3","order_id":"ORD_001018","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_001019:1","order_id":"ORD_001019","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_001019:2","order_id":"ORD_001019","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_001019:3","order_id":"ORD_001019","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_001019:4","order_id":"ORD_001019","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_001020:1","order_id":"ORD_001020","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_001020:2","order_id":"ORD_001020","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_001020:3","order_id":"ORD_001020","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_001020:4","order_id":"ORD_001020","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_001020:5","order_id":"ORD_001020","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_001021:1","order_id":"ORD_001021","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_001022:1","order_id":"ORD_001022","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_001022:2","order_id":"ORD_001022","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_001023:1","order_id":"ORD_001023","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_001023:2","order_id":"ORD_001023","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_001023:3","order_id":"ORD_001023","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_001024:1","order_id":"ORD_001024","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_001024:2","order_id":"ORD_001024","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_001024:3","order_id":"ORD_001024","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_001024:4","order_id":"ORD_001024","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_001025:1","order_id":"ORD_001025","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_001025:2","order_id":"ORD_001025","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_001025:3","order_id":"ORD_001025","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_001025:4","order_id":"ORD_001025","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_001025:5","order_id":"ORD_001025","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_001026:1","order_id":"ORD_001026","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_001027:1","order_id":"ORD_001027","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_001027:2","order_id":"ORD_001027","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_001028:1","order_id":"ORD_001028","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_001028:2","order_id":"ORD_001028","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_001028:3","order_id":"ORD_001028","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_001029:1","order_id":"ORD_001029","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_001029:2","order_id":"ORD_001029","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_001029:3","order_id":"ORD_001029","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_001029:4","order_id":"ORD_001029","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_001030:1","order_id":"ORD_001030","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_001030:2","order_id":"ORD_001030","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_001030:3","order_id":"ORD_001030","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_001030:4","order_id":"ORD_001030","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_001030:5","order_id":"ORD_001030","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_001031:1","order_id":"ORD_001031","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_001032:1","order_id":"ORD_001032","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_001032:2","order_id":"ORD_001032","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_001033:1","order_id":"ORD_001033","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_001033:2","order_id":"ORD_001033","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_001033:3","order_id":"ORD_001033","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_001034:1","order_id":"ORD_001034","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_001034:2","order_id":"ORD_001034","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_001034:3","order_id":"ORD_001034","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_001034:4","order_id":"ORD_001034","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_001035:1","order_id":"ORD_001035","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_001035:2","order_id":"ORD_001035","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_001035:3","order_id":"ORD_001035","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_001035:4","order_id":"ORD_001035","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_001035:5","order_id":"ORD_001035","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_001036:1","order_id":"ORD_001036","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_001037:1","order_id":"ORD_001037","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_001037:2","order_id":"ORD_001037","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_001038:1","order_id":"ORD_001038","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_001038:2","order_id":"ORD_001038","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_001038:3","order_id":"ORD_001038","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_001039:1","order_id":"ORD_001039","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_001039:2","order_id":"ORD_001039","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_001039:3","order_id":"ORD_001039","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_001039:4","order_id":"ORD_001039","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_001040:1","order_id":"ORD_001040","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_001040:2","order_id":"ORD_001040","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_001040:3","order_id":"ORD_001040","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_001040:4","order_id":"ORD_001040","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_001040:5","order_id":"ORD_001040","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_001041:1","order_id":"ORD_001041","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_001042:1","order_id":"ORD_001042","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_001042:2","order_id":"ORD_001042","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_001043:1","order_id":"ORD_001043","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_001043:2","order_id":"ORD_001043","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_001043:3","order_id":"ORD_001043","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_001044:1","order_id":"ORD_001044","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_001044:2","order_id":"ORD_001044","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_001044:3","order_id":"ORD_001044","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_001044:4","order_id":"ORD_001044","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_001045:1","order_id":"ORD_001045","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_001045:2","order_id":"ORD_001045","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_001045:3","order_id":"ORD_001045","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_001045:4","order_id":"ORD_001045","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_001045:5","order_id":"ORD_001045","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_001046:1","order_id":"ORD_001046","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_001047:1","order_id":"ORD_001047","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_001047:2","order_id":"ORD_001047","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_001048:1","order_id":"ORD_001048","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_001048:2","order_id":"ORD_001048","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_001048:3","order_id":"ORD_001048","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_001049:1","order_id":"ORD_001049","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_001049:2","order_id":"ORD_001049","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_001049:3","order_id":"ORD_001049","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_001049:4","order_id":"ORD_001049","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_001050:1","order_id":"ORD_001050","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_001050:2","order_id":"ORD_001050","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_001050:3","order_id":"ORD_001050","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_001050:4","order_id":"ORD_001050","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_001050:5","order_id":"ORD_001050","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_001051:1","order_id":"ORD_001051","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_001052:1","order_id":"ORD_001052","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_001052:2","order_id":"ORD_001052","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_001053:1","order_id":"ORD_001053","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_001053:2","order_id":"ORD_001053","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_001053:3","order_id":"ORD_001053","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_001054:1","order_id":"ORD_001054","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_001054:2","order_id":"ORD_001054","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_001054:3","order_id":"ORD_001054","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_001054:4","order_id":"ORD_001054","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_001055:1","order_id":"ORD_001055","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_001055:2","order_id":"ORD_001055","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_001055:3","order_id":"ORD_001055","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_001055:4","order_id":"ORD_001055","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_001055:5","order_id":"ORD_001055","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_001056:1","order_id":"ORD_001056","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_001057:1","order_id":"ORD_001057","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_001057:2","order_id":"ORD_001057","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_001058:1","order_id":"ORD_001058","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_001058:2","order_id":"ORD_001058","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_001058:3","order_id":"ORD_001058","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_001059:1","order_id":"ORD_001059","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_001059:2","order_id":"ORD_001059","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_001059:3","order_id":"ORD_001059","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_001059:4","order_id":"ORD_001059","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_001060:1","order_id":"ORD_001060","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_001060:2","order_id":"ORD_001060","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_001060:3","order_id":"ORD_001060","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_001060:4","order_id":"ORD_001060","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_001060:5","order_id":"ORD_001060","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_001061:1","order_id":"ORD_001061","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_001062:1","order_id":"ORD_001062","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_001062:2","order_id":"ORD_001062","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_001063:1","order_id":"ORD_001063","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_001063:2","order_id":"ORD_001063","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_001063:3","order_id":"ORD_001063","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_001064:1","order_id":"ORD_001064","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_001064:2","order_id":"ORD_001064","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_001064:3","order_id":"ORD_001064","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_001064:4","order_id":"ORD_001064","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_001065:1","order_id":"ORD_001065","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_001065:2","order_id":"ORD_001065","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_001065:3","order_id":"ORD_001065","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_001065:4","order_id":"ORD_001065","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_001065:5","order_id":"ORD_001065","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_001066:1","order_id":"ORD_001066","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_001067:1","order_id":"ORD_001067","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_001067:2","order_id":"ORD_001067","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_001068:1","order_id":"ORD_001068","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_001068:2","order_id":"ORD_001068","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_001068:3","order_id":"ORD_001068","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_001069:1","order_id":"ORD_001069","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_001069:2","order_id":"ORD_001069","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_001069:3","order_id":"ORD_001069","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_001069:4","order_id":"ORD_001069","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_001070:1","order_id":"ORD_001070","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_001070:2","order_id":"ORD_001070","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_001070:3","order_id":"ORD_001070","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_001070:4","order_id":"ORD_001070","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_001070:5","order_id":"ORD_001070","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_001071:1","order_id":"ORD_001071","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_001072:1","order_id":"ORD_001072","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_001072:2","order_id":"ORD_001072","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_001073:1","order_id":"ORD_001073","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_001073:2","order_id":"ORD_001073","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_001073:3","order_id":"ORD_001073","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_001074:1","order_id":"ORD_001074","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_001074:2","order_id":"ORD_001074","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_001074:3","order_id":"ORD_001074","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_001074:4","order_id":"ORD_001074","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_001075:1","order_id":"ORD_001075","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_001075:2","order_id":"ORD_001075","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_001075:3","order_id":"ORD_001075","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_001075:4","order_id":"ORD_001075","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_001075:5","order_id":"ORD_001075","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_001076:1","order_id":"ORD_001076","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_001077:1","order_id":"ORD_001077","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_001077:2","order_id":"ORD_001077","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_001078:1","order_id":"ORD_001078","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_001078:2","order_id":"ORD_001078","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_001078:3","order_id":"ORD_001078","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_001079:1","order_id":"ORD_001079","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_001079:2","order_id":"ORD_001079","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_001079:3","order_id":"ORD_001079","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_001079:4","order_id":"ORD_001079","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_001080:1","order_id":"ORD_001080","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_001080:2","order_id":"ORD_001080","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_001080:3","order_id":"ORD_001080","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_001080:4","order_id":"ORD_001080","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_001080:5","order_id":"ORD_001080","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_001081:1","order_id":"ORD_001081","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_001082:1","order_id":"ORD_001082","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_001082:2","order_id":"ORD_001082","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_001083:1","order_id":"ORD_001083","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_001083:2","order_id":"ORD_001083","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_001083:3","order_id":"ORD_001083","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_001084:1","order_id":"ORD_001084","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_001084:2","order_id":"ORD_001084","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_001084:3","order_id":"ORD_001084","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_001084:4","order_id":"ORD_001084","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_001085:1","order_id":"ORD_001085","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_001085:2","order_id":"ORD_001085","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_001085:3","order_id":"ORD_001085","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_001085:4","order_id":"ORD_001085","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_001085:5","order_id":"ORD_001085","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_001086:1","order_id":"ORD_001086","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_001087:1","order_id":"ORD_001087","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_001087:2","order_id":"ORD_001087","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_001088:1","order_id":"ORD_001088","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_001088:2","order_id":"ORD_001088","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_001088:3","order_id":"ORD_001088","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_001089:1","order_id":"ORD_001089","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_001089:2","order_id":"ORD_001089","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_001089:3","order_id":"ORD_001089","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_001089:4","order_id":"ORD_001089","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_001090:1","order_id":"ORD_001090","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_001090:2","order_id":"ORD_001090","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_001090:3","order_id":"ORD_001090","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_001090:4","order_id":"ORD_001090","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_001090:5","order_id":"ORD_001090","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_001091:1","order_id":"ORD_001091","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_001092:1","order_id":"ORD_001092","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_001092:2","order_id":"ORD_001092","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_001093:1","order_id":"ORD_001093","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_001093:2","order_id":"ORD_001093","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_001093:3","order_id":"ORD_001093","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_001094:1","order_id":"ORD_001094","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_001094:2","order_id":"ORD_001094","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_001094:3","order_id":"ORD_001094","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_001094:4","order_id":"ORD_001094","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_001095:1","order_id":"ORD_001095","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_001095:2","order_id":"ORD_001095","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_001095:3","order_id":"ORD_001095","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_001095:4","order_id":"ORD_001095","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_001095:5","order_id":"ORD_001095","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_001096:1","order_id":"ORD_001096","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_001097:1","order_id":"ORD_001097","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_001097:2","order_id":"ORD_001097","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_001098:1","order_id":"ORD_001098","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_001098:2","order_id":"ORD_001098","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_001098:3","order_id":"ORD_001098","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_001099:1","order_id":"ORD_001099","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_001099:2","order_id":"ORD_001099","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_001099:3","order_id":"ORD_001099","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_001099:4","order_id":"ORD_001099","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_001100:1","order_id":"ORD_001100","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_001100:2","order_id":"ORD_001100","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_001100:3","order_id":"ORD_001100","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_001100:4","order_id":"ORD_001100","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_001100:5","order_id":"ORD_001100","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_001101:1","order_id":"ORD_001101","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_001102:1","order_id":"ORD_001102","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_001102:2","order_id":"ORD_001102","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_001103:1","order_id":"ORD_001103","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_001103:2","order_id":"ORD_001103","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_001103:3","order_id":"ORD_001103","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_001104:1","order_id":"ORD_001104","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_001104:2","order_id":"ORD_001104","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_001104:3","order_id":"ORD_001104","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_001104:4","order_id":"ORD_001104","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_001105:1","order_id":"ORD_001105","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_001105:2","order_id":"ORD_001105","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_001105:3","order_id":"ORD_001105","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_001105:4","order_id":"ORD_001105","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_001105:5","order_id":"ORD_001105","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_001106:1","order_id":"ORD_001106","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_001107:1","order_id":"ORD_001107","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_001107:2","order_id":"ORD_001107","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_001108:1","order_id":"ORD_001108","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_001108:2","order_id":"ORD_001108","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_001108:3","order_id":"ORD_001108","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_001109:1","order_id":"ORD_001109","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_001109:2","order_id":"ORD_001109","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_001109:3","order_id":"ORD_001109","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_001109:4","order_id":"ORD_001109","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_001110:1","order_id":"ORD_001110","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_001110:2","order_id":"ORD_001110","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_001110:3","order_id":"ORD_001110","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_001110:4","order_id":"ORD_001110","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_001110:5","order_id":"ORD_001110","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_001111:1","order_id":"ORD_001111","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_001112:1","order_id":"ORD_001112","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_001112:2","order_id":"ORD_001112","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_001113:1","order_id":"ORD_001113","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_001113:2","order_id":"ORD_001113","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_001113:3","order_id":"ORD_001113","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_001114:1","order_id":"ORD_001114","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_001114:2","order_id":"ORD_001114","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_001114:3","order_id":"ORD_001114","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_001114:4","order_id":"ORD_001114","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_001115:1","order_id":"ORD_001115","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_001115:2","order_id":"ORD_001115","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_001115:3","order_id":"ORD_001115","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_001115:4","order_id":"ORD_001115","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_001115:5","order_id":"ORD_001115","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_001116:1","order_id":"ORD_001116","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_001117:1","order_id":"ORD_001117","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_001117:2","order_id":"ORD_001117","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_001118:1","order_id":"ORD_001118","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_001118:2","order_id":"ORD_001118","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_001118:3","order_id":"ORD_001118","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_001119:1","order_id":"ORD_001119","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_001119:2","order_id":"ORD_001119","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_001119:3","order_id":"ORD_001119","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_001119:4","order_id":"ORD_001119","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_001120:1","order_id":"ORD_001120","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_001120:2","order_id":"ORD_001120","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_001120:3","order_id":"ORD_001120","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_001120:4","order_id":"ORD_001120","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_001120:5","order_id":"ORD_001120","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_001121:1","order_id":"ORD_001121","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_001122:1","order_id":"ORD_001122","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_001122:2","order_id":"ORD_001122","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_001123:1","order_id":"ORD_001123","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_001123:2","order_id":"ORD_001123","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_001123:3","order_id":"ORD_001123","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_001124:1","order_id":"ORD_001124","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_001124:2","order_id":"ORD_001124","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_001124:3","order_id":"ORD_001124","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_001124:4","order_id":"ORD_001124","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_001125:1","order_id":"ORD_001125","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_001125:2","order_id":"ORD_001125","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_001125:3","order_id":"ORD_001125","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_001125:4","order_id":"ORD_001125","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_001125:5","order_id":"ORD_001125","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_001126:1","order_id":"ORD_001126","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_001127:1","order_id":"ORD_001127","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_001127:2","order_id":"ORD_001127","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_001128:1","order_id":"ORD_001128","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_001128:2","order_id":"ORD_001128","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_001128:3","order_id":"ORD_001128","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_001129:1","order_id":"ORD_001129","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_001129:2","order_id":"ORD_001129","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_001129:3","order_id":"ORD_001129","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_001129:4","order_id":"ORD_001129","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_001130:1","order_id":"ORD_001130","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_001130:2","order_id":"ORD_001130","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_001130:3","order_id":"ORD_001130","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_001130:4","order_id":"ORD_001130","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_001130:5","order_id":"ORD_001130","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_001131:1","order_id":"ORD_001131","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_001132:1","order_id":"ORD_001132","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_001132:2","order_id":"ORD_001132","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_001133:1","order_id":"ORD_001133","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_001133:2","order_id":"ORD_001133","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_001133:3","order_id":"ORD_001133","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_001134:1","order_id":"ORD_001134","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_001134:2","order_id":"ORD_001134","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_001134:3","order_id":"ORD_001134","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_001134:4","order_id":"ORD_001134","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_001135:1","order_id":"ORD_001135","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_001135:2","order_id":"ORD_001135","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_001135:3","order_id":"ORD_001135","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_001135:4","order_id":"ORD_001135","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_001135:5","order_id":"ORD_001135","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_001136:1","order_id":"ORD_001136","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_001137:1","order_id":"ORD_001137","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_001137:2","order_id":"ORD_001137","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_001138:1","order_id":"ORD_001138","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_001138:2","order_id":"ORD_001138","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_001138:3","order_id":"ORD_001138","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_001139:1","order_id":"ORD_001139","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_001139:2","order_id":"ORD_001139","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_001139:3","order_id":"ORD_001139","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_001139:4","order_id":"ORD_001139","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_001140:1","order_id":"ORD_001140","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_001140:2","order_id":"ORD_001140","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_001140:3","order_id":"ORD_001140","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_001140:4","order_id":"ORD_001140","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_001140:5","order_id":"ORD_001140","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_001141:1","order_id":"ORD_001141","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_001142:1","order_id":"ORD_001142","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_001142:2","order_id":"ORD_001142","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_001143:1","order_id":"ORD_001143","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_001143:2","order_id":"ORD_001143","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_001143:3","order_id":"ORD_001143","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_001144:1","order_id":"ORD_001144","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_001144:2","order_id":"ORD_001144","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_001144:3","order_id":"ORD_001144","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_001144:4","order_id":"ORD_001144","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_001145:1","order_id":"ORD_001145","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_001145:2","order_id":"ORD_001145","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_001145:3","order_id":"ORD_001145","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_001145:4","order_id":"ORD_001145","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_001145:5","order_id":"ORD_001145","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_001146:1","order_id":"ORD_001146","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_001147:1","order_id":"ORD_001147","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_001147:2","order_id":"ORD_001147","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_001148:1","order_id":"ORD_001148","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_001148:2","order_id":"ORD_001148","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_001148:3","order_id":"ORD_001148","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_001149:1","order_id":"ORD_001149","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_001149:2","order_id":"ORD_001149","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_001149:3","order_id":"ORD_001149","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_001149:4","order_id":"ORD_001149","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_001150:1","order_id":"ORD_001150","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_001150:2","order_id":"ORD_001150","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_001150:3","order_id":"ORD_001150","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_001150:4","order_id":"ORD_001150","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_001150:5","order_id":"ORD_001150","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_001151:1","order_id":"ORD_001151","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_001152:1","order_id":"ORD_001152","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_001152:2","order_id":"ORD_001152","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_001153:1","order_id":"ORD_001153","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_001153:2","order_id":"ORD_001153","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_001153:3","order_id":"ORD_001153","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_001154:1","order_id":"ORD_001154","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_001154:2","order_id":"ORD_001154","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_001154:3","order_id":"ORD_001154","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_001154:4","order_id":"ORD_001154","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_001155:1","order_id":"ORD_001155","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_001155:2","order_id":"ORD_001155","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_001155:3","order_id":"ORD_001155","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_001155:4","order_id":"ORD_001155","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_001155:5","order_id":"ORD_001155","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_001156:1","order_id":"ORD_001156","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_001157:1","order_id":"ORD_001157","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_001157:2","order_id":"ORD_001157","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_001158:1","order_id":"ORD_001158","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_001158:2","order_id":"ORD_001158","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_001158:3","order_id":"ORD_001158","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_001159:1","order_id":"ORD_001159","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_001159:2","order_id":"ORD_001159","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_001159:3","order_id":"ORD_001159","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_001159:4","order_id":"ORD_001159","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_001160:1","order_id":"ORD_001160","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_001160:2","order_id":"ORD_001160","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_001160:3","order_id":"ORD_001160","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_001160:4","order_id":"ORD_001160","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_001160:5","order_id":"ORD_001160","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_001161:1","order_id":"ORD_001161","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_001162:1","order_id":"ORD_001162","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_001162:2","order_id":"ORD_001162","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_001163:1","order_id":"ORD_001163","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_001163:2","order_id":"ORD_001163","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_001163:3","order_id":"ORD_001163","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_001164:1","order_id":"ORD_001164","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_001164:2","order_id":"ORD_001164","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_001164:3","order_id":"ORD_001164","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_001164:4","order_id":"ORD_001164","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_001165:1","order_id":"ORD_001165","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_001165:2","order_id":"ORD_001165","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_001165:3","order_id":"ORD_001165","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_001165:4","order_id":"ORD_001165","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_001165:5","order_id":"ORD_001165","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_001166:1","order_id":"ORD_001166","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_001167:1","order_id":"ORD_001167","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_001167:2","order_id":"ORD_001167","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_001168:1","order_id":"ORD_001168","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_001168:2","order_id":"ORD_001168","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_001168:3","order_id":"ORD_001168","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_001169:1","order_id":"ORD_001169","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_001169:2","order_id":"ORD_001169","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_001169:3","order_id":"ORD_001169","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_001169:4","order_id":"ORD_001169","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_001170:1","order_id":"ORD_001170","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_001170:2","order_id":"ORD_001170","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_001170:3","order_id":"ORD_001170","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_001170:4","order_id":"ORD_001170","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_001170:5","order_id":"ORD_001170","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_001171:1","order_id":"ORD_001171","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_001172:1","order_id":"ORD_001172","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_001172:2","order_id":"ORD_001172","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_001173:1","order_id":"ORD_001173","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_001173:2","order_id":"ORD_001173","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_001173:3","order_id":"ORD_001173","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_001174:1","order_id":"ORD_001174","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_001174:2","order_id":"ORD_001174","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_001174:3","order_id":"ORD_001174","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_001174:4","order_id":"ORD_001174","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_001175:1","order_id":"ORD_001175","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_001175:2","order_id":"ORD_001175","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_001175:3","order_id":"ORD_001175","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_001175:4","order_id":"ORD_001175","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_001175:5","order_id":"ORD_001175","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_001176:1","order_id":"ORD_001176","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_001177:1","order_id":"ORD_001177","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_001177:2","order_id":"ORD_001177","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_001178:1","order_id":"ORD_001178","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_001178:2","order_id":"ORD_001178","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_001178:3","order_id":"ORD_001178","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_001179:1","order_id":"ORD_001179","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_001179:2","order_id":"ORD_001179","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_001179:3","order_id":"ORD_001179","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_001179:4","order_id":"ORD_001179","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_001180:1","order_id":"ORD_001180","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_001180:2","order_id":"ORD_001180","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_001180:3","order_id":"ORD_001180","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_001180:4","order_id":"ORD_001180","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_001180:5","order_id":"ORD_001180","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_001181:1","order_id":"ORD_001181","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_001182:1","order_id":"ORD_001182","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_001182:2","order_id":"ORD_001182","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_001183:1","order_id":"ORD_001183","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_001183:2","order_id":"ORD_001183","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_001183:3","order_id":"ORD_001183","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_001184:1","order_id":"ORD_001184","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_001184:2","order_id":"ORD_001184","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_001184:3","order_id":"ORD_001184","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_001184:4","order_id":"ORD_001184","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_001185:1","order_id":"ORD_001185","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_001185:2","order_id":"ORD_001185","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_001185:3","order_id":"ORD_001185","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_001185:4","order_id":"ORD_001185","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_001185:5","order_id":"ORD_001185","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_001186:1","order_id":"ORD_001186","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_001187:1","order_id":"ORD_001187","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_001187:2","order_id":"ORD_001187","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_001188:1","order_id":"ORD_001188","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_001188:2","order_id":"ORD_001188","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_001188:3","order_id":"ORD_001188","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_001189:1","order_id":"ORD_001189","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_001189:2","order_id":"ORD_001189","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_001189:3","order_id":"ORD_001189","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_001189:4","order_id":"ORD_001189","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_001190:1","order_id":"ORD_001190","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_001190:2","order_id":"ORD_001190","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_001190:3","order_id":"ORD_001190","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_001190:4","order_id":"ORD_001190","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_001190:5","order_id":"ORD_001190","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_001191:1","order_id":"ORD_001191","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_001192:1","order_id":"ORD_001192","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_001192:2","order_id":"ORD_001192","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_001193:1","order_id":"ORD_001193","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_001193:2","order_id":"ORD_001193","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_001193:3","order_id":"ORD_001193","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_001194:1","order_id":"ORD_001194","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_001194:2","order_id":"ORD_001194","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_001194:3","order_id":"ORD_001194","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_001194:4","order_id":"ORD_001194","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_001195:1","order_id":"ORD_001195","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_001195:2","order_id":"ORD_001195","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_001195:3","order_id":"ORD_001195","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_001195:4","order_id":"ORD_001195","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_001195:5","order_id":"ORD_001195","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_001196:1","order_id":"ORD_001196","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_001197:1","order_id":"ORD_001197","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_001197:2","order_id":"ORD_001197","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_001198:1","order_id":"ORD_001198","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_001198:2","order_id":"ORD_001198","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_001198:3","order_id":"ORD_001198","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_001199:1","order_id":"ORD_001199","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_001199:2","order_id":"ORD_001199","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_001199:3","order_id":"ORD_001199","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_001199:4","order_id":"ORD_001199","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_001200:1","order_id":"ORD_001200","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_001200:2","order_id":"ORD_001200","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_001200:3","order_id":"ORD_001200","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_001200:4","order_id":"ORD_001200","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_001200:5","order_id":"ORD_001200","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_001201:1","order_id":"ORD_001201","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_001202:1","order_id":"ORD_001202","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_001202:2","order_id":"ORD_001202","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_001203:1","order_id":"ORD_001203","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_001203:2","order_id":"ORD_001203","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_001203:3","order_id":"ORD_001203","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_001204:1","order_id":"ORD_001204","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_001204:2","order_id":"ORD_001204","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_001204:3","order_id":"ORD_001204","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_001204:4","order_id":"ORD_001204","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_001205:1","order_id":"ORD_001205","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_001205:2","order_id":"ORD_001205","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_001205:3","order_id":"ORD_001205","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_001205:4","order_id":"ORD_001205","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_001205:5","order_id":"ORD_001205","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_001206:1","order_id":"ORD_001206","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_001207:1","order_id":"ORD_001207","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_001207:2","order_id":"ORD_001207","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_001208:1","order_id":"ORD_001208","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_001208:2","order_id":"ORD_001208","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_001208:3","order_id":"ORD_001208","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_001209:1","order_id":"ORD_001209","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_001209:2","order_id":"ORD_001209","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_001209:3","order_id":"ORD_001209","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_001209:4","order_id":"ORD_001209","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_001210:1","order_id":"ORD_001210","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_001210:2","order_id":"ORD_001210","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_001210:3","order_id":"ORD_001210","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_001210:4","order_id":"ORD_001210","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_001210:5","order_id":"ORD_001210","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_001211:1","order_id":"ORD_001211","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_001212:1","order_id":"ORD_001212","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_001212:2","order_id":"ORD_001212","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_001213:1","order_id":"ORD_001213","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_001213:2","order_id":"ORD_001213","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_001213:3","order_id":"ORD_001213","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_001214:1","order_id":"ORD_001214","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_001214:2","order_id":"ORD_001214","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_001214:3","order_id":"ORD_001214","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_001214:4","order_id":"ORD_001214","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_001215:1","order_id":"ORD_001215","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_001215:2","order_id":"ORD_001215","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_001215:3","order_id":"ORD_001215","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_001215:4","order_id":"ORD_001215","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_001215:5","order_id":"ORD_001215","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_001216:1","order_id":"ORD_001216","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_001217:1","order_id":"ORD_001217","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_001217:2","order_id":"ORD_001217","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_001218:1","order_id":"ORD_001218","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_001218:2","order_id":"ORD_001218","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_001218:3","order_id":"ORD_001218","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_001219:1","order_id":"ORD_001219","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_001219:2","order_id":"ORD_001219","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_001219:3","order_id":"ORD_001219","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_001219:4","order_id":"ORD_001219","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_001220:1","order_id":"ORD_001220","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_001220:2","order_id":"ORD_001220","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_001220:3","order_id":"ORD_001220","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_001220:4","order_id":"ORD_001220","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_001220:5","order_id":"ORD_001220","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_001221:1","order_id":"ORD_001221","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_001222:1","order_id":"ORD_001222","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_001222:2","order_id":"ORD_001222","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_001223:1","order_id":"ORD_001223","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_001223:2","order_id":"ORD_001223","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_001223:3","order_id":"ORD_001223","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_001224:1","order_id":"ORD_001224","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_001224:2","order_id":"ORD_001224","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_001224:3","order_id":"ORD_001224","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_001224:4","order_id":"ORD_001224","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_001225:1","order_id":"ORD_001225","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_001225:2","order_id":"ORD_001225","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_001225:3","order_id":"ORD_001225","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_001225:4","order_id":"ORD_001225","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_001225:5","order_id":"ORD_001225","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_001226:1","order_id":"ORD_001226","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_001227:1","order_id":"ORD_001227","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_001227:2","order_id":"ORD_001227","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_001228:1","order_id":"ORD_001228","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_001228:2","order_id":"ORD_001228","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_001228:3","order_id":"ORD_001228","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_001229:1","order_id":"ORD_001229","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_001229:2","order_id":"ORD_001229","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_001229:3","order_id":"ORD_001229","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_001229:4","order_id":"ORD_001229","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_001230:1","order_id":"ORD_001230","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_001230:2","order_id":"ORD_001230","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_001230:3","order_id":"ORD_001230","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_001230:4","order_id":"ORD_001230","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_001230:5","order_id":"ORD_001230","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_001231:1","order_id":"ORD_001231","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_001232:1","order_id":"ORD_001232","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_001232:2","order_id":"ORD_001232","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_001233:1","order_id":"ORD_001233","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_001233:2","order_id":"ORD_001233","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_001233:3","order_id":"ORD_001233","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_001234:1","order_id":"ORD_001234","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_001234:2","order_id":"ORD_001234","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_001234:3","order_id":"ORD_001234","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_001234:4","order_id":"ORD_001234","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_001235:1","order_id":"ORD_001235","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_001235:2","order_id":"ORD_001235","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_001235:3","order_id":"ORD_001235","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_001235:4","order_id":"ORD_001235","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_001235:5","order_id":"ORD_001235","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_001236:1","order_id":"ORD_001236","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_001237:1","order_id":"ORD_001237","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_001237:2","order_id":"ORD_001237","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_001238:1","order_id":"ORD_001238","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_001238:2","order_id":"ORD_001238","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_001238:3","order_id":"ORD_001238","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_001239:1","order_id":"ORD_001239","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_001239:2","order_id":"ORD_001239","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_001239:3","order_id":"ORD_001239","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_001239:4","order_id":"ORD_001239","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_001240:1","order_id":"ORD_001240","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_001240:2","order_id":"ORD_001240","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_001240:3","order_id":"ORD_001240","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_001240:4","order_id":"ORD_001240","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_001240:5","order_id":"ORD_001240","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_001241:1","order_id":"ORD_001241","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_001242:1","order_id":"ORD_001242","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_001242:2","order_id":"ORD_001242","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_001243:1","order_id":"ORD_001243","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_001243:2","order_id":"ORD_001243","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_001243:3","order_id":"ORD_001243","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_001244:1","order_id":"ORD_001244","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_001244:2","order_id":"ORD_001244","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_001244:3","order_id":"ORD_001244","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_001244:4","order_id":"ORD_001244","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_001245:1","order_id":"ORD_001245","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_001245:2","order_id":"ORD_001245","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_001245:3","order_id":"ORD_001245","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_001245:4","order_id":"ORD_001245","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_001245:5","order_id":"ORD_001245","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_001246:1","order_id":"ORD_001246","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_001247:1","order_id":"ORD_001247","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_001247:2","order_id":"ORD_001247","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_001248:1","order_id":"ORD_001248","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_001248:2","order_id":"ORD_001248","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_001248:3","order_id":"ORD_001248","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_001249:1","order_id":"ORD_001249","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_001249:2","order_id":"ORD_001249","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_001249:3","order_id":"ORD_001249","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_001249:4","order_id":"ORD_001249","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_001250:1","order_id":"ORD_001250","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_001250:2","order_id":"ORD_001250","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_001250:3","order_id":"ORD_001250","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_001250:4","order_id":"ORD_001250","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_001250:5","order_id":"ORD_001250","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_001251:1","order_id":"ORD_001251","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_001252:1","order_id":"ORD_001252","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_001252:2","order_id":"ORD_001252","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_001253:1","order_id":"ORD_001253","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_001253:2","order_id":"ORD_001253","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_001253:3","order_id":"ORD_001253","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_001254:1","order_id":"ORD_001254","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_001254:2","order_id":"ORD_001254","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_001254:3","order_id":"ORD_001254","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_001254:4","order_id":"ORD_001254","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_001255:1","order_id":"ORD_001255","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_001255:2","order_id":"ORD_001255","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_001255:3","order_id":"ORD_001255","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_001255:4","order_id":"ORD_001255","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_001255:5","order_id":"ORD_001255","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_001256:1","order_id":"ORD_001256","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_001257:1","order_id":"ORD_001257","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_001257:2","order_id":"ORD_001257","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_001258:1","order_id":"ORD_001258","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_001258:2","order_id":"ORD_001258","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_001258:3","order_id":"ORD_001258","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_001259:1","order_id":"ORD_001259","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_001259:2","order_id":"ORD_001259","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_001259:3","order_id":"ORD_001259","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_001259:4","order_id":"ORD_001259","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_001260:1","order_id":"ORD_001260","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_001260:2","order_id":"ORD_001260","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_001260:3","order_id":"ORD_001260","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_001260:4","order_id":"ORD_001260","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_001260:5","order_id":"ORD_001260","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_001261:1","order_id":"ORD_001261","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_001262:1","order_id":"ORD_001262","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_001262:2","order_id":"ORD_001262","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_001263:1","order_id":"ORD_001263","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_001263:2","order_id":"ORD_001263","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_001263:3","order_id":"ORD_001263","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_001264:1","order_id":"ORD_001264","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_001264:2","order_id":"ORD_001264","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_001264:3","order_id":"ORD_001264","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_001264:4","order_id":"ORD_001264","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_001265:1","order_id":"ORD_001265","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_001265:2","order_id":"ORD_001265","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_001265:3","order_id":"ORD_001265","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_001265:4","order_id":"ORD_001265","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_001265:5","order_id":"ORD_001265","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_001266:1","order_id":"ORD_001266","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_001267:1","order_id":"ORD_001267","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_001267:2","order_id":"ORD_001267","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_001268:1","order_id":"ORD_001268","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_001268:2","order_id":"ORD_001268","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_001268:3","order_id":"ORD_001268","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_001269:1","order_id":"ORD_001269","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_001269:2","order_id":"ORD_001269","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_001269:3","order_id":"ORD_001269","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_001269:4","order_id":"ORD_001269","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_001270:1","order_id":"ORD_001270","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_001270:2","order_id":"ORD_001270","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_001270:3","order_id":"ORD_001270","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_001270:4","order_id":"ORD_001270","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_001270:5","order_id":"ORD_001270","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_001271:1","order_id":"ORD_001271","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_001272:1","order_id":"ORD_001272","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_001272:2","order_id":"ORD_001272","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_001273:1","order_id":"ORD_001273","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_001273:2","order_id":"ORD_001273","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_001273:3","order_id":"ORD_001273","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_001274:1","order_id":"ORD_001274","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_001274:2","order_id":"ORD_001274","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_001274:3","order_id":"ORD_001274","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_001274:4","order_id":"ORD_001274","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_001275:1","order_id":"ORD_001275","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_001275:2","order_id":"ORD_001275","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_001275:3","order_id":"ORD_001275","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_001275:4","order_id":"ORD_001275","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_001275:5","order_id":"ORD_001275","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_001276:1","order_id":"ORD_001276","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_001277:1","order_id":"ORD_001277","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_001277:2","order_id":"ORD_001277","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_001278:1","order_id":"ORD_001278","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_001278:2","order_id":"ORD_001278","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_001278:3","order_id":"ORD_001278","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_001279:1","order_id":"ORD_001279","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_001279:2","order_id":"ORD_001279","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_001279:3","order_id":"ORD_001279","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_001279:4","order_id":"ORD_001279","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_001280:1","order_id":"ORD_001280","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_001280:2","order_id":"ORD_001280","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_001280:3","order_id":"ORD_001280","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_001280:4","order_id":"ORD_001280","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_001280:5","order_id":"ORD_001280","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_001281:1","order_id":"ORD_001281","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_001282:1","order_id":"ORD_001282","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_001282:2","order_id":"ORD_001282","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_001283:1","order_id":"ORD_001283","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_001283:2","order_id":"ORD_001283","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_001283:3","order_id":"ORD_001283","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_001284:1","order_id":"ORD_001284","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_001284:2","order_id":"ORD_001284","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_001284:3","order_id":"ORD_001284","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_001284:4","order_id":"ORD_001284","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_001285:1","order_id":"ORD_001285","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_001285:2","order_id":"ORD_001285","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_001285:3","order_id":"ORD_001285","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_001285:4","order_id":"ORD_001285","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_001285:5","order_id":"ORD_001285","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_001286:1","order_id":"ORD_001286","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_001287:1","order_id":"ORD_001287","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_001287:2","order_id":"ORD_001287","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_001288:1","order_id":"ORD_001288","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_001288:2","order_id":"ORD_001288","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_001288:3","order_id":"ORD_001288","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_001289:1","order_id":"ORD_001289","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_001289:2","order_id":"ORD_001289","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_001289:3","order_id":"ORD_001289","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_001289:4","order_id":"ORD_001289","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_001290:1","order_id":"ORD_001290","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_001290:2","order_id":"ORD_001290","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_001290:3","order_id":"ORD_001290","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_001290:4","order_id":"ORD_001290","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_001290:5","order_id":"ORD_001290","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_001291:1","order_id":"ORD_001291","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_001292:1","order_id":"ORD_001292","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_001292:2","order_id":"ORD_001292","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_001293:1","order_id":"ORD_001293","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_001293:2","order_id":"ORD_001293","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_001293:3","order_id":"ORD_001293","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_001294:1","order_id":"ORD_001294","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_001294:2","order_id":"ORD_001294","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_001294:3","order_id":"ORD_001294","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_001294:4","order_id":"ORD_001294","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_001295:1","order_id":"ORD_001295","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_001295:2","order_id":"ORD_001295","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_001295:3","order_id":"ORD_001295","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_001295:4","order_id":"ORD_001295","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_001295:5","order_id":"ORD_001295","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_001296:1","order_id":"ORD_001296","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_001297:1","order_id":"ORD_001297","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_001297:2","order_id":"ORD_001297","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_001298:1","order_id":"ORD_001298","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_001298:2","order_id":"ORD_001298","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_001298:3","order_id":"ORD_001298","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_001299:1","order_id":"ORD_001299","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_001299:2","order_id":"ORD_001299","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_001299:3","order_id":"ORD_001299","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_001299:4","order_id":"ORD_001299","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_001300:1","order_id":"ORD_001300","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_001300:2","order_id":"ORD_001300","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_001300:3","order_id":"ORD_001300","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_001300:4","order_id":"ORD_001300","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_001300:5","order_id":"ORD_001300","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_001301:1","order_id":"ORD_001301","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_001302:1","order_id":"ORD_001302","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_001302:2","order_id":"ORD_001302","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_001303:1","order_id":"ORD_001303","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_001303:2","order_id":"ORD_001303","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_001303:3","order_id":"ORD_001303","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_001304:1","order_id":"ORD_001304","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_001304:2","order_id":"ORD_001304","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_001304:3","order_id":"ORD_001304","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_001304:4","order_id":"ORD_001304","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_001305:1","order_id":"ORD_001305","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_001305:2","order_id":"ORD_001305","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_001305:3","order_id":"ORD_001305","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_001305:4","order_id":"ORD_001305","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_001305:5","order_id":"ORD_001305","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_001306:1","order_id":"ORD_001306","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_001307:1","order_id":"ORD_001307","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_001307:2","order_id":"ORD_001307","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_001308:1","order_id":"ORD_001308","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_001308:2","order_id":"ORD_001308","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_001308:3","order_id":"ORD_001308","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_001309:1","order_id":"ORD_001309","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_001309:2","order_id":"ORD_001309","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_001309:3","order_id":"ORD_001309","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_001309:4","order_id":"ORD_001309","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_001310:1","order_id":"ORD_001310","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_001310:2","order_id":"ORD_001310","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_001310:3","order_id":"ORD_001310","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_001310:4","order_id":"ORD_001310","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_001310:5","order_id":"ORD_001310","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_001311:1","order_id":"ORD_001311","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_001312:1","order_id":"ORD_001312","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_001312:2","order_id":"ORD_001312","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_001313:1","order_id":"ORD_001313","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_001313:2","order_id":"ORD_001313","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_001313:3","order_id":"ORD_001313","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_001314:1","order_id":"ORD_001314","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_001314:2","order_id":"ORD_001314","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_001314:3","order_id":"ORD_001314","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_001314:4","order_id":"ORD_001314","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_001315:1","order_id":"ORD_001315","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_001315:2","order_id":"ORD_001315","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_001315:3","order_id":"ORD_001315","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_001315:4","order_id":"ORD_001315","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_001315:5","order_id":"ORD_001315","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_001316:1","order_id":"ORD_001316","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_001317:1","order_id":"ORD_001317","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_001317:2","order_id":"ORD_001317","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_001318:1","order_id":"ORD_001318","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_001318:2","order_id":"ORD_001318","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_001318:3","order_id":"ORD_001318","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_001319:1","order_id":"ORD_001319","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_001319:2","order_id":"ORD_001319","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_001319:3","order_id":"ORD_001319","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_001319:4","order_id":"ORD_001319","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_001320:1","order_id":"ORD_001320","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_001320:2","order_id":"ORD_001320","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_001320:3","order_id":"ORD_001320","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_001320:4","order_id":"ORD_001320","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_001320:5","order_id":"ORD_001320","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_001321:1","order_id":"ORD_001321","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_001322:1","order_id":"ORD_001322","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_001322:2","order_id":"ORD_001322","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_001323:1","order_id":"ORD_001323","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_001323:2","order_id":"ORD_001323","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_001323:3","order_id":"ORD_001323","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_001324:1","order_id":"ORD_001324","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_001324:2","order_id":"ORD_001324","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_001324:3","order_id":"ORD_001324","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_001324:4","order_id":"ORD_001324","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_001325:1","order_id":"ORD_001325","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_001325:2","order_id":"ORD_001325","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_001325:3","order_id":"ORD_001325","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_001325:4","order_id":"ORD_001325","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_001325:5","order_id":"ORD_001325","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_001326:1","order_id":"ORD_001326","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_001327:1","order_id":"ORD_001327","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_001327:2","order_id":"ORD_001327","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_001328:1","order_id":"ORD_001328","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_001328:2","order_id":"ORD_001328","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_001328:3","order_id":"ORD_001328","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_001329:1","order_id":"ORD_001329","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_001329:2","order_id":"ORD_001329","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_001329:3","order_id":"ORD_001329","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_001329:4","order_id":"ORD_001329","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_001330:1","order_id":"ORD_001330","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_001330:2","order_id":"ORD_001330","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_001330:3","order_id":"ORD_001330","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_001330:4","order_id":"ORD_001330","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_001330:5","order_id":"ORD_001330","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_001331:1","order_id":"ORD_001331","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_001332:1","order_id":"ORD_001332","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_001332:2","order_id":"ORD_001332","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_001333:1","order_id":"ORD_001333","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_001333:2","order_id":"ORD_001333","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_001333:3","order_id":"ORD_001333","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_001334:1","order_id":"ORD_001334","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_001334:2","order_id":"ORD_001334","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_001334:3","order_id":"ORD_001334","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_001334:4","order_id":"ORD_001334","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_001335:1","order_id":"ORD_001335","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_001335:2","order_id":"ORD_001335","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_001335:3","order_id":"ORD_001335","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_001335:4","order_id":"ORD_001335","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_001335:5","order_id":"ORD_001335","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_001336:1","order_id":"ORD_001336","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_001337:1","order_id":"ORD_001337","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_001337:2","order_id":"ORD_001337","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_001338:1","order_id":"ORD_001338","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_001338:2","order_id":"ORD_001338","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_001338:3","order_id":"ORD_001338","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_001339:1","order_id":"ORD_001339","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_001339:2","order_id":"ORD_001339","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_001339:3","order_id":"ORD_001339","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_001339:4","order_id":"ORD_001339","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_001340:1","order_id":"ORD_001340","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_001340:2","order_id":"ORD_001340","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_001340:3","order_id":"ORD_001340","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_001340:4","order_id":"ORD_001340","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_001340:5","order_id":"ORD_001340","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_001341:1","order_id":"ORD_001341","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_001342:1","order_id":"ORD_001342","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_001342:2","order_id":"ORD_001342","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_001343:1","order_id":"ORD_001343","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_001343:2","order_id":"ORD_001343","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_001343:3","order_id":"ORD_001343","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_001344:1","order_id":"ORD_001344","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_001344:2","order_id":"ORD_001344","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_001344:3","order_id":"ORD_001344","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_001344:4","order_id":"ORD_001344","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_001345:1","order_id":"ORD_001345","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_001345:2","order_id":"ORD_001345","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_001345:3","order_id":"ORD_001345","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_001345:4","order_id":"ORD_001345","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_001345:5","order_id":"ORD_001345","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_001346:1","order_id":"ORD_001346","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_001347:1","order_id":"ORD_001347","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_001347:2","order_id":"ORD_001347","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_001348:1","order_id":"ORD_001348","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_001348:2","order_id":"ORD_001348","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_001348:3","order_id":"ORD_001348","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_001349:1","order_id":"ORD_001349","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_001349:2","order_id":"ORD_001349","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_001349:3","order_id":"ORD_001349","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_001349:4","order_id":"ORD_001349","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_001350:1","order_id":"ORD_001350","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_001350:2","order_id":"ORD_001350","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_001350:3","order_id":"ORD_001350","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_001350:4","order_id":"ORD_001350","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_001350:5","order_id":"ORD_001350","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_001351:1","order_id":"ORD_001351","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_001352:1","order_id":"ORD_001352","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_001352:2","order_id":"ORD_001352","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_001353:1","order_id":"ORD_001353","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_001353:2","order_id":"ORD_001353","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_001353:3","order_id":"ORD_001353","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_001354:1","order_id":"ORD_001354","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_001354:2","order_id":"ORD_001354","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_001354:3","order_id":"ORD_001354","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_001354:4","order_id":"ORD_001354","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_001355:1","order_id":"ORD_001355","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_001355:2","order_id":"ORD_001355","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_001355:3","order_id":"ORD_001355","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_001355:4","order_id":"ORD_001355","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_001355:5","order_id":"ORD_001355","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_001356:1","order_id":"ORD_001356","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_001357:1","order_id":"ORD_001357","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_001357:2","order_id":"ORD_001357","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_001358:1","order_id":"ORD_001358","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_001358:2","order_id":"ORD_001358","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_001358:3","order_id":"ORD_001358","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_001359:1","order_id":"ORD_001359","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_001359:2","order_id":"ORD_001359","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_001359:3","order_id":"ORD_001359","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_001359:4","order_id":"ORD_001359","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_001360:1","order_id":"ORD_001360","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_001360:2","order_id":"ORD_001360","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_001360:3","order_id":"ORD_001360","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_001360:4","order_id":"ORD_001360","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_001360:5","order_id":"ORD_001360","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_001361:1","order_id":"ORD_001361","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_001362:1","order_id":"ORD_001362","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_001362:2","order_id":"ORD_001362","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_001363:1","order_id":"ORD_001363","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_001363:2","order_id":"ORD_001363","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_001363:3","order_id":"ORD_001363","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_001364:1","order_id":"ORD_001364","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_001364:2","order_id":"ORD_001364","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_001364:3","order_id":"ORD_001364","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_001364:4","order_id":"ORD_001364","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_001365:1","order_id":"ORD_001365","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_001365:2","order_id":"ORD_001365","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_001365:3","order_id":"ORD_001365","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_001365:4","order_id":"ORD_001365","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_001365:5","order_id":"ORD_001365","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_001366:1","order_id":"ORD_001366","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_001367:1","order_id":"ORD_001367","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_001367:2","order_id":"ORD_001367","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_001368:1","order_id":"ORD_001368","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_001368:2","order_id":"ORD_001368","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_001368:3","order_id":"ORD_001368","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_001369:1","order_id":"ORD_001369","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_001369:2","order_id":"ORD_001369","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_001369:3","order_id":"ORD_001369","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_001369:4","order_id":"ORD_001369","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_001370:1","order_id":"ORD_001370","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_001370:2","order_id":"ORD_001370","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_001370:3","order_id":"ORD_001370","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_001370:4","order_id":"ORD_001370","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_001370:5","order_id":"ORD_001370","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_001371:1","order_id":"ORD_001371","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_001372:1","order_id":"ORD_001372","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_001372:2","order_id":"ORD_001372","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_001373:1","order_id":"ORD_001373","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_001373:2","order_id":"ORD_001373","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_001373:3","order_id":"ORD_001373","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_001374:1","order_id":"ORD_001374","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_001374:2","order_id":"ORD_001374","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_001374:3","order_id":"ORD_001374","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_001374:4","order_id":"ORD_001374","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_001375:1","order_id":"ORD_001375","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_001375:2","order_id":"ORD_001375","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_001375:3","order_id":"ORD_001375","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_001375:4","order_id":"ORD_001375","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_001375:5","order_id":"ORD_001375","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_001376:1","order_id":"ORD_001376","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_001377:1","order_id":"ORD_001377","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_001377:2","order_id":"ORD_001377","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_001378:1","order_id":"ORD_001378","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_001378:2","order_id":"ORD_001378","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_001378:3","order_id":"ORD_001378","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_001379:1","order_id":"ORD_001379","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_001379:2","order_id":"ORD_001379","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_001379:3","order_id":"ORD_001379","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_001379:4","order_id":"ORD_001379","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_001380:1","order_id":"ORD_001380","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_001380:2","order_id":"ORD_001380","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_001380:3","order_id":"ORD_001380","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_001380:4","order_id":"ORD_001380","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_001380:5","order_id":"ORD_001380","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_001381:1","order_id":"ORD_001381","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_001382:1","order_id":"ORD_001382","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_001382:2","order_id":"ORD_001382","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_001383:1","order_id":"ORD_001383","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_001383:2","order_id":"ORD_001383","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_001383:3","order_id":"ORD_001383","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_001384:1","order_id":"ORD_001384","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_001384:2","order_id":"ORD_001384","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_001384:3","order_id":"ORD_001384","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_001384:4","order_id":"ORD_001384","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_001385:1","order_id":"ORD_001385","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_001385:2","order_id":"ORD_001385","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_001385:3","order_id":"ORD_001385","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_001385:4","order_id":"ORD_001385","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_001385:5","order_id":"ORD_001385","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_001386:1","order_id":"ORD_001386","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_001387:1","order_id":"ORD_001387","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_001387:2","order_id":"ORD_001387","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_001388:1","order_id":"ORD_001388","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_001388:2","order_id":"ORD_001388","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_001388:3","order_id":"ORD_001388","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_001389:1","order_id":"ORD_001389","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_001389:2","order_id":"ORD_001389","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_001389:3","order_id":"ORD_001389","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_001389:4","order_id":"ORD_001389","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_001390:1","order_id":"ORD_001390","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_001390:2","order_id":"ORD_001390","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_001390:3","order_id":"ORD_001390","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_001390:4","order_id":"ORD_001390","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_001390:5","order_id":"ORD_001390","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_001391:1","order_id":"ORD_001391","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_001392:1","order_id":"ORD_001392","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_001392:2","order_id":"ORD_001392","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_001393:1","order_id":"ORD_001393","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_001393:2","order_id":"ORD_001393","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_001393:3","order_id":"ORD_001393","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_001394:1","order_id":"ORD_001394","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_001394:2","order_id":"ORD_001394","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_001394:3","order_id":"ORD_001394","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_001394:4","order_id":"ORD_001394","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_001395:1","order_id":"ORD_001395","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_001395:2","order_id":"ORD_001395","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_001395:3","order_id":"ORD_001395","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_001395:4","order_id":"ORD_001395","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_001395:5","order_id":"ORD_001395","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_001396:1","order_id":"ORD_001396","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_001397:1","order_id":"ORD_001397","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_001397:2","order_id":"ORD_001397","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_001398:1","order_id":"ORD_001398","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_001398:2","order_id":"ORD_001398","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_001398:3","order_id":"ORD_001398","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_001399:1","order_id":"ORD_001399","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_001399:2","order_id":"ORD_001399","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_001399:3","order_id":"ORD_001399","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_001399:4","order_id":"ORD_001399","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_001400:1","order_id":"ORD_001400","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_001400:2","order_id":"ORD_001400","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_001400:3","order_id":"ORD_001400","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_001400:4","order_id":"ORD_001400","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_001400:5","order_id":"ORD_001400","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_001401:1","order_id":"ORD_001401","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_001402:1","order_id":"ORD_001402","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_001402:2","order_id":"ORD_001402","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_001403:1","order_id":"ORD_001403","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_001403:2","order_id":"ORD_001403","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_001403:3","order_id":"ORD_001403","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_001404:1","order_id":"ORD_001404","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_001404:2","order_id":"ORD_001404","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_001404:3","order_id":"ORD_001404","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_001404:4","order_id":"ORD_001404","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_001405:1","order_id":"ORD_001405","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_001405:2","order_id":"ORD_001405","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_001405:3","order_id":"ORD_001405","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_001405:4","order_id":"ORD_001405","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_001405:5","order_id":"ORD_001405","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_001406:1","order_id":"ORD_001406","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_001407:1","order_id":"ORD_001407","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_001407:2","order_id":"ORD_001407","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_001408:1","order_id":"ORD_001408","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_001408:2","order_id":"ORD_001408","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_001408:3","order_id":"ORD_001408","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_001409:1","order_id":"ORD_001409","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_001409:2","order_id":"ORD_001409","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_001409:3","order_id":"ORD_001409","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_001409:4","order_id":"ORD_001409","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_001410:1","order_id":"ORD_001410","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_001410:2","order_id":"ORD_001410","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_001410:3","order_id":"ORD_001410","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_001410:4","order_id":"ORD_001410","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_001410:5","order_id":"ORD_001410","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_001411:1","order_id":"ORD_001411","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_001412:1","order_id":"ORD_001412","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_001412:2","order_id":"ORD_001412","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_001413:1","order_id":"ORD_001413","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_001413:2","order_id":"ORD_001413","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_001413:3","order_id":"ORD_001413","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_001414:1","order_id":"ORD_001414","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_001414:2","order_id":"ORD_001414","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_001414:3","order_id":"ORD_001414","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_001414:4","order_id":"ORD_001414","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_001415:1","order_id":"ORD_001415","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_001415:2","order_id":"ORD_001415","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_001415:3","order_id":"ORD_001415","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_001415:4","order_id":"ORD_001415","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_001415:5","order_id":"ORD_001415","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_001416:1","order_id":"ORD_001416","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_001417:1","order_id":"ORD_001417","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_001417:2","order_id":"ORD_001417","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_001418:1","order_id":"ORD_001418","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_001418:2","order_id":"ORD_001418","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_001418:3","order_id":"ORD_001418","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_001419:1","order_id":"ORD_001419","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_001419:2","order_id":"ORD_001419","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_001419:3","order_id":"ORD_001419","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_001419:4","order_id":"ORD_001419","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_001420:1","order_id":"ORD_001420","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_001420:2","order_id":"ORD_001420","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_001420:3","order_id":"ORD_001420","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_001420:4","order_id":"ORD_001420","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_001420:5","order_id":"ORD_001420","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_001421:1","order_id":"ORD_001421","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_001422:1","order_id":"ORD_001422","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_001422:2","order_id":"ORD_001422","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_001423:1","order_id":"ORD_001423","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_001423:2","order_id":"ORD_001423","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_001423:3","order_id":"ORD_001423","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_001424:1","order_id":"ORD_001424","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_001424:2","order_id":"ORD_001424","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_001424:3","order_id":"ORD_001424","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_001424:4","order_id":"ORD_001424","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_001425:1","order_id":"ORD_001425","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_001425:2","order_id":"ORD_001425","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_001425:3","order_id":"ORD_001425","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_001425:4","order_id":"ORD_001425","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_001425:5","order_id":"ORD_001425","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_001426:1","order_id":"ORD_001426","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_001427:1","order_id":"ORD_001427","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_001427:2","order_id":"ORD_001427","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_001428:1","order_id":"ORD_001428","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_001428:2","order_id":"ORD_001428","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_001428:3","order_id":"ORD_001428","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_001429:1","order_id":"ORD_001429","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_001429:2","order_id":"ORD_001429","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_001429:3","order_id":"ORD_001429","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_001429:4","order_id":"ORD_001429","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_001430:1","order_id":"ORD_001430","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_001430:2","order_id":"ORD_001430","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_001430:3","order_id":"ORD_001430","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_001430:4","order_id":"ORD_001430","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_001430:5","order_id":"ORD_001430","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_001431:1","order_id":"ORD_001431","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_001432:1","order_id":"ORD_001432","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_001432:2","order_id":"ORD_001432","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_001433:1","order_id":"ORD_001433","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_001433:2","order_id":"ORD_001433","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_001433:3","order_id":"ORD_001433","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_001434:1","order_id":"ORD_001434","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_001434:2","order_id":"ORD_001434","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_001434:3","order_id":"ORD_001434","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_001434:4","order_id":"ORD_001434","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_001435:1","order_id":"ORD_001435","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_001435:2","order_id":"ORD_001435","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_001435:3","order_id":"ORD_001435","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_001435:4","order_id":"ORD_001435","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_001435:5","order_id":"ORD_001435","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_001436:1","order_id":"ORD_001436","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_001437:1","order_id":"ORD_001437","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_001437:2","order_id":"ORD_001437","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_001438:1","order_id":"ORD_001438","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_001438:2","order_id":"ORD_001438","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_001438:3","order_id":"ORD_001438","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_001439:1","order_id":"ORD_001439","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_001439:2","order_id":"ORD_001439","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_001439:3","order_id":"ORD_001439","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_001439:4","order_id":"ORD_001439","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_001440:1","order_id":"ORD_001440","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_001440:2","order_id":"ORD_001440","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_001440:3","order_id":"ORD_001440","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_001440:4","order_id":"ORD_001440","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_001440:5","order_id":"ORD_001440","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_001441:1","order_id":"ORD_001441","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_001442:1","order_id":"ORD_001442","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_001442:2","order_id":"ORD_001442","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_001443:1","order_id":"ORD_001443","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_001443:2","order_id":"ORD_001443","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_001443:3","order_id":"ORD_001443","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_001444:1","order_id":"ORD_001444","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_001444:2","order_id":"ORD_001444","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_001444:3","order_id":"ORD_001444","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_001444:4","order_id":"ORD_001444","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_001445:1","order_id":"ORD_001445","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_001445:2","order_id":"ORD_001445","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_001445:3","order_id":"ORD_001445","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_001445:4","order_id":"ORD_001445","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_001445:5","order_id":"ORD_001445","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_001446:1","order_id":"ORD_001446","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_001447:1","order_id":"ORD_001447","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_001447:2","order_id":"ORD_001447","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_001448:1","order_id":"ORD_001448","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_001448:2","order_id":"ORD_001448","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_001448:3","order_id":"ORD_001448","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_001449:1","order_id":"ORD_001449","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_001449:2","order_id":"ORD_001449","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_001449:3","order_id":"ORD_001449","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_001449:4","order_id":"ORD_001449","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_001450:1","order_id":"ORD_001450","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_001450:2","order_id":"ORD_001450","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_001450:3","order_id":"ORD_001450","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_001450:4","order_id":"ORD_001450","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_001450:5","order_id":"ORD_001450","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_001451:1","order_id":"ORD_001451","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_001452:1","order_id":"ORD_001452","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_001452:2","order_id":"ORD_001452","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_001453:1","order_id":"ORD_001453","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_001453:2","order_id":"ORD_001453","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_001453:3","order_id":"ORD_001453","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_001454:1","order_id":"ORD_001454","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_001454:2","order_id":"ORD_001454","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_001454:3","order_id":"ORD_001454","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_001454:4","order_id":"ORD_001454","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_001455:1","order_id":"ORD_001455","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_001455:2","order_id":"ORD_001455","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_001455:3","order_id":"ORD_001455","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_001455:4","order_id":"ORD_001455","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_001455:5","order_id":"ORD_001455","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_001456:1","order_id":"ORD_001456","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_001457:1","order_id":"ORD_001457","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_001457:2","order_id":"ORD_001457","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_001458:1","order_id":"ORD_001458","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_001458:2","order_id":"ORD_001458","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_001458:3","order_id":"ORD_001458","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_001459:1","order_id":"ORD_001459","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_001459:2","order_id":"ORD_001459","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_001459:3","order_id":"ORD_001459","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_001459:4","order_id":"ORD_001459","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_001460:1","order_id":"ORD_001460","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_001460:2","order_id":"ORD_001460","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_001460:3","order_id":"ORD_001460","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_001460:4","order_id":"ORD_001460","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_001460:5","order_id":"ORD_001460","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_001461:1","order_id":"ORD_001461","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_001462:1","order_id":"ORD_001462","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_001462:2","order_id":"ORD_001462","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_001463:1","order_id":"ORD_001463","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_001463:2","order_id":"ORD_001463","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_001463:3","order_id":"ORD_001463","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_001464:1","order_id":"ORD_001464","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_001464:2","order_id":"ORD_001464","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_001464:3","order_id":"ORD_001464","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_001464:4","order_id":"ORD_001464","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_001465:1","order_id":"ORD_001465","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_001465:2","order_id":"ORD_001465","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_001465:3","order_id":"ORD_001465","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_001465:4","order_id":"ORD_001465","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_001465:5","order_id":"ORD_001465","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_001466:1","order_id":"ORD_001466","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_001467:1","order_id":"ORD_001467","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_001467:2","order_id":"ORD_001467","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_001468:1","order_id":"ORD_001468","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_001468:2","order_id":"ORD_001468","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_001468:3","order_id":"ORD_001468","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_001469:1","order_id":"ORD_001469","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_001469:2","order_id":"ORD_001469","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_001469:3","order_id":"ORD_001469","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_001469:4","order_id":"ORD_001469","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_001470:1","order_id":"ORD_001470","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_001470:2","order_id":"ORD_001470","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_001470:3","order_id":"ORD_001470","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_001470:4","order_id":"ORD_001470","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_001470:5","order_id":"ORD_001470","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_001471:1","order_id":"ORD_001471","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_001472:1","order_id":"ORD_001472","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_001472:2","order_id":"ORD_001472","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_001473:1","order_id":"ORD_001473","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_001473:2","order_id":"ORD_001473","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_001473:3","order_id":"ORD_001473","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_001474:1","order_id":"ORD_001474","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_001474:2","order_id":"ORD_001474","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_001474:3","order_id":"ORD_001474","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_001474:4","order_id":"ORD_001474","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_001475:1","order_id":"ORD_001475","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_001475:2","order_id":"ORD_001475","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_001475:3","order_id":"ORD_001475","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_001475:4","order_id":"ORD_001475","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_001475:5","order_id":"ORD_001475","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_001476:1","order_id":"ORD_001476","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_001477:1","order_id":"ORD_001477","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_001477:2","order_id":"ORD_001477","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_001478:1","order_id":"ORD_001478","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_001478:2","order_id":"ORD_001478","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_001478:3","order_id":"ORD_001478","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_001479:1","order_id":"ORD_001479","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_001479:2","order_id":"ORD_001479","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_001479:3","order_id":"ORD_001479","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_001479:4","order_id":"ORD_001479","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_001480:1","order_id":"ORD_001480","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_001480:2","order_id":"ORD_001480","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_001480:3","order_id":"ORD_001480","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_001480:4","order_id":"ORD_001480","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_001480:5","order_id":"ORD_001480","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_001481:1","order_id":"ORD_001481","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_001482:1","order_id":"ORD_001482","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_001482:2","order_id":"ORD_001482","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_001483:1","order_id":"ORD_001483","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_001483:2","order_id":"ORD_001483","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_001483:3","order_id":"ORD_001483","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_001484:1","order_id":"ORD_001484","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_001484:2","order_id":"ORD_001484","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_001484:3","order_id":"ORD_001484","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_001484:4","order_id":"ORD_001484","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_001485:1","order_id":"ORD_001485","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_001485:2","order_id":"ORD_001485","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_001485:3","order_id":"ORD_001485","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_001485:4","order_id":"ORD_001485","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_001485:5","order_id":"ORD_001485","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_001486:1","order_id":"ORD_001486","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_001487:1","order_id":"ORD_001487","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_001487:2","order_id":"ORD_001487","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_001488:1","order_id":"ORD_001488","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_001488:2","order_id":"ORD_001488","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_001488:3","order_id":"ORD_001488","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_001489:1","order_id":"ORD_001489","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_001489:2","order_id":"ORD_001489","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_001489:3","order_id":"ORD_001489","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_001489:4","order_id":"ORD_001489","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_001490:1","order_id":"ORD_001490","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_001490:2","order_id":"ORD_001490","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_001490:3","order_id":"ORD_001490","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_001490:4","order_id":"ORD_001490","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_001490:5","order_id":"ORD_001490","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_001491:1","order_id":"ORD_001491","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_001492:1","order_id":"ORD_001492","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_001492:2","order_id":"ORD_001492","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_001493:1","order_id":"ORD_001493","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_001493:2","order_id":"ORD_001493","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_001493:3","order_id":"ORD_001493","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_001494:1","order_id":"ORD_001494","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_001494:2","order_id":"ORD_001494","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_001494:3","order_id":"ORD_001494","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_001494:4","order_id":"ORD_001494","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_001495:1","order_id":"ORD_001495","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_001495:2","order_id":"ORD_001495","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_001495:3","order_id":"ORD_001495","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_001495:4","order_id":"ORD_001495","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_001495:5","order_id":"ORD_001495","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_001496:1","order_id":"ORD_001496","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_001497:1","order_id":"ORD_001497","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_001497:2","order_id":"ORD_001497","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_001498:1","order_id":"ORD_001498","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_001498:2","order_id":"ORD_001498","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_001498:3","order_id":"ORD_001498","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_001499:1","order_id":"ORD_001499","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_001499:2","order_id":"ORD_001499","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_001499:3","order_id":"ORD_001499","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_001499:4","order_id":"ORD_001499","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_001500:1","order_id":"ORD_001500","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_001500:2","order_id":"ORD_001500","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_001500:3","order_id":"ORD_001500","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_001500:4","order_id":"ORD_001500","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_001500:5","order_id":"ORD_001500","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_001501:1","order_id":"ORD_001501","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_001502:1","order_id":"ORD_001502","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_001502:2","order_id":"ORD_001502","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_001503:1","order_id":"ORD_001503","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_001503:2","order_id":"ORD_001503","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_001503:3","order_id":"ORD_001503","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_001504:1","order_id":"ORD_001504","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_001504:2","order_id":"ORD_001504","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_001504:3","order_id":"ORD_001504","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_001504:4","order_id":"ORD_001504","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_001505:1","order_id":"ORD_001505","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_001505:2","order_id":"ORD_001505","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_001505:3","order_id":"ORD_001505","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_001505:4","order_id":"ORD_001505","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_001505:5","order_id":"ORD_001505","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_001506:1","order_id":"ORD_001506","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_001507:1","order_id":"ORD_001507","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_001507:2","order_id":"ORD_001507","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_001508:1","order_id":"ORD_001508","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_001508:2","order_id":"ORD_001508","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_001508:3","order_id":"ORD_001508","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_001509:1","order_id":"ORD_001509","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_001509:2","order_id":"ORD_001509","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_001509:3","order_id":"ORD_001509","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_001509:4","order_id":"ORD_001509","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_001510:1","order_id":"ORD_001510","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_001510:2","order_id":"ORD_001510","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_001510:3","order_id":"ORD_001510","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_001510:4","order_id":"ORD_001510","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_001510:5","order_id":"ORD_001510","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_001511:1","order_id":"ORD_001511","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_001512:1","order_id":"ORD_001512","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_001512:2","order_id":"ORD_001512","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_001513:1","order_id":"ORD_001513","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_001513:2","order_id":"ORD_001513","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_001513:3","order_id":"ORD_001513","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_001514:1","order_id":"ORD_001514","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_001514:2","order_id":"ORD_001514","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_001514:3","order_id":"ORD_001514","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_001514:4","order_id":"ORD_001514","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_001515:1","order_id":"ORD_001515","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_001515:2","order_id":"ORD_001515","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_001515:3","order_id":"ORD_001515","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_001515:4","order_id":"ORD_001515","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_001515:5","order_id":"ORD_001515","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_001516:1","order_id":"ORD_001516","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_001517:1","order_id":"ORD_001517","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_001517:2","order_id":"ORD_001517","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_001518:1","order_id":"ORD_001518","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_001518:2","order_id":"ORD_001518","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_001518:3","order_id":"ORD_001518","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_001519:1","order_id":"ORD_001519","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_001519:2","order_id":"ORD_001519","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_001519:3","order_id":"ORD_001519","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_001519:4","order_id":"ORD_001519","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_001520:1","order_id":"ORD_001520","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_001520:2","order_id":"ORD_001520","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_001520:3","order_id":"ORD_001520","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_001520:4","order_id":"ORD_001520","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_001520:5","order_id":"ORD_001520","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_001521:1","order_id":"ORD_001521","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_001522:1","order_id":"ORD_001522","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_001522:2","order_id":"ORD_001522","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_001523:1","order_id":"ORD_001523","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_001523:2","order_id":"ORD_001523","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_001523:3","order_id":"ORD_001523","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_001524:1","order_id":"ORD_001524","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_001524:2","order_id":"ORD_001524","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_001524:3","order_id":"ORD_001524","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_001524:4","order_id":"ORD_001524","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_001525:1","order_id":"ORD_001525","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_001525:2","order_id":"ORD_001525","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_001525:3","order_id":"ORD_001525","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_001525:4","order_id":"ORD_001525","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_001525:5","order_id":"ORD_001525","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_001526:1","order_id":"ORD_001526","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_001527:1","order_id":"ORD_001527","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_001527:2","order_id":"ORD_001527","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_001528:1","order_id":"ORD_001528","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_001528:2","order_id":"ORD_001528","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_001528:3","order_id":"ORD_001528","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_001529:1","order_id":"ORD_001529","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_001529:2","order_id":"ORD_001529","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_001529:3","order_id":"ORD_001529","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_001529:4","order_id":"ORD_001529","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_001530:1","order_id":"ORD_001530","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_001530:2","order_id":"ORD_001530","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_001530:3","order_id":"ORD_001530","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_001530:4","order_id":"ORD_001530","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_001530:5","order_id":"ORD_001530","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_001531:1","order_id":"ORD_001531","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_001532:1","order_id":"ORD_001532","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_001532:2","order_id":"ORD_001532","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_001533:1","order_id":"ORD_001533","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_001533:2","order_id":"ORD_001533","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_001533:3","order_id":"ORD_001533","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_001534:1","order_id":"ORD_001534","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_001534:2","order_id":"ORD_001534","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_001534:3","order_id":"ORD_001534","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_001534:4","order_id":"ORD_001534","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_001535:1","order_id":"ORD_001535","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_001535:2","order_id":"ORD_001535","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_001535:3","order_id":"ORD_001535","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_001535:4","order_id":"ORD_001535","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_001535:5","order_id":"ORD_001535","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_001536:1","order_id":"ORD_001536","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_001537:1","order_id":"ORD_001537","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_001537:2","order_id":"ORD_001537","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_001538:1","order_id":"ORD_001538","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_001538:2","order_id":"ORD_001538","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_001538:3","order_id":"ORD_001538","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_001539:1","order_id":"ORD_001539","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_001539:2","order_id":"ORD_001539","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_001539:3","order_id":"ORD_001539","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_001539:4","order_id":"ORD_001539","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_001540:1","order_id":"ORD_001540","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_001540:2","order_id":"ORD_001540","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_001540:3","order_id":"ORD_001540","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_001540:4","order_id":"ORD_001540","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_001540:5","order_id":"ORD_001540","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_001541:1","order_id":"ORD_001541","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_001542:1","order_id":"ORD_001542","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_001542:2","order_id":"ORD_001542","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_001543:1","order_id":"ORD_001543","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_001543:2","order_id":"ORD_001543","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_001543:3","order_id":"ORD_001543","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_001544:1","order_id":"ORD_001544","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_001544:2","order_id":"ORD_001544","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_001544:3","order_id":"ORD_001544","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_001544:4","order_id":"ORD_001544","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_001545:1","order_id":"ORD_001545","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_001545:2","order_id":"ORD_001545","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_001545:3","order_id":"ORD_001545","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_001545:4","order_id":"ORD_001545","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_001545:5","order_id":"ORD_001545","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_001546:1","order_id":"ORD_001546","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_001547:1","order_id":"ORD_001547","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_001547:2","order_id":"ORD_001547","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_001548:1","order_id":"ORD_001548","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_001548:2","order_id":"ORD_001548","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_001548:3","order_id":"ORD_001548","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_001549:1","order_id":"ORD_001549","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_001549:2","order_id":"ORD_001549","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_001549:3","order_id":"ORD_001549","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_001549:4","order_id":"ORD_001549","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_001550:1","order_id":"ORD_001550","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_001550:2","order_id":"ORD_001550","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_001550:3","order_id":"ORD_001550","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_001550:4","order_id":"ORD_001550","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_001550:5","order_id":"ORD_001550","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_001551:1","order_id":"ORD_001551","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_001552:1","order_id":"ORD_001552","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_001552:2","order_id":"ORD_001552","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_001553:1","order_id":"ORD_001553","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_001553:2","order_id":"ORD_001553","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_001553:3","order_id":"ORD_001553","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_001554:1","order_id":"ORD_001554","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_001554:2","order_id":"ORD_001554","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_001554:3","order_id":"ORD_001554","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_001554:4","order_id":"ORD_001554","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_001555:1","order_id":"ORD_001555","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_001555:2","order_id":"ORD_001555","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_001555:3","order_id":"ORD_001555","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_001555:4","order_id":"ORD_001555","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_001555:5","order_id":"ORD_001555","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_001556:1","order_id":"ORD_001556","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_001557:1","order_id":"ORD_001557","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_001557:2","order_id":"ORD_001557","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_001558:1","order_id":"ORD_001558","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_001558:2","order_id":"ORD_001558","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_001558:3","order_id":"ORD_001558","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_001559:1","order_id":"ORD_001559","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_001559:2","order_id":"ORD_001559","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_001559:3","order_id":"ORD_001559","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_001559:4","order_id":"ORD_001559","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_001560:1","order_id":"ORD_001560","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_001560:2","order_id":"ORD_001560","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_001560:3","order_id":"ORD_001560","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_001560:4","order_id":"ORD_001560","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_001560:5","order_id":"ORD_001560","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_001561:1","order_id":"ORD_001561","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_001562:1","order_id":"ORD_001562","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_001562:2","order_id":"ORD_001562","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_001563:1","order_id":"ORD_001563","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_001563:2","order_id":"ORD_001563","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_001563:3","order_id":"ORD_001563","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_001564:1","order_id":"ORD_001564","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_001564:2","order_id":"ORD_001564","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_001564:3","order_id":"ORD_001564","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_001564:4","order_id":"ORD_001564","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_001565:1","order_id":"ORD_001565","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_001565:2","order_id":"ORD_001565","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_001565:3","order_id":"ORD_001565","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_001565:4","order_id":"ORD_001565","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_001565:5","order_id":"ORD_001565","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_001566:1","order_id":"ORD_001566","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_001567:1","order_id":"ORD_001567","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_001567:2","order_id":"ORD_001567","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_001568:1","order_id":"ORD_001568","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_001568:2","order_id":"ORD_001568","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_001568:3","order_id":"ORD_001568","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_001569:1","order_id":"ORD_001569","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_001569:2","order_id":"ORD_001569","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_001569:3","order_id":"ORD_001569","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_001569:4","order_id":"ORD_001569","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_001570:1","order_id":"ORD_001570","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_001570:2","order_id":"ORD_001570","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_001570:3","order_id":"ORD_001570","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_001570:4","order_id":"ORD_001570","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_001570:5","order_id":"ORD_001570","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_001571:1","order_id":"ORD_001571","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_001572:1","order_id":"ORD_001572","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_001572:2","order_id":"ORD_001572","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_001573:1","order_id":"ORD_001573","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_001573:2","order_id":"ORD_001573","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_001573:3","order_id":"ORD_001573","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_001574:1","order_id":"ORD_001574","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_001574:2","order_id":"ORD_001574","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_001574:3","order_id":"ORD_001574","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_001574:4","order_id":"ORD_001574","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_001575:1","order_id":"ORD_001575","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_001575:2","order_id":"ORD_001575","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_001575:3","order_id":"ORD_001575","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_001575:4","order_id":"ORD_001575","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_001575:5","order_id":"ORD_001575","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_001576:1","order_id":"ORD_001576","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_001577:1","order_id":"ORD_001577","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_001577:2","order_id":"ORD_001577","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_001578:1","order_id":"ORD_001578","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_001578:2","order_id":"ORD_001578","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_001578:3","order_id":"ORD_001578","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_001579:1","order_id":"ORD_001579","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_001579:2","order_id":"ORD_001579","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_001579:3","order_id":"ORD_001579","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_001579:4","order_id":"ORD_001579","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_001580:1","order_id":"ORD_001580","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_001580:2","order_id":"ORD_001580","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_001580:3","order_id":"ORD_001580","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_001580:4","order_id":"ORD_001580","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_001580:5","order_id":"ORD_001580","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_001581:1","order_id":"ORD_001581","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_001582:1","order_id":"ORD_001582","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_001582:2","order_id":"ORD_001582","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_001583:1","order_id":"ORD_001583","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_001583:2","order_id":"ORD_001583","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_001583:3","order_id":"ORD_001583","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_001584:1","order_id":"ORD_001584","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_001584:2","order_id":"ORD_001584","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_001584:3","order_id":"ORD_001584","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_001584:4","order_id":"ORD_001584","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_001585:1","order_id":"ORD_001585","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_001585:2","order_id":"ORD_001585","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_001585:3","order_id":"ORD_001585","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_001585:4","order_id":"ORD_001585","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_001585:5","order_id":"ORD_001585","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_001586:1","order_id":"ORD_001586","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_001587:1","order_id":"ORD_001587","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_001587:2","order_id":"ORD_001587","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_001588:1","order_id":"ORD_001588","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_001588:2","order_id":"ORD_001588","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_001588:3","order_id":"ORD_001588","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_001589:1","order_id":"ORD_001589","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_001589:2","order_id":"ORD_001589","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_001589:3","order_id":"ORD_001589","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_001589:4","order_id":"ORD_001589","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_001590:1","order_id":"ORD_001590","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_001590:2","order_id":"ORD_001590","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_001590:3","order_id":"ORD_001590","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_001590:4","order_id":"ORD_001590","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_001590:5","order_id":"ORD_001590","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_001591:1","order_id":"ORD_001591","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_001592:1","order_id":"ORD_001592","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_001592:2","order_id":"ORD_001592","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_001593:1","order_id":"ORD_001593","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_001593:2","order_id":"ORD_001593","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_001593:3","order_id":"ORD_001593","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_001594:1","order_id":"ORD_001594","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_001594:2","order_id":"ORD_001594","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_001594:3","order_id":"ORD_001594","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_001594:4","order_id":"ORD_001594","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_001595:1","order_id":"ORD_001595","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_001595:2","order_id":"ORD_001595","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_001595:3","order_id":"ORD_001595","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_001595:4","order_id":"ORD_001595","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_001595:5","order_id":"ORD_001595","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_001596:1","order_id":"ORD_001596","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_001597:1","order_id":"ORD_001597","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_001597:2","order_id":"ORD_001597","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_001598:1","order_id":"ORD_001598","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_001598:2","order_id":"ORD_001598","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_001598:3","order_id":"ORD_001598","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_001599:1","order_id":"ORD_001599","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_001599:2","order_id":"ORD_001599","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_001599:3","order_id":"ORD_001599","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_001599:4","order_id":"ORD_001599","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_001600:1","order_id":"ORD_001600","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_001600:2","order_id":"ORD_001600","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_001600:3","order_id":"ORD_001600","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_001600:4","order_id":"ORD_001600","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_001600:5","order_id":"ORD_001600","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_001601:1","order_id":"ORD_001601","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_001602:1","order_id":"ORD_001602","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_001602:2","order_id":"ORD_001602","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_001603:1","order_id":"ORD_001603","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_001603:2","order_id":"ORD_001603","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_001603:3","order_id":"ORD_001603","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_001604:1","order_id":"ORD_001604","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_001604:2","order_id":"ORD_001604","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_001604:3","order_id":"ORD_001604","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_001604:4","order_id":"ORD_001604","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_001605:1","order_id":"ORD_001605","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_001605:2","order_id":"ORD_001605","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_001605:3","order_id":"ORD_001605","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_001605:4","order_id":"ORD_001605","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_001605:5","order_id":"ORD_001605","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_001606:1","order_id":"ORD_001606","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_001607:1","order_id":"ORD_001607","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_001607:2","order_id":"ORD_001607","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_001608:1","order_id":"ORD_001608","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_001608:2","order_id":"ORD_001608","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_001608:3","order_id":"ORD_001608","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_001609:1","order_id":"ORD_001609","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_001609:2","order_id":"ORD_001609","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_001609:3","order_id":"ORD_001609","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_001609:4","order_id":"ORD_001609","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_001610:1","order_id":"ORD_001610","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_001610:2","order_id":"ORD_001610","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_001610:3","order_id":"ORD_001610","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_001610:4","order_id":"ORD_001610","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_001610:5","order_id":"ORD_001610","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_001611:1","order_id":"ORD_001611","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_001612:1","order_id":"ORD_001612","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_001612:2","order_id":"ORD_001612","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_001613:1","order_id":"ORD_001613","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_001613:2","order_id":"ORD_001613","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_001613:3","order_id":"ORD_001613","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_001614:1","order_id":"ORD_001614","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_001614:2","order_id":"ORD_001614","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_001614:3","order_id":"ORD_001614","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_001614:4","order_id":"ORD_001614","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_001615:1","order_id":"ORD_001615","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_001615:2","order_id":"ORD_001615","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_001615:3","order_id":"ORD_001615","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_001615:4","order_id":"ORD_001615","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_001615:5","order_id":"ORD_001615","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_001616:1","order_id":"ORD_001616","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_001617:1","order_id":"ORD_001617","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_001617:2","order_id":"ORD_001617","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_001618:1","order_id":"ORD_001618","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_001618:2","order_id":"ORD_001618","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_001618:3","order_id":"ORD_001618","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_001619:1","order_id":"ORD_001619","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_001619:2","order_id":"ORD_001619","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_001619:3","order_id":"ORD_001619","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_001619:4","order_id":"ORD_001619","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_001620:1","order_id":"ORD_001620","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_001620:2","order_id":"ORD_001620","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_001620:3","order_id":"ORD_001620","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_001620:4","order_id":"ORD_001620","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_001620:5","order_id":"ORD_001620","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_001621:1","order_id":"ORD_001621","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_001622:1","order_id":"ORD_001622","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_001622:2","order_id":"ORD_001622","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_001623:1","order_id":"ORD_001623","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_001623:2","order_id":"ORD_001623","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_001623:3","order_id":"ORD_001623","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_001624:1","order_id":"ORD_001624","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_001624:2","order_id":"ORD_001624","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_001624:3","order_id":"ORD_001624","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_001624:4","order_id":"ORD_001624","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_001625:1","order_id":"ORD_001625","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_001625:2","order_id":"ORD_001625","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_001625:3","order_id":"ORD_001625","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_001625:4","order_id":"ORD_001625","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_001625:5","order_id":"ORD_001625","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_001626:1","order_id":"ORD_001626","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_001627:1","order_id":"ORD_001627","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_001627:2","order_id":"ORD_001627","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_001628:1","order_id":"ORD_001628","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_001628:2","order_id":"ORD_001628","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_001628:3","order_id":"ORD_001628","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_001629:1","order_id":"ORD_001629","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_001629:2","order_id":"ORD_001629","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_001629:3","order_id":"ORD_001629","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_001629:4","order_id":"ORD_001629","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_001630:1","order_id":"ORD_001630","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_001630:2","order_id":"ORD_001630","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_001630:3","order_id":"ORD_001630","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_001630:4","order_id":"ORD_001630","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_001630:5","order_id":"ORD_001630","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_001631:1","order_id":"ORD_001631","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_001632:1","order_id":"ORD_001632","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_001632:2","order_id":"ORD_001632","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_001633:1","order_id":"ORD_001633","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_001633:2","order_id":"ORD_001633","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_001633:3","order_id":"ORD_001633","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_001634:1","order_id":"ORD_001634","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_001634:2","order_id":"ORD_001634","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_001634:3","order_id":"ORD_001634","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_001634:4","order_id":"ORD_001634","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_001635:1","order_id":"ORD_001635","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_001635:2","order_id":"ORD_001635","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_001635:3","order_id":"ORD_001635","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_001635:4","order_id":"ORD_001635","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_001635:5","order_id":"ORD_001635","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_001636:1","order_id":"ORD_001636","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_001637:1","order_id":"ORD_001637","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_001637:2","order_id":"ORD_001637","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_001638:1","order_id":"ORD_001638","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_001638:2","order_id":"ORD_001638","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_001638:3","order_id":"ORD_001638","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_001639:1","order_id":"ORD_001639","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_001639:2","order_id":"ORD_001639","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_001639:3","order_id":"ORD_001639","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_001639:4","order_id":"ORD_001639","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_001640:1","order_id":"ORD_001640","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_001640:2","order_id":"ORD_001640","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_001640:3","order_id":"ORD_001640","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_001640:4","order_id":"ORD_001640","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_001640:5","order_id":"ORD_001640","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_001641:1","order_id":"ORD_001641","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_001642:1","order_id":"ORD_001642","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_001642:2","order_id":"ORD_001642","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_001643:1","order_id":"ORD_001643","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_001643:2","order_id":"ORD_001643","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_001643:3","order_id":"ORD_001643","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_001644:1","order_id":"ORD_001644","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_001644:2","order_id":"ORD_001644","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_001644:3","order_id":"ORD_001644","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_001644:4","order_id":"ORD_001644","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_001645:1","order_id":"ORD_001645","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_001645:2","order_id":"ORD_001645","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_001645:3","order_id":"ORD_001645","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_001645:4","order_id":"ORD_001645","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_001645:5","order_id":"ORD_001645","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_001646:1","order_id":"ORD_001646","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_001647:1","order_id":"ORD_001647","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_001647:2","order_id":"ORD_001647","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_001648:1","order_id":"ORD_001648","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_001648:2","order_id":"ORD_001648","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_001648:3","order_id":"ORD_001648","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_001649:1","order_id":"ORD_001649","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_001649:2","order_id":"ORD_001649","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_001649:3","order_id":"ORD_001649","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_001649:4","order_id":"ORD_001649","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_001650:1","order_id":"ORD_001650","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_001650:2","order_id":"ORD_001650","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_001650:3","order_id":"ORD_001650","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_001650:4","order_id":"ORD_001650","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_001650:5","order_id":"ORD_001650","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_001651:1","order_id":"ORD_001651","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_001652:1","order_id":"ORD_001652","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_001652:2","order_id":"ORD_001652","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_001653:1","order_id":"ORD_001653","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_001653:2","order_id":"ORD_001653","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_001653:3","order_id":"ORD_001653","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_001654:1","order_id":"ORD_001654","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_001654:2","order_id":"ORD_001654","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_001654:3","order_id":"ORD_001654","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_001654:4","order_id":"ORD_001654","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_001655:1","order_id":"ORD_001655","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_001655:2","order_id":"ORD_001655","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_001655:3","order_id":"ORD_001655","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_001655:4","order_id":"ORD_001655","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_001655:5","order_id":"ORD_001655","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_001656:1","order_id":"ORD_001656","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_001657:1","order_id":"ORD_001657","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_001657:2","order_id":"ORD_001657","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_001658:1","order_id":"ORD_001658","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_001658:2","order_id":"ORD_001658","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_001658:3","order_id":"ORD_001658","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_001659:1","order_id":"ORD_001659","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_001659:2","order_id":"ORD_001659","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_001659:3","order_id":"ORD_001659","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_001659:4","order_id":"ORD_001659","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_001660:1","order_id":"ORD_001660","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_001660:2","order_id":"ORD_001660","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_001660:3","order_id":"ORD_001660","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_001660:4","order_id":"ORD_001660","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_001660:5","order_id":"ORD_001660","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_001661:1","order_id":"ORD_001661","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_001662:1","order_id":"ORD_001662","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_001662:2","order_id":"ORD_001662","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_001663:1","order_id":"ORD_001663","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_001663:2","order_id":"ORD_001663","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_001663:3","order_id":"ORD_001663","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_001664:1","order_id":"ORD_001664","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_001664:2","order_id":"ORD_001664","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_001664:3","order_id":"ORD_001664","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_001664:4","order_id":"ORD_001664","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_001665:1","order_id":"ORD_001665","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_001665:2","order_id":"ORD_001665","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_001665:3","order_id":"ORD_001665","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_001665:4","order_id":"ORD_001665","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_001665:5","order_id":"ORD_001665","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_001666:1","order_id":"ORD_001666","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_001667:1","order_id":"ORD_001667","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_001667:2","order_id":"ORD_001667","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_001668:1","order_id":"ORD_001668","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_001668:2","order_id":"ORD_001668","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_001668:3","order_id":"ORD_001668","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_001669:1","order_id":"ORD_001669","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_001669:2","order_id":"ORD_001669","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_001669:3","order_id":"ORD_001669","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_001669:4","order_id":"ORD_001669","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_001670:1","order_id":"ORD_001670","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_001670:2","order_id":"ORD_001670","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_001670:3","order_id":"ORD_001670","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_001670:4","order_id":"ORD_001670","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_001670:5","order_id":"ORD_001670","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_001671:1","order_id":"ORD_001671","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_001672:1","order_id":"ORD_001672","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_001672:2","order_id":"ORD_001672","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_001673:1","order_id":"ORD_001673","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_001673:2","order_id":"ORD_001673","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_001673:3","order_id":"ORD_001673","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_001674:1","order_id":"ORD_001674","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_001674:2","order_id":"ORD_001674","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_001674:3","order_id":"ORD_001674","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_001674:4","order_id":"ORD_001674","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_001675:1","order_id":"ORD_001675","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_001675:2","order_id":"ORD_001675","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_001675:3","order_id":"ORD_001675","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_001675:4","order_id":"ORD_001675","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_001675:5","order_id":"ORD_001675","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_001676:1","order_id":"ORD_001676","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_001677:1","order_id":"ORD_001677","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_001677:2","order_id":"ORD_001677","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_001678:1","order_id":"ORD_001678","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_001678:2","order_id":"ORD_001678","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_001678:3","order_id":"ORD_001678","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_001679:1","order_id":"ORD_001679","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_001679:2","order_id":"ORD_001679","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_001679:3","order_id":"ORD_001679","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_001679:4","order_id":"ORD_001679","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_001680:1","order_id":"ORD_001680","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_001680:2","order_id":"ORD_001680","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_001680:3","order_id":"ORD_001680","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_001680:4","order_id":"ORD_001680","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_001680:5","order_id":"ORD_001680","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_001681:1","order_id":"ORD_001681","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_001682:1","order_id":"ORD_001682","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_001682:2","order_id":"ORD_001682","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_001683:1","order_id":"ORD_001683","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_001683:2","order_id":"ORD_001683","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_001683:3","order_id":"ORD_001683","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_001684:1","order_id":"ORD_001684","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_001684:2","order_id":"ORD_001684","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_001684:3","order_id":"ORD_001684","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_001684:4","order_id":"ORD_001684","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_001685:1","order_id":"ORD_001685","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_001685:2","order_id":"ORD_001685","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_001685:3","order_id":"ORD_001685","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_001685:4","order_id":"ORD_001685","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_001685:5","order_id":"ORD_001685","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_001686:1","order_id":"ORD_001686","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_001687:1","order_id":"ORD_001687","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_001687:2","order_id":"ORD_001687","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_001688:1","order_id":"ORD_001688","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_001688:2","order_id":"ORD_001688","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_001688:3","order_id":"ORD_001688","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_001689:1","order_id":"ORD_001689","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_001689:2","order_id":"ORD_001689","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_001689:3","order_id":"ORD_001689","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_001689:4","order_id":"ORD_001689","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_001690:1","order_id":"ORD_001690","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_001690:2","order_id":"ORD_001690","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_001690:3","order_id":"ORD_001690","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_001690:4","order_id":"ORD_001690","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_001690:5","order_id":"ORD_001690","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_001691:1","order_id":"ORD_001691","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_001692:1","order_id":"ORD_001692","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_001692:2","order_id":"ORD_001692","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_001693:1","order_id":"ORD_001693","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_001693:2","order_id":"ORD_001693","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_001693:3","order_id":"ORD_001693","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_001694:1","order_id":"ORD_001694","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_001694:2","order_id":"ORD_001694","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_001694:3","order_id":"ORD_001694","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_001694:4","order_id":"ORD_001694","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_001695:1","order_id":"ORD_001695","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_001695:2","order_id":"ORD_001695","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_001695:3","order_id":"ORD_001695","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_001695:4","order_id":"ORD_001695","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_001695:5","order_id":"ORD_001695","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_001696:1","order_id":"ORD_001696","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_001697:1","order_id":"ORD_001697","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_001697:2","order_id":"ORD_001697","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_001698:1","order_id":"ORD_001698","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_001698:2","order_id":"ORD_001698","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_001698:3","order_id":"ORD_001698","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_001699:1","order_id":"ORD_001699","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_001699:2","order_id":"ORD_001699","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_001699:3","order_id":"ORD_001699","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_001699:4","order_id":"ORD_001699","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_001700:1","order_id":"ORD_001700","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_001700:2","order_id":"ORD_001700","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_001700:3","order_id":"ORD_001700","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_001700:4","order_id":"ORD_001700","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_001700:5","order_id":"ORD_001700","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_001701:1","order_id":"ORD_001701","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_001702:1","order_id":"ORD_001702","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_001702:2","order_id":"ORD_001702","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_001703:1","order_id":"ORD_001703","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_001703:2","order_id":"ORD_001703","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_001703:3","order_id":"ORD_001703","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_001704:1","order_id":"ORD_001704","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_001704:2","order_id":"ORD_001704","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_001704:3","order_id":"ORD_001704","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_001704:4","order_id":"ORD_001704","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_001705:1","order_id":"ORD_001705","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_001705:2","order_id":"ORD_001705","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_001705:3","order_id":"ORD_001705","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_001705:4","order_id":"ORD_001705","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_001705:5","order_id":"ORD_001705","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_001706:1","order_id":"ORD_001706","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_001707:1","order_id":"ORD_001707","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_001707:2","order_id":"ORD_001707","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_001708:1","order_id":"ORD_001708","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_001708:2","order_id":"ORD_001708","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_001708:3","order_id":"ORD_001708","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_001709:1","order_id":"ORD_001709","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_001709:2","order_id":"ORD_001709","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_001709:3","order_id":"ORD_001709","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_001709:4","order_id":"ORD_001709","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_001710:1","order_id":"ORD_001710","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_001710:2","order_id":"ORD_001710","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_001710:3","order_id":"ORD_001710","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_001710:4","order_id":"ORD_001710","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_001710:5","order_id":"ORD_001710","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_001711:1","order_id":"ORD_001711","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_001712:1","order_id":"ORD_001712","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_001712:2","order_id":"ORD_001712","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_001713:1","order_id":"ORD_001713","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_001713:2","order_id":"ORD_001713","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_001713:3","order_id":"ORD_001713","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_001714:1","order_id":"ORD_001714","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_001714:2","order_id":"ORD_001714","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_001714:3","order_id":"ORD_001714","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_001714:4","order_id":"ORD_001714","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_001715:1","order_id":"ORD_001715","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_001715:2","order_id":"ORD_001715","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_001715:3","order_id":"ORD_001715","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_001715:4","order_id":"ORD_001715","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_001715:5","order_id":"ORD_001715","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_001716:1","order_id":"ORD_001716","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_001717:1","order_id":"ORD_001717","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_001717:2","order_id":"ORD_001717","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_001718:1","order_id":"ORD_001718","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_001718:2","order_id":"ORD_001718","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_001718:3","order_id":"ORD_001718","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_001719:1","order_id":"ORD_001719","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_001719:2","order_id":"ORD_001719","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_001719:3","order_id":"ORD_001719","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_001719:4","order_id":"ORD_001719","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_001720:1","order_id":"ORD_001720","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_001720:2","order_id":"ORD_001720","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_001720:3","order_id":"ORD_001720","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_001720:4","order_id":"ORD_001720","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_001720:5","order_id":"ORD_001720","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_001721:1","order_id":"ORD_001721","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_001722:1","order_id":"ORD_001722","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_001722:2","order_id":"ORD_001722","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_001723:1","order_id":"ORD_001723","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_001723:2","order_id":"ORD_001723","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_001723:3","order_id":"ORD_001723","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_001724:1","order_id":"ORD_001724","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_001724:2","order_id":"ORD_001724","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_001724:3","order_id":"ORD_001724","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_001724:4","order_id":"ORD_001724","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_001725:1","order_id":"ORD_001725","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_001725:2","order_id":"ORD_001725","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_001725:3","order_id":"ORD_001725","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_001725:4","order_id":"ORD_001725","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_001725:5","order_id":"ORD_001725","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_001726:1","order_id":"ORD_001726","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_001727:1","order_id":"ORD_001727","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_001727:2","order_id":"ORD_001727","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_001728:1","order_id":"ORD_001728","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_001728:2","order_id":"ORD_001728","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_001728:3","order_id":"ORD_001728","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_001729:1","order_id":"ORD_001729","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_001729:2","order_id":"ORD_001729","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_001729:3","order_id":"ORD_001729","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_001729:4","order_id":"ORD_001729","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_001730:1","order_id":"ORD_001730","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_001730:2","order_id":"ORD_001730","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_001730:3","order_id":"ORD_001730","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_001730:4","order_id":"ORD_001730","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_001730:5","order_id":"ORD_001730","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_001731:1","order_id":"ORD_001731","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_001732:1","order_id":"ORD_001732","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_001732:2","order_id":"ORD_001732","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_001733:1","order_id":"ORD_001733","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_001733:2","order_id":"ORD_001733","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_001733:3","order_id":"ORD_001733","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_001734:1","order_id":"ORD_001734","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_001734:2","order_id":"ORD_001734","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_001734:3","order_id":"ORD_001734","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_001734:4","order_id":"ORD_001734","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_001735:1","order_id":"ORD_001735","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_001735:2","order_id":"ORD_001735","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_001735:3","order_id":"ORD_001735","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_001735:4","order_id":"ORD_001735","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_001735:5","order_id":"ORD_001735","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_001736:1","order_id":"ORD_001736","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_001737:1","order_id":"ORD_001737","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_001737:2","order_id":"ORD_001737","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_001738:1","order_id":"ORD_001738","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_001738:2","order_id":"ORD_001738","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_001738:3","order_id":"ORD_001738","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_001739:1","order_id":"ORD_001739","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_001739:2","order_id":"ORD_001739","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_001739:3","order_id":"ORD_001739","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_001739:4","order_id":"ORD_001739","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_001740:1","order_id":"ORD_001740","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_001740:2","order_id":"ORD_001740","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_001740:3","order_id":"ORD_001740","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_001740:4","order_id":"ORD_001740","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_001740:5","order_id":"ORD_001740","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_001741:1","order_id":"ORD_001741","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_001742:1","order_id":"ORD_001742","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_001742:2","order_id":"ORD_001742","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_001743:1","order_id":"ORD_001743","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_001743:2","order_id":"ORD_001743","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_001743:3","order_id":"ORD_001743","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_001744:1","order_id":"ORD_001744","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_001744:2","order_id":"ORD_001744","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_001744:3","order_id":"ORD_001744","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_001744:4","order_id":"ORD_001744","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_001745:1","order_id":"ORD_001745","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_001745:2","order_id":"ORD_001745","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_001745:3","order_id":"ORD_001745","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_001745:4","order_id":"ORD_001745","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_001745:5","order_id":"ORD_001745","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_001746:1","order_id":"ORD_001746","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_001747:1","order_id":"ORD_001747","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_001747:2","order_id":"ORD_001747","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_001748:1","order_id":"ORD_001748","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_001748:2","order_id":"ORD_001748","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_001748:3","order_id":"ORD_001748","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_001749:1","order_id":"ORD_001749","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_001749:2","order_id":"ORD_001749","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_001749:3","order_id":"ORD_001749","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_001749:4","order_id":"ORD_001749","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_001750:1","order_id":"ORD_001750","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_001750:2","order_id":"ORD_001750","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_001750:3","order_id":"ORD_001750","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_001750:4","order_id":"ORD_001750","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_001750:5","order_id":"ORD_001750","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_001751:1","order_id":"ORD_001751","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_001752:1","order_id":"ORD_001752","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_001752:2","order_id":"ORD_001752","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_001753:1","order_id":"ORD_001753","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_001753:2","order_id":"ORD_001753","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_001753:3","order_id":"ORD_001753","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_001754:1","order_id":"ORD_001754","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_001754:2","order_id":"ORD_001754","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_001754:3","order_id":"ORD_001754","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_001754:4","order_id":"ORD_001754","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_001755:1","order_id":"ORD_001755","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_001755:2","order_id":"ORD_001755","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_001755:3","order_id":"ORD_001755","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_001755:4","order_id":"ORD_001755","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_001755:5","order_id":"ORD_001755","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_001756:1","order_id":"ORD_001756","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_001757:1","order_id":"ORD_001757","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_001757:2","order_id":"ORD_001757","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_001758:1","order_id":"ORD_001758","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_001758:2","order_id":"ORD_001758","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_001758:3","order_id":"ORD_001758","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_001759:1","order_id":"ORD_001759","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_001759:2","order_id":"ORD_001759","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_001759:3","order_id":"ORD_001759","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_001759:4","order_id":"ORD_001759","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_001760:1","order_id":"ORD_001760","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_001760:2","order_id":"ORD_001760","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_001760:3","order_id":"ORD_001760","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_001760:4","order_id":"ORD_001760","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_001760:5","order_id":"ORD_001760","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_001761:1","order_id":"ORD_001761","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_001762:1","order_id":"ORD_001762","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_001762:2","order_id":"ORD_001762","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_001763:1","order_id":"ORD_001763","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_001763:2","order_id":"ORD_001763","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_001763:3","order_id":"ORD_001763","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_001764:1","order_id":"ORD_001764","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_001764:2","order_id":"ORD_001764","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_001764:3","order_id":"ORD_001764","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_001764:4","order_id":"ORD_001764","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_001765:1","order_id":"ORD_001765","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_001765:2","order_id":"ORD_001765","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_001765:3","order_id":"ORD_001765","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_001765:4","order_id":"ORD_001765","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_001765:5","order_id":"ORD_001765","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_001766:1","order_id":"ORD_001766","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_001767:1","order_id":"ORD_001767","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_001767:2","order_id":"ORD_001767","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_001768:1","order_id":"ORD_001768","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_001768:2","order_id":"ORD_001768","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_001768:3","order_id":"ORD_001768","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_001769:1","order_id":"ORD_001769","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_001769:2","order_id":"ORD_001769","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_001769:3","order_id":"ORD_001769","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_001769:4","order_id":"ORD_001769","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_001770:1","order_id":"ORD_001770","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_001770:2","order_id":"ORD_001770","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_001770:3","order_id":"ORD_001770","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_001770:4","order_id":"ORD_001770","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_001770:5","order_id":"ORD_001770","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_001771:1","order_id":"ORD_001771","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_001772:1","order_id":"ORD_001772","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_001772:2","order_id":"ORD_001772","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_001773:1","order_id":"ORD_001773","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_001773:2","order_id":"ORD_001773","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_001773:3","order_id":"ORD_001773","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_001774:1","order_id":"ORD_001774","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_001774:2","order_id":"ORD_001774","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_001774:3","order_id":"ORD_001774","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_001774:4","order_id":"ORD_001774","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_001775:1","order_id":"ORD_001775","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_001775:2","order_id":"ORD_001775","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_001775:3","order_id":"ORD_001775","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_001775:4","order_id":"ORD_001775","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_001775:5","order_id":"ORD_001775","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_001776:1","order_id":"ORD_001776","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_001777:1","order_id":"ORD_001777","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_001777:2","order_id":"ORD_001777","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_001778:1","order_id":"ORD_001778","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_001778:2","order_id":"ORD_001778","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_001778:3","order_id":"ORD_001778","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_001779:1","order_id":"ORD_001779","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_001779:2","order_id":"ORD_001779","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_001779:3","order_id":"ORD_001779","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_001779:4","order_id":"ORD_001779","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_001780:1","order_id":"ORD_001780","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_001780:2","order_id":"ORD_001780","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_001780:3","order_id":"ORD_001780","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_001780:4","order_id":"ORD_001780","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_001780:5","order_id":"ORD_001780","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_001781:1","order_id":"ORD_001781","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_001782:1","order_id":"ORD_001782","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_001782:2","order_id":"ORD_001782","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_001783:1","order_id":"ORD_001783","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_001783:2","order_id":"ORD_001783","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_001783:3","order_id":"ORD_001783","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_001784:1","order_id":"ORD_001784","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_001784:2","order_id":"ORD_001784","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_001784:3","order_id":"ORD_001784","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_001784:4","order_id":"ORD_001784","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_001785:1","order_id":"ORD_001785","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_001785:2","order_id":"ORD_001785","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_001785:3","order_id":"ORD_001785","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_001785:4","order_id":"ORD_001785","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_001785:5","order_id":"ORD_001785","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_001786:1","order_id":"ORD_001786","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_001787:1","order_id":"ORD_001787","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_001787:2","order_id":"ORD_001787","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_001788:1","order_id":"ORD_001788","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_001788:2","order_id":"ORD_001788","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_001788:3","order_id":"ORD_001788","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_001789:1","order_id":"ORD_001789","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_001789:2","order_id":"ORD_001789","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_001789:3","order_id":"ORD_001789","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_001789:4","order_id":"ORD_001789","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_001790:1","order_id":"ORD_001790","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_001790:2","order_id":"ORD_001790","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_001790:3","order_id":"ORD_001790","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_001790:4","order_id":"ORD_001790","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_001790:5","order_id":"ORD_001790","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_001791:1","order_id":"ORD_001791","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_001792:1","order_id":"ORD_001792","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_001792:2","order_id":"ORD_001792","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_001793:1","order_id":"ORD_001793","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_001793:2","order_id":"ORD_001793","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_001793:3","order_id":"ORD_001793","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_001794:1","order_id":"ORD_001794","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_001794:2","order_id":"ORD_001794","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_001794:3","order_id":"ORD_001794","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_001794:4","order_id":"ORD_001794","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_001795:1","order_id":"ORD_001795","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_001795:2","order_id":"ORD_001795","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_001795:3","order_id":"ORD_001795","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_001795:4","order_id":"ORD_001795","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_001795:5","order_id":"ORD_001795","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_001796:1","order_id":"ORD_001796","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_001797:1","order_id":"ORD_001797","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_001797:2","order_id":"ORD_001797","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_001798:1","order_id":"ORD_001798","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_001798:2","order_id":"ORD_001798","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_001798:3","order_id":"ORD_001798","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_001799:1","order_id":"ORD_001799","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_001799:2","order_id":"ORD_001799","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_001799:3","order_id":"ORD_001799","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_001799:4","order_id":"ORD_001799","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_001800:1","order_id":"ORD_001800","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_001800:2","order_id":"ORD_001800","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_001800:3","order_id":"ORD_001800","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_001800:4","order_id":"ORD_001800","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_001800:5","order_id":"ORD_001800","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_001801:1","order_id":"ORD_001801","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_001802:1","order_id":"ORD_001802","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_001802:2","order_id":"ORD_001802","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_001803:1","order_id":"ORD_001803","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_001803:2","order_id":"ORD_001803","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_001803:3","order_id":"ORD_001803","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_001804:1","order_id":"ORD_001804","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_001804:2","order_id":"ORD_001804","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_001804:3","order_id":"ORD_001804","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_001804:4","order_id":"ORD_001804","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_001805:1","order_id":"ORD_001805","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_001805:2","order_id":"ORD_001805","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_001805:3","order_id":"ORD_001805","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_001805:4","order_id":"ORD_001805","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_001805:5","order_id":"ORD_001805","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_001806:1","order_id":"ORD_001806","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_001807:1","order_id":"ORD_001807","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_001807:2","order_id":"ORD_001807","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_001808:1","order_id":"ORD_001808","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_001808:2","order_id":"ORD_001808","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_001808:3","order_id":"ORD_001808","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_001809:1","order_id":"ORD_001809","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_001809:2","order_id":"ORD_001809","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_001809:3","order_id":"ORD_001809","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_001809:4","order_id":"ORD_001809","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_001810:1","order_id":"ORD_001810","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_001810:2","order_id":"ORD_001810","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_001810:3","order_id":"ORD_001810","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_001810:4","order_id":"ORD_001810","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_001810:5","order_id":"ORD_001810","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_001811:1","order_id":"ORD_001811","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_001812:1","order_id":"ORD_001812","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_001812:2","order_id":"ORD_001812","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_001813:1","order_id":"ORD_001813","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_001813:2","order_id":"ORD_001813","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_001813:3","order_id":"ORD_001813","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_001814:1","order_id":"ORD_001814","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_001814:2","order_id":"ORD_001814","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_001814:3","order_id":"ORD_001814","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_001814:4","order_id":"ORD_001814","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_001815:1","order_id":"ORD_001815","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_001815:2","order_id":"ORD_001815","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_001815:3","order_id":"ORD_001815","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_001815:4","order_id":"ORD_001815","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_001815:5","order_id":"ORD_001815","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_001816:1","order_id":"ORD_001816","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_001817:1","order_id":"ORD_001817","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_001817:2","order_id":"ORD_001817","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_001818:1","order_id":"ORD_001818","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_001818:2","order_id":"ORD_001818","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_001818:3","order_id":"ORD_001818","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_001819:1","order_id":"ORD_001819","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_001819:2","order_id":"ORD_001819","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_001819:3","order_id":"ORD_001819","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_001819:4","order_id":"ORD_001819","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_001820:1","order_id":"ORD_001820","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_001820:2","order_id":"ORD_001820","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_001820:3","order_id":"ORD_001820","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_001820:4","order_id":"ORD_001820","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_001820:5","order_id":"ORD_001820","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_001821:1","order_id":"ORD_001821","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_001822:1","order_id":"ORD_001822","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_001822:2","order_id":"ORD_001822","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_001823:1","order_id":"ORD_001823","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_001823:2","order_id":"ORD_001823","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_001823:3","order_id":"ORD_001823","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_001824:1","order_id":"ORD_001824","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_001824:2","order_id":"ORD_001824","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_001824:3","order_id":"ORD_001824","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_001824:4","order_id":"ORD_001824","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_001825:1","order_id":"ORD_001825","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_001825:2","order_id":"ORD_001825","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_001825:3","order_id":"ORD_001825","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_001825:4","order_id":"ORD_001825","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_001825:5","order_id":"ORD_001825","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_001826:1","order_id":"ORD_001826","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_001827:1","order_id":"ORD_001827","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_001827:2","order_id":"ORD_001827","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_001828:1","order_id":"ORD_001828","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_001828:2","order_id":"ORD_001828","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_001828:3","order_id":"ORD_001828","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_001829:1","order_id":"ORD_001829","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_001829:2","order_id":"ORD_001829","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_001829:3","order_id":"ORD_001829","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_001829:4","order_id":"ORD_001829","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_001830:1","order_id":"ORD_001830","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_001830:2","order_id":"ORD_001830","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_001830:3","order_id":"ORD_001830","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_001830:4","order_id":"ORD_001830","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_001830:5","order_id":"ORD_001830","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_001831:1","order_id":"ORD_001831","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_001832:1","order_id":"ORD_001832","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_001832:2","order_id":"ORD_001832","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_001833:1","order_id":"ORD_001833","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_001833:2","order_id":"ORD_001833","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_001833:3","order_id":"ORD_001833","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_001834:1","order_id":"ORD_001834","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_001834:2","order_id":"ORD_001834","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_001834:3","order_id":"ORD_001834","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_001834:4","order_id":"ORD_001834","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_001835:1","order_id":"ORD_001835","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_001835:2","order_id":"ORD_001835","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_001835:3","order_id":"ORD_001835","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_001835:4","order_id":"ORD_001835","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_001835:5","order_id":"ORD_001835","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_001836:1","order_id":"ORD_001836","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_001837:1","order_id":"ORD_001837","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_001837:2","order_id":"ORD_001837","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_001838:1","order_id":"ORD_001838","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_001838:2","order_id":"ORD_001838","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_001838:3","order_id":"ORD_001838","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_001839:1","order_id":"ORD_001839","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_001839:2","order_id":"ORD_001839","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_001839:3","order_id":"ORD_001839","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_001839:4","order_id":"ORD_001839","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_001840:1","order_id":"ORD_001840","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_001840:2","order_id":"ORD_001840","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_001840:3","order_id":"ORD_001840","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_001840:4","order_id":"ORD_001840","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_001840:5","order_id":"ORD_001840","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_001841:1","order_id":"ORD_001841","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_001842:1","order_id":"ORD_001842","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_001842:2","order_id":"ORD_001842","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_001843:1","order_id":"ORD_001843","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_001843:2","order_id":"ORD_001843","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_001843:3","order_id":"ORD_001843","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_001844:1","order_id":"ORD_001844","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_001844:2","order_id":"ORD_001844","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_001844:3","order_id":"ORD_001844","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_001844:4","order_id":"ORD_001844","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_001845:1","order_id":"ORD_001845","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_001845:2","order_id":"ORD_001845","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_001845:3","order_id":"ORD_001845","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_001845:4","order_id":"ORD_001845","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_001845:5","order_id":"ORD_001845","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_001846:1","order_id":"ORD_001846","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_001847:1","order_id":"ORD_001847","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_001847:2","order_id":"ORD_001847","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_001848:1","order_id":"ORD_001848","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_001848:2","order_id":"ORD_001848","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_001848:3","order_id":"ORD_001848","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_001849:1","order_id":"ORD_001849","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_001849:2","order_id":"ORD_001849","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_001849:3","order_id":"ORD_001849","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_001849:4","order_id":"ORD_001849","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_001850:1","order_id":"ORD_001850","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_001850:2","order_id":"ORD_001850","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_001850:3","order_id":"ORD_001850","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_001850:4","order_id":"ORD_001850","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_001850:5","order_id":"ORD_001850","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_001851:1","order_id":"ORD_001851","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_001852:1","order_id":"ORD_001852","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_001852:2","order_id":"ORD_001852","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_001853:1","order_id":"ORD_001853","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_001853:2","order_id":"ORD_001853","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_001853:3","order_id":"ORD_001853","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_001854:1","order_id":"ORD_001854","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_001854:2","order_id":"ORD_001854","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_001854:3","order_id":"ORD_001854","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_001854:4","order_id":"ORD_001854","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_001855:1","order_id":"ORD_001855","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_001855:2","order_id":"ORD_001855","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_001855:3","order_id":"ORD_001855","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_001855:4","order_id":"ORD_001855","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_001855:5","order_id":"ORD_001855","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_001856:1","order_id":"ORD_001856","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_001857:1","order_id":"ORD_001857","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_001857:2","order_id":"ORD_001857","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_001858:1","order_id":"ORD_001858","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_001858:2","order_id":"ORD_001858","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_001858:3","order_id":"ORD_001858","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_001859:1","order_id":"ORD_001859","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_001859:2","order_id":"ORD_001859","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_001859:3","order_id":"ORD_001859","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_001859:4","order_id":"ORD_001859","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_001860:1","order_id":"ORD_001860","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_001860:2","order_id":"ORD_001860","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_001860:3","order_id":"ORD_001860","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_001860:4","order_id":"ORD_001860","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_001860:5","order_id":"ORD_001860","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_001861:1","order_id":"ORD_001861","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_001862:1","order_id":"ORD_001862","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_001862:2","order_id":"ORD_001862","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_001863:1","order_id":"ORD_001863","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_001863:2","order_id":"ORD_001863","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_001863:3","order_id":"ORD_001863","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_001864:1","order_id":"ORD_001864","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_001864:2","order_id":"ORD_001864","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_001864:3","order_id":"ORD_001864","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_001864:4","order_id":"ORD_001864","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_001865:1","order_id":"ORD_001865","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_001865:2","order_id":"ORD_001865","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_001865:3","order_id":"ORD_001865","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_001865:4","order_id":"ORD_001865","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_001865:5","order_id":"ORD_001865","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_001866:1","order_id":"ORD_001866","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_001867:1","order_id":"ORD_001867","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_001867:2","order_id":"ORD_001867","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_001868:1","order_id":"ORD_001868","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_001868:2","order_id":"ORD_001868","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_001868:3","order_id":"ORD_001868","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_001869:1","order_id":"ORD_001869","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_001869:2","order_id":"ORD_001869","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_001869:3","order_id":"ORD_001869","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_001869:4","order_id":"ORD_001869","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_001870:1","order_id":"ORD_001870","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_001870:2","order_id":"ORD_001870","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_001870:3","order_id":"ORD_001870","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_001870:4","order_id":"ORD_001870","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_001870:5","order_id":"ORD_001870","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_001871:1","order_id":"ORD_001871","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_001872:1","order_id":"ORD_001872","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_001872:2","order_id":"ORD_001872","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_001873:1","order_id":"ORD_001873","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_001873:2","order_id":"ORD_001873","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_001873:3","order_id":"ORD_001873","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_001874:1","order_id":"ORD_001874","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_001874:2","order_id":"ORD_001874","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_001874:3","order_id":"ORD_001874","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_001874:4","order_id":"ORD_001874","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_001875:1","order_id":"ORD_001875","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_001875:2","order_id":"ORD_001875","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_001875:3","order_id":"ORD_001875","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_001875:4","order_id":"ORD_001875","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_001875:5","order_id":"ORD_001875","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_001876:1","order_id":"ORD_001876","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_001877:1","order_id":"ORD_001877","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_001877:2","order_id":"ORD_001877","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_001878:1","order_id":"ORD_001878","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_001878:2","order_id":"ORD_001878","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_001878:3","order_id":"ORD_001878","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_001879:1","order_id":"ORD_001879","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_001879:2","order_id":"ORD_001879","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_001879:3","order_id":"ORD_001879","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_001879:4","order_id":"ORD_001879","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_001880:1","order_id":"ORD_001880","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_001880:2","order_id":"ORD_001880","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_001880:3","order_id":"ORD_001880","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_001880:4","order_id":"ORD_001880","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_001880:5","order_id":"ORD_001880","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_001881:1","order_id":"ORD_001881","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_001882:1","order_id":"ORD_001882","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_001882:2","order_id":"ORD_001882","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_001883:1","order_id":"ORD_001883","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_001883:2","order_id":"ORD_001883","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_001883:3","order_id":"ORD_001883","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_001884:1","order_id":"ORD_001884","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_001884:2","order_id":"ORD_001884","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_001884:3","order_id":"ORD_001884","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_001884:4","order_id":"ORD_001884","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_001885:1","order_id":"ORD_001885","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_001885:2","order_id":"ORD_001885","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_001885:3","order_id":"ORD_001885","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_001885:4","order_id":"ORD_001885","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_001885:5","order_id":"ORD_001885","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_001886:1","order_id":"ORD_001886","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_001887:1","order_id":"ORD_001887","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_001887:2","order_id":"ORD_001887","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_001888:1","order_id":"ORD_001888","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_001888:2","order_id":"ORD_001888","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_001888:3","order_id":"ORD_001888","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_001889:1","order_id":"ORD_001889","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_001889:2","order_id":"ORD_001889","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_001889:3","order_id":"ORD_001889","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_001889:4","order_id":"ORD_001889","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_001890:1","order_id":"ORD_001890","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_001890:2","order_id":"ORD_001890","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_001890:3","order_id":"ORD_001890","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_001890:4","order_id":"ORD_001890","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_001890:5","order_id":"ORD_001890","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_001891:1","order_id":"ORD_001891","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_001892:1","order_id":"ORD_001892","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_001892:2","order_id":"ORD_001892","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_001893:1","order_id":"ORD_001893","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_001893:2","order_id":"ORD_001893","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_001893:3","order_id":"ORD_001893","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_001894:1","order_id":"ORD_001894","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_001894:2","order_id":"ORD_001894","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_001894:3","order_id":"ORD_001894","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_001894:4","order_id":"ORD_001894","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_001895:1","order_id":"ORD_001895","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_001895:2","order_id":"ORD_001895","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_001895:3","order_id":"ORD_001895","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_001895:4","order_id":"ORD_001895","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_001895:5","order_id":"ORD_001895","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_001896:1","order_id":"ORD_001896","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_001897:1","order_id":"ORD_001897","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_001897:2","order_id":"ORD_001897","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_001898:1","order_id":"ORD_001898","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_001898:2","order_id":"ORD_001898","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_001898:3","order_id":"ORD_001898","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_001899:1","order_id":"ORD_001899","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_001899:2","order_id":"ORD_001899","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_001899:3","order_id":"ORD_001899","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_001899:4","order_id":"ORD_001899","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_001900:1","order_id":"ORD_001900","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_001900:2","order_id":"ORD_001900","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_001900:3","order_id":"ORD_001900","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_001900:4","order_id":"ORD_001900","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_001900:5","order_id":"ORD_001900","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} +{"order_item_id":"ORD_001901:1","order_id":"ORD_001901","line_number":1,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0,"line_total":15.75} +{"order_item_id":"ORD_001902:1","order_id":"ORD_001902","line_number":1,"product_id":"PROD_0012","quantity":1,"unit_price":57,"discount_rate":0,"line_total":57} +{"order_item_id":"ORD_001902:2","order_id":"ORD_001902","line_number":2,"product_id":"PROD_0019","quantity":2,"unit_price":83.25,"discount_rate":0.05,"line_total":158.17} +{"order_item_id":"ORD_001903:1","order_id":"ORD_001903","line_number":1,"product_id":"PROD_0023","quantity":1,"unit_price":98.25,"discount_rate":0.05,"line_total":93.34} +{"order_item_id":"ORD_001903:2","order_id":"ORD_001903","line_number":2,"product_id":"PROD_0030","quantity":2,"unit_price":124.5,"discount_rate":0.1,"line_total":224.1} +{"order_item_id":"ORD_001903:3","order_id":"ORD_001903","line_number":3,"product_id":"PROD_0037","quantity":3,"unit_price":150.75,"discount_rate":0.15,"line_total":384.41} +{"order_item_id":"ORD_001904:1","order_id":"ORD_001904","line_number":1,"product_id":"PROD_0034","quantity":1,"unit_price":139.5,"discount_rate":0.1,"line_total":125.55} +{"order_item_id":"ORD_001904:2","order_id":"ORD_001904","line_number":2,"product_id":"PROD_0041","quantity":2,"unit_price":165.75,"discount_rate":0.15,"line_total":281.77} +{"order_item_id":"ORD_001904:3","order_id":"ORD_001904","line_number":3,"product_id":"PROD_0048","quantity":3,"unit_price":192,"discount_rate":0,"line_total":576} +{"order_item_id":"ORD_001904:4","order_id":"ORD_001904","line_number":4,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0,"line_total":218.25} +{"order_item_id":"ORD_001905:1","order_id":"ORD_001905","line_number":1,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0.15,"line_total":153.64} +{"order_item_id":"ORD_001905:2","order_id":"ORD_001905","line_number":2,"product_id":"PROD_0052","quantity":2,"unit_price":207,"discount_rate":0,"line_total":414} +{"order_item_id":"ORD_001905:3","order_id":"ORD_001905","line_number":3,"product_id":"PROD_0059","quantity":3,"unit_price":233.25,"discount_rate":0,"line_total":699.75} +{"order_item_id":"ORD_001905:4","order_id":"ORD_001905","line_number":4,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0.05,"line_total":246.52} +{"order_item_id":"ORD_001905:5","order_id":"ORD_001905","line_number":5,"product_id":"PROD_0073","quantity":2,"unit_price":285.75,"discount_rate":0.1,"line_total":514.35} +{"order_item_id":"ORD_001906:1","order_id":"ORD_001906","line_number":1,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0,"line_total":222} +{"order_item_id":"ORD_001907:1","order_id":"ORD_001907","line_number":1,"product_id":"PROD_0067","quantity":1,"unit_price":263.25,"discount_rate":0,"line_total":263.25} +{"order_item_id":"ORD_001907:2","order_id":"ORD_001907","line_number":2,"product_id":"PROD_0074","quantity":2,"unit_price":289.5,"discount_rate":0.05,"line_total":550.05} +{"order_item_id":"ORD_001908:1","order_id":"ORD_001908","line_number":1,"product_id":"PROD_0078","quantity":1,"unit_price":304.5,"discount_rate":0.05,"line_total":289.27} +{"order_item_id":"ORD_001908:2","order_id":"ORD_001908","line_number":2,"product_id":"PROD_0085","quantity":2,"unit_price":330.75,"discount_rate":0.1,"line_total":595.35} +{"order_item_id":"ORD_001908:3","order_id":"ORD_001908","line_number":3,"product_id":"PROD_0092","quantity":3,"unit_price":357,"discount_rate":0.15,"line_total":910.35} +{"order_item_id":"ORD_001909:1","order_id":"ORD_001909","line_number":1,"product_id":"PROD_0089","quantity":1,"unit_price":345.75,"discount_rate":0.1,"line_total":311.18} +{"order_item_id":"ORD_001909:2","order_id":"ORD_001909","line_number":2,"product_id":"PROD_0096","quantity":2,"unit_price":372,"discount_rate":0.15,"line_total":632.4} +{"order_item_id":"ORD_001909:3","order_id":"ORD_001909","line_number":3,"product_id":"PROD_0003","quantity":3,"unit_price":23.25,"discount_rate":0,"line_total":69.75} +{"order_item_id":"ORD_001909:4","order_id":"ORD_001909","line_number":4,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0,"line_total":49.5} +{"order_item_id":"ORD_001910:1","order_id":"ORD_001910","line_number":1,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0.15,"line_total":328.95} +{"order_item_id":"ORD_001910:2","order_id":"ORD_001910","line_number":2,"product_id":"PROD_0007","quantity":2,"unit_price":38.25,"discount_rate":0,"line_total":76.5} +{"order_item_id":"ORD_001910:3","order_id":"ORD_001910","line_number":3,"product_id":"PROD_0014","quantity":3,"unit_price":64.5,"discount_rate":0,"line_total":193.5} +{"order_item_id":"ORD_001910:4","order_id":"ORD_001910","line_number":4,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0.05,"line_total":86.21} +{"order_item_id":"ORD_001910:5","order_id":"ORD_001910","line_number":5,"product_id":"PROD_0028","quantity":2,"unit_price":117,"discount_rate":0.1,"line_total":210.6} +{"order_item_id":"ORD_001911:1","order_id":"ORD_001911","line_number":1,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0,"line_total":53.25} +{"order_item_id":"ORD_001912:1","order_id":"ORD_001912","line_number":1,"product_id":"PROD_0022","quantity":1,"unit_price":94.5,"discount_rate":0,"line_total":94.5} +{"order_item_id":"ORD_001912:2","order_id":"ORD_001912","line_number":2,"product_id":"PROD_0029","quantity":2,"unit_price":120.75,"discount_rate":0.05,"line_total":229.43} +{"order_item_id":"ORD_001913:1","order_id":"ORD_001913","line_number":1,"product_id":"PROD_0033","quantity":1,"unit_price":135.75,"discount_rate":0.05,"line_total":128.96} +{"order_item_id":"ORD_001913:2","order_id":"ORD_001913","line_number":2,"product_id":"PROD_0040","quantity":2,"unit_price":162,"discount_rate":0.1,"line_total":291.6} +{"order_item_id":"ORD_001913:3","order_id":"ORD_001913","line_number":3,"product_id":"PROD_0047","quantity":3,"unit_price":188.25,"discount_rate":0.15,"line_total":480.04} +{"order_item_id":"ORD_001914:1","order_id":"ORD_001914","line_number":1,"product_id":"PROD_0044","quantity":1,"unit_price":177,"discount_rate":0.1,"line_total":159.3} +{"order_item_id":"ORD_001914:2","order_id":"ORD_001914","line_number":2,"product_id":"PROD_0051","quantity":2,"unit_price":203.25,"discount_rate":0.15,"line_total":345.53} +{"order_item_id":"ORD_001914:3","order_id":"ORD_001914","line_number":3,"product_id":"PROD_0058","quantity":3,"unit_price":229.5,"discount_rate":0,"line_total":688.5} +{"order_item_id":"ORD_001914:4","order_id":"ORD_001914","line_number":4,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0,"line_total":255.75} +{"order_item_id":"ORD_001915:1","order_id":"ORD_001915","line_number":1,"product_id":"PROD_0055","quantity":1,"unit_price":218.25,"discount_rate":0.15,"line_total":185.51} +{"order_item_id":"ORD_001915:2","order_id":"ORD_001915","line_number":2,"product_id":"PROD_0062","quantity":2,"unit_price":244.5,"discount_rate":0,"line_total":489} +{"order_item_id":"ORD_001915:3","order_id":"ORD_001915","line_number":3,"product_id":"PROD_0069","quantity":3,"unit_price":270.75,"discount_rate":0,"line_total":812.25} +{"order_item_id":"ORD_001915:4","order_id":"ORD_001915","line_number":4,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0.05,"line_total":282.15} +{"order_item_id":"ORD_001915:5","order_id":"ORD_001915","line_number":5,"product_id":"PROD_0083","quantity":2,"unit_price":323.25,"discount_rate":0.1,"line_total":581.85} +{"order_item_id":"ORD_001916:1","order_id":"ORD_001916","line_number":1,"product_id":"PROD_0066","quantity":1,"unit_price":259.5,"discount_rate":0,"line_total":259.5} +{"order_item_id":"ORD_001917:1","order_id":"ORD_001917","line_number":1,"product_id":"PROD_0077","quantity":1,"unit_price":300.75,"discount_rate":0,"line_total":300.75} +{"order_item_id":"ORD_001917:2","order_id":"ORD_001917","line_number":2,"product_id":"PROD_0084","quantity":2,"unit_price":327,"discount_rate":0.05,"line_total":621.3} +{"order_item_id":"ORD_001918:1","order_id":"ORD_001918","line_number":1,"product_id":"PROD_0088","quantity":1,"unit_price":342,"discount_rate":0.05,"line_total":324.9} +{"order_item_id":"ORD_001918:2","order_id":"ORD_001918","line_number":2,"product_id":"PROD_0095","quantity":2,"unit_price":368.25,"discount_rate":0.1,"line_total":662.85} +{"order_item_id":"ORD_001918:3","order_id":"ORD_001918","line_number":3,"product_id":"PROD_0002","quantity":3,"unit_price":19.5,"discount_rate":0.15,"line_total":49.73} +{"order_item_id":"ORD_001919:1","order_id":"ORD_001919","line_number":1,"product_id":"PROD_0099","quantity":1,"unit_price":383.25,"discount_rate":0.1,"line_total":344.93} +{"order_item_id":"ORD_001919:2","order_id":"ORD_001919","line_number":2,"product_id":"PROD_0006","quantity":2,"unit_price":34.5,"discount_rate":0.15,"line_total":58.65} +{"order_item_id":"ORD_001919:3","order_id":"ORD_001919","line_number":3,"product_id":"PROD_0013","quantity":3,"unit_price":60.75,"discount_rate":0,"line_total":182.25} +{"order_item_id":"ORD_001919:4","order_id":"ORD_001919","line_number":4,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0,"line_total":87} +{"order_item_id":"ORD_001920:1","order_id":"ORD_001920","line_number":1,"product_id":"PROD_0010","quantity":1,"unit_price":49.5,"discount_rate":0.15,"line_total":42.08} +{"order_item_id":"ORD_001920:2","order_id":"ORD_001920","line_number":2,"product_id":"PROD_0017","quantity":2,"unit_price":75.75,"discount_rate":0,"line_total":151.5} +{"order_item_id":"ORD_001920:3","order_id":"ORD_001920","line_number":3,"product_id":"PROD_0024","quantity":3,"unit_price":102,"discount_rate":0,"line_total":306} +{"order_item_id":"ORD_001920:4","order_id":"ORD_001920","line_number":4,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0.05,"line_total":121.84} +{"order_item_id":"ORD_001920:5","order_id":"ORD_001920","line_number":5,"product_id":"PROD_0038","quantity":2,"unit_price":154.5,"discount_rate":0.1,"line_total":278.1} +{"order_item_id":"ORD_001921:1","order_id":"ORD_001921","line_number":1,"product_id":"PROD_0021","quantity":1,"unit_price":90.75,"discount_rate":0,"line_total":90.75} +{"order_item_id":"ORD_001922:1","order_id":"ORD_001922","line_number":1,"product_id":"PROD_0032","quantity":1,"unit_price":132,"discount_rate":0,"line_total":132} +{"order_item_id":"ORD_001922:2","order_id":"ORD_001922","line_number":2,"product_id":"PROD_0039","quantity":2,"unit_price":158.25,"discount_rate":0.05,"line_total":300.68} +{"order_item_id":"ORD_001923:1","order_id":"ORD_001923","line_number":1,"product_id":"PROD_0043","quantity":1,"unit_price":173.25,"discount_rate":0.05,"line_total":164.59} +{"order_item_id":"ORD_001923:2","order_id":"ORD_001923","line_number":2,"product_id":"PROD_0050","quantity":2,"unit_price":199.5,"discount_rate":0.1,"line_total":359.1} +{"order_item_id":"ORD_001923:3","order_id":"ORD_001923","line_number":3,"product_id":"PROD_0057","quantity":3,"unit_price":225.75,"discount_rate":0.15,"line_total":575.66} +{"order_item_id":"ORD_001924:1","order_id":"ORD_001924","line_number":1,"product_id":"PROD_0054","quantity":1,"unit_price":214.5,"discount_rate":0.1,"line_total":193.05} +{"order_item_id":"ORD_001924:2","order_id":"ORD_001924","line_number":2,"product_id":"PROD_0061","quantity":2,"unit_price":240.75,"discount_rate":0.15,"line_total":409.28} +{"order_item_id":"ORD_001924:3","order_id":"ORD_001924","line_number":3,"product_id":"PROD_0068","quantity":3,"unit_price":267,"discount_rate":0,"line_total":801} +{"order_item_id":"ORD_001924:4","order_id":"ORD_001924","line_number":4,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0,"line_total":293.25} +{"order_item_id":"ORD_001925:1","order_id":"ORD_001925","line_number":1,"product_id":"PROD_0065","quantity":1,"unit_price":255.75,"discount_rate":0.15,"line_total":217.39} +{"order_item_id":"ORD_001925:2","order_id":"ORD_001925","line_number":2,"product_id":"PROD_0072","quantity":2,"unit_price":282,"discount_rate":0,"line_total":564} +{"order_item_id":"ORD_001925:3","order_id":"ORD_001925","line_number":3,"product_id":"PROD_0079","quantity":3,"unit_price":308.25,"discount_rate":0,"line_total":924.75} +{"order_item_id":"ORD_001925:4","order_id":"ORD_001925","line_number":4,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0.05,"line_total":317.77} +{"order_item_id":"ORD_001925:5","order_id":"ORD_001925","line_number":5,"product_id":"PROD_0093","quantity":2,"unit_price":360.75,"discount_rate":0.1,"line_total":649.35} +{"order_item_id":"ORD_001926:1","order_id":"ORD_001926","line_number":1,"product_id":"PROD_0076","quantity":1,"unit_price":297,"discount_rate":0,"line_total":297} +{"order_item_id":"ORD_001927:1","order_id":"ORD_001927","line_number":1,"product_id":"PROD_0087","quantity":1,"unit_price":338.25,"discount_rate":0,"line_total":338.25} +{"order_item_id":"ORD_001927:2","order_id":"ORD_001927","line_number":2,"product_id":"PROD_0094","quantity":2,"unit_price":364.5,"discount_rate":0.05,"line_total":692.55} +{"order_item_id":"ORD_001928:1","order_id":"ORD_001928","line_number":1,"product_id":"PROD_0098","quantity":1,"unit_price":379.5,"discount_rate":0.05,"line_total":360.53} +{"order_item_id":"ORD_001928:2","order_id":"ORD_001928","line_number":2,"product_id":"PROD_0005","quantity":2,"unit_price":30.75,"discount_rate":0.1,"line_total":55.35} +{"order_item_id":"ORD_001928:3","order_id":"ORD_001928","line_number":3,"product_id":"PROD_0012","quantity":3,"unit_price":57,"discount_rate":0.15,"line_total":145.35} +{"order_item_id":"ORD_001929:1","order_id":"ORD_001929","line_number":1,"product_id":"PROD_0009","quantity":1,"unit_price":45.75,"discount_rate":0.1,"line_total":41.18} +{"order_item_id":"ORD_001929:2","order_id":"ORD_001929","line_number":2,"product_id":"PROD_0016","quantity":2,"unit_price":72,"discount_rate":0.15,"line_total":122.4} +{"order_item_id":"ORD_001929:3","order_id":"ORD_001929","line_number":3,"product_id":"PROD_0023","quantity":3,"unit_price":98.25,"discount_rate":0,"line_total":294.75} +{"order_item_id":"ORD_001929:4","order_id":"ORD_001929","line_number":4,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0,"line_total":124.5} +{"order_item_id":"ORD_001930:1","order_id":"ORD_001930","line_number":1,"product_id":"PROD_0020","quantity":1,"unit_price":87,"discount_rate":0.15,"line_total":73.95} +{"order_item_id":"ORD_001930:2","order_id":"ORD_001930","line_number":2,"product_id":"PROD_0027","quantity":2,"unit_price":113.25,"discount_rate":0,"line_total":226.5} +{"order_item_id":"ORD_001930:3","order_id":"ORD_001930","line_number":3,"product_id":"PROD_0034","quantity":3,"unit_price":139.5,"discount_rate":0,"line_total":418.5} +{"order_item_id":"ORD_001930:4","order_id":"ORD_001930","line_number":4,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0.05,"line_total":157.46} +{"order_item_id":"ORD_001930:5","order_id":"ORD_001930","line_number":5,"product_id":"PROD_0048","quantity":2,"unit_price":192,"discount_rate":0.1,"line_total":345.6} +{"order_item_id":"ORD_001931:1","order_id":"ORD_001931","line_number":1,"product_id":"PROD_0031","quantity":1,"unit_price":128.25,"discount_rate":0,"line_total":128.25} +{"order_item_id":"ORD_001932:1","order_id":"ORD_001932","line_number":1,"product_id":"PROD_0042","quantity":1,"unit_price":169.5,"discount_rate":0,"line_total":169.5} +{"order_item_id":"ORD_001932:2","order_id":"ORD_001932","line_number":2,"product_id":"PROD_0049","quantity":2,"unit_price":195.75,"discount_rate":0.05,"line_total":371.92} +{"order_item_id":"ORD_001933:1","order_id":"ORD_001933","line_number":1,"product_id":"PROD_0053","quantity":1,"unit_price":210.75,"discount_rate":0.05,"line_total":200.21} +{"order_item_id":"ORD_001933:2","order_id":"ORD_001933","line_number":2,"product_id":"PROD_0060","quantity":2,"unit_price":237,"discount_rate":0.1,"line_total":426.6} +{"order_item_id":"ORD_001933:3","order_id":"ORD_001933","line_number":3,"product_id":"PROD_0067","quantity":3,"unit_price":263.25,"discount_rate":0.15,"line_total":671.29} +{"order_item_id":"ORD_001934:1","order_id":"ORD_001934","line_number":1,"product_id":"PROD_0064","quantity":1,"unit_price":252,"discount_rate":0.1,"line_total":226.8} +{"order_item_id":"ORD_001934:2","order_id":"ORD_001934","line_number":2,"product_id":"PROD_0071","quantity":2,"unit_price":278.25,"discount_rate":0.15,"line_total":473.03} +{"order_item_id":"ORD_001934:3","order_id":"ORD_001934","line_number":3,"product_id":"PROD_0078","quantity":3,"unit_price":304.5,"discount_rate":0,"line_total":913.5} +{"order_item_id":"ORD_001934:4","order_id":"ORD_001934","line_number":4,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0,"line_total":330.75} +{"order_item_id":"ORD_001935:1","order_id":"ORD_001935","line_number":1,"product_id":"PROD_0075","quantity":1,"unit_price":293.25,"discount_rate":0.15,"line_total":249.26} +{"order_item_id":"ORD_001935:2","order_id":"ORD_001935","line_number":2,"product_id":"PROD_0082","quantity":2,"unit_price":319.5,"discount_rate":0,"line_total":639} +{"order_item_id":"ORD_001935:3","order_id":"ORD_001935","line_number":3,"product_id":"PROD_0089","quantity":3,"unit_price":345.75,"discount_rate":0,"line_total":1037.25} +{"order_item_id":"ORD_001935:4","order_id":"ORD_001935","line_number":4,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0.05,"line_total":353.4} +{"order_item_id":"ORD_001935:5","order_id":"ORD_001935","line_number":5,"product_id":"PROD_0003","quantity":2,"unit_price":23.25,"discount_rate":0.1,"line_total":41.85} +{"order_item_id":"ORD_001936:1","order_id":"ORD_001936","line_number":1,"product_id":"PROD_0086","quantity":1,"unit_price":334.5,"discount_rate":0,"line_total":334.5} +{"order_item_id":"ORD_001937:1","order_id":"ORD_001937","line_number":1,"product_id":"PROD_0097","quantity":1,"unit_price":375.75,"discount_rate":0,"line_total":375.75} +{"order_item_id":"ORD_001937:2","order_id":"ORD_001937","line_number":2,"product_id":"PROD_0004","quantity":2,"unit_price":27,"discount_rate":0.05,"line_total":51.3} +{"order_item_id":"ORD_001938:1","order_id":"ORD_001938","line_number":1,"product_id":"PROD_0008","quantity":1,"unit_price":42,"discount_rate":0.05,"line_total":39.9} +{"order_item_id":"ORD_001938:2","order_id":"ORD_001938","line_number":2,"product_id":"PROD_0015","quantity":2,"unit_price":68.25,"discount_rate":0.1,"line_total":122.85} +{"order_item_id":"ORD_001938:3","order_id":"ORD_001938","line_number":3,"product_id":"PROD_0022","quantity":3,"unit_price":94.5,"discount_rate":0.15,"line_total":240.98} +{"order_item_id":"ORD_001939:1","order_id":"ORD_001939","line_number":1,"product_id":"PROD_0019","quantity":1,"unit_price":83.25,"discount_rate":0.1,"line_total":74.93} +{"order_item_id":"ORD_001939:2","order_id":"ORD_001939","line_number":2,"product_id":"PROD_0026","quantity":2,"unit_price":109.5,"discount_rate":0.15,"line_total":186.15} +{"order_item_id":"ORD_001939:3","order_id":"ORD_001939","line_number":3,"product_id":"PROD_0033","quantity":3,"unit_price":135.75,"discount_rate":0,"line_total":407.25} +{"order_item_id":"ORD_001939:4","order_id":"ORD_001939","line_number":4,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0,"line_total":162} +{"order_item_id":"ORD_001940:1","order_id":"ORD_001940","line_number":1,"product_id":"PROD_0030","quantity":1,"unit_price":124.5,"discount_rate":0.15,"line_total":105.83} +{"order_item_id":"ORD_001940:2","order_id":"ORD_001940","line_number":2,"product_id":"PROD_0037","quantity":2,"unit_price":150.75,"discount_rate":0,"line_total":301.5} +{"order_item_id":"ORD_001940:3","order_id":"ORD_001940","line_number":3,"product_id":"PROD_0044","quantity":3,"unit_price":177,"discount_rate":0,"line_total":531} +{"order_item_id":"ORD_001940:4","order_id":"ORD_001940","line_number":4,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0.05,"line_total":193.09} +{"order_item_id":"ORD_001940:5","order_id":"ORD_001940","line_number":5,"product_id":"PROD_0058","quantity":2,"unit_price":229.5,"discount_rate":0.1,"line_total":413.1} +{"order_item_id":"ORD_001941:1","order_id":"ORD_001941","line_number":1,"product_id":"PROD_0041","quantity":1,"unit_price":165.75,"discount_rate":0,"line_total":165.75} +{"order_item_id":"ORD_001942:1","order_id":"ORD_001942","line_number":1,"product_id":"PROD_0052","quantity":1,"unit_price":207,"discount_rate":0,"line_total":207} +{"order_item_id":"ORD_001942:2","order_id":"ORD_001942","line_number":2,"product_id":"PROD_0059","quantity":2,"unit_price":233.25,"discount_rate":0.05,"line_total":443.17} +{"order_item_id":"ORD_001943:1","order_id":"ORD_001943","line_number":1,"product_id":"PROD_0063","quantity":1,"unit_price":248.25,"discount_rate":0.05,"line_total":235.84} +{"order_item_id":"ORD_001943:2","order_id":"ORD_001943","line_number":2,"product_id":"PROD_0070","quantity":2,"unit_price":274.5,"discount_rate":0.1,"line_total":494.1} +{"order_item_id":"ORD_001943:3","order_id":"ORD_001943","line_number":3,"product_id":"PROD_0077","quantity":3,"unit_price":300.75,"discount_rate":0.15,"line_total":766.91} +{"order_item_id":"ORD_001944:1","order_id":"ORD_001944","line_number":1,"product_id":"PROD_0074","quantity":1,"unit_price":289.5,"discount_rate":0.1,"line_total":260.55} +{"order_item_id":"ORD_001944:2","order_id":"ORD_001944","line_number":2,"product_id":"PROD_0081","quantity":2,"unit_price":315.75,"discount_rate":0.15,"line_total":536.78} +{"order_item_id":"ORD_001944:3","order_id":"ORD_001944","line_number":3,"product_id":"PROD_0088","quantity":3,"unit_price":342,"discount_rate":0,"line_total":1026} +{"order_item_id":"ORD_001944:4","order_id":"ORD_001944","line_number":4,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0,"line_total":368.25} +{"order_item_id":"ORD_001945:1","order_id":"ORD_001945","line_number":1,"product_id":"PROD_0085","quantity":1,"unit_price":330.75,"discount_rate":0.15,"line_total":281.14} +{"order_item_id":"ORD_001945:2","order_id":"ORD_001945","line_number":2,"product_id":"PROD_0092","quantity":2,"unit_price":357,"discount_rate":0,"line_total":714} +{"order_item_id":"ORD_001945:3","order_id":"ORD_001945","line_number":3,"product_id":"PROD_0099","quantity":3,"unit_price":383.25,"discount_rate":0,"line_total":1149.75} +{"order_item_id":"ORD_001945:4","order_id":"ORD_001945","line_number":4,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0.05,"line_total":32.78} +{"order_item_id":"ORD_001945:5","order_id":"ORD_001945","line_number":5,"product_id":"PROD_0013","quantity":2,"unit_price":60.75,"discount_rate":0.1,"line_total":109.35} +{"order_item_id":"ORD_001946:1","order_id":"ORD_001946","line_number":1,"product_id":"PROD_0096","quantity":1,"unit_price":372,"discount_rate":0,"line_total":372} +{"order_item_id":"ORD_001947:1","order_id":"ORD_001947","line_number":1,"product_id":"PROD_0007","quantity":1,"unit_price":38.25,"discount_rate":0,"line_total":38.25} +{"order_item_id":"ORD_001947:2","order_id":"ORD_001947","line_number":2,"product_id":"PROD_0014","quantity":2,"unit_price":64.5,"discount_rate":0.05,"line_total":122.55} +{"order_item_id":"ORD_001948:1","order_id":"ORD_001948","line_number":1,"product_id":"PROD_0018","quantity":1,"unit_price":79.5,"discount_rate":0.05,"line_total":75.52} +{"order_item_id":"ORD_001948:2","order_id":"ORD_001948","line_number":2,"product_id":"PROD_0025","quantity":2,"unit_price":105.75,"discount_rate":0.1,"line_total":190.35} +{"order_item_id":"ORD_001948:3","order_id":"ORD_001948","line_number":3,"product_id":"PROD_0032","quantity":3,"unit_price":132,"discount_rate":0.15,"line_total":336.6} +{"order_item_id":"ORD_001949:1","order_id":"ORD_001949","line_number":1,"product_id":"PROD_0029","quantity":1,"unit_price":120.75,"discount_rate":0.1,"line_total":108.68} +{"order_item_id":"ORD_001949:2","order_id":"ORD_001949","line_number":2,"product_id":"PROD_0036","quantity":2,"unit_price":147,"discount_rate":0.15,"line_total":249.9} +{"order_item_id":"ORD_001949:3","order_id":"ORD_001949","line_number":3,"product_id":"PROD_0043","quantity":3,"unit_price":173.25,"discount_rate":0,"line_total":519.75} +{"order_item_id":"ORD_001949:4","order_id":"ORD_001949","line_number":4,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0,"line_total":199.5} +{"order_item_id":"ORD_001950:1","order_id":"ORD_001950","line_number":1,"product_id":"PROD_0040","quantity":1,"unit_price":162,"discount_rate":0.15,"line_total":137.7} +{"order_item_id":"ORD_001950:2","order_id":"ORD_001950","line_number":2,"product_id":"PROD_0047","quantity":2,"unit_price":188.25,"discount_rate":0,"line_total":376.5} +{"order_item_id":"ORD_001950:3","order_id":"ORD_001950","line_number":3,"product_id":"PROD_0054","quantity":3,"unit_price":214.5,"discount_rate":0,"line_total":643.5} +{"order_item_id":"ORD_001950:4","order_id":"ORD_001950","line_number":4,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0.05,"line_total":228.71} +{"order_item_id":"ORD_001950:5","order_id":"ORD_001950","line_number":5,"product_id":"PROD_0068","quantity":2,"unit_price":267,"discount_rate":0.1,"line_total":480.6} +{"order_item_id":"ORD_001951:1","order_id":"ORD_001951","line_number":1,"product_id":"PROD_0051","quantity":1,"unit_price":203.25,"discount_rate":0,"line_total":203.25} +{"order_item_id":"ORD_001952:1","order_id":"ORD_001952","line_number":1,"product_id":"PROD_0062","quantity":1,"unit_price":244.5,"discount_rate":0,"line_total":244.5} +{"order_item_id":"ORD_001952:2","order_id":"ORD_001952","line_number":2,"product_id":"PROD_0069","quantity":2,"unit_price":270.75,"discount_rate":0.05,"line_total":514.42} +{"order_item_id":"ORD_001953:1","order_id":"ORD_001953","line_number":1,"product_id":"PROD_0073","quantity":1,"unit_price":285.75,"discount_rate":0.05,"line_total":271.46} +{"order_item_id":"ORD_001953:2","order_id":"ORD_001953","line_number":2,"product_id":"PROD_0080","quantity":2,"unit_price":312,"discount_rate":0.1,"line_total":561.6} +{"order_item_id":"ORD_001953:3","order_id":"ORD_001953","line_number":3,"product_id":"PROD_0087","quantity":3,"unit_price":338.25,"discount_rate":0.15,"line_total":862.54} +{"order_item_id":"ORD_001954:1","order_id":"ORD_001954","line_number":1,"product_id":"PROD_0084","quantity":1,"unit_price":327,"discount_rate":0.1,"line_total":294.3} +{"order_item_id":"ORD_001954:2","order_id":"ORD_001954","line_number":2,"product_id":"PROD_0091","quantity":2,"unit_price":353.25,"discount_rate":0.15,"line_total":600.53} +{"order_item_id":"ORD_001954:3","order_id":"ORD_001954","line_number":3,"product_id":"PROD_0098","quantity":3,"unit_price":379.5,"discount_rate":0,"line_total":1138.5} +{"order_item_id":"ORD_001954:4","order_id":"ORD_001954","line_number":4,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0,"line_total":30.75} +{"order_item_id":"ORD_001955:1","order_id":"ORD_001955","line_number":1,"product_id":"PROD_0095","quantity":1,"unit_price":368.25,"discount_rate":0.15,"line_total":313.01} +{"order_item_id":"ORD_001955:2","order_id":"ORD_001955","line_number":2,"product_id":"PROD_0002","quantity":2,"unit_price":19.5,"discount_rate":0,"line_total":39} +{"order_item_id":"ORD_001955:3","order_id":"ORD_001955","line_number":3,"product_id":"PROD_0009","quantity":3,"unit_price":45.75,"discount_rate":0,"line_total":137.25} +{"order_item_id":"ORD_001955:4","order_id":"ORD_001955","line_number":4,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0.05,"line_total":68.4} +{"order_item_id":"ORD_001955:5","order_id":"ORD_001955","line_number":5,"product_id":"PROD_0023","quantity":2,"unit_price":98.25,"discount_rate":0.1,"line_total":176.85} +{"order_item_id":"ORD_001956:1","order_id":"ORD_001956","line_number":1,"product_id":"PROD_0006","quantity":1,"unit_price":34.5,"discount_rate":0,"line_total":34.5} +{"order_item_id":"ORD_001957:1","order_id":"ORD_001957","line_number":1,"product_id":"PROD_0017","quantity":1,"unit_price":75.75,"discount_rate":0,"line_total":75.75} +{"order_item_id":"ORD_001957:2","order_id":"ORD_001957","line_number":2,"product_id":"PROD_0024","quantity":2,"unit_price":102,"discount_rate":0.05,"line_total":193.8} +{"order_item_id":"ORD_001958:1","order_id":"ORD_001958","line_number":1,"product_id":"PROD_0028","quantity":1,"unit_price":117,"discount_rate":0.05,"line_total":111.15} +{"order_item_id":"ORD_001958:2","order_id":"ORD_001958","line_number":2,"product_id":"PROD_0035","quantity":2,"unit_price":143.25,"discount_rate":0.1,"line_total":257.85} +{"order_item_id":"ORD_001958:3","order_id":"ORD_001958","line_number":3,"product_id":"PROD_0042","quantity":3,"unit_price":169.5,"discount_rate":0.15,"line_total":432.23} +{"order_item_id":"ORD_001959:1","order_id":"ORD_001959","line_number":1,"product_id":"PROD_0039","quantity":1,"unit_price":158.25,"discount_rate":0.1,"line_total":142.43} +{"order_item_id":"ORD_001959:2","order_id":"ORD_001959","line_number":2,"product_id":"PROD_0046","quantity":2,"unit_price":184.5,"discount_rate":0.15,"line_total":313.65} +{"order_item_id":"ORD_001959:3","order_id":"ORD_001959","line_number":3,"product_id":"PROD_0053","quantity":3,"unit_price":210.75,"discount_rate":0,"line_total":632.25} +{"order_item_id":"ORD_001959:4","order_id":"ORD_001959","line_number":4,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0,"line_total":237} +{"order_item_id":"ORD_001960:1","order_id":"ORD_001960","line_number":1,"product_id":"PROD_0050","quantity":1,"unit_price":199.5,"discount_rate":0.15,"line_total":169.58} +{"order_item_id":"ORD_001960:2","order_id":"ORD_001960","line_number":2,"product_id":"PROD_0057","quantity":2,"unit_price":225.75,"discount_rate":0,"line_total":451.5} +{"order_item_id":"ORD_001960:3","order_id":"ORD_001960","line_number":3,"product_id":"PROD_0064","quantity":3,"unit_price":252,"discount_rate":0,"line_total":756} +{"order_item_id":"ORD_001960:4","order_id":"ORD_001960","line_number":4,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0.05,"line_total":264.34} +{"order_item_id":"ORD_001960:5","order_id":"ORD_001960","line_number":5,"product_id":"PROD_0078","quantity":2,"unit_price":304.5,"discount_rate":0.1,"line_total":548.1} +{"order_item_id":"ORD_001961:1","order_id":"ORD_001961","line_number":1,"product_id":"PROD_0061","quantity":1,"unit_price":240.75,"discount_rate":0,"line_total":240.75} +{"order_item_id":"ORD_001962:1","order_id":"ORD_001962","line_number":1,"product_id":"PROD_0072","quantity":1,"unit_price":282,"discount_rate":0,"line_total":282} +{"order_item_id":"ORD_001962:2","order_id":"ORD_001962","line_number":2,"product_id":"PROD_0079","quantity":2,"unit_price":308.25,"discount_rate":0.05,"line_total":585.67} +{"order_item_id":"ORD_001963:1","order_id":"ORD_001963","line_number":1,"product_id":"PROD_0083","quantity":1,"unit_price":323.25,"discount_rate":0.05,"line_total":307.09} +{"order_item_id":"ORD_001963:2","order_id":"ORD_001963","line_number":2,"product_id":"PROD_0090","quantity":2,"unit_price":349.5,"discount_rate":0.1,"line_total":629.1} +{"order_item_id":"ORD_001963:3","order_id":"ORD_001963","line_number":3,"product_id":"PROD_0097","quantity":3,"unit_price":375.75,"discount_rate":0.15,"line_total":958.16} +{"order_item_id":"ORD_001964:1","order_id":"ORD_001964","line_number":1,"product_id":"PROD_0094","quantity":1,"unit_price":364.5,"discount_rate":0.1,"line_total":328.05} +{"order_item_id":"ORD_001964:2","order_id":"ORD_001964","line_number":2,"product_id":"PROD_0001","quantity":2,"unit_price":15.75,"discount_rate":0.15,"line_total":26.78} +{"order_item_id":"ORD_001964:3","order_id":"ORD_001964","line_number":3,"product_id":"PROD_0008","quantity":3,"unit_price":42,"discount_rate":0,"line_total":126} +{"order_item_id":"ORD_001964:4","order_id":"ORD_001964","line_number":4,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0,"line_total":68.25} +{"order_item_id":"ORD_001965:1","order_id":"ORD_001965","line_number":1,"product_id":"PROD_0005","quantity":1,"unit_price":30.75,"discount_rate":0.15,"line_total":26.14} +{"order_item_id":"ORD_001965:2","order_id":"ORD_001965","line_number":2,"product_id":"PROD_0012","quantity":2,"unit_price":57,"discount_rate":0,"line_total":114} +{"order_item_id":"ORD_001965:3","order_id":"ORD_001965","line_number":3,"product_id":"PROD_0019","quantity":3,"unit_price":83.25,"discount_rate":0,"line_total":249.75} +{"order_item_id":"ORD_001965:4","order_id":"ORD_001965","line_number":4,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0.05,"line_total":104.03} +{"order_item_id":"ORD_001965:5","order_id":"ORD_001965","line_number":5,"product_id":"PROD_0033","quantity":2,"unit_price":135.75,"discount_rate":0.1,"line_total":244.35} +{"order_item_id":"ORD_001966:1","order_id":"ORD_001966","line_number":1,"product_id":"PROD_0016","quantity":1,"unit_price":72,"discount_rate":0,"line_total":72} +{"order_item_id":"ORD_001967:1","order_id":"ORD_001967","line_number":1,"product_id":"PROD_0027","quantity":1,"unit_price":113.25,"discount_rate":0,"line_total":113.25} +{"order_item_id":"ORD_001967:2","order_id":"ORD_001967","line_number":2,"product_id":"PROD_0034","quantity":2,"unit_price":139.5,"discount_rate":0.05,"line_total":265.05} +{"order_item_id":"ORD_001968:1","order_id":"ORD_001968","line_number":1,"product_id":"PROD_0038","quantity":1,"unit_price":154.5,"discount_rate":0.05,"line_total":146.78} +{"order_item_id":"ORD_001968:2","order_id":"ORD_001968","line_number":2,"product_id":"PROD_0045","quantity":2,"unit_price":180.75,"discount_rate":0.1,"line_total":325.35} +{"order_item_id":"ORD_001968:3","order_id":"ORD_001968","line_number":3,"product_id":"PROD_0052","quantity":3,"unit_price":207,"discount_rate":0.15,"line_total":527.85} +{"order_item_id":"ORD_001969:1","order_id":"ORD_001969","line_number":1,"product_id":"PROD_0049","quantity":1,"unit_price":195.75,"discount_rate":0.1,"line_total":176.18} +{"order_item_id":"ORD_001969:2","order_id":"ORD_001969","line_number":2,"product_id":"PROD_0056","quantity":2,"unit_price":222,"discount_rate":0.15,"line_total":377.4} +{"order_item_id":"ORD_001969:3","order_id":"ORD_001969","line_number":3,"product_id":"PROD_0063","quantity":3,"unit_price":248.25,"discount_rate":0,"line_total":744.75} +{"order_item_id":"ORD_001969:4","order_id":"ORD_001969","line_number":4,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0,"line_total":274.5} +{"order_item_id":"ORD_001970:1","order_id":"ORD_001970","line_number":1,"product_id":"PROD_0060","quantity":1,"unit_price":237,"discount_rate":0.15,"line_total":201.45} +{"order_item_id":"ORD_001970:2","order_id":"ORD_001970","line_number":2,"product_id":"PROD_0067","quantity":2,"unit_price":263.25,"discount_rate":0,"line_total":526.5} +{"order_item_id":"ORD_001970:3","order_id":"ORD_001970","line_number":3,"product_id":"PROD_0074","quantity":3,"unit_price":289.5,"discount_rate":0,"line_total":868.5} +{"order_item_id":"ORD_001970:4","order_id":"ORD_001970","line_number":4,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0.05,"line_total":299.96} +{"order_item_id":"ORD_001970:5","order_id":"ORD_001970","line_number":5,"product_id":"PROD_0088","quantity":2,"unit_price":342,"discount_rate":0.1,"line_total":615.6} +{"order_item_id":"ORD_001971:1","order_id":"ORD_001971","line_number":1,"product_id":"PROD_0071","quantity":1,"unit_price":278.25,"discount_rate":0,"line_total":278.25} +{"order_item_id":"ORD_001972:1","order_id":"ORD_001972","line_number":1,"product_id":"PROD_0082","quantity":1,"unit_price":319.5,"discount_rate":0,"line_total":319.5} +{"order_item_id":"ORD_001972:2","order_id":"ORD_001972","line_number":2,"product_id":"PROD_0089","quantity":2,"unit_price":345.75,"discount_rate":0.05,"line_total":656.93} +{"order_item_id":"ORD_001973:1","order_id":"ORD_001973","line_number":1,"product_id":"PROD_0093","quantity":1,"unit_price":360.75,"discount_rate":0.05,"line_total":342.71} +{"order_item_id":"ORD_001973:2","order_id":"ORD_001973","line_number":2,"product_id":"PROD_0100","quantity":2,"unit_price":387,"discount_rate":0.1,"line_total":696.6} +{"order_item_id":"ORD_001973:3","order_id":"ORD_001973","line_number":3,"product_id":"PROD_0007","quantity":3,"unit_price":38.25,"discount_rate":0.15,"line_total":97.54} +{"order_item_id":"ORD_001974:1","order_id":"ORD_001974","line_number":1,"product_id":"PROD_0004","quantity":1,"unit_price":27,"discount_rate":0.1,"line_total":24.3} +{"order_item_id":"ORD_001974:2","order_id":"ORD_001974","line_number":2,"product_id":"PROD_0011","quantity":2,"unit_price":53.25,"discount_rate":0.15,"line_total":90.53} +{"order_item_id":"ORD_001974:3","order_id":"ORD_001974","line_number":3,"product_id":"PROD_0018","quantity":3,"unit_price":79.5,"discount_rate":0,"line_total":238.5} +{"order_item_id":"ORD_001974:4","order_id":"ORD_001974","line_number":4,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0,"line_total":105.75} +{"order_item_id":"ORD_001975:1","order_id":"ORD_001975","line_number":1,"product_id":"PROD_0015","quantity":1,"unit_price":68.25,"discount_rate":0.15,"line_total":58.01} +{"order_item_id":"ORD_001975:2","order_id":"ORD_001975","line_number":2,"product_id":"PROD_0022","quantity":2,"unit_price":94.5,"discount_rate":0,"line_total":189} +{"order_item_id":"ORD_001975:3","order_id":"ORD_001975","line_number":3,"product_id":"PROD_0029","quantity":3,"unit_price":120.75,"discount_rate":0,"line_total":362.25} +{"order_item_id":"ORD_001975:4","order_id":"ORD_001975","line_number":4,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0.05,"line_total":139.65} +{"order_item_id":"ORD_001975:5","order_id":"ORD_001975","line_number":5,"product_id":"PROD_0043","quantity":2,"unit_price":173.25,"discount_rate":0.1,"line_total":311.85} +{"order_item_id":"ORD_001976:1","order_id":"ORD_001976","line_number":1,"product_id":"PROD_0026","quantity":1,"unit_price":109.5,"discount_rate":0,"line_total":109.5} +{"order_item_id":"ORD_001977:1","order_id":"ORD_001977","line_number":1,"product_id":"PROD_0037","quantity":1,"unit_price":150.75,"discount_rate":0,"line_total":150.75} +{"order_item_id":"ORD_001977:2","order_id":"ORD_001977","line_number":2,"product_id":"PROD_0044","quantity":2,"unit_price":177,"discount_rate":0.05,"line_total":336.3} +{"order_item_id":"ORD_001978:1","order_id":"ORD_001978","line_number":1,"product_id":"PROD_0048","quantity":1,"unit_price":192,"discount_rate":0.05,"line_total":182.4} +{"order_item_id":"ORD_001978:2","order_id":"ORD_001978","line_number":2,"product_id":"PROD_0055","quantity":2,"unit_price":218.25,"discount_rate":0.1,"line_total":392.85} +{"order_item_id":"ORD_001978:3","order_id":"ORD_001978","line_number":3,"product_id":"PROD_0062","quantity":3,"unit_price":244.5,"discount_rate":0.15,"line_total":623.48} +{"order_item_id":"ORD_001979:1","order_id":"ORD_001979","line_number":1,"product_id":"PROD_0059","quantity":1,"unit_price":233.25,"discount_rate":0.1,"line_total":209.93} +{"order_item_id":"ORD_001979:2","order_id":"ORD_001979","line_number":2,"product_id":"PROD_0066","quantity":2,"unit_price":259.5,"discount_rate":0.15,"line_total":441.15} +{"order_item_id":"ORD_001979:3","order_id":"ORD_001979","line_number":3,"product_id":"PROD_0073","quantity":3,"unit_price":285.75,"discount_rate":0,"line_total":857.25} +{"order_item_id":"ORD_001979:4","order_id":"ORD_001979","line_number":4,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0,"line_total":312} +{"order_item_id":"ORD_001980:1","order_id":"ORD_001980","line_number":1,"product_id":"PROD_0070","quantity":1,"unit_price":274.5,"discount_rate":0.15,"line_total":233.33} +{"order_item_id":"ORD_001980:2","order_id":"ORD_001980","line_number":2,"product_id":"PROD_0077","quantity":2,"unit_price":300.75,"discount_rate":0,"line_total":601.5} +{"order_item_id":"ORD_001980:3","order_id":"ORD_001980","line_number":3,"product_id":"PROD_0084","quantity":3,"unit_price":327,"discount_rate":0,"line_total":981} +{"order_item_id":"ORD_001980:4","order_id":"ORD_001980","line_number":4,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0.05,"line_total":335.59} +{"order_item_id":"ORD_001980:5","order_id":"ORD_001980","line_number":5,"product_id":"PROD_0098","quantity":2,"unit_price":379.5,"discount_rate":0.1,"line_total":683.1} +{"order_item_id":"ORD_001981:1","order_id":"ORD_001981","line_number":1,"product_id":"PROD_0081","quantity":1,"unit_price":315.75,"discount_rate":0,"line_total":315.75} +{"order_item_id":"ORD_001982:1","order_id":"ORD_001982","line_number":1,"product_id":"PROD_0092","quantity":1,"unit_price":357,"discount_rate":0,"line_total":357} +{"order_item_id":"ORD_001982:2","order_id":"ORD_001982","line_number":2,"product_id":"PROD_0099","quantity":2,"unit_price":383.25,"discount_rate":0.05,"line_total":728.18} +{"order_item_id":"ORD_001983:1","order_id":"ORD_001983","line_number":1,"product_id":"PROD_0003","quantity":1,"unit_price":23.25,"discount_rate":0.05,"line_total":22.09} +{"order_item_id":"ORD_001983:2","order_id":"ORD_001983","line_number":2,"product_id":"PROD_0010","quantity":2,"unit_price":49.5,"discount_rate":0.1,"line_total":89.1} +{"order_item_id":"ORD_001983:3","order_id":"ORD_001983","line_number":3,"product_id":"PROD_0017","quantity":3,"unit_price":75.75,"discount_rate":0.15,"line_total":193.16} +{"order_item_id":"ORD_001984:1","order_id":"ORD_001984","line_number":1,"product_id":"PROD_0014","quantity":1,"unit_price":64.5,"discount_rate":0.1,"line_total":58.05} +{"order_item_id":"ORD_001984:2","order_id":"ORD_001984","line_number":2,"product_id":"PROD_0021","quantity":2,"unit_price":90.75,"discount_rate":0.15,"line_total":154.28} +{"order_item_id":"ORD_001984:3","order_id":"ORD_001984","line_number":3,"product_id":"PROD_0028","quantity":3,"unit_price":117,"discount_rate":0,"line_total":351} +{"order_item_id":"ORD_001984:4","order_id":"ORD_001984","line_number":4,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0,"line_total":143.25} +{"order_item_id":"ORD_001985:1","order_id":"ORD_001985","line_number":1,"product_id":"PROD_0025","quantity":1,"unit_price":105.75,"discount_rate":0.15,"line_total":89.89} +{"order_item_id":"ORD_001985:2","order_id":"ORD_001985","line_number":2,"product_id":"PROD_0032","quantity":2,"unit_price":132,"discount_rate":0,"line_total":264} +{"order_item_id":"ORD_001985:3","order_id":"ORD_001985","line_number":3,"product_id":"PROD_0039","quantity":3,"unit_price":158.25,"discount_rate":0,"line_total":474.75} +{"order_item_id":"ORD_001985:4","order_id":"ORD_001985","line_number":4,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0.05,"line_total":175.28} +{"order_item_id":"ORD_001985:5","order_id":"ORD_001985","line_number":5,"product_id":"PROD_0053","quantity":2,"unit_price":210.75,"discount_rate":0.1,"line_total":379.35} +{"order_item_id":"ORD_001986:1","order_id":"ORD_001986","line_number":1,"product_id":"PROD_0036","quantity":1,"unit_price":147,"discount_rate":0,"line_total":147} +{"order_item_id":"ORD_001987:1","order_id":"ORD_001987","line_number":1,"product_id":"PROD_0047","quantity":1,"unit_price":188.25,"discount_rate":0,"line_total":188.25} +{"order_item_id":"ORD_001987:2","order_id":"ORD_001987","line_number":2,"product_id":"PROD_0054","quantity":2,"unit_price":214.5,"discount_rate":0.05,"line_total":407.55} +{"order_item_id":"ORD_001988:1","order_id":"ORD_001988","line_number":1,"product_id":"PROD_0058","quantity":1,"unit_price":229.5,"discount_rate":0.05,"line_total":218.02} +{"order_item_id":"ORD_001988:2","order_id":"ORD_001988","line_number":2,"product_id":"PROD_0065","quantity":2,"unit_price":255.75,"discount_rate":0.1,"line_total":460.35} +{"order_item_id":"ORD_001988:3","order_id":"ORD_001988","line_number":3,"product_id":"PROD_0072","quantity":3,"unit_price":282,"discount_rate":0.15,"line_total":719.1} +{"order_item_id":"ORD_001989:1","order_id":"ORD_001989","line_number":1,"product_id":"PROD_0069","quantity":1,"unit_price":270.75,"discount_rate":0.1,"line_total":243.68} +{"order_item_id":"ORD_001989:2","order_id":"ORD_001989","line_number":2,"product_id":"PROD_0076","quantity":2,"unit_price":297,"discount_rate":0.15,"line_total":504.9} +{"order_item_id":"ORD_001989:3","order_id":"ORD_001989","line_number":3,"product_id":"PROD_0083","quantity":3,"unit_price":323.25,"discount_rate":0,"line_total":969.75} +{"order_item_id":"ORD_001989:4","order_id":"ORD_001989","line_number":4,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0,"line_total":349.5} +{"order_item_id":"ORD_001990:1","order_id":"ORD_001990","line_number":1,"product_id":"PROD_0080","quantity":1,"unit_price":312,"discount_rate":0.15,"line_total":265.2} +{"order_item_id":"ORD_001990:2","order_id":"ORD_001990","line_number":2,"product_id":"PROD_0087","quantity":2,"unit_price":338.25,"discount_rate":0,"line_total":676.5} +{"order_item_id":"ORD_001990:3","order_id":"ORD_001990","line_number":3,"product_id":"PROD_0094","quantity":3,"unit_price":364.5,"discount_rate":0,"line_total":1093.5} +{"order_item_id":"ORD_001990:4","order_id":"ORD_001990","line_number":4,"product_id":"PROD_0001","quantity":1,"unit_price":15.75,"discount_rate":0.05,"line_total":14.96} +{"order_item_id":"ORD_001990:5","order_id":"ORD_001990","line_number":5,"product_id":"PROD_0008","quantity":2,"unit_price":42,"discount_rate":0.1,"line_total":75.6} +{"order_item_id":"ORD_001991:1","order_id":"ORD_001991","line_number":1,"product_id":"PROD_0091","quantity":1,"unit_price":353.25,"discount_rate":0,"line_total":353.25} +{"order_item_id":"ORD_001992:1","order_id":"ORD_001992","line_number":1,"product_id":"PROD_0002","quantity":1,"unit_price":19.5,"discount_rate":0,"line_total":19.5} +{"order_item_id":"ORD_001992:2","order_id":"ORD_001992","line_number":2,"product_id":"PROD_0009","quantity":2,"unit_price":45.75,"discount_rate":0.05,"line_total":86.93} +{"order_item_id":"ORD_001993:1","order_id":"ORD_001993","line_number":1,"product_id":"PROD_0013","quantity":1,"unit_price":60.75,"discount_rate":0.05,"line_total":57.71} +{"order_item_id":"ORD_001993:2","order_id":"ORD_001993","line_number":2,"product_id":"PROD_0020","quantity":2,"unit_price":87,"discount_rate":0.1,"line_total":156.6} +{"order_item_id":"ORD_001993:3","order_id":"ORD_001993","line_number":3,"product_id":"PROD_0027","quantity":3,"unit_price":113.25,"discount_rate":0.15,"line_total":288.79} +{"order_item_id":"ORD_001994:1","order_id":"ORD_001994","line_number":1,"product_id":"PROD_0024","quantity":1,"unit_price":102,"discount_rate":0.1,"line_total":91.8} +{"order_item_id":"ORD_001994:2","order_id":"ORD_001994","line_number":2,"product_id":"PROD_0031","quantity":2,"unit_price":128.25,"discount_rate":0.15,"line_total":218.03} +{"order_item_id":"ORD_001994:3","order_id":"ORD_001994","line_number":3,"product_id":"PROD_0038","quantity":3,"unit_price":154.5,"discount_rate":0,"line_total":463.5} +{"order_item_id":"ORD_001994:4","order_id":"ORD_001994","line_number":4,"product_id":"PROD_0045","quantity":1,"unit_price":180.75,"discount_rate":0,"line_total":180.75} +{"order_item_id":"ORD_001995:1","order_id":"ORD_001995","line_number":1,"product_id":"PROD_0035","quantity":1,"unit_price":143.25,"discount_rate":0.15,"line_total":121.76} +{"order_item_id":"ORD_001995:2","order_id":"ORD_001995","line_number":2,"product_id":"PROD_0042","quantity":2,"unit_price":169.5,"discount_rate":0,"line_total":339} +{"order_item_id":"ORD_001995:3","order_id":"ORD_001995","line_number":3,"product_id":"PROD_0049","quantity":3,"unit_price":195.75,"discount_rate":0,"line_total":587.25} +{"order_item_id":"ORD_001995:4","order_id":"ORD_001995","line_number":4,"product_id":"PROD_0056","quantity":1,"unit_price":222,"discount_rate":0.05,"line_total":210.9} +{"order_item_id":"ORD_001995:5","order_id":"ORD_001995","line_number":5,"product_id":"PROD_0063","quantity":2,"unit_price":248.25,"discount_rate":0.1,"line_total":446.85} +{"order_item_id":"ORD_001996:1","order_id":"ORD_001996","line_number":1,"product_id":"PROD_0046","quantity":1,"unit_price":184.5,"discount_rate":0,"line_total":184.5} +{"order_item_id":"ORD_001997:1","order_id":"ORD_001997","line_number":1,"product_id":"PROD_0057","quantity":1,"unit_price":225.75,"discount_rate":0,"line_total":225.75} +{"order_item_id":"ORD_001997:2","order_id":"ORD_001997","line_number":2,"product_id":"PROD_0064","quantity":2,"unit_price":252,"discount_rate":0.05,"line_total":478.8} +{"order_item_id":"ORD_001998:1","order_id":"ORD_001998","line_number":1,"product_id":"PROD_0068","quantity":1,"unit_price":267,"discount_rate":0.05,"line_total":253.65} +{"order_item_id":"ORD_001998:2","order_id":"ORD_001998","line_number":2,"product_id":"PROD_0075","quantity":2,"unit_price":293.25,"discount_rate":0.1,"line_total":527.85} +{"order_item_id":"ORD_001998:3","order_id":"ORD_001998","line_number":3,"product_id":"PROD_0082","quantity":3,"unit_price":319.5,"discount_rate":0.15,"line_total":814.73} +{"order_item_id":"ORD_001999:1","order_id":"ORD_001999","line_number":1,"product_id":"PROD_0079","quantity":1,"unit_price":308.25,"discount_rate":0.1,"line_total":277.43} +{"order_item_id":"ORD_001999:2","order_id":"ORD_001999","line_number":2,"product_id":"PROD_0086","quantity":2,"unit_price":334.5,"discount_rate":0.15,"line_total":568.65} +{"order_item_id":"ORD_001999:3","order_id":"ORD_001999","line_number":3,"product_id":"PROD_0093","quantity":3,"unit_price":360.75,"discount_rate":0,"line_total":1082.25} +{"order_item_id":"ORD_001999:4","order_id":"ORD_001999","line_number":4,"product_id":"PROD_0100","quantity":1,"unit_price":387,"discount_rate":0,"line_total":387} +{"order_item_id":"ORD_002000:1","order_id":"ORD_002000","line_number":1,"product_id":"PROD_0090","quantity":1,"unit_price":349.5,"discount_rate":0.15,"line_total":297.08} +{"order_item_id":"ORD_002000:2","order_id":"ORD_002000","line_number":2,"product_id":"PROD_0097","quantity":2,"unit_price":375.75,"discount_rate":0,"line_total":751.5} +{"order_item_id":"ORD_002000:3","order_id":"ORD_002000","line_number":3,"product_id":"PROD_0004","quantity":3,"unit_price":27,"discount_rate":0,"line_total":81} +{"order_item_id":"ORD_002000:4","order_id":"ORD_002000","line_number":4,"product_id":"PROD_0011","quantity":1,"unit_price":53.25,"discount_rate":0.05,"line_total":50.59} +{"order_item_id":"ORD_002000:5","order_id":"ORD_002000","line_number":5,"product_id":"PROD_0018","quantity":2,"unit_price":79.5,"discount_rate":0.1,"line_total":143.1} diff --git a/scenarios/ecommerce-advanced/data/collections/orders.jsonl b/scenarios/ecommerce-advanced/data/collections/orders.jsonl new file mode 100644 index 0000000..0b04fa8 --- /dev/null +++ b/scenarios/ecommerce-advanced/data/collections/orders.jsonl @@ -0,0 +1,2000 @@ +{"order_id":"ORD_000001","customer_id":"CUST_0001","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000002","customer_id":"CUST_0018","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000003","customer_id":"CUST_0035","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000004","customer_id":"CUST_0052","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000005","customer_id":"CUST_0069","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000006","customer_id":"CUST_0086","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000007","customer_id":"CUST_0103","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000008","customer_id":"CUST_0120","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000009","customer_id":"CUST_0137","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000010","customer_id":"CUST_0154","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000011","customer_id":"CUST_0171","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000012","customer_id":"CUST_0188","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000013","customer_id":"CUST_0005","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000014","customer_id":"CUST_0022","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000015","customer_id":"CUST_0039","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000016","customer_id":"CUST_0056","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000017","customer_id":"CUST_0073","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000018","customer_id":"CUST_0090","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000019","customer_id":"CUST_0107","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000020","customer_id":"CUST_0124","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000021","customer_id":"CUST_0141","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-01-21T00:00:00.000Z"},"updated_at":{"$date":"2025-01-21T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000022","customer_id":"CUST_0158","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-01-22T01:00:00.000Z"},"updated_at":{"$date":"2025-01-22T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000023","customer_id":"CUST_0175","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-01-23T02:00:00.000Z"},"updated_at":{"$date":"2025-01-23T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000024","customer_id":"CUST_0192","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-01-24T03:00:00.000Z"},"updated_at":{"$date":"2025-01-24T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000025","customer_id":"CUST_0009","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-01-25T04:00:00.000Z"},"updated_at":{"$date":"2025-01-25T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000026","customer_id":"CUST_0026","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-01-26T05:00:00.000Z"},"updated_at":{"$date":"2025-01-26T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000027","customer_id":"CUST_0043","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-01-27T06:00:00.000Z"},"updated_at":{"$date":"2025-01-27T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000028","customer_id":"CUST_0060","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-01-28T07:00:00.000Z"},"updated_at":{"$date":"2025-01-28T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000029","customer_id":"CUST_0077","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-01-29T08:00:00.000Z"},"updated_at":{"$date":"2025-01-29T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000030","customer_id":"CUST_0094","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-01-30T09:00:00.000Z"},"updated_at":{"$date":"2025-01-30T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000031","customer_id":"CUST_0111","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-01-31T10:00:00.000Z"},"updated_at":{"$date":"2025-01-31T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000032","customer_id":"CUST_0128","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-02-01T11:00:00.000Z"},"updated_at":{"$date":"2025-02-01T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000033","customer_id":"CUST_0145","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-02-02T12:00:00.000Z"},"updated_at":{"$date":"2025-02-02T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000034","customer_id":"CUST_0162","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-02-03T13:00:00.000Z"},"updated_at":{"$date":"2025-02-03T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000035","customer_id":"CUST_0179","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-02-04T14:00:00.000Z"},"updated_at":{"$date":"2025-02-04T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000036","customer_id":"CUST_0196","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-02-05T15:00:00.000Z"},"updated_at":{"$date":"2025-02-05T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000037","customer_id":"CUST_0013","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-02-06T16:00:00.000Z"},"updated_at":{"$date":"2025-02-06T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000038","customer_id":"CUST_0030","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-02-07T17:00:00.000Z"},"updated_at":{"$date":"2025-02-07T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000039","customer_id":"CUST_0047","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-02-08T18:00:00.000Z"},"updated_at":{"$date":"2025-02-08T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000040","customer_id":"CUST_0064","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-02-09T19:00:00.000Z"},"updated_at":{"$date":"2025-02-09T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000041","customer_id":"CUST_0081","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-02-10T00:00:00.000Z"},"updated_at":{"$date":"2025-02-10T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000042","customer_id":"CUST_0098","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-02-11T01:00:00.000Z"},"updated_at":{"$date":"2025-02-11T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000043","customer_id":"CUST_0115","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-02-12T02:00:00.000Z"},"updated_at":{"$date":"2025-02-12T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000044","customer_id":"CUST_0132","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-02-13T03:00:00.000Z"},"updated_at":{"$date":"2025-02-13T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000045","customer_id":"CUST_0149","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-02-14T04:00:00.000Z"},"updated_at":{"$date":"2025-02-14T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000046","customer_id":"CUST_0166","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-02-15T05:00:00.000Z"},"updated_at":{"$date":"2025-02-15T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000047","customer_id":"CUST_0183","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-02-16T06:00:00.000Z"},"updated_at":{"$date":"2025-02-16T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000048","customer_id":"CUST_0200","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-02-17T07:00:00.000Z"},"updated_at":{"$date":"2025-02-17T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000049","customer_id":"CUST_0017","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-02-18T08:00:00.000Z"},"updated_at":{"$date":"2025-02-18T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000050","customer_id":"CUST_0034","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-02-19T09:00:00.000Z"},"updated_at":{"$date":"2025-02-19T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000051","customer_id":"CUST_0051","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-02-20T10:00:00.000Z"},"updated_at":{"$date":"2025-02-20T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000052","customer_id":"CUST_0068","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-02-21T11:00:00.000Z"},"updated_at":{"$date":"2025-02-21T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000053","customer_id":"CUST_0085","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-02-22T12:00:00.000Z"},"updated_at":{"$date":"2025-02-22T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000054","customer_id":"CUST_0102","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-02-23T13:00:00.000Z"},"updated_at":{"$date":"2025-02-23T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000055","customer_id":"CUST_0119","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-02-24T14:00:00.000Z"},"updated_at":{"$date":"2025-02-24T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000056","customer_id":"CUST_0136","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-02-25T15:00:00.000Z"},"updated_at":{"$date":"2025-02-25T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000057","customer_id":"CUST_0153","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-02-26T16:00:00.000Z"},"updated_at":{"$date":"2025-02-26T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000058","customer_id":"CUST_0170","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-02-27T17:00:00.000Z"},"updated_at":{"$date":"2025-02-27T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000059","customer_id":"CUST_0187","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-02-28T18:00:00.000Z"},"updated_at":{"$date":"2025-02-28T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000060","customer_id":"CUST_0004","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-03-01T19:00:00.000Z"},"updated_at":{"$date":"2025-03-01T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000061","customer_id":"CUST_0021","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-03-02T00:00:00.000Z"},"updated_at":{"$date":"2025-03-02T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000062","customer_id":"CUST_0038","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-03-03T01:00:00.000Z"},"updated_at":{"$date":"2025-03-03T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000063","customer_id":"CUST_0055","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-03-04T02:00:00.000Z"},"updated_at":{"$date":"2025-03-04T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000064","customer_id":"CUST_0072","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-03-05T03:00:00.000Z"},"updated_at":{"$date":"2025-03-05T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000065","customer_id":"CUST_0089","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-03-06T04:00:00.000Z"},"updated_at":{"$date":"2025-03-06T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000066","customer_id":"CUST_0106","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-03-07T05:00:00.000Z"},"updated_at":{"$date":"2025-03-07T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000067","customer_id":"CUST_0123","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-03-08T06:00:00.000Z"},"updated_at":{"$date":"2025-03-08T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000068","customer_id":"CUST_0140","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-03-09T07:00:00.000Z"},"updated_at":{"$date":"2025-03-09T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000069","customer_id":"CUST_0157","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-03-10T08:00:00.000Z"},"updated_at":{"$date":"2025-03-10T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000070","customer_id":"CUST_0174","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-03-11T09:00:00.000Z"},"updated_at":{"$date":"2025-03-11T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000071","customer_id":"CUST_0191","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-03-12T10:00:00.000Z"},"updated_at":{"$date":"2025-03-12T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000072","customer_id":"CUST_0008","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-03-13T11:00:00.000Z"},"updated_at":{"$date":"2025-03-13T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000073","customer_id":"CUST_0025","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-03-14T12:00:00.000Z"},"updated_at":{"$date":"2025-03-14T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000074","customer_id":"CUST_0042","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-03-15T13:00:00.000Z"},"updated_at":{"$date":"2025-03-15T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000075","customer_id":"CUST_0059","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-03-16T14:00:00.000Z"},"updated_at":{"$date":"2025-03-16T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000076","customer_id":"CUST_0076","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-03-17T15:00:00.000Z"},"updated_at":{"$date":"2025-03-17T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000077","customer_id":"CUST_0093","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-03-18T16:00:00.000Z"},"updated_at":{"$date":"2025-03-18T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000078","customer_id":"CUST_0110","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-03-19T17:00:00.000Z"},"updated_at":{"$date":"2025-03-19T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000079","customer_id":"CUST_0127","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-03-20T18:00:00.000Z"},"updated_at":{"$date":"2025-03-20T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000080","customer_id":"CUST_0144","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-03-21T19:00:00.000Z"},"updated_at":{"$date":"2025-03-21T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000081","customer_id":"CUST_0161","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-03-22T00:00:00.000Z"},"updated_at":{"$date":"2025-03-22T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000082","customer_id":"CUST_0178","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-03-23T01:00:00.000Z"},"updated_at":{"$date":"2025-03-23T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000083","customer_id":"CUST_0195","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-03-24T02:00:00.000Z"},"updated_at":{"$date":"2025-03-24T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000084","customer_id":"CUST_0012","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-03-25T03:00:00.000Z"},"updated_at":{"$date":"2025-03-25T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000085","customer_id":"CUST_0029","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-03-26T04:00:00.000Z"},"updated_at":{"$date":"2025-03-26T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000086","customer_id":"CUST_0046","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-03-27T05:00:00.000Z"},"updated_at":{"$date":"2025-03-27T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000087","customer_id":"CUST_0063","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-03-28T06:00:00.000Z"},"updated_at":{"$date":"2025-03-28T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000088","customer_id":"CUST_0080","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-03-29T07:00:00.000Z"},"updated_at":{"$date":"2025-03-29T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000089","customer_id":"CUST_0097","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-03-30T08:00:00.000Z"},"updated_at":{"$date":"2025-03-30T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000090","customer_id":"CUST_0114","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-03-31T09:00:00.000Z"},"updated_at":{"$date":"2025-03-31T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000091","customer_id":"CUST_0131","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-01-01T10:00:00.000Z"},"updated_at":{"$date":"2025-01-01T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000092","customer_id":"CUST_0148","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-01-02T11:00:00.000Z"},"updated_at":{"$date":"2025-01-02T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000093","customer_id":"CUST_0165","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-01-03T12:00:00.000Z"},"updated_at":{"$date":"2025-01-03T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000094","customer_id":"CUST_0182","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-01-04T13:00:00.000Z"},"updated_at":{"$date":"2025-01-04T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000095","customer_id":"CUST_0199","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-01-05T14:00:00.000Z"},"updated_at":{"$date":"2025-01-05T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000096","customer_id":"CUST_0016","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-01-06T15:00:00.000Z"},"updated_at":{"$date":"2025-01-06T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000097","customer_id":"CUST_0033","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-01-07T16:00:00.000Z"},"updated_at":{"$date":"2025-01-07T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000098","customer_id":"CUST_0050","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-01-08T17:00:00.000Z"},"updated_at":{"$date":"2025-01-08T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000099","customer_id":"CUST_0067","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-01-09T18:00:00.000Z"},"updated_at":{"$date":"2025-01-09T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000100","customer_id":"CUST_0084","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-01-10T19:00:00.000Z"},"updated_at":{"$date":"2025-01-10T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000101","customer_id":"CUST_0101","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-01-11T00:00:00.000Z"},"updated_at":{"$date":"2025-01-11T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000102","customer_id":"CUST_0118","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-01-12T01:00:00.000Z"},"updated_at":{"$date":"2025-01-12T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000103","customer_id":"CUST_0135","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-01-13T02:00:00.000Z"},"updated_at":{"$date":"2025-01-13T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000104","customer_id":"CUST_0152","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-01-14T03:00:00.000Z"},"updated_at":{"$date":"2025-01-14T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000105","customer_id":"CUST_0169","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-01-15T04:00:00.000Z"},"updated_at":{"$date":"2025-01-15T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000106","customer_id":"CUST_0186","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-01-16T05:00:00.000Z"},"updated_at":{"$date":"2025-01-16T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000107","customer_id":"CUST_0003","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-01-17T06:00:00.000Z"},"updated_at":{"$date":"2025-01-17T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000108","customer_id":"CUST_0020","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-01-18T07:00:00.000Z"},"updated_at":{"$date":"2025-01-18T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000109","customer_id":"CUST_0037","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-01-19T08:00:00.000Z"},"updated_at":{"$date":"2025-01-19T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000110","customer_id":"CUST_0054","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-01-20T09:00:00.000Z"},"updated_at":{"$date":"2025-01-20T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000111","customer_id":"CUST_0071","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-01-21T10:00:00.000Z"},"updated_at":{"$date":"2025-01-21T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000112","customer_id":"CUST_0088","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-01-22T11:00:00.000Z"},"updated_at":{"$date":"2025-01-22T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000113","customer_id":"CUST_0105","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-01-23T12:00:00.000Z"},"updated_at":{"$date":"2025-01-23T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000114","customer_id":"CUST_0122","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-01-24T13:00:00.000Z"},"updated_at":{"$date":"2025-01-24T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000115","customer_id":"CUST_0139","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-01-25T14:00:00.000Z"},"updated_at":{"$date":"2025-01-25T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000116","customer_id":"CUST_0156","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-01-26T15:00:00.000Z"},"updated_at":{"$date":"2025-01-26T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000117","customer_id":"CUST_0173","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-01-27T16:00:00.000Z"},"updated_at":{"$date":"2025-01-27T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000118","customer_id":"CUST_0190","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-01-28T17:00:00.000Z"},"updated_at":{"$date":"2025-01-28T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000119","customer_id":"CUST_0007","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-01-29T18:00:00.000Z"},"updated_at":{"$date":"2025-01-29T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000120","customer_id":"CUST_0024","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-01-30T19:00:00.000Z"},"updated_at":{"$date":"2025-01-30T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000121","customer_id":"CUST_0041","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-01-31T00:00:00.000Z"},"updated_at":{"$date":"2025-01-31T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000122","customer_id":"CUST_0058","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-02-01T01:00:00.000Z"},"updated_at":{"$date":"2025-02-01T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000123","customer_id":"CUST_0075","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-02-02T02:00:00.000Z"},"updated_at":{"$date":"2025-02-02T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000124","customer_id":"CUST_0092","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-02-03T03:00:00.000Z"},"updated_at":{"$date":"2025-02-03T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000125","customer_id":"CUST_0109","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-02-04T04:00:00.000Z"},"updated_at":{"$date":"2025-02-04T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000126","customer_id":"CUST_0126","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-02-05T05:00:00.000Z"},"updated_at":{"$date":"2025-02-05T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000127","customer_id":"CUST_0143","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-02-06T06:00:00.000Z"},"updated_at":{"$date":"2025-02-06T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000128","customer_id":"CUST_0160","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-02-07T07:00:00.000Z"},"updated_at":{"$date":"2025-02-07T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000129","customer_id":"CUST_0177","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-02-08T08:00:00.000Z"},"updated_at":{"$date":"2025-02-08T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000130","customer_id":"CUST_0194","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-02-09T09:00:00.000Z"},"updated_at":{"$date":"2025-02-09T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000131","customer_id":"CUST_0011","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-02-10T10:00:00.000Z"},"updated_at":{"$date":"2025-02-10T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000132","customer_id":"CUST_0028","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-02-11T11:00:00.000Z"},"updated_at":{"$date":"2025-02-11T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000133","customer_id":"CUST_0045","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-02-12T12:00:00.000Z"},"updated_at":{"$date":"2025-02-12T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000134","customer_id":"CUST_0062","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-02-13T13:00:00.000Z"},"updated_at":{"$date":"2025-02-13T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000135","customer_id":"CUST_0079","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-02-14T14:00:00.000Z"},"updated_at":{"$date":"2025-02-14T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000136","customer_id":"CUST_0096","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-02-15T15:00:00.000Z"},"updated_at":{"$date":"2025-02-15T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000137","customer_id":"CUST_0113","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-02-16T16:00:00.000Z"},"updated_at":{"$date":"2025-02-16T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000138","customer_id":"CUST_0130","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-02-17T17:00:00.000Z"},"updated_at":{"$date":"2025-02-17T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000139","customer_id":"CUST_0147","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-02-18T18:00:00.000Z"},"updated_at":{"$date":"2025-02-18T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000140","customer_id":"CUST_0164","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-02-19T19:00:00.000Z"},"updated_at":{"$date":"2025-02-19T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000141","customer_id":"CUST_0181","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-02-20T00:00:00.000Z"},"updated_at":{"$date":"2025-02-20T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000142","customer_id":"CUST_0198","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-02-21T01:00:00.000Z"},"updated_at":{"$date":"2025-02-21T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000143","customer_id":"CUST_0015","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-02-22T02:00:00.000Z"},"updated_at":{"$date":"2025-02-22T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000144","customer_id":"CUST_0032","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-02-23T03:00:00.000Z"},"updated_at":{"$date":"2025-02-23T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000145","customer_id":"CUST_0049","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-02-24T04:00:00.000Z"},"updated_at":{"$date":"2025-02-24T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000146","customer_id":"CUST_0066","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-02-25T05:00:00.000Z"},"updated_at":{"$date":"2025-02-25T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000147","customer_id":"CUST_0083","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-02-26T06:00:00.000Z"},"updated_at":{"$date":"2025-02-26T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000148","customer_id":"CUST_0100","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-02-27T07:00:00.000Z"},"updated_at":{"$date":"2025-02-27T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000149","customer_id":"CUST_0117","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-02-28T08:00:00.000Z"},"updated_at":{"$date":"2025-02-28T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000150","customer_id":"CUST_0134","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-03-01T09:00:00.000Z"},"updated_at":{"$date":"2025-03-01T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000151","customer_id":"CUST_0151","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-03-02T10:00:00.000Z"},"updated_at":{"$date":"2025-03-02T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000152","customer_id":"CUST_0168","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-03-03T11:00:00.000Z"},"updated_at":{"$date":"2025-03-03T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000153","customer_id":"CUST_0185","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-03-04T12:00:00.000Z"},"updated_at":{"$date":"2025-03-04T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000154","customer_id":"CUST_0002","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-03-05T13:00:00.000Z"},"updated_at":{"$date":"2025-03-05T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000155","customer_id":"CUST_0019","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-03-06T14:00:00.000Z"},"updated_at":{"$date":"2025-03-06T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000156","customer_id":"CUST_0036","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-03-07T15:00:00.000Z"},"updated_at":{"$date":"2025-03-07T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000157","customer_id":"CUST_0053","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-03-08T16:00:00.000Z"},"updated_at":{"$date":"2025-03-08T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000158","customer_id":"CUST_0070","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-03-09T17:00:00.000Z"},"updated_at":{"$date":"2025-03-09T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000159","customer_id":"CUST_0087","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-03-10T18:00:00.000Z"},"updated_at":{"$date":"2025-03-10T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000160","customer_id":"CUST_0104","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-03-11T19:00:00.000Z"},"updated_at":{"$date":"2025-03-11T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000161","customer_id":"CUST_0121","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-03-12T00:00:00.000Z"},"updated_at":{"$date":"2025-03-12T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000162","customer_id":"CUST_0138","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-03-13T01:00:00.000Z"},"updated_at":{"$date":"2025-03-13T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000163","customer_id":"CUST_0155","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-03-14T02:00:00.000Z"},"updated_at":{"$date":"2025-03-14T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000164","customer_id":"CUST_0172","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-03-15T03:00:00.000Z"},"updated_at":{"$date":"2025-03-15T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000165","customer_id":"CUST_0189","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-03-16T04:00:00.000Z"},"updated_at":{"$date":"2025-03-16T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000166","customer_id":"CUST_0006","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-03-17T05:00:00.000Z"},"updated_at":{"$date":"2025-03-17T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000167","customer_id":"CUST_0023","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-03-18T06:00:00.000Z"},"updated_at":{"$date":"2025-03-18T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000168","customer_id":"CUST_0040","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-03-19T07:00:00.000Z"},"updated_at":{"$date":"2025-03-19T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000169","customer_id":"CUST_0057","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-03-20T08:00:00.000Z"},"updated_at":{"$date":"2025-03-20T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000170","customer_id":"CUST_0074","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-03-21T09:00:00.000Z"},"updated_at":{"$date":"2025-03-21T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000171","customer_id":"CUST_0091","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-03-22T10:00:00.000Z"},"updated_at":{"$date":"2025-03-22T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000172","customer_id":"CUST_0108","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-03-23T11:00:00.000Z"},"updated_at":{"$date":"2025-03-23T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000173","customer_id":"CUST_0125","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-03-24T12:00:00.000Z"},"updated_at":{"$date":"2025-03-24T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000174","customer_id":"CUST_0142","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-03-25T13:00:00.000Z"},"updated_at":{"$date":"2025-03-25T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000175","customer_id":"CUST_0159","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-03-26T14:00:00.000Z"},"updated_at":{"$date":"2025-03-26T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000176","customer_id":"CUST_0176","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-03-27T15:00:00.000Z"},"updated_at":{"$date":"2025-03-27T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000177","customer_id":"CUST_0193","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-03-28T16:00:00.000Z"},"updated_at":{"$date":"2025-03-28T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000178","customer_id":"CUST_0010","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-03-29T17:00:00.000Z"},"updated_at":{"$date":"2025-03-29T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000179","customer_id":"CUST_0027","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-03-30T18:00:00.000Z"},"updated_at":{"$date":"2025-03-30T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000180","customer_id":"CUST_0044","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-03-31T19:00:00.000Z"},"updated_at":{"$date":"2025-03-31T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000181","customer_id":"CUST_0061","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000182","customer_id":"CUST_0078","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000183","customer_id":"CUST_0095","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000184","customer_id":"CUST_0112","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000185","customer_id":"CUST_0129","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000186","customer_id":"CUST_0146","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000187","customer_id":"CUST_0163","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000188","customer_id":"CUST_0180","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000189","customer_id":"CUST_0197","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000190","customer_id":"CUST_0014","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000191","customer_id":"CUST_0031","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000192","customer_id":"CUST_0048","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000193","customer_id":"CUST_0065","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000194","customer_id":"CUST_0082","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000195","customer_id":"CUST_0099","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000196","customer_id":"CUST_0116","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000197","customer_id":"CUST_0133","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000198","customer_id":"CUST_0150","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000199","customer_id":"CUST_0167","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000200","customer_id":"CUST_0184","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000201","customer_id":"CUST_0001","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-01-21T00:00:00.000Z"},"updated_at":{"$date":"2025-01-21T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000202","customer_id":"CUST_0018","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-01-22T01:00:00.000Z"},"updated_at":{"$date":"2025-01-22T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000203","customer_id":"CUST_0035","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-01-23T02:00:00.000Z"},"updated_at":{"$date":"2025-01-23T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000204","customer_id":"CUST_0052","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-01-24T03:00:00.000Z"},"updated_at":{"$date":"2025-01-24T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000205","customer_id":"CUST_0069","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-01-25T04:00:00.000Z"},"updated_at":{"$date":"2025-01-25T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000206","customer_id":"CUST_0086","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-01-26T05:00:00.000Z"},"updated_at":{"$date":"2025-01-26T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000207","customer_id":"CUST_0103","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-01-27T06:00:00.000Z"},"updated_at":{"$date":"2025-01-27T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000208","customer_id":"CUST_0120","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-01-28T07:00:00.000Z"},"updated_at":{"$date":"2025-01-28T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000209","customer_id":"CUST_0137","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-01-29T08:00:00.000Z"},"updated_at":{"$date":"2025-01-29T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000210","customer_id":"CUST_0154","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-01-30T09:00:00.000Z"},"updated_at":{"$date":"2025-01-30T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000211","customer_id":"CUST_0171","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-01-31T10:00:00.000Z"},"updated_at":{"$date":"2025-01-31T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000212","customer_id":"CUST_0188","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-02-01T11:00:00.000Z"},"updated_at":{"$date":"2025-02-01T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000213","customer_id":"CUST_0005","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-02-02T12:00:00.000Z"},"updated_at":{"$date":"2025-02-02T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000214","customer_id":"CUST_0022","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-02-03T13:00:00.000Z"},"updated_at":{"$date":"2025-02-03T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000215","customer_id":"CUST_0039","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-02-04T14:00:00.000Z"},"updated_at":{"$date":"2025-02-04T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000216","customer_id":"CUST_0056","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-02-05T15:00:00.000Z"},"updated_at":{"$date":"2025-02-05T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000217","customer_id":"CUST_0073","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-02-06T16:00:00.000Z"},"updated_at":{"$date":"2025-02-06T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000218","customer_id":"CUST_0090","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-02-07T17:00:00.000Z"},"updated_at":{"$date":"2025-02-07T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000219","customer_id":"CUST_0107","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-02-08T18:00:00.000Z"},"updated_at":{"$date":"2025-02-08T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000220","customer_id":"CUST_0124","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-02-09T19:00:00.000Z"},"updated_at":{"$date":"2025-02-09T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000221","customer_id":"CUST_0141","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-02-10T00:00:00.000Z"},"updated_at":{"$date":"2025-02-10T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000222","customer_id":"CUST_0158","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-02-11T01:00:00.000Z"},"updated_at":{"$date":"2025-02-11T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000223","customer_id":"CUST_0175","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-02-12T02:00:00.000Z"},"updated_at":{"$date":"2025-02-12T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000224","customer_id":"CUST_0192","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-02-13T03:00:00.000Z"},"updated_at":{"$date":"2025-02-13T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000225","customer_id":"CUST_0009","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-02-14T04:00:00.000Z"},"updated_at":{"$date":"2025-02-14T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000226","customer_id":"CUST_0026","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-02-15T05:00:00.000Z"},"updated_at":{"$date":"2025-02-15T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000227","customer_id":"CUST_0043","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-02-16T06:00:00.000Z"},"updated_at":{"$date":"2025-02-16T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000228","customer_id":"CUST_0060","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-02-17T07:00:00.000Z"},"updated_at":{"$date":"2025-02-17T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000229","customer_id":"CUST_0077","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-02-18T08:00:00.000Z"},"updated_at":{"$date":"2025-02-18T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000230","customer_id":"CUST_0094","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-02-19T09:00:00.000Z"},"updated_at":{"$date":"2025-02-19T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000231","customer_id":"CUST_0111","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-02-20T10:00:00.000Z"},"updated_at":{"$date":"2025-02-20T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000232","customer_id":"CUST_0128","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-02-21T11:00:00.000Z"},"updated_at":{"$date":"2025-02-21T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000233","customer_id":"CUST_0145","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-02-22T12:00:00.000Z"},"updated_at":{"$date":"2025-02-22T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000234","customer_id":"CUST_0162","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-02-23T13:00:00.000Z"},"updated_at":{"$date":"2025-02-23T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000235","customer_id":"CUST_0179","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-02-24T14:00:00.000Z"},"updated_at":{"$date":"2025-02-24T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000236","customer_id":"CUST_0196","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-02-25T15:00:00.000Z"},"updated_at":{"$date":"2025-02-25T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000237","customer_id":"CUST_0013","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-02-26T16:00:00.000Z"},"updated_at":{"$date":"2025-02-26T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000238","customer_id":"CUST_0030","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-02-27T17:00:00.000Z"},"updated_at":{"$date":"2025-02-27T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000239","customer_id":"CUST_0047","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-02-28T18:00:00.000Z"},"updated_at":{"$date":"2025-02-28T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000240","customer_id":"CUST_0064","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-03-01T19:00:00.000Z"},"updated_at":{"$date":"2025-03-01T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000241","customer_id":"CUST_0081","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-03-02T00:00:00.000Z"},"updated_at":{"$date":"2025-03-02T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000242","customer_id":"CUST_0098","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-03-03T01:00:00.000Z"},"updated_at":{"$date":"2025-03-03T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000243","customer_id":"CUST_0115","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-03-04T02:00:00.000Z"},"updated_at":{"$date":"2025-03-04T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000244","customer_id":"CUST_0132","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-03-05T03:00:00.000Z"},"updated_at":{"$date":"2025-03-05T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000245","customer_id":"CUST_0149","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-03-06T04:00:00.000Z"},"updated_at":{"$date":"2025-03-06T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000246","customer_id":"CUST_0166","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-03-07T05:00:00.000Z"},"updated_at":{"$date":"2025-03-07T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000247","customer_id":"CUST_0183","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-03-08T06:00:00.000Z"},"updated_at":{"$date":"2025-03-08T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000248","customer_id":"CUST_0200","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-03-09T07:00:00.000Z"},"updated_at":{"$date":"2025-03-09T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000249","customer_id":"CUST_0017","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-03-10T08:00:00.000Z"},"updated_at":{"$date":"2025-03-10T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000250","customer_id":"CUST_0034","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-03-11T09:00:00.000Z"},"updated_at":{"$date":"2025-03-11T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000251","customer_id":"CUST_0051","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-03-12T10:00:00.000Z"},"updated_at":{"$date":"2025-03-12T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000252","customer_id":"CUST_0068","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-03-13T11:00:00.000Z"},"updated_at":{"$date":"2025-03-13T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000253","customer_id":"CUST_0085","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-03-14T12:00:00.000Z"},"updated_at":{"$date":"2025-03-14T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000254","customer_id":"CUST_0102","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-03-15T13:00:00.000Z"},"updated_at":{"$date":"2025-03-15T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000255","customer_id":"CUST_0119","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-03-16T14:00:00.000Z"},"updated_at":{"$date":"2025-03-16T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000256","customer_id":"CUST_0136","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-03-17T15:00:00.000Z"},"updated_at":{"$date":"2025-03-17T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000257","customer_id":"CUST_0153","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-03-18T16:00:00.000Z"},"updated_at":{"$date":"2025-03-18T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000258","customer_id":"CUST_0170","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-03-19T17:00:00.000Z"},"updated_at":{"$date":"2025-03-19T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000259","customer_id":"CUST_0187","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-03-20T18:00:00.000Z"},"updated_at":{"$date":"2025-03-20T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000260","customer_id":"CUST_0004","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-03-21T19:00:00.000Z"},"updated_at":{"$date":"2025-03-21T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000261","customer_id":"CUST_0021","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-03-22T00:00:00.000Z"},"updated_at":{"$date":"2025-03-22T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000262","customer_id":"CUST_0038","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-03-23T01:00:00.000Z"},"updated_at":{"$date":"2025-03-23T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000263","customer_id":"CUST_0055","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-03-24T02:00:00.000Z"},"updated_at":{"$date":"2025-03-24T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000264","customer_id":"CUST_0072","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-03-25T03:00:00.000Z"},"updated_at":{"$date":"2025-03-25T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000265","customer_id":"CUST_0089","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-03-26T04:00:00.000Z"},"updated_at":{"$date":"2025-03-26T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000266","customer_id":"CUST_0106","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-03-27T05:00:00.000Z"},"updated_at":{"$date":"2025-03-27T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000267","customer_id":"CUST_0123","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-03-28T06:00:00.000Z"},"updated_at":{"$date":"2025-03-28T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000268","customer_id":"CUST_0140","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-03-29T07:00:00.000Z"},"updated_at":{"$date":"2025-03-29T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000269","customer_id":"CUST_0157","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-03-30T08:00:00.000Z"},"updated_at":{"$date":"2025-03-30T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000270","customer_id":"CUST_0174","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-03-31T09:00:00.000Z"},"updated_at":{"$date":"2025-03-31T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000271","customer_id":"CUST_0191","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-01-01T10:00:00.000Z"},"updated_at":{"$date":"2025-01-01T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000272","customer_id":"CUST_0008","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-01-02T11:00:00.000Z"},"updated_at":{"$date":"2025-01-02T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000273","customer_id":"CUST_0025","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-01-03T12:00:00.000Z"},"updated_at":{"$date":"2025-01-03T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000274","customer_id":"CUST_0042","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-01-04T13:00:00.000Z"},"updated_at":{"$date":"2025-01-04T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000275","customer_id":"CUST_0059","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-01-05T14:00:00.000Z"},"updated_at":{"$date":"2025-01-05T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000276","customer_id":"CUST_0076","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-01-06T15:00:00.000Z"},"updated_at":{"$date":"2025-01-06T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000277","customer_id":"CUST_0093","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-01-07T16:00:00.000Z"},"updated_at":{"$date":"2025-01-07T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000278","customer_id":"CUST_0110","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-01-08T17:00:00.000Z"},"updated_at":{"$date":"2025-01-08T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000279","customer_id":"CUST_0127","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-01-09T18:00:00.000Z"},"updated_at":{"$date":"2025-01-09T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000280","customer_id":"CUST_0144","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-01-10T19:00:00.000Z"},"updated_at":{"$date":"2025-01-10T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000281","customer_id":"CUST_0161","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-01-11T00:00:00.000Z"},"updated_at":{"$date":"2025-01-11T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000282","customer_id":"CUST_0178","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-01-12T01:00:00.000Z"},"updated_at":{"$date":"2025-01-12T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000283","customer_id":"CUST_0195","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-01-13T02:00:00.000Z"},"updated_at":{"$date":"2025-01-13T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000284","customer_id":"CUST_0012","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-01-14T03:00:00.000Z"},"updated_at":{"$date":"2025-01-14T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000285","customer_id":"CUST_0029","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-01-15T04:00:00.000Z"},"updated_at":{"$date":"2025-01-15T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000286","customer_id":"CUST_0046","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-01-16T05:00:00.000Z"},"updated_at":{"$date":"2025-01-16T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000287","customer_id":"CUST_0063","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-01-17T06:00:00.000Z"},"updated_at":{"$date":"2025-01-17T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000288","customer_id":"CUST_0080","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-01-18T07:00:00.000Z"},"updated_at":{"$date":"2025-01-18T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000289","customer_id":"CUST_0097","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-01-19T08:00:00.000Z"},"updated_at":{"$date":"2025-01-19T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000290","customer_id":"CUST_0114","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-01-20T09:00:00.000Z"},"updated_at":{"$date":"2025-01-20T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000291","customer_id":"CUST_0131","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-01-21T10:00:00.000Z"},"updated_at":{"$date":"2025-01-21T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000292","customer_id":"CUST_0148","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-01-22T11:00:00.000Z"},"updated_at":{"$date":"2025-01-22T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000293","customer_id":"CUST_0165","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-01-23T12:00:00.000Z"},"updated_at":{"$date":"2025-01-23T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000294","customer_id":"CUST_0182","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-01-24T13:00:00.000Z"},"updated_at":{"$date":"2025-01-24T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000295","customer_id":"CUST_0199","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-01-25T14:00:00.000Z"},"updated_at":{"$date":"2025-01-25T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000296","customer_id":"CUST_0016","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-01-26T15:00:00.000Z"},"updated_at":{"$date":"2025-01-26T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000297","customer_id":"CUST_0033","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-01-27T16:00:00.000Z"},"updated_at":{"$date":"2025-01-27T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000298","customer_id":"CUST_0050","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-01-28T17:00:00.000Z"},"updated_at":{"$date":"2025-01-28T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000299","customer_id":"CUST_0067","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-01-29T18:00:00.000Z"},"updated_at":{"$date":"2025-01-29T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000300","customer_id":"CUST_0084","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-01-30T19:00:00.000Z"},"updated_at":{"$date":"2025-01-30T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000301","customer_id":"CUST_0101","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-01-31T00:00:00.000Z"},"updated_at":{"$date":"2025-01-31T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000302","customer_id":"CUST_0118","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-02-01T01:00:00.000Z"},"updated_at":{"$date":"2025-02-01T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000303","customer_id":"CUST_0135","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-02-02T02:00:00.000Z"},"updated_at":{"$date":"2025-02-02T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000304","customer_id":"CUST_0152","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-02-03T03:00:00.000Z"},"updated_at":{"$date":"2025-02-03T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000305","customer_id":"CUST_0169","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-02-04T04:00:00.000Z"},"updated_at":{"$date":"2025-02-04T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000306","customer_id":"CUST_0186","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-02-05T05:00:00.000Z"},"updated_at":{"$date":"2025-02-05T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000307","customer_id":"CUST_0003","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-02-06T06:00:00.000Z"},"updated_at":{"$date":"2025-02-06T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000308","customer_id":"CUST_0020","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-02-07T07:00:00.000Z"},"updated_at":{"$date":"2025-02-07T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000309","customer_id":"CUST_0037","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-02-08T08:00:00.000Z"},"updated_at":{"$date":"2025-02-08T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000310","customer_id":"CUST_0054","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-02-09T09:00:00.000Z"},"updated_at":{"$date":"2025-02-09T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000311","customer_id":"CUST_0071","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-02-10T10:00:00.000Z"},"updated_at":{"$date":"2025-02-10T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000312","customer_id":"CUST_0088","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-02-11T11:00:00.000Z"},"updated_at":{"$date":"2025-02-11T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000313","customer_id":"CUST_0105","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-02-12T12:00:00.000Z"},"updated_at":{"$date":"2025-02-12T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000314","customer_id":"CUST_0122","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-02-13T13:00:00.000Z"},"updated_at":{"$date":"2025-02-13T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000315","customer_id":"CUST_0139","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-02-14T14:00:00.000Z"},"updated_at":{"$date":"2025-02-14T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000316","customer_id":"CUST_0156","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-02-15T15:00:00.000Z"},"updated_at":{"$date":"2025-02-15T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000317","customer_id":"CUST_0173","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-02-16T16:00:00.000Z"},"updated_at":{"$date":"2025-02-16T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000318","customer_id":"CUST_0190","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-02-17T17:00:00.000Z"},"updated_at":{"$date":"2025-02-17T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000319","customer_id":"CUST_0007","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-02-18T18:00:00.000Z"},"updated_at":{"$date":"2025-02-18T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000320","customer_id":"CUST_0024","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-02-19T19:00:00.000Z"},"updated_at":{"$date":"2025-02-19T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000321","customer_id":"CUST_0041","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-02-20T00:00:00.000Z"},"updated_at":{"$date":"2025-02-20T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000322","customer_id":"CUST_0058","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-02-21T01:00:00.000Z"},"updated_at":{"$date":"2025-02-21T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000323","customer_id":"CUST_0075","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-02-22T02:00:00.000Z"},"updated_at":{"$date":"2025-02-22T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000324","customer_id":"CUST_0092","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-02-23T03:00:00.000Z"},"updated_at":{"$date":"2025-02-23T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000325","customer_id":"CUST_0109","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-02-24T04:00:00.000Z"},"updated_at":{"$date":"2025-02-24T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000326","customer_id":"CUST_0126","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-02-25T05:00:00.000Z"},"updated_at":{"$date":"2025-02-25T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000327","customer_id":"CUST_0143","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-02-26T06:00:00.000Z"},"updated_at":{"$date":"2025-02-26T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000328","customer_id":"CUST_0160","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-02-27T07:00:00.000Z"},"updated_at":{"$date":"2025-02-27T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000329","customer_id":"CUST_0177","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-02-28T08:00:00.000Z"},"updated_at":{"$date":"2025-02-28T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000330","customer_id":"CUST_0194","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-03-01T09:00:00.000Z"},"updated_at":{"$date":"2025-03-01T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000331","customer_id":"CUST_0011","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-03-02T10:00:00.000Z"},"updated_at":{"$date":"2025-03-02T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000332","customer_id":"CUST_0028","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-03-03T11:00:00.000Z"},"updated_at":{"$date":"2025-03-03T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000333","customer_id":"CUST_0045","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-03-04T12:00:00.000Z"},"updated_at":{"$date":"2025-03-04T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000334","customer_id":"CUST_0062","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-03-05T13:00:00.000Z"},"updated_at":{"$date":"2025-03-05T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000335","customer_id":"CUST_0079","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-03-06T14:00:00.000Z"},"updated_at":{"$date":"2025-03-06T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000336","customer_id":"CUST_0096","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-03-07T15:00:00.000Z"},"updated_at":{"$date":"2025-03-07T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000337","customer_id":"CUST_0113","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-03-08T16:00:00.000Z"},"updated_at":{"$date":"2025-03-08T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000338","customer_id":"CUST_0130","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-03-09T17:00:00.000Z"},"updated_at":{"$date":"2025-03-09T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000339","customer_id":"CUST_0147","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-03-10T18:00:00.000Z"},"updated_at":{"$date":"2025-03-10T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000340","customer_id":"CUST_0164","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-03-11T19:00:00.000Z"},"updated_at":{"$date":"2025-03-11T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000341","customer_id":"CUST_0181","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-03-12T00:00:00.000Z"},"updated_at":{"$date":"2025-03-12T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000342","customer_id":"CUST_0198","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-03-13T01:00:00.000Z"},"updated_at":{"$date":"2025-03-13T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000343","customer_id":"CUST_0015","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-03-14T02:00:00.000Z"},"updated_at":{"$date":"2025-03-14T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000344","customer_id":"CUST_0032","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-03-15T03:00:00.000Z"},"updated_at":{"$date":"2025-03-15T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000345","customer_id":"CUST_0049","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-03-16T04:00:00.000Z"},"updated_at":{"$date":"2025-03-16T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000346","customer_id":"CUST_0066","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-03-17T05:00:00.000Z"},"updated_at":{"$date":"2025-03-17T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000347","customer_id":"CUST_0083","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-03-18T06:00:00.000Z"},"updated_at":{"$date":"2025-03-18T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000348","customer_id":"CUST_0100","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-03-19T07:00:00.000Z"},"updated_at":{"$date":"2025-03-19T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000349","customer_id":"CUST_0117","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-03-20T08:00:00.000Z"},"updated_at":{"$date":"2025-03-20T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000350","customer_id":"CUST_0134","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-03-21T09:00:00.000Z"},"updated_at":{"$date":"2025-03-21T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000351","customer_id":"CUST_0151","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-03-22T10:00:00.000Z"},"updated_at":{"$date":"2025-03-22T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000352","customer_id":"CUST_0168","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-03-23T11:00:00.000Z"},"updated_at":{"$date":"2025-03-23T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000353","customer_id":"CUST_0185","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-03-24T12:00:00.000Z"},"updated_at":{"$date":"2025-03-24T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000354","customer_id":"CUST_0002","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-03-25T13:00:00.000Z"},"updated_at":{"$date":"2025-03-25T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000355","customer_id":"CUST_0019","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-03-26T14:00:00.000Z"},"updated_at":{"$date":"2025-03-26T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000356","customer_id":"CUST_0036","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-03-27T15:00:00.000Z"},"updated_at":{"$date":"2025-03-27T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000357","customer_id":"CUST_0053","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-03-28T16:00:00.000Z"},"updated_at":{"$date":"2025-03-28T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000358","customer_id":"CUST_0070","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-03-29T17:00:00.000Z"},"updated_at":{"$date":"2025-03-29T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000359","customer_id":"CUST_0087","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-03-30T18:00:00.000Z"},"updated_at":{"$date":"2025-03-30T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000360","customer_id":"CUST_0104","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-03-31T19:00:00.000Z"},"updated_at":{"$date":"2025-03-31T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000361","customer_id":"CUST_0121","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000362","customer_id":"CUST_0138","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000363","customer_id":"CUST_0155","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000364","customer_id":"CUST_0172","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000365","customer_id":"CUST_0189","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000366","customer_id":"CUST_0006","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000367","customer_id":"CUST_0023","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000368","customer_id":"CUST_0040","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000369","customer_id":"CUST_0057","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000370","customer_id":"CUST_0074","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000371","customer_id":"CUST_0091","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000372","customer_id":"CUST_0108","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000373","customer_id":"CUST_0125","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000374","customer_id":"CUST_0142","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000375","customer_id":"CUST_0159","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000376","customer_id":"CUST_0176","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000377","customer_id":"CUST_0193","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000378","customer_id":"CUST_0010","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000379","customer_id":"CUST_0027","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000380","customer_id":"CUST_0044","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000381","customer_id":"CUST_0061","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-01-21T00:00:00.000Z"},"updated_at":{"$date":"2025-01-21T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000382","customer_id":"CUST_0078","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-01-22T01:00:00.000Z"},"updated_at":{"$date":"2025-01-22T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000383","customer_id":"CUST_0095","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-01-23T02:00:00.000Z"},"updated_at":{"$date":"2025-01-23T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000384","customer_id":"CUST_0112","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-01-24T03:00:00.000Z"},"updated_at":{"$date":"2025-01-24T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000385","customer_id":"CUST_0129","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-01-25T04:00:00.000Z"},"updated_at":{"$date":"2025-01-25T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000386","customer_id":"CUST_0146","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-01-26T05:00:00.000Z"},"updated_at":{"$date":"2025-01-26T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000387","customer_id":"CUST_0163","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-01-27T06:00:00.000Z"},"updated_at":{"$date":"2025-01-27T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000388","customer_id":"CUST_0180","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-01-28T07:00:00.000Z"},"updated_at":{"$date":"2025-01-28T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000389","customer_id":"CUST_0197","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-01-29T08:00:00.000Z"},"updated_at":{"$date":"2025-01-29T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000390","customer_id":"CUST_0014","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-01-30T09:00:00.000Z"},"updated_at":{"$date":"2025-01-30T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000391","customer_id":"CUST_0031","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-01-31T10:00:00.000Z"},"updated_at":{"$date":"2025-01-31T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000392","customer_id":"CUST_0048","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-02-01T11:00:00.000Z"},"updated_at":{"$date":"2025-02-01T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000393","customer_id":"CUST_0065","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-02-02T12:00:00.000Z"},"updated_at":{"$date":"2025-02-02T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000394","customer_id":"CUST_0082","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-02-03T13:00:00.000Z"},"updated_at":{"$date":"2025-02-03T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000395","customer_id":"CUST_0099","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-02-04T14:00:00.000Z"},"updated_at":{"$date":"2025-02-04T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000396","customer_id":"CUST_0116","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-02-05T15:00:00.000Z"},"updated_at":{"$date":"2025-02-05T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000397","customer_id":"CUST_0133","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-02-06T16:00:00.000Z"},"updated_at":{"$date":"2025-02-06T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000398","customer_id":"CUST_0150","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-02-07T17:00:00.000Z"},"updated_at":{"$date":"2025-02-07T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000399","customer_id":"CUST_0167","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-02-08T18:00:00.000Z"},"updated_at":{"$date":"2025-02-08T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000400","customer_id":"CUST_0184","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-02-09T19:00:00.000Z"},"updated_at":{"$date":"2025-02-09T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000401","customer_id":"CUST_0001","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-02-10T00:00:00.000Z"},"updated_at":{"$date":"2025-02-10T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000402","customer_id":"CUST_0018","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-02-11T01:00:00.000Z"},"updated_at":{"$date":"2025-02-11T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000403","customer_id":"CUST_0035","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-02-12T02:00:00.000Z"},"updated_at":{"$date":"2025-02-12T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000404","customer_id":"CUST_0052","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-02-13T03:00:00.000Z"},"updated_at":{"$date":"2025-02-13T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000405","customer_id":"CUST_0069","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-02-14T04:00:00.000Z"},"updated_at":{"$date":"2025-02-14T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000406","customer_id":"CUST_0086","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-02-15T05:00:00.000Z"},"updated_at":{"$date":"2025-02-15T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000407","customer_id":"CUST_0103","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-02-16T06:00:00.000Z"},"updated_at":{"$date":"2025-02-16T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000408","customer_id":"CUST_0120","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-02-17T07:00:00.000Z"},"updated_at":{"$date":"2025-02-17T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000409","customer_id":"CUST_0137","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-02-18T08:00:00.000Z"},"updated_at":{"$date":"2025-02-18T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000410","customer_id":"CUST_0154","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-02-19T09:00:00.000Z"},"updated_at":{"$date":"2025-02-19T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000411","customer_id":"CUST_0171","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-02-20T10:00:00.000Z"},"updated_at":{"$date":"2025-02-20T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000412","customer_id":"CUST_0188","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-02-21T11:00:00.000Z"},"updated_at":{"$date":"2025-02-21T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000413","customer_id":"CUST_0005","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-02-22T12:00:00.000Z"},"updated_at":{"$date":"2025-02-22T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000414","customer_id":"CUST_0022","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-02-23T13:00:00.000Z"},"updated_at":{"$date":"2025-02-23T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000415","customer_id":"CUST_0039","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-02-24T14:00:00.000Z"},"updated_at":{"$date":"2025-02-24T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000416","customer_id":"CUST_0056","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-02-25T15:00:00.000Z"},"updated_at":{"$date":"2025-02-25T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000417","customer_id":"CUST_0073","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-02-26T16:00:00.000Z"},"updated_at":{"$date":"2025-02-26T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000418","customer_id":"CUST_0090","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-02-27T17:00:00.000Z"},"updated_at":{"$date":"2025-02-27T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000419","customer_id":"CUST_0107","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-02-28T18:00:00.000Z"},"updated_at":{"$date":"2025-02-28T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000420","customer_id":"CUST_0124","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-03-01T19:00:00.000Z"},"updated_at":{"$date":"2025-03-01T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000421","customer_id":"CUST_0141","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-03-02T00:00:00.000Z"},"updated_at":{"$date":"2025-03-02T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000422","customer_id":"CUST_0158","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-03-03T01:00:00.000Z"},"updated_at":{"$date":"2025-03-03T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000423","customer_id":"CUST_0175","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-03-04T02:00:00.000Z"},"updated_at":{"$date":"2025-03-04T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000424","customer_id":"CUST_0192","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-03-05T03:00:00.000Z"},"updated_at":{"$date":"2025-03-05T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000425","customer_id":"CUST_0009","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-03-06T04:00:00.000Z"},"updated_at":{"$date":"2025-03-06T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000426","customer_id":"CUST_0026","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-03-07T05:00:00.000Z"},"updated_at":{"$date":"2025-03-07T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000427","customer_id":"CUST_0043","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-03-08T06:00:00.000Z"},"updated_at":{"$date":"2025-03-08T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000428","customer_id":"CUST_0060","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-03-09T07:00:00.000Z"},"updated_at":{"$date":"2025-03-09T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000429","customer_id":"CUST_0077","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-03-10T08:00:00.000Z"},"updated_at":{"$date":"2025-03-10T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000430","customer_id":"CUST_0094","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-03-11T09:00:00.000Z"},"updated_at":{"$date":"2025-03-11T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000431","customer_id":"CUST_0111","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-03-12T10:00:00.000Z"},"updated_at":{"$date":"2025-03-12T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000432","customer_id":"CUST_0128","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-03-13T11:00:00.000Z"},"updated_at":{"$date":"2025-03-13T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000433","customer_id":"CUST_0145","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-03-14T12:00:00.000Z"},"updated_at":{"$date":"2025-03-14T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000434","customer_id":"CUST_0162","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-03-15T13:00:00.000Z"},"updated_at":{"$date":"2025-03-15T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000435","customer_id":"CUST_0179","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-03-16T14:00:00.000Z"},"updated_at":{"$date":"2025-03-16T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000436","customer_id":"CUST_0196","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-03-17T15:00:00.000Z"},"updated_at":{"$date":"2025-03-17T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000437","customer_id":"CUST_0013","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-03-18T16:00:00.000Z"},"updated_at":{"$date":"2025-03-18T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000438","customer_id":"CUST_0030","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-03-19T17:00:00.000Z"},"updated_at":{"$date":"2025-03-19T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000439","customer_id":"CUST_0047","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-03-20T18:00:00.000Z"},"updated_at":{"$date":"2025-03-20T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000440","customer_id":"CUST_0064","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-03-21T19:00:00.000Z"},"updated_at":{"$date":"2025-03-21T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000441","customer_id":"CUST_0081","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-03-22T00:00:00.000Z"},"updated_at":{"$date":"2025-03-22T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000442","customer_id":"CUST_0098","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-03-23T01:00:00.000Z"},"updated_at":{"$date":"2025-03-23T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000443","customer_id":"CUST_0115","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-03-24T02:00:00.000Z"},"updated_at":{"$date":"2025-03-24T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000444","customer_id":"CUST_0132","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-03-25T03:00:00.000Z"},"updated_at":{"$date":"2025-03-25T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000445","customer_id":"CUST_0149","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-03-26T04:00:00.000Z"},"updated_at":{"$date":"2025-03-26T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000446","customer_id":"CUST_0166","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-03-27T05:00:00.000Z"},"updated_at":{"$date":"2025-03-27T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000447","customer_id":"CUST_0183","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-03-28T06:00:00.000Z"},"updated_at":{"$date":"2025-03-28T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000448","customer_id":"CUST_0200","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-03-29T07:00:00.000Z"},"updated_at":{"$date":"2025-03-29T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000449","customer_id":"CUST_0017","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-03-30T08:00:00.000Z"},"updated_at":{"$date":"2025-03-30T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000450","customer_id":"CUST_0034","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-03-31T09:00:00.000Z"},"updated_at":{"$date":"2025-03-31T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000451","customer_id":"CUST_0051","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-01-01T10:00:00.000Z"},"updated_at":{"$date":"2025-01-01T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000452","customer_id":"CUST_0068","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-01-02T11:00:00.000Z"},"updated_at":{"$date":"2025-01-02T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000453","customer_id":"CUST_0085","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-01-03T12:00:00.000Z"},"updated_at":{"$date":"2025-01-03T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000454","customer_id":"CUST_0102","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-01-04T13:00:00.000Z"},"updated_at":{"$date":"2025-01-04T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000455","customer_id":"CUST_0119","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-01-05T14:00:00.000Z"},"updated_at":{"$date":"2025-01-05T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000456","customer_id":"CUST_0136","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-01-06T15:00:00.000Z"},"updated_at":{"$date":"2025-01-06T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000457","customer_id":"CUST_0153","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-01-07T16:00:00.000Z"},"updated_at":{"$date":"2025-01-07T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000458","customer_id":"CUST_0170","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-01-08T17:00:00.000Z"},"updated_at":{"$date":"2025-01-08T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000459","customer_id":"CUST_0187","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-01-09T18:00:00.000Z"},"updated_at":{"$date":"2025-01-09T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000460","customer_id":"CUST_0004","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-01-10T19:00:00.000Z"},"updated_at":{"$date":"2025-01-10T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000461","customer_id":"CUST_0021","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-01-11T00:00:00.000Z"},"updated_at":{"$date":"2025-01-11T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000462","customer_id":"CUST_0038","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-01-12T01:00:00.000Z"},"updated_at":{"$date":"2025-01-12T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000463","customer_id":"CUST_0055","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-01-13T02:00:00.000Z"},"updated_at":{"$date":"2025-01-13T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000464","customer_id":"CUST_0072","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-01-14T03:00:00.000Z"},"updated_at":{"$date":"2025-01-14T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000465","customer_id":"CUST_0089","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-01-15T04:00:00.000Z"},"updated_at":{"$date":"2025-01-15T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000466","customer_id":"CUST_0106","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-01-16T05:00:00.000Z"},"updated_at":{"$date":"2025-01-16T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000467","customer_id":"CUST_0123","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-01-17T06:00:00.000Z"},"updated_at":{"$date":"2025-01-17T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000468","customer_id":"CUST_0140","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-01-18T07:00:00.000Z"},"updated_at":{"$date":"2025-01-18T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000469","customer_id":"CUST_0157","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-01-19T08:00:00.000Z"},"updated_at":{"$date":"2025-01-19T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000470","customer_id":"CUST_0174","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-01-20T09:00:00.000Z"},"updated_at":{"$date":"2025-01-20T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000471","customer_id":"CUST_0191","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-01-21T10:00:00.000Z"},"updated_at":{"$date":"2025-01-21T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000472","customer_id":"CUST_0008","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-01-22T11:00:00.000Z"},"updated_at":{"$date":"2025-01-22T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000473","customer_id":"CUST_0025","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-01-23T12:00:00.000Z"},"updated_at":{"$date":"2025-01-23T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000474","customer_id":"CUST_0042","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-01-24T13:00:00.000Z"},"updated_at":{"$date":"2025-01-24T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000475","customer_id":"CUST_0059","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-01-25T14:00:00.000Z"},"updated_at":{"$date":"2025-01-25T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000476","customer_id":"CUST_0076","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-01-26T15:00:00.000Z"},"updated_at":{"$date":"2025-01-26T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000477","customer_id":"CUST_0093","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-01-27T16:00:00.000Z"},"updated_at":{"$date":"2025-01-27T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000478","customer_id":"CUST_0110","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-01-28T17:00:00.000Z"},"updated_at":{"$date":"2025-01-28T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000479","customer_id":"CUST_0127","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-01-29T18:00:00.000Z"},"updated_at":{"$date":"2025-01-29T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000480","customer_id":"CUST_0144","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-01-30T19:00:00.000Z"},"updated_at":{"$date":"2025-01-30T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000481","customer_id":"CUST_0161","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-01-31T00:00:00.000Z"},"updated_at":{"$date":"2025-01-31T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000482","customer_id":"CUST_0178","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-02-01T01:00:00.000Z"},"updated_at":{"$date":"2025-02-01T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000483","customer_id":"CUST_0195","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-02-02T02:00:00.000Z"},"updated_at":{"$date":"2025-02-02T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000484","customer_id":"CUST_0012","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-02-03T03:00:00.000Z"},"updated_at":{"$date":"2025-02-03T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000485","customer_id":"CUST_0029","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-02-04T04:00:00.000Z"},"updated_at":{"$date":"2025-02-04T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000486","customer_id":"CUST_0046","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-02-05T05:00:00.000Z"},"updated_at":{"$date":"2025-02-05T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000487","customer_id":"CUST_0063","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-02-06T06:00:00.000Z"},"updated_at":{"$date":"2025-02-06T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000488","customer_id":"CUST_0080","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-02-07T07:00:00.000Z"},"updated_at":{"$date":"2025-02-07T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000489","customer_id":"CUST_0097","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-02-08T08:00:00.000Z"},"updated_at":{"$date":"2025-02-08T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000490","customer_id":"CUST_0114","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-02-09T09:00:00.000Z"},"updated_at":{"$date":"2025-02-09T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000491","customer_id":"CUST_0131","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-02-10T10:00:00.000Z"},"updated_at":{"$date":"2025-02-10T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000492","customer_id":"CUST_0148","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-02-11T11:00:00.000Z"},"updated_at":{"$date":"2025-02-11T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000493","customer_id":"CUST_0165","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-02-12T12:00:00.000Z"},"updated_at":{"$date":"2025-02-12T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000494","customer_id":"CUST_0182","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-02-13T13:00:00.000Z"},"updated_at":{"$date":"2025-02-13T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000495","customer_id":"CUST_0199","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-02-14T14:00:00.000Z"},"updated_at":{"$date":"2025-02-14T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000496","customer_id":"CUST_0016","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-02-15T15:00:00.000Z"},"updated_at":{"$date":"2025-02-15T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000497","customer_id":"CUST_0033","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-02-16T16:00:00.000Z"},"updated_at":{"$date":"2025-02-16T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000498","customer_id":"CUST_0050","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-02-17T17:00:00.000Z"},"updated_at":{"$date":"2025-02-17T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000499","customer_id":"CUST_0067","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-02-18T18:00:00.000Z"},"updated_at":{"$date":"2025-02-18T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000500","customer_id":"CUST_0084","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-02-19T19:00:00.000Z"},"updated_at":{"$date":"2025-02-19T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000501","customer_id":"CUST_0101","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-02-20T00:00:00.000Z"},"updated_at":{"$date":"2025-02-20T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000502","customer_id":"CUST_0118","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-02-21T01:00:00.000Z"},"updated_at":{"$date":"2025-02-21T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000503","customer_id":"CUST_0135","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-02-22T02:00:00.000Z"},"updated_at":{"$date":"2025-02-22T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000504","customer_id":"CUST_0152","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-02-23T03:00:00.000Z"},"updated_at":{"$date":"2025-02-23T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000505","customer_id":"CUST_0169","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-02-24T04:00:00.000Z"},"updated_at":{"$date":"2025-02-24T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000506","customer_id":"CUST_0186","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-02-25T05:00:00.000Z"},"updated_at":{"$date":"2025-02-25T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000507","customer_id":"CUST_0003","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-02-26T06:00:00.000Z"},"updated_at":{"$date":"2025-02-26T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000508","customer_id":"CUST_0020","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-02-27T07:00:00.000Z"},"updated_at":{"$date":"2025-02-27T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000509","customer_id":"CUST_0037","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-02-28T08:00:00.000Z"},"updated_at":{"$date":"2025-02-28T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000510","customer_id":"CUST_0054","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-03-01T09:00:00.000Z"},"updated_at":{"$date":"2025-03-01T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000511","customer_id":"CUST_0071","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-03-02T10:00:00.000Z"},"updated_at":{"$date":"2025-03-02T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000512","customer_id":"CUST_0088","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-03-03T11:00:00.000Z"},"updated_at":{"$date":"2025-03-03T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000513","customer_id":"CUST_0105","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-03-04T12:00:00.000Z"},"updated_at":{"$date":"2025-03-04T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000514","customer_id":"CUST_0122","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-03-05T13:00:00.000Z"},"updated_at":{"$date":"2025-03-05T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000515","customer_id":"CUST_0139","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-03-06T14:00:00.000Z"},"updated_at":{"$date":"2025-03-06T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000516","customer_id":"CUST_0156","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-03-07T15:00:00.000Z"},"updated_at":{"$date":"2025-03-07T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000517","customer_id":"CUST_0173","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-03-08T16:00:00.000Z"},"updated_at":{"$date":"2025-03-08T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000518","customer_id":"CUST_0190","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-03-09T17:00:00.000Z"},"updated_at":{"$date":"2025-03-09T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000519","customer_id":"CUST_0007","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-03-10T18:00:00.000Z"},"updated_at":{"$date":"2025-03-10T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000520","customer_id":"CUST_0024","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-03-11T19:00:00.000Z"},"updated_at":{"$date":"2025-03-11T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000521","customer_id":"CUST_0041","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-03-12T00:00:00.000Z"},"updated_at":{"$date":"2025-03-12T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000522","customer_id":"CUST_0058","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-03-13T01:00:00.000Z"},"updated_at":{"$date":"2025-03-13T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000523","customer_id":"CUST_0075","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-03-14T02:00:00.000Z"},"updated_at":{"$date":"2025-03-14T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000524","customer_id":"CUST_0092","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-03-15T03:00:00.000Z"},"updated_at":{"$date":"2025-03-15T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000525","customer_id":"CUST_0109","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-03-16T04:00:00.000Z"},"updated_at":{"$date":"2025-03-16T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000526","customer_id":"CUST_0126","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-03-17T05:00:00.000Z"},"updated_at":{"$date":"2025-03-17T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000527","customer_id":"CUST_0143","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-03-18T06:00:00.000Z"},"updated_at":{"$date":"2025-03-18T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000528","customer_id":"CUST_0160","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-03-19T07:00:00.000Z"},"updated_at":{"$date":"2025-03-19T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000529","customer_id":"CUST_0177","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-03-20T08:00:00.000Z"},"updated_at":{"$date":"2025-03-20T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000530","customer_id":"CUST_0194","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-03-21T09:00:00.000Z"},"updated_at":{"$date":"2025-03-21T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000531","customer_id":"CUST_0011","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-03-22T10:00:00.000Z"},"updated_at":{"$date":"2025-03-22T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000532","customer_id":"CUST_0028","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-03-23T11:00:00.000Z"},"updated_at":{"$date":"2025-03-23T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000533","customer_id":"CUST_0045","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-03-24T12:00:00.000Z"},"updated_at":{"$date":"2025-03-24T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000534","customer_id":"CUST_0062","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-03-25T13:00:00.000Z"},"updated_at":{"$date":"2025-03-25T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000535","customer_id":"CUST_0079","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-03-26T14:00:00.000Z"},"updated_at":{"$date":"2025-03-26T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000536","customer_id":"CUST_0096","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-03-27T15:00:00.000Z"},"updated_at":{"$date":"2025-03-27T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000537","customer_id":"CUST_0113","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-03-28T16:00:00.000Z"},"updated_at":{"$date":"2025-03-28T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000538","customer_id":"CUST_0130","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-03-29T17:00:00.000Z"},"updated_at":{"$date":"2025-03-29T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000539","customer_id":"CUST_0147","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-03-30T18:00:00.000Z"},"updated_at":{"$date":"2025-03-30T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000540","customer_id":"CUST_0164","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-03-31T19:00:00.000Z"},"updated_at":{"$date":"2025-03-31T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000541","customer_id":"CUST_0181","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000542","customer_id":"CUST_0198","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000543","customer_id":"CUST_0015","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000544","customer_id":"CUST_0032","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000545","customer_id":"CUST_0049","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000546","customer_id":"CUST_0066","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000547","customer_id":"CUST_0083","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000548","customer_id":"CUST_0100","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000549","customer_id":"CUST_0117","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000550","customer_id":"CUST_0134","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000551","customer_id":"CUST_0151","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000552","customer_id":"CUST_0168","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000553","customer_id":"CUST_0185","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000554","customer_id":"CUST_0002","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000555","customer_id":"CUST_0019","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000556","customer_id":"CUST_0036","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000557","customer_id":"CUST_0053","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000558","customer_id":"CUST_0070","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000559","customer_id":"CUST_0087","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000560","customer_id":"CUST_0104","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000561","customer_id":"CUST_0121","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-01-21T00:00:00.000Z"},"updated_at":{"$date":"2025-01-21T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000562","customer_id":"CUST_0138","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-01-22T01:00:00.000Z"},"updated_at":{"$date":"2025-01-22T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000563","customer_id":"CUST_0155","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-01-23T02:00:00.000Z"},"updated_at":{"$date":"2025-01-23T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000564","customer_id":"CUST_0172","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-01-24T03:00:00.000Z"},"updated_at":{"$date":"2025-01-24T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000565","customer_id":"CUST_0189","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-01-25T04:00:00.000Z"},"updated_at":{"$date":"2025-01-25T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000566","customer_id":"CUST_0006","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-01-26T05:00:00.000Z"},"updated_at":{"$date":"2025-01-26T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000567","customer_id":"CUST_0023","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-01-27T06:00:00.000Z"},"updated_at":{"$date":"2025-01-27T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000568","customer_id":"CUST_0040","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-01-28T07:00:00.000Z"},"updated_at":{"$date":"2025-01-28T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000569","customer_id":"CUST_0057","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-01-29T08:00:00.000Z"},"updated_at":{"$date":"2025-01-29T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000570","customer_id":"CUST_0074","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-01-30T09:00:00.000Z"},"updated_at":{"$date":"2025-01-30T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000571","customer_id":"CUST_0091","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-01-31T10:00:00.000Z"},"updated_at":{"$date":"2025-01-31T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000572","customer_id":"CUST_0108","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-02-01T11:00:00.000Z"},"updated_at":{"$date":"2025-02-01T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000573","customer_id":"CUST_0125","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-02-02T12:00:00.000Z"},"updated_at":{"$date":"2025-02-02T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000574","customer_id":"CUST_0142","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-02-03T13:00:00.000Z"},"updated_at":{"$date":"2025-02-03T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000575","customer_id":"CUST_0159","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-02-04T14:00:00.000Z"},"updated_at":{"$date":"2025-02-04T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000576","customer_id":"CUST_0176","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-02-05T15:00:00.000Z"},"updated_at":{"$date":"2025-02-05T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000577","customer_id":"CUST_0193","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-02-06T16:00:00.000Z"},"updated_at":{"$date":"2025-02-06T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000578","customer_id":"CUST_0010","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-02-07T17:00:00.000Z"},"updated_at":{"$date":"2025-02-07T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000579","customer_id":"CUST_0027","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-02-08T18:00:00.000Z"},"updated_at":{"$date":"2025-02-08T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000580","customer_id":"CUST_0044","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-02-09T19:00:00.000Z"},"updated_at":{"$date":"2025-02-09T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000581","customer_id":"CUST_0061","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-02-10T00:00:00.000Z"},"updated_at":{"$date":"2025-02-10T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000582","customer_id":"CUST_0078","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-02-11T01:00:00.000Z"},"updated_at":{"$date":"2025-02-11T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000583","customer_id":"CUST_0095","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-02-12T02:00:00.000Z"},"updated_at":{"$date":"2025-02-12T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000584","customer_id":"CUST_0112","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-02-13T03:00:00.000Z"},"updated_at":{"$date":"2025-02-13T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000585","customer_id":"CUST_0129","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-02-14T04:00:00.000Z"},"updated_at":{"$date":"2025-02-14T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000586","customer_id":"CUST_0146","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-02-15T05:00:00.000Z"},"updated_at":{"$date":"2025-02-15T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000587","customer_id":"CUST_0163","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-02-16T06:00:00.000Z"},"updated_at":{"$date":"2025-02-16T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000588","customer_id":"CUST_0180","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-02-17T07:00:00.000Z"},"updated_at":{"$date":"2025-02-17T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000589","customer_id":"CUST_0197","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-02-18T08:00:00.000Z"},"updated_at":{"$date":"2025-02-18T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000590","customer_id":"CUST_0014","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-02-19T09:00:00.000Z"},"updated_at":{"$date":"2025-02-19T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000591","customer_id":"CUST_0031","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-02-20T10:00:00.000Z"},"updated_at":{"$date":"2025-02-20T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000592","customer_id":"CUST_0048","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-02-21T11:00:00.000Z"},"updated_at":{"$date":"2025-02-21T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000593","customer_id":"CUST_0065","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-02-22T12:00:00.000Z"},"updated_at":{"$date":"2025-02-22T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000594","customer_id":"CUST_0082","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-02-23T13:00:00.000Z"},"updated_at":{"$date":"2025-02-23T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000595","customer_id":"CUST_0099","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-02-24T14:00:00.000Z"},"updated_at":{"$date":"2025-02-24T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000596","customer_id":"CUST_0116","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-02-25T15:00:00.000Z"},"updated_at":{"$date":"2025-02-25T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000597","customer_id":"CUST_0133","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-02-26T16:00:00.000Z"},"updated_at":{"$date":"2025-02-26T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000598","customer_id":"CUST_0150","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-02-27T17:00:00.000Z"},"updated_at":{"$date":"2025-02-27T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000599","customer_id":"CUST_0167","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-02-28T18:00:00.000Z"},"updated_at":{"$date":"2025-02-28T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000600","customer_id":"CUST_0184","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-03-01T19:00:00.000Z"},"updated_at":{"$date":"2025-03-01T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000601","customer_id":"CUST_0001","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-03-02T00:00:00.000Z"},"updated_at":{"$date":"2025-03-02T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000602","customer_id":"CUST_0018","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-03-03T01:00:00.000Z"},"updated_at":{"$date":"2025-03-03T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000603","customer_id":"CUST_0035","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-03-04T02:00:00.000Z"},"updated_at":{"$date":"2025-03-04T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000604","customer_id":"CUST_0052","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-03-05T03:00:00.000Z"},"updated_at":{"$date":"2025-03-05T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000605","customer_id":"CUST_0069","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-03-06T04:00:00.000Z"},"updated_at":{"$date":"2025-03-06T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000606","customer_id":"CUST_0086","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-03-07T05:00:00.000Z"},"updated_at":{"$date":"2025-03-07T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000607","customer_id":"CUST_0103","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-03-08T06:00:00.000Z"},"updated_at":{"$date":"2025-03-08T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000608","customer_id":"CUST_0120","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-03-09T07:00:00.000Z"},"updated_at":{"$date":"2025-03-09T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000609","customer_id":"CUST_0137","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-03-10T08:00:00.000Z"},"updated_at":{"$date":"2025-03-10T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000610","customer_id":"CUST_0154","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-03-11T09:00:00.000Z"},"updated_at":{"$date":"2025-03-11T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000611","customer_id":"CUST_0171","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-03-12T10:00:00.000Z"},"updated_at":{"$date":"2025-03-12T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000612","customer_id":"CUST_0188","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-03-13T11:00:00.000Z"},"updated_at":{"$date":"2025-03-13T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000613","customer_id":"CUST_0005","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-03-14T12:00:00.000Z"},"updated_at":{"$date":"2025-03-14T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000614","customer_id":"CUST_0022","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-03-15T13:00:00.000Z"},"updated_at":{"$date":"2025-03-15T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000615","customer_id":"CUST_0039","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-03-16T14:00:00.000Z"},"updated_at":{"$date":"2025-03-16T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000616","customer_id":"CUST_0056","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-03-17T15:00:00.000Z"},"updated_at":{"$date":"2025-03-17T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000617","customer_id":"CUST_0073","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-03-18T16:00:00.000Z"},"updated_at":{"$date":"2025-03-18T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000618","customer_id":"CUST_0090","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-03-19T17:00:00.000Z"},"updated_at":{"$date":"2025-03-19T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000619","customer_id":"CUST_0107","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-03-20T18:00:00.000Z"},"updated_at":{"$date":"2025-03-20T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000620","customer_id":"CUST_0124","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-03-21T19:00:00.000Z"},"updated_at":{"$date":"2025-03-21T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000621","customer_id":"CUST_0141","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-03-22T00:00:00.000Z"},"updated_at":{"$date":"2025-03-22T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000622","customer_id":"CUST_0158","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-03-23T01:00:00.000Z"},"updated_at":{"$date":"2025-03-23T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000623","customer_id":"CUST_0175","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-03-24T02:00:00.000Z"},"updated_at":{"$date":"2025-03-24T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000624","customer_id":"CUST_0192","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-03-25T03:00:00.000Z"},"updated_at":{"$date":"2025-03-25T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000625","customer_id":"CUST_0009","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-03-26T04:00:00.000Z"},"updated_at":{"$date":"2025-03-26T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000626","customer_id":"CUST_0026","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-03-27T05:00:00.000Z"},"updated_at":{"$date":"2025-03-27T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000627","customer_id":"CUST_0043","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-03-28T06:00:00.000Z"},"updated_at":{"$date":"2025-03-28T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000628","customer_id":"CUST_0060","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-03-29T07:00:00.000Z"},"updated_at":{"$date":"2025-03-29T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000629","customer_id":"CUST_0077","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-03-30T08:00:00.000Z"},"updated_at":{"$date":"2025-03-30T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000630","customer_id":"CUST_0094","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-03-31T09:00:00.000Z"},"updated_at":{"$date":"2025-03-31T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000631","customer_id":"CUST_0111","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-01-01T10:00:00.000Z"},"updated_at":{"$date":"2025-01-01T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000632","customer_id":"CUST_0128","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-01-02T11:00:00.000Z"},"updated_at":{"$date":"2025-01-02T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000633","customer_id":"CUST_0145","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-01-03T12:00:00.000Z"},"updated_at":{"$date":"2025-01-03T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000634","customer_id":"CUST_0162","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-01-04T13:00:00.000Z"},"updated_at":{"$date":"2025-01-04T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000635","customer_id":"CUST_0179","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-01-05T14:00:00.000Z"},"updated_at":{"$date":"2025-01-05T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000636","customer_id":"CUST_0196","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-01-06T15:00:00.000Z"},"updated_at":{"$date":"2025-01-06T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000637","customer_id":"CUST_0013","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-01-07T16:00:00.000Z"},"updated_at":{"$date":"2025-01-07T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000638","customer_id":"CUST_0030","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-01-08T17:00:00.000Z"},"updated_at":{"$date":"2025-01-08T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000639","customer_id":"CUST_0047","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-01-09T18:00:00.000Z"},"updated_at":{"$date":"2025-01-09T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000640","customer_id":"CUST_0064","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-01-10T19:00:00.000Z"},"updated_at":{"$date":"2025-01-10T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000641","customer_id":"CUST_0081","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-01-11T00:00:00.000Z"},"updated_at":{"$date":"2025-01-11T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000642","customer_id":"CUST_0098","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-01-12T01:00:00.000Z"},"updated_at":{"$date":"2025-01-12T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000643","customer_id":"CUST_0115","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-01-13T02:00:00.000Z"},"updated_at":{"$date":"2025-01-13T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000644","customer_id":"CUST_0132","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-01-14T03:00:00.000Z"},"updated_at":{"$date":"2025-01-14T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000645","customer_id":"CUST_0149","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-01-15T04:00:00.000Z"},"updated_at":{"$date":"2025-01-15T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000646","customer_id":"CUST_0166","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-01-16T05:00:00.000Z"},"updated_at":{"$date":"2025-01-16T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000647","customer_id":"CUST_0183","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-01-17T06:00:00.000Z"},"updated_at":{"$date":"2025-01-17T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000648","customer_id":"CUST_0200","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-01-18T07:00:00.000Z"},"updated_at":{"$date":"2025-01-18T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000649","customer_id":"CUST_0017","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-01-19T08:00:00.000Z"},"updated_at":{"$date":"2025-01-19T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000650","customer_id":"CUST_0034","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-01-20T09:00:00.000Z"},"updated_at":{"$date":"2025-01-20T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000651","customer_id":"CUST_0051","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-01-21T10:00:00.000Z"},"updated_at":{"$date":"2025-01-21T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000652","customer_id":"CUST_0068","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-01-22T11:00:00.000Z"},"updated_at":{"$date":"2025-01-22T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000653","customer_id":"CUST_0085","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-01-23T12:00:00.000Z"},"updated_at":{"$date":"2025-01-23T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000654","customer_id":"CUST_0102","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-01-24T13:00:00.000Z"},"updated_at":{"$date":"2025-01-24T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000655","customer_id":"CUST_0119","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-01-25T14:00:00.000Z"},"updated_at":{"$date":"2025-01-25T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000656","customer_id":"CUST_0136","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-01-26T15:00:00.000Z"},"updated_at":{"$date":"2025-01-26T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000657","customer_id":"CUST_0153","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-01-27T16:00:00.000Z"},"updated_at":{"$date":"2025-01-27T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000658","customer_id":"CUST_0170","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-01-28T17:00:00.000Z"},"updated_at":{"$date":"2025-01-28T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000659","customer_id":"CUST_0187","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-01-29T18:00:00.000Z"},"updated_at":{"$date":"2025-01-29T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000660","customer_id":"CUST_0004","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-01-30T19:00:00.000Z"},"updated_at":{"$date":"2025-01-30T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000661","customer_id":"CUST_0021","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-01-31T00:00:00.000Z"},"updated_at":{"$date":"2025-01-31T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000662","customer_id":"CUST_0038","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-02-01T01:00:00.000Z"},"updated_at":{"$date":"2025-02-01T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000663","customer_id":"CUST_0055","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-02-02T02:00:00.000Z"},"updated_at":{"$date":"2025-02-02T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000664","customer_id":"CUST_0072","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-02-03T03:00:00.000Z"},"updated_at":{"$date":"2025-02-03T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000665","customer_id":"CUST_0089","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-02-04T04:00:00.000Z"},"updated_at":{"$date":"2025-02-04T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000666","customer_id":"CUST_0106","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-02-05T05:00:00.000Z"},"updated_at":{"$date":"2025-02-05T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000667","customer_id":"CUST_0123","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-02-06T06:00:00.000Z"},"updated_at":{"$date":"2025-02-06T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000668","customer_id":"CUST_0140","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-02-07T07:00:00.000Z"},"updated_at":{"$date":"2025-02-07T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000669","customer_id":"CUST_0157","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-02-08T08:00:00.000Z"},"updated_at":{"$date":"2025-02-08T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000670","customer_id":"CUST_0174","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-02-09T09:00:00.000Z"},"updated_at":{"$date":"2025-02-09T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000671","customer_id":"CUST_0191","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-02-10T10:00:00.000Z"},"updated_at":{"$date":"2025-02-10T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000672","customer_id":"CUST_0008","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-02-11T11:00:00.000Z"},"updated_at":{"$date":"2025-02-11T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000673","customer_id":"CUST_0025","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-02-12T12:00:00.000Z"},"updated_at":{"$date":"2025-02-12T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000674","customer_id":"CUST_0042","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-02-13T13:00:00.000Z"},"updated_at":{"$date":"2025-02-13T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000675","customer_id":"CUST_0059","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-02-14T14:00:00.000Z"},"updated_at":{"$date":"2025-02-14T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000676","customer_id":"CUST_0076","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-02-15T15:00:00.000Z"},"updated_at":{"$date":"2025-02-15T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000677","customer_id":"CUST_0093","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-02-16T16:00:00.000Z"},"updated_at":{"$date":"2025-02-16T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000678","customer_id":"CUST_0110","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-02-17T17:00:00.000Z"},"updated_at":{"$date":"2025-02-17T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000679","customer_id":"CUST_0127","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-02-18T18:00:00.000Z"},"updated_at":{"$date":"2025-02-18T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000680","customer_id":"CUST_0144","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-02-19T19:00:00.000Z"},"updated_at":{"$date":"2025-02-19T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000681","customer_id":"CUST_0161","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-02-20T00:00:00.000Z"},"updated_at":{"$date":"2025-02-20T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000682","customer_id":"CUST_0178","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-02-21T01:00:00.000Z"},"updated_at":{"$date":"2025-02-21T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000683","customer_id":"CUST_0195","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-02-22T02:00:00.000Z"},"updated_at":{"$date":"2025-02-22T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000684","customer_id":"CUST_0012","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-02-23T03:00:00.000Z"},"updated_at":{"$date":"2025-02-23T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000685","customer_id":"CUST_0029","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-02-24T04:00:00.000Z"},"updated_at":{"$date":"2025-02-24T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000686","customer_id":"CUST_0046","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-02-25T05:00:00.000Z"},"updated_at":{"$date":"2025-02-25T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000687","customer_id":"CUST_0063","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-02-26T06:00:00.000Z"},"updated_at":{"$date":"2025-02-26T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000688","customer_id":"CUST_0080","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-02-27T07:00:00.000Z"},"updated_at":{"$date":"2025-02-27T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000689","customer_id":"CUST_0097","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-02-28T08:00:00.000Z"},"updated_at":{"$date":"2025-02-28T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000690","customer_id":"CUST_0114","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-03-01T09:00:00.000Z"},"updated_at":{"$date":"2025-03-01T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000691","customer_id":"CUST_0131","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-03-02T10:00:00.000Z"},"updated_at":{"$date":"2025-03-02T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000692","customer_id":"CUST_0148","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-03-03T11:00:00.000Z"},"updated_at":{"$date":"2025-03-03T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000693","customer_id":"CUST_0165","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-03-04T12:00:00.000Z"},"updated_at":{"$date":"2025-03-04T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000694","customer_id":"CUST_0182","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-03-05T13:00:00.000Z"},"updated_at":{"$date":"2025-03-05T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000695","customer_id":"CUST_0199","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-03-06T14:00:00.000Z"},"updated_at":{"$date":"2025-03-06T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000696","customer_id":"CUST_0016","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-03-07T15:00:00.000Z"},"updated_at":{"$date":"2025-03-07T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000697","customer_id":"CUST_0033","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-03-08T16:00:00.000Z"},"updated_at":{"$date":"2025-03-08T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000698","customer_id":"CUST_0050","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-03-09T17:00:00.000Z"},"updated_at":{"$date":"2025-03-09T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000699","customer_id":"CUST_0067","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-03-10T18:00:00.000Z"},"updated_at":{"$date":"2025-03-10T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000700","customer_id":"CUST_0084","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-03-11T19:00:00.000Z"},"updated_at":{"$date":"2025-03-11T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000701","customer_id":"CUST_0101","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-03-12T00:00:00.000Z"},"updated_at":{"$date":"2025-03-12T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000702","customer_id":"CUST_0118","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-03-13T01:00:00.000Z"},"updated_at":{"$date":"2025-03-13T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000703","customer_id":"CUST_0135","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-03-14T02:00:00.000Z"},"updated_at":{"$date":"2025-03-14T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000704","customer_id":"CUST_0152","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-03-15T03:00:00.000Z"},"updated_at":{"$date":"2025-03-15T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000705","customer_id":"CUST_0169","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-03-16T04:00:00.000Z"},"updated_at":{"$date":"2025-03-16T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000706","customer_id":"CUST_0186","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-03-17T05:00:00.000Z"},"updated_at":{"$date":"2025-03-17T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000707","customer_id":"CUST_0003","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-03-18T06:00:00.000Z"},"updated_at":{"$date":"2025-03-18T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000708","customer_id":"CUST_0020","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-03-19T07:00:00.000Z"},"updated_at":{"$date":"2025-03-19T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000709","customer_id":"CUST_0037","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-03-20T08:00:00.000Z"},"updated_at":{"$date":"2025-03-20T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000710","customer_id":"CUST_0054","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-03-21T09:00:00.000Z"},"updated_at":{"$date":"2025-03-21T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000711","customer_id":"CUST_0071","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-03-22T10:00:00.000Z"},"updated_at":{"$date":"2025-03-22T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000712","customer_id":"CUST_0088","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-03-23T11:00:00.000Z"},"updated_at":{"$date":"2025-03-23T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000713","customer_id":"CUST_0105","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-03-24T12:00:00.000Z"},"updated_at":{"$date":"2025-03-24T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000714","customer_id":"CUST_0122","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-03-25T13:00:00.000Z"},"updated_at":{"$date":"2025-03-25T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000715","customer_id":"CUST_0139","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-03-26T14:00:00.000Z"},"updated_at":{"$date":"2025-03-26T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000716","customer_id":"CUST_0156","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-03-27T15:00:00.000Z"},"updated_at":{"$date":"2025-03-27T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000717","customer_id":"CUST_0173","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-03-28T16:00:00.000Z"},"updated_at":{"$date":"2025-03-28T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000718","customer_id":"CUST_0190","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-03-29T17:00:00.000Z"},"updated_at":{"$date":"2025-03-29T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000719","customer_id":"CUST_0007","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-03-30T18:00:00.000Z"},"updated_at":{"$date":"2025-03-30T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000720","customer_id":"CUST_0024","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-03-31T19:00:00.000Z"},"updated_at":{"$date":"2025-03-31T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000721","customer_id":"CUST_0041","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000722","customer_id":"CUST_0058","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000723","customer_id":"CUST_0075","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000724","customer_id":"CUST_0092","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000725","customer_id":"CUST_0109","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000726","customer_id":"CUST_0126","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000727","customer_id":"CUST_0143","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000728","customer_id":"CUST_0160","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000729","customer_id":"CUST_0177","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000730","customer_id":"CUST_0194","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000731","customer_id":"CUST_0011","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000732","customer_id":"CUST_0028","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000733","customer_id":"CUST_0045","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000734","customer_id":"CUST_0062","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000735","customer_id":"CUST_0079","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000736","customer_id":"CUST_0096","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000737","customer_id":"CUST_0113","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000738","customer_id":"CUST_0130","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000739","customer_id":"CUST_0147","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000740","customer_id":"CUST_0164","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000741","customer_id":"CUST_0181","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-01-21T00:00:00.000Z"},"updated_at":{"$date":"2025-01-21T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000742","customer_id":"CUST_0198","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-01-22T01:00:00.000Z"},"updated_at":{"$date":"2025-01-22T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000743","customer_id":"CUST_0015","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-01-23T02:00:00.000Z"},"updated_at":{"$date":"2025-01-23T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000744","customer_id":"CUST_0032","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-01-24T03:00:00.000Z"},"updated_at":{"$date":"2025-01-24T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000745","customer_id":"CUST_0049","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-01-25T04:00:00.000Z"},"updated_at":{"$date":"2025-01-25T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000746","customer_id":"CUST_0066","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-01-26T05:00:00.000Z"},"updated_at":{"$date":"2025-01-26T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000747","customer_id":"CUST_0083","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-01-27T06:00:00.000Z"},"updated_at":{"$date":"2025-01-27T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000748","customer_id":"CUST_0100","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-01-28T07:00:00.000Z"},"updated_at":{"$date":"2025-01-28T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000749","customer_id":"CUST_0117","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-01-29T08:00:00.000Z"},"updated_at":{"$date":"2025-01-29T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000750","customer_id":"CUST_0134","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-01-30T09:00:00.000Z"},"updated_at":{"$date":"2025-01-30T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000751","customer_id":"CUST_0151","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-01-31T10:00:00.000Z"},"updated_at":{"$date":"2025-01-31T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000752","customer_id":"CUST_0168","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-02-01T11:00:00.000Z"},"updated_at":{"$date":"2025-02-01T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000753","customer_id":"CUST_0185","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-02-02T12:00:00.000Z"},"updated_at":{"$date":"2025-02-02T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000754","customer_id":"CUST_0002","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-02-03T13:00:00.000Z"},"updated_at":{"$date":"2025-02-03T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000755","customer_id":"CUST_0019","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-02-04T14:00:00.000Z"},"updated_at":{"$date":"2025-02-04T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000756","customer_id":"CUST_0036","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-02-05T15:00:00.000Z"},"updated_at":{"$date":"2025-02-05T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000757","customer_id":"CUST_0053","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-02-06T16:00:00.000Z"},"updated_at":{"$date":"2025-02-06T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000758","customer_id":"CUST_0070","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-02-07T17:00:00.000Z"},"updated_at":{"$date":"2025-02-07T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000759","customer_id":"CUST_0087","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-02-08T18:00:00.000Z"},"updated_at":{"$date":"2025-02-08T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000760","customer_id":"CUST_0104","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-02-09T19:00:00.000Z"},"updated_at":{"$date":"2025-02-09T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000761","customer_id":"CUST_0121","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-02-10T00:00:00.000Z"},"updated_at":{"$date":"2025-02-10T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000762","customer_id":"CUST_0138","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-02-11T01:00:00.000Z"},"updated_at":{"$date":"2025-02-11T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000763","customer_id":"CUST_0155","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-02-12T02:00:00.000Z"},"updated_at":{"$date":"2025-02-12T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000764","customer_id":"CUST_0172","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-02-13T03:00:00.000Z"},"updated_at":{"$date":"2025-02-13T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000765","customer_id":"CUST_0189","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-02-14T04:00:00.000Z"},"updated_at":{"$date":"2025-02-14T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000766","customer_id":"CUST_0006","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-02-15T05:00:00.000Z"},"updated_at":{"$date":"2025-02-15T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000767","customer_id":"CUST_0023","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-02-16T06:00:00.000Z"},"updated_at":{"$date":"2025-02-16T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000768","customer_id":"CUST_0040","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-02-17T07:00:00.000Z"},"updated_at":{"$date":"2025-02-17T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000769","customer_id":"CUST_0057","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-02-18T08:00:00.000Z"},"updated_at":{"$date":"2025-02-18T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000770","customer_id":"CUST_0074","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-02-19T09:00:00.000Z"},"updated_at":{"$date":"2025-02-19T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000771","customer_id":"CUST_0091","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-02-20T10:00:00.000Z"},"updated_at":{"$date":"2025-02-20T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000772","customer_id":"CUST_0108","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-02-21T11:00:00.000Z"},"updated_at":{"$date":"2025-02-21T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000773","customer_id":"CUST_0125","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-02-22T12:00:00.000Z"},"updated_at":{"$date":"2025-02-22T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000774","customer_id":"CUST_0142","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-02-23T13:00:00.000Z"},"updated_at":{"$date":"2025-02-23T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000775","customer_id":"CUST_0159","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-02-24T14:00:00.000Z"},"updated_at":{"$date":"2025-02-24T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000776","customer_id":"CUST_0176","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-02-25T15:00:00.000Z"},"updated_at":{"$date":"2025-02-25T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000777","customer_id":"CUST_0193","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-02-26T16:00:00.000Z"},"updated_at":{"$date":"2025-02-26T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000778","customer_id":"CUST_0010","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-02-27T17:00:00.000Z"},"updated_at":{"$date":"2025-02-27T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000779","customer_id":"CUST_0027","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-02-28T18:00:00.000Z"},"updated_at":{"$date":"2025-02-28T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000780","customer_id":"CUST_0044","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-03-01T19:00:00.000Z"},"updated_at":{"$date":"2025-03-01T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000781","customer_id":"CUST_0061","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-03-02T00:00:00.000Z"},"updated_at":{"$date":"2025-03-02T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000782","customer_id":"CUST_0078","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-03-03T01:00:00.000Z"},"updated_at":{"$date":"2025-03-03T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000783","customer_id":"CUST_0095","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-03-04T02:00:00.000Z"},"updated_at":{"$date":"2025-03-04T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000784","customer_id":"CUST_0112","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-03-05T03:00:00.000Z"},"updated_at":{"$date":"2025-03-05T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000785","customer_id":"CUST_0129","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-03-06T04:00:00.000Z"},"updated_at":{"$date":"2025-03-06T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000786","customer_id":"CUST_0146","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-03-07T05:00:00.000Z"},"updated_at":{"$date":"2025-03-07T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000787","customer_id":"CUST_0163","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-03-08T06:00:00.000Z"},"updated_at":{"$date":"2025-03-08T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000788","customer_id":"CUST_0180","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-03-09T07:00:00.000Z"},"updated_at":{"$date":"2025-03-09T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000789","customer_id":"CUST_0197","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-03-10T08:00:00.000Z"},"updated_at":{"$date":"2025-03-10T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000790","customer_id":"CUST_0014","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-03-11T09:00:00.000Z"},"updated_at":{"$date":"2025-03-11T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000791","customer_id":"CUST_0031","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-03-12T10:00:00.000Z"},"updated_at":{"$date":"2025-03-12T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000792","customer_id":"CUST_0048","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-03-13T11:00:00.000Z"},"updated_at":{"$date":"2025-03-13T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000793","customer_id":"CUST_0065","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-03-14T12:00:00.000Z"},"updated_at":{"$date":"2025-03-14T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000794","customer_id":"CUST_0082","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-03-15T13:00:00.000Z"},"updated_at":{"$date":"2025-03-15T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000795","customer_id":"CUST_0099","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-03-16T14:00:00.000Z"},"updated_at":{"$date":"2025-03-16T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000796","customer_id":"CUST_0116","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-03-17T15:00:00.000Z"},"updated_at":{"$date":"2025-03-17T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000797","customer_id":"CUST_0133","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-03-18T16:00:00.000Z"},"updated_at":{"$date":"2025-03-18T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000798","customer_id":"CUST_0150","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-03-19T17:00:00.000Z"},"updated_at":{"$date":"2025-03-19T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000799","customer_id":"CUST_0167","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-03-20T18:00:00.000Z"},"updated_at":{"$date":"2025-03-20T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000800","customer_id":"CUST_0184","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-03-21T19:00:00.000Z"},"updated_at":{"$date":"2025-03-21T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000801","customer_id":"CUST_0001","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-03-22T00:00:00.000Z"},"updated_at":{"$date":"2025-03-22T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000802","customer_id":"CUST_0018","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-03-23T01:00:00.000Z"},"updated_at":{"$date":"2025-03-23T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000803","customer_id":"CUST_0035","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-03-24T02:00:00.000Z"},"updated_at":{"$date":"2025-03-24T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000804","customer_id":"CUST_0052","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-03-25T03:00:00.000Z"},"updated_at":{"$date":"2025-03-25T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000805","customer_id":"CUST_0069","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-03-26T04:00:00.000Z"},"updated_at":{"$date":"2025-03-26T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000806","customer_id":"CUST_0086","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-03-27T05:00:00.000Z"},"updated_at":{"$date":"2025-03-27T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000807","customer_id":"CUST_0103","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-03-28T06:00:00.000Z"},"updated_at":{"$date":"2025-03-28T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000808","customer_id":"CUST_0120","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-03-29T07:00:00.000Z"},"updated_at":{"$date":"2025-03-29T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000809","customer_id":"CUST_0137","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-03-30T08:00:00.000Z"},"updated_at":{"$date":"2025-03-30T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000810","customer_id":"CUST_0154","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-03-31T09:00:00.000Z"},"updated_at":{"$date":"2025-03-31T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000811","customer_id":"CUST_0171","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-01-01T10:00:00.000Z"},"updated_at":{"$date":"2025-01-01T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000812","customer_id":"CUST_0188","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-01-02T11:00:00.000Z"},"updated_at":{"$date":"2025-01-02T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000813","customer_id":"CUST_0005","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-01-03T12:00:00.000Z"},"updated_at":{"$date":"2025-01-03T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000814","customer_id":"CUST_0022","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-01-04T13:00:00.000Z"},"updated_at":{"$date":"2025-01-04T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000815","customer_id":"CUST_0039","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-01-05T14:00:00.000Z"},"updated_at":{"$date":"2025-01-05T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000816","customer_id":"CUST_0056","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-01-06T15:00:00.000Z"},"updated_at":{"$date":"2025-01-06T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000817","customer_id":"CUST_0073","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-01-07T16:00:00.000Z"},"updated_at":{"$date":"2025-01-07T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000818","customer_id":"CUST_0090","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-01-08T17:00:00.000Z"},"updated_at":{"$date":"2025-01-08T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000819","customer_id":"CUST_0107","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-01-09T18:00:00.000Z"},"updated_at":{"$date":"2025-01-09T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000820","customer_id":"CUST_0124","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-01-10T19:00:00.000Z"},"updated_at":{"$date":"2025-01-10T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000821","customer_id":"CUST_0141","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-01-11T00:00:00.000Z"},"updated_at":{"$date":"2025-01-11T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000822","customer_id":"CUST_0158","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-01-12T01:00:00.000Z"},"updated_at":{"$date":"2025-01-12T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000823","customer_id":"CUST_0175","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-01-13T02:00:00.000Z"},"updated_at":{"$date":"2025-01-13T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000824","customer_id":"CUST_0192","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-01-14T03:00:00.000Z"},"updated_at":{"$date":"2025-01-14T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000825","customer_id":"CUST_0009","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-01-15T04:00:00.000Z"},"updated_at":{"$date":"2025-01-15T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000826","customer_id":"CUST_0026","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-01-16T05:00:00.000Z"},"updated_at":{"$date":"2025-01-16T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000827","customer_id":"CUST_0043","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-01-17T06:00:00.000Z"},"updated_at":{"$date":"2025-01-17T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000828","customer_id":"CUST_0060","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-01-18T07:00:00.000Z"},"updated_at":{"$date":"2025-01-18T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000829","customer_id":"CUST_0077","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-01-19T08:00:00.000Z"},"updated_at":{"$date":"2025-01-19T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000830","customer_id":"CUST_0094","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-01-20T09:00:00.000Z"},"updated_at":{"$date":"2025-01-20T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000831","customer_id":"CUST_0111","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-01-21T10:00:00.000Z"},"updated_at":{"$date":"2025-01-21T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000832","customer_id":"CUST_0128","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-01-22T11:00:00.000Z"},"updated_at":{"$date":"2025-01-22T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000833","customer_id":"CUST_0145","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-01-23T12:00:00.000Z"},"updated_at":{"$date":"2025-01-23T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000834","customer_id":"CUST_0162","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-01-24T13:00:00.000Z"},"updated_at":{"$date":"2025-01-24T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000835","customer_id":"CUST_0179","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-01-25T14:00:00.000Z"},"updated_at":{"$date":"2025-01-25T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000836","customer_id":"CUST_0196","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-01-26T15:00:00.000Z"},"updated_at":{"$date":"2025-01-26T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000837","customer_id":"CUST_0013","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-01-27T16:00:00.000Z"},"updated_at":{"$date":"2025-01-27T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000838","customer_id":"CUST_0030","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-01-28T17:00:00.000Z"},"updated_at":{"$date":"2025-01-28T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000839","customer_id":"CUST_0047","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-01-29T18:00:00.000Z"},"updated_at":{"$date":"2025-01-29T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000840","customer_id":"CUST_0064","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-01-30T19:00:00.000Z"},"updated_at":{"$date":"2025-01-30T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000841","customer_id":"CUST_0081","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-01-31T00:00:00.000Z"},"updated_at":{"$date":"2025-01-31T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000842","customer_id":"CUST_0098","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-02-01T01:00:00.000Z"},"updated_at":{"$date":"2025-02-01T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000843","customer_id":"CUST_0115","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-02-02T02:00:00.000Z"},"updated_at":{"$date":"2025-02-02T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000844","customer_id":"CUST_0132","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-02-03T03:00:00.000Z"},"updated_at":{"$date":"2025-02-03T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000845","customer_id":"CUST_0149","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-02-04T04:00:00.000Z"},"updated_at":{"$date":"2025-02-04T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000846","customer_id":"CUST_0166","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-02-05T05:00:00.000Z"},"updated_at":{"$date":"2025-02-05T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000847","customer_id":"CUST_0183","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-02-06T06:00:00.000Z"},"updated_at":{"$date":"2025-02-06T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000848","customer_id":"CUST_0200","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-02-07T07:00:00.000Z"},"updated_at":{"$date":"2025-02-07T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000849","customer_id":"CUST_0017","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-02-08T08:00:00.000Z"},"updated_at":{"$date":"2025-02-08T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000850","customer_id":"CUST_0034","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-02-09T09:00:00.000Z"},"updated_at":{"$date":"2025-02-09T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000851","customer_id":"CUST_0051","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-02-10T10:00:00.000Z"},"updated_at":{"$date":"2025-02-10T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000852","customer_id":"CUST_0068","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-02-11T11:00:00.000Z"},"updated_at":{"$date":"2025-02-11T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000853","customer_id":"CUST_0085","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-02-12T12:00:00.000Z"},"updated_at":{"$date":"2025-02-12T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000854","customer_id":"CUST_0102","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-02-13T13:00:00.000Z"},"updated_at":{"$date":"2025-02-13T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000855","customer_id":"CUST_0119","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-02-14T14:00:00.000Z"},"updated_at":{"$date":"2025-02-14T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000856","customer_id":"CUST_0136","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-02-15T15:00:00.000Z"},"updated_at":{"$date":"2025-02-15T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000857","customer_id":"CUST_0153","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-02-16T16:00:00.000Z"},"updated_at":{"$date":"2025-02-16T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000858","customer_id":"CUST_0170","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-02-17T17:00:00.000Z"},"updated_at":{"$date":"2025-02-17T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000859","customer_id":"CUST_0187","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-02-18T18:00:00.000Z"},"updated_at":{"$date":"2025-02-18T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000860","customer_id":"CUST_0004","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-02-19T19:00:00.000Z"},"updated_at":{"$date":"2025-02-19T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000861","customer_id":"CUST_0021","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-02-20T00:00:00.000Z"},"updated_at":{"$date":"2025-02-20T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000862","customer_id":"CUST_0038","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-02-21T01:00:00.000Z"},"updated_at":{"$date":"2025-02-21T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000863","customer_id":"CUST_0055","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-02-22T02:00:00.000Z"},"updated_at":{"$date":"2025-02-22T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000864","customer_id":"CUST_0072","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-02-23T03:00:00.000Z"},"updated_at":{"$date":"2025-02-23T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000865","customer_id":"CUST_0089","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-02-24T04:00:00.000Z"},"updated_at":{"$date":"2025-02-24T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000866","customer_id":"CUST_0106","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-02-25T05:00:00.000Z"},"updated_at":{"$date":"2025-02-25T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000867","customer_id":"CUST_0123","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-02-26T06:00:00.000Z"},"updated_at":{"$date":"2025-02-26T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000868","customer_id":"CUST_0140","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-02-27T07:00:00.000Z"},"updated_at":{"$date":"2025-02-27T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000869","customer_id":"CUST_0157","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-02-28T08:00:00.000Z"},"updated_at":{"$date":"2025-02-28T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000870","customer_id":"CUST_0174","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-03-01T09:00:00.000Z"},"updated_at":{"$date":"2025-03-01T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000871","customer_id":"CUST_0191","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-03-02T10:00:00.000Z"},"updated_at":{"$date":"2025-03-02T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000872","customer_id":"CUST_0008","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-03-03T11:00:00.000Z"},"updated_at":{"$date":"2025-03-03T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000873","customer_id":"CUST_0025","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-03-04T12:00:00.000Z"},"updated_at":{"$date":"2025-03-04T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000874","customer_id":"CUST_0042","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-03-05T13:00:00.000Z"},"updated_at":{"$date":"2025-03-05T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000875","customer_id":"CUST_0059","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-03-06T14:00:00.000Z"},"updated_at":{"$date":"2025-03-06T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000876","customer_id":"CUST_0076","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-03-07T15:00:00.000Z"},"updated_at":{"$date":"2025-03-07T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000877","customer_id":"CUST_0093","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-03-08T16:00:00.000Z"},"updated_at":{"$date":"2025-03-08T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000878","customer_id":"CUST_0110","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-03-09T17:00:00.000Z"},"updated_at":{"$date":"2025-03-09T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000879","customer_id":"CUST_0127","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-03-10T18:00:00.000Z"},"updated_at":{"$date":"2025-03-10T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000880","customer_id":"CUST_0144","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-03-11T19:00:00.000Z"},"updated_at":{"$date":"2025-03-11T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000881","customer_id":"CUST_0161","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-03-12T00:00:00.000Z"},"updated_at":{"$date":"2025-03-12T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000882","customer_id":"CUST_0178","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-03-13T01:00:00.000Z"},"updated_at":{"$date":"2025-03-13T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000883","customer_id":"CUST_0195","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-03-14T02:00:00.000Z"},"updated_at":{"$date":"2025-03-14T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000884","customer_id":"CUST_0012","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-03-15T03:00:00.000Z"},"updated_at":{"$date":"2025-03-15T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000885","customer_id":"CUST_0029","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-03-16T04:00:00.000Z"},"updated_at":{"$date":"2025-03-16T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000886","customer_id":"CUST_0046","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-03-17T05:00:00.000Z"},"updated_at":{"$date":"2025-03-17T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000887","customer_id":"CUST_0063","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-03-18T06:00:00.000Z"},"updated_at":{"$date":"2025-03-18T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000888","customer_id":"CUST_0080","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-03-19T07:00:00.000Z"},"updated_at":{"$date":"2025-03-19T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000889","customer_id":"CUST_0097","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-03-20T08:00:00.000Z"},"updated_at":{"$date":"2025-03-20T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000890","customer_id":"CUST_0114","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-03-21T09:00:00.000Z"},"updated_at":{"$date":"2025-03-21T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000891","customer_id":"CUST_0131","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-03-22T10:00:00.000Z"},"updated_at":{"$date":"2025-03-22T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000892","customer_id":"CUST_0148","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-03-23T11:00:00.000Z"},"updated_at":{"$date":"2025-03-23T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000893","customer_id":"CUST_0165","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-03-24T12:00:00.000Z"},"updated_at":{"$date":"2025-03-24T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000894","customer_id":"CUST_0182","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-03-25T13:00:00.000Z"},"updated_at":{"$date":"2025-03-25T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000895","customer_id":"CUST_0199","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-03-26T14:00:00.000Z"},"updated_at":{"$date":"2025-03-26T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000896","customer_id":"CUST_0016","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-03-27T15:00:00.000Z"},"updated_at":{"$date":"2025-03-27T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000897","customer_id":"CUST_0033","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-03-28T16:00:00.000Z"},"updated_at":{"$date":"2025-03-28T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000898","customer_id":"CUST_0050","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-03-29T17:00:00.000Z"},"updated_at":{"$date":"2025-03-29T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000899","customer_id":"CUST_0067","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-03-30T18:00:00.000Z"},"updated_at":{"$date":"2025-03-30T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000900","customer_id":"CUST_0084","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-03-31T19:00:00.000Z"},"updated_at":{"$date":"2025-03-31T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000901","customer_id":"CUST_0101","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000902","customer_id":"CUST_0118","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000903","customer_id":"CUST_0135","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000904","customer_id":"CUST_0152","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000905","customer_id":"CUST_0169","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000906","customer_id":"CUST_0186","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000907","customer_id":"CUST_0003","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000908","customer_id":"CUST_0020","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000909","customer_id":"CUST_0037","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000910","customer_id":"CUST_0054","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000911","customer_id":"CUST_0071","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000912","customer_id":"CUST_0088","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000913","customer_id":"CUST_0105","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000914","customer_id":"CUST_0122","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000915","customer_id":"CUST_0139","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000916","customer_id":"CUST_0156","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000917","customer_id":"CUST_0173","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000918","customer_id":"CUST_0190","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000919","customer_id":"CUST_0007","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000920","customer_id":"CUST_0024","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000921","customer_id":"CUST_0041","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-01-21T00:00:00.000Z"},"updated_at":{"$date":"2025-01-21T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000922","customer_id":"CUST_0058","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-01-22T01:00:00.000Z"},"updated_at":{"$date":"2025-01-22T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000923","customer_id":"CUST_0075","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-01-23T02:00:00.000Z"},"updated_at":{"$date":"2025-01-23T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000924","customer_id":"CUST_0092","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-01-24T03:00:00.000Z"},"updated_at":{"$date":"2025-01-24T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000925","customer_id":"CUST_0109","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-01-25T04:00:00.000Z"},"updated_at":{"$date":"2025-01-25T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000926","customer_id":"CUST_0126","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-01-26T05:00:00.000Z"},"updated_at":{"$date":"2025-01-26T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000927","customer_id":"CUST_0143","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-01-27T06:00:00.000Z"},"updated_at":{"$date":"2025-01-27T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000928","customer_id":"CUST_0160","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-01-28T07:00:00.000Z"},"updated_at":{"$date":"2025-01-28T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000929","customer_id":"CUST_0177","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-01-29T08:00:00.000Z"},"updated_at":{"$date":"2025-01-29T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000930","customer_id":"CUST_0194","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-01-30T09:00:00.000Z"},"updated_at":{"$date":"2025-01-30T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000931","customer_id":"CUST_0011","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-01-31T10:00:00.000Z"},"updated_at":{"$date":"2025-01-31T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000932","customer_id":"CUST_0028","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-02-01T11:00:00.000Z"},"updated_at":{"$date":"2025-02-01T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000933","customer_id":"CUST_0045","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-02-02T12:00:00.000Z"},"updated_at":{"$date":"2025-02-02T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000934","customer_id":"CUST_0062","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-02-03T13:00:00.000Z"},"updated_at":{"$date":"2025-02-03T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000935","customer_id":"CUST_0079","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-02-04T14:00:00.000Z"},"updated_at":{"$date":"2025-02-04T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000936","customer_id":"CUST_0096","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-02-05T15:00:00.000Z"},"updated_at":{"$date":"2025-02-05T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000937","customer_id":"CUST_0113","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-02-06T16:00:00.000Z"},"updated_at":{"$date":"2025-02-06T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000938","customer_id":"CUST_0130","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-02-07T17:00:00.000Z"},"updated_at":{"$date":"2025-02-07T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000939","customer_id":"CUST_0147","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-02-08T18:00:00.000Z"},"updated_at":{"$date":"2025-02-08T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000940","customer_id":"CUST_0164","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-02-09T19:00:00.000Z"},"updated_at":{"$date":"2025-02-09T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000941","customer_id":"CUST_0181","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-02-10T00:00:00.000Z"},"updated_at":{"$date":"2025-02-10T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000942","customer_id":"CUST_0198","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-02-11T01:00:00.000Z"},"updated_at":{"$date":"2025-02-11T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000943","customer_id":"CUST_0015","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-02-12T02:00:00.000Z"},"updated_at":{"$date":"2025-02-12T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000944","customer_id":"CUST_0032","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-02-13T03:00:00.000Z"},"updated_at":{"$date":"2025-02-13T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000945","customer_id":"CUST_0049","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-02-14T04:00:00.000Z"},"updated_at":{"$date":"2025-02-14T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000946","customer_id":"CUST_0066","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-02-15T05:00:00.000Z"},"updated_at":{"$date":"2025-02-15T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000947","customer_id":"CUST_0083","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-02-16T06:00:00.000Z"},"updated_at":{"$date":"2025-02-16T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000948","customer_id":"CUST_0100","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-02-17T07:00:00.000Z"},"updated_at":{"$date":"2025-02-17T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000949","customer_id":"CUST_0117","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-02-18T08:00:00.000Z"},"updated_at":{"$date":"2025-02-18T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000950","customer_id":"CUST_0134","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-02-19T09:00:00.000Z"},"updated_at":{"$date":"2025-02-19T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000951","customer_id":"CUST_0151","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-02-20T10:00:00.000Z"},"updated_at":{"$date":"2025-02-20T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000952","customer_id":"CUST_0168","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-02-21T11:00:00.000Z"},"updated_at":{"$date":"2025-02-21T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000953","customer_id":"CUST_0185","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-02-22T12:00:00.000Z"},"updated_at":{"$date":"2025-02-22T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000954","customer_id":"CUST_0002","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-02-23T13:00:00.000Z"},"updated_at":{"$date":"2025-02-23T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000955","customer_id":"CUST_0019","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-02-24T14:00:00.000Z"},"updated_at":{"$date":"2025-02-24T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000956","customer_id":"CUST_0036","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-02-25T15:00:00.000Z"},"updated_at":{"$date":"2025-02-25T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000957","customer_id":"CUST_0053","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-02-26T16:00:00.000Z"},"updated_at":{"$date":"2025-02-26T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000958","customer_id":"CUST_0070","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-02-27T17:00:00.000Z"},"updated_at":{"$date":"2025-02-27T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000959","customer_id":"CUST_0087","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-02-28T18:00:00.000Z"},"updated_at":{"$date":"2025-02-28T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000960","customer_id":"CUST_0104","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-03-01T19:00:00.000Z"},"updated_at":{"$date":"2025-03-01T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000961","customer_id":"CUST_0121","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-03-02T00:00:00.000Z"},"updated_at":{"$date":"2025-03-02T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000962","customer_id":"CUST_0138","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-03-03T01:00:00.000Z"},"updated_at":{"$date":"2025-03-03T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000963","customer_id":"CUST_0155","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-03-04T02:00:00.000Z"},"updated_at":{"$date":"2025-03-04T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000964","customer_id":"CUST_0172","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-03-05T03:00:00.000Z"},"updated_at":{"$date":"2025-03-05T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000965","customer_id":"CUST_0189","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-03-06T04:00:00.000Z"},"updated_at":{"$date":"2025-03-06T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000966","customer_id":"CUST_0006","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-03-07T05:00:00.000Z"},"updated_at":{"$date":"2025-03-07T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000967","customer_id":"CUST_0023","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-03-08T06:00:00.000Z"},"updated_at":{"$date":"2025-03-08T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000968","customer_id":"CUST_0040","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-03-09T07:00:00.000Z"},"updated_at":{"$date":"2025-03-09T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000969","customer_id":"CUST_0057","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-03-10T08:00:00.000Z"},"updated_at":{"$date":"2025-03-10T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000970","customer_id":"CUST_0074","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-03-11T09:00:00.000Z"},"updated_at":{"$date":"2025-03-11T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000971","customer_id":"CUST_0091","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-03-12T10:00:00.000Z"},"updated_at":{"$date":"2025-03-12T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000972","customer_id":"CUST_0108","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-03-13T11:00:00.000Z"},"updated_at":{"$date":"2025-03-13T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000973","customer_id":"CUST_0125","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-03-14T12:00:00.000Z"},"updated_at":{"$date":"2025-03-14T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000974","customer_id":"CUST_0142","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-03-15T13:00:00.000Z"},"updated_at":{"$date":"2025-03-15T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000975","customer_id":"CUST_0159","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-03-16T14:00:00.000Z"},"updated_at":{"$date":"2025-03-16T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000976","customer_id":"CUST_0176","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-03-17T15:00:00.000Z"},"updated_at":{"$date":"2025-03-17T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000977","customer_id":"CUST_0193","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-03-18T16:00:00.000Z"},"updated_at":{"$date":"2025-03-18T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000978","customer_id":"CUST_0010","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-03-19T17:00:00.000Z"},"updated_at":{"$date":"2025-03-19T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000979","customer_id":"CUST_0027","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-03-20T18:00:00.000Z"},"updated_at":{"$date":"2025-03-20T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000980","customer_id":"CUST_0044","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-03-21T19:00:00.000Z"},"updated_at":{"$date":"2025-03-21T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000981","customer_id":"CUST_0061","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-03-22T00:00:00.000Z"},"updated_at":{"$date":"2025-03-22T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000982","customer_id":"CUST_0078","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-03-23T01:00:00.000Z"},"updated_at":{"$date":"2025-03-23T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000983","customer_id":"CUST_0095","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-03-24T02:00:00.000Z"},"updated_at":{"$date":"2025-03-24T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000984","customer_id":"CUST_0112","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-03-25T03:00:00.000Z"},"updated_at":{"$date":"2025-03-25T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000985","customer_id":"CUST_0129","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-03-26T04:00:00.000Z"},"updated_at":{"$date":"2025-03-26T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000986","customer_id":"CUST_0146","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-03-27T05:00:00.000Z"},"updated_at":{"$date":"2025-03-27T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000987","customer_id":"CUST_0163","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-03-28T06:00:00.000Z"},"updated_at":{"$date":"2025-03-28T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000988","customer_id":"CUST_0180","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-03-29T07:00:00.000Z"},"updated_at":{"$date":"2025-03-29T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000989","customer_id":"CUST_0197","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-03-30T08:00:00.000Z"},"updated_at":{"$date":"2025-03-30T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000990","customer_id":"CUST_0014","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-03-31T09:00:00.000Z"},"updated_at":{"$date":"2025-03-31T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000991","customer_id":"CUST_0031","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-01-01T10:00:00.000Z"},"updated_at":{"$date":"2025-01-01T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000992","customer_id":"CUST_0048","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-01-02T11:00:00.000Z"},"updated_at":{"$date":"2025-01-02T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000993","customer_id":"CUST_0065","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-01-03T12:00:00.000Z"},"updated_at":{"$date":"2025-01-03T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_000994","customer_id":"CUST_0082","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-01-04T13:00:00.000Z"},"updated_at":{"$date":"2025-01-04T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_000995","customer_id":"CUST_0099","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-01-05T14:00:00.000Z"},"updated_at":{"$date":"2025-01-05T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_000996","customer_id":"CUST_0116","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-01-06T15:00:00.000Z"},"updated_at":{"$date":"2025-01-06T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_000997","customer_id":"CUST_0133","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-01-07T16:00:00.000Z"},"updated_at":{"$date":"2025-01-07T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_000998","customer_id":"CUST_0150","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-01-08T17:00:00.000Z"},"updated_at":{"$date":"2025-01-08T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_000999","customer_id":"CUST_0167","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-01-09T18:00:00.000Z"},"updated_at":{"$date":"2025-01-09T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001000","customer_id":"CUST_0184","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-01-10T19:00:00.000Z"},"updated_at":{"$date":"2025-01-10T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001001","customer_id":"CUST_0001","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-01-11T00:00:00.000Z"},"updated_at":{"$date":"2025-01-11T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001002","customer_id":"CUST_0018","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-01-12T01:00:00.000Z"},"updated_at":{"$date":"2025-01-12T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001003","customer_id":"CUST_0035","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-01-13T02:00:00.000Z"},"updated_at":{"$date":"2025-01-13T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001004","customer_id":"CUST_0052","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-01-14T03:00:00.000Z"},"updated_at":{"$date":"2025-01-14T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001005","customer_id":"CUST_0069","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-01-15T04:00:00.000Z"},"updated_at":{"$date":"2025-01-15T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001006","customer_id":"CUST_0086","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-01-16T05:00:00.000Z"},"updated_at":{"$date":"2025-01-16T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001007","customer_id":"CUST_0103","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-01-17T06:00:00.000Z"},"updated_at":{"$date":"2025-01-17T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001008","customer_id":"CUST_0120","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-01-18T07:00:00.000Z"},"updated_at":{"$date":"2025-01-18T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001009","customer_id":"CUST_0137","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-01-19T08:00:00.000Z"},"updated_at":{"$date":"2025-01-19T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001010","customer_id":"CUST_0154","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-01-20T09:00:00.000Z"},"updated_at":{"$date":"2025-01-20T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001011","customer_id":"CUST_0171","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-01-21T10:00:00.000Z"},"updated_at":{"$date":"2025-01-21T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001012","customer_id":"CUST_0188","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-01-22T11:00:00.000Z"},"updated_at":{"$date":"2025-01-22T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001013","customer_id":"CUST_0005","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-01-23T12:00:00.000Z"},"updated_at":{"$date":"2025-01-23T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001014","customer_id":"CUST_0022","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-01-24T13:00:00.000Z"},"updated_at":{"$date":"2025-01-24T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001015","customer_id":"CUST_0039","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-01-25T14:00:00.000Z"},"updated_at":{"$date":"2025-01-25T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001016","customer_id":"CUST_0056","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-01-26T15:00:00.000Z"},"updated_at":{"$date":"2025-01-26T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001017","customer_id":"CUST_0073","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-01-27T16:00:00.000Z"},"updated_at":{"$date":"2025-01-27T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001018","customer_id":"CUST_0090","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-01-28T17:00:00.000Z"},"updated_at":{"$date":"2025-01-28T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001019","customer_id":"CUST_0107","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-01-29T18:00:00.000Z"},"updated_at":{"$date":"2025-01-29T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001020","customer_id":"CUST_0124","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-01-30T19:00:00.000Z"},"updated_at":{"$date":"2025-01-30T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001021","customer_id":"CUST_0141","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-01-31T00:00:00.000Z"},"updated_at":{"$date":"2025-01-31T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001022","customer_id":"CUST_0158","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-02-01T01:00:00.000Z"},"updated_at":{"$date":"2025-02-01T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001023","customer_id":"CUST_0175","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-02-02T02:00:00.000Z"},"updated_at":{"$date":"2025-02-02T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001024","customer_id":"CUST_0192","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-02-03T03:00:00.000Z"},"updated_at":{"$date":"2025-02-03T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001025","customer_id":"CUST_0009","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-02-04T04:00:00.000Z"},"updated_at":{"$date":"2025-02-04T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001026","customer_id":"CUST_0026","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-02-05T05:00:00.000Z"},"updated_at":{"$date":"2025-02-05T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001027","customer_id":"CUST_0043","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-02-06T06:00:00.000Z"},"updated_at":{"$date":"2025-02-06T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001028","customer_id":"CUST_0060","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-02-07T07:00:00.000Z"},"updated_at":{"$date":"2025-02-07T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001029","customer_id":"CUST_0077","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-02-08T08:00:00.000Z"},"updated_at":{"$date":"2025-02-08T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001030","customer_id":"CUST_0094","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-02-09T09:00:00.000Z"},"updated_at":{"$date":"2025-02-09T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001031","customer_id":"CUST_0111","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-02-10T10:00:00.000Z"},"updated_at":{"$date":"2025-02-10T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001032","customer_id":"CUST_0128","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-02-11T11:00:00.000Z"},"updated_at":{"$date":"2025-02-11T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001033","customer_id":"CUST_0145","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-02-12T12:00:00.000Z"},"updated_at":{"$date":"2025-02-12T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001034","customer_id":"CUST_0162","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-02-13T13:00:00.000Z"},"updated_at":{"$date":"2025-02-13T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001035","customer_id":"CUST_0179","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-02-14T14:00:00.000Z"},"updated_at":{"$date":"2025-02-14T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001036","customer_id":"CUST_0196","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-02-15T15:00:00.000Z"},"updated_at":{"$date":"2025-02-15T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001037","customer_id":"CUST_0013","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-02-16T16:00:00.000Z"},"updated_at":{"$date":"2025-02-16T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001038","customer_id":"CUST_0030","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-02-17T17:00:00.000Z"},"updated_at":{"$date":"2025-02-17T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001039","customer_id":"CUST_0047","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-02-18T18:00:00.000Z"},"updated_at":{"$date":"2025-02-18T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001040","customer_id":"CUST_0064","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-02-19T19:00:00.000Z"},"updated_at":{"$date":"2025-02-19T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001041","customer_id":"CUST_0081","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-02-20T00:00:00.000Z"},"updated_at":{"$date":"2025-02-20T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001042","customer_id":"CUST_0098","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-02-21T01:00:00.000Z"},"updated_at":{"$date":"2025-02-21T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001043","customer_id":"CUST_0115","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-02-22T02:00:00.000Z"},"updated_at":{"$date":"2025-02-22T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001044","customer_id":"CUST_0132","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-02-23T03:00:00.000Z"},"updated_at":{"$date":"2025-02-23T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001045","customer_id":"CUST_0149","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-02-24T04:00:00.000Z"},"updated_at":{"$date":"2025-02-24T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001046","customer_id":"CUST_0166","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-02-25T05:00:00.000Z"},"updated_at":{"$date":"2025-02-25T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001047","customer_id":"CUST_0183","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-02-26T06:00:00.000Z"},"updated_at":{"$date":"2025-02-26T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001048","customer_id":"CUST_0200","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-02-27T07:00:00.000Z"},"updated_at":{"$date":"2025-02-27T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001049","customer_id":"CUST_0017","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-02-28T08:00:00.000Z"},"updated_at":{"$date":"2025-02-28T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001050","customer_id":"CUST_0034","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-03-01T09:00:00.000Z"},"updated_at":{"$date":"2025-03-01T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001051","customer_id":"CUST_0051","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-03-02T10:00:00.000Z"},"updated_at":{"$date":"2025-03-02T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001052","customer_id":"CUST_0068","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-03-03T11:00:00.000Z"},"updated_at":{"$date":"2025-03-03T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001053","customer_id":"CUST_0085","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-03-04T12:00:00.000Z"},"updated_at":{"$date":"2025-03-04T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001054","customer_id":"CUST_0102","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-03-05T13:00:00.000Z"},"updated_at":{"$date":"2025-03-05T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001055","customer_id":"CUST_0119","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-03-06T14:00:00.000Z"},"updated_at":{"$date":"2025-03-06T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001056","customer_id":"CUST_0136","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-03-07T15:00:00.000Z"},"updated_at":{"$date":"2025-03-07T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001057","customer_id":"CUST_0153","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-03-08T16:00:00.000Z"},"updated_at":{"$date":"2025-03-08T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001058","customer_id":"CUST_0170","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-03-09T17:00:00.000Z"},"updated_at":{"$date":"2025-03-09T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001059","customer_id":"CUST_0187","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-03-10T18:00:00.000Z"},"updated_at":{"$date":"2025-03-10T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001060","customer_id":"CUST_0004","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-03-11T19:00:00.000Z"},"updated_at":{"$date":"2025-03-11T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001061","customer_id":"CUST_0021","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-03-12T00:00:00.000Z"},"updated_at":{"$date":"2025-03-12T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001062","customer_id":"CUST_0038","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-03-13T01:00:00.000Z"},"updated_at":{"$date":"2025-03-13T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001063","customer_id":"CUST_0055","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-03-14T02:00:00.000Z"},"updated_at":{"$date":"2025-03-14T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001064","customer_id":"CUST_0072","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-03-15T03:00:00.000Z"},"updated_at":{"$date":"2025-03-15T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001065","customer_id":"CUST_0089","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-03-16T04:00:00.000Z"},"updated_at":{"$date":"2025-03-16T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001066","customer_id":"CUST_0106","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-03-17T05:00:00.000Z"},"updated_at":{"$date":"2025-03-17T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001067","customer_id":"CUST_0123","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-03-18T06:00:00.000Z"},"updated_at":{"$date":"2025-03-18T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001068","customer_id":"CUST_0140","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-03-19T07:00:00.000Z"},"updated_at":{"$date":"2025-03-19T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001069","customer_id":"CUST_0157","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-03-20T08:00:00.000Z"},"updated_at":{"$date":"2025-03-20T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001070","customer_id":"CUST_0174","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-03-21T09:00:00.000Z"},"updated_at":{"$date":"2025-03-21T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001071","customer_id":"CUST_0191","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-03-22T10:00:00.000Z"},"updated_at":{"$date":"2025-03-22T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001072","customer_id":"CUST_0008","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-03-23T11:00:00.000Z"},"updated_at":{"$date":"2025-03-23T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001073","customer_id":"CUST_0025","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-03-24T12:00:00.000Z"},"updated_at":{"$date":"2025-03-24T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001074","customer_id":"CUST_0042","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-03-25T13:00:00.000Z"},"updated_at":{"$date":"2025-03-25T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001075","customer_id":"CUST_0059","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-03-26T14:00:00.000Z"},"updated_at":{"$date":"2025-03-26T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001076","customer_id":"CUST_0076","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-03-27T15:00:00.000Z"},"updated_at":{"$date":"2025-03-27T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001077","customer_id":"CUST_0093","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-03-28T16:00:00.000Z"},"updated_at":{"$date":"2025-03-28T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001078","customer_id":"CUST_0110","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-03-29T17:00:00.000Z"},"updated_at":{"$date":"2025-03-29T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001079","customer_id":"CUST_0127","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-03-30T18:00:00.000Z"},"updated_at":{"$date":"2025-03-30T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001080","customer_id":"CUST_0144","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-03-31T19:00:00.000Z"},"updated_at":{"$date":"2025-03-31T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001081","customer_id":"CUST_0161","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001082","customer_id":"CUST_0178","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001083","customer_id":"CUST_0195","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001084","customer_id":"CUST_0012","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001085","customer_id":"CUST_0029","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001086","customer_id":"CUST_0046","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001087","customer_id":"CUST_0063","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001088","customer_id":"CUST_0080","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001089","customer_id":"CUST_0097","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001090","customer_id":"CUST_0114","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001091","customer_id":"CUST_0131","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001092","customer_id":"CUST_0148","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001093","customer_id":"CUST_0165","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001094","customer_id":"CUST_0182","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001095","customer_id":"CUST_0199","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001096","customer_id":"CUST_0016","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001097","customer_id":"CUST_0033","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001098","customer_id":"CUST_0050","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001099","customer_id":"CUST_0067","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001100","customer_id":"CUST_0084","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001101","customer_id":"CUST_0101","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-01-21T00:00:00.000Z"},"updated_at":{"$date":"2025-01-21T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001102","customer_id":"CUST_0118","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-01-22T01:00:00.000Z"},"updated_at":{"$date":"2025-01-22T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001103","customer_id":"CUST_0135","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-01-23T02:00:00.000Z"},"updated_at":{"$date":"2025-01-23T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001104","customer_id":"CUST_0152","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-01-24T03:00:00.000Z"},"updated_at":{"$date":"2025-01-24T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001105","customer_id":"CUST_0169","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-01-25T04:00:00.000Z"},"updated_at":{"$date":"2025-01-25T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001106","customer_id":"CUST_0186","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-01-26T05:00:00.000Z"},"updated_at":{"$date":"2025-01-26T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001107","customer_id":"CUST_0003","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-01-27T06:00:00.000Z"},"updated_at":{"$date":"2025-01-27T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001108","customer_id":"CUST_0020","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-01-28T07:00:00.000Z"},"updated_at":{"$date":"2025-01-28T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001109","customer_id":"CUST_0037","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-01-29T08:00:00.000Z"},"updated_at":{"$date":"2025-01-29T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001110","customer_id":"CUST_0054","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-01-30T09:00:00.000Z"},"updated_at":{"$date":"2025-01-30T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001111","customer_id":"CUST_0071","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-01-31T10:00:00.000Z"},"updated_at":{"$date":"2025-01-31T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001112","customer_id":"CUST_0088","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-02-01T11:00:00.000Z"},"updated_at":{"$date":"2025-02-01T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001113","customer_id":"CUST_0105","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-02-02T12:00:00.000Z"},"updated_at":{"$date":"2025-02-02T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001114","customer_id":"CUST_0122","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-02-03T13:00:00.000Z"},"updated_at":{"$date":"2025-02-03T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001115","customer_id":"CUST_0139","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-02-04T14:00:00.000Z"},"updated_at":{"$date":"2025-02-04T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001116","customer_id":"CUST_0156","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-02-05T15:00:00.000Z"},"updated_at":{"$date":"2025-02-05T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001117","customer_id":"CUST_0173","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-02-06T16:00:00.000Z"},"updated_at":{"$date":"2025-02-06T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001118","customer_id":"CUST_0190","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-02-07T17:00:00.000Z"},"updated_at":{"$date":"2025-02-07T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001119","customer_id":"CUST_0007","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-02-08T18:00:00.000Z"},"updated_at":{"$date":"2025-02-08T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001120","customer_id":"CUST_0024","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-02-09T19:00:00.000Z"},"updated_at":{"$date":"2025-02-09T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001121","customer_id":"CUST_0041","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-02-10T00:00:00.000Z"},"updated_at":{"$date":"2025-02-10T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001122","customer_id":"CUST_0058","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-02-11T01:00:00.000Z"},"updated_at":{"$date":"2025-02-11T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001123","customer_id":"CUST_0075","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-02-12T02:00:00.000Z"},"updated_at":{"$date":"2025-02-12T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001124","customer_id":"CUST_0092","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-02-13T03:00:00.000Z"},"updated_at":{"$date":"2025-02-13T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001125","customer_id":"CUST_0109","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-02-14T04:00:00.000Z"},"updated_at":{"$date":"2025-02-14T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001126","customer_id":"CUST_0126","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-02-15T05:00:00.000Z"},"updated_at":{"$date":"2025-02-15T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001127","customer_id":"CUST_0143","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-02-16T06:00:00.000Z"},"updated_at":{"$date":"2025-02-16T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001128","customer_id":"CUST_0160","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-02-17T07:00:00.000Z"},"updated_at":{"$date":"2025-02-17T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001129","customer_id":"CUST_0177","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-02-18T08:00:00.000Z"},"updated_at":{"$date":"2025-02-18T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001130","customer_id":"CUST_0194","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-02-19T09:00:00.000Z"},"updated_at":{"$date":"2025-02-19T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001131","customer_id":"CUST_0011","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-02-20T10:00:00.000Z"},"updated_at":{"$date":"2025-02-20T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001132","customer_id":"CUST_0028","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-02-21T11:00:00.000Z"},"updated_at":{"$date":"2025-02-21T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001133","customer_id":"CUST_0045","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-02-22T12:00:00.000Z"},"updated_at":{"$date":"2025-02-22T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001134","customer_id":"CUST_0062","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-02-23T13:00:00.000Z"},"updated_at":{"$date":"2025-02-23T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001135","customer_id":"CUST_0079","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-02-24T14:00:00.000Z"},"updated_at":{"$date":"2025-02-24T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001136","customer_id":"CUST_0096","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-02-25T15:00:00.000Z"},"updated_at":{"$date":"2025-02-25T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001137","customer_id":"CUST_0113","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-02-26T16:00:00.000Z"},"updated_at":{"$date":"2025-02-26T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001138","customer_id":"CUST_0130","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-02-27T17:00:00.000Z"},"updated_at":{"$date":"2025-02-27T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001139","customer_id":"CUST_0147","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-02-28T18:00:00.000Z"},"updated_at":{"$date":"2025-02-28T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001140","customer_id":"CUST_0164","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-03-01T19:00:00.000Z"},"updated_at":{"$date":"2025-03-01T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001141","customer_id":"CUST_0181","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-03-02T00:00:00.000Z"},"updated_at":{"$date":"2025-03-02T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001142","customer_id":"CUST_0198","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-03-03T01:00:00.000Z"},"updated_at":{"$date":"2025-03-03T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001143","customer_id":"CUST_0015","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-03-04T02:00:00.000Z"},"updated_at":{"$date":"2025-03-04T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001144","customer_id":"CUST_0032","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-03-05T03:00:00.000Z"},"updated_at":{"$date":"2025-03-05T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001145","customer_id":"CUST_0049","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-03-06T04:00:00.000Z"},"updated_at":{"$date":"2025-03-06T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001146","customer_id":"CUST_0066","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-03-07T05:00:00.000Z"},"updated_at":{"$date":"2025-03-07T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001147","customer_id":"CUST_0083","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-03-08T06:00:00.000Z"},"updated_at":{"$date":"2025-03-08T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001148","customer_id":"CUST_0100","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-03-09T07:00:00.000Z"},"updated_at":{"$date":"2025-03-09T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001149","customer_id":"CUST_0117","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-03-10T08:00:00.000Z"},"updated_at":{"$date":"2025-03-10T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001150","customer_id":"CUST_0134","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-03-11T09:00:00.000Z"},"updated_at":{"$date":"2025-03-11T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001151","customer_id":"CUST_0151","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-03-12T10:00:00.000Z"},"updated_at":{"$date":"2025-03-12T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001152","customer_id":"CUST_0168","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-03-13T11:00:00.000Z"},"updated_at":{"$date":"2025-03-13T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001153","customer_id":"CUST_0185","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-03-14T12:00:00.000Z"},"updated_at":{"$date":"2025-03-14T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001154","customer_id":"CUST_0002","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-03-15T13:00:00.000Z"},"updated_at":{"$date":"2025-03-15T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001155","customer_id":"CUST_0019","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-03-16T14:00:00.000Z"},"updated_at":{"$date":"2025-03-16T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001156","customer_id":"CUST_0036","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-03-17T15:00:00.000Z"},"updated_at":{"$date":"2025-03-17T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001157","customer_id":"CUST_0053","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-03-18T16:00:00.000Z"},"updated_at":{"$date":"2025-03-18T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001158","customer_id":"CUST_0070","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-03-19T17:00:00.000Z"},"updated_at":{"$date":"2025-03-19T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001159","customer_id":"CUST_0087","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-03-20T18:00:00.000Z"},"updated_at":{"$date":"2025-03-20T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001160","customer_id":"CUST_0104","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-03-21T19:00:00.000Z"},"updated_at":{"$date":"2025-03-21T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001161","customer_id":"CUST_0121","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-03-22T00:00:00.000Z"},"updated_at":{"$date":"2025-03-22T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001162","customer_id":"CUST_0138","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-03-23T01:00:00.000Z"},"updated_at":{"$date":"2025-03-23T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001163","customer_id":"CUST_0155","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-03-24T02:00:00.000Z"},"updated_at":{"$date":"2025-03-24T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001164","customer_id":"CUST_0172","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-03-25T03:00:00.000Z"},"updated_at":{"$date":"2025-03-25T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001165","customer_id":"CUST_0189","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-03-26T04:00:00.000Z"},"updated_at":{"$date":"2025-03-26T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001166","customer_id":"CUST_0006","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-03-27T05:00:00.000Z"},"updated_at":{"$date":"2025-03-27T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001167","customer_id":"CUST_0023","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-03-28T06:00:00.000Z"},"updated_at":{"$date":"2025-03-28T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001168","customer_id":"CUST_0040","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-03-29T07:00:00.000Z"},"updated_at":{"$date":"2025-03-29T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001169","customer_id":"CUST_0057","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-03-30T08:00:00.000Z"},"updated_at":{"$date":"2025-03-30T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001170","customer_id":"CUST_0074","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-03-31T09:00:00.000Z"},"updated_at":{"$date":"2025-03-31T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001171","customer_id":"CUST_0091","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-01-01T10:00:00.000Z"},"updated_at":{"$date":"2025-01-01T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001172","customer_id":"CUST_0108","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-01-02T11:00:00.000Z"},"updated_at":{"$date":"2025-01-02T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001173","customer_id":"CUST_0125","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-01-03T12:00:00.000Z"},"updated_at":{"$date":"2025-01-03T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001174","customer_id":"CUST_0142","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-01-04T13:00:00.000Z"},"updated_at":{"$date":"2025-01-04T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001175","customer_id":"CUST_0159","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-01-05T14:00:00.000Z"},"updated_at":{"$date":"2025-01-05T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001176","customer_id":"CUST_0176","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-01-06T15:00:00.000Z"},"updated_at":{"$date":"2025-01-06T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001177","customer_id":"CUST_0193","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-01-07T16:00:00.000Z"},"updated_at":{"$date":"2025-01-07T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001178","customer_id":"CUST_0010","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-01-08T17:00:00.000Z"},"updated_at":{"$date":"2025-01-08T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001179","customer_id":"CUST_0027","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-01-09T18:00:00.000Z"},"updated_at":{"$date":"2025-01-09T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001180","customer_id":"CUST_0044","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-01-10T19:00:00.000Z"},"updated_at":{"$date":"2025-01-10T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001181","customer_id":"CUST_0061","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-01-11T00:00:00.000Z"},"updated_at":{"$date":"2025-01-11T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001182","customer_id":"CUST_0078","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-01-12T01:00:00.000Z"},"updated_at":{"$date":"2025-01-12T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001183","customer_id":"CUST_0095","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-01-13T02:00:00.000Z"},"updated_at":{"$date":"2025-01-13T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001184","customer_id":"CUST_0112","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-01-14T03:00:00.000Z"},"updated_at":{"$date":"2025-01-14T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001185","customer_id":"CUST_0129","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-01-15T04:00:00.000Z"},"updated_at":{"$date":"2025-01-15T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001186","customer_id":"CUST_0146","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-01-16T05:00:00.000Z"},"updated_at":{"$date":"2025-01-16T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001187","customer_id":"CUST_0163","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-01-17T06:00:00.000Z"},"updated_at":{"$date":"2025-01-17T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001188","customer_id":"CUST_0180","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-01-18T07:00:00.000Z"},"updated_at":{"$date":"2025-01-18T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001189","customer_id":"CUST_0197","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-01-19T08:00:00.000Z"},"updated_at":{"$date":"2025-01-19T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001190","customer_id":"CUST_0014","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-01-20T09:00:00.000Z"},"updated_at":{"$date":"2025-01-20T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001191","customer_id":"CUST_0031","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-01-21T10:00:00.000Z"},"updated_at":{"$date":"2025-01-21T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001192","customer_id":"CUST_0048","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-01-22T11:00:00.000Z"},"updated_at":{"$date":"2025-01-22T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001193","customer_id":"CUST_0065","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-01-23T12:00:00.000Z"},"updated_at":{"$date":"2025-01-23T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001194","customer_id":"CUST_0082","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-01-24T13:00:00.000Z"},"updated_at":{"$date":"2025-01-24T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001195","customer_id":"CUST_0099","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-01-25T14:00:00.000Z"},"updated_at":{"$date":"2025-01-25T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001196","customer_id":"CUST_0116","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-01-26T15:00:00.000Z"},"updated_at":{"$date":"2025-01-26T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001197","customer_id":"CUST_0133","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-01-27T16:00:00.000Z"},"updated_at":{"$date":"2025-01-27T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001198","customer_id":"CUST_0150","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-01-28T17:00:00.000Z"},"updated_at":{"$date":"2025-01-28T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001199","customer_id":"CUST_0167","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-01-29T18:00:00.000Z"},"updated_at":{"$date":"2025-01-29T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001200","customer_id":"CUST_0184","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-01-30T19:00:00.000Z"},"updated_at":{"$date":"2025-01-30T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001201","customer_id":"CUST_0001","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-01-31T00:00:00.000Z"},"updated_at":{"$date":"2025-01-31T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001202","customer_id":"CUST_0018","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-02-01T01:00:00.000Z"},"updated_at":{"$date":"2025-02-01T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001203","customer_id":"CUST_0035","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-02-02T02:00:00.000Z"},"updated_at":{"$date":"2025-02-02T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001204","customer_id":"CUST_0052","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-02-03T03:00:00.000Z"},"updated_at":{"$date":"2025-02-03T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001205","customer_id":"CUST_0069","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-02-04T04:00:00.000Z"},"updated_at":{"$date":"2025-02-04T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001206","customer_id":"CUST_0086","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-02-05T05:00:00.000Z"},"updated_at":{"$date":"2025-02-05T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001207","customer_id":"CUST_0103","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-02-06T06:00:00.000Z"},"updated_at":{"$date":"2025-02-06T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001208","customer_id":"CUST_0120","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-02-07T07:00:00.000Z"},"updated_at":{"$date":"2025-02-07T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001209","customer_id":"CUST_0137","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-02-08T08:00:00.000Z"},"updated_at":{"$date":"2025-02-08T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001210","customer_id":"CUST_0154","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-02-09T09:00:00.000Z"},"updated_at":{"$date":"2025-02-09T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001211","customer_id":"CUST_0171","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-02-10T10:00:00.000Z"},"updated_at":{"$date":"2025-02-10T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001212","customer_id":"CUST_0188","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-02-11T11:00:00.000Z"},"updated_at":{"$date":"2025-02-11T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001213","customer_id":"CUST_0005","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-02-12T12:00:00.000Z"},"updated_at":{"$date":"2025-02-12T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001214","customer_id":"CUST_0022","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-02-13T13:00:00.000Z"},"updated_at":{"$date":"2025-02-13T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001215","customer_id":"CUST_0039","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-02-14T14:00:00.000Z"},"updated_at":{"$date":"2025-02-14T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001216","customer_id":"CUST_0056","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-02-15T15:00:00.000Z"},"updated_at":{"$date":"2025-02-15T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001217","customer_id":"CUST_0073","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-02-16T16:00:00.000Z"},"updated_at":{"$date":"2025-02-16T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001218","customer_id":"CUST_0090","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-02-17T17:00:00.000Z"},"updated_at":{"$date":"2025-02-17T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001219","customer_id":"CUST_0107","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-02-18T18:00:00.000Z"},"updated_at":{"$date":"2025-02-18T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001220","customer_id":"CUST_0124","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-02-19T19:00:00.000Z"},"updated_at":{"$date":"2025-02-19T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001221","customer_id":"CUST_0141","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-02-20T00:00:00.000Z"},"updated_at":{"$date":"2025-02-20T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001222","customer_id":"CUST_0158","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-02-21T01:00:00.000Z"},"updated_at":{"$date":"2025-02-21T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001223","customer_id":"CUST_0175","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-02-22T02:00:00.000Z"},"updated_at":{"$date":"2025-02-22T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001224","customer_id":"CUST_0192","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-02-23T03:00:00.000Z"},"updated_at":{"$date":"2025-02-23T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001225","customer_id":"CUST_0009","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-02-24T04:00:00.000Z"},"updated_at":{"$date":"2025-02-24T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001226","customer_id":"CUST_0026","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-02-25T05:00:00.000Z"},"updated_at":{"$date":"2025-02-25T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001227","customer_id":"CUST_0043","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-02-26T06:00:00.000Z"},"updated_at":{"$date":"2025-02-26T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001228","customer_id":"CUST_0060","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-02-27T07:00:00.000Z"},"updated_at":{"$date":"2025-02-27T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001229","customer_id":"CUST_0077","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-02-28T08:00:00.000Z"},"updated_at":{"$date":"2025-02-28T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001230","customer_id":"CUST_0094","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-03-01T09:00:00.000Z"},"updated_at":{"$date":"2025-03-01T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001231","customer_id":"CUST_0111","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-03-02T10:00:00.000Z"},"updated_at":{"$date":"2025-03-02T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001232","customer_id":"CUST_0128","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-03-03T11:00:00.000Z"},"updated_at":{"$date":"2025-03-03T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001233","customer_id":"CUST_0145","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-03-04T12:00:00.000Z"},"updated_at":{"$date":"2025-03-04T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001234","customer_id":"CUST_0162","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-03-05T13:00:00.000Z"},"updated_at":{"$date":"2025-03-05T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001235","customer_id":"CUST_0179","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-03-06T14:00:00.000Z"},"updated_at":{"$date":"2025-03-06T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001236","customer_id":"CUST_0196","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-03-07T15:00:00.000Z"},"updated_at":{"$date":"2025-03-07T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001237","customer_id":"CUST_0013","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-03-08T16:00:00.000Z"},"updated_at":{"$date":"2025-03-08T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001238","customer_id":"CUST_0030","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-03-09T17:00:00.000Z"},"updated_at":{"$date":"2025-03-09T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001239","customer_id":"CUST_0047","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-03-10T18:00:00.000Z"},"updated_at":{"$date":"2025-03-10T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001240","customer_id":"CUST_0064","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-03-11T19:00:00.000Z"},"updated_at":{"$date":"2025-03-11T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001241","customer_id":"CUST_0081","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-03-12T00:00:00.000Z"},"updated_at":{"$date":"2025-03-12T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001242","customer_id":"CUST_0098","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-03-13T01:00:00.000Z"},"updated_at":{"$date":"2025-03-13T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001243","customer_id":"CUST_0115","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-03-14T02:00:00.000Z"},"updated_at":{"$date":"2025-03-14T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001244","customer_id":"CUST_0132","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-03-15T03:00:00.000Z"},"updated_at":{"$date":"2025-03-15T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001245","customer_id":"CUST_0149","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-03-16T04:00:00.000Z"},"updated_at":{"$date":"2025-03-16T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001246","customer_id":"CUST_0166","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-03-17T05:00:00.000Z"},"updated_at":{"$date":"2025-03-17T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001247","customer_id":"CUST_0183","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-03-18T06:00:00.000Z"},"updated_at":{"$date":"2025-03-18T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001248","customer_id":"CUST_0200","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-03-19T07:00:00.000Z"},"updated_at":{"$date":"2025-03-19T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001249","customer_id":"CUST_0017","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-03-20T08:00:00.000Z"},"updated_at":{"$date":"2025-03-20T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001250","customer_id":"CUST_0034","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-03-21T09:00:00.000Z"},"updated_at":{"$date":"2025-03-21T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001251","customer_id":"CUST_0051","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-03-22T10:00:00.000Z"},"updated_at":{"$date":"2025-03-22T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001252","customer_id":"CUST_0068","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-03-23T11:00:00.000Z"},"updated_at":{"$date":"2025-03-23T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001253","customer_id":"CUST_0085","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-03-24T12:00:00.000Z"},"updated_at":{"$date":"2025-03-24T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001254","customer_id":"CUST_0102","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-03-25T13:00:00.000Z"},"updated_at":{"$date":"2025-03-25T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001255","customer_id":"CUST_0119","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-03-26T14:00:00.000Z"},"updated_at":{"$date":"2025-03-26T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001256","customer_id":"CUST_0136","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-03-27T15:00:00.000Z"},"updated_at":{"$date":"2025-03-27T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001257","customer_id":"CUST_0153","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-03-28T16:00:00.000Z"},"updated_at":{"$date":"2025-03-28T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001258","customer_id":"CUST_0170","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-03-29T17:00:00.000Z"},"updated_at":{"$date":"2025-03-29T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001259","customer_id":"CUST_0187","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-03-30T18:00:00.000Z"},"updated_at":{"$date":"2025-03-30T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001260","customer_id":"CUST_0004","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-03-31T19:00:00.000Z"},"updated_at":{"$date":"2025-03-31T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001261","customer_id":"CUST_0021","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001262","customer_id":"CUST_0038","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001263","customer_id":"CUST_0055","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001264","customer_id":"CUST_0072","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001265","customer_id":"CUST_0089","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001266","customer_id":"CUST_0106","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001267","customer_id":"CUST_0123","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001268","customer_id":"CUST_0140","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001269","customer_id":"CUST_0157","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001270","customer_id":"CUST_0174","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001271","customer_id":"CUST_0191","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001272","customer_id":"CUST_0008","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001273","customer_id":"CUST_0025","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001274","customer_id":"CUST_0042","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001275","customer_id":"CUST_0059","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001276","customer_id":"CUST_0076","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001277","customer_id":"CUST_0093","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001278","customer_id":"CUST_0110","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001279","customer_id":"CUST_0127","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001280","customer_id":"CUST_0144","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001281","customer_id":"CUST_0161","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-01-21T00:00:00.000Z"},"updated_at":{"$date":"2025-01-21T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001282","customer_id":"CUST_0178","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-01-22T01:00:00.000Z"},"updated_at":{"$date":"2025-01-22T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001283","customer_id":"CUST_0195","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-01-23T02:00:00.000Z"},"updated_at":{"$date":"2025-01-23T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001284","customer_id":"CUST_0012","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-01-24T03:00:00.000Z"},"updated_at":{"$date":"2025-01-24T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001285","customer_id":"CUST_0029","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-01-25T04:00:00.000Z"},"updated_at":{"$date":"2025-01-25T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001286","customer_id":"CUST_0046","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-01-26T05:00:00.000Z"},"updated_at":{"$date":"2025-01-26T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001287","customer_id":"CUST_0063","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-01-27T06:00:00.000Z"},"updated_at":{"$date":"2025-01-27T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001288","customer_id":"CUST_0080","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-01-28T07:00:00.000Z"},"updated_at":{"$date":"2025-01-28T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001289","customer_id":"CUST_0097","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-01-29T08:00:00.000Z"},"updated_at":{"$date":"2025-01-29T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001290","customer_id":"CUST_0114","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-01-30T09:00:00.000Z"},"updated_at":{"$date":"2025-01-30T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001291","customer_id":"CUST_0131","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-01-31T10:00:00.000Z"},"updated_at":{"$date":"2025-01-31T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001292","customer_id":"CUST_0148","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-02-01T11:00:00.000Z"},"updated_at":{"$date":"2025-02-01T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001293","customer_id":"CUST_0165","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-02-02T12:00:00.000Z"},"updated_at":{"$date":"2025-02-02T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001294","customer_id":"CUST_0182","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-02-03T13:00:00.000Z"},"updated_at":{"$date":"2025-02-03T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001295","customer_id":"CUST_0199","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-02-04T14:00:00.000Z"},"updated_at":{"$date":"2025-02-04T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001296","customer_id":"CUST_0016","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-02-05T15:00:00.000Z"},"updated_at":{"$date":"2025-02-05T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001297","customer_id":"CUST_0033","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-02-06T16:00:00.000Z"},"updated_at":{"$date":"2025-02-06T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001298","customer_id":"CUST_0050","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-02-07T17:00:00.000Z"},"updated_at":{"$date":"2025-02-07T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001299","customer_id":"CUST_0067","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-02-08T18:00:00.000Z"},"updated_at":{"$date":"2025-02-08T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001300","customer_id":"CUST_0084","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-02-09T19:00:00.000Z"},"updated_at":{"$date":"2025-02-09T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001301","customer_id":"CUST_0101","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-02-10T00:00:00.000Z"},"updated_at":{"$date":"2025-02-10T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001302","customer_id":"CUST_0118","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-02-11T01:00:00.000Z"},"updated_at":{"$date":"2025-02-11T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001303","customer_id":"CUST_0135","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-02-12T02:00:00.000Z"},"updated_at":{"$date":"2025-02-12T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001304","customer_id":"CUST_0152","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-02-13T03:00:00.000Z"},"updated_at":{"$date":"2025-02-13T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001305","customer_id":"CUST_0169","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-02-14T04:00:00.000Z"},"updated_at":{"$date":"2025-02-14T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001306","customer_id":"CUST_0186","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-02-15T05:00:00.000Z"},"updated_at":{"$date":"2025-02-15T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001307","customer_id":"CUST_0003","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-02-16T06:00:00.000Z"},"updated_at":{"$date":"2025-02-16T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001308","customer_id":"CUST_0020","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-02-17T07:00:00.000Z"},"updated_at":{"$date":"2025-02-17T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001309","customer_id":"CUST_0037","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-02-18T08:00:00.000Z"},"updated_at":{"$date":"2025-02-18T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001310","customer_id":"CUST_0054","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-02-19T09:00:00.000Z"},"updated_at":{"$date":"2025-02-19T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001311","customer_id":"CUST_0071","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-02-20T10:00:00.000Z"},"updated_at":{"$date":"2025-02-20T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001312","customer_id":"CUST_0088","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-02-21T11:00:00.000Z"},"updated_at":{"$date":"2025-02-21T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001313","customer_id":"CUST_0105","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-02-22T12:00:00.000Z"},"updated_at":{"$date":"2025-02-22T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001314","customer_id":"CUST_0122","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-02-23T13:00:00.000Z"},"updated_at":{"$date":"2025-02-23T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001315","customer_id":"CUST_0139","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-02-24T14:00:00.000Z"},"updated_at":{"$date":"2025-02-24T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001316","customer_id":"CUST_0156","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-02-25T15:00:00.000Z"},"updated_at":{"$date":"2025-02-25T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001317","customer_id":"CUST_0173","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-02-26T16:00:00.000Z"},"updated_at":{"$date":"2025-02-26T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001318","customer_id":"CUST_0190","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-02-27T17:00:00.000Z"},"updated_at":{"$date":"2025-02-27T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001319","customer_id":"CUST_0007","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-02-28T18:00:00.000Z"},"updated_at":{"$date":"2025-02-28T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001320","customer_id":"CUST_0024","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-03-01T19:00:00.000Z"},"updated_at":{"$date":"2025-03-01T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001321","customer_id":"CUST_0041","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-03-02T00:00:00.000Z"},"updated_at":{"$date":"2025-03-02T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001322","customer_id":"CUST_0058","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-03-03T01:00:00.000Z"},"updated_at":{"$date":"2025-03-03T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001323","customer_id":"CUST_0075","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-03-04T02:00:00.000Z"},"updated_at":{"$date":"2025-03-04T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001324","customer_id":"CUST_0092","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-03-05T03:00:00.000Z"},"updated_at":{"$date":"2025-03-05T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001325","customer_id":"CUST_0109","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-03-06T04:00:00.000Z"},"updated_at":{"$date":"2025-03-06T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001326","customer_id":"CUST_0126","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-03-07T05:00:00.000Z"},"updated_at":{"$date":"2025-03-07T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001327","customer_id":"CUST_0143","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-03-08T06:00:00.000Z"},"updated_at":{"$date":"2025-03-08T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001328","customer_id":"CUST_0160","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-03-09T07:00:00.000Z"},"updated_at":{"$date":"2025-03-09T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001329","customer_id":"CUST_0177","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-03-10T08:00:00.000Z"},"updated_at":{"$date":"2025-03-10T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001330","customer_id":"CUST_0194","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-03-11T09:00:00.000Z"},"updated_at":{"$date":"2025-03-11T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001331","customer_id":"CUST_0011","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-03-12T10:00:00.000Z"},"updated_at":{"$date":"2025-03-12T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001332","customer_id":"CUST_0028","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-03-13T11:00:00.000Z"},"updated_at":{"$date":"2025-03-13T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001333","customer_id":"CUST_0045","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-03-14T12:00:00.000Z"},"updated_at":{"$date":"2025-03-14T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001334","customer_id":"CUST_0062","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-03-15T13:00:00.000Z"},"updated_at":{"$date":"2025-03-15T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001335","customer_id":"CUST_0079","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-03-16T14:00:00.000Z"},"updated_at":{"$date":"2025-03-16T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001336","customer_id":"CUST_0096","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-03-17T15:00:00.000Z"},"updated_at":{"$date":"2025-03-17T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001337","customer_id":"CUST_0113","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-03-18T16:00:00.000Z"},"updated_at":{"$date":"2025-03-18T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001338","customer_id":"CUST_0130","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-03-19T17:00:00.000Z"},"updated_at":{"$date":"2025-03-19T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001339","customer_id":"CUST_0147","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-03-20T18:00:00.000Z"},"updated_at":{"$date":"2025-03-20T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001340","customer_id":"CUST_0164","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-03-21T19:00:00.000Z"},"updated_at":{"$date":"2025-03-21T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001341","customer_id":"CUST_0181","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-03-22T00:00:00.000Z"},"updated_at":{"$date":"2025-03-22T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001342","customer_id":"CUST_0198","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-03-23T01:00:00.000Z"},"updated_at":{"$date":"2025-03-23T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001343","customer_id":"CUST_0015","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-03-24T02:00:00.000Z"},"updated_at":{"$date":"2025-03-24T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001344","customer_id":"CUST_0032","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-03-25T03:00:00.000Z"},"updated_at":{"$date":"2025-03-25T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001345","customer_id":"CUST_0049","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-03-26T04:00:00.000Z"},"updated_at":{"$date":"2025-03-26T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001346","customer_id":"CUST_0066","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-03-27T05:00:00.000Z"},"updated_at":{"$date":"2025-03-27T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001347","customer_id":"CUST_0083","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-03-28T06:00:00.000Z"},"updated_at":{"$date":"2025-03-28T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001348","customer_id":"CUST_0100","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-03-29T07:00:00.000Z"},"updated_at":{"$date":"2025-03-29T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001349","customer_id":"CUST_0117","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-03-30T08:00:00.000Z"},"updated_at":{"$date":"2025-03-30T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001350","customer_id":"CUST_0134","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-03-31T09:00:00.000Z"},"updated_at":{"$date":"2025-03-31T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001351","customer_id":"CUST_0151","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-01-01T10:00:00.000Z"},"updated_at":{"$date":"2025-01-01T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001352","customer_id":"CUST_0168","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-01-02T11:00:00.000Z"},"updated_at":{"$date":"2025-01-02T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001353","customer_id":"CUST_0185","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-01-03T12:00:00.000Z"},"updated_at":{"$date":"2025-01-03T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001354","customer_id":"CUST_0002","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-01-04T13:00:00.000Z"},"updated_at":{"$date":"2025-01-04T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001355","customer_id":"CUST_0019","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-01-05T14:00:00.000Z"},"updated_at":{"$date":"2025-01-05T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001356","customer_id":"CUST_0036","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-01-06T15:00:00.000Z"},"updated_at":{"$date":"2025-01-06T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001357","customer_id":"CUST_0053","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-01-07T16:00:00.000Z"},"updated_at":{"$date":"2025-01-07T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001358","customer_id":"CUST_0070","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-01-08T17:00:00.000Z"},"updated_at":{"$date":"2025-01-08T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001359","customer_id":"CUST_0087","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-01-09T18:00:00.000Z"},"updated_at":{"$date":"2025-01-09T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001360","customer_id":"CUST_0104","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-01-10T19:00:00.000Z"},"updated_at":{"$date":"2025-01-10T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001361","customer_id":"CUST_0121","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-01-11T00:00:00.000Z"},"updated_at":{"$date":"2025-01-11T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001362","customer_id":"CUST_0138","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-01-12T01:00:00.000Z"},"updated_at":{"$date":"2025-01-12T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001363","customer_id":"CUST_0155","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-01-13T02:00:00.000Z"},"updated_at":{"$date":"2025-01-13T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001364","customer_id":"CUST_0172","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-01-14T03:00:00.000Z"},"updated_at":{"$date":"2025-01-14T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001365","customer_id":"CUST_0189","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-01-15T04:00:00.000Z"},"updated_at":{"$date":"2025-01-15T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001366","customer_id":"CUST_0006","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-01-16T05:00:00.000Z"},"updated_at":{"$date":"2025-01-16T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001367","customer_id":"CUST_0023","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-01-17T06:00:00.000Z"},"updated_at":{"$date":"2025-01-17T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001368","customer_id":"CUST_0040","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-01-18T07:00:00.000Z"},"updated_at":{"$date":"2025-01-18T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001369","customer_id":"CUST_0057","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-01-19T08:00:00.000Z"},"updated_at":{"$date":"2025-01-19T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001370","customer_id":"CUST_0074","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-01-20T09:00:00.000Z"},"updated_at":{"$date":"2025-01-20T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001371","customer_id":"CUST_0091","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-01-21T10:00:00.000Z"},"updated_at":{"$date":"2025-01-21T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001372","customer_id":"CUST_0108","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-01-22T11:00:00.000Z"},"updated_at":{"$date":"2025-01-22T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001373","customer_id":"CUST_0125","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-01-23T12:00:00.000Z"},"updated_at":{"$date":"2025-01-23T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001374","customer_id":"CUST_0142","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-01-24T13:00:00.000Z"},"updated_at":{"$date":"2025-01-24T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001375","customer_id":"CUST_0159","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-01-25T14:00:00.000Z"},"updated_at":{"$date":"2025-01-25T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001376","customer_id":"CUST_0176","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-01-26T15:00:00.000Z"},"updated_at":{"$date":"2025-01-26T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001377","customer_id":"CUST_0193","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-01-27T16:00:00.000Z"},"updated_at":{"$date":"2025-01-27T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001378","customer_id":"CUST_0010","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-01-28T17:00:00.000Z"},"updated_at":{"$date":"2025-01-28T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001379","customer_id":"CUST_0027","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-01-29T18:00:00.000Z"},"updated_at":{"$date":"2025-01-29T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001380","customer_id":"CUST_0044","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-01-30T19:00:00.000Z"},"updated_at":{"$date":"2025-01-30T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001381","customer_id":"CUST_0061","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-01-31T00:00:00.000Z"},"updated_at":{"$date":"2025-01-31T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001382","customer_id":"CUST_0078","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-02-01T01:00:00.000Z"},"updated_at":{"$date":"2025-02-01T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001383","customer_id":"CUST_0095","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-02-02T02:00:00.000Z"},"updated_at":{"$date":"2025-02-02T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001384","customer_id":"CUST_0112","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-02-03T03:00:00.000Z"},"updated_at":{"$date":"2025-02-03T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001385","customer_id":"CUST_0129","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-02-04T04:00:00.000Z"},"updated_at":{"$date":"2025-02-04T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001386","customer_id":"CUST_0146","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-02-05T05:00:00.000Z"},"updated_at":{"$date":"2025-02-05T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001387","customer_id":"CUST_0163","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-02-06T06:00:00.000Z"},"updated_at":{"$date":"2025-02-06T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001388","customer_id":"CUST_0180","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-02-07T07:00:00.000Z"},"updated_at":{"$date":"2025-02-07T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001389","customer_id":"CUST_0197","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-02-08T08:00:00.000Z"},"updated_at":{"$date":"2025-02-08T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001390","customer_id":"CUST_0014","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-02-09T09:00:00.000Z"},"updated_at":{"$date":"2025-02-09T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001391","customer_id":"CUST_0031","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-02-10T10:00:00.000Z"},"updated_at":{"$date":"2025-02-10T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001392","customer_id":"CUST_0048","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-02-11T11:00:00.000Z"},"updated_at":{"$date":"2025-02-11T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001393","customer_id":"CUST_0065","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-02-12T12:00:00.000Z"},"updated_at":{"$date":"2025-02-12T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001394","customer_id":"CUST_0082","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-02-13T13:00:00.000Z"},"updated_at":{"$date":"2025-02-13T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001395","customer_id":"CUST_0099","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-02-14T14:00:00.000Z"},"updated_at":{"$date":"2025-02-14T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001396","customer_id":"CUST_0116","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-02-15T15:00:00.000Z"},"updated_at":{"$date":"2025-02-15T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001397","customer_id":"CUST_0133","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-02-16T16:00:00.000Z"},"updated_at":{"$date":"2025-02-16T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001398","customer_id":"CUST_0150","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-02-17T17:00:00.000Z"},"updated_at":{"$date":"2025-02-17T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001399","customer_id":"CUST_0167","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-02-18T18:00:00.000Z"},"updated_at":{"$date":"2025-02-18T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001400","customer_id":"CUST_0184","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-02-19T19:00:00.000Z"},"updated_at":{"$date":"2025-02-19T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001401","customer_id":"CUST_0001","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-02-20T00:00:00.000Z"},"updated_at":{"$date":"2025-02-20T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001402","customer_id":"CUST_0018","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-02-21T01:00:00.000Z"},"updated_at":{"$date":"2025-02-21T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001403","customer_id":"CUST_0035","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-02-22T02:00:00.000Z"},"updated_at":{"$date":"2025-02-22T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001404","customer_id":"CUST_0052","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-02-23T03:00:00.000Z"},"updated_at":{"$date":"2025-02-23T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001405","customer_id":"CUST_0069","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-02-24T04:00:00.000Z"},"updated_at":{"$date":"2025-02-24T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001406","customer_id":"CUST_0086","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-02-25T05:00:00.000Z"},"updated_at":{"$date":"2025-02-25T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001407","customer_id":"CUST_0103","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-02-26T06:00:00.000Z"},"updated_at":{"$date":"2025-02-26T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001408","customer_id":"CUST_0120","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-02-27T07:00:00.000Z"},"updated_at":{"$date":"2025-02-27T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001409","customer_id":"CUST_0137","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-02-28T08:00:00.000Z"},"updated_at":{"$date":"2025-02-28T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001410","customer_id":"CUST_0154","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-03-01T09:00:00.000Z"},"updated_at":{"$date":"2025-03-01T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001411","customer_id":"CUST_0171","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-03-02T10:00:00.000Z"},"updated_at":{"$date":"2025-03-02T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001412","customer_id":"CUST_0188","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-03-03T11:00:00.000Z"},"updated_at":{"$date":"2025-03-03T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001413","customer_id":"CUST_0005","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-03-04T12:00:00.000Z"},"updated_at":{"$date":"2025-03-04T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001414","customer_id":"CUST_0022","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-03-05T13:00:00.000Z"},"updated_at":{"$date":"2025-03-05T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001415","customer_id":"CUST_0039","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-03-06T14:00:00.000Z"},"updated_at":{"$date":"2025-03-06T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001416","customer_id":"CUST_0056","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-03-07T15:00:00.000Z"},"updated_at":{"$date":"2025-03-07T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001417","customer_id":"CUST_0073","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-03-08T16:00:00.000Z"},"updated_at":{"$date":"2025-03-08T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001418","customer_id":"CUST_0090","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-03-09T17:00:00.000Z"},"updated_at":{"$date":"2025-03-09T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001419","customer_id":"CUST_0107","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-03-10T18:00:00.000Z"},"updated_at":{"$date":"2025-03-10T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001420","customer_id":"CUST_0124","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-03-11T19:00:00.000Z"},"updated_at":{"$date":"2025-03-11T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001421","customer_id":"CUST_0141","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-03-12T00:00:00.000Z"},"updated_at":{"$date":"2025-03-12T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001422","customer_id":"CUST_0158","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-03-13T01:00:00.000Z"},"updated_at":{"$date":"2025-03-13T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001423","customer_id":"CUST_0175","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-03-14T02:00:00.000Z"},"updated_at":{"$date":"2025-03-14T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001424","customer_id":"CUST_0192","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-03-15T03:00:00.000Z"},"updated_at":{"$date":"2025-03-15T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001425","customer_id":"CUST_0009","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-03-16T04:00:00.000Z"},"updated_at":{"$date":"2025-03-16T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001426","customer_id":"CUST_0026","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-03-17T05:00:00.000Z"},"updated_at":{"$date":"2025-03-17T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001427","customer_id":"CUST_0043","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-03-18T06:00:00.000Z"},"updated_at":{"$date":"2025-03-18T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001428","customer_id":"CUST_0060","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-03-19T07:00:00.000Z"},"updated_at":{"$date":"2025-03-19T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001429","customer_id":"CUST_0077","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-03-20T08:00:00.000Z"},"updated_at":{"$date":"2025-03-20T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001430","customer_id":"CUST_0094","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-03-21T09:00:00.000Z"},"updated_at":{"$date":"2025-03-21T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001431","customer_id":"CUST_0111","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-03-22T10:00:00.000Z"},"updated_at":{"$date":"2025-03-22T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001432","customer_id":"CUST_0128","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-03-23T11:00:00.000Z"},"updated_at":{"$date":"2025-03-23T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001433","customer_id":"CUST_0145","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-03-24T12:00:00.000Z"},"updated_at":{"$date":"2025-03-24T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001434","customer_id":"CUST_0162","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-03-25T13:00:00.000Z"},"updated_at":{"$date":"2025-03-25T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001435","customer_id":"CUST_0179","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-03-26T14:00:00.000Z"},"updated_at":{"$date":"2025-03-26T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001436","customer_id":"CUST_0196","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-03-27T15:00:00.000Z"},"updated_at":{"$date":"2025-03-27T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001437","customer_id":"CUST_0013","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-03-28T16:00:00.000Z"},"updated_at":{"$date":"2025-03-28T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001438","customer_id":"CUST_0030","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-03-29T17:00:00.000Z"},"updated_at":{"$date":"2025-03-29T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001439","customer_id":"CUST_0047","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-03-30T18:00:00.000Z"},"updated_at":{"$date":"2025-03-30T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001440","customer_id":"CUST_0064","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-03-31T19:00:00.000Z"},"updated_at":{"$date":"2025-03-31T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001441","customer_id":"CUST_0081","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001442","customer_id":"CUST_0098","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001443","customer_id":"CUST_0115","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001444","customer_id":"CUST_0132","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001445","customer_id":"CUST_0149","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001446","customer_id":"CUST_0166","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001447","customer_id":"CUST_0183","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001448","customer_id":"CUST_0200","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001449","customer_id":"CUST_0017","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001450","customer_id":"CUST_0034","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001451","customer_id":"CUST_0051","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001452","customer_id":"CUST_0068","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001453","customer_id":"CUST_0085","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001454","customer_id":"CUST_0102","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001455","customer_id":"CUST_0119","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001456","customer_id":"CUST_0136","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001457","customer_id":"CUST_0153","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001458","customer_id":"CUST_0170","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001459","customer_id":"CUST_0187","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001460","customer_id":"CUST_0004","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001461","customer_id":"CUST_0021","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-01-21T00:00:00.000Z"},"updated_at":{"$date":"2025-01-21T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001462","customer_id":"CUST_0038","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-01-22T01:00:00.000Z"},"updated_at":{"$date":"2025-01-22T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001463","customer_id":"CUST_0055","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-01-23T02:00:00.000Z"},"updated_at":{"$date":"2025-01-23T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001464","customer_id":"CUST_0072","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-01-24T03:00:00.000Z"},"updated_at":{"$date":"2025-01-24T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001465","customer_id":"CUST_0089","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-01-25T04:00:00.000Z"},"updated_at":{"$date":"2025-01-25T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001466","customer_id":"CUST_0106","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-01-26T05:00:00.000Z"},"updated_at":{"$date":"2025-01-26T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001467","customer_id":"CUST_0123","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-01-27T06:00:00.000Z"},"updated_at":{"$date":"2025-01-27T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001468","customer_id":"CUST_0140","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-01-28T07:00:00.000Z"},"updated_at":{"$date":"2025-01-28T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001469","customer_id":"CUST_0157","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-01-29T08:00:00.000Z"},"updated_at":{"$date":"2025-01-29T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001470","customer_id":"CUST_0174","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-01-30T09:00:00.000Z"},"updated_at":{"$date":"2025-01-30T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001471","customer_id":"CUST_0191","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-01-31T10:00:00.000Z"},"updated_at":{"$date":"2025-01-31T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001472","customer_id":"CUST_0008","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-02-01T11:00:00.000Z"},"updated_at":{"$date":"2025-02-01T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001473","customer_id":"CUST_0025","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-02-02T12:00:00.000Z"},"updated_at":{"$date":"2025-02-02T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001474","customer_id":"CUST_0042","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-02-03T13:00:00.000Z"},"updated_at":{"$date":"2025-02-03T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001475","customer_id":"CUST_0059","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-02-04T14:00:00.000Z"},"updated_at":{"$date":"2025-02-04T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001476","customer_id":"CUST_0076","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-02-05T15:00:00.000Z"},"updated_at":{"$date":"2025-02-05T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001477","customer_id":"CUST_0093","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-02-06T16:00:00.000Z"},"updated_at":{"$date":"2025-02-06T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001478","customer_id":"CUST_0110","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-02-07T17:00:00.000Z"},"updated_at":{"$date":"2025-02-07T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001479","customer_id":"CUST_0127","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-02-08T18:00:00.000Z"},"updated_at":{"$date":"2025-02-08T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001480","customer_id":"CUST_0144","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-02-09T19:00:00.000Z"},"updated_at":{"$date":"2025-02-09T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001481","customer_id":"CUST_0161","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-02-10T00:00:00.000Z"},"updated_at":{"$date":"2025-02-10T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001482","customer_id":"CUST_0178","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-02-11T01:00:00.000Z"},"updated_at":{"$date":"2025-02-11T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001483","customer_id":"CUST_0195","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-02-12T02:00:00.000Z"},"updated_at":{"$date":"2025-02-12T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001484","customer_id":"CUST_0012","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-02-13T03:00:00.000Z"},"updated_at":{"$date":"2025-02-13T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001485","customer_id":"CUST_0029","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-02-14T04:00:00.000Z"},"updated_at":{"$date":"2025-02-14T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001486","customer_id":"CUST_0046","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-02-15T05:00:00.000Z"},"updated_at":{"$date":"2025-02-15T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001487","customer_id":"CUST_0063","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-02-16T06:00:00.000Z"},"updated_at":{"$date":"2025-02-16T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001488","customer_id":"CUST_0080","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-02-17T07:00:00.000Z"},"updated_at":{"$date":"2025-02-17T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001489","customer_id":"CUST_0097","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-02-18T08:00:00.000Z"},"updated_at":{"$date":"2025-02-18T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001490","customer_id":"CUST_0114","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-02-19T09:00:00.000Z"},"updated_at":{"$date":"2025-02-19T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001491","customer_id":"CUST_0131","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-02-20T10:00:00.000Z"},"updated_at":{"$date":"2025-02-20T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001492","customer_id":"CUST_0148","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-02-21T11:00:00.000Z"},"updated_at":{"$date":"2025-02-21T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001493","customer_id":"CUST_0165","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-02-22T12:00:00.000Z"},"updated_at":{"$date":"2025-02-22T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001494","customer_id":"CUST_0182","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-02-23T13:00:00.000Z"},"updated_at":{"$date":"2025-02-23T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001495","customer_id":"CUST_0199","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-02-24T14:00:00.000Z"},"updated_at":{"$date":"2025-02-24T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001496","customer_id":"CUST_0016","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-02-25T15:00:00.000Z"},"updated_at":{"$date":"2025-02-25T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001497","customer_id":"CUST_0033","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-02-26T16:00:00.000Z"},"updated_at":{"$date":"2025-02-26T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001498","customer_id":"CUST_0050","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-02-27T17:00:00.000Z"},"updated_at":{"$date":"2025-02-27T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001499","customer_id":"CUST_0067","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-02-28T18:00:00.000Z"},"updated_at":{"$date":"2025-02-28T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001500","customer_id":"CUST_0084","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-03-01T19:00:00.000Z"},"updated_at":{"$date":"2025-03-01T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001501","customer_id":"CUST_0101","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-03-02T00:00:00.000Z"},"updated_at":{"$date":"2025-03-02T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001502","customer_id":"CUST_0118","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-03-03T01:00:00.000Z"},"updated_at":{"$date":"2025-03-03T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001503","customer_id":"CUST_0135","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-03-04T02:00:00.000Z"},"updated_at":{"$date":"2025-03-04T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001504","customer_id":"CUST_0152","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-03-05T03:00:00.000Z"},"updated_at":{"$date":"2025-03-05T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001505","customer_id":"CUST_0169","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-03-06T04:00:00.000Z"},"updated_at":{"$date":"2025-03-06T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001506","customer_id":"CUST_0186","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-03-07T05:00:00.000Z"},"updated_at":{"$date":"2025-03-07T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001507","customer_id":"CUST_0003","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-03-08T06:00:00.000Z"},"updated_at":{"$date":"2025-03-08T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001508","customer_id":"CUST_0020","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-03-09T07:00:00.000Z"},"updated_at":{"$date":"2025-03-09T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001509","customer_id":"CUST_0037","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-03-10T08:00:00.000Z"},"updated_at":{"$date":"2025-03-10T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001510","customer_id":"CUST_0054","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-03-11T09:00:00.000Z"},"updated_at":{"$date":"2025-03-11T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001511","customer_id":"CUST_0071","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-03-12T10:00:00.000Z"},"updated_at":{"$date":"2025-03-12T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001512","customer_id":"CUST_0088","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-03-13T11:00:00.000Z"},"updated_at":{"$date":"2025-03-13T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001513","customer_id":"CUST_0105","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-03-14T12:00:00.000Z"},"updated_at":{"$date":"2025-03-14T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001514","customer_id":"CUST_0122","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-03-15T13:00:00.000Z"},"updated_at":{"$date":"2025-03-15T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001515","customer_id":"CUST_0139","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-03-16T14:00:00.000Z"},"updated_at":{"$date":"2025-03-16T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001516","customer_id":"CUST_0156","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-03-17T15:00:00.000Z"},"updated_at":{"$date":"2025-03-17T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001517","customer_id":"CUST_0173","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-03-18T16:00:00.000Z"},"updated_at":{"$date":"2025-03-18T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001518","customer_id":"CUST_0190","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-03-19T17:00:00.000Z"},"updated_at":{"$date":"2025-03-19T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001519","customer_id":"CUST_0007","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-03-20T18:00:00.000Z"},"updated_at":{"$date":"2025-03-20T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001520","customer_id":"CUST_0024","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-03-21T19:00:00.000Z"},"updated_at":{"$date":"2025-03-21T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001521","customer_id":"CUST_0041","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-03-22T00:00:00.000Z"},"updated_at":{"$date":"2025-03-22T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001522","customer_id":"CUST_0058","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-03-23T01:00:00.000Z"},"updated_at":{"$date":"2025-03-23T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001523","customer_id":"CUST_0075","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-03-24T02:00:00.000Z"},"updated_at":{"$date":"2025-03-24T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001524","customer_id":"CUST_0092","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-03-25T03:00:00.000Z"},"updated_at":{"$date":"2025-03-25T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001525","customer_id":"CUST_0109","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-03-26T04:00:00.000Z"},"updated_at":{"$date":"2025-03-26T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001526","customer_id":"CUST_0126","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-03-27T05:00:00.000Z"},"updated_at":{"$date":"2025-03-27T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001527","customer_id":"CUST_0143","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-03-28T06:00:00.000Z"},"updated_at":{"$date":"2025-03-28T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001528","customer_id":"CUST_0160","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-03-29T07:00:00.000Z"},"updated_at":{"$date":"2025-03-29T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001529","customer_id":"CUST_0177","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-03-30T08:00:00.000Z"},"updated_at":{"$date":"2025-03-30T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001530","customer_id":"CUST_0194","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-03-31T09:00:00.000Z"},"updated_at":{"$date":"2025-03-31T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001531","customer_id":"CUST_0011","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-01-01T10:00:00.000Z"},"updated_at":{"$date":"2025-01-01T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001532","customer_id":"CUST_0028","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-01-02T11:00:00.000Z"},"updated_at":{"$date":"2025-01-02T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001533","customer_id":"CUST_0045","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-01-03T12:00:00.000Z"},"updated_at":{"$date":"2025-01-03T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001534","customer_id":"CUST_0062","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-01-04T13:00:00.000Z"},"updated_at":{"$date":"2025-01-04T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001535","customer_id":"CUST_0079","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-01-05T14:00:00.000Z"},"updated_at":{"$date":"2025-01-05T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001536","customer_id":"CUST_0096","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-01-06T15:00:00.000Z"},"updated_at":{"$date":"2025-01-06T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001537","customer_id":"CUST_0113","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-01-07T16:00:00.000Z"},"updated_at":{"$date":"2025-01-07T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001538","customer_id":"CUST_0130","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-01-08T17:00:00.000Z"},"updated_at":{"$date":"2025-01-08T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001539","customer_id":"CUST_0147","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-01-09T18:00:00.000Z"},"updated_at":{"$date":"2025-01-09T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001540","customer_id":"CUST_0164","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-01-10T19:00:00.000Z"},"updated_at":{"$date":"2025-01-10T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001541","customer_id":"CUST_0181","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-01-11T00:00:00.000Z"},"updated_at":{"$date":"2025-01-11T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001542","customer_id":"CUST_0198","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-01-12T01:00:00.000Z"},"updated_at":{"$date":"2025-01-12T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001543","customer_id":"CUST_0015","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-01-13T02:00:00.000Z"},"updated_at":{"$date":"2025-01-13T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001544","customer_id":"CUST_0032","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-01-14T03:00:00.000Z"},"updated_at":{"$date":"2025-01-14T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001545","customer_id":"CUST_0049","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-01-15T04:00:00.000Z"},"updated_at":{"$date":"2025-01-15T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001546","customer_id":"CUST_0066","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-01-16T05:00:00.000Z"},"updated_at":{"$date":"2025-01-16T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001547","customer_id":"CUST_0083","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-01-17T06:00:00.000Z"},"updated_at":{"$date":"2025-01-17T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001548","customer_id":"CUST_0100","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-01-18T07:00:00.000Z"},"updated_at":{"$date":"2025-01-18T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001549","customer_id":"CUST_0117","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-01-19T08:00:00.000Z"},"updated_at":{"$date":"2025-01-19T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001550","customer_id":"CUST_0134","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-01-20T09:00:00.000Z"},"updated_at":{"$date":"2025-01-20T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001551","customer_id":"CUST_0151","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-01-21T10:00:00.000Z"},"updated_at":{"$date":"2025-01-21T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001552","customer_id":"CUST_0168","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-01-22T11:00:00.000Z"},"updated_at":{"$date":"2025-01-22T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001553","customer_id":"CUST_0185","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-01-23T12:00:00.000Z"},"updated_at":{"$date":"2025-01-23T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001554","customer_id":"CUST_0002","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-01-24T13:00:00.000Z"},"updated_at":{"$date":"2025-01-24T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001555","customer_id":"CUST_0019","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-01-25T14:00:00.000Z"},"updated_at":{"$date":"2025-01-25T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001556","customer_id":"CUST_0036","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-01-26T15:00:00.000Z"},"updated_at":{"$date":"2025-01-26T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001557","customer_id":"CUST_0053","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-01-27T16:00:00.000Z"},"updated_at":{"$date":"2025-01-27T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001558","customer_id":"CUST_0070","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-01-28T17:00:00.000Z"},"updated_at":{"$date":"2025-01-28T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001559","customer_id":"CUST_0087","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-01-29T18:00:00.000Z"},"updated_at":{"$date":"2025-01-29T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001560","customer_id":"CUST_0104","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-01-30T19:00:00.000Z"},"updated_at":{"$date":"2025-01-30T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001561","customer_id":"CUST_0121","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-01-31T00:00:00.000Z"},"updated_at":{"$date":"2025-01-31T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001562","customer_id":"CUST_0138","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-02-01T01:00:00.000Z"},"updated_at":{"$date":"2025-02-01T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001563","customer_id":"CUST_0155","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-02-02T02:00:00.000Z"},"updated_at":{"$date":"2025-02-02T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001564","customer_id":"CUST_0172","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-02-03T03:00:00.000Z"},"updated_at":{"$date":"2025-02-03T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001565","customer_id":"CUST_0189","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-02-04T04:00:00.000Z"},"updated_at":{"$date":"2025-02-04T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001566","customer_id":"CUST_0006","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-02-05T05:00:00.000Z"},"updated_at":{"$date":"2025-02-05T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001567","customer_id":"CUST_0023","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-02-06T06:00:00.000Z"},"updated_at":{"$date":"2025-02-06T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001568","customer_id":"CUST_0040","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-02-07T07:00:00.000Z"},"updated_at":{"$date":"2025-02-07T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001569","customer_id":"CUST_0057","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-02-08T08:00:00.000Z"},"updated_at":{"$date":"2025-02-08T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001570","customer_id":"CUST_0074","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-02-09T09:00:00.000Z"},"updated_at":{"$date":"2025-02-09T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001571","customer_id":"CUST_0091","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-02-10T10:00:00.000Z"},"updated_at":{"$date":"2025-02-10T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001572","customer_id":"CUST_0108","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-02-11T11:00:00.000Z"},"updated_at":{"$date":"2025-02-11T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001573","customer_id":"CUST_0125","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-02-12T12:00:00.000Z"},"updated_at":{"$date":"2025-02-12T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001574","customer_id":"CUST_0142","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-02-13T13:00:00.000Z"},"updated_at":{"$date":"2025-02-13T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001575","customer_id":"CUST_0159","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-02-14T14:00:00.000Z"},"updated_at":{"$date":"2025-02-14T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001576","customer_id":"CUST_0176","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-02-15T15:00:00.000Z"},"updated_at":{"$date":"2025-02-15T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001577","customer_id":"CUST_0193","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-02-16T16:00:00.000Z"},"updated_at":{"$date":"2025-02-16T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001578","customer_id":"CUST_0010","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-02-17T17:00:00.000Z"},"updated_at":{"$date":"2025-02-17T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001579","customer_id":"CUST_0027","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-02-18T18:00:00.000Z"},"updated_at":{"$date":"2025-02-18T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001580","customer_id":"CUST_0044","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-02-19T19:00:00.000Z"},"updated_at":{"$date":"2025-02-19T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001581","customer_id":"CUST_0061","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-02-20T00:00:00.000Z"},"updated_at":{"$date":"2025-02-20T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001582","customer_id":"CUST_0078","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-02-21T01:00:00.000Z"},"updated_at":{"$date":"2025-02-21T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001583","customer_id":"CUST_0095","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-02-22T02:00:00.000Z"},"updated_at":{"$date":"2025-02-22T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001584","customer_id":"CUST_0112","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-02-23T03:00:00.000Z"},"updated_at":{"$date":"2025-02-23T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001585","customer_id":"CUST_0129","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-02-24T04:00:00.000Z"},"updated_at":{"$date":"2025-02-24T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001586","customer_id":"CUST_0146","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-02-25T05:00:00.000Z"},"updated_at":{"$date":"2025-02-25T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001587","customer_id":"CUST_0163","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-02-26T06:00:00.000Z"},"updated_at":{"$date":"2025-02-26T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001588","customer_id":"CUST_0180","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-02-27T07:00:00.000Z"},"updated_at":{"$date":"2025-02-27T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001589","customer_id":"CUST_0197","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-02-28T08:00:00.000Z"},"updated_at":{"$date":"2025-02-28T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001590","customer_id":"CUST_0014","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-03-01T09:00:00.000Z"},"updated_at":{"$date":"2025-03-01T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001591","customer_id":"CUST_0031","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-03-02T10:00:00.000Z"},"updated_at":{"$date":"2025-03-02T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001592","customer_id":"CUST_0048","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-03-03T11:00:00.000Z"},"updated_at":{"$date":"2025-03-03T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001593","customer_id":"CUST_0065","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-03-04T12:00:00.000Z"},"updated_at":{"$date":"2025-03-04T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001594","customer_id":"CUST_0082","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-03-05T13:00:00.000Z"},"updated_at":{"$date":"2025-03-05T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001595","customer_id":"CUST_0099","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-03-06T14:00:00.000Z"},"updated_at":{"$date":"2025-03-06T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001596","customer_id":"CUST_0116","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-03-07T15:00:00.000Z"},"updated_at":{"$date":"2025-03-07T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001597","customer_id":"CUST_0133","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-03-08T16:00:00.000Z"},"updated_at":{"$date":"2025-03-08T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001598","customer_id":"CUST_0150","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-03-09T17:00:00.000Z"},"updated_at":{"$date":"2025-03-09T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001599","customer_id":"CUST_0167","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-03-10T18:00:00.000Z"},"updated_at":{"$date":"2025-03-10T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001600","customer_id":"CUST_0184","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-03-11T19:00:00.000Z"},"updated_at":{"$date":"2025-03-11T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001601","customer_id":"CUST_0001","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-03-12T00:00:00.000Z"},"updated_at":{"$date":"2025-03-12T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001602","customer_id":"CUST_0018","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-03-13T01:00:00.000Z"},"updated_at":{"$date":"2025-03-13T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001603","customer_id":"CUST_0035","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-03-14T02:00:00.000Z"},"updated_at":{"$date":"2025-03-14T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001604","customer_id":"CUST_0052","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-03-15T03:00:00.000Z"},"updated_at":{"$date":"2025-03-15T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001605","customer_id":"CUST_0069","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-03-16T04:00:00.000Z"},"updated_at":{"$date":"2025-03-16T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001606","customer_id":"CUST_0086","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-03-17T05:00:00.000Z"},"updated_at":{"$date":"2025-03-17T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001607","customer_id":"CUST_0103","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-03-18T06:00:00.000Z"},"updated_at":{"$date":"2025-03-18T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001608","customer_id":"CUST_0120","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-03-19T07:00:00.000Z"},"updated_at":{"$date":"2025-03-19T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001609","customer_id":"CUST_0137","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-03-20T08:00:00.000Z"},"updated_at":{"$date":"2025-03-20T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001610","customer_id":"CUST_0154","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-03-21T09:00:00.000Z"},"updated_at":{"$date":"2025-03-21T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001611","customer_id":"CUST_0171","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-03-22T10:00:00.000Z"},"updated_at":{"$date":"2025-03-22T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001612","customer_id":"CUST_0188","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-03-23T11:00:00.000Z"},"updated_at":{"$date":"2025-03-23T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001613","customer_id":"CUST_0005","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-03-24T12:00:00.000Z"},"updated_at":{"$date":"2025-03-24T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001614","customer_id":"CUST_0022","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-03-25T13:00:00.000Z"},"updated_at":{"$date":"2025-03-25T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001615","customer_id":"CUST_0039","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-03-26T14:00:00.000Z"},"updated_at":{"$date":"2025-03-26T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001616","customer_id":"CUST_0056","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-03-27T15:00:00.000Z"},"updated_at":{"$date":"2025-03-27T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001617","customer_id":"CUST_0073","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-03-28T16:00:00.000Z"},"updated_at":{"$date":"2025-03-28T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001618","customer_id":"CUST_0090","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-03-29T17:00:00.000Z"},"updated_at":{"$date":"2025-03-29T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001619","customer_id":"CUST_0107","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-03-30T18:00:00.000Z"},"updated_at":{"$date":"2025-03-30T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001620","customer_id":"CUST_0124","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-03-31T19:00:00.000Z"},"updated_at":{"$date":"2025-03-31T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001621","customer_id":"CUST_0141","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001622","customer_id":"CUST_0158","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001623","customer_id":"CUST_0175","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001624","customer_id":"CUST_0192","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001625","customer_id":"CUST_0009","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001626","customer_id":"CUST_0026","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001627","customer_id":"CUST_0043","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001628","customer_id":"CUST_0060","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001629","customer_id":"CUST_0077","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001630","customer_id":"CUST_0094","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001631","customer_id":"CUST_0111","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001632","customer_id":"CUST_0128","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001633","customer_id":"CUST_0145","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001634","customer_id":"CUST_0162","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001635","customer_id":"CUST_0179","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001636","customer_id":"CUST_0196","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001637","customer_id":"CUST_0013","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001638","customer_id":"CUST_0030","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001639","customer_id":"CUST_0047","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001640","customer_id":"CUST_0064","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001641","customer_id":"CUST_0081","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-01-21T00:00:00.000Z"},"updated_at":{"$date":"2025-01-21T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001642","customer_id":"CUST_0098","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-01-22T01:00:00.000Z"},"updated_at":{"$date":"2025-01-22T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001643","customer_id":"CUST_0115","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-01-23T02:00:00.000Z"},"updated_at":{"$date":"2025-01-23T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001644","customer_id":"CUST_0132","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-01-24T03:00:00.000Z"},"updated_at":{"$date":"2025-01-24T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001645","customer_id":"CUST_0149","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-01-25T04:00:00.000Z"},"updated_at":{"$date":"2025-01-25T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001646","customer_id":"CUST_0166","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-01-26T05:00:00.000Z"},"updated_at":{"$date":"2025-01-26T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001647","customer_id":"CUST_0183","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-01-27T06:00:00.000Z"},"updated_at":{"$date":"2025-01-27T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001648","customer_id":"CUST_0200","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-01-28T07:00:00.000Z"},"updated_at":{"$date":"2025-01-28T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001649","customer_id":"CUST_0017","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-01-29T08:00:00.000Z"},"updated_at":{"$date":"2025-01-29T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001650","customer_id":"CUST_0034","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-01-30T09:00:00.000Z"},"updated_at":{"$date":"2025-01-30T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001651","customer_id":"CUST_0051","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-01-31T10:00:00.000Z"},"updated_at":{"$date":"2025-01-31T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001652","customer_id":"CUST_0068","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-02-01T11:00:00.000Z"},"updated_at":{"$date":"2025-02-01T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001653","customer_id":"CUST_0085","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-02-02T12:00:00.000Z"},"updated_at":{"$date":"2025-02-02T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001654","customer_id":"CUST_0102","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-02-03T13:00:00.000Z"},"updated_at":{"$date":"2025-02-03T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001655","customer_id":"CUST_0119","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-02-04T14:00:00.000Z"},"updated_at":{"$date":"2025-02-04T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001656","customer_id":"CUST_0136","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-02-05T15:00:00.000Z"},"updated_at":{"$date":"2025-02-05T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001657","customer_id":"CUST_0153","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-02-06T16:00:00.000Z"},"updated_at":{"$date":"2025-02-06T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001658","customer_id":"CUST_0170","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-02-07T17:00:00.000Z"},"updated_at":{"$date":"2025-02-07T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001659","customer_id":"CUST_0187","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-02-08T18:00:00.000Z"},"updated_at":{"$date":"2025-02-08T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001660","customer_id":"CUST_0004","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-02-09T19:00:00.000Z"},"updated_at":{"$date":"2025-02-09T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001661","customer_id":"CUST_0021","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-02-10T00:00:00.000Z"},"updated_at":{"$date":"2025-02-10T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001662","customer_id":"CUST_0038","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-02-11T01:00:00.000Z"},"updated_at":{"$date":"2025-02-11T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001663","customer_id":"CUST_0055","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-02-12T02:00:00.000Z"},"updated_at":{"$date":"2025-02-12T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001664","customer_id":"CUST_0072","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-02-13T03:00:00.000Z"},"updated_at":{"$date":"2025-02-13T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001665","customer_id":"CUST_0089","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-02-14T04:00:00.000Z"},"updated_at":{"$date":"2025-02-14T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001666","customer_id":"CUST_0106","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-02-15T05:00:00.000Z"},"updated_at":{"$date":"2025-02-15T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001667","customer_id":"CUST_0123","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-02-16T06:00:00.000Z"},"updated_at":{"$date":"2025-02-16T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001668","customer_id":"CUST_0140","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-02-17T07:00:00.000Z"},"updated_at":{"$date":"2025-02-17T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001669","customer_id":"CUST_0157","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-02-18T08:00:00.000Z"},"updated_at":{"$date":"2025-02-18T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001670","customer_id":"CUST_0174","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-02-19T09:00:00.000Z"},"updated_at":{"$date":"2025-02-19T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001671","customer_id":"CUST_0191","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-02-20T10:00:00.000Z"},"updated_at":{"$date":"2025-02-20T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001672","customer_id":"CUST_0008","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-02-21T11:00:00.000Z"},"updated_at":{"$date":"2025-02-21T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001673","customer_id":"CUST_0025","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-02-22T12:00:00.000Z"},"updated_at":{"$date":"2025-02-22T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001674","customer_id":"CUST_0042","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-02-23T13:00:00.000Z"},"updated_at":{"$date":"2025-02-23T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001675","customer_id":"CUST_0059","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-02-24T14:00:00.000Z"},"updated_at":{"$date":"2025-02-24T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001676","customer_id":"CUST_0076","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-02-25T15:00:00.000Z"},"updated_at":{"$date":"2025-02-25T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001677","customer_id":"CUST_0093","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-02-26T16:00:00.000Z"},"updated_at":{"$date":"2025-02-26T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001678","customer_id":"CUST_0110","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-02-27T17:00:00.000Z"},"updated_at":{"$date":"2025-02-27T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001679","customer_id":"CUST_0127","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-02-28T18:00:00.000Z"},"updated_at":{"$date":"2025-02-28T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001680","customer_id":"CUST_0144","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-03-01T19:00:00.000Z"},"updated_at":{"$date":"2025-03-01T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001681","customer_id":"CUST_0161","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-03-02T00:00:00.000Z"},"updated_at":{"$date":"2025-03-02T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001682","customer_id":"CUST_0178","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-03-03T01:00:00.000Z"},"updated_at":{"$date":"2025-03-03T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001683","customer_id":"CUST_0195","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-03-04T02:00:00.000Z"},"updated_at":{"$date":"2025-03-04T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001684","customer_id":"CUST_0012","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-03-05T03:00:00.000Z"},"updated_at":{"$date":"2025-03-05T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001685","customer_id":"CUST_0029","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-03-06T04:00:00.000Z"},"updated_at":{"$date":"2025-03-06T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001686","customer_id":"CUST_0046","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-03-07T05:00:00.000Z"},"updated_at":{"$date":"2025-03-07T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001687","customer_id":"CUST_0063","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-03-08T06:00:00.000Z"},"updated_at":{"$date":"2025-03-08T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001688","customer_id":"CUST_0080","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-03-09T07:00:00.000Z"},"updated_at":{"$date":"2025-03-09T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001689","customer_id":"CUST_0097","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-03-10T08:00:00.000Z"},"updated_at":{"$date":"2025-03-10T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001690","customer_id":"CUST_0114","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-03-11T09:00:00.000Z"},"updated_at":{"$date":"2025-03-11T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001691","customer_id":"CUST_0131","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-03-12T10:00:00.000Z"},"updated_at":{"$date":"2025-03-12T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001692","customer_id":"CUST_0148","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-03-13T11:00:00.000Z"},"updated_at":{"$date":"2025-03-13T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001693","customer_id":"CUST_0165","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-03-14T12:00:00.000Z"},"updated_at":{"$date":"2025-03-14T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001694","customer_id":"CUST_0182","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-03-15T13:00:00.000Z"},"updated_at":{"$date":"2025-03-15T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001695","customer_id":"CUST_0199","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-03-16T14:00:00.000Z"},"updated_at":{"$date":"2025-03-16T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001696","customer_id":"CUST_0016","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-03-17T15:00:00.000Z"},"updated_at":{"$date":"2025-03-17T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001697","customer_id":"CUST_0033","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-03-18T16:00:00.000Z"},"updated_at":{"$date":"2025-03-18T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001698","customer_id":"CUST_0050","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-03-19T17:00:00.000Z"},"updated_at":{"$date":"2025-03-19T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001699","customer_id":"CUST_0067","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-03-20T18:00:00.000Z"},"updated_at":{"$date":"2025-03-20T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001700","customer_id":"CUST_0084","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-03-21T19:00:00.000Z"},"updated_at":{"$date":"2025-03-21T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001701","customer_id":"CUST_0101","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-03-22T00:00:00.000Z"},"updated_at":{"$date":"2025-03-22T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001702","customer_id":"CUST_0118","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-03-23T01:00:00.000Z"},"updated_at":{"$date":"2025-03-23T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001703","customer_id":"CUST_0135","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-03-24T02:00:00.000Z"},"updated_at":{"$date":"2025-03-24T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001704","customer_id":"CUST_0152","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-03-25T03:00:00.000Z"},"updated_at":{"$date":"2025-03-25T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001705","customer_id":"CUST_0169","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-03-26T04:00:00.000Z"},"updated_at":{"$date":"2025-03-26T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001706","customer_id":"CUST_0186","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-03-27T05:00:00.000Z"},"updated_at":{"$date":"2025-03-27T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001707","customer_id":"CUST_0003","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-03-28T06:00:00.000Z"},"updated_at":{"$date":"2025-03-28T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001708","customer_id":"CUST_0020","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-03-29T07:00:00.000Z"},"updated_at":{"$date":"2025-03-29T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001709","customer_id":"CUST_0037","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-03-30T08:00:00.000Z"},"updated_at":{"$date":"2025-03-30T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001710","customer_id":"CUST_0054","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-03-31T09:00:00.000Z"},"updated_at":{"$date":"2025-03-31T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001711","customer_id":"CUST_0071","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-01-01T10:00:00.000Z"},"updated_at":{"$date":"2025-01-01T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001712","customer_id":"CUST_0088","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-01-02T11:00:00.000Z"},"updated_at":{"$date":"2025-01-02T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001713","customer_id":"CUST_0105","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-01-03T12:00:00.000Z"},"updated_at":{"$date":"2025-01-03T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001714","customer_id":"CUST_0122","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-01-04T13:00:00.000Z"},"updated_at":{"$date":"2025-01-04T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001715","customer_id":"CUST_0139","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-01-05T14:00:00.000Z"},"updated_at":{"$date":"2025-01-05T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001716","customer_id":"CUST_0156","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-01-06T15:00:00.000Z"},"updated_at":{"$date":"2025-01-06T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001717","customer_id":"CUST_0173","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-01-07T16:00:00.000Z"},"updated_at":{"$date":"2025-01-07T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001718","customer_id":"CUST_0190","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-01-08T17:00:00.000Z"},"updated_at":{"$date":"2025-01-08T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001719","customer_id":"CUST_0007","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-01-09T18:00:00.000Z"},"updated_at":{"$date":"2025-01-09T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001720","customer_id":"CUST_0024","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-01-10T19:00:00.000Z"},"updated_at":{"$date":"2025-01-10T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001721","customer_id":"CUST_0041","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-01-11T00:00:00.000Z"},"updated_at":{"$date":"2025-01-11T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001722","customer_id":"CUST_0058","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-01-12T01:00:00.000Z"},"updated_at":{"$date":"2025-01-12T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001723","customer_id":"CUST_0075","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-01-13T02:00:00.000Z"},"updated_at":{"$date":"2025-01-13T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001724","customer_id":"CUST_0092","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-01-14T03:00:00.000Z"},"updated_at":{"$date":"2025-01-14T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001725","customer_id":"CUST_0109","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-01-15T04:00:00.000Z"},"updated_at":{"$date":"2025-01-15T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001726","customer_id":"CUST_0126","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-01-16T05:00:00.000Z"},"updated_at":{"$date":"2025-01-16T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001727","customer_id":"CUST_0143","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-01-17T06:00:00.000Z"},"updated_at":{"$date":"2025-01-17T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001728","customer_id":"CUST_0160","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-01-18T07:00:00.000Z"},"updated_at":{"$date":"2025-01-18T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001729","customer_id":"CUST_0177","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-01-19T08:00:00.000Z"},"updated_at":{"$date":"2025-01-19T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001730","customer_id":"CUST_0194","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-01-20T09:00:00.000Z"},"updated_at":{"$date":"2025-01-20T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001731","customer_id":"CUST_0011","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-01-21T10:00:00.000Z"},"updated_at":{"$date":"2025-01-21T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001732","customer_id":"CUST_0028","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-01-22T11:00:00.000Z"},"updated_at":{"$date":"2025-01-22T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001733","customer_id":"CUST_0045","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-01-23T12:00:00.000Z"},"updated_at":{"$date":"2025-01-23T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001734","customer_id":"CUST_0062","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-01-24T13:00:00.000Z"},"updated_at":{"$date":"2025-01-24T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001735","customer_id":"CUST_0079","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-01-25T14:00:00.000Z"},"updated_at":{"$date":"2025-01-25T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001736","customer_id":"CUST_0096","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-01-26T15:00:00.000Z"},"updated_at":{"$date":"2025-01-26T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001737","customer_id":"CUST_0113","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-01-27T16:00:00.000Z"},"updated_at":{"$date":"2025-01-27T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001738","customer_id":"CUST_0130","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-01-28T17:00:00.000Z"},"updated_at":{"$date":"2025-01-28T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001739","customer_id":"CUST_0147","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-01-29T18:00:00.000Z"},"updated_at":{"$date":"2025-01-29T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001740","customer_id":"CUST_0164","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-01-30T19:00:00.000Z"},"updated_at":{"$date":"2025-01-30T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001741","customer_id":"CUST_0181","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-01-31T00:00:00.000Z"},"updated_at":{"$date":"2025-01-31T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001742","customer_id":"CUST_0198","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-02-01T01:00:00.000Z"},"updated_at":{"$date":"2025-02-01T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001743","customer_id":"CUST_0015","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-02-02T02:00:00.000Z"},"updated_at":{"$date":"2025-02-02T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001744","customer_id":"CUST_0032","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-02-03T03:00:00.000Z"},"updated_at":{"$date":"2025-02-03T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001745","customer_id":"CUST_0049","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-02-04T04:00:00.000Z"},"updated_at":{"$date":"2025-02-04T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001746","customer_id":"CUST_0066","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-02-05T05:00:00.000Z"},"updated_at":{"$date":"2025-02-05T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001747","customer_id":"CUST_0083","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-02-06T06:00:00.000Z"},"updated_at":{"$date":"2025-02-06T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001748","customer_id":"CUST_0100","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-02-07T07:00:00.000Z"},"updated_at":{"$date":"2025-02-07T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001749","customer_id":"CUST_0117","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-02-08T08:00:00.000Z"},"updated_at":{"$date":"2025-02-08T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001750","customer_id":"CUST_0134","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-02-09T09:00:00.000Z"},"updated_at":{"$date":"2025-02-09T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001751","customer_id":"CUST_0151","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-02-10T10:00:00.000Z"},"updated_at":{"$date":"2025-02-10T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001752","customer_id":"CUST_0168","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-02-11T11:00:00.000Z"},"updated_at":{"$date":"2025-02-11T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001753","customer_id":"CUST_0185","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-02-12T12:00:00.000Z"},"updated_at":{"$date":"2025-02-12T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001754","customer_id":"CUST_0002","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-02-13T13:00:00.000Z"},"updated_at":{"$date":"2025-02-13T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001755","customer_id":"CUST_0019","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-02-14T14:00:00.000Z"},"updated_at":{"$date":"2025-02-14T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001756","customer_id":"CUST_0036","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-02-15T15:00:00.000Z"},"updated_at":{"$date":"2025-02-15T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001757","customer_id":"CUST_0053","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-02-16T16:00:00.000Z"},"updated_at":{"$date":"2025-02-16T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001758","customer_id":"CUST_0070","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-02-17T17:00:00.000Z"},"updated_at":{"$date":"2025-02-17T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001759","customer_id":"CUST_0087","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-02-18T18:00:00.000Z"},"updated_at":{"$date":"2025-02-18T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001760","customer_id":"CUST_0104","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-02-19T19:00:00.000Z"},"updated_at":{"$date":"2025-02-19T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001761","customer_id":"CUST_0121","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-02-20T00:00:00.000Z"},"updated_at":{"$date":"2025-02-20T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001762","customer_id":"CUST_0138","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-02-21T01:00:00.000Z"},"updated_at":{"$date":"2025-02-21T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001763","customer_id":"CUST_0155","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-02-22T02:00:00.000Z"},"updated_at":{"$date":"2025-02-22T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001764","customer_id":"CUST_0172","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-02-23T03:00:00.000Z"},"updated_at":{"$date":"2025-02-23T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001765","customer_id":"CUST_0189","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-02-24T04:00:00.000Z"},"updated_at":{"$date":"2025-02-24T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001766","customer_id":"CUST_0006","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-02-25T05:00:00.000Z"},"updated_at":{"$date":"2025-02-25T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001767","customer_id":"CUST_0023","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-02-26T06:00:00.000Z"},"updated_at":{"$date":"2025-02-26T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001768","customer_id":"CUST_0040","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-02-27T07:00:00.000Z"},"updated_at":{"$date":"2025-02-27T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001769","customer_id":"CUST_0057","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-02-28T08:00:00.000Z"},"updated_at":{"$date":"2025-02-28T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001770","customer_id":"CUST_0074","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-03-01T09:00:00.000Z"},"updated_at":{"$date":"2025-03-01T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001771","customer_id":"CUST_0091","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-03-02T10:00:00.000Z"},"updated_at":{"$date":"2025-03-02T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001772","customer_id":"CUST_0108","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-03-03T11:00:00.000Z"},"updated_at":{"$date":"2025-03-03T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001773","customer_id":"CUST_0125","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-03-04T12:00:00.000Z"},"updated_at":{"$date":"2025-03-04T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001774","customer_id":"CUST_0142","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-03-05T13:00:00.000Z"},"updated_at":{"$date":"2025-03-05T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001775","customer_id":"CUST_0159","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-03-06T14:00:00.000Z"},"updated_at":{"$date":"2025-03-06T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001776","customer_id":"CUST_0176","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-03-07T15:00:00.000Z"},"updated_at":{"$date":"2025-03-07T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001777","customer_id":"CUST_0193","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-03-08T16:00:00.000Z"},"updated_at":{"$date":"2025-03-08T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001778","customer_id":"CUST_0010","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-03-09T17:00:00.000Z"},"updated_at":{"$date":"2025-03-09T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001779","customer_id":"CUST_0027","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-03-10T18:00:00.000Z"},"updated_at":{"$date":"2025-03-10T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001780","customer_id":"CUST_0044","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-03-11T19:00:00.000Z"},"updated_at":{"$date":"2025-03-11T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001781","customer_id":"CUST_0061","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-03-12T00:00:00.000Z"},"updated_at":{"$date":"2025-03-12T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001782","customer_id":"CUST_0078","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-03-13T01:00:00.000Z"},"updated_at":{"$date":"2025-03-13T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001783","customer_id":"CUST_0095","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-03-14T02:00:00.000Z"},"updated_at":{"$date":"2025-03-14T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001784","customer_id":"CUST_0112","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-03-15T03:00:00.000Z"},"updated_at":{"$date":"2025-03-15T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001785","customer_id":"CUST_0129","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-03-16T04:00:00.000Z"},"updated_at":{"$date":"2025-03-16T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001786","customer_id":"CUST_0146","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-03-17T05:00:00.000Z"},"updated_at":{"$date":"2025-03-17T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001787","customer_id":"CUST_0163","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-03-18T06:00:00.000Z"},"updated_at":{"$date":"2025-03-18T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001788","customer_id":"CUST_0180","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-03-19T07:00:00.000Z"},"updated_at":{"$date":"2025-03-19T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001789","customer_id":"CUST_0197","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-03-20T08:00:00.000Z"},"updated_at":{"$date":"2025-03-20T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001790","customer_id":"CUST_0014","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-03-21T09:00:00.000Z"},"updated_at":{"$date":"2025-03-21T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001791","customer_id":"CUST_0031","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-03-22T10:00:00.000Z"},"updated_at":{"$date":"2025-03-22T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001792","customer_id":"CUST_0048","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-03-23T11:00:00.000Z"},"updated_at":{"$date":"2025-03-23T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001793","customer_id":"CUST_0065","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-03-24T12:00:00.000Z"},"updated_at":{"$date":"2025-03-24T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001794","customer_id":"CUST_0082","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-03-25T13:00:00.000Z"},"updated_at":{"$date":"2025-03-25T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001795","customer_id":"CUST_0099","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-03-26T14:00:00.000Z"},"updated_at":{"$date":"2025-03-26T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001796","customer_id":"CUST_0116","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-03-27T15:00:00.000Z"},"updated_at":{"$date":"2025-03-27T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001797","customer_id":"CUST_0133","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-03-28T16:00:00.000Z"},"updated_at":{"$date":"2025-03-28T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001798","customer_id":"CUST_0150","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-03-29T17:00:00.000Z"},"updated_at":{"$date":"2025-03-29T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001799","customer_id":"CUST_0167","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-03-30T18:00:00.000Z"},"updated_at":{"$date":"2025-03-30T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001800","customer_id":"CUST_0184","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-03-31T19:00:00.000Z"},"updated_at":{"$date":"2025-03-31T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001801","customer_id":"CUST_0001","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001802","customer_id":"CUST_0018","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001803","customer_id":"CUST_0035","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001804","customer_id":"CUST_0052","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001805","customer_id":"CUST_0069","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001806","customer_id":"CUST_0086","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001807","customer_id":"CUST_0103","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001808","customer_id":"CUST_0120","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001809","customer_id":"CUST_0137","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001810","customer_id":"CUST_0154","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001811","customer_id":"CUST_0171","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001812","customer_id":"CUST_0188","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001813","customer_id":"CUST_0005","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001814","customer_id":"CUST_0022","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001815","customer_id":"CUST_0039","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001816","customer_id":"CUST_0056","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001817","customer_id":"CUST_0073","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001818","customer_id":"CUST_0090","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001819","customer_id":"CUST_0107","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001820","customer_id":"CUST_0124","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001821","customer_id":"CUST_0141","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-01-21T00:00:00.000Z"},"updated_at":{"$date":"2025-01-21T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001822","customer_id":"CUST_0158","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-01-22T01:00:00.000Z"},"updated_at":{"$date":"2025-01-22T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001823","customer_id":"CUST_0175","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-01-23T02:00:00.000Z"},"updated_at":{"$date":"2025-01-23T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001824","customer_id":"CUST_0192","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-01-24T03:00:00.000Z"},"updated_at":{"$date":"2025-01-24T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001825","customer_id":"CUST_0009","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-01-25T04:00:00.000Z"},"updated_at":{"$date":"2025-01-25T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001826","customer_id":"CUST_0026","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-01-26T05:00:00.000Z"},"updated_at":{"$date":"2025-01-26T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001827","customer_id":"CUST_0043","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-01-27T06:00:00.000Z"},"updated_at":{"$date":"2025-01-27T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001828","customer_id":"CUST_0060","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-01-28T07:00:00.000Z"},"updated_at":{"$date":"2025-01-28T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001829","customer_id":"CUST_0077","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-01-29T08:00:00.000Z"},"updated_at":{"$date":"2025-01-29T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001830","customer_id":"CUST_0094","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-01-30T09:00:00.000Z"},"updated_at":{"$date":"2025-01-30T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001831","customer_id":"CUST_0111","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-01-31T10:00:00.000Z"},"updated_at":{"$date":"2025-01-31T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001832","customer_id":"CUST_0128","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-02-01T11:00:00.000Z"},"updated_at":{"$date":"2025-02-01T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001833","customer_id":"CUST_0145","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-02-02T12:00:00.000Z"},"updated_at":{"$date":"2025-02-02T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001834","customer_id":"CUST_0162","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-02-03T13:00:00.000Z"},"updated_at":{"$date":"2025-02-03T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001835","customer_id":"CUST_0179","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-02-04T14:00:00.000Z"},"updated_at":{"$date":"2025-02-04T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001836","customer_id":"CUST_0196","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-02-05T15:00:00.000Z"},"updated_at":{"$date":"2025-02-05T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001837","customer_id":"CUST_0013","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-02-06T16:00:00.000Z"},"updated_at":{"$date":"2025-02-06T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001838","customer_id":"CUST_0030","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-02-07T17:00:00.000Z"},"updated_at":{"$date":"2025-02-07T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001839","customer_id":"CUST_0047","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-02-08T18:00:00.000Z"},"updated_at":{"$date":"2025-02-08T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001840","customer_id":"CUST_0064","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-02-09T19:00:00.000Z"},"updated_at":{"$date":"2025-02-09T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001841","customer_id":"CUST_0081","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-02-10T00:00:00.000Z"},"updated_at":{"$date":"2025-02-10T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001842","customer_id":"CUST_0098","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-02-11T01:00:00.000Z"},"updated_at":{"$date":"2025-02-11T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001843","customer_id":"CUST_0115","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-02-12T02:00:00.000Z"},"updated_at":{"$date":"2025-02-12T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001844","customer_id":"CUST_0132","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-02-13T03:00:00.000Z"},"updated_at":{"$date":"2025-02-13T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001845","customer_id":"CUST_0149","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-02-14T04:00:00.000Z"},"updated_at":{"$date":"2025-02-14T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001846","customer_id":"CUST_0166","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-02-15T05:00:00.000Z"},"updated_at":{"$date":"2025-02-15T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001847","customer_id":"CUST_0183","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-02-16T06:00:00.000Z"},"updated_at":{"$date":"2025-02-16T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001848","customer_id":"CUST_0200","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-02-17T07:00:00.000Z"},"updated_at":{"$date":"2025-02-17T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001849","customer_id":"CUST_0017","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-02-18T08:00:00.000Z"},"updated_at":{"$date":"2025-02-18T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001850","customer_id":"CUST_0034","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-02-19T09:00:00.000Z"},"updated_at":{"$date":"2025-02-19T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001851","customer_id":"CUST_0051","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-02-20T10:00:00.000Z"},"updated_at":{"$date":"2025-02-20T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001852","customer_id":"CUST_0068","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-02-21T11:00:00.000Z"},"updated_at":{"$date":"2025-02-21T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001853","customer_id":"CUST_0085","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-02-22T12:00:00.000Z"},"updated_at":{"$date":"2025-02-22T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001854","customer_id":"CUST_0102","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-02-23T13:00:00.000Z"},"updated_at":{"$date":"2025-02-23T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001855","customer_id":"CUST_0119","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-02-24T14:00:00.000Z"},"updated_at":{"$date":"2025-02-24T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001856","customer_id":"CUST_0136","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-02-25T15:00:00.000Z"},"updated_at":{"$date":"2025-02-25T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001857","customer_id":"CUST_0153","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-02-26T16:00:00.000Z"},"updated_at":{"$date":"2025-02-26T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001858","customer_id":"CUST_0170","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-02-27T17:00:00.000Z"},"updated_at":{"$date":"2025-02-27T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001859","customer_id":"CUST_0187","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-02-28T18:00:00.000Z"},"updated_at":{"$date":"2025-02-28T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001860","customer_id":"CUST_0004","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-03-01T19:00:00.000Z"},"updated_at":{"$date":"2025-03-01T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001861","customer_id":"CUST_0021","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-03-02T00:00:00.000Z"},"updated_at":{"$date":"2025-03-02T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001862","customer_id":"CUST_0038","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-03-03T01:00:00.000Z"},"updated_at":{"$date":"2025-03-03T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001863","customer_id":"CUST_0055","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-03-04T02:00:00.000Z"},"updated_at":{"$date":"2025-03-04T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001864","customer_id":"CUST_0072","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-03-05T03:00:00.000Z"},"updated_at":{"$date":"2025-03-05T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001865","customer_id":"CUST_0089","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-03-06T04:00:00.000Z"},"updated_at":{"$date":"2025-03-06T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001866","customer_id":"CUST_0106","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-03-07T05:00:00.000Z"},"updated_at":{"$date":"2025-03-07T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001867","customer_id":"CUST_0123","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-03-08T06:00:00.000Z"},"updated_at":{"$date":"2025-03-08T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001868","customer_id":"CUST_0140","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-03-09T07:00:00.000Z"},"updated_at":{"$date":"2025-03-09T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001869","customer_id":"CUST_0157","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-03-10T08:00:00.000Z"},"updated_at":{"$date":"2025-03-10T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001870","customer_id":"CUST_0174","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-03-11T09:00:00.000Z"},"updated_at":{"$date":"2025-03-11T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001871","customer_id":"CUST_0191","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-03-12T10:00:00.000Z"},"updated_at":{"$date":"2025-03-12T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001872","customer_id":"CUST_0008","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-03-13T11:00:00.000Z"},"updated_at":{"$date":"2025-03-13T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001873","customer_id":"CUST_0025","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-03-14T12:00:00.000Z"},"updated_at":{"$date":"2025-03-14T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001874","customer_id":"CUST_0042","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-03-15T13:00:00.000Z"},"updated_at":{"$date":"2025-03-15T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001875","customer_id":"CUST_0059","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-03-16T14:00:00.000Z"},"updated_at":{"$date":"2025-03-16T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001876","customer_id":"CUST_0076","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-03-17T15:00:00.000Z"},"updated_at":{"$date":"2025-03-17T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001877","customer_id":"CUST_0093","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-03-18T16:00:00.000Z"},"updated_at":{"$date":"2025-03-18T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001878","customer_id":"CUST_0110","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-03-19T17:00:00.000Z"},"updated_at":{"$date":"2025-03-19T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001879","customer_id":"CUST_0127","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-03-20T18:00:00.000Z"},"updated_at":{"$date":"2025-03-20T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001880","customer_id":"CUST_0144","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-03-21T19:00:00.000Z"},"updated_at":{"$date":"2025-03-21T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001881","customer_id":"CUST_0161","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-03-22T00:00:00.000Z"},"updated_at":{"$date":"2025-03-22T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001882","customer_id":"CUST_0178","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-03-23T01:00:00.000Z"},"updated_at":{"$date":"2025-03-23T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001883","customer_id":"CUST_0195","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-03-24T02:00:00.000Z"},"updated_at":{"$date":"2025-03-24T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001884","customer_id":"CUST_0012","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-03-25T03:00:00.000Z"},"updated_at":{"$date":"2025-03-25T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001885","customer_id":"CUST_0029","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-03-26T04:00:00.000Z"},"updated_at":{"$date":"2025-03-26T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001886","customer_id":"CUST_0046","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-03-27T05:00:00.000Z"},"updated_at":{"$date":"2025-03-27T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001887","customer_id":"CUST_0063","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-03-28T06:00:00.000Z"},"updated_at":{"$date":"2025-03-28T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001888","customer_id":"CUST_0080","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-03-29T07:00:00.000Z"},"updated_at":{"$date":"2025-03-29T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001889","customer_id":"CUST_0097","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-03-30T08:00:00.000Z"},"updated_at":{"$date":"2025-03-30T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001890","customer_id":"CUST_0114","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-03-31T09:00:00.000Z"},"updated_at":{"$date":"2025-03-31T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001891","customer_id":"CUST_0131","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-01-01T10:00:00.000Z"},"updated_at":{"$date":"2025-01-01T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001892","customer_id":"CUST_0148","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-01-02T11:00:00.000Z"},"updated_at":{"$date":"2025-01-02T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001893","customer_id":"CUST_0165","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-01-03T12:00:00.000Z"},"updated_at":{"$date":"2025-01-03T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001894","customer_id":"CUST_0182","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-01-04T13:00:00.000Z"},"updated_at":{"$date":"2025-01-04T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001895","customer_id":"CUST_0199","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-01-05T14:00:00.000Z"},"updated_at":{"$date":"2025-01-05T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001896","customer_id":"CUST_0016","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-01-06T15:00:00.000Z"},"updated_at":{"$date":"2025-01-06T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001897","customer_id":"CUST_0033","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-01-07T16:00:00.000Z"},"updated_at":{"$date":"2025-01-07T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001898","customer_id":"CUST_0050","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-01-08T17:00:00.000Z"},"updated_at":{"$date":"2025-01-08T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001899","customer_id":"CUST_0067","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-01-09T18:00:00.000Z"},"updated_at":{"$date":"2025-01-09T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001900","customer_id":"CUST_0084","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-01-10T19:00:00.000Z"},"updated_at":{"$date":"2025-01-10T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001901","customer_id":"CUST_0101","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":15.75,"placed_at":{"$date":"2025-01-11T00:00:00.000Z"},"updated_at":{"$date":"2025-01-11T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001902","customer_id":"CUST_0118","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":215.17,"placed_at":{"$date":"2025-01-12T01:00:00.000Z"},"updated_at":{"$date":"2025-01-12T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001903","customer_id":"CUST_0135","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":701.85,"placed_at":{"$date":"2025-01-13T02:00:00.000Z"},"updated_at":{"$date":"2025-01-13T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001904","customer_id":"CUST_0152","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":1201.57,"placed_at":{"$date":"2025-01-14T03:00:00.000Z"},"updated_at":{"$date":"2025-01-14T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001905","customer_id":"CUST_0169","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2028.26,"placed_at":{"$date":"2025-01-15T04:00:00.000Z"},"updated_at":{"$date":"2025-01-15T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001906","customer_id":"CUST_0186","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":222,"placed_at":{"$date":"2025-01-16T05:00:00.000Z"},"updated_at":{"$date":"2025-01-16T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001907","customer_id":"CUST_0003","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":813.3,"placed_at":{"$date":"2025-01-17T06:00:00.000Z"},"updated_at":{"$date":"2025-01-17T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001908","customer_id":"CUST_0020","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1794.97,"placed_at":{"$date":"2025-01-18T07:00:00.000Z"},"updated_at":{"$date":"2025-01-18T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001909","customer_id":"CUST_0037","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1062.83,"placed_at":{"$date":"2025-01-19T08:00:00.000Z"},"updated_at":{"$date":"2025-01-19T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001910","customer_id":"CUST_0054","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":895.76,"placed_at":{"$date":"2025-01-20T09:00:00.000Z"},"updated_at":{"$date":"2025-01-20T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001911","customer_id":"CUST_0071","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":53.25,"placed_at":{"$date":"2025-01-21T10:00:00.000Z"},"updated_at":{"$date":"2025-01-21T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001912","customer_id":"CUST_0088","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":323.93,"placed_at":{"$date":"2025-01-22T11:00:00.000Z"},"updated_at":{"$date":"2025-01-22T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001913","customer_id":"CUST_0105","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":900.6,"placed_at":{"$date":"2025-01-23T12:00:00.000Z"},"updated_at":{"$date":"2025-01-23T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001914","customer_id":"CUST_0122","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1449.08,"placed_at":{"$date":"2025-01-24T13:00:00.000Z"},"updated_at":{"$date":"2025-01-24T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001915","customer_id":"CUST_0139","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":2350.76,"placed_at":{"$date":"2025-01-25T14:00:00.000Z"},"updated_at":{"$date":"2025-01-25T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001916","customer_id":"CUST_0156","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":259.5,"placed_at":{"$date":"2025-01-26T15:00:00.000Z"},"updated_at":{"$date":"2025-01-26T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001917","customer_id":"CUST_0173","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":922.05,"placed_at":{"$date":"2025-01-27T16:00:00.000Z"},"updated_at":{"$date":"2025-01-27T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001918","customer_id":"CUST_0190","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1037.48,"placed_at":{"$date":"2025-01-28T17:00:00.000Z"},"updated_at":{"$date":"2025-01-28T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001919","customer_id":"CUST_0007","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":672.83,"placed_at":{"$date":"2025-01-29T18:00:00.000Z"},"updated_at":{"$date":"2025-01-29T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001920","customer_id":"CUST_0024","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":899.52,"placed_at":{"$date":"2025-01-30T19:00:00.000Z"},"updated_at":{"$date":"2025-01-30T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001921","customer_id":"CUST_0041","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":90.75,"placed_at":{"$date":"2025-01-31T00:00:00.000Z"},"updated_at":{"$date":"2025-01-31T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001922","customer_id":"CUST_0058","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":432.68,"placed_at":{"$date":"2025-02-01T01:00:00.000Z"},"updated_at":{"$date":"2025-02-01T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001923","customer_id":"CUST_0075","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1099.35,"placed_at":{"$date":"2025-02-02T02:00:00.000Z"},"updated_at":{"$date":"2025-02-02T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001924","customer_id":"CUST_0092","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":1696.58,"placed_at":{"$date":"2025-02-03T03:00:00.000Z"},"updated_at":{"$date":"2025-02-03T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001925","customer_id":"CUST_0109","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":2673.26,"placed_at":{"$date":"2025-02-04T04:00:00.000Z"},"updated_at":{"$date":"2025-02-04T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001926","customer_id":"CUST_0126","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":297,"placed_at":{"$date":"2025-02-05T05:00:00.000Z"},"updated_at":{"$date":"2025-02-05T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001927","customer_id":"CUST_0143","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":1030.8,"placed_at":{"$date":"2025-02-06T06:00:00.000Z"},"updated_at":{"$date":"2025-02-06T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001928","customer_id":"CUST_0160","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":561.23,"placed_at":{"$date":"2025-02-07T07:00:00.000Z"},"updated_at":{"$date":"2025-02-07T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001929","customer_id":"CUST_0177","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":582.83,"placed_at":{"$date":"2025-02-08T08:00:00.000Z"},"updated_at":{"$date":"2025-02-08T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001930","customer_id":"CUST_0194","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":1222.01,"placed_at":{"$date":"2025-02-09T09:00:00.000Z"},"updated_at":{"$date":"2025-02-09T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001931","customer_id":"CUST_0011","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":128.25,"placed_at":{"$date":"2025-02-10T10:00:00.000Z"},"updated_at":{"$date":"2025-02-10T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001932","customer_id":"CUST_0028","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":541.42,"placed_at":{"$date":"2025-02-11T11:00:00.000Z"},"updated_at":{"$date":"2025-02-11T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001933","customer_id":"CUST_0045","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":1298.1,"placed_at":{"$date":"2025-02-12T12:00:00.000Z"},"updated_at":{"$date":"2025-02-12T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001934","customer_id":"CUST_0062","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":1944.08,"placed_at":{"$date":"2025-02-13T13:00:00.000Z"},"updated_at":{"$date":"2025-02-13T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001935","customer_id":"CUST_0079","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2320.76,"placed_at":{"$date":"2025-02-14T14:00:00.000Z"},"updated_at":{"$date":"2025-02-14T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001936","customer_id":"CUST_0096","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":334.5,"placed_at":{"$date":"2025-02-15T15:00:00.000Z"},"updated_at":{"$date":"2025-02-15T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001937","customer_id":"CUST_0113","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":427.05,"placed_at":{"$date":"2025-02-16T16:00:00.000Z"},"updated_at":{"$date":"2025-02-16T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001938","customer_id":"CUST_0130","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":403.73,"placed_at":{"$date":"2025-02-17T17:00:00.000Z"},"updated_at":{"$date":"2025-02-17T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001939","customer_id":"CUST_0147","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":830.33,"placed_at":{"$date":"2025-02-18T18:00:00.000Z"},"updated_at":{"$date":"2025-02-18T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001940","customer_id":"CUST_0164","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1544.52,"placed_at":{"$date":"2025-02-19T19:00:00.000Z"},"updated_at":{"$date":"2025-02-19T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001941","customer_id":"CUST_0181","status":"pending","region":"amer","channel":"marketplace","currency":"USD","item_count":1,"total_amount":165.75,"placed_at":{"$date":"2025-02-20T00:00:00.000Z"},"updated_at":{"$date":"2025-02-20T01:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001942","customer_id":"CUST_0198","status":"confirmed","region":"emea","channel":"web","currency":"USD","item_count":2,"total_amount":650.17,"placed_at":{"$date":"2025-02-21T01:00:00.000Z"},"updated_at":{"$date":"2025-02-21T02:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001943","customer_id":"CUST_0015","status":"shipped","region":"apac","channel":"mobile","currency":"USD","item_count":3,"total_amount":1496.85,"placed_at":{"$date":"2025-02-22T02:00:00.000Z"},"updated_at":{"$date":"2025-02-22T03:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001944","customer_id":"CUST_0032","status":"delivered","region":"canada","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2191.58,"placed_at":{"$date":"2025-02-23T03:00:00.000Z"},"updated_at":{"$date":"2025-02-23T04:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001945","customer_id":"CUST_0049","status":"cancelled","region":"amer","channel":"web","currency":"USD","item_count":5,"total_amount":2287.02,"placed_at":{"$date":"2025-02-24T04:00:00.000Z"},"updated_at":{"$date":"2025-02-24T05:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001946","customer_id":"CUST_0066","status":"pending","region":"emea","channel":"mobile","currency":"USD","item_count":1,"total_amount":372,"placed_at":{"$date":"2025-02-25T05:00:00.000Z"},"updated_at":{"$date":"2025-02-25T06:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001947","customer_id":"CUST_0083","status":"confirmed","region":"apac","channel":"marketplace","currency":"USD","item_count":2,"total_amount":160.8,"placed_at":{"$date":"2025-02-26T06:00:00.000Z"},"updated_at":{"$date":"2025-02-26T07:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001948","customer_id":"CUST_0100","status":"shipped","region":"canada","channel":"web","currency":"USD","item_count":3,"total_amount":602.47,"placed_at":{"$date":"2025-02-27T07:00:00.000Z"},"updated_at":{"$date":"2025-02-27T08:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001949","customer_id":"CUST_0117","status":"delivered","region":"amer","channel":"mobile","currency":"USD","item_count":4,"total_amount":1077.83,"placed_at":{"$date":"2025-02-28T08:00:00.000Z"},"updated_at":{"$date":"2025-02-28T09:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001950","customer_id":"CUST_0134","status":"cancelled","region":"emea","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1867.01,"placed_at":{"$date":"2025-03-01T09:00:00.000Z"},"updated_at":{"$date":"2025-03-01T10:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001951","customer_id":"CUST_0151","status":"pending","region":"apac","channel":"web","currency":"USD","item_count":1,"total_amount":203.25,"placed_at":{"$date":"2025-03-02T10:00:00.000Z"},"updated_at":{"$date":"2025-03-02T11:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001952","customer_id":"CUST_0168","status":"confirmed","region":"canada","channel":"mobile","currency":"USD","item_count":2,"total_amount":758.92,"placed_at":{"$date":"2025-03-03T11:00:00.000Z"},"updated_at":{"$date":"2025-03-03T12:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001953","customer_id":"CUST_0185","status":"shipped","region":"amer","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1695.6,"placed_at":{"$date":"2025-03-04T12:00:00.000Z"},"updated_at":{"$date":"2025-03-04T13:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001954","customer_id":"CUST_0002","status":"delivered","region":"emea","channel":"web","currency":"USD","item_count":4,"total_amount":2064.08,"placed_at":{"$date":"2025-03-05T13:00:00.000Z"},"updated_at":{"$date":"2025-03-05T14:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001955","customer_id":"CUST_0019","status":"cancelled","region":"apac","channel":"mobile","currency":"USD","item_count":5,"total_amount":734.51,"placed_at":{"$date":"2025-03-06T14:00:00.000Z"},"updated_at":{"$date":"2025-03-06T15:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001956","customer_id":"CUST_0036","status":"pending","region":"canada","channel":"marketplace","currency":"USD","item_count":1,"total_amount":34.5,"placed_at":{"$date":"2025-03-07T15:00:00.000Z"},"updated_at":{"$date":"2025-03-07T16:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001957","customer_id":"CUST_0053","status":"confirmed","region":"amer","channel":"web","currency":"USD","item_count":2,"total_amount":269.55,"placed_at":{"$date":"2025-03-08T16:00:00.000Z"},"updated_at":{"$date":"2025-03-08T17:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001958","customer_id":"CUST_0070","status":"shipped","region":"emea","channel":"mobile","currency":"USD","item_count":3,"total_amount":801.23,"placed_at":{"$date":"2025-03-09T17:00:00.000Z"},"updated_at":{"$date":"2025-03-09T18:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001959","customer_id":"CUST_0087","status":"delivered","region":"apac","channel":"marketplace","currency":"USD","item_count":4,"total_amount":1325.33,"placed_at":{"$date":"2025-03-10T18:00:00.000Z"},"updated_at":{"$date":"2025-03-10T19:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001960","customer_id":"CUST_0104","status":"cancelled","region":"canada","channel":"web","currency":"USD","item_count":5,"total_amount":2189.52,"placed_at":{"$date":"2025-03-11T19:00:00.000Z"},"updated_at":{"$date":"2025-03-11T20:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001961","customer_id":"CUST_0121","status":"pending","region":"amer","channel":"mobile","currency":"USD","item_count":1,"total_amount":240.75,"placed_at":{"$date":"2025-03-12T00:00:00.000Z"},"updated_at":{"$date":"2025-03-12T01:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001962","customer_id":"CUST_0138","status":"confirmed","region":"emea","channel":"marketplace","currency":"USD","item_count":2,"total_amount":867.67,"placed_at":{"$date":"2025-03-13T01:00:00.000Z"},"updated_at":{"$date":"2025-03-13T02:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001963","customer_id":"CUST_0155","status":"shipped","region":"apac","channel":"web","currency":"USD","item_count":3,"total_amount":1894.35,"placed_at":{"$date":"2025-03-14T02:00:00.000Z"},"updated_at":{"$date":"2025-03-14T03:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001964","customer_id":"CUST_0172","status":"delivered","region":"canada","channel":"mobile","currency":"USD","item_count":4,"total_amount":549.08,"placed_at":{"$date":"2025-03-15T03:00:00.000Z"},"updated_at":{"$date":"2025-03-15T04:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001965","customer_id":"CUST_0189","status":"cancelled","region":"amer","channel":"marketplace","currency":"USD","item_count":5,"total_amount":738.27,"placed_at":{"$date":"2025-03-16T04:00:00.000Z"},"updated_at":{"$date":"2025-03-16T05:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001966","customer_id":"CUST_0006","status":"pending","region":"emea","channel":"web","currency":"USD","item_count":1,"total_amount":72,"placed_at":{"$date":"2025-03-17T05:00:00.000Z"},"updated_at":{"$date":"2025-03-17T06:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001967","customer_id":"CUST_0023","status":"confirmed","region":"apac","channel":"mobile","currency":"USD","item_count":2,"total_amount":378.3,"placed_at":{"$date":"2025-03-18T06:00:00.000Z"},"updated_at":{"$date":"2025-03-18T07:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001968","customer_id":"CUST_0040","status":"shipped","region":"canada","channel":"marketplace","currency":"USD","item_count":3,"total_amount":999.98,"placed_at":{"$date":"2025-03-19T07:00:00.000Z"},"updated_at":{"$date":"2025-03-19T08:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001969","customer_id":"CUST_0057","status":"delivered","region":"amer","channel":"web","currency":"USD","item_count":4,"total_amount":1572.83,"placed_at":{"$date":"2025-03-20T08:00:00.000Z"},"updated_at":{"$date":"2025-03-20T09:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001970","customer_id":"CUST_0074","status":"cancelled","region":"emea","channel":"mobile","currency":"USD","item_count":5,"total_amount":2512.01,"placed_at":{"$date":"2025-03-21T09:00:00.000Z"},"updated_at":{"$date":"2025-03-21T10:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001971","customer_id":"CUST_0091","status":"pending","region":"apac","channel":"marketplace","currency":"USD","item_count":1,"total_amount":278.25,"placed_at":{"$date":"2025-03-22T10:00:00.000Z"},"updated_at":{"$date":"2025-03-22T11:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001972","customer_id":"CUST_0108","status":"confirmed","region":"canada","channel":"web","currency":"USD","item_count":2,"total_amount":976.43,"placed_at":{"$date":"2025-03-23T11:00:00.000Z"},"updated_at":{"$date":"2025-03-23T12:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001973","customer_id":"CUST_0125","status":"shipped","region":"amer","channel":"mobile","currency":"USD","item_count":3,"total_amount":1136.85,"placed_at":{"$date":"2025-03-24T12:00:00.000Z"},"updated_at":{"$date":"2025-03-24T13:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001974","customer_id":"CUST_0142","status":"delivered","region":"emea","channel":"marketplace","currency":"USD","item_count":4,"total_amount":459.08,"placed_at":{"$date":"2025-03-25T13:00:00.000Z"},"updated_at":{"$date":"2025-03-25T14:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001975","customer_id":"CUST_0159","status":"cancelled","region":"apac","channel":"web","currency":"USD","item_count":5,"total_amount":1060.76,"placed_at":{"$date":"2025-03-26T14:00:00.000Z"},"updated_at":{"$date":"2025-03-26T15:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001976","customer_id":"CUST_0176","status":"pending","region":"canada","channel":"mobile","currency":"USD","item_count":1,"total_amount":109.5,"placed_at":{"$date":"2025-03-27T15:00:00.000Z"},"updated_at":{"$date":"2025-03-27T16:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001977","customer_id":"CUST_0193","status":"confirmed","region":"amer","channel":"marketplace","currency":"USD","item_count":2,"total_amount":487.05,"placed_at":{"$date":"2025-03-28T16:00:00.000Z"},"updated_at":{"$date":"2025-03-28T17:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001978","customer_id":"CUST_0010","status":"shipped","region":"emea","channel":"web","currency":"USD","item_count":3,"total_amount":1198.73,"placed_at":{"$date":"2025-03-29T17:00:00.000Z"},"updated_at":{"$date":"2025-03-29T18:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001979","customer_id":"CUST_0027","status":"delivered","region":"apac","channel":"mobile","currency":"USD","item_count":4,"total_amount":1820.33,"placed_at":{"$date":"2025-03-30T18:00:00.000Z"},"updated_at":{"$date":"2025-03-30T19:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001980","customer_id":"CUST_0044","status":"cancelled","region":"canada","channel":"marketplace","currency":"USD","item_count":5,"total_amount":2834.52,"placed_at":{"$date":"2025-03-31T19:00:00.000Z"},"updated_at":{"$date":"2025-03-31T20:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001981","customer_id":"CUST_0061","status":"pending","region":"amer","channel":"web","currency":"USD","item_count":1,"total_amount":315.75,"placed_at":{"$date":"2025-01-01T00:00:00.000Z"},"updated_at":{"$date":"2025-01-01T01:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001982","customer_id":"CUST_0078","status":"confirmed","region":"emea","channel":"mobile","currency":"USD","item_count":2,"total_amount":1085.18,"placed_at":{"$date":"2025-01-02T01:00:00.000Z"},"updated_at":{"$date":"2025-01-02T02:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001983","customer_id":"CUST_0095","status":"shipped","region":"apac","channel":"marketplace","currency":"USD","item_count":3,"total_amount":304.35,"placed_at":{"$date":"2025-01-03T02:00:00.000Z"},"updated_at":{"$date":"2025-01-03T03:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001984","customer_id":"CUST_0112","status":"delivered","region":"canada","channel":"web","currency":"USD","item_count":4,"total_amount":706.58,"placed_at":{"$date":"2025-01-04T03:00:00.000Z"},"updated_at":{"$date":"2025-01-04T04:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001985","customer_id":"CUST_0129","status":"cancelled","region":"amer","channel":"mobile","currency":"USD","item_count":5,"total_amount":1383.27,"placed_at":{"$date":"2025-01-05T04:00:00.000Z"},"updated_at":{"$date":"2025-01-05T05:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001986","customer_id":"CUST_0146","status":"pending","region":"emea","channel":"marketplace","currency":"USD","item_count":1,"total_amount":147,"placed_at":{"$date":"2025-01-06T05:00:00.000Z"},"updated_at":{"$date":"2025-01-06T06:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001987","customer_id":"CUST_0163","status":"confirmed","region":"apac","channel":"web","currency":"USD","item_count":2,"total_amount":595.8,"placed_at":{"$date":"2025-01-07T06:00:00.000Z"},"updated_at":{"$date":"2025-01-07T07:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001988","customer_id":"CUST_0180","status":"shipped","region":"canada","channel":"mobile","currency":"USD","item_count":3,"total_amount":1397.47,"placed_at":{"$date":"2025-01-08T07:00:00.000Z"},"updated_at":{"$date":"2025-01-08T08:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001989","customer_id":"CUST_0197","status":"delivered","region":"amer","channel":"marketplace","currency":"USD","item_count":4,"total_amount":2067.83,"placed_at":{"$date":"2025-01-09T08:00:00.000Z"},"updated_at":{"$date":"2025-01-09T09:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001990","customer_id":"CUST_0014","status":"cancelled","region":"emea","channel":"web","currency":"USD","item_count":5,"total_amount":2125.76,"placed_at":{"$date":"2025-01-10T09:00:00.000Z"},"updated_at":{"$date":"2025-01-10T10:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001991","customer_id":"CUST_0031","status":"pending","region":"apac","channel":"mobile","currency":"USD","item_count":1,"total_amount":353.25,"placed_at":{"$date":"2025-01-11T10:00:00.000Z"},"updated_at":{"$date":"2025-01-11T11:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001992","customer_id":"CUST_0048","status":"confirmed","region":"canada","channel":"marketplace","currency":"USD","item_count":2,"total_amount":106.43,"placed_at":{"$date":"2025-01-12T11:00:00.000Z"},"updated_at":{"$date":"2025-01-12T12:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001993","customer_id":"CUST_0065","status":"shipped","region":"amer","channel":"web","currency":"USD","item_count":3,"total_amount":503.1,"placed_at":{"$date":"2025-01-13T12:00:00.000Z"},"updated_at":{"$date":"2025-01-13T13:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_001994","customer_id":"CUST_0082","status":"delivered","region":"emea","channel":"mobile","currency":"USD","item_count":4,"total_amount":954.08,"placed_at":{"$date":"2025-01-14T13:00:00.000Z"},"updated_at":{"$date":"2025-01-14T14:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} +{"order_id":"ORD_001995","customer_id":"CUST_0099","status":"cancelled","region":"apac","channel":"marketplace","currency":"USD","item_count":5,"total_amount":1705.76,"placed_at":{"$date":"2025-01-15T14:00:00.000Z"},"updated_at":{"$date":"2025-01-15T15:00:00.000Z"},"shipping":{"city":"Austin","method":"pickup"}} +{"order_id":"ORD_001996","customer_id":"CUST_0116","status":"pending","region":"canada","channel":"web","currency":"USD","item_count":1,"total_amount":184.5,"placed_at":{"$date":"2025-01-16T15:00:00.000Z"},"updated_at":{"$date":"2025-01-16T16:00:00.000Z"},"shipping":{"city":"Toronto","method":"standard"}} +{"order_id":"ORD_001997","customer_id":"CUST_0133","status":"confirmed","region":"amer","channel":"mobile","currency":"USD","item_count":2,"total_amount":704.55,"placed_at":{"$date":"2025-01-17T16:00:00.000Z"},"updated_at":{"$date":"2025-01-17T17:00:00.000Z"},"shipping":{"city":"London","method":"express"}} +{"order_id":"ORD_001998","customer_id":"CUST_0150","status":"shipped","region":"emea","channel":"marketplace","currency":"USD","item_count":3,"total_amount":1596.23,"placed_at":{"$date":"2025-01-18T17:00:00.000Z"},"updated_at":{"$date":"2025-01-18T18:00:00.000Z"},"shipping":{"city":"Tokyo","method":"pickup"}} +{"order_id":"ORD_001999","customer_id":"CUST_0167","status":"delivered","region":"apac","channel":"web","currency":"USD","item_count":4,"total_amount":2315.33,"placed_at":{"$date":"2025-01-19T18:00:00.000Z"},"updated_at":{"$date":"2025-01-19T19:00:00.000Z"},"shipping":{"city":"Seattle","method":"standard"}} +{"order_id":"ORD_002000","customer_id":"CUST_0184","status":"cancelled","region":"canada","channel":"mobile","currency":"USD","item_count":5,"total_amount":1323.27,"placed_at":{"$date":"2025-01-20T19:00:00.000Z"},"updated_at":{"$date":"2025-01-20T20:00:00.000Z"},"shipping":{"city":"Portland","method":"express"}} diff --git a/scenarios/ecommerce-advanced/data/collections/payments.jsonl b/scenarios/ecommerce-advanced/data/collections/payments.jsonl new file mode 100644 index 0000000..e98fafc --- /dev/null +++ b/scenarios/ecommerce-advanced/data/collections/payments.jsonl @@ -0,0 +1,2000 @@ +{"payment_id":"PAY_000001","order_id":"ORD_000001","customer_id":"CUST_0001","amount":15.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_000002","order_id":"ORD_000002","customer_id":"CUST_0018","amount":215.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_000003","order_id":"ORD_000003","customer_id":"CUST_0035","amount":701.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_000004","order_id":"ORD_000004","customer_id":"CUST_0052","amount":1201.57,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_000005","order_id":"ORD_000005","customer_id":"CUST_0069","amount":2028.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_000006","order_id":"ORD_000006","customer_id":"CUST_0086","amount":222,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_000007","order_id":"ORD_000007","customer_id":"CUST_0103","amount":813.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_000008","order_id":"ORD_000008","customer_id":"CUST_0120","amount":1794.97,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_000009","order_id":"ORD_000009","customer_id":"CUST_0137","amount":1062.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_000010","order_id":"ORD_000010","customer_id":"CUST_0154","amount":895.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_000011","order_id":"ORD_000011","customer_id":"CUST_0171","amount":53.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_000012","order_id":"ORD_000012","customer_id":"CUST_0188","amount":323.93,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_000013","order_id":"ORD_000013","customer_id":"CUST_0005","amount":900.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_000014","order_id":"ORD_000014","customer_id":"CUST_0022","amount":1449.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_000015","order_id":"ORD_000015","customer_id":"CUST_0039","amount":2350.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_000016","order_id":"ORD_000016","customer_id":"CUST_0056","amount":259.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_000017","order_id":"ORD_000017","customer_id":"CUST_0073","amount":922.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_000018","order_id":"ORD_000018","customer_id":"CUST_0090","amount":1037.48,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_000019","order_id":"ORD_000019","customer_id":"CUST_0107","amount":672.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_000020","order_id":"ORD_000020","customer_id":"CUST_0124","amount":899.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} +{"payment_id":"PAY_000021","order_id":"ORD_000021","customer_id":"CUST_0141","amount":90.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T02:00:00.000Z"}} +{"payment_id":"PAY_000022","order_id":"ORD_000022","customer_id":"CUST_0158","amount":432.68,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T03:00:00.000Z"}} +{"payment_id":"PAY_000023","order_id":"ORD_000023","customer_id":"CUST_0175","amount":1099.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T04:00:00.000Z"}} +{"payment_id":"PAY_000024","order_id":"ORD_000024","customer_id":"CUST_0192","amount":1696.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T05:00:00.000Z"}} +{"payment_id":"PAY_000025","order_id":"ORD_000025","customer_id":"CUST_0009","amount":2673.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T06:00:00.000Z"}} +{"payment_id":"PAY_000026","order_id":"ORD_000026","customer_id":"CUST_0026","amount":297,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T07:00:00.000Z"}} +{"payment_id":"PAY_000027","order_id":"ORD_000027","customer_id":"CUST_0043","amount":1030.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T08:00:00.000Z"}} +{"payment_id":"PAY_000028","order_id":"ORD_000028","customer_id":"CUST_0060","amount":561.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T09:00:00.000Z"}} +{"payment_id":"PAY_000029","order_id":"ORD_000029","customer_id":"CUST_0077","amount":582.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T10:00:00.000Z"}} +{"payment_id":"PAY_000030","order_id":"ORD_000030","customer_id":"CUST_0094","amount":1222.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T11:00:00.000Z"}} +{"payment_id":"PAY_000031","order_id":"ORD_000031","customer_id":"CUST_0111","amount":128.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T12:00:00.000Z"}} +{"payment_id":"PAY_000032","order_id":"ORD_000032","customer_id":"CUST_0128","amount":541.42,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T13:00:00.000Z"}} +{"payment_id":"PAY_000033","order_id":"ORD_000033","customer_id":"CUST_0145","amount":1298.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T14:00:00.000Z"}} +{"payment_id":"PAY_000034","order_id":"ORD_000034","customer_id":"CUST_0162","amount":1944.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T15:00:00.000Z"}} +{"payment_id":"PAY_000035","order_id":"ORD_000035","customer_id":"CUST_0179","amount":2320.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T16:00:00.000Z"}} +{"payment_id":"PAY_000036","order_id":"ORD_000036","customer_id":"CUST_0196","amount":334.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T17:00:00.000Z"}} +{"payment_id":"PAY_000037","order_id":"ORD_000037","customer_id":"CUST_0013","amount":427.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T18:00:00.000Z"}} +{"payment_id":"PAY_000038","order_id":"ORD_000038","customer_id":"CUST_0030","amount":403.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T19:00:00.000Z"}} +{"payment_id":"PAY_000039","order_id":"ORD_000039","customer_id":"CUST_0047","amount":830.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T20:00:00.000Z"}} +{"payment_id":"PAY_000040","order_id":"ORD_000040","customer_id":"CUST_0064","amount":1544.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T21:00:00.000Z"}} +{"payment_id":"PAY_000041","order_id":"ORD_000041","customer_id":"CUST_0081","amount":165.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T02:00:00.000Z"}} +{"payment_id":"PAY_000042","order_id":"ORD_000042","customer_id":"CUST_0098","amount":650.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T03:00:00.000Z"}} +{"payment_id":"PAY_000043","order_id":"ORD_000043","customer_id":"CUST_0115","amount":1496.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T04:00:00.000Z"}} +{"payment_id":"PAY_000044","order_id":"ORD_000044","customer_id":"CUST_0132","amount":2191.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T05:00:00.000Z"}} +{"payment_id":"PAY_000045","order_id":"ORD_000045","customer_id":"CUST_0149","amount":2287.02,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T06:00:00.000Z"}} +{"payment_id":"PAY_000046","order_id":"ORD_000046","customer_id":"CUST_0166","amount":372,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T07:00:00.000Z"}} +{"payment_id":"PAY_000047","order_id":"ORD_000047","customer_id":"CUST_0183","amount":160.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T08:00:00.000Z"}} +{"payment_id":"PAY_000048","order_id":"ORD_000048","customer_id":"CUST_0200","amount":602.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T09:00:00.000Z"}} +{"payment_id":"PAY_000049","order_id":"ORD_000049","customer_id":"CUST_0017","amount":1077.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T10:00:00.000Z"}} +{"payment_id":"PAY_000050","order_id":"ORD_000050","customer_id":"CUST_0034","amount":1867.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T11:00:00.000Z"}} +{"payment_id":"PAY_000051","order_id":"ORD_000051","customer_id":"CUST_0051","amount":203.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T12:00:00.000Z"}} +{"payment_id":"PAY_000052","order_id":"ORD_000052","customer_id":"CUST_0068","amount":758.92,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T13:00:00.000Z"}} +{"payment_id":"PAY_000053","order_id":"ORD_000053","customer_id":"CUST_0085","amount":1695.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T14:00:00.000Z"}} +{"payment_id":"PAY_000054","order_id":"ORD_000054","customer_id":"CUST_0102","amount":2064.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T15:00:00.000Z"}} +{"payment_id":"PAY_000055","order_id":"ORD_000055","customer_id":"CUST_0119","amount":734.51,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T16:00:00.000Z"}} +{"payment_id":"PAY_000056","order_id":"ORD_000056","customer_id":"CUST_0136","amount":34.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T17:00:00.000Z"}} +{"payment_id":"PAY_000057","order_id":"ORD_000057","customer_id":"CUST_0153","amount":269.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T18:00:00.000Z"}} +{"payment_id":"PAY_000058","order_id":"ORD_000058","customer_id":"CUST_0170","amount":801.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T19:00:00.000Z"}} +{"payment_id":"PAY_000059","order_id":"ORD_000059","customer_id":"CUST_0187","amount":1325.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T20:00:00.000Z"}} +{"payment_id":"PAY_000060","order_id":"ORD_000060","customer_id":"CUST_0004","amount":2189.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T21:00:00.000Z"}} +{"payment_id":"PAY_000061","order_id":"ORD_000061","customer_id":"CUST_0021","amount":240.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T02:00:00.000Z"}} +{"payment_id":"PAY_000062","order_id":"ORD_000062","customer_id":"CUST_0038","amount":867.67,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T03:00:00.000Z"}} +{"payment_id":"PAY_000063","order_id":"ORD_000063","customer_id":"CUST_0055","amount":1894.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T04:00:00.000Z"}} +{"payment_id":"PAY_000064","order_id":"ORD_000064","customer_id":"CUST_0072","amount":549.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T05:00:00.000Z"}} +{"payment_id":"PAY_000065","order_id":"ORD_000065","customer_id":"CUST_0089","amount":738.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T06:00:00.000Z"}} +{"payment_id":"PAY_000066","order_id":"ORD_000066","customer_id":"CUST_0106","amount":72,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T07:00:00.000Z"}} +{"payment_id":"PAY_000067","order_id":"ORD_000067","customer_id":"CUST_0123","amount":378.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T08:00:00.000Z"}} +{"payment_id":"PAY_000068","order_id":"ORD_000068","customer_id":"CUST_0140","amount":999.98,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T09:00:00.000Z"}} +{"payment_id":"PAY_000069","order_id":"ORD_000069","customer_id":"CUST_0157","amount":1572.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T10:00:00.000Z"}} +{"payment_id":"PAY_000070","order_id":"ORD_000070","customer_id":"CUST_0174","amount":2512.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T11:00:00.000Z"}} +{"payment_id":"PAY_000071","order_id":"ORD_000071","customer_id":"CUST_0191","amount":278.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"payment_id":"PAY_000072","order_id":"ORD_000072","customer_id":"CUST_0008","amount":976.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T13:00:00.000Z"}} +{"payment_id":"PAY_000073","order_id":"ORD_000073","customer_id":"CUST_0025","amount":1136.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T14:00:00.000Z"}} +{"payment_id":"PAY_000074","order_id":"ORD_000074","customer_id":"CUST_0042","amount":459.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T15:00:00.000Z"}} +{"payment_id":"PAY_000075","order_id":"ORD_000075","customer_id":"CUST_0059","amount":1060.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T16:00:00.000Z"}} +{"payment_id":"PAY_000076","order_id":"ORD_000076","customer_id":"CUST_0076","amount":109.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T17:00:00.000Z"}} +{"payment_id":"PAY_000077","order_id":"ORD_000077","customer_id":"CUST_0093","amount":487.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T18:00:00.000Z"}} +{"payment_id":"PAY_000078","order_id":"ORD_000078","customer_id":"CUST_0110","amount":1198.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T19:00:00.000Z"}} +{"payment_id":"PAY_000079","order_id":"ORD_000079","customer_id":"CUST_0127","amount":1820.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T20:00:00.000Z"}} +{"payment_id":"PAY_000080","order_id":"ORD_000080","customer_id":"CUST_0144","amount":2834.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T21:00:00.000Z"}} +{"payment_id":"PAY_000081","order_id":"ORD_000081","customer_id":"CUST_0161","amount":315.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T02:00:00.000Z"}} +{"payment_id":"PAY_000082","order_id":"ORD_000082","customer_id":"CUST_0178","amount":1085.18,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T03:00:00.000Z"}} +{"payment_id":"PAY_000083","order_id":"ORD_000083","customer_id":"CUST_0195","amount":304.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T04:00:00.000Z"}} +{"payment_id":"PAY_000084","order_id":"ORD_000084","customer_id":"CUST_0012","amount":706.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T05:00:00.000Z"}} +{"payment_id":"PAY_000085","order_id":"ORD_000085","customer_id":"CUST_0029","amount":1383.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T06:00:00.000Z"}} +{"payment_id":"PAY_000086","order_id":"ORD_000086","customer_id":"CUST_0046","amount":147,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T07:00:00.000Z"}} +{"payment_id":"PAY_000087","order_id":"ORD_000087","customer_id":"CUST_0063","amount":595.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T08:00:00.000Z"}} +{"payment_id":"PAY_000088","order_id":"ORD_000088","customer_id":"CUST_0080","amount":1397.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T09:00:00.000Z"}} +{"payment_id":"PAY_000089","order_id":"ORD_000089","customer_id":"CUST_0097","amount":2067.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T10:00:00.000Z"}} +{"payment_id":"PAY_000090","order_id":"ORD_000090","customer_id":"CUST_0114","amount":2125.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T11:00:00.000Z"}} +{"payment_id":"PAY_000091","order_id":"ORD_000091","customer_id":"CUST_0131","amount":353.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T12:00:00.000Z"}} +{"payment_id":"PAY_000092","order_id":"ORD_000092","customer_id":"CUST_0148","amount":106.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T13:00:00.000Z"}} +{"payment_id":"PAY_000093","order_id":"ORD_000093","customer_id":"CUST_0165","amount":503.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T14:00:00.000Z"}} +{"payment_id":"PAY_000094","order_id":"ORD_000094","customer_id":"CUST_0182","amount":954.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T15:00:00.000Z"}} +{"payment_id":"PAY_000095","order_id":"ORD_000095","customer_id":"CUST_0199","amount":1705.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T16:00:00.000Z"}} +{"payment_id":"PAY_000096","order_id":"ORD_000096","customer_id":"CUST_0016","amount":184.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T17:00:00.000Z"}} +{"payment_id":"PAY_000097","order_id":"ORD_000097","customer_id":"CUST_0033","amount":704.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T18:00:00.000Z"}} +{"payment_id":"PAY_000098","order_id":"ORD_000098","customer_id":"CUST_0050","amount":1596.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T19:00:00.000Z"}} +{"payment_id":"PAY_000099","order_id":"ORD_000099","customer_id":"CUST_0067","amount":2315.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T20:00:00.000Z"}} +{"payment_id":"PAY_000100","order_id":"ORD_000100","customer_id":"CUST_0084","amount":1323.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T21:00:00.000Z"}} +{"payment_id":"PAY_000101","order_id":"ORD_000101","customer_id":"CUST_0101","amount":15.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T02:00:00.000Z"}} +{"payment_id":"PAY_000102","order_id":"ORD_000102","customer_id":"CUST_0118","amount":215.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T03:00:00.000Z"}} +{"payment_id":"PAY_000103","order_id":"ORD_000103","customer_id":"CUST_0135","amount":701.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T04:00:00.000Z"}} +{"payment_id":"PAY_000104","order_id":"ORD_000104","customer_id":"CUST_0152","amount":1201.57,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T05:00:00.000Z"}} +{"payment_id":"PAY_000105","order_id":"ORD_000105","customer_id":"CUST_0169","amount":2028.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T06:00:00.000Z"}} +{"payment_id":"PAY_000106","order_id":"ORD_000106","customer_id":"CUST_0186","amount":222,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T07:00:00.000Z"}} +{"payment_id":"PAY_000107","order_id":"ORD_000107","customer_id":"CUST_0003","amount":813.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T08:00:00.000Z"}} +{"payment_id":"PAY_000108","order_id":"ORD_000108","customer_id":"CUST_0020","amount":1794.97,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T09:00:00.000Z"}} +{"payment_id":"PAY_000109","order_id":"ORD_000109","customer_id":"CUST_0037","amount":1062.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T10:00:00.000Z"}} +{"payment_id":"PAY_000110","order_id":"ORD_000110","customer_id":"CUST_0054","amount":895.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T11:00:00.000Z"}} +{"payment_id":"PAY_000111","order_id":"ORD_000111","customer_id":"CUST_0071","amount":53.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T12:00:00.000Z"}} +{"payment_id":"PAY_000112","order_id":"ORD_000112","customer_id":"CUST_0088","amount":323.93,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T13:00:00.000Z"}} +{"payment_id":"PAY_000113","order_id":"ORD_000113","customer_id":"CUST_0105","amount":900.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T14:00:00.000Z"}} +{"payment_id":"PAY_000114","order_id":"ORD_000114","customer_id":"CUST_0122","amount":1449.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T15:00:00.000Z"}} +{"payment_id":"PAY_000115","order_id":"ORD_000115","customer_id":"CUST_0139","amount":2350.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T16:00:00.000Z"}} +{"payment_id":"PAY_000116","order_id":"ORD_000116","customer_id":"CUST_0156","amount":259.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T17:00:00.000Z"}} +{"payment_id":"PAY_000117","order_id":"ORD_000117","customer_id":"CUST_0173","amount":922.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T18:00:00.000Z"}} +{"payment_id":"PAY_000118","order_id":"ORD_000118","customer_id":"CUST_0190","amount":1037.48,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T19:00:00.000Z"}} +{"payment_id":"PAY_000119","order_id":"ORD_000119","customer_id":"CUST_0007","amount":672.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T20:00:00.000Z"}} +{"payment_id":"PAY_000120","order_id":"ORD_000120","customer_id":"CUST_0024","amount":899.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T21:00:00.000Z"}} +{"payment_id":"PAY_000121","order_id":"ORD_000121","customer_id":"CUST_0041","amount":90.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T02:00:00.000Z"}} +{"payment_id":"PAY_000122","order_id":"ORD_000122","customer_id":"CUST_0058","amount":432.68,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T03:00:00.000Z"}} +{"payment_id":"PAY_000123","order_id":"ORD_000123","customer_id":"CUST_0075","amount":1099.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T04:00:00.000Z"}} +{"payment_id":"PAY_000124","order_id":"ORD_000124","customer_id":"CUST_0092","amount":1696.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T05:00:00.000Z"}} +{"payment_id":"PAY_000125","order_id":"ORD_000125","customer_id":"CUST_0109","amount":2673.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T06:00:00.000Z"}} +{"payment_id":"PAY_000126","order_id":"ORD_000126","customer_id":"CUST_0126","amount":297,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T07:00:00.000Z"}} +{"payment_id":"PAY_000127","order_id":"ORD_000127","customer_id":"CUST_0143","amount":1030.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T08:00:00.000Z"}} +{"payment_id":"PAY_000128","order_id":"ORD_000128","customer_id":"CUST_0160","amount":561.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T09:00:00.000Z"}} +{"payment_id":"PAY_000129","order_id":"ORD_000129","customer_id":"CUST_0177","amount":582.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T10:00:00.000Z"}} +{"payment_id":"PAY_000130","order_id":"ORD_000130","customer_id":"CUST_0194","amount":1222.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T11:00:00.000Z"}} +{"payment_id":"PAY_000131","order_id":"ORD_000131","customer_id":"CUST_0011","amount":128.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T12:00:00.000Z"}} +{"payment_id":"PAY_000132","order_id":"ORD_000132","customer_id":"CUST_0028","amount":541.42,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T13:00:00.000Z"}} +{"payment_id":"PAY_000133","order_id":"ORD_000133","customer_id":"CUST_0045","amount":1298.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T14:00:00.000Z"}} +{"payment_id":"PAY_000134","order_id":"ORD_000134","customer_id":"CUST_0062","amount":1944.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T15:00:00.000Z"}} +{"payment_id":"PAY_000135","order_id":"ORD_000135","customer_id":"CUST_0079","amount":2320.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T16:00:00.000Z"}} +{"payment_id":"PAY_000136","order_id":"ORD_000136","customer_id":"CUST_0096","amount":334.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T17:00:00.000Z"}} +{"payment_id":"PAY_000137","order_id":"ORD_000137","customer_id":"CUST_0113","amount":427.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T18:00:00.000Z"}} +{"payment_id":"PAY_000138","order_id":"ORD_000138","customer_id":"CUST_0130","amount":403.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T19:00:00.000Z"}} +{"payment_id":"PAY_000139","order_id":"ORD_000139","customer_id":"CUST_0147","amount":830.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T20:00:00.000Z"}} +{"payment_id":"PAY_000140","order_id":"ORD_000140","customer_id":"CUST_0164","amount":1544.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T21:00:00.000Z"}} +{"payment_id":"PAY_000141","order_id":"ORD_000141","customer_id":"CUST_0181","amount":165.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T02:00:00.000Z"}} +{"payment_id":"PAY_000142","order_id":"ORD_000142","customer_id":"CUST_0198","amount":650.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T03:00:00.000Z"}} +{"payment_id":"PAY_000143","order_id":"ORD_000143","customer_id":"CUST_0015","amount":1496.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T04:00:00.000Z"}} +{"payment_id":"PAY_000144","order_id":"ORD_000144","customer_id":"CUST_0032","amount":2191.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T05:00:00.000Z"}} +{"payment_id":"PAY_000145","order_id":"ORD_000145","customer_id":"CUST_0049","amount":2287.02,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T06:00:00.000Z"}} +{"payment_id":"PAY_000146","order_id":"ORD_000146","customer_id":"CUST_0066","amount":372,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T07:00:00.000Z"}} +{"payment_id":"PAY_000147","order_id":"ORD_000147","customer_id":"CUST_0083","amount":160.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T08:00:00.000Z"}} +{"payment_id":"PAY_000148","order_id":"ORD_000148","customer_id":"CUST_0100","amount":602.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T09:00:00.000Z"}} +{"payment_id":"PAY_000149","order_id":"ORD_000149","customer_id":"CUST_0117","amount":1077.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T10:00:00.000Z"}} +{"payment_id":"PAY_000150","order_id":"ORD_000150","customer_id":"CUST_0134","amount":1867.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T11:00:00.000Z"}} +{"payment_id":"PAY_000151","order_id":"ORD_000151","customer_id":"CUST_0151","amount":203.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"payment_id":"PAY_000152","order_id":"ORD_000152","customer_id":"CUST_0168","amount":758.92,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T13:00:00.000Z"}} +{"payment_id":"PAY_000153","order_id":"ORD_000153","customer_id":"CUST_0185","amount":1695.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T14:00:00.000Z"}} +{"payment_id":"PAY_000154","order_id":"ORD_000154","customer_id":"CUST_0002","amount":2064.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T15:00:00.000Z"}} +{"payment_id":"PAY_000155","order_id":"ORD_000155","customer_id":"CUST_0019","amount":734.51,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T16:00:00.000Z"}} +{"payment_id":"PAY_000156","order_id":"ORD_000156","customer_id":"CUST_0036","amount":34.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T17:00:00.000Z"}} +{"payment_id":"PAY_000157","order_id":"ORD_000157","customer_id":"CUST_0053","amount":269.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T18:00:00.000Z"}} +{"payment_id":"PAY_000158","order_id":"ORD_000158","customer_id":"CUST_0070","amount":801.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T19:00:00.000Z"}} +{"payment_id":"PAY_000159","order_id":"ORD_000159","customer_id":"CUST_0087","amount":1325.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T20:00:00.000Z"}} +{"payment_id":"PAY_000160","order_id":"ORD_000160","customer_id":"CUST_0104","amount":2189.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T21:00:00.000Z"}} +{"payment_id":"PAY_000161","order_id":"ORD_000161","customer_id":"CUST_0121","amount":240.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T02:00:00.000Z"}} +{"payment_id":"PAY_000162","order_id":"ORD_000162","customer_id":"CUST_0138","amount":867.67,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T03:00:00.000Z"}} +{"payment_id":"PAY_000163","order_id":"ORD_000163","customer_id":"CUST_0155","amount":1894.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T04:00:00.000Z"}} +{"payment_id":"PAY_000164","order_id":"ORD_000164","customer_id":"CUST_0172","amount":549.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T05:00:00.000Z"}} +{"payment_id":"PAY_000165","order_id":"ORD_000165","customer_id":"CUST_0189","amount":738.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T06:00:00.000Z"}} +{"payment_id":"PAY_000166","order_id":"ORD_000166","customer_id":"CUST_0006","amount":72,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T07:00:00.000Z"}} +{"payment_id":"PAY_000167","order_id":"ORD_000167","customer_id":"CUST_0023","amount":378.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T08:00:00.000Z"}} +{"payment_id":"PAY_000168","order_id":"ORD_000168","customer_id":"CUST_0040","amount":999.98,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T09:00:00.000Z"}} +{"payment_id":"PAY_000169","order_id":"ORD_000169","customer_id":"CUST_0057","amount":1572.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T10:00:00.000Z"}} +{"payment_id":"PAY_000170","order_id":"ORD_000170","customer_id":"CUST_0074","amount":2512.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T11:00:00.000Z"}} +{"payment_id":"PAY_000171","order_id":"ORD_000171","customer_id":"CUST_0091","amount":278.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"payment_id":"PAY_000172","order_id":"ORD_000172","customer_id":"CUST_0108","amount":976.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T13:00:00.000Z"}} +{"payment_id":"PAY_000173","order_id":"ORD_000173","customer_id":"CUST_0125","amount":1136.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T14:00:00.000Z"}} +{"payment_id":"PAY_000174","order_id":"ORD_000174","customer_id":"CUST_0142","amount":459.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T15:00:00.000Z"}} +{"payment_id":"PAY_000175","order_id":"ORD_000175","customer_id":"CUST_0159","amount":1060.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T16:00:00.000Z"}} +{"payment_id":"PAY_000176","order_id":"ORD_000176","customer_id":"CUST_0176","amount":109.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T17:00:00.000Z"}} +{"payment_id":"PAY_000177","order_id":"ORD_000177","customer_id":"CUST_0193","amount":487.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T18:00:00.000Z"}} +{"payment_id":"PAY_000178","order_id":"ORD_000178","customer_id":"CUST_0010","amount":1198.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T19:00:00.000Z"}} +{"payment_id":"PAY_000179","order_id":"ORD_000179","customer_id":"CUST_0027","amount":1820.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T20:00:00.000Z"}} +{"payment_id":"PAY_000180","order_id":"ORD_000180","customer_id":"CUST_0044","amount":2834.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T21:00:00.000Z"}} +{"payment_id":"PAY_000181","order_id":"ORD_000181","customer_id":"CUST_0061","amount":315.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_000182","order_id":"ORD_000182","customer_id":"CUST_0078","amount":1085.18,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_000183","order_id":"ORD_000183","customer_id":"CUST_0095","amount":304.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_000184","order_id":"ORD_000184","customer_id":"CUST_0112","amount":706.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_000185","order_id":"ORD_000185","customer_id":"CUST_0129","amount":1383.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_000186","order_id":"ORD_000186","customer_id":"CUST_0146","amount":147,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_000187","order_id":"ORD_000187","customer_id":"CUST_0163","amount":595.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_000188","order_id":"ORD_000188","customer_id":"CUST_0180","amount":1397.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_000189","order_id":"ORD_000189","customer_id":"CUST_0197","amount":2067.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_000190","order_id":"ORD_000190","customer_id":"CUST_0014","amount":2125.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_000191","order_id":"ORD_000191","customer_id":"CUST_0031","amount":353.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_000192","order_id":"ORD_000192","customer_id":"CUST_0048","amount":106.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_000193","order_id":"ORD_000193","customer_id":"CUST_0065","amount":503.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_000194","order_id":"ORD_000194","customer_id":"CUST_0082","amount":954.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_000195","order_id":"ORD_000195","customer_id":"CUST_0099","amount":1705.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_000196","order_id":"ORD_000196","customer_id":"CUST_0116","amount":184.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_000197","order_id":"ORD_000197","customer_id":"CUST_0133","amount":704.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_000198","order_id":"ORD_000198","customer_id":"CUST_0150","amount":1596.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_000199","order_id":"ORD_000199","customer_id":"CUST_0167","amount":2315.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_000200","order_id":"ORD_000200","customer_id":"CUST_0184","amount":1323.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} +{"payment_id":"PAY_000201","order_id":"ORD_000201","customer_id":"CUST_0001","amount":15.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T02:00:00.000Z"}} +{"payment_id":"PAY_000202","order_id":"ORD_000202","customer_id":"CUST_0018","amount":215.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T03:00:00.000Z"}} +{"payment_id":"PAY_000203","order_id":"ORD_000203","customer_id":"CUST_0035","amount":701.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T04:00:00.000Z"}} +{"payment_id":"PAY_000204","order_id":"ORD_000204","customer_id":"CUST_0052","amount":1201.57,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T05:00:00.000Z"}} +{"payment_id":"PAY_000205","order_id":"ORD_000205","customer_id":"CUST_0069","amount":2028.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T06:00:00.000Z"}} +{"payment_id":"PAY_000206","order_id":"ORD_000206","customer_id":"CUST_0086","amount":222,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T07:00:00.000Z"}} +{"payment_id":"PAY_000207","order_id":"ORD_000207","customer_id":"CUST_0103","amount":813.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T08:00:00.000Z"}} +{"payment_id":"PAY_000208","order_id":"ORD_000208","customer_id":"CUST_0120","amount":1794.97,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T09:00:00.000Z"}} +{"payment_id":"PAY_000209","order_id":"ORD_000209","customer_id":"CUST_0137","amount":1062.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T10:00:00.000Z"}} +{"payment_id":"PAY_000210","order_id":"ORD_000210","customer_id":"CUST_0154","amount":895.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T11:00:00.000Z"}} +{"payment_id":"PAY_000211","order_id":"ORD_000211","customer_id":"CUST_0171","amount":53.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T12:00:00.000Z"}} +{"payment_id":"PAY_000212","order_id":"ORD_000212","customer_id":"CUST_0188","amount":323.93,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T13:00:00.000Z"}} +{"payment_id":"PAY_000213","order_id":"ORD_000213","customer_id":"CUST_0005","amount":900.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T14:00:00.000Z"}} +{"payment_id":"PAY_000214","order_id":"ORD_000214","customer_id":"CUST_0022","amount":1449.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T15:00:00.000Z"}} +{"payment_id":"PAY_000215","order_id":"ORD_000215","customer_id":"CUST_0039","amount":2350.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T16:00:00.000Z"}} +{"payment_id":"PAY_000216","order_id":"ORD_000216","customer_id":"CUST_0056","amount":259.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T17:00:00.000Z"}} +{"payment_id":"PAY_000217","order_id":"ORD_000217","customer_id":"CUST_0073","amount":922.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T18:00:00.000Z"}} +{"payment_id":"PAY_000218","order_id":"ORD_000218","customer_id":"CUST_0090","amount":1037.48,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T19:00:00.000Z"}} +{"payment_id":"PAY_000219","order_id":"ORD_000219","customer_id":"CUST_0107","amount":672.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T20:00:00.000Z"}} +{"payment_id":"PAY_000220","order_id":"ORD_000220","customer_id":"CUST_0124","amount":899.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T21:00:00.000Z"}} +{"payment_id":"PAY_000221","order_id":"ORD_000221","customer_id":"CUST_0141","amount":90.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T02:00:00.000Z"}} +{"payment_id":"PAY_000222","order_id":"ORD_000222","customer_id":"CUST_0158","amount":432.68,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T03:00:00.000Z"}} +{"payment_id":"PAY_000223","order_id":"ORD_000223","customer_id":"CUST_0175","amount":1099.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T04:00:00.000Z"}} +{"payment_id":"PAY_000224","order_id":"ORD_000224","customer_id":"CUST_0192","amount":1696.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T05:00:00.000Z"}} +{"payment_id":"PAY_000225","order_id":"ORD_000225","customer_id":"CUST_0009","amount":2673.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T06:00:00.000Z"}} +{"payment_id":"PAY_000226","order_id":"ORD_000226","customer_id":"CUST_0026","amount":297,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T07:00:00.000Z"}} +{"payment_id":"PAY_000227","order_id":"ORD_000227","customer_id":"CUST_0043","amount":1030.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T08:00:00.000Z"}} +{"payment_id":"PAY_000228","order_id":"ORD_000228","customer_id":"CUST_0060","amount":561.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T09:00:00.000Z"}} +{"payment_id":"PAY_000229","order_id":"ORD_000229","customer_id":"CUST_0077","amount":582.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T10:00:00.000Z"}} +{"payment_id":"PAY_000230","order_id":"ORD_000230","customer_id":"CUST_0094","amount":1222.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T11:00:00.000Z"}} +{"payment_id":"PAY_000231","order_id":"ORD_000231","customer_id":"CUST_0111","amount":128.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T12:00:00.000Z"}} +{"payment_id":"PAY_000232","order_id":"ORD_000232","customer_id":"CUST_0128","amount":541.42,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T13:00:00.000Z"}} +{"payment_id":"PAY_000233","order_id":"ORD_000233","customer_id":"CUST_0145","amount":1298.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T14:00:00.000Z"}} +{"payment_id":"PAY_000234","order_id":"ORD_000234","customer_id":"CUST_0162","amount":1944.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T15:00:00.000Z"}} +{"payment_id":"PAY_000235","order_id":"ORD_000235","customer_id":"CUST_0179","amount":2320.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T16:00:00.000Z"}} +{"payment_id":"PAY_000236","order_id":"ORD_000236","customer_id":"CUST_0196","amount":334.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T17:00:00.000Z"}} +{"payment_id":"PAY_000237","order_id":"ORD_000237","customer_id":"CUST_0013","amount":427.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T18:00:00.000Z"}} +{"payment_id":"PAY_000238","order_id":"ORD_000238","customer_id":"CUST_0030","amount":403.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T19:00:00.000Z"}} +{"payment_id":"PAY_000239","order_id":"ORD_000239","customer_id":"CUST_0047","amount":830.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T20:00:00.000Z"}} +{"payment_id":"PAY_000240","order_id":"ORD_000240","customer_id":"CUST_0064","amount":1544.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T21:00:00.000Z"}} +{"payment_id":"PAY_000241","order_id":"ORD_000241","customer_id":"CUST_0081","amount":165.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T02:00:00.000Z"}} +{"payment_id":"PAY_000242","order_id":"ORD_000242","customer_id":"CUST_0098","amount":650.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T03:00:00.000Z"}} +{"payment_id":"PAY_000243","order_id":"ORD_000243","customer_id":"CUST_0115","amount":1496.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T04:00:00.000Z"}} +{"payment_id":"PAY_000244","order_id":"ORD_000244","customer_id":"CUST_0132","amount":2191.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T05:00:00.000Z"}} +{"payment_id":"PAY_000245","order_id":"ORD_000245","customer_id":"CUST_0149","amount":2287.02,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T06:00:00.000Z"}} +{"payment_id":"PAY_000246","order_id":"ORD_000246","customer_id":"CUST_0166","amount":372,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T07:00:00.000Z"}} +{"payment_id":"PAY_000247","order_id":"ORD_000247","customer_id":"CUST_0183","amount":160.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T08:00:00.000Z"}} +{"payment_id":"PAY_000248","order_id":"ORD_000248","customer_id":"CUST_0200","amount":602.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T09:00:00.000Z"}} +{"payment_id":"PAY_000249","order_id":"ORD_000249","customer_id":"CUST_0017","amount":1077.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T10:00:00.000Z"}} +{"payment_id":"PAY_000250","order_id":"ORD_000250","customer_id":"CUST_0034","amount":1867.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T11:00:00.000Z"}} +{"payment_id":"PAY_000251","order_id":"ORD_000251","customer_id":"CUST_0051","amount":203.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"payment_id":"PAY_000252","order_id":"ORD_000252","customer_id":"CUST_0068","amount":758.92,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T13:00:00.000Z"}} +{"payment_id":"PAY_000253","order_id":"ORD_000253","customer_id":"CUST_0085","amount":1695.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T14:00:00.000Z"}} +{"payment_id":"PAY_000254","order_id":"ORD_000254","customer_id":"CUST_0102","amount":2064.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T15:00:00.000Z"}} +{"payment_id":"PAY_000255","order_id":"ORD_000255","customer_id":"CUST_0119","amount":734.51,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T16:00:00.000Z"}} +{"payment_id":"PAY_000256","order_id":"ORD_000256","customer_id":"CUST_0136","amount":34.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T17:00:00.000Z"}} +{"payment_id":"PAY_000257","order_id":"ORD_000257","customer_id":"CUST_0153","amount":269.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T18:00:00.000Z"}} +{"payment_id":"PAY_000258","order_id":"ORD_000258","customer_id":"CUST_0170","amount":801.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T19:00:00.000Z"}} +{"payment_id":"PAY_000259","order_id":"ORD_000259","customer_id":"CUST_0187","amount":1325.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T20:00:00.000Z"}} +{"payment_id":"PAY_000260","order_id":"ORD_000260","customer_id":"CUST_0004","amount":2189.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T21:00:00.000Z"}} +{"payment_id":"PAY_000261","order_id":"ORD_000261","customer_id":"CUST_0021","amount":240.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T02:00:00.000Z"}} +{"payment_id":"PAY_000262","order_id":"ORD_000262","customer_id":"CUST_0038","amount":867.67,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T03:00:00.000Z"}} +{"payment_id":"PAY_000263","order_id":"ORD_000263","customer_id":"CUST_0055","amount":1894.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T04:00:00.000Z"}} +{"payment_id":"PAY_000264","order_id":"ORD_000264","customer_id":"CUST_0072","amount":549.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T05:00:00.000Z"}} +{"payment_id":"PAY_000265","order_id":"ORD_000265","customer_id":"CUST_0089","amount":738.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T06:00:00.000Z"}} +{"payment_id":"PAY_000266","order_id":"ORD_000266","customer_id":"CUST_0106","amount":72,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T07:00:00.000Z"}} +{"payment_id":"PAY_000267","order_id":"ORD_000267","customer_id":"CUST_0123","amount":378.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T08:00:00.000Z"}} +{"payment_id":"PAY_000268","order_id":"ORD_000268","customer_id":"CUST_0140","amount":999.98,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T09:00:00.000Z"}} +{"payment_id":"PAY_000269","order_id":"ORD_000269","customer_id":"CUST_0157","amount":1572.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T10:00:00.000Z"}} +{"payment_id":"PAY_000270","order_id":"ORD_000270","customer_id":"CUST_0174","amount":2512.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T11:00:00.000Z"}} +{"payment_id":"PAY_000271","order_id":"ORD_000271","customer_id":"CUST_0191","amount":278.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T12:00:00.000Z"}} +{"payment_id":"PAY_000272","order_id":"ORD_000272","customer_id":"CUST_0008","amount":976.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T13:00:00.000Z"}} +{"payment_id":"PAY_000273","order_id":"ORD_000273","customer_id":"CUST_0025","amount":1136.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T14:00:00.000Z"}} +{"payment_id":"PAY_000274","order_id":"ORD_000274","customer_id":"CUST_0042","amount":459.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T15:00:00.000Z"}} +{"payment_id":"PAY_000275","order_id":"ORD_000275","customer_id":"CUST_0059","amount":1060.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T16:00:00.000Z"}} +{"payment_id":"PAY_000276","order_id":"ORD_000276","customer_id":"CUST_0076","amount":109.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T17:00:00.000Z"}} +{"payment_id":"PAY_000277","order_id":"ORD_000277","customer_id":"CUST_0093","amount":487.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T18:00:00.000Z"}} +{"payment_id":"PAY_000278","order_id":"ORD_000278","customer_id":"CUST_0110","amount":1198.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T19:00:00.000Z"}} +{"payment_id":"PAY_000279","order_id":"ORD_000279","customer_id":"CUST_0127","amount":1820.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T20:00:00.000Z"}} +{"payment_id":"PAY_000280","order_id":"ORD_000280","customer_id":"CUST_0144","amount":2834.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T21:00:00.000Z"}} +{"payment_id":"PAY_000281","order_id":"ORD_000281","customer_id":"CUST_0161","amount":315.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T02:00:00.000Z"}} +{"payment_id":"PAY_000282","order_id":"ORD_000282","customer_id":"CUST_0178","amount":1085.18,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T03:00:00.000Z"}} +{"payment_id":"PAY_000283","order_id":"ORD_000283","customer_id":"CUST_0195","amount":304.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T04:00:00.000Z"}} +{"payment_id":"PAY_000284","order_id":"ORD_000284","customer_id":"CUST_0012","amount":706.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T05:00:00.000Z"}} +{"payment_id":"PAY_000285","order_id":"ORD_000285","customer_id":"CUST_0029","amount":1383.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T06:00:00.000Z"}} +{"payment_id":"PAY_000286","order_id":"ORD_000286","customer_id":"CUST_0046","amount":147,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T07:00:00.000Z"}} +{"payment_id":"PAY_000287","order_id":"ORD_000287","customer_id":"CUST_0063","amount":595.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T08:00:00.000Z"}} +{"payment_id":"PAY_000288","order_id":"ORD_000288","customer_id":"CUST_0080","amount":1397.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T09:00:00.000Z"}} +{"payment_id":"PAY_000289","order_id":"ORD_000289","customer_id":"CUST_0097","amount":2067.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T10:00:00.000Z"}} +{"payment_id":"PAY_000290","order_id":"ORD_000290","customer_id":"CUST_0114","amount":2125.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T11:00:00.000Z"}} +{"payment_id":"PAY_000291","order_id":"ORD_000291","customer_id":"CUST_0131","amount":353.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T12:00:00.000Z"}} +{"payment_id":"PAY_000292","order_id":"ORD_000292","customer_id":"CUST_0148","amount":106.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T13:00:00.000Z"}} +{"payment_id":"PAY_000293","order_id":"ORD_000293","customer_id":"CUST_0165","amount":503.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T14:00:00.000Z"}} +{"payment_id":"PAY_000294","order_id":"ORD_000294","customer_id":"CUST_0182","amount":954.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T15:00:00.000Z"}} +{"payment_id":"PAY_000295","order_id":"ORD_000295","customer_id":"CUST_0199","amount":1705.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T16:00:00.000Z"}} +{"payment_id":"PAY_000296","order_id":"ORD_000296","customer_id":"CUST_0016","amount":184.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T17:00:00.000Z"}} +{"payment_id":"PAY_000297","order_id":"ORD_000297","customer_id":"CUST_0033","amount":704.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T18:00:00.000Z"}} +{"payment_id":"PAY_000298","order_id":"ORD_000298","customer_id":"CUST_0050","amount":1596.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T19:00:00.000Z"}} +{"payment_id":"PAY_000299","order_id":"ORD_000299","customer_id":"CUST_0067","amount":2315.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T20:00:00.000Z"}} +{"payment_id":"PAY_000300","order_id":"ORD_000300","customer_id":"CUST_0084","amount":1323.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T21:00:00.000Z"}} +{"payment_id":"PAY_000301","order_id":"ORD_000301","customer_id":"CUST_0101","amount":15.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T02:00:00.000Z"}} +{"payment_id":"PAY_000302","order_id":"ORD_000302","customer_id":"CUST_0118","amount":215.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T03:00:00.000Z"}} +{"payment_id":"PAY_000303","order_id":"ORD_000303","customer_id":"CUST_0135","amount":701.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T04:00:00.000Z"}} +{"payment_id":"PAY_000304","order_id":"ORD_000304","customer_id":"CUST_0152","amount":1201.57,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T05:00:00.000Z"}} +{"payment_id":"PAY_000305","order_id":"ORD_000305","customer_id":"CUST_0169","amount":2028.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T06:00:00.000Z"}} +{"payment_id":"PAY_000306","order_id":"ORD_000306","customer_id":"CUST_0186","amount":222,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T07:00:00.000Z"}} +{"payment_id":"PAY_000307","order_id":"ORD_000307","customer_id":"CUST_0003","amount":813.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T08:00:00.000Z"}} +{"payment_id":"PAY_000308","order_id":"ORD_000308","customer_id":"CUST_0020","amount":1794.97,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T09:00:00.000Z"}} +{"payment_id":"PAY_000309","order_id":"ORD_000309","customer_id":"CUST_0037","amount":1062.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T10:00:00.000Z"}} +{"payment_id":"PAY_000310","order_id":"ORD_000310","customer_id":"CUST_0054","amount":895.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T11:00:00.000Z"}} +{"payment_id":"PAY_000311","order_id":"ORD_000311","customer_id":"CUST_0071","amount":53.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T12:00:00.000Z"}} +{"payment_id":"PAY_000312","order_id":"ORD_000312","customer_id":"CUST_0088","amount":323.93,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T13:00:00.000Z"}} +{"payment_id":"PAY_000313","order_id":"ORD_000313","customer_id":"CUST_0105","amount":900.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T14:00:00.000Z"}} +{"payment_id":"PAY_000314","order_id":"ORD_000314","customer_id":"CUST_0122","amount":1449.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T15:00:00.000Z"}} +{"payment_id":"PAY_000315","order_id":"ORD_000315","customer_id":"CUST_0139","amount":2350.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T16:00:00.000Z"}} +{"payment_id":"PAY_000316","order_id":"ORD_000316","customer_id":"CUST_0156","amount":259.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T17:00:00.000Z"}} +{"payment_id":"PAY_000317","order_id":"ORD_000317","customer_id":"CUST_0173","amount":922.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T18:00:00.000Z"}} +{"payment_id":"PAY_000318","order_id":"ORD_000318","customer_id":"CUST_0190","amount":1037.48,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T19:00:00.000Z"}} +{"payment_id":"PAY_000319","order_id":"ORD_000319","customer_id":"CUST_0007","amount":672.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T20:00:00.000Z"}} +{"payment_id":"PAY_000320","order_id":"ORD_000320","customer_id":"CUST_0024","amount":899.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T21:00:00.000Z"}} +{"payment_id":"PAY_000321","order_id":"ORD_000321","customer_id":"CUST_0041","amount":90.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T02:00:00.000Z"}} +{"payment_id":"PAY_000322","order_id":"ORD_000322","customer_id":"CUST_0058","amount":432.68,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T03:00:00.000Z"}} +{"payment_id":"PAY_000323","order_id":"ORD_000323","customer_id":"CUST_0075","amount":1099.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T04:00:00.000Z"}} +{"payment_id":"PAY_000324","order_id":"ORD_000324","customer_id":"CUST_0092","amount":1696.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T05:00:00.000Z"}} +{"payment_id":"PAY_000325","order_id":"ORD_000325","customer_id":"CUST_0109","amount":2673.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T06:00:00.000Z"}} +{"payment_id":"PAY_000326","order_id":"ORD_000326","customer_id":"CUST_0126","amount":297,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T07:00:00.000Z"}} +{"payment_id":"PAY_000327","order_id":"ORD_000327","customer_id":"CUST_0143","amount":1030.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T08:00:00.000Z"}} +{"payment_id":"PAY_000328","order_id":"ORD_000328","customer_id":"CUST_0160","amount":561.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T09:00:00.000Z"}} +{"payment_id":"PAY_000329","order_id":"ORD_000329","customer_id":"CUST_0177","amount":582.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T10:00:00.000Z"}} +{"payment_id":"PAY_000330","order_id":"ORD_000330","customer_id":"CUST_0194","amount":1222.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T11:00:00.000Z"}} +{"payment_id":"PAY_000331","order_id":"ORD_000331","customer_id":"CUST_0011","amount":128.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"payment_id":"PAY_000332","order_id":"ORD_000332","customer_id":"CUST_0028","amount":541.42,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T13:00:00.000Z"}} +{"payment_id":"PAY_000333","order_id":"ORD_000333","customer_id":"CUST_0045","amount":1298.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T14:00:00.000Z"}} +{"payment_id":"PAY_000334","order_id":"ORD_000334","customer_id":"CUST_0062","amount":1944.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T15:00:00.000Z"}} +{"payment_id":"PAY_000335","order_id":"ORD_000335","customer_id":"CUST_0079","amount":2320.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T16:00:00.000Z"}} +{"payment_id":"PAY_000336","order_id":"ORD_000336","customer_id":"CUST_0096","amount":334.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T17:00:00.000Z"}} +{"payment_id":"PAY_000337","order_id":"ORD_000337","customer_id":"CUST_0113","amount":427.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T18:00:00.000Z"}} +{"payment_id":"PAY_000338","order_id":"ORD_000338","customer_id":"CUST_0130","amount":403.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T19:00:00.000Z"}} +{"payment_id":"PAY_000339","order_id":"ORD_000339","customer_id":"CUST_0147","amount":830.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T20:00:00.000Z"}} +{"payment_id":"PAY_000340","order_id":"ORD_000340","customer_id":"CUST_0164","amount":1544.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T21:00:00.000Z"}} +{"payment_id":"PAY_000341","order_id":"ORD_000341","customer_id":"CUST_0181","amount":165.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T02:00:00.000Z"}} +{"payment_id":"PAY_000342","order_id":"ORD_000342","customer_id":"CUST_0198","amount":650.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T03:00:00.000Z"}} +{"payment_id":"PAY_000343","order_id":"ORD_000343","customer_id":"CUST_0015","amount":1496.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T04:00:00.000Z"}} +{"payment_id":"PAY_000344","order_id":"ORD_000344","customer_id":"CUST_0032","amount":2191.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T05:00:00.000Z"}} +{"payment_id":"PAY_000345","order_id":"ORD_000345","customer_id":"CUST_0049","amount":2287.02,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T06:00:00.000Z"}} +{"payment_id":"PAY_000346","order_id":"ORD_000346","customer_id":"CUST_0066","amount":372,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T07:00:00.000Z"}} +{"payment_id":"PAY_000347","order_id":"ORD_000347","customer_id":"CUST_0083","amount":160.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T08:00:00.000Z"}} +{"payment_id":"PAY_000348","order_id":"ORD_000348","customer_id":"CUST_0100","amount":602.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T09:00:00.000Z"}} +{"payment_id":"PAY_000349","order_id":"ORD_000349","customer_id":"CUST_0117","amount":1077.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T10:00:00.000Z"}} +{"payment_id":"PAY_000350","order_id":"ORD_000350","customer_id":"CUST_0134","amount":1867.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T11:00:00.000Z"}} +{"payment_id":"PAY_000351","order_id":"ORD_000351","customer_id":"CUST_0151","amount":203.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"payment_id":"PAY_000352","order_id":"ORD_000352","customer_id":"CUST_0168","amount":758.92,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T13:00:00.000Z"}} +{"payment_id":"PAY_000353","order_id":"ORD_000353","customer_id":"CUST_0185","amount":1695.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T14:00:00.000Z"}} +{"payment_id":"PAY_000354","order_id":"ORD_000354","customer_id":"CUST_0002","amount":2064.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T15:00:00.000Z"}} +{"payment_id":"PAY_000355","order_id":"ORD_000355","customer_id":"CUST_0019","amount":734.51,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T16:00:00.000Z"}} +{"payment_id":"PAY_000356","order_id":"ORD_000356","customer_id":"CUST_0036","amount":34.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T17:00:00.000Z"}} +{"payment_id":"PAY_000357","order_id":"ORD_000357","customer_id":"CUST_0053","amount":269.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T18:00:00.000Z"}} +{"payment_id":"PAY_000358","order_id":"ORD_000358","customer_id":"CUST_0070","amount":801.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T19:00:00.000Z"}} +{"payment_id":"PAY_000359","order_id":"ORD_000359","customer_id":"CUST_0087","amount":1325.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T20:00:00.000Z"}} +{"payment_id":"PAY_000360","order_id":"ORD_000360","customer_id":"CUST_0104","amount":2189.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T21:00:00.000Z"}} +{"payment_id":"PAY_000361","order_id":"ORD_000361","customer_id":"CUST_0121","amount":240.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_000362","order_id":"ORD_000362","customer_id":"CUST_0138","amount":867.67,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_000363","order_id":"ORD_000363","customer_id":"CUST_0155","amount":1894.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_000364","order_id":"ORD_000364","customer_id":"CUST_0172","amount":549.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_000365","order_id":"ORD_000365","customer_id":"CUST_0189","amount":738.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_000366","order_id":"ORD_000366","customer_id":"CUST_0006","amount":72,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_000367","order_id":"ORD_000367","customer_id":"CUST_0023","amount":378.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_000368","order_id":"ORD_000368","customer_id":"CUST_0040","amount":999.98,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_000369","order_id":"ORD_000369","customer_id":"CUST_0057","amount":1572.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_000370","order_id":"ORD_000370","customer_id":"CUST_0074","amount":2512.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_000371","order_id":"ORD_000371","customer_id":"CUST_0091","amount":278.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_000372","order_id":"ORD_000372","customer_id":"CUST_0108","amount":976.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_000373","order_id":"ORD_000373","customer_id":"CUST_0125","amount":1136.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_000374","order_id":"ORD_000374","customer_id":"CUST_0142","amount":459.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_000375","order_id":"ORD_000375","customer_id":"CUST_0159","amount":1060.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_000376","order_id":"ORD_000376","customer_id":"CUST_0176","amount":109.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_000377","order_id":"ORD_000377","customer_id":"CUST_0193","amount":487.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_000378","order_id":"ORD_000378","customer_id":"CUST_0010","amount":1198.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_000379","order_id":"ORD_000379","customer_id":"CUST_0027","amount":1820.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_000380","order_id":"ORD_000380","customer_id":"CUST_0044","amount":2834.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} +{"payment_id":"PAY_000381","order_id":"ORD_000381","customer_id":"CUST_0061","amount":315.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T02:00:00.000Z"}} +{"payment_id":"PAY_000382","order_id":"ORD_000382","customer_id":"CUST_0078","amount":1085.18,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T03:00:00.000Z"}} +{"payment_id":"PAY_000383","order_id":"ORD_000383","customer_id":"CUST_0095","amount":304.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T04:00:00.000Z"}} +{"payment_id":"PAY_000384","order_id":"ORD_000384","customer_id":"CUST_0112","amount":706.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T05:00:00.000Z"}} +{"payment_id":"PAY_000385","order_id":"ORD_000385","customer_id":"CUST_0129","amount":1383.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T06:00:00.000Z"}} +{"payment_id":"PAY_000386","order_id":"ORD_000386","customer_id":"CUST_0146","amount":147,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T07:00:00.000Z"}} +{"payment_id":"PAY_000387","order_id":"ORD_000387","customer_id":"CUST_0163","amount":595.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T08:00:00.000Z"}} +{"payment_id":"PAY_000388","order_id":"ORD_000388","customer_id":"CUST_0180","amount":1397.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T09:00:00.000Z"}} +{"payment_id":"PAY_000389","order_id":"ORD_000389","customer_id":"CUST_0197","amount":2067.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T10:00:00.000Z"}} +{"payment_id":"PAY_000390","order_id":"ORD_000390","customer_id":"CUST_0014","amount":2125.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T11:00:00.000Z"}} +{"payment_id":"PAY_000391","order_id":"ORD_000391","customer_id":"CUST_0031","amount":353.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T12:00:00.000Z"}} +{"payment_id":"PAY_000392","order_id":"ORD_000392","customer_id":"CUST_0048","amount":106.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T13:00:00.000Z"}} +{"payment_id":"PAY_000393","order_id":"ORD_000393","customer_id":"CUST_0065","amount":503.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T14:00:00.000Z"}} +{"payment_id":"PAY_000394","order_id":"ORD_000394","customer_id":"CUST_0082","amount":954.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T15:00:00.000Z"}} +{"payment_id":"PAY_000395","order_id":"ORD_000395","customer_id":"CUST_0099","amount":1705.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T16:00:00.000Z"}} +{"payment_id":"PAY_000396","order_id":"ORD_000396","customer_id":"CUST_0116","amount":184.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T17:00:00.000Z"}} +{"payment_id":"PAY_000397","order_id":"ORD_000397","customer_id":"CUST_0133","amount":704.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T18:00:00.000Z"}} +{"payment_id":"PAY_000398","order_id":"ORD_000398","customer_id":"CUST_0150","amount":1596.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T19:00:00.000Z"}} +{"payment_id":"PAY_000399","order_id":"ORD_000399","customer_id":"CUST_0167","amount":2315.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T20:00:00.000Z"}} +{"payment_id":"PAY_000400","order_id":"ORD_000400","customer_id":"CUST_0184","amount":1323.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T21:00:00.000Z"}} +{"payment_id":"PAY_000401","order_id":"ORD_000401","customer_id":"CUST_0001","amount":15.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T02:00:00.000Z"}} +{"payment_id":"PAY_000402","order_id":"ORD_000402","customer_id":"CUST_0018","amount":215.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T03:00:00.000Z"}} +{"payment_id":"PAY_000403","order_id":"ORD_000403","customer_id":"CUST_0035","amount":701.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T04:00:00.000Z"}} +{"payment_id":"PAY_000404","order_id":"ORD_000404","customer_id":"CUST_0052","amount":1201.57,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T05:00:00.000Z"}} +{"payment_id":"PAY_000405","order_id":"ORD_000405","customer_id":"CUST_0069","amount":2028.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T06:00:00.000Z"}} +{"payment_id":"PAY_000406","order_id":"ORD_000406","customer_id":"CUST_0086","amount":222,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T07:00:00.000Z"}} +{"payment_id":"PAY_000407","order_id":"ORD_000407","customer_id":"CUST_0103","amount":813.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T08:00:00.000Z"}} +{"payment_id":"PAY_000408","order_id":"ORD_000408","customer_id":"CUST_0120","amount":1794.97,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T09:00:00.000Z"}} +{"payment_id":"PAY_000409","order_id":"ORD_000409","customer_id":"CUST_0137","amount":1062.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T10:00:00.000Z"}} +{"payment_id":"PAY_000410","order_id":"ORD_000410","customer_id":"CUST_0154","amount":895.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T11:00:00.000Z"}} +{"payment_id":"PAY_000411","order_id":"ORD_000411","customer_id":"CUST_0171","amount":53.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T12:00:00.000Z"}} +{"payment_id":"PAY_000412","order_id":"ORD_000412","customer_id":"CUST_0188","amount":323.93,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T13:00:00.000Z"}} +{"payment_id":"PAY_000413","order_id":"ORD_000413","customer_id":"CUST_0005","amount":900.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T14:00:00.000Z"}} +{"payment_id":"PAY_000414","order_id":"ORD_000414","customer_id":"CUST_0022","amount":1449.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T15:00:00.000Z"}} +{"payment_id":"PAY_000415","order_id":"ORD_000415","customer_id":"CUST_0039","amount":2350.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T16:00:00.000Z"}} +{"payment_id":"PAY_000416","order_id":"ORD_000416","customer_id":"CUST_0056","amount":259.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T17:00:00.000Z"}} +{"payment_id":"PAY_000417","order_id":"ORD_000417","customer_id":"CUST_0073","amount":922.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T18:00:00.000Z"}} +{"payment_id":"PAY_000418","order_id":"ORD_000418","customer_id":"CUST_0090","amount":1037.48,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T19:00:00.000Z"}} +{"payment_id":"PAY_000419","order_id":"ORD_000419","customer_id":"CUST_0107","amount":672.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T20:00:00.000Z"}} +{"payment_id":"PAY_000420","order_id":"ORD_000420","customer_id":"CUST_0124","amount":899.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T21:00:00.000Z"}} +{"payment_id":"PAY_000421","order_id":"ORD_000421","customer_id":"CUST_0141","amount":90.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T02:00:00.000Z"}} +{"payment_id":"PAY_000422","order_id":"ORD_000422","customer_id":"CUST_0158","amount":432.68,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T03:00:00.000Z"}} +{"payment_id":"PAY_000423","order_id":"ORD_000423","customer_id":"CUST_0175","amount":1099.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T04:00:00.000Z"}} +{"payment_id":"PAY_000424","order_id":"ORD_000424","customer_id":"CUST_0192","amount":1696.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T05:00:00.000Z"}} +{"payment_id":"PAY_000425","order_id":"ORD_000425","customer_id":"CUST_0009","amount":2673.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T06:00:00.000Z"}} +{"payment_id":"PAY_000426","order_id":"ORD_000426","customer_id":"CUST_0026","amount":297,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T07:00:00.000Z"}} +{"payment_id":"PAY_000427","order_id":"ORD_000427","customer_id":"CUST_0043","amount":1030.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T08:00:00.000Z"}} +{"payment_id":"PAY_000428","order_id":"ORD_000428","customer_id":"CUST_0060","amount":561.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T09:00:00.000Z"}} +{"payment_id":"PAY_000429","order_id":"ORD_000429","customer_id":"CUST_0077","amount":582.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T10:00:00.000Z"}} +{"payment_id":"PAY_000430","order_id":"ORD_000430","customer_id":"CUST_0094","amount":1222.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T11:00:00.000Z"}} +{"payment_id":"PAY_000431","order_id":"ORD_000431","customer_id":"CUST_0111","amount":128.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"payment_id":"PAY_000432","order_id":"ORD_000432","customer_id":"CUST_0128","amount":541.42,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T13:00:00.000Z"}} +{"payment_id":"PAY_000433","order_id":"ORD_000433","customer_id":"CUST_0145","amount":1298.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T14:00:00.000Z"}} +{"payment_id":"PAY_000434","order_id":"ORD_000434","customer_id":"CUST_0162","amount":1944.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T15:00:00.000Z"}} +{"payment_id":"PAY_000435","order_id":"ORD_000435","customer_id":"CUST_0179","amount":2320.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T16:00:00.000Z"}} +{"payment_id":"PAY_000436","order_id":"ORD_000436","customer_id":"CUST_0196","amount":334.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T17:00:00.000Z"}} +{"payment_id":"PAY_000437","order_id":"ORD_000437","customer_id":"CUST_0013","amount":427.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T18:00:00.000Z"}} +{"payment_id":"PAY_000438","order_id":"ORD_000438","customer_id":"CUST_0030","amount":403.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T19:00:00.000Z"}} +{"payment_id":"PAY_000439","order_id":"ORD_000439","customer_id":"CUST_0047","amount":830.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T20:00:00.000Z"}} +{"payment_id":"PAY_000440","order_id":"ORD_000440","customer_id":"CUST_0064","amount":1544.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T21:00:00.000Z"}} +{"payment_id":"PAY_000441","order_id":"ORD_000441","customer_id":"CUST_0081","amount":165.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T02:00:00.000Z"}} +{"payment_id":"PAY_000442","order_id":"ORD_000442","customer_id":"CUST_0098","amount":650.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T03:00:00.000Z"}} +{"payment_id":"PAY_000443","order_id":"ORD_000443","customer_id":"CUST_0115","amount":1496.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T04:00:00.000Z"}} +{"payment_id":"PAY_000444","order_id":"ORD_000444","customer_id":"CUST_0132","amount":2191.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T05:00:00.000Z"}} +{"payment_id":"PAY_000445","order_id":"ORD_000445","customer_id":"CUST_0149","amount":2287.02,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T06:00:00.000Z"}} +{"payment_id":"PAY_000446","order_id":"ORD_000446","customer_id":"CUST_0166","amount":372,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T07:00:00.000Z"}} +{"payment_id":"PAY_000447","order_id":"ORD_000447","customer_id":"CUST_0183","amount":160.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T08:00:00.000Z"}} +{"payment_id":"PAY_000448","order_id":"ORD_000448","customer_id":"CUST_0200","amount":602.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T09:00:00.000Z"}} +{"payment_id":"PAY_000449","order_id":"ORD_000449","customer_id":"CUST_0017","amount":1077.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T10:00:00.000Z"}} +{"payment_id":"PAY_000450","order_id":"ORD_000450","customer_id":"CUST_0034","amount":1867.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T11:00:00.000Z"}} +{"payment_id":"PAY_000451","order_id":"ORD_000451","customer_id":"CUST_0051","amount":203.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T12:00:00.000Z"}} +{"payment_id":"PAY_000452","order_id":"ORD_000452","customer_id":"CUST_0068","amount":758.92,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T13:00:00.000Z"}} +{"payment_id":"PAY_000453","order_id":"ORD_000453","customer_id":"CUST_0085","amount":1695.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T14:00:00.000Z"}} +{"payment_id":"PAY_000454","order_id":"ORD_000454","customer_id":"CUST_0102","amount":2064.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T15:00:00.000Z"}} +{"payment_id":"PAY_000455","order_id":"ORD_000455","customer_id":"CUST_0119","amount":734.51,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T16:00:00.000Z"}} +{"payment_id":"PAY_000456","order_id":"ORD_000456","customer_id":"CUST_0136","amount":34.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T17:00:00.000Z"}} +{"payment_id":"PAY_000457","order_id":"ORD_000457","customer_id":"CUST_0153","amount":269.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T18:00:00.000Z"}} +{"payment_id":"PAY_000458","order_id":"ORD_000458","customer_id":"CUST_0170","amount":801.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T19:00:00.000Z"}} +{"payment_id":"PAY_000459","order_id":"ORD_000459","customer_id":"CUST_0187","amount":1325.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T20:00:00.000Z"}} +{"payment_id":"PAY_000460","order_id":"ORD_000460","customer_id":"CUST_0004","amount":2189.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T21:00:00.000Z"}} +{"payment_id":"PAY_000461","order_id":"ORD_000461","customer_id":"CUST_0021","amount":240.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T02:00:00.000Z"}} +{"payment_id":"PAY_000462","order_id":"ORD_000462","customer_id":"CUST_0038","amount":867.67,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T03:00:00.000Z"}} +{"payment_id":"PAY_000463","order_id":"ORD_000463","customer_id":"CUST_0055","amount":1894.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T04:00:00.000Z"}} +{"payment_id":"PAY_000464","order_id":"ORD_000464","customer_id":"CUST_0072","amount":549.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T05:00:00.000Z"}} +{"payment_id":"PAY_000465","order_id":"ORD_000465","customer_id":"CUST_0089","amount":738.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T06:00:00.000Z"}} +{"payment_id":"PAY_000466","order_id":"ORD_000466","customer_id":"CUST_0106","amount":72,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T07:00:00.000Z"}} +{"payment_id":"PAY_000467","order_id":"ORD_000467","customer_id":"CUST_0123","amount":378.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T08:00:00.000Z"}} +{"payment_id":"PAY_000468","order_id":"ORD_000468","customer_id":"CUST_0140","amount":999.98,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T09:00:00.000Z"}} +{"payment_id":"PAY_000469","order_id":"ORD_000469","customer_id":"CUST_0157","amount":1572.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T10:00:00.000Z"}} +{"payment_id":"PAY_000470","order_id":"ORD_000470","customer_id":"CUST_0174","amount":2512.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T11:00:00.000Z"}} +{"payment_id":"PAY_000471","order_id":"ORD_000471","customer_id":"CUST_0191","amount":278.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T12:00:00.000Z"}} +{"payment_id":"PAY_000472","order_id":"ORD_000472","customer_id":"CUST_0008","amount":976.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T13:00:00.000Z"}} +{"payment_id":"PAY_000473","order_id":"ORD_000473","customer_id":"CUST_0025","amount":1136.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T14:00:00.000Z"}} +{"payment_id":"PAY_000474","order_id":"ORD_000474","customer_id":"CUST_0042","amount":459.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T15:00:00.000Z"}} +{"payment_id":"PAY_000475","order_id":"ORD_000475","customer_id":"CUST_0059","amount":1060.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T16:00:00.000Z"}} +{"payment_id":"PAY_000476","order_id":"ORD_000476","customer_id":"CUST_0076","amount":109.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T17:00:00.000Z"}} +{"payment_id":"PAY_000477","order_id":"ORD_000477","customer_id":"CUST_0093","amount":487.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T18:00:00.000Z"}} +{"payment_id":"PAY_000478","order_id":"ORD_000478","customer_id":"CUST_0110","amount":1198.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T19:00:00.000Z"}} +{"payment_id":"PAY_000479","order_id":"ORD_000479","customer_id":"CUST_0127","amount":1820.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T20:00:00.000Z"}} +{"payment_id":"PAY_000480","order_id":"ORD_000480","customer_id":"CUST_0144","amount":2834.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T21:00:00.000Z"}} +{"payment_id":"PAY_000481","order_id":"ORD_000481","customer_id":"CUST_0161","amount":315.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T02:00:00.000Z"}} +{"payment_id":"PAY_000482","order_id":"ORD_000482","customer_id":"CUST_0178","amount":1085.18,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T03:00:00.000Z"}} +{"payment_id":"PAY_000483","order_id":"ORD_000483","customer_id":"CUST_0195","amount":304.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T04:00:00.000Z"}} +{"payment_id":"PAY_000484","order_id":"ORD_000484","customer_id":"CUST_0012","amount":706.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T05:00:00.000Z"}} +{"payment_id":"PAY_000485","order_id":"ORD_000485","customer_id":"CUST_0029","amount":1383.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T06:00:00.000Z"}} +{"payment_id":"PAY_000486","order_id":"ORD_000486","customer_id":"CUST_0046","amount":147,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T07:00:00.000Z"}} +{"payment_id":"PAY_000487","order_id":"ORD_000487","customer_id":"CUST_0063","amount":595.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T08:00:00.000Z"}} +{"payment_id":"PAY_000488","order_id":"ORD_000488","customer_id":"CUST_0080","amount":1397.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T09:00:00.000Z"}} +{"payment_id":"PAY_000489","order_id":"ORD_000489","customer_id":"CUST_0097","amount":2067.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T10:00:00.000Z"}} +{"payment_id":"PAY_000490","order_id":"ORD_000490","customer_id":"CUST_0114","amount":2125.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T11:00:00.000Z"}} +{"payment_id":"PAY_000491","order_id":"ORD_000491","customer_id":"CUST_0131","amount":353.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T12:00:00.000Z"}} +{"payment_id":"PAY_000492","order_id":"ORD_000492","customer_id":"CUST_0148","amount":106.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T13:00:00.000Z"}} +{"payment_id":"PAY_000493","order_id":"ORD_000493","customer_id":"CUST_0165","amount":503.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T14:00:00.000Z"}} +{"payment_id":"PAY_000494","order_id":"ORD_000494","customer_id":"CUST_0182","amount":954.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T15:00:00.000Z"}} +{"payment_id":"PAY_000495","order_id":"ORD_000495","customer_id":"CUST_0199","amount":1705.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T16:00:00.000Z"}} +{"payment_id":"PAY_000496","order_id":"ORD_000496","customer_id":"CUST_0016","amount":184.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T17:00:00.000Z"}} +{"payment_id":"PAY_000497","order_id":"ORD_000497","customer_id":"CUST_0033","amount":704.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T18:00:00.000Z"}} +{"payment_id":"PAY_000498","order_id":"ORD_000498","customer_id":"CUST_0050","amount":1596.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T19:00:00.000Z"}} +{"payment_id":"PAY_000499","order_id":"ORD_000499","customer_id":"CUST_0067","amount":2315.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T20:00:00.000Z"}} +{"payment_id":"PAY_000500","order_id":"ORD_000500","customer_id":"CUST_0084","amount":1323.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T21:00:00.000Z"}} +{"payment_id":"PAY_000501","order_id":"ORD_000501","customer_id":"CUST_0101","amount":15.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T02:00:00.000Z"}} +{"payment_id":"PAY_000502","order_id":"ORD_000502","customer_id":"CUST_0118","amount":215.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T03:00:00.000Z"}} +{"payment_id":"PAY_000503","order_id":"ORD_000503","customer_id":"CUST_0135","amount":701.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T04:00:00.000Z"}} +{"payment_id":"PAY_000504","order_id":"ORD_000504","customer_id":"CUST_0152","amount":1201.57,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T05:00:00.000Z"}} +{"payment_id":"PAY_000505","order_id":"ORD_000505","customer_id":"CUST_0169","amount":2028.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T06:00:00.000Z"}} +{"payment_id":"PAY_000506","order_id":"ORD_000506","customer_id":"CUST_0186","amount":222,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T07:00:00.000Z"}} +{"payment_id":"PAY_000507","order_id":"ORD_000507","customer_id":"CUST_0003","amount":813.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T08:00:00.000Z"}} +{"payment_id":"PAY_000508","order_id":"ORD_000508","customer_id":"CUST_0020","amount":1794.97,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T09:00:00.000Z"}} +{"payment_id":"PAY_000509","order_id":"ORD_000509","customer_id":"CUST_0037","amount":1062.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T10:00:00.000Z"}} +{"payment_id":"PAY_000510","order_id":"ORD_000510","customer_id":"CUST_0054","amount":895.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T11:00:00.000Z"}} +{"payment_id":"PAY_000511","order_id":"ORD_000511","customer_id":"CUST_0071","amount":53.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"payment_id":"PAY_000512","order_id":"ORD_000512","customer_id":"CUST_0088","amount":323.93,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T13:00:00.000Z"}} +{"payment_id":"PAY_000513","order_id":"ORD_000513","customer_id":"CUST_0105","amount":900.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T14:00:00.000Z"}} +{"payment_id":"PAY_000514","order_id":"ORD_000514","customer_id":"CUST_0122","amount":1449.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T15:00:00.000Z"}} +{"payment_id":"PAY_000515","order_id":"ORD_000515","customer_id":"CUST_0139","amount":2350.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T16:00:00.000Z"}} +{"payment_id":"PAY_000516","order_id":"ORD_000516","customer_id":"CUST_0156","amount":259.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T17:00:00.000Z"}} +{"payment_id":"PAY_000517","order_id":"ORD_000517","customer_id":"CUST_0173","amount":922.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T18:00:00.000Z"}} +{"payment_id":"PAY_000518","order_id":"ORD_000518","customer_id":"CUST_0190","amount":1037.48,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T19:00:00.000Z"}} +{"payment_id":"PAY_000519","order_id":"ORD_000519","customer_id":"CUST_0007","amount":672.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T20:00:00.000Z"}} +{"payment_id":"PAY_000520","order_id":"ORD_000520","customer_id":"CUST_0024","amount":899.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T21:00:00.000Z"}} +{"payment_id":"PAY_000521","order_id":"ORD_000521","customer_id":"CUST_0041","amount":90.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T02:00:00.000Z"}} +{"payment_id":"PAY_000522","order_id":"ORD_000522","customer_id":"CUST_0058","amount":432.68,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T03:00:00.000Z"}} +{"payment_id":"PAY_000523","order_id":"ORD_000523","customer_id":"CUST_0075","amount":1099.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T04:00:00.000Z"}} +{"payment_id":"PAY_000524","order_id":"ORD_000524","customer_id":"CUST_0092","amount":1696.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T05:00:00.000Z"}} +{"payment_id":"PAY_000525","order_id":"ORD_000525","customer_id":"CUST_0109","amount":2673.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T06:00:00.000Z"}} +{"payment_id":"PAY_000526","order_id":"ORD_000526","customer_id":"CUST_0126","amount":297,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T07:00:00.000Z"}} +{"payment_id":"PAY_000527","order_id":"ORD_000527","customer_id":"CUST_0143","amount":1030.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T08:00:00.000Z"}} +{"payment_id":"PAY_000528","order_id":"ORD_000528","customer_id":"CUST_0160","amount":561.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T09:00:00.000Z"}} +{"payment_id":"PAY_000529","order_id":"ORD_000529","customer_id":"CUST_0177","amount":582.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T10:00:00.000Z"}} +{"payment_id":"PAY_000530","order_id":"ORD_000530","customer_id":"CUST_0194","amount":1222.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T11:00:00.000Z"}} +{"payment_id":"PAY_000531","order_id":"ORD_000531","customer_id":"CUST_0011","amount":128.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"payment_id":"PAY_000532","order_id":"ORD_000532","customer_id":"CUST_0028","amount":541.42,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T13:00:00.000Z"}} +{"payment_id":"PAY_000533","order_id":"ORD_000533","customer_id":"CUST_0045","amount":1298.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T14:00:00.000Z"}} +{"payment_id":"PAY_000534","order_id":"ORD_000534","customer_id":"CUST_0062","amount":1944.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T15:00:00.000Z"}} +{"payment_id":"PAY_000535","order_id":"ORD_000535","customer_id":"CUST_0079","amount":2320.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T16:00:00.000Z"}} +{"payment_id":"PAY_000536","order_id":"ORD_000536","customer_id":"CUST_0096","amount":334.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T17:00:00.000Z"}} +{"payment_id":"PAY_000537","order_id":"ORD_000537","customer_id":"CUST_0113","amount":427.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T18:00:00.000Z"}} +{"payment_id":"PAY_000538","order_id":"ORD_000538","customer_id":"CUST_0130","amount":403.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T19:00:00.000Z"}} +{"payment_id":"PAY_000539","order_id":"ORD_000539","customer_id":"CUST_0147","amount":830.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T20:00:00.000Z"}} +{"payment_id":"PAY_000540","order_id":"ORD_000540","customer_id":"CUST_0164","amount":1544.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T21:00:00.000Z"}} +{"payment_id":"PAY_000541","order_id":"ORD_000541","customer_id":"CUST_0181","amount":165.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_000542","order_id":"ORD_000542","customer_id":"CUST_0198","amount":650.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_000543","order_id":"ORD_000543","customer_id":"CUST_0015","amount":1496.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_000544","order_id":"ORD_000544","customer_id":"CUST_0032","amount":2191.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_000545","order_id":"ORD_000545","customer_id":"CUST_0049","amount":2287.02,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_000546","order_id":"ORD_000546","customer_id":"CUST_0066","amount":372,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_000547","order_id":"ORD_000547","customer_id":"CUST_0083","amount":160.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_000548","order_id":"ORD_000548","customer_id":"CUST_0100","amount":602.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_000549","order_id":"ORD_000549","customer_id":"CUST_0117","amount":1077.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_000550","order_id":"ORD_000550","customer_id":"CUST_0134","amount":1867.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_000551","order_id":"ORD_000551","customer_id":"CUST_0151","amount":203.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_000552","order_id":"ORD_000552","customer_id":"CUST_0168","amount":758.92,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_000553","order_id":"ORD_000553","customer_id":"CUST_0185","amount":1695.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_000554","order_id":"ORD_000554","customer_id":"CUST_0002","amount":2064.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_000555","order_id":"ORD_000555","customer_id":"CUST_0019","amount":734.51,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_000556","order_id":"ORD_000556","customer_id":"CUST_0036","amount":34.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_000557","order_id":"ORD_000557","customer_id":"CUST_0053","amount":269.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_000558","order_id":"ORD_000558","customer_id":"CUST_0070","amount":801.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_000559","order_id":"ORD_000559","customer_id":"CUST_0087","amount":1325.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_000560","order_id":"ORD_000560","customer_id":"CUST_0104","amount":2189.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} +{"payment_id":"PAY_000561","order_id":"ORD_000561","customer_id":"CUST_0121","amount":240.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T02:00:00.000Z"}} +{"payment_id":"PAY_000562","order_id":"ORD_000562","customer_id":"CUST_0138","amount":867.67,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T03:00:00.000Z"}} +{"payment_id":"PAY_000563","order_id":"ORD_000563","customer_id":"CUST_0155","amount":1894.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T04:00:00.000Z"}} +{"payment_id":"PAY_000564","order_id":"ORD_000564","customer_id":"CUST_0172","amount":549.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T05:00:00.000Z"}} +{"payment_id":"PAY_000565","order_id":"ORD_000565","customer_id":"CUST_0189","amount":738.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T06:00:00.000Z"}} +{"payment_id":"PAY_000566","order_id":"ORD_000566","customer_id":"CUST_0006","amount":72,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T07:00:00.000Z"}} +{"payment_id":"PAY_000567","order_id":"ORD_000567","customer_id":"CUST_0023","amount":378.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T08:00:00.000Z"}} +{"payment_id":"PAY_000568","order_id":"ORD_000568","customer_id":"CUST_0040","amount":999.98,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T09:00:00.000Z"}} +{"payment_id":"PAY_000569","order_id":"ORD_000569","customer_id":"CUST_0057","amount":1572.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T10:00:00.000Z"}} +{"payment_id":"PAY_000570","order_id":"ORD_000570","customer_id":"CUST_0074","amount":2512.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T11:00:00.000Z"}} +{"payment_id":"PAY_000571","order_id":"ORD_000571","customer_id":"CUST_0091","amount":278.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T12:00:00.000Z"}} +{"payment_id":"PAY_000572","order_id":"ORD_000572","customer_id":"CUST_0108","amount":976.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T13:00:00.000Z"}} +{"payment_id":"PAY_000573","order_id":"ORD_000573","customer_id":"CUST_0125","amount":1136.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T14:00:00.000Z"}} +{"payment_id":"PAY_000574","order_id":"ORD_000574","customer_id":"CUST_0142","amount":459.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T15:00:00.000Z"}} +{"payment_id":"PAY_000575","order_id":"ORD_000575","customer_id":"CUST_0159","amount":1060.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T16:00:00.000Z"}} +{"payment_id":"PAY_000576","order_id":"ORD_000576","customer_id":"CUST_0176","amount":109.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T17:00:00.000Z"}} +{"payment_id":"PAY_000577","order_id":"ORD_000577","customer_id":"CUST_0193","amount":487.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T18:00:00.000Z"}} +{"payment_id":"PAY_000578","order_id":"ORD_000578","customer_id":"CUST_0010","amount":1198.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T19:00:00.000Z"}} +{"payment_id":"PAY_000579","order_id":"ORD_000579","customer_id":"CUST_0027","amount":1820.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T20:00:00.000Z"}} +{"payment_id":"PAY_000580","order_id":"ORD_000580","customer_id":"CUST_0044","amount":2834.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T21:00:00.000Z"}} +{"payment_id":"PAY_000581","order_id":"ORD_000581","customer_id":"CUST_0061","amount":315.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T02:00:00.000Z"}} +{"payment_id":"PAY_000582","order_id":"ORD_000582","customer_id":"CUST_0078","amount":1085.18,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T03:00:00.000Z"}} +{"payment_id":"PAY_000583","order_id":"ORD_000583","customer_id":"CUST_0095","amount":304.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T04:00:00.000Z"}} +{"payment_id":"PAY_000584","order_id":"ORD_000584","customer_id":"CUST_0112","amount":706.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T05:00:00.000Z"}} +{"payment_id":"PAY_000585","order_id":"ORD_000585","customer_id":"CUST_0129","amount":1383.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T06:00:00.000Z"}} +{"payment_id":"PAY_000586","order_id":"ORD_000586","customer_id":"CUST_0146","amount":147,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T07:00:00.000Z"}} +{"payment_id":"PAY_000587","order_id":"ORD_000587","customer_id":"CUST_0163","amount":595.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T08:00:00.000Z"}} +{"payment_id":"PAY_000588","order_id":"ORD_000588","customer_id":"CUST_0180","amount":1397.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T09:00:00.000Z"}} +{"payment_id":"PAY_000589","order_id":"ORD_000589","customer_id":"CUST_0197","amount":2067.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T10:00:00.000Z"}} +{"payment_id":"PAY_000590","order_id":"ORD_000590","customer_id":"CUST_0014","amount":2125.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T11:00:00.000Z"}} +{"payment_id":"PAY_000591","order_id":"ORD_000591","customer_id":"CUST_0031","amount":353.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T12:00:00.000Z"}} +{"payment_id":"PAY_000592","order_id":"ORD_000592","customer_id":"CUST_0048","amount":106.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T13:00:00.000Z"}} +{"payment_id":"PAY_000593","order_id":"ORD_000593","customer_id":"CUST_0065","amount":503.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T14:00:00.000Z"}} +{"payment_id":"PAY_000594","order_id":"ORD_000594","customer_id":"CUST_0082","amount":954.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T15:00:00.000Z"}} +{"payment_id":"PAY_000595","order_id":"ORD_000595","customer_id":"CUST_0099","amount":1705.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T16:00:00.000Z"}} +{"payment_id":"PAY_000596","order_id":"ORD_000596","customer_id":"CUST_0116","amount":184.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T17:00:00.000Z"}} +{"payment_id":"PAY_000597","order_id":"ORD_000597","customer_id":"CUST_0133","amount":704.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T18:00:00.000Z"}} +{"payment_id":"PAY_000598","order_id":"ORD_000598","customer_id":"CUST_0150","amount":1596.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T19:00:00.000Z"}} +{"payment_id":"PAY_000599","order_id":"ORD_000599","customer_id":"CUST_0167","amount":2315.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T20:00:00.000Z"}} +{"payment_id":"PAY_000600","order_id":"ORD_000600","customer_id":"CUST_0184","amount":1323.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T21:00:00.000Z"}} +{"payment_id":"PAY_000601","order_id":"ORD_000601","customer_id":"CUST_0001","amount":15.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T02:00:00.000Z"}} +{"payment_id":"PAY_000602","order_id":"ORD_000602","customer_id":"CUST_0018","amount":215.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T03:00:00.000Z"}} +{"payment_id":"PAY_000603","order_id":"ORD_000603","customer_id":"CUST_0035","amount":701.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T04:00:00.000Z"}} +{"payment_id":"PAY_000604","order_id":"ORD_000604","customer_id":"CUST_0052","amount":1201.57,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T05:00:00.000Z"}} +{"payment_id":"PAY_000605","order_id":"ORD_000605","customer_id":"CUST_0069","amount":2028.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T06:00:00.000Z"}} +{"payment_id":"PAY_000606","order_id":"ORD_000606","customer_id":"CUST_0086","amount":222,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T07:00:00.000Z"}} +{"payment_id":"PAY_000607","order_id":"ORD_000607","customer_id":"CUST_0103","amount":813.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T08:00:00.000Z"}} +{"payment_id":"PAY_000608","order_id":"ORD_000608","customer_id":"CUST_0120","amount":1794.97,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T09:00:00.000Z"}} +{"payment_id":"PAY_000609","order_id":"ORD_000609","customer_id":"CUST_0137","amount":1062.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T10:00:00.000Z"}} +{"payment_id":"PAY_000610","order_id":"ORD_000610","customer_id":"CUST_0154","amount":895.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T11:00:00.000Z"}} +{"payment_id":"PAY_000611","order_id":"ORD_000611","customer_id":"CUST_0171","amount":53.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"payment_id":"PAY_000612","order_id":"ORD_000612","customer_id":"CUST_0188","amount":323.93,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T13:00:00.000Z"}} +{"payment_id":"PAY_000613","order_id":"ORD_000613","customer_id":"CUST_0005","amount":900.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T14:00:00.000Z"}} +{"payment_id":"PAY_000614","order_id":"ORD_000614","customer_id":"CUST_0022","amount":1449.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T15:00:00.000Z"}} +{"payment_id":"PAY_000615","order_id":"ORD_000615","customer_id":"CUST_0039","amount":2350.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T16:00:00.000Z"}} +{"payment_id":"PAY_000616","order_id":"ORD_000616","customer_id":"CUST_0056","amount":259.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T17:00:00.000Z"}} +{"payment_id":"PAY_000617","order_id":"ORD_000617","customer_id":"CUST_0073","amount":922.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T18:00:00.000Z"}} +{"payment_id":"PAY_000618","order_id":"ORD_000618","customer_id":"CUST_0090","amount":1037.48,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T19:00:00.000Z"}} +{"payment_id":"PAY_000619","order_id":"ORD_000619","customer_id":"CUST_0107","amount":672.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T20:00:00.000Z"}} +{"payment_id":"PAY_000620","order_id":"ORD_000620","customer_id":"CUST_0124","amount":899.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T21:00:00.000Z"}} +{"payment_id":"PAY_000621","order_id":"ORD_000621","customer_id":"CUST_0141","amount":90.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T02:00:00.000Z"}} +{"payment_id":"PAY_000622","order_id":"ORD_000622","customer_id":"CUST_0158","amount":432.68,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T03:00:00.000Z"}} +{"payment_id":"PAY_000623","order_id":"ORD_000623","customer_id":"CUST_0175","amount":1099.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T04:00:00.000Z"}} +{"payment_id":"PAY_000624","order_id":"ORD_000624","customer_id":"CUST_0192","amount":1696.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T05:00:00.000Z"}} +{"payment_id":"PAY_000625","order_id":"ORD_000625","customer_id":"CUST_0009","amount":2673.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T06:00:00.000Z"}} +{"payment_id":"PAY_000626","order_id":"ORD_000626","customer_id":"CUST_0026","amount":297,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T07:00:00.000Z"}} +{"payment_id":"PAY_000627","order_id":"ORD_000627","customer_id":"CUST_0043","amount":1030.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T08:00:00.000Z"}} +{"payment_id":"PAY_000628","order_id":"ORD_000628","customer_id":"CUST_0060","amount":561.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T09:00:00.000Z"}} +{"payment_id":"PAY_000629","order_id":"ORD_000629","customer_id":"CUST_0077","amount":582.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T10:00:00.000Z"}} +{"payment_id":"PAY_000630","order_id":"ORD_000630","customer_id":"CUST_0094","amount":1222.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T11:00:00.000Z"}} +{"payment_id":"PAY_000631","order_id":"ORD_000631","customer_id":"CUST_0111","amount":128.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T12:00:00.000Z"}} +{"payment_id":"PAY_000632","order_id":"ORD_000632","customer_id":"CUST_0128","amount":541.42,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T13:00:00.000Z"}} +{"payment_id":"PAY_000633","order_id":"ORD_000633","customer_id":"CUST_0145","amount":1298.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T14:00:00.000Z"}} +{"payment_id":"PAY_000634","order_id":"ORD_000634","customer_id":"CUST_0162","amount":1944.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T15:00:00.000Z"}} +{"payment_id":"PAY_000635","order_id":"ORD_000635","customer_id":"CUST_0179","amount":2320.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T16:00:00.000Z"}} +{"payment_id":"PAY_000636","order_id":"ORD_000636","customer_id":"CUST_0196","amount":334.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T17:00:00.000Z"}} +{"payment_id":"PAY_000637","order_id":"ORD_000637","customer_id":"CUST_0013","amount":427.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T18:00:00.000Z"}} +{"payment_id":"PAY_000638","order_id":"ORD_000638","customer_id":"CUST_0030","amount":403.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T19:00:00.000Z"}} +{"payment_id":"PAY_000639","order_id":"ORD_000639","customer_id":"CUST_0047","amount":830.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T20:00:00.000Z"}} +{"payment_id":"PAY_000640","order_id":"ORD_000640","customer_id":"CUST_0064","amount":1544.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T21:00:00.000Z"}} +{"payment_id":"PAY_000641","order_id":"ORD_000641","customer_id":"CUST_0081","amount":165.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T02:00:00.000Z"}} +{"payment_id":"PAY_000642","order_id":"ORD_000642","customer_id":"CUST_0098","amount":650.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T03:00:00.000Z"}} +{"payment_id":"PAY_000643","order_id":"ORD_000643","customer_id":"CUST_0115","amount":1496.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T04:00:00.000Z"}} +{"payment_id":"PAY_000644","order_id":"ORD_000644","customer_id":"CUST_0132","amount":2191.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T05:00:00.000Z"}} +{"payment_id":"PAY_000645","order_id":"ORD_000645","customer_id":"CUST_0149","amount":2287.02,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T06:00:00.000Z"}} +{"payment_id":"PAY_000646","order_id":"ORD_000646","customer_id":"CUST_0166","amount":372,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T07:00:00.000Z"}} +{"payment_id":"PAY_000647","order_id":"ORD_000647","customer_id":"CUST_0183","amount":160.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T08:00:00.000Z"}} +{"payment_id":"PAY_000648","order_id":"ORD_000648","customer_id":"CUST_0200","amount":602.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T09:00:00.000Z"}} +{"payment_id":"PAY_000649","order_id":"ORD_000649","customer_id":"CUST_0017","amount":1077.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T10:00:00.000Z"}} +{"payment_id":"PAY_000650","order_id":"ORD_000650","customer_id":"CUST_0034","amount":1867.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T11:00:00.000Z"}} +{"payment_id":"PAY_000651","order_id":"ORD_000651","customer_id":"CUST_0051","amount":203.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T12:00:00.000Z"}} +{"payment_id":"PAY_000652","order_id":"ORD_000652","customer_id":"CUST_0068","amount":758.92,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T13:00:00.000Z"}} +{"payment_id":"PAY_000653","order_id":"ORD_000653","customer_id":"CUST_0085","amount":1695.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T14:00:00.000Z"}} +{"payment_id":"PAY_000654","order_id":"ORD_000654","customer_id":"CUST_0102","amount":2064.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T15:00:00.000Z"}} +{"payment_id":"PAY_000655","order_id":"ORD_000655","customer_id":"CUST_0119","amount":734.51,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T16:00:00.000Z"}} +{"payment_id":"PAY_000656","order_id":"ORD_000656","customer_id":"CUST_0136","amount":34.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T17:00:00.000Z"}} +{"payment_id":"PAY_000657","order_id":"ORD_000657","customer_id":"CUST_0153","amount":269.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T18:00:00.000Z"}} +{"payment_id":"PAY_000658","order_id":"ORD_000658","customer_id":"CUST_0170","amount":801.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T19:00:00.000Z"}} +{"payment_id":"PAY_000659","order_id":"ORD_000659","customer_id":"CUST_0187","amount":1325.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T20:00:00.000Z"}} +{"payment_id":"PAY_000660","order_id":"ORD_000660","customer_id":"CUST_0004","amount":2189.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T21:00:00.000Z"}} +{"payment_id":"PAY_000661","order_id":"ORD_000661","customer_id":"CUST_0021","amount":240.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T02:00:00.000Z"}} +{"payment_id":"PAY_000662","order_id":"ORD_000662","customer_id":"CUST_0038","amount":867.67,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T03:00:00.000Z"}} +{"payment_id":"PAY_000663","order_id":"ORD_000663","customer_id":"CUST_0055","amount":1894.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T04:00:00.000Z"}} +{"payment_id":"PAY_000664","order_id":"ORD_000664","customer_id":"CUST_0072","amount":549.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T05:00:00.000Z"}} +{"payment_id":"PAY_000665","order_id":"ORD_000665","customer_id":"CUST_0089","amount":738.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T06:00:00.000Z"}} +{"payment_id":"PAY_000666","order_id":"ORD_000666","customer_id":"CUST_0106","amount":72,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T07:00:00.000Z"}} +{"payment_id":"PAY_000667","order_id":"ORD_000667","customer_id":"CUST_0123","amount":378.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T08:00:00.000Z"}} +{"payment_id":"PAY_000668","order_id":"ORD_000668","customer_id":"CUST_0140","amount":999.98,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T09:00:00.000Z"}} +{"payment_id":"PAY_000669","order_id":"ORD_000669","customer_id":"CUST_0157","amount":1572.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T10:00:00.000Z"}} +{"payment_id":"PAY_000670","order_id":"ORD_000670","customer_id":"CUST_0174","amount":2512.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T11:00:00.000Z"}} +{"payment_id":"PAY_000671","order_id":"ORD_000671","customer_id":"CUST_0191","amount":278.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T12:00:00.000Z"}} +{"payment_id":"PAY_000672","order_id":"ORD_000672","customer_id":"CUST_0008","amount":976.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T13:00:00.000Z"}} +{"payment_id":"PAY_000673","order_id":"ORD_000673","customer_id":"CUST_0025","amount":1136.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T14:00:00.000Z"}} +{"payment_id":"PAY_000674","order_id":"ORD_000674","customer_id":"CUST_0042","amount":459.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T15:00:00.000Z"}} +{"payment_id":"PAY_000675","order_id":"ORD_000675","customer_id":"CUST_0059","amount":1060.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T16:00:00.000Z"}} +{"payment_id":"PAY_000676","order_id":"ORD_000676","customer_id":"CUST_0076","amount":109.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T17:00:00.000Z"}} +{"payment_id":"PAY_000677","order_id":"ORD_000677","customer_id":"CUST_0093","amount":487.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T18:00:00.000Z"}} +{"payment_id":"PAY_000678","order_id":"ORD_000678","customer_id":"CUST_0110","amount":1198.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T19:00:00.000Z"}} +{"payment_id":"PAY_000679","order_id":"ORD_000679","customer_id":"CUST_0127","amount":1820.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T20:00:00.000Z"}} +{"payment_id":"PAY_000680","order_id":"ORD_000680","customer_id":"CUST_0144","amount":2834.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T21:00:00.000Z"}} +{"payment_id":"PAY_000681","order_id":"ORD_000681","customer_id":"CUST_0161","amount":315.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T02:00:00.000Z"}} +{"payment_id":"PAY_000682","order_id":"ORD_000682","customer_id":"CUST_0178","amount":1085.18,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T03:00:00.000Z"}} +{"payment_id":"PAY_000683","order_id":"ORD_000683","customer_id":"CUST_0195","amount":304.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T04:00:00.000Z"}} +{"payment_id":"PAY_000684","order_id":"ORD_000684","customer_id":"CUST_0012","amount":706.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T05:00:00.000Z"}} +{"payment_id":"PAY_000685","order_id":"ORD_000685","customer_id":"CUST_0029","amount":1383.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T06:00:00.000Z"}} +{"payment_id":"PAY_000686","order_id":"ORD_000686","customer_id":"CUST_0046","amount":147,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T07:00:00.000Z"}} +{"payment_id":"PAY_000687","order_id":"ORD_000687","customer_id":"CUST_0063","amount":595.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T08:00:00.000Z"}} +{"payment_id":"PAY_000688","order_id":"ORD_000688","customer_id":"CUST_0080","amount":1397.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T09:00:00.000Z"}} +{"payment_id":"PAY_000689","order_id":"ORD_000689","customer_id":"CUST_0097","amount":2067.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T10:00:00.000Z"}} +{"payment_id":"PAY_000690","order_id":"ORD_000690","customer_id":"CUST_0114","amount":2125.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T11:00:00.000Z"}} +{"payment_id":"PAY_000691","order_id":"ORD_000691","customer_id":"CUST_0131","amount":353.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"payment_id":"PAY_000692","order_id":"ORD_000692","customer_id":"CUST_0148","amount":106.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T13:00:00.000Z"}} +{"payment_id":"PAY_000693","order_id":"ORD_000693","customer_id":"CUST_0165","amount":503.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T14:00:00.000Z"}} +{"payment_id":"PAY_000694","order_id":"ORD_000694","customer_id":"CUST_0182","amount":954.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T15:00:00.000Z"}} +{"payment_id":"PAY_000695","order_id":"ORD_000695","customer_id":"CUST_0199","amount":1705.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T16:00:00.000Z"}} +{"payment_id":"PAY_000696","order_id":"ORD_000696","customer_id":"CUST_0016","amount":184.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T17:00:00.000Z"}} +{"payment_id":"PAY_000697","order_id":"ORD_000697","customer_id":"CUST_0033","amount":704.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T18:00:00.000Z"}} +{"payment_id":"PAY_000698","order_id":"ORD_000698","customer_id":"CUST_0050","amount":1596.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T19:00:00.000Z"}} +{"payment_id":"PAY_000699","order_id":"ORD_000699","customer_id":"CUST_0067","amount":2315.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T20:00:00.000Z"}} +{"payment_id":"PAY_000700","order_id":"ORD_000700","customer_id":"CUST_0084","amount":1323.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T21:00:00.000Z"}} +{"payment_id":"PAY_000701","order_id":"ORD_000701","customer_id":"CUST_0101","amount":15.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T02:00:00.000Z"}} +{"payment_id":"PAY_000702","order_id":"ORD_000702","customer_id":"CUST_0118","amount":215.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T03:00:00.000Z"}} +{"payment_id":"PAY_000703","order_id":"ORD_000703","customer_id":"CUST_0135","amount":701.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T04:00:00.000Z"}} +{"payment_id":"PAY_000704","order_id":"ORD_000704","customer_id":"CUST_0152","amount":1201.57,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T05:00:00.000Z"}} +{"payment_id":"PAY_000705","order_id":"ORD_000705","customer_id":"CUST_0169","amount":2028.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T06:00:00.000Z"}} +{"payment_id":"PAY_000706","order_id":"ORD_000706","customer_id":"CUST_0186","amount":222,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T07:00:00.000Z"}} +{"payment_id":"PAY_000707","order_id":"ORD_000707","customer_id":"CUST_0003","amount":813.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T08:00:00.000Z"}} +{"payment_id":"PAY_000708","order_id":"ORD_000708","customer_id":"CUST_0020","amount":1794.97,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T09:00:00.000Z"}} +{"payment_id":"PAY_000709","order_id":"ORD_000709","customer_id":"CUST_0037","amount":1062.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T10:00:00.000Z"}} +{"payment_id":"PAY_000710","order_id":"ORD_000710","customer_id":"CUST_0054","amount":895.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T11:00:00.000Z"}} +{"payment_id":"PAY_000711","order_id":"ORD_000711","customer_id":"CUST_0071","amount":53.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"payment_id":"PAY_000712","order_id":"ORD_000712","customer_id":"CUST_0088","amount":323.93,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T13:00:00.000Z"}} +{"payment_id":"PAY_000713","order_id":"ORD_000713","customer_id":"CUST_0105","amount":900.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T14:00:00.000Z"}} +{"payment_id":"PAY_000714","order_id":"ORD_000714","customer_id":"CUST_0122","amount":1449.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T15:00:00.000Z"}} +{"payment_id":"PAY_000715","order_id":"ORD_000715","customer_id":"CUST_0139","amount":2350.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T16:00:00.000Z"}} +{"payment_id":"PAY_000716","order_id":"ORD_000716","customer_id":"CUST_0156","amount":259.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T17:00:00.000Z"}} +{"payment_id":"PAY_000717","order_id":"ORD_000717","customer_id":"CUST_0173","amount":922.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T18:00:00.000Z"}} +{"payment_id":"PAY_000718","order_id":"ORD_000718","customer_id":"CUST_0190","amount":1037.48,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T19:00:00.000Z"}} +{"payment_id":"PAY_000719","order_id":"ORD_000719","customer_id":"CUST_0007","amount":672.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T20:00:00.000Z"}} +{"payment_id":"PAY_000720","order_id":"ORD_000720","customer_id":"CUST_0024","amount":899.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T21:00:00.000Z"}} +{"payment_id":"PAY_000721","order_id":"ORD_000721","customer_id":"CUST_0041","amount":90.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_000722","order_id":"ORD_000722","customer_id":"CUST_0058","amount":432.68,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_000723","order_id":"ORD_000723","customer_id":"CUST_0075","amount":1099.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_000724","order_id":"ORD_000724","customer_id":"CUST_0092","amount":1696.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_000725","order_id":"ORD_000725","customer_id":"CUST_0109","amount":2673.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_000726","order_id":"ORD_000726","customer_id":"CUST_0126","amount":297,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_000727","order_id":"ORD_000727","customer_id":"CUST_0143","amount":1030.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_000728","order_id":"ORD_000728","customer_id":"CUST_0160","amount":561.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_000729","order_id":"ORD_000729","customer_id":"CUST_0177","amount":582.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_000730","order_id":"ORD_000730","customer_id":"CUST_0194","amount":1222.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_000731","order_id":"ORD_000731","customer_id":"CUST_0011","amount":128.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_000732","order_id":"ORD_000732","customer_id":"CUST_0028","amount":541.42,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_000733","order_id":"ORD_000733","customer_id":"CUST_0045","amount":1298.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_000734","order_id":"ORD_000734","customer_id":"CUST_0062","amount":1944.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_000735","order_id":"ORD_000735","customer_id":"CUST_0079","amount":2320.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_000736","order_id":"ORD_000736","customer_id":"CUST_0096","amount":334.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_000737","order_id":"ORD_000737","customer_id":"CUST_0113","amount":427.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_000738","order_id":"ORD_000738","customer_id":"CUST_0130","amount":403.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_000739","order_id":"ORD_000739","customer_id":"CUST_0147","amount":830.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_000740","order_id":"ORD_000740","customer_id":"CUST_0164","amount":1544.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} +{"payment_id":"PAY_000741","order_id":"ORD_000741","customer_id":"CUST_0181","amount":165.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T02:00:00.000Z"}} +{"payment_id":"PAY_000742","order_id":"ORD_000742","customer_id":"CUST_0198","amount":650.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T03:00:00.000Z"}} +{"payment_id":"PAY_000743","order_id":"ORD_000743","customer_id":"CUST_0015","amount":1496.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T04:00:00.000Z"}} +{"payment_id":"PAY_000744","order_id":"ORD_000744","customer_id":"CUST_0032","amount":2191.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T05:00:00.000Z"}} +{"payment_id":"PAY_000745","order_id":"ORD_000745","customer_id":"CUST_0049","amount":2287.02,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T06:00:00.000Z"}} +{"payment_id":"PAY_000746","order_id":"ORD_000746","customer_id":"CUST_0066","amount":372,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T07:00:00.000Z"}} +{"payment_id":"PAY_000747","order_id":"ORD_000747","customer_id":"CUST_0083","amount":160.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T08:00:00.000Z"}} +{"payment_id":"PAY_000748","order_id":"ORD_000748","customer_id":"CUST_0100","amount":602.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T09:00:00.000Z"}} +{"payment_id":"PAY_000749","order_id":"ORD_000749","customer_id":"CUST_0117","amount":1077.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T10:00:00.000Z"}} +{"payment_id":"PAY_000750","order_id":"ORD_000750","customer_id":"CUST_0134","amount":1867.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T11:00:00.000Z"}} +{"payment_id":"PAY_000751","order_id":"ORD_000751","customer_id":"CUST_0151","amount":203.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T12:00:00.000Z"}} +{"payment_id":"PAY_000752","order_id":"ORD_000752","customer_id":"CUST_0168","amount":758.92,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T13:00:00.000Z"}} +{"payment_id":"PAY_000753","order_id":"ORD_000753","customer_id":"CUST_0185","amount":1695.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T14:00:00.000Z"}} +{"payment_id":"PAY_000754","order_id":"ORD_000754","customer_id":"CUST_0002","amount":2064.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T15:00:00.000Z"}} +{"payment_id":"PAY_000755","order_id":"ORD_000755","customer_id":"CUST_0019","amount":734.51,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T16:00:00.000Z"}} +{"payment_id":"PAY_000756","order_id":"ORD_000756","customer_id":"CUST_0036","amount":34.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T17:00:00.000Z"}} +{"payment_id":"PAY_000757","order_id":"ORD_000757","customer_id":"CUST_0053","amount":269.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T18:00:00.000Z"}} +{"payment_id":"PAY_000758","order_id":"ORD_000758","customer_id":"CUST_0070","amount":801.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T19:00:00.000Z"}} +{"payment_id":"PAY_000759","order_id":"ORD_000759","customer_id":"CUST_0087","amount":1325.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T20:00:00.000Z"}} +{"payment_id":"PAY_000760","order_id":"ORD_000760","customer_id":"CUST_0104","amount":2189.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T21:00:00.000Z"}} +{"payment_id":"PAY_000761","order_id":"ORD_000761","customer_id":"CUST_0121","amount":240.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T02:00:00.000Z"}} +{"payment_id":"PAY_000762","order_id":"ORD_000762","customer_id":"CUST_0138","amount":867.67,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T03:00:00.000Z"}} +{"payment_id":"PAY_000763","order_id":"ORD_000763","customer_id":"CUST_0155","amount":1894.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T04:00:00.000Z"}} +{"payment_id":"PAY_000764","order_id":"ORD_000764","customer_id":"CUST_0172","amount":549.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T05:00:00.000Z"}} +{"payment_id":"PAY_000765","order_id":"ORD_000765","customer_id":"CUST_0189","amount":738.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T06:00:00.000Z"}} +{"payment_id":"PAY_000766","order_id":"ORD_000766","customer_id":"CUST_0006","amount":72,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T07:00:00.000Z"}} +{"payment_id":"PAY_000767","order_id":"ORD_000767","customer_id":"CUST_0023","amount":378.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T08:00:00.000Z"}} +{"payment_id":"PAY_000768","order_id":"ORD_000768","customer_id":"CUST_0040","amount":999.98,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T09:00:00.000Z"}} +{"payment_id":"PAY_000769","order_id":"ORD_000769","customer_id":"CUST_0057","amount":1572.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T10:00:00.000Z"}} +{"payment_id":"PAY_000770","order_id":"ORD_000770","customer_id":"CUST_0074","amount":2512.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T11:00:00.000Z"}} +{"payment_id":"PAY_000771","order_id":"ORD_000771","customer_id":"CUST_0091","amount":278.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T12:00:00.000Z"}} +{"payment_id":"PAY_000772","order_id":"ORD_000772","customer_id":"CUST_0108","amount":976.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T13:00:00.000Z"}} +{"payment_id":"PAY_000773","order_id":"ORD_000773","customer_id":"CUST_0125","amount":1136.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T14:00:00.000Z"}} +{"payment_id":"PAY_000774","order_id":"ORD_000774","customer_id":"CUST_0142","amount":459.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T15:00:00.000Z"}} +{"payment_id":"PAY_000775","order_id":"ORD_000775","customer_id":"CUST_0159","amount":1060.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T16:00:00.000Z"}} +{"payment_id":"PAY_000776","order_id":"ORD_000776","customer_id":"CUST_0176","amount":109.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T17:00:00.000Z"}} +{"payment_id":"PAY_000777","order_id":"ORD_000777","customer_id":"CUST_0193","amount":487.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T18:00:00.000Z"}} +{"payment_id":"PAY_000778","order_id":"ORD_000778","customer_id":"CUST_0010","amount":1198.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T19:00:00.000Z"}} +{"payment_id":"PAY_000779","order_id":"ORD_000779","customer_id":"CUST_0027","amount":1820.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T20:00:00.000Z"}} +{"payment_id":"PAY_000780","order_id":"ORD_000780","customer_id":"CUST_0044","amount":2834.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T21:00:00.000Z"}} +{"payment_id":"PAY_000781","order_id":"ORD_000781","customer_id":"CUST_0061","amount":315.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T02:00:00.000Z"}} +{"payment_id":"PAY_000782","order_id":"ORD_000782","customer_id":"CUST_0078","amount":1085.18,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T03:00:00.000Z"}} +{"payment_id":"PAY_000783","order_id":"ORD_000783","customer_id":"CUST_0095","amount":304.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T04:00:00.000Z"}} +{"payment_id":"PAY_000784","order_id":"ORD_000784","customer_id":"CUST_0112","amount":706.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T05:00:00.000Z"}} +{"payment_id":"PAY_000785","order_id":"ORD_000785","customer_id":"CUST_0129","amount":1383.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T06:00:00.000Z"}} +{"payment_id":"PAY_000786","order_id":"ORD_000786","customer_id":"CUST_0146","amount":147,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T07:00:00.000Z"}} +{"payment_id":"PAY_000787","order_id":"ORD_000787","customer_id":"CUST_0163","amount":595.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T08:00:00.000Z"}} +{"payment_id":"PAY_000788","order_id":"ORD_000788","customer_id":"CUST_0180","amount":1397.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T09:00:00.000Z"}} +{"payment_id":"PAY_000789","order_id":"ORD_000789","customer_id":"CUST_0197","amount":2067.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T10:00:00.000Z"}} +{"payment_id":"PAY_000790","order_id":"ORD_000790","customer_id":"CUST_0014","amount":2125.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T11:00:00.000Z"}} +{"payment_id":"PAY_000791","order_id":"ORD_000791","customer_id":"CUST_0031","amount":353.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"payment_id":"PAY_000792","order_id":"ORD_000792","customer_id":"CUST_0048","amount":106.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T13:00:00.000Z"}} +{"payment_id":"PAY_000793","order_id":"ORD_000793","customer_id":"CUST_0065","amount":503.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T14:00:00.000Z"}} +{"payment_id":"PAY_000794","order_id":"ORD_000794","customer_id":"CUST_0082","amount":954.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T15:00:00.000Z"}} +{"payment_id":"PAY_000795","order_id":"ORD_000795","customer_id":"CUST_0099","amount":1705.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T16:00:00.000Z"}} +{"payment_id":"PAY_000796","order_id":"ORD_000796","customer_id":"CUST_0116","amount":184.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T17:00:00.000Z"}} +{"payment_id":"PAY_000797","order_id":"ORD_000797","customer_id":"CUST_0133","amount":704.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T18:00:00.000Z"}} +{"payment_id":"PAY_000798","order_id":"ORD_000798","customer_id":"CUST_0150","amount":1596.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T19:00:00.000Z"}} +{"payment_id":"PAY_000799","order_id":"ORD_000799","customer_id":"CUST_0167","amount":2315.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T20:00:00.000Z"}} +{"payment_id":"PAY_000800","order_id":"ORD_000800","customer_id":"CUST_0184","amount":1323.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T21:00:00.000Z"}} +{"payment_id":"PAY_000801","order_id":"ORD_000801","customer_id":"CUST_0001","amount":15.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T02:00:00.000Z"}} +{"payment_id":"PAY_000802","order_id":"ORD_000802","customer_id":"CUST_0018","amount":215.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T03:00:00.000Z"}} +{"payment_id":"PAY_000803","order_id":"ORD_000803","customer_id":"CUST_0035","amount":701.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T04:00:00.000Z"}} +{"payment_id":"PAY_000804","order_id":"ORD_000804","customer_id":"CUST_0052","amount":1201.57,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T05:00:00.000Z"}} +{"payment_id":"PAY_000805","order_id":"ORD_000805","customer_id":"CUST_0069","amount":2028.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T06:00:00.000Z"}} +{"payment_id":"PAY_000806","order_id":"ORD_000806","customer_id":"CUST_0086","amount":222,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T07:00:00.000Z"}} +{"payment_id":"PAY_000807","order_id":"ORD_000807","customer_id":"CUST_0103","amount":813.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T08:00:00.000Z"}} +{"payment_id":"PAY_000808","order_id":"ORD_000808","customer_id":"CUST_0120","amount":1794.97,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T09:00:00.000Z"}} +{"payment_id":"PAY_000809","order_id":"ORD_000809","customer_id":"CUST_0137","amount":1062.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T10:00:00.000Z"}} +{"payment_id":"PAY_000810","order_id":"ORD_000810","customer_id":"CUST_0154","amount":895.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T11:00:00.000Z"}} +{"payment_id":"PAY_000811","order_id":"ORD_000811","customer_id":"CUST_0171","amount":53.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T12:00:00.000Z"}} +{"payment_id":"PAY_000812","order_id":"ORD_000812","customer_id":"CUST_0188","amount":323.93,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T13:00:00.000Z"}} +{"payment_id":"PAY_000813","order_id":"ORD_000813","customer_id":"CUST_0005","amount":900.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T14:00:00.000Z"}} +{"payment_id":"PAY_000814","order_id":"ORD_000814","customer_id":"CUST_0022","amount":1449.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T15:00:00.000Z"}} +{"payment_id":"PAY_000815","order_id":"ORD_000815","customer_id":"CUST_0039","amount":2350.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T16:00:00.000Z"}} +{"payment_id":"PAY_000816","order_id":"ORD_000816","customer_id":"CUST_0056","amount":259.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T17:00:00.000Z"}} +{"payment_id":"PAY_000817","order_id":"ORD_000817","customer_id":"CUST_0073","amount":922.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T18:00:00.000Z"}} +{"payment_id":"PAY_000818","order_id":"ORD_000818","customer_id":"CUST_0090","amount":1037.48,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T19:00:00.000Z"}} +{"payment_id":"PAY_000819","order_id":"ORD_000819","customer_id":"CUST_0107","amount":672.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T20:00:00.000Z"}} +{"payment_id":"PAY_000820","order_id":"ORD_000820","customer_id":"CUST_0124","amount":899.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T21:00:00.000Z"}} +{"payment_id":"PAY_000821","order_id":"ORD_000821","customer_id":"CUST_0141","amount":90.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T02:00:00.000Z"}} +{"payment_id":"PAY_000822","order_id":"ORD_000822","customer_id":"CUST_0158","amount":432.68,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T03:00:00.000Z"}} +{"payment_id":"PAY_000823","order_id":"ORD_000823","customer_id":"CUST_0175","amount":1099.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T04:00:00.000Z"}} +{"payment_id":"PAY_000824","order_id":"ORD_000824","customer_id":"CUST_0192","amount":1696.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T05:00:00.000Z"}} +{"payment_id":"PAY_000825","order_id":"ORD_000825","customer_id":"CUST_0009","amount":2673.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T06:00:00.000Z"}} +{"payment_id":"PAY_000826","order_id":"ORD_000826","customer_id":"CUST_0026","amount":297,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T07:00:00.000Z"}} +{"payment_id":"PAY_000827","order_id":"ORD_000827","customer_id":"CUST_0043","amount":1030.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T08:00:00.000Z"}} +{"payment_id":"PAY_000828","order_id":"ORD_000828","customer_id":"CUST_0060","amount":561.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T09:00:00.000Z"}} +{"payment_id":"PAY_000829","order_id":"ORD_000829","customer_id":"CUST_0077","amount":582.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T10:00:00.000Z"}} +{"payment_id":"PAY_000830","order_id":"ORD_000830","customer_id":"CUST_0094","amount":1222.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T11:00:00.000Z"}} +{"payment_id":"PAY_000831","order_id":"ORD_000831","customer_id":"CUST_0111","amount":128.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T12:00:00.000Z"}} +{"payment_id":"PAY_000832","order_id":"ORD_000832","customer_id":"CUST_0128","amount":541.42,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T13:00:00.000Z"}} +{"payment_id":"PAY_000833","order_id":"ORD_000833","customer_id":"CUST_0145","amount":1298.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T14:00:00.000Z"}} +{"payment_id":"PAY_000834","order_id":"ORD_000834","customer_id":"CUST_0162","amount":1944.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T15:00:00.000Z"}} +{"payment_id":"PAY_000835","order_id":"ORD_000835","customer_id":"CUST_0179","amount":2320.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T16:00:00.000Z"}} +{"payment_id":"PAY_000836","order_id":"ORD_000836","customer_id":"CUST_0196","amount":334.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T17:00:00.000Z"}} +{"payment_id":"PAY_000837","order_id":"ORD_000837","customer_id":"CUST_0013","amount":427.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T18:00:00.000Z"}} +{"payment_id":"PAY_000838","order_id":"ORD_000838","customer_id":"CUST_0030","amount":403.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T19:00:00.000Z"}} +{"payment_id":"PAY_000839","order_id":"ORD_000839","customer_id":"CUST_0047","amount":830.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T20:00:00.000Z"}} +{"payment_id":"PAY_000840","order_id":"ORD_000840","customer_id":"CUST_0064","amount":1544.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T21:00:00.000Z"}} +{"payment_id":"PAY_000841","order_id":"ORD_000841","customer_id":"CUST_0081","amount":165.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T02:00:00.000Z"}} +{"payment_id":"PAY_000842","order_id":"ORD_000842","customer_id":"CUST_0098","amount":650.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T03:00:00.000Z"}} +{"payment_id":"PAY_000843","order_id":"ORD_000843","customer_id":"CUST_0115","amount":1496.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T04:00:00.000Z"}} +{"payment_id":"PAY_000844","order_id":"ORD_000844","customer_id":"CUST_0132","amount":2191.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T05:00:00.000Z"}} +{"payment_id":"PAY_000845","order_id":"ORD_000845","customer_id":"CUST_0149","amount":2287.02,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T06:00:00.000Z"}} +{"payment_id":"PAY_000846","order_id":"ORD_000846","customer_id":"CUST_0166","amount":372,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T07:00:00.000Z"}} +{"payment_id":"PAY_000847","order_id":"ORD_000847","customer_id":"CUST_0183","amount":160.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T08:00:00.000Z"}} +{"payment_id":"PAY_000848","order_id":"ORD_000848","customer_id":"CUST_0200","amount":602.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T09:00:00.000Z"}} +{"payment_id":"PAY_000849","order_id":"ORD_000849","customer_id":"CUST_0017","amount":1077.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T10:00:00.000Z"}} +{"payment_id":"PAY_000850","order_id":"ORD_000850","customer_id":"CUST_0034","amount":1867.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T11:00:00.000Z"}} +{"payment_id":"PAY_000851","order_id":"ORD_000851","customer_id":"CUST_0051","amount":203.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T12:00:00.000Z"}} +{"payment_id":"PAY_000852","order_id":"ORD_000852","customer_id":"CUST_0068","amount":758.92,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T13:00:00.000Z"}} +{"payment_id":"PAY_000853","order_id":"ORD_000853","customer_id":"CUST_0085","amount":1695.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T14:00:00.000Z"}} +{"payment_id":"PAY_000854","order_id":"ORD_000854","customer_id":"CUST_0102","amount":2064.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T15:00:00.000Z"}} +{"payment_id":"PAY_000855","order_id":"ORD_000855","customer_id":"CUST_0119","amount":734.51,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T16:00:00.000Z"}} +{"payment_id":"PAY_000856","order_id":"ORD_000856","customer_id":"CUST_0136","amount":34.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T17:00:00.000Z"}} +{"payment_id":"PAY_000857","order_id":"ORD_000857","customer_id":"CUST_0153","amount":269.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T18:00:00.000Z"}} +{"payment_id":"PAY_000858","order_id":"ORD_000858","customer_id":"CUST_0170","amount":801.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T19:00:00.000Z"}} +{"payment_id":"PAY_000859","order_id":"ORD_000859","customer_id":"CUST_0187","amount":1325.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T20:00:00.000Z"}} +{"payment_id":"PAY_000860","order_id":"ORD_000860","customer_id":"CUST_0004","amount":2189.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T21:00:00.000Z"}} +{"payment_id":"PAY_000861","order_id":"ORD_000861","customer_id":"CUST_0021","amount":240.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T02:00:00.000Z"}} +{"payment_id":"PAY_000862","order_id":"ORD_000862","customer_id":"CUST_0038","amount":867.67,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T03:00:00.000Z"}} +{"payment_id":"PAY_000863","order_id":"ORD_000863","customer_id":"CUST_0055","amount":1894.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T04:00:00.000Z"}} +{"payment_id":"PAY_000864","order_id":"ORD_000864","customer_id":"CUST_0072","amount":549.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T05:00:00.000Z"}} +{"payment_id":"PAY_000865","order_id":"ORD_000865","customer_id":"CUST_0089","amount":738.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T06:00:00.000Z"}} +{"payment_id":"PAY_000866","order_id":"ORD_000866","customer_id":"CUST_0106","amount":72,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T07:00:00.000Z"}} +{"payment_id":"PAY_000867","order_id":"ORD_000867","customer_id":"CUST_0123","amount":378.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T08:00:00.000Z"}} +{"payment_id":"PAY_000868","order_id":"ORD_000868","customer_id":"CUST_0140","amount":999.98,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T09:00:00.000Z"}} +{"payment_id":"PAY_000869","order_id":"ORD_000869","customer_id":"CUST_0157","amount":1572.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T10:00:00.000Z"}} +{"payment_id":"PAY_000870","order_id":"ORD_000870","customer_id":"CUST_0174","amount":2512.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T11:00:00.000Z"}} +{"payment_id":"PAY_000871","order_id":"ORD_000871","customer_id":"CUST_0191","amount":278.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"payment_id":"PAY_000872","order_id":"ORD_000872","customer_id":"CUST_0008","amount":976.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T13:00:00.000Z"}} +{"payment_id":"PAY_000873","order_id":"ORD_000873","customer_id":"CUST_0025","amount":1136.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T14:00:00.000Z"}} +{"payment_id":"PAY_000874","order_id":"ORD_000874","customer_id":"CUST_0042","amount":459.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T15:00:00.000Z"}} +{"payment_id":"PAY_000875","order_id":"ORD_000875","customer_id":"CUST_0059","amount":1060.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T16:00:00.000Z"}} +{"payment_id":"PAY_000876","order_id":"ORD_000876","customer_id":"CUST_0076","amount":109.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T17:00:00.000Z"}} +{"payment_id":"PAY_000877","order_id":"ORD_000877","customer_id":"CUST_0093","amount":487.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T18:00:00.000Z"}} +{"payment_id":"PAY_000878","order_id":"ORD_000878","customer_id":"CUST_0110","amount":1198.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T19:00:00.000Z"}} +{"payment_id":"PAY_000879","order_id":"ORD_000879","customer_id":"CUST_0127","amount":1820.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T20:00:00.000Z"}} +{"payment_id":"PAY_000880","order_id":"ORD_000880","customer_id":"CUST_0144","amount":2834.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T21:00:00.000Z"}} +{"payment_id":"PAY_000881","order_id":"ORD_000881","customer_id":"CUST_0161","amount":315.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T02:00:00.000Z"}} +{"payment_id":"PAY_000882","order_id":"ORD_000882","customer_id":"CUST_0178","amount":1085.18,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T03:00:00.000Z"}} +{"payment_id":"PAY_000883","order_id":"ORD_000883","customer_id":"CUST_0195","amount":304.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T04:00:00.000Z"}} +{"payment_id":"PAY_000884","order_id":"ORD_000884","customer_id":"CUST_0012","amount":706.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T05:00:00.000Z"}} +{"payment_id":"PAY_000885","order_id":"ORD_000885","customer_id":"CUST_0029","amount":1383.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T06:00:00.000Z"}} +{"payment_id":"PAY_000886","order_id":"ORD_000886","customer_id":"CUST_0046","amount":147,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T07:00:00.000Z"}} +{"payment_id":"PAY_000887","order_id":"ORD_000887","customer_id":"CUST_0063","amount":595.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T08:00:00.000Z"}} +{"payment_id":"PAY_000888","order_id":"ORD_000888","customer_id":"CUST_0080","amount":1397.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T09:00:00.000Z"}} +{"payment_id":"PAY_000889","order_id":"ORD_000889","customer_id":"CUST_0097","amount":2067.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T10:00:00.000Z"}} +{"payment_id":"PAY_000890","order_id":"ORD_000890","customer_id":"CUST_0114","amount":2125.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T11:00:00.000Z"}} +{"payment_id":"PAY_000891","order_id":"ORD_000891","customer_id":"CUST_0131","amount":353.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"payment_id":"PAY_000892","order_id":"ORD_000892","customer_id":"CUST_0148","amount":106.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T13:00:00.000Z"}} +{"payment_id":"PAY_000893","order_id":"ORD_000893","customer_id":"CUST_0165","amount":503.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T14:00:00.000Z"}} +{"payment_id":"PAY_000894","order_id":"ORD_000894","customer_id":"CUST_0182","amount":954.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T15:00:00.000Z"}} +{"payment_id":"PAY_000895","order_id":"ORD_000895","customer_id":"CUST_0199","amount":1705.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T16:00:00.000Z"}} +{"payment_id":"PAY_000896","order_id":"ORD_000896","customer_id":"CUST_0016","amount":184.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T17:00:00.000Z"}} +{"payment_id":"PAY_000897","order_id":"ORD_000897","customer_id":"CUST_0033","amount":704.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T18:00:00.000Z"}} +{"payment_id":"PAY_000898","order_id":"ORD_000898","customer_id":"CUST_0050","amount":1596.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T19:00:00.000Z"}} +{"payment_id":"PAY_000899","order_id":"ORD_000899","customer_id":"CUST_0067","amount":2315.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T20:00:00.000Z"}} +{"payment_id":"PAY_000900","order_id":"ORD_000900","customer_id":"CUST_0084","amount":1323.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T21:00:00.000Z"}} +{"payment_id":"PAY_000901","order_id":"ORD_000901","customer_id":"CUST_0101","amount":15.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_000902","order_id":"ORD_000902","customer_id":"CUST_0118","amount":215.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_000903","order_id":"ORD_000903","customer_id":"CUST_0135","amount":701.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_000904","order_id":"ORD_000904","customer_id":"CUST_0152","amount":1201.57,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_000905","order_id":"ORD_000905","customer_id":"CUST_0169","amount":2028.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_000906","order_id":"ORD_000906","customer_id":"CUST_0186","amount":222,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_000907","order_id":"ORD_000907","customer_id":"CUST_0003","amount":813.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_000908","order_id":"ORD_000908","customer_id":"CUST_0020","amount":1794.97,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_000909","order_id":"ORD_000909","customer_id":"CUST_0037","amount":1062.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_000910","order_id":"ORD_000910","customer_id":"CUST_0054","amount":895.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_000911","order_id":"ORD_000911","customer_id":"CUST_0071","amount":53.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_000912","order_id":"ORD_000912","customer_id":"CUST_0088","amount":323.93,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_000913","order_id":"ORD_000913","customer_id":"CUST_0105","amount":900.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_000914","order_id":"ORD_000914","customer_id":"CUST_0122","amount":1449.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_000915","order_id":"ORD_000915","customer_id":"CUST_0139","amount":2350.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_000916","order_id":"ORD_000916","customer_id":"CUST_0156","amount":259.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_000917","order_id":"ORD_000917","customer_id":"CUST_0173","amount":922.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_000918","order_id":"ORD_000918","customer_id":"CUST_0190","amount":1037.48,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_000919","order_id":"ORD_000919","customer_id":"CUST_0007","amount":672.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_000920","order_id":"ORD_000920","customer_id":"CUST_0024","amount":899.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} +{"payment_id":"PAY_000921","order_id":"ORD_000921","customer_id":"CUST_0041","amount":90.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T02:00:00.000Z"}} +{"payment_id":"PAY_000922","order_id":"ORD_000922","customer_id":"CUST_0058","amount":432.68,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T03:00:00.000Z"}} +{"payment_id":"PAY_000923","order_id":"ORD_000923","customer_id":"CUST_0075","amount":1099.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T04:00:00.000Z"}} +{"payment_id":"PAY_000924","order_id":"ORD_000924","customer_id":"CUST_0092","amount":1696.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T05:00:00.000Z"}} +{"payment_id":"PAY_000925","order_id":"ORD_000925","customer_id":"CUST_0109","amount":2673.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T06:00:00.000Z"}} +{"payment_id":"PAY_000926","order_id":"ORD_000926","customer_id":"CUST_0126","amount":297,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T07:00:00.000Z"}} +{"payment_id":"PAY_000927","order_id":"ORD_000927","customer_id":"CUST_0143","amount":1030.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T08:00:00.000Z"}} +{"payment_id":"PAY_000928","order_id":"ORD_000928","customer_id":"CUST_0160","amount":561.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T09:00:00.000Z"}} +{"payment_id":"PAY_000929","order_id":"ORD_000929","customer_id":"CUST_0177","amount":582.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T10:00:00.000Z"}} +{"payment_id":"PAY_000930","order_id":"ORD_000930","customer_id":"CUST_0194","amount":1222.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T11:00:00.000Z"}} +{"payment_id":"PAY_000931","order_id":"ORD_000931","customer_id":"CUST_0011","amount":128.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T12:00:00.000Z"}} +{"payment_id":"PAY_000932","order_id":"ORD_000932","customer_id":"CUST_0028","amount":541.42,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T13:00:00.000Z"}} +{"payment_id":"PAY_000933","order_id":"ORD_000933","customer_id":"CUST_0045","amount":1298.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T14:00:00.000Z"}} +{"payment_id":"PAY_000934","order_id":"ORD_000934","customer_id":"CUST_0062","amount":1944.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T15:00:00.000Z"}} +{"payment_id":"PAY_000935","order_id":"ORD_000935","customer_id":"CUST_0079","amount":2320.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T16:00:00.000Z"}} +{"payment_id":"PAY_000936","order_id":"ORD_000936","customer_id":"CUST_0096","amount":334.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T17:00:00.000Z"}} +{"payment_id":"PAY_000937","order_id":"ORD_000937","customer_id":"CUST_0113","amount":427.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T18:00:00.000Z"}} +{"payment_id":"PAY_000938","order_id":"ORD_000938","customer_id":"CUST_0130","amount":403.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T19:00:00.000Z"}} +{"payment_id":"PAY_000939","order_id":"ORD_000939","customer_id":"CUST_0147","amount":830.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T20:00:00.000Z"}} +{"payment_id":"PAY_000940","order_id":"ORD_000940","customer_id":"CUST_0164","amount":1544.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T21:00:00.000Z"}} +{"payment_id":"PAY_000941","order_id":"ORD_000941","customer_id":"CUST_0181","amount":165.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T02:00:00.000Z"}} +{"payment_id":"PAY_000942","order_id":"ORD_000942","customer_id":"CUST_0198","amount":650.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T03:00:00.000Z"}} +{"payment_id":"PAY_000943","order_id":"ORD_000943","customer_id":"CUST_0015","amount":1496.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T04:00:00.000Z"}} +{"payment_id":"PAY_000944","order_id":"ORD_000944","customer_id":"CUST_0032","amount":2191.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T05:00:00.000Z"}} +{"payment_id":"PAY_000945","order_id":"ORD_000945","customer_id":"CUST_0049","amount":2287.02,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T06:00:00.000Z"}} +{"payment_id":"PAY_000946","order_id":"ORD_000946","customer_id":"CUST_0066","amount":372,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T07:00:00.000Z"}} +{"payment_id":"PAY_000947","order_id":"ORD_000947","customer_id":"CUST_0083","amount":160.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T08:00:00.000Z"}} +{"payment_id":"PAY_000948","order_id":"ORD_000948","customer_id":"CUST_0100","amount":602.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T09:00:00.000Z"}} +{"payment_id":"PAY_000949","order_id":"ORD_000949","customer_id":"CUST_0117","amount":1077.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T10:00:00.000Z"}} +{"payment_id":"PAY_000950","order_id":"ORD_000950","customer_id":"CUST_0134","amount":1867.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T11:00:00.000Z"}} +{"payment_id":"PAY_000951","order_id":"ORD_000951","customer_id":"CUST_0151","amount":203.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T12:00:00.000Z"}} +{"payment_id":"PAY_000952","order_id":"ORD_000952","customer_id":"CUST_0168","amount":758.92,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T13:00:00.000Z"}} +{"payment_id":"PAY_000953","order_id":"ORD_000953","customer_id":"CUST_0185","amount":1695.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T14:00:00.000Z"}} +{"payment_id":"PAY_000954","order_id":"ORD_000954","customer_id":"CUST_0002","amount":2064.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T15:00:00.000Z"}} +{"payment_id":"PAY_000955","order_id":"ORD_000955","customer_id":"CUST_0019","amount":734.51,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T16:00:00.000Z"}} +{"payment_id":"PAY_000956","order_id":"ORD_000956","customer_id":"CUST_0036","amount":34.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T17:00:00.000Z"}} +{"payment_id":"PAY_000957","order_id":"ORD_000957","customer_id":"CUST_0053","amount":269.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T18:00:00.000Z"}} +{"payment_id":"PAY_000958","order_id":"ORD_000958","customer_id":"CUST_0070","amount":801.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T19:00:00.000Z"}} +{"payment_id":"PAY_000959","order_id":"ORD_000959","customer_id":"CUST_0087","amount":1325.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T20:00:00.000Z"}} +{"payment_id":"PAY_000960","order_id":"ORD_000960","customer_id":"CUST_0104","amount":2189.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T21:00:00.000Z"}} +{"payment_id":"PAY_000961","order_id":"ORD_000961","customer_id":"CUST_0121","amount":240.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T02:00:00.000Z"}} +{"payment_id":"PAY_000962","order_id":"ORD_000962","customer_id":"CUST_0138","amount":867.67,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T03:00:00.000Z"}} +{"payment_id":"PAY_000963","order_id":"ORD_000963","customer_id":"CUST_0155","amount":1894.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T04:00:00.000Z"}} +{"payment_id":"PAY_000964","order_id":"ORD_000964","customer_id":"CUST_0172","amount":549.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T05:00:00.000Z"}} +{"payment_id":"PAY_000965","order_id":"ORD_000965","customer_id":"CUST_0189","amount":738.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T06:00:00.000Z"}} +{"payment_id":"PAY_000966","order_id":"ORD_000966","customer_id":"CUST_0006","amount":72,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T07:00:00.000Z"}} +{"payment_id":"PAY_000967","order_id":"ORD_000967","customer_id":"CUST_0023","amount":378.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T08:00:00.000Z"}} +{"payment_id":"PAY_000968","order_id":"ORD_000968","customer_id":"CUST_0040","amount":999.98,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T09:00:00.000Z"}} +{"payment_id":"PAY_000969","order_id":"ORD_000969","customer_id":"CUST_0057","amount":1572.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T10:00:00.000Z"}} +{"payment_id":"PAY_000970","order_id":"ORD_000970","customer_id":"CUST_0074","amount":2512.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T11:00:00.000Z"}} +{"payment_id":"PAY_000971","order_id":"ORD_000971","customer_id":"CUST_0091","amount":278.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"payment_id":"PAY_000972","order_id":"ORD_000972","customer_id":"CUST_0108","amount":976.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T13:00:00.000Z"}} +{"payment_id":"PAY_000973","order_id":"ORD_000973","customer_id":"CUST_0125","amount":1136.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T14:00:00.000Z"}} +{"payment_id":"PAY_000974","order_id":"ORD_000974","customer_id":"CUST_0142","amount":459.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T15:00:00.000Z"}} +{"payment_id":"PAY_000975","order_id":"ORD_000975","customer_id":"CUST_0159","amount":1060.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T16:00:00.000Z"}} +{"payment_id":"PAY_000976","order_id":"ORD_000976","customer_id":"CUST_0176","amount":109.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T17:00:00.000Z"}} +{"payment_id":"PAY_000977","order_id":"ORD_000977","customer_id":"CUST_0193","amount":487.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T18:00:00.000Z"}} +{"payment_id":"PAY_000978","order_id":"ORD_000978","customer_id":"CUST_0010","amount":1198.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T19:00:00.000Z"}} +{"payment_id":"PAY_000979","order_id":"ORD_000979","customer_id":"CUST_0027","amount":1820.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T20:00:00.000Z"}} +{"payment_id":"PAY_000980","order_id":"ORD_000980","customer_id":"CUST_0044","amount":2834.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T21:00:00.000Z"}} +{"payment_id":"PAY_000981","order_id":"ORD_000981","customer_id":"CUST_0061","amount":315.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T02:00:00.000Z"}} +{"payment_id":"PAY_000982","order_id":"ORD_000982","customer_id":"CUST_0078","amount":1085.18,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T03:00:00.000Z"}} +{"payment_id":"PAY_000983","order_id":"ORD_000983","customer_id":"CUST_0095","amount":304.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T04:00:00.000Z"}} +{"payment_id":"PAY_000984","order_id":"ORD_000984","customer_id":"CUST_0112","amount":706.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T05:00:00.000Z"}} +{"payment_id":"PAY_000985","order_id":"ORD_000985","customer_id":"CUST_0129","amount":1383.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T06:00:00.000Z"}} +{"payment_id":"PAY_000986","order_id":"ORD_000986","customer_id":"CUST_0146","amount":147,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T07:00:00.000Z"}} +{"payment_id":"PAY_000987","order_id":"ORD_000987","customer_id":"CUST_0163","amount":595.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T08:00:00.000Z"}} +{"payment_id":"PAY_000988","order_id":"ORD_000988","customer_id":"CUST_0180","amount":1397.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T09:00:00.000Z"}} +{"payment_id":"PAY_000989","order_id":"ORD_000989","customer_id":"CUST_0197","amount":2067.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T10:00:00.000Z"}} +{"payment_id":"PAY_000990","order_id":"ORD_000990","customer_id":"CUST_0014","amount":2125.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T11:00:00.000Z"}} +{"payment_id":"PAY_000991","order_id":"ORD_000991","customer_id":"CUST_0031","amount":353.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T12:00:00.000Z"}} +{"payment_id":"PAY_000992","order_id":"ORD_000992","customer_id":"CUST_0048","amount":106.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T13:00:00.000Z"}} +{"payment_id":"PAY_000993","order_id":"ORD_000993","customer_id":"CUST_0065","amount":503.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T14:00:00.000Z"}} +{"payment_id":"PAY_000994","order_id":"ORD_000994","customer_id":"CUST_0082","amount":954.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T15:00:00.000Z"}} +{"payment_id":"PAY_000995","order_id":"ORD_000995","customer_id":"CUST_0099","amount":1705.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T16:00:00.000Z"}} +{"payment_id":"PAY_000996","order_id":"ORD_000996","customer_id":"CUST_0116","amount":184.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T17:00:00.000Z"}} +{"payment_id":"PAY_000997","order_id":"ORD_000997","customer_id":"CUST_0133","amount":704.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T18:00:00.000Z"}} +{"payment_id":"PAY_000998","order_id":"ORD_000998","customer_id":"CUST_0150","amount":1596.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T19:00:00.000Z"}} +{"payment_id":"PAY_000999","order_id":"ORD_000999","customer_id":"CUST_0167","amount":2315.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T20:00:00.000Z"}} +{"payment_id":"PAY_001000","order_id":"ORD_001000","customer_id":"CUST_0184","amount":1323.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T21:00:00.000Z"}} +{"payment_id":"PAY_001001","order_id":"ORD_001001","customer_id":"CUST_0001","amount":15.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T02:00:00.000Z"}} +{"payment_id":"PAY_001002","order_id":"ORD_001002","customer_id":"CUST_0018","amount":215.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T03:00:00.000Z"}} +{"payment_id":"PAY_001003","order_id":"ORD_001003","customer_id":"CUST_0035","amount":701.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T04:00:00.000Z"}} +{"payment_id":"PAY_001004","order_id":"ORD_001004","customer_id":"CUST_0052","amount":1201.57,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T05:00:00.000Z"}} +{"payment_id":"PAY_001005","order_id":"ORD_001005","customer_id":"CUST_0069","amount":2028.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T06:00:00.000Z"}} +{"payment_id":"PAY_001006","order_id":"ORD_001006","customer_id":"CUST_0086","amount":222,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T07:00:00.000Z"}} +{"payment_id":"PAY_001007","order_id":"ORD_001007","customer_id":"CUST_0103","amount":813.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T08:00:00.000Z"}} +{"payment_id":"PAY_001008","order_id":"ORD_001008","customer_id":"CUST_0120","amount":1794.97,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T09:00:00.000Z"}} +{"payment_id":"PAY_001009","order_id":"ORD_001009","customer_id":"CUST_0137","amount":1062.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T10:00:00.000Z"}} +{"payment_id":"PAY_001010","order_id":"ORD_001010","customer_id":"CUST_0154","amount":895.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T11:00:00.000Z"}} +{"payment_id":"PAY_001011","order_id":"ORD_001011","customer_id":"CUST_0171","amount":53.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T12:00:00.000Z"}} +{"payment_id":"PAY_001012","order_id":"ORD_001012","customer_id":"CUST_0188","amount":323.93,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T13:00:00.000Z"}} +{"payment_id":"PAY_001013","order_id":"ORD_001013","customer_id":"CUST_0005","amount":900.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T14:00:00.000Z"}} +{"payment_id":"PAY_001014","order_id":"ORD_001014","customer_id":"CUST_0022","amount":1449.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T15:00:00.000Z"}} +{"payment_id":"PAY_001015","order_id":"ORD_001015","customer_id":"CUST_0039","amount":2350.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T16:00:00.000Z"}} +{"payment_id":"PAY_001016","order_id":"ORD_001016","customer_id":"CUST_0056","amount":259.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T17:00:00.000Z"}} +{"payment_id":"PAY_001017","order_id":"ORD_001017","customer_id":"CUST_0073","amount":922.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T18:00:00.000Z"}} +{"payment_id":"PAY_001018","order_id":"ORD_001018","customer_id":"CUST_0090","amount":1037.48,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T19:00:00.000Z"}} +{"payment_id":"PAY_001019","order_id":"ORD_001019","customer_id":"CUST_0107","amount":672.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T20:00:00.000Z"}} +{"payment_id":"PAY_001020","order_id":"ORD_001020","customer_id":"CUST_0124","amount":899.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T21:00:00.000Z"}} +{"payment_id":"PAY_001021","order_id":"ORD_001021","customer_id":"CUST_0141","amount":90.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T02:00:00.000Z"}} +{"payment_id":"PAY_001022","order_id":"ORD_001022","customer_id":"CUST_0158","amount":432.68,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T03:00:00.000Z"}} +{"payment_id":"PAY_001023","order_id":"ORD_001023","customer_id":"CUST_0175","amount":1099.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T04:00:00.000Z"}} +{"payment_id":"PAY_001024","order_id":"ORD_001024","customer_id":"CUST_0192","amount":1696.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T05:00:00.000Z"}} +{"payment_id":"PAY_001025","order_id":"ORD_001025","customer_id":"CUST_0009","amount":2673.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T06:00:00.000Z"}} +{"payment_id":"PAY_001026","order_id":"ORD_001026","customer_id":"CUST_0026","amount":297,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T07:00:00.000Z"}} +{"payment_id":"PAY_001027","order_id":"ORD_001027","customer_id":"CUST_0043","amount":1030.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T08:00:00.000Z"}} +{"payment_id":"PAY_001028","order_id":"ORD_001028","customer_id":"CUST_0060","amount":561.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T09:00:00.000Z"}} +{"payment_id":"PAY_001029","order_id":"ORD_001029","customer_id":"CUST_0077","amount":582.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T10:00:00.000Z"}} +{"payment_id":"PAY_001030","order_id":"ORD_001030","customer_id":"CUST_0094","amount":1222.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T11:00:00.000Z"}} +{"payment_id":"PAY_001031","order_id":"ORD_001031","customer_id":"CUST_0111","amount":128.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T12:00:00.000Z"}} +{"payment_id":"PAY_001032","order_id":"ORD_001032","customer_id":"CUST_0128","amount":541.42,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T13:00:00.000Z"}} +{"payment_id":"PAY_001033","order_id":"ORD_001033","customer_id":"CUST_0145","amount":1298.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T14:00:00.000Z"}} +{"payment_id":"PAY_001034","order_id":"ORD_001034","customer_id":"CUST_0162","amount":1944.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T15:00:00.000Z"}} +{"payment_id":"PAY_001035","order_id":"ORD_001035","customer_id":"CUST_0179","amount":2320.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T16:00:00.000Z"}} +{"payment_id":"PAY_001036","order_id":"ORD_001036","customer_id":"CUST_0196","amount":334.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T17:00:00.000Z"}} +{"payment_id":"PAY_001037","order_id":"ORD_001037","customer_id":"CUST_0013","amount":427.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T18:00:00.000Z"}} +{"payment_id":"PAY_001038","order_id":"ORD_001038","customer_id":"CUST_0030","amount":403.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T19:00:00.000Z"}} +{"payment_id":"PAY_001039","order_id":"ORD_001039","customer_id":"CUST_0047","amount":830.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T20:00:00.000Z"}} +{"payment_id":"PAY_001040","order_id":"ORD_001040","customer_id":"CUST_0064","amount":1544.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T21:00:00.000Z"}} +{"payment_id":"PAY_001041","order_id":"ORD_001041","customer_id":"CUST_0081","amount":165.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T02:00:00.000Z"}} +{"payment_id":"PAY_001042","order_id":"ORD_001042","customer_id":"CUST_0098","amount":650.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T03:00:00.000Z"}} +{"payment_id":"PAY_001043","order_id":"ORD_001043","customer_id":"CUST_0115","amount":1496.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T04:00:00.000Z"}} +{"payment_id":"PAY_001044","order_id":"ORD_001044","customer_id":"CUST_0132","amount":2191.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T05:00:00.000Z"}} +{"payment_id":"PAY_001045","order_id":"ORD_001045","customer_id":"CUST_0149","amount":2287.02,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T06:00:00.000Z"}} +{"payment_id":"PAY_001046","order_id":"ORD_001046","customer_id":"CUST_0166","amount":372,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T07:00:00.000Z"}} +{"payment_id":"PAY_001047","order_id":"ORD_001047","customer_id":"CUST_0183","amount":160.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T08:00:00.000Z"}} +{"payment_id":"PAY_001048","order_id":"ORD_001048","customer_id":"CUST_0200","amount":602.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T09:00:00.000Z"}} +{"payment_id":"PAY_001049","order_id":"ORD_001049","customer_id":"CUST_0017","amount":1077.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T10:00:00.000Z"}} +{"payment_id":"PAY_001050","order_id":"ORD_001050","customer_id":"CUST_0034","amount":1867.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T11:00:00.000Z"}} +{"payment_id":"PAY_001051","order_id":"ORD_001051","customer_id":"CUST_0051","amount":203.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"payment_id":"PAY_001052","order_id":"ORD_001052","customer_id":"CUST_0068","amount":758.92,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T13:00:00.000Z"}} +{"payment_id":"PAY_001053","order_id":"ORD_001053","customer_id":"CUST_0085","amount":1695.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T14:00:00.000Z"}} +{"payment_id":"PAY_001054","order_id":"ORD_001054","customer_id":"CUST_0102","amount":2064.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T15:00:00.000Z"}} +{"payment_id":"PAY_001055","order_id":"ORD_001055","customer_id":"CUST_0119","amount":734.51,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T16:00:00.000Z"}} +{"payment_id":"PAY_001056","order_id":"ORD_001056","customer_id":"CUST_0136","amount":34.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T17:00:00.000Z"}} +{"payment_id":"PAY_001057","order_id":"ORD_001057","customer_id":"CUST_0153","amount":269.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T18:00:00.000Z"}} +{"payment_id":"PAY_001058","order_id":"ORD_001058","customer_id":"CUST_0170","amount":801.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T19:00:00.000Z"}} +{"payment_id":"PAY_001059","order_id":"ORD_001059","customer_id":"CUST_0187","amount":1325.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T20:00:00.000Z"}} +{"payment_id":"PAY_001060","order_id":"ORD_001060","customer_id":"CUST_0004","amount":2189.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T21:00:00.000Z"}} +{"payment_id":"PAY_001061","order_id":"ORD_001061","customer_id":"CUST_0021","amount":240.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T02:00:00.000Z"}} +{"payment_id":"PAY_001062","order_id":"ORD_001062","customer_id":"CUST_0038","amount":867.67,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T03:00:00.000Z"}} +{"payment_id":"PAY_001063","order_id":"ORD_001063","customer_id":"CUST_0055","amount":1894.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T04:00:00.000Z"}} +{"payment_id":"PAY_001064","order_id":"ORD_001064","customer_id":"CUST_0072","amount":549.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T05:00:00.000Z"}} +{"payment_id":"PAY_001065","order_id":"ORD_001065","customer_id":"CUST_0089","amount":738.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T06:00:00.000Z"}} +{"payment_id":"PAY_001066","order_id":"ORD_001066","customer_id":"CUST_0106","amount":72,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T07:00:00.000Z"}} +{"payment_id":"PAY_001067","order_id":"ORD_001067","customer_id":"CUST_0123","amount":378.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T08:00:00.000Z"}} +{"payment_id":"PAY_001068","order_id":"ORD_001068","customer_id":"CUST_0140","amount":999.98,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T09:00:00.000Z"}} +{"payment_id":"PAY_001069","order_id":"ORD_001069","customer_id":"CUST_0157","amount":1572.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T10:00:00.000Z"}} +{"payment_id":"PAY_001070","order_id":"ORD_001070","customer_id":"CUST_0174","amount":2512.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T11:00:00.000Z"}} +{"payment_id":"PAY_001071","order_id":"ORD_001071","customer_id":"CUST_0191","amount":278.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"payment_id":"PAY_001072","order_id":"ORD_001072","customer_id":"CUST_0008","amount":976.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T13:00:00.000Z"}} +{"payment_id":"PAY_001073","order_id":"ORD_001073","customer_id":"CUST_0025","amount":1136.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T14:00:00.000Z"}} +{"payment_id":"PAY_001074","order_id":"ORD_001074","customer_id":"CUST_0042","amount":459.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T15:00:00.000Z"}} +{"payment_id":"PAY_001075","order_id":"ORD_001075","customer_id":"CUST_0059","amount":1060.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T16:00:00.000Z"}} +{"payment_id":"PAY_001076","order_id":"ORD_001076","customer_id":"CUST_0076","amount":109.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T17:00:00.000Z"}} +{"payment_id":"PAY_001077","order_id":"ORD_001077","customer_id":"CUST_0093","amount":487.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T18:00:00.000Z"}} +{"payment_id":"PAY_001078","order_id":"ORD_001078","customer_id":"CUST_0110","amount":1198.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T19:00:00.000Z"}} +{"payment_id":"PAY_001079","order_id":"ORD_001079","customer_id":"CUST_0127","amount":1820.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T20:00:00.000Z"}} +{"payment_id":"PAY_001080","order_id":"ORD_001080","customer_id":"CUST_0144","amount":2834.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T21:00:00.000Z"}} +{"payment_id":"PAY_001081","order_id":"ORD_001081","customer_id":"CUST_0161","amount":315.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_001082","order_id":"ORD_001082","customer_id":"CUST_0178","amount":1085.18,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_001083","order_id":"ORD_001083","customer_id":"CUST_0195","amount":304.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_001084","order_id":"ORD_001084","customer_id":"CUST_0012","amount":706.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_001085","order_id":"ORD_001085","customer_id":"CUST_0029","amount":1383.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_001086","order_id":"ORD_001086","customer_id":"CUST_0046","amount":147,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_001087","order_id":"ORD_001087","customer_id":"CUST_0063","amount":595.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_001088","order_id":"ORD_001088","customer_id":"CUST_0080","amount":1397.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_001089","order_id":"ORD_001089","customer_id":"CUST_0097","amount":2067.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_001090","order_id":"ORD_001090","customer_id":"CUST_0114","amount":2125.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_001091","order_id":"ORD_001091","customer_id":"CUST_0131","amount":353.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_001092","order_id":"ORD_001092","customer_id":"CUST_0148","amount":106.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_001093","order_id":"ORD_001093","customer_id":"CUST_0165","amount":503.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_001094","order_id":"ORD_001094","customer_id":"CUST_0182","amount":954.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_001095","order_id":"ORD_001095","customer_id":"CUST_0199","amount":1705.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_001096","order_id":"ORD_001096","customer_id":"CUST_0016","amount":184.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_001097","order_id":"ORD_001097","customer_id":"CUST_0033","amount":704.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_001098","order_id":"ORD_001098","customer_id":"CUST_0050","amount":1596.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_001099","order_id":"ORD_001099","customer_id":"CUST_0067","amount":2315.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_001100","order_id":"ORD_001100","customer_id":"CUST_0084","amount":1323.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} +{"payment_id":"PAY_001101","order_id":"ORD_001101","customer_id":"CUST_0101","amount":15.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T02:00:00.000Z"}} +{"payment_id":"PAY_001102","order_id":"ORD_001102","customer_id":"CUST_0118","amount":215.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T03:00:00.000Z"}} +{"payment_id":"PAY_001103","order_id":"ORD_001103","customer_id":"CUST_0135","amount":701.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T04:00:00.000Z"}} +{"payment_id":"PAY_001104","order_id":"ORD_001104","customer_id":"CUST_0152","amount":1201.57,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T05:00:00.000Z"}} +{"payment_id":"PAY_001105","order_id":"ORD_001105","customer_id":"CUST_0169","amount":2028.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T06:00:00.000Z"}} +{"payment_id":"PAY_001106","order_id":"ORD_001106","customer_id":"CUST_0186","amount":222,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T07:00:00.000Z"}} +{"payment_id":"PAY_001107","order_id":"ORD_001107","customer_id":"CUST_0003","amount":813.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T08:00:00.000Z"}} +{"payment_id":"PAY_001108","order_id":"ORD_001108","customer_id":"CUST_0020","amount":1794.97,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T09:00:00.000Z"}} +{"payment_id":"PAY_001109","order_id":"ORD_001109","customer_id":"CUST_0037","amount":1062.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T10:00:00.000Z"}} +{"payment_id":"PAY_001110","order_id":"ORD_001110","customer_id":"CUST_0054","amount":895.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T11:00:00.000Z"}} +{"payment_id":"PAY_001111","order_id":"ORD_001111","customer_id":"CUST_0071","amount":53.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T12:00:00.000Z"}} +{"payment_id":"PAY_001112","order_id":"ORD_001112","customer_id":"CUST_0088","amount":323.93,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T13:00:00.000Z"}} +{"payment_id":"PAY_001113","order_id":"ORD_001113","customer_id":"CUST_0105","amount":900.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T14:00:00.000Z"}} +{"payment_id":"PAY_001114","order_id":"ORD_001114","customer_id":"CUST_0122","amount":1449.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T15:00:00.000Z"}} +{"payment_id":"PAY_001115","order_id":"ORD_001115","customer_id":"CUST_0139","amount":2350.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T16:00:00.000Z"}} +{"payment_id":"PAY_001116","order_id":"ORD_001116","customer_id":"CUST_0156","amount":259.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T17:00:00.000Z"}} +{"payment_id":"PAY_001117","order_id":"ORD_001117","customer_id":"CUST_0173","amount":922.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T18:00:00.000Z"}} +{"payment_id":"PAY_001118","order_id":"ORD_001118","customer_id":"CUST_0190","amount":1037.48,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T19:00:00.000Z"}} +{"payment_id":"PAY_001119","order_id":"ORD_001119","customer_id":"CUST_0007","amount":672.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T20:00:00.000Z"}} +{"payment_id":"PAY_001120","order_id":"ORD_001120","customer_id":"CUST_0024","amount":899.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T21:00:00.000Z"}} +{"payment_id":"PAY_001121","order_id":"ORD_001121","customer_id":"CUST_0041","amount":90.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T02:00:00.000Z"}} +{"payment_id":"PAY_001122","order_id":"ORD_001122","customer_id":"CUST_0058","amount":432.68,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T03:00:00.000Z"}} +{"payment_id":"PAY_001123","order_id":"ORD_001123","customer_id":"CUST_0075","amount":1099.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T04:00:00.000Z"}} +{"payment_id":"PAY_001124","order_id":"ORD_001124","customer_id":"CUST_0092","amount":1696.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T05:00:00.000Z"}} +{"payment_id":"PAY_001125","order_id":"ORD_001125","customer_id":"CUST_0109","amount":2673.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T06:00:00.000Z"}} +{"payment_id":"PAY_001126","order_id":"ORD_001126","customer_id":"CUST_0126","amount":297,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T07:00:00.000Z"}} +{"payment_id":"PAY_001127","order_id":"ORD_001127","customer_id":"CUST_0143","amount":1030.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T08:00:00.000Z"}} +{"payment_id":"PAY_001128","order_id":"ORD_001128","customer_id":"CUST_0160","amount":561.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T09:00:00.000Z"}} +{"payment_id":"PAY_001129","order_id":"ORD_001129","customer_id":"CUST_0177","amount":582.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T10:00:00.000Z"}} +{"payment_id":"PAY_001130","order_id":"ORD_001130","customer_id":"CUST_0194","amount":1222.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T11:00:00.000Z"}} +{"payment_id":"PAY_001131","order_id":"ORD_001131","customer_id":"CUST_0011","amount":128.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T12:00:00.000Z"}} +{"payment_id":"PAY_001132","order_id":"ORD_001132","customer_id":"CUST_0028","amount":541.42,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T13:00:00.000Z"}} +{"payment_id":"PAY_001133","order_id":"ORD_001133","customer_id":"CUST_0045","amount":1298.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T14:00:00.000Z"}} +{"payment_id":"PAY_001134","order_id":"ORD_001134","customer_id":"CUST_0062","amount":1944.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T15:00:00.000Z"}} +{"payment_id":"PAY_001135","order_id":"ORD_001135","customer_id":"CUST_0079","amount":2320.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T16:00:00.000Z"}} +{"payment_id":"PAY_001136","order_id":"ORD_001136","customer_id":"CUST_0096","amount":334.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T17:00:00.000Z"}} +{"payment_id":"PAY_001137","order_id":"ORD_001137","customer_id":"CUST_0113","amount":427.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T18:00:00.000Z"}} +{"payment_id":"PAY_001138","order_id":"ORD_001138","customer_id":"CUST_0130","amount":403.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T19:00:00.000Z"}} +{"payment_id":"PAY_001139","order_id":"ORD_001139","customer_id":"CUST_0147","amount":830.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T20:00:00.000Z"}} +{"payment_id":"PAY_001140","order_id":"ORD_001140","customer_id":"CUST_0164","amount":1544.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T21:00:00.000Z"}} +{"payment_id":"PAY_001141","order_id":"ORD_001141","customer_id":"CUST_0181","amount":165.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T02:00:00.000Z"}} +{"payment_id":"PAY_001142","order_id":"ORD_001142","customer_id":"CUST_0198","amount":650.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T03:00:00.000Z"}} +{"payment_id":"PAY_001143","order_id":"ORD_001143","customer_id":"CUST_0015","amount":1496.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T04:00:00.000Z"}} +{"payment_id":"PAY_001144","order_id":"ORD_001144","customer_id":"CUST_0032","amount":2191.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T05:00:00.000Z"}} +{"payment_id":"PAY_001145","order_id":"ORD_001145","customer_id":"CUST_0049","amount":2287.02,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T06:00:00.000Z"}} +{"payment_id":"PAY_001146","order_id":"ORD_001146","customer_id":"CUST_0066","amount":372,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T07:00:00.000Z"}} +{"payment_id":"PAY_001147","order_id":"ORD_001147","customer_id":"CUST_0083","amount":160.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T08:00:00.000Z"}} +{"payment_id":"PAY_001148","order_id":"ORD_001148","customer_id":"CUST_0100","amount":602.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T09:00:00.000Z"}} +{"payment_id":"PAY_001149","order_id":"ORD_001149","customer_id":"CUST_0117","amount":1077.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T10:00:00.000Z"}} +{"payment_id":"PAY_001150","order_id":"ORD_001150","customer_id":"CUST_0134","amount":1867.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T11:00:00.000Z"}} +{"payment_id":"PAY_001151","order_id":"ORD_001151","customer_id":"CUST_0151","amount":203.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"payment_id":"PAY_001152","order_id":"ORD_001152","customer_id":"CUST_0168","amount":758.92,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T13:00:00.000Z"}} +{"payment_id":"PAY_001153","order_id":"ORD_001153","customer_id":"CUST_0185","amount":1695.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T14:00:00.000Z"}} +{"payment_id":"PAY_001154","order_id":"ORD_001154","customer_id":"CUST_0002","amount":2064.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T15:00:00.000Z"}} +{"payment_id":"PAY_001155","order_id":"ORD_001155","customer_id":"CUST_0019","amount":734.51,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T16:00:00.000Z"}} +{"payment_id":"PAY_001156","order_id":"ORD_001156","customer_id":"CUST_0036","amount":34.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T17:00:00.000Z"}} +{"payment_id":"PAY_001157","order_id":"ORD_001157","customer_id":"CUST_0053","amount":269.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T18:00:00.000Z"}} +{"payment_id":"PAY_001158","order_id":"ORD_001158","customer_id":"CUST_0070","amount":801.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T19:00:00.000Z"}} +{"payment_id":"PAY_001159","order_id":"ORD_001159","customer_id":"CUST_0087","amount":1325.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T20:00:00.000Z"}} +{"payment_id":"PAY_001160","order_id":"ORD_001160","customer_id":"CUST_0104","amount":2189.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T21:00:00.000Z"}} +{"payment_id":"PAY_001161","order_id":"ORD_001161","customer_id":"CUST_0121","amount":240.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T02:00:00.000Z"}} +{"payment_id":"PAY_001162","order_id":"ORD_001162","customer_id":"CUST_0138","amount":867.67,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T03:00:00.000Z"}} +{"payment_id":"PAY_001163","order_id":"ORD_001163","customer_id":"CUST_0155","amount":1894.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T04:00:00.000Z"}} +{"payment_id":"PAY_001164","order_id":"ORD_001164","customer_id":"CUST_0172","amount":549.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T05:00:00.000Z"}} +{"payment_id":"PAY_001165","order_id":"ORD_001165","customer_id":"CUST_0189","amount":738.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T06:00:00.000Z"}} +{"payment_id":"PAY_001166","order_id":"ORD_001166","customer_id":"CUST_0006","amount":72,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T07:00:00.000Z"}} +{"payment_id":"PAY_001167","order_id":"ORD_001167","customer_id":"CUST_0023","amount":378.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T08:00:00.000Z"}} +{"payment_id":"PAY_001168","order_id":"ORD_001168","customer_id":"CUST_0040","amount":999.98,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T09:00:00.000Z"}} +{"payment_id":"PAY_001169","order_id":"ORD_001169","customer_id":"CUST_0057","amount":1572.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T10:00:00.000Z"}} +{"payment_id":"PAY_001170","order_id":"ORD_001170","customer_id":"CUST_0074","amount":2512.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T11:00:00.000Z"}} +{"payment_id":"PAY_001171","order_id":"ORD_001171","customer_id":"CUST_0091","amount":278.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T12:00:00.000Z"}} +{"payment_id":"PAY_001172","order_id":"ORD_001172","customer_id":"CUST_0108","amount":976.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T13:00:00.000Z"}} +{"payment_id":"PAY_001173","order_id":"ORD_001173","customer_id":"CUST_0125","amount":1136.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T14:00:00.000Z"}} +{"payment_id":"PAY_001174","order_id":"ORD_001174","customer_id":"CUST_0142","amount":459.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T15:00:00.000Z"}} +{"payment_id":"PAY_001175","order_id":"ORD_001175","customer_id":"CUST_0159","amount":1060.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T16:00:00.000Z"}} +{"payment_id":"PAY_001176","order_id":"ORD_001176","customer_id":"CUST_0176","amount":109.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T17:00:00.000Z"}} +{"payment_id":"PAY_001177","order_id":"ORD_001177","customer_id":"CUST_0193","amount":487.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T18:00:00.000Z"}} +{"payment_id":"PAY_001178","order_id":"ORD_001178","customer_id":"CUST_0010","amount":1198.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T19:00:00.000Z"}} +{"payment_id":"PAY_001179","order_id":"ORD_001179","customer_id":"CUST_0027","amount":1820.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T20:00:00.000Z"}} +{"payment_id":"PAY_001180","order_id":"ORD_001180","customer_id":"CUST_0044","amount":2834.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T21:00:00.000Z"}} +{"payment_id":"PAY_001181","order_id":"ORD_001181","customer_id":"CUST_0061","amount":315.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T02:00:00.000Z"}} +{"payment_id":"PAY_001182","order_id":"ORD_001182","customer_id":"CUST_0078","amount":1085.18,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T03:00:00.000Z"}} +{"payment_id":"PAY_001183","order_id":"ORD_001183","customer_id":"CUST_0095","amount":304.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T04:00:00.000Z"}} +{"payment_id":"PAY_001184","order_id":"ORD_001184","customer_id":"CUST_0112","amount":706.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T05:00:00.000Z"}} +{"payment_id":"PAY_001185","order_id":"ORD_001185","customer_id":"CUST_0129","amount":1383.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T06:00:00.000Z"}} +{"payment_id":"PAY_001186","order_id":"ORD_001186","customer_id":"CUST_0146","amount":147,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T07:00:00.000Z"}} +{"payment_id":"PAY_001187","order_id":"ORD_001187","customer_id":"CUST_0163","amount":595.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T08:00:00.000Z"}} +{"payment_id":"PAY_001188","order_id":"ORD_001188","customer_id":"CUST_0180","amount":1397.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T09:00:00.000Z"}} +{"payment_id":"PAY_001189","order_id":"ORD_001189","customer_id":"CUST_0197","amount":2067.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T10:00:00.000Z"}} +{"payment_id":"PAY_001190","order_id":"ORD_001190","customer_id":"CUST_0014","amount":2125.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T11:00:00.000Z"}} +{"payment_id":"PAY_001191","order_id":"ORD_001191","customer_id":"CUST_0031","amount":353.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T12:00:00.000Z"}} +{"payment_id":"PAY_001192","order_id":"ORD_001192","customer_id":"CUST_0048","amount":106.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T13:00:00.000Z"}} +{"payment_id":"PAY_001193","order_id":"ORD_001193","customer_id":"CUST_0065","amount":503.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T14:00:00.000Z"}} +{"payment_id":"PAY_001194","order_id":"ORD_001194","customer_id":"CUST_0082","amount":954.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T15:00:00.000Z"}} +{"payment_id":"PAY_001195","order_id":"ORD_001195","customer_id":"CUST_0099","amount":1705.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T16:00:00.000Z"}} +{"payment_id":"PAY_001196","order_id":"ORD_001196","customer_id":"CUST_0116","amount":184.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T17:00:00.000Z"}} +{"payment_id":"PAY_001197","order_id":"ORD_001197","customer_id":"CUST_0133","amount":704.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T18:00:00.000Z"}} +{"payment_id":"PAY_001198","order_id":"ORD_001198","customer_id":"CUST_0150","amount":1596.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T19:00:00.000Z"}} +{"payment_id":"PAY_001199","order_id":"ORD_001199","customer_id":"CUST_0167","amount":2315.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T20:00:00.000Z"}} +{"payment_id":"PAY_001200","order_id":"ORD_001200","customer_id":"CUST_0184","amount":1323.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T21:00:00.000Z"}} +{"payment_id":"PAY_001201","order_id":"ORD_001201","customer_id":"CUST_0001","amount":15.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T02:00:00.000Z"}} +{"payment_id":"PAY_001202","order_id":"ORD_001202","customer_id":"CUST_0018","amount":215.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T03:00:00.000Z"}} +{"payment_id":"PAY_001203","order_id":"ORD_001203","customer_id":"CUST_0035","amount":701.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T04:00:00.000Z"}} +{"payment_id":"PAY_001204","order_id":"ORD_001204","customer_id":"CUST_0052","amount":1201.57,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T05:00:00.000Z"}} +{"payment_id":"PAY_001205","order_id":"ORD_001205","customer_id":"CUST_0069","amount":2028.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T06:00:00.000Z"}} +{"payment_id":"PAY_001206","order_id":"ORD_001206","customer_id":"CUST_0086","amount":222,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T07:00:00.000Z"}} +{"payment_id":"PAY_001207","order_id":"ORD_001207","customer_id":"CUST_0103","amount":813.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T08:00:00.000Z"}} +{"payment_id":"PAY_001208","order_id":"ORD_001208","customer_id":"CUST_0120","amount":1794.97,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T09:00:00.000Z"}} +{"payment_id":"PAY_001209","order_id":"ORD_001209","customer_id":"CUST_0137","amount":1062.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T10:00:00.000Z"}} +{"payment_id":"PAY_001210","order_id":"ORD_001210","customer_id":"CUST_0154","amount":895.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T11:00:00.000Z"}} +{"payment_id":"PAY_001211","order_id":"ORD_001211","customer_id":"CUST_0171","amount":53.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T12:00:00.000Z"}} +{"payment_id":"PAY_001212","order_id":"ORD_001212","customer_id":"CUST_0188","amount":323.93,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T13:00:00.000Z"}} +{"payment_id":"PAY_001213","order_id":"ORD_001213","customer_id":"CUST_0005","amount":900.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T14:00:00.000Z"}} +{"payment_id":"PAY_001214","order_id":"ORD_001214","customer_id":"CUST_0022","amount":1449.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T15:00:00.000Z"}} +{"payment_id":"PAY_001215","order_id":"ORD_001215","customer_id":"CUST_0039","amount":2350.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T16:00:00.000Z"}} +{"payment_id":"PAY_001216","order_id":"ORD_001216","customer_id":"CUST_0056","amount":259.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T17:00:00.000Z"}} +{"payment_id":"PAY_001217","order_id":"ORD_001217","customer_id":"CUST_0073","amount":922.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T18:00:00.000Z"}} +{"payment_id":"PAY_001218","order_id":"ORD_001218","customer_id":"CUST_0090","amount":1037.48,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T19:00:00.000Z"}} +{"payment_id":"PAY_001219","order_id":"ORD_001219","customer_id":"CUST_0107","amount":672.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T20:00:00.000Z"}} +{"payment_id":"PAY_001220","order_id":"ORD_001220","customer_id":"CUST_0124","amount":899.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T21:00:00.000Z"}} +{"payment_id":"PAY_001221","order_id":"ORD_001221","customer_id":"CUST_0141","amount":90.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T02:00:00.000Z"}} +{"payment_id":"PAY_001222","order_id":"ORD_001222","customer_id":"CUST_0158","amount":432.68,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T03:00:00.000Z"}} +{"payment_id":"PAY_001223","order_id":"ORD_001223","customer_id":"CUST_0175","amount":1099.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T04:00:00.000Z"}} +{"payment_id":"PAY_001224","order_id":"ORD_001224","customer_id":"CUST_0192","amount":1696.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T05:00:00.000Z"}} +{"payment_id":"PAY_001225","order_id":"ORD_001225","customer_id":"CUST_0009","amount":2673.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T06:00:00.000Z"}} +{"payment_id":"PAY_001226","order_id":"ORD_001226","customer_id":"CUST_0026","amount":297,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T07:00:00.000Z"}} +{"payment_id":"PAY_001227","order_id":"ORD_001227","customer_id":"CUST_0043","amount":1030.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T08:00:00.000Z"}} +{"payment_id":"PAY_001228","order_id":"ORD_001228","customer_id":"CUST_0060","amount":561.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T09:00:00.000Z"}} +{"payment_id":"PAY_001229","order_id":"ORD_001229","customer_id":"CUST_0077","amount":582.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T10:00:00.000Z"}} +{"payment_id":"PAY_001230","order_id":"ORD_001230","customer_id":"CUST_0094","amount":1222.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T11:00:00.000Z"}} +{"payment_id":"PAY_001231","order_id":"ORD_001231","customer_id":"CUST_0111","amount":128.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"payment_id":"PAY_001232","order_id":"ORD_001232","customer_id":"CUST_0128","amount":541.42,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T13:00:00.000Z"}} +{"payment_id":"PAY_001233","order_id":"ORD_001233","customer_id":"CUST_0145","amount":1298.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T14:00:00.000Z"}} +{"payment_id":"PAY_001234","order_id":"ORD_001234","customer_id":"CUST_0162","amount":1944.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T15:00:00.000Z"}} +{"payment_id":"PAY_001235","order_id":"ORD_001235","customer_id":"CUST_0179","amount":2320.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T16:00:00.000Z"}} +{"payment_id":"PAY_001236","order_id":"ORD_001236","customer_id":"CUST_0196","amount":334.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T17:00:00.000Z"}} +{"payment_id":"PAY_001237","order_id":"ORD_001237","customer_id":"CUST_0013","amount":427.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T18:00:00.000Z"}} +{"payment_id":"PAY_001238","order_id":"ORD_001238","customer_id":"CUST_0030","amount":403.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T19:00:00.000Z"}} +{"payment_id":"PAY_001239","order_id":"ORD_001239","customer_id":"CUST_0047","amount":830.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T20:00:00.000Z"}} +{"payment_id":"PAY_001240","order_id":"ORD_001240","customer_id":"CUST_0064","amount":1544.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T21:00:00.000Z"}} +{"payment_id":"PAY_001241","order_id":"ORD_001241","customer_id":"CUST_0081","amount":165.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T02:00:00.000Z"}} +{"payment_id":"PAY_001242","order_id":"ORD_001242","customer_id":"CUST_0098","amount":650.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T03:00:00.000Z"}} +{"payment_id":"PAY_001243","order_id":"ORD_001243","customer_id":"CUST_0115","amount":1496.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T04:00:00.000Z"}} +{"payment_id":"PAY_001244","order_id":"ORD_001244","customer_id":"CUST_0132","amount":2191.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T05:00:00.000Z"}} +{"payment_id":"PAY_001245","order_id":"ORD_001245","customer_id":"CUST_0149","amount":2287.02,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T06:00:00.000Z"}} +{"payment_id":"PAY_001246","order_id":"ORD_001246","customer_id":"CUST_0166","amount":372,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T07:00:00.000Z"}} +{"payment_id":"PAY_001247","order_id":"ORD_001247","customer_id":"CUST_0183","amount":160.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T08:00:00.000Z"}} +{"payment_id":"PAY_001248","order_id":"ORD_001248","customer_id":"CUST_0200","amount":602.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T09:00:00.000Z"}} +{"payment_id":"PAY_001249","order_id":"ORD_001249","customer_id":"CUST_0017","amount":1077.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T10:00:00.000Z"}} +{"payment_id":"PAY_001250","order_id":"ORD_001250","customer_id":"CUST_0034","amount":1867.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T11:00:00.000Z"}} +{"payment_id":"PAY_001251","order_id":"ORD_001251","customer_id":"CUST_0051","amount":203.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"payment_id":"PAY_001252","order_id":"ORD_001252","customer_id":"CUST_0068","amount":758.92,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T13:00:00.000Z"}} +{"payment_id":"PAY_001253","order_id":"ORD_001253","customer_id":"CUST_0085","amount":1695.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T14:00:00.000Z"}} +{"payment_id":"PAY_001254","order_id":"ORD_001254","customer_id":"CUST_0102","amount":2064.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T15:00:00.000Z"}} +{"payment_id":"PAY_001255","order_id":"ORD_001255","customer_id":"CUST_0119","amount":734.51,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T16:00:00.000Z"}} +{"payment_id":"PAY_001256","order_id":"ORD_001256","customer_id":"CUST_0136","amount":34.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T17:00:00.000Z"}} +{"payment_id":"PAY_001257","order_id":"ORD_001257","customer_id":"CUST_0153","amount":269.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T18:00:00.000Z"}} +{"payment_id":"PAY_001258","order_id":"ORD_001258","customer_id":"CUST_0170","amount":801.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T19:00:00.000Z"}} +{"payment_id":"PAY_001259","order_id":"ORD_001259","customer_id":"CUST_0187","amount":1325.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T20:00:00.000Z"}} +{"payment_id":"PAY_001260","order_id":"ORD_001260","customer_id":"CUST_0004","amount":2189.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T21:00:00.000Z"}} +{"payment_id":"PAY_001261","order_id":"ORD_001261","customer_id":"CUST_0021","amount":240.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_001262","order_id":"ORD_001262","customer_id":"CUST_0038","amount":867.67,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_001263","order_id":"ORD_001263","customer_id":"CUST_0055","amount":1894.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_001264","order_id":"ORD_001264","customer_id":"CUST_0072","amount":549.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_001265","order_id":"ORD_001265","customer_id":"CUST_0089","amount":738.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_001266","order_id":"ORD_001266","customer_id":"CUST_0106","amount":72,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_001267","order_id":"ORD_001267","customer_id":"CUST_0123","amount":378.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_001268","order_id":"ORD_001268","customer_id":"CUST_0140","amount":999.98,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_001269","order_id":"ORD_001269","customer_id":"CUST_0157","amount":1572.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_001270","order_id":"ORD_001270","customer_id":"CUST_0174","amount":2512.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_001271","order_id":"ORD_001271","customer_id":"CUST_0191","amount":278.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_001272","order_id":"ORD_001272","customer_id":"CUST_0008","amount":976.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_001273","order_id":"ORD_001273","customer_id":"CUST_0025","amount":1136.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_001274","order_id":"ORD_001274","customer_id":"CUST_0042","amount":459.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_001275","order_id":"ORD_001275","customer_id":"CUST_0059","amount":1060.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_001276","order_id":"ORD_001276","customer_id":"CUST_0076","amount":109.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_001277","order_id":"ORD_001277","customer_id":"CUST_0093","amount":487.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_001278","order_id":"ORD_001278","customer_id":"CUST_0110","amount":1198.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_001279","order_id":"ORD_001279","customer_id":"CUST_0127","amount":1820.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_001280","order_id":"ORD_001280","customer_id":"CUST_0144","amount":2834.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} +{"payment_id":"PAY_001281","order_id":"ORD_001281","customer_id":"CUST_0161","amount":315.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T02:00:00.000Z"}} +{"payment_id":"PAY_001282","order_id":"ORD_001282","customer_id":"CUST_0178","amount":1085.18,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T03:00:00.000Z"}} +{"payment_id":"PAY_001283","order_id":"ORD_001283","customer_id":"CUST_0195","amount":304.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T04:00:00.000Z"}} +{"payment_id":"PAY_001284","order_id":"ORD_001284","customer_id":"CUST_0012","amount":706.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T05:00:00.000Z"}} +{"payment_id":"PAY_001285","order_id":"ORD_001285","customer_id":"CUST_0029","amount":1383.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T06:00:00.000Z"}} +{"payment_id":"PAY_001286","order_id":"ORD_001286","customer_id":"CUST_0046","amount":147,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T07:00:00.000Z"}} +{"payment_id":"PAY_001287","order_id":"ORD_001287","customer_id":"CUST_0063","amount":595.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T08:00:00.000Z"}} +{"payment_id":"PAY_001288","order_id":"ORD_001288","customer_id":"CUST_0080","amount":1397.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T09:00:00.000Z"}} +{"payment_id":"PAY_001289","order_id":"ORD_001289","customer_id":"CUST_0097","amount":2067.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T10:00:00.000Z"}} +{"payment_id":"PAY_001290","order_id":"ORD_001290","customer_id":"CUST_0114","amount":2125.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T11:00:00.000Z"}} +{"payment_id":"PAY_001291","order_id":"ORD_001291","customer_id":"CUST_0131","amount":353.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T12:00:00.000Z"}} +{"payment_id":"PAY_001292","order_id":"ORD_001292","customer_id":"CUST_0148","amount":106.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T13:00:00.000Z"}} +{"payment_id":"PAY_001293","order_id":"ORD_001293","customer_id":"CUST_0165","amount":503.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T14:00:00.000Z"}} +{"payment_id":"PAY_001294","order_id":"ORD_001294","customer_id":"CUST_0182","amount":954.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T15:00:00.000Z"}} +{"payment_id":"PAY_001295","order_id":"ORD_001295","customer_id":"CUST_0199","amount":1705.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T16:00:00.000Z"}} +{"payment_id":"PAY_001296","order_id":"ORD_001296","customer_id":"CUST_0016","amount":184.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T17:00:00.000Z"}} +{"payment_id":"PAY_001297","order_id":"ORD_001297","customer_id":"CUST_0033","amount":704.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T18:00:00.000Z"}} +{"payment_id":"PAY_001298","order_id":"ORD_001298","customer_id":"CUST_0050","amount":1596.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T19:00:00.000Z"}} +{"payment_id":"PAY_001299","order_id":"ORD_001299","customer_id":"CUST_0067","amount":2315.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T20:00:00.000Z"}} +{"payment_id":"PAY_001300","order_id":"ORD_001300","customer_id":"CUST_0084","amount":1323.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T21:00:00.000Z"}} +{"payment_id":"PAY_001301","order_id":"ORD_001301","customer_id":"CUST_0101","amount":15.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T02:00:00.000Z"}} +{"payment_id":"PAY_001302","order_id":"ORD_001302","customer_id":"CUST_0118","amount":215.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T03:00:00.000Z"}} +{"payment_id":"PAY_001303","order_id":"ORD_001303","customer_id":"CUST_0135","amount":701.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T04:00:00.000Z"}} +{"payment_id":"PAY_001304","order_id":"ORD_001304","customer_id":"CUST_0152","amount":1201.57,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T05:00:00.000Z"}} +{"payment_id":"PAY_001305","order_id":"ORD_001305","customer_id":"CUST_0169","amount":2028.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T06:00:00.000Z"}} +{"payment_id":"PAY_001306","order_id":"ORD_001306","customer_id":"CUST_0186","amount":222,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T07:00:00.000Z"}} +{"payment_id":"PAY_001307","order_id":"ORD_001307","customer_id":"CUST_0003","amount":813.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T08:00:00.000Z"}} +{"payment_id":"PAY_001308","order_id":"ORD_001308","customer_id":"CUST_0020","amount":1794.97,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T09:00:00.000Z"}} +{"payment_id":"PAY_001309","order_id":"ORD_001309","customer_id":"CUST_0037","amount":1062.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T10:00:00.000Z"}} +{"payment_id":"PAY_001310","order_id":"ORD_001310","customer_id":"CUST_0054","amount":895.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T11:00:00.000Z"}} +{"payment_id":"PAY_001311","order_id":"ORD_001311","customer_id":"CUST_0071","amount":53.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T12:00:00.000Z"}} +{"payment_id":"PAY_001312","order_id":"ORD_001312","customer_id":"CUST_0088","amount":323.93,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T13:00:00.000Z"}} +{"payment_id":"PAY_001313","order_id":"ORD_001313","customer_id":"CUST_0105","amount":900.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T14:00:00.000Z"}} +{"payment_id":"PAY_001314","order_id":"ORD_001314","customer_id":"CUST_0122","amount":1449.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T15:00:00.000Z"}} +{"payment_id":"PAY_001315","order_id":"ORD_001315","customer_id":"CUST_0139","amount":2350.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T16:00:00.000Z"}} +{"payment_id":"PAY_001316","order_id":"ORD_001316","customer_id":"CUST_0156","amount":259.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T17:00:00.000Z"}} +{"payment_id":"PAY_001317","order_id":"ORD_001317","customer_id":"CUST_0173","amount":922.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T18:00:00.000Z"}} +{"payment_id":"PAY_001318","order_id":"ORD_001318","customer_id":"CUST_0190","amount":1037.48,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T19:00:00.000Z"}} +{"payment_id":"PAY_001319","order_id":"ORD_001319","customer_id":"CUST_0007","amount":672.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T20:00:00.000Z"}} +{"payment_id":"PAY_001320","order_id":"ORD_001320","customer_id":"CUST_0024","amount":899.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T21:00:00.000Z"}} +{"payment_id":"PAY_001321","order_id":"ORD_001321","customer_id":"CUST_0041","amount":90.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T02:00:00.000Z"}} +{"payment_id":"PAY_001322","order_id":"ORD_001322","customer_id":"CUST_0058","amount":432.68,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T03:00:00.000Z"}} +{"payment_id":"PAY_001323","order_id":"ORD_001323","customer_id":"CUST_0075","amount":1099.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T04:00:00.000Z"}} +{"payment_id":"PAY_001324","order_id":"ORD_001324","customer_id":"CUST_0092","amount":1696.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T05:00:00.000Z"}} +{"payment_id":"PAY_001325","order_id":"ORD_001325","customer_id":"CUST_0109","amount":2673.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T06:00:00.000Z"}} +{"payment_id":"PAY_001326","order_id":"ORD_001326","customer_id":"CUST_0126","amount":297,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T07:00:00.000Z"}} +{"payment_id":"PAY_001327","order_id":"ORD_001327","customer_id":"CUST_0143","amount":1030.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T08:00:00.000Z"}} +{"payment_id":"PAY_001328","order_id":"ORD_001328","customer_id":"CUST_0160","amount":561.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T09:00:00.000Z"}} +{"payment_id":"PAY_001329","order_id":"ORD_001329","customer_id":"CUST_0177","amount":582.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T10:00:00.000Z"}} +{"payment_id":"PAY_001330","order_id":"ORD_001330","customer_id":"CUST_0194","amount":1222.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T11:00:00.000Z"}} +{"payment_id":"PAY_001331","order_id":"ORD_001331","customer_id":"CUST_0011","amount":128.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"payment_id":"PAY_001332","order_id":"ORD_001332","customer_id":"CUST_0028","amount":541.42,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T13:00:00.000Z"}} +{"payment_id":"PAY_001333","order_id":"ORD_001333","customer_id":"CUST_0045","amount":1298.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T14:00:00.000Z"}} +{"payment_id":"PAY_001334","order_id":"ORD_001334","customer_id":"CUST_0062","amount":1944.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T15:00:00.000Z"}} +{"payment_id":"PAY_001335","order_id":"ORD_001335","customer_id":"CUST_0079","amount":2320.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T16:00:00.000Z"}} +{"payment_id":"PAY_001336","order_id":"ORD_001336","customer_id":"CUST_0096","amount":334.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T17:00:00.000Z"}} +{"payment_id":"PAY_001337","order_id":"ORD_001337","customer_id":"CUST_0113","amount":427.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T18:00:00.000Z"}} +{"payment_id":"PAY_001338","order_id":"ORD_001338","customer_id":"CUST_0130","amount":403.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T19:00:00.000Z"}} +{"payment_id":"PAY_001339","order_id":"ORD_001339","customer_id":"CUST_0147","amount":830.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T20:00:00.000Z"}} +{"payment_id":"PAY_001340","order_id":"ORD_001340","customer_id":"CUST_0164","amount":1544.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T21:00:00.000Z"}} +{"payment_id":"PAY_001341","order_id":"ORD_001341","customer_id":"CUST_0181","amount":165.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T02:00:00.000Z"}} +{"payment_id":"PAY_001342","order_id":"ORD_001342","customer_id":"CUST_0198","amount":650.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T03:00:00.000Z"}} +{"payment_id":"PAY_001343","order_id":"ORD_001343","customer_id":"CUST_0015","amount":1496.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T04:00:00.000Z"}} +{"payment_id":"PAY_001344","order_id":"ORD_001344","customer_id":"CUST_0032","amount":2191.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T05:00:00.000Z"}} +{"payment_id":"PAY_001345","order_id":"ORD_001345","customer_id":"CUST_0049","amount":2287.02,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T06:00:00.000Z"}} +{"payment_id":"PAY_001346","order_id":"ORD_001346","customer_id":"CUST_0066","amount":372,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T07:00:00.000Z"}} +{"payment_id":"PAY_001347","order_id":"ORD_001347","customer_id":"CUST_0083","amount":160.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T08:00:00.000Z"}} +{"payment_id":"PAY_001348","order_id":"ORD_001348","customer_id":"CUST_0100","amount":602.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T09:00:00.000Z"}} +{"payment_id":"PAY_001349","order_id":"ORD_001349","customer_id":"CUST_0117","amount":1077.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T10:00:00.000Z"}} +{"payment_id":"PAY_001350","order_id":"ORD_001350","customer_id":"CUST_0134","amount":1867.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T11:00:00.000Z"}} +{"payment_id":"PAY_001351","order_id":"ORD_001351","customer_id":"CUST_0151","amount":203.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T12:00:00.000Z"}} +{"payment_id":"PAY_001352","order_id":"ORD_001352","customer_id":"CUST_0168","amount":758.92,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T13:00:00.000Z"}} +{"payment_id":"PAY_001353","order_id":"ORD_001353","customer_id":"CUST_0185","amount":1695.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T14:00:00.000Z"}} +{"payment_id":"PAY_001354","order_id":"ORD_001354","customer_id":"CUST_0002","amount":2064.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T15:00:00.000Z"}} +{"payment_id":"PAY_001355","order_id":"ORD_001355","customer_id":"CUST_0019","amount":734.51,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T16:00:00.000Z"}} +{"payment_id":"PAY_001356","order_id":"ORD_001356","customer_id":"CUST_0036","amount":34.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T17:00:00.000Z"}} +{"payment_id":"PAY_001357","order_id":"ORD_001357","customer_id":"CUST_0053","amount":269.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T18:00:00.000Z"}} +{"payment_id":"PAY_001358","order_id":"ORD_001358","customer_id":"CUST_0070","amount":801.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T19:00:00.000Z"}} +{"payment_id":"PAY_001359","order_id":"ORD_001359","customer_id":"CUST_0087","amount":1325.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T20:00:00.000Z"}} +{"payment_id":"PAY_001360","order_id":"ORD_001360","customer_id":"CUST_0104","amount":2189.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T21:00:00.000Z"}} +{"payment_id":"PAY_001361","order_id":"ORD_001361","customer_id":"CUST_0121","amount":240.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T02:00:00.000Z"}} +{"payment_id":"PAY_001362","order_id":"ORD_001362","customer_id":"CUST_0138","amount":867.67,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T03:00:00.000Z"}} +{"payment_id":"PAY_001363","order_id":"ORD_001363","customer_id":"CUST_0155","amount":1894.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T04:00:00.000Z"}} +{"payment_id":"PAY_001364","order_id":"ORD_001364","customer_id":"CUST_0172","amount":549.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T05:00:00.000Z"}} +{"payment_id":"PAY_001365","order_id":"ORD_001365","customer_id":"CUST_0189","amount":738.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T06:00:00.000Z"}} +{"payment_id":"PAY_001366","order_id":"ORD_001366","customer_id":"CUST_0006","amount":72,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T07:00:00.000Z"}} +{"payment_id":"PAY_001367","order_id":"ORD_001367","customer_id":"CUST_0023","amount":378.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T08:00:00.000Z"}} +{"payment_id":"PAY_001368","order_id":"ORD_001368","customer_id":"CUST_0040","amount":999.98,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T09:00:00.000Z"}} +{"payment_id":"PAY_001369","order_id":"ORD_001369","customer_id":"CUST_0057","amount":1572.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T10:00:00.000Z"}} +{"payment_id":"PAY_001370","order_id":"ORD_001370","customer_id":"CUST_0074","amount":2512.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T11:00:00.000Z"}} +{"payment_id":"PAY_001371","order_id":"ORD_001371","customer_id":"CUST_0091","amount":278.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T12:00:00.000Z"}} +{"payment_id":"PAY_001372","order_id":"ORD_001372","customer_id":"CUST_0108","amount":976.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T13:00:00.000Z"}} +{"payment_id":"PAY_001373","order_id":"ORD_001373","customer_id":"CUST_0125","amount":1136.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T14:00:00.000Z"}} +{"payment_id":"PAY_001374","order_id":"ORD_001374","customer_id":"CUST_0142","amount":459.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T15:00:00.000Z"}} +{"payment_id":"PAY_001375","order_id":"ORD_001375","customer_id":"CUST_0159","amount":1060.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T16:00:00.000Z"}} +{"payment_id":"PAY_001376","order_id":"ORD_001376","customer_id":"CUST_0176","amount":109.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T17:00:00.000Z"}} +{"payment_id":"PAY_001377","order_id":"ORD_001377","customer_id":"CUST_0193","amount":487.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T18:00:00.000Z"}} +{"payment_id":"PAY_001378","order_id":"ORD_001378","customer_id":"CUST_0010","amount":1198.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T19:00:00.000Z"}} +{"payment_id":"PAY_001379","order_id":"ORD_001379","customer_id":"CUST_0027","amount":1820.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T20:00:00.000Z"}} +{"payment_id":"PAY_001380","order_id":"ORD_001380","customer_id":"CUST_0044","amount":2834.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T21:00:00.000Z"}} +{"payment_id":"PAY_001381","order_id":"ORD_001381","customer_id":"CUST_0061","amount":315.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T02:00:00.000Z"}} +{"payment_id":"PAY_001382","order_id":"ORD_001382","customer_id":"CUST_0078","amount":1085.18,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T03:00:00.000Z"}} +{"payment_id":"PAY_001383","order_id":"ORD_001383","customer_id":"CUST_0095","amount":304.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T04:00:00.000Z"}} +{"payment_id":"PAY_001384","order_id":"ORD_001384","customer_id":"CUST_0112","amount":706.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T05:00:00.000Z"}} +{"payment_id":"PAY_001385","order_id":"ORD_001385","customer_id":"CUST_0129","amount":1383.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T06:00:00.000Z"}} +{"payment_id":"PAY_001386","order_id":"ORD_001386","customer_id":"CUST_0146","amount":147,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T07:00:00.000Z"}} +{"payment_id":"PAY_001387","order_id":"ORD_001387","customer_id":"CUST_0163","amount":595.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T08:00:00.000Z"}} +{"payment_id":"PAY_001388","order_id":"ORD_001388","customer_id":"CUST_0180","amount":1397.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T09:00:00.000Z"}} +{"payment_id":"PAY_001389","order_id":"ORD_001389","customer_id":"CUST_0197","amount":2067.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T10:00:00.000Z"}} +{"payment_id":"PAY_001390","order_id":"ORD_001390","customer_id":"CUST_0014","amount":2125.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T11:00:00.000Z"}} +{"payment_id":"PAY_001391","order_id":"ORD_001391","customer_id":"CUST_0031","amount":353.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T12:00:00.000Z"}} +{"payment_id":"PAY_001392","order_id":"ORD_001392","customer_id":"CUST_0048","amount":106.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T13:00:00.000Z"}} +{"payment_id":"PAY_001393","order_id":"ORD_001393","customer_id":"CUST_0065","amount":503.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T14:00:00.000Z"}} +{"payment_id":"PAY_001394","order_id":"ORD_001394","customer_id":"CUST_0082","amount":954.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T15:00:00.000Z"}} +{"payment_id":"PAY_001395","order_id":"ORD_001395","customer_id":"CUST_0099","amount":1705.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T16:00:00.000Z"}} +{"payment_id":"PAY_001396","order_id":"ORD_001396","customer_id":"CUST_0116","amount":184.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T17:00:00.000Z"}} +{"payment_id":"PAY_001397","order_id":"ORD_001397","customer_id":"CUST_0133","amount":704.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T18:00:00.000Z"}} +{"payment_id":"PAY_001398","order_id":"ORD_001398","customer_id":"CUST_0150","amount":1596.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T19:00:00.000Z"}} +{"payment_id":"PAY_001399","order_id":"ORD_001399","customer_id":"CUST_0167","amount":2315.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T20:00:00.000Z"}} +{"payment_id":"PAY_001400","order_id":"ORD_001400","customer_id":"CUST_0184","amount":1323.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T21:00:00.000Z"}} +{"payment_id":"PAY_001401","order_id":"ORD_001401","customer_id":"CUST_0001","amount":15.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T02:00:00.000Z"}} +{"payment_id":"PAY_001402","order_id":"ORD_001402","customer_id":"CUST_0018","amount":215.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T03:00:00.000Z"}} +{"payment_id":"PAY_001403","order_id":"ORD_001403","customer_id":"CUST_0035","amount":701.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T04:00:00.000Z"}} +{"payment_id":"PAY_001404","order_id":"ORD_001404","customer_id":"CUST_0052","amount":1201.57,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T05:00:00.000Z"}} +{"payment_id":"PAY_001405","order_id":"ORD_001405","customer_id":"CUST_0069","amount":2028.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T06:00:00.000Z"}} +{"payment_id":"PAY_001406","order_id":"ORD_001406","customer_id":"CUST_0086","amount":222,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T07:00:00.000Z"}} +{"payment_id":"PAY_001407","order_id":"ORD_001407","customer_id":"CUST_0103","amount":813.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T08:00:00.000Z"}} +{"payment_id":"PAY_001408","order_id":"ORD_001408","customer_id":"CUST_0120","amount":1794.97,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T09:00:00.000Z"}} +{"payment_id":"PAY_001409","order_id":"ORD_001409","customer_id":"CUST_0137","amount":1062.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T10:00:00.000Z"}} +{"payment_id":"PAY_001410","order_id":"ORD_001410","customer_id":"CUST_0154","amount":895.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T11:00:00.000Z"}} +{"payment_id":"PAY_001411","order_id":"ORD_001411","customer_id":"CUST_0171","amount":53.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"payment_id":"PAY_001412","order_id":"ORD_001412","customer_id":"CUST_0188","amount":323.93,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T13:00:00.000Z"}} +{"payment_id":"PAY_001413","order_id":"ORD_001413","customer_id":"CUST_0005","amount":900.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T14:00:00.000Z"}} +{"payment_id":"PAY_001414","order_id":"ORD_001414","customer_id":"CUST_0022","amount":1449.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T15:00:00.000Z"}} +{"payment_id":"PAY_001415","order_id":"ORD_001415","customer_id":"CUST_0039","amount":2350.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T16:00:00.000Z"}} +{"payment_id":"PAY_001416","order_id":"ORD_001416","customer_id":"CUST_0056","amount":259.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T17:00:00.000Z"}} +{"payment_id":"PAY_001417","order_id":"ORD_001417","customer_id":"CUST_0073","amount":922.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T18:00:00.000Z"}} +{"payment_id":"PAY_001418","order_id":"ORD_001418","customer_id":"CUST_0090","amount":1037.48,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T19:00:00.000Z"}} +{"payment_id":"PAY_001419","order_id":"ORD_001419","customer_id":"CUST_0107","amount":672.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T20:00:00.000Z"}} +{"payment_id":"PAY_001420","order_id":"ORD_001420","customer_id":"CUST_0124","amount":899.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T21:00:00.000Z"}} +{"payment_id":"PAY_001421","order_id":"ORD_001421","customer_id":"CUST_0141","amount":90.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T02:00:00.000Z"}} +{"payment_id":"PAY_001422","order_id":"ORD_001422","customer_id":"CUST_0158","amount":432.68,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T03:00:00.000Z"}} +{"payment_id":"PAY_001423","order_id":"ORD_001423","customer_id":"CUST_0175","amount":1099.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T04:00:00.000Z"}} +{"payment_id":"PAY_001424","order_id":"ORD_001424","customer_id":"CUST_0192","amount":1696.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T05:00:00.000Z"}} +{"payment_id":"PAY_001425","order_id":"ORD_001425","customer_id":"CUST_0009","amount":2673.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T06:00:00.000Z"}} +{"payment_id":"PAY_001426","order_id":"ORD_001426","customer_id":"CUST_0026","amount":297,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T07:00:00.000Z"}} +{"payment_id":"PAY_001427","order_id":"ORD_001427","customer_id":"CUST_0043","amount":1030.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T08:00:00.000Z"}} +{"payment_id":"PAY_001428","order_id":"ORD_001428","customer_id":"CUST_0060","amount":561.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T09:00:00.000Z"}} +{"payment_id":"PAY_001429","order_id":"ORD_001429","customer_id":"CUST_0077","amount":582.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T10:00:00.000Z"}} +{"payment_id":"PAY_001430","order_id":"ORD_001430","customer_id":"CUST_0094","amount":1222.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T11:00:00.000Z"}} +{"payment_id":"PAY_001431","order_id":"ORD_001431","customer_id":"CUST_0111","amount":128.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"payment_id":"PAY_001432","order_id":"ORD_001432","customer_id":"CUST_0128","amount":541.42,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T13:00:00.000Z"}} +{"payment_id":"PAY_001433","order_id":"ORD_001433","customer_id":"CUST_0145","amount":1298.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T14:00:00.000Z"}} +{"payment_id":"PAY_001434","order_id":"ORD_001434","customer_id":"CUST_0162","amount":1944.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T15:00:00.000Z"}} +{"payment_id":"PAY_001435","order_id":"ORD_001435","customer_id":"CUST_0179","amount":2320.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T16:00:00.000Z"}} +{"payment_id":"PAY_001436","order_id":"ORD_001436","customer_id":"CUST_0196","amount":334.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T17:00:00.000Z"}} +{"payment_id":"PAY_001437","order_id":"ORD_001437","customer_id":"CUST_0013","amount":427.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T18:00:00.000Z"}} +{"payment_id":"PAY_001438","order_id":"ORD_001438","customer_id":"CUST_0030","amount":403.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T19:00:00.000Z"}} +{"payment_id":"PAY_001439","order_id":"ORD_001439","customer_id":"CUST_0047","amount":830.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T20:00:00.000Z"}} +{"payment_id":"PAY_001440","order_id":"ORD_001440","customer_id":"CUST_0064","amount":1544.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T21:00:00.000Z"}} +{"payment_id":"PAY_001441","order_id":"ORD_001441","customer_id":"CUST_0081","amount":165.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_001442","order_id":"ORD_001442","customer_id":"CUST_0098","amount":650.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_001443","order_id":"ORD_001443","customer_id":"CUST_0115","amount":1496.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_001444","order_id":"ORD_001444","customer_id":"CUST_0132","amount":2191.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_001445","order_id":"ORD_001445","customer_id":"CUST_0149","amount":2287.02,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_001446","order_id":"ORD_001446","customer_id":"CUST_0166","amount":372,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_001447","order_id":"ORD_001447","customer_id":"CUST_0183","amount":160.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_001448","order_id":"ORD_001448","customer_id":"CUST_0200","amount":602.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_001449","order_id":"ORD_001449","customer_id":"CUST_0017","amount":1077.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_001450","order_id":"ORD_001450","customer_id":"CUST_0034","amount":1867.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_001451","order_id":"ORD_001451","customer_id":"CUST_0051","amount":203.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_001452","order_id":"ORD_001452","customer_id":"CUST_0068","amount":758.92,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_001453","order_id":"ORD_001453","customer_id":"CUST_0085","amount":1695.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_001454","order_id":"ORD_001454","customer_id":"CUST_0102","amount":2064.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_001455","order_id":"ORD_001455","customer_id":"CUST_0119","amount":734.51,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_001456","order_id":"ORD_001456","customer_id":"CUST_0136","amount":34.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_001457","order_id":"ORD_001457","customer_id":"CUST_0153","amount":269.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_001458","order_id":"ORD_001458","customer_id":"CUST_0170","amount":801.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_001459","order_id":"ORD_001459","customer_id":"CUST_0187","amount":1325.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_001460","order_id":"ORD_001460","customer_id":"CUST_0004","amount":2189.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} +{"payment_id":"PAY_001461","order_id":"ORD_001461","customer_id":"CUST_0021","amount":240.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T02:00:00.000Z"}} +{"payment_id":"PAY_001462","order_id":"ORD_001462","customer_id":"CUST_0038","amount":867.67,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T03:00:00.000Z"}} +{"payment_id":"PAY_001463","order_id":"ORD_001463","customer_id":"CUST_0055","amount":1894.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T04:00:00.000Z"}} +{"payment_id":"PAY_001464","order_id":"ORD_001464","customer_id":"CUST_0072","amount":549.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T05:00:00.000Z"}} +{"payment_id":"PAY_001465","order_id":"ORD_001465","customer_id":"CUST_0089","amount":738.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T06:00:00.000Z"}} +{"payment_id":"PAY_001466","order_id":"ORD_001466","customer_id":"CUST_0106","amount":72,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T07:00:00.000Z"}} +{"payment_id":"PAY_001467","order_id":"ORD_001467","customer_id":"CUST_0123","amount":378.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T08:00:00.000Z"}} +{"payment_id":"PAY_001468","order_id":"ORD_001468","customer_id":"CUST_0140","amount":999.98,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T09:00:00.000Z"}} +{"payment_id":"PAY_001469","order_id":"ORD_001469","customer_id":"CUST_0157","amount":1572.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T10:00:00.000Z"}} +{"payment_id":"PAY_001470","order_id":"ORD_001470","customer_id":"CUST_0174","amount":2512.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T11:00:00.000Z"}} +{"payment_id":"PAY_001471","order_id":"ORD_001471","customer_id":"CUST_0191","amount":278.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T12:00:00.000Z"}} +{"payment_id":"PAY_001472","order_id":"ORD_001472","customer_id":"CUST_0008","amount":976.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T13:00:00.000Z"}} +{"payment_id":"PAY_001473","order_id":"ORD_001473","customer_id":"CUST_0025","amount":1136.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T14:00:00.000Z"}} +{"payment_id":"PAY_001474","order_id":"ORD_001474","customer_id":"CUST_0042","amount":459.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T15:00:00.000Z"}} +{"payment_id":"PAY_001475","order_id":"ORD_001475","customer_id":"CUST_0059","amount":1060.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T16:00:00.000Z"}} +{"payment_id":"PAY_001476","order_id":"ORD_001476","customer_id":"CUST_0076","amount":109.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T17:00:00.000Z"}} +{"payment_id":"PAY_001477","order_id":"ORD_001477","customer_id":"CUST_0093","amount":487.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T18:00:00.000Z"}} +{"payment_id":"PAY_001478","order_id":"ORD_001478","customer_id":"CUST_0110","amount":1198.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T19:00:00.000Z"}} +{"payment_id":"PAY_001479","order_id":"ORD_001479","customer_id":"CUST_0127","amount":1820.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T20:00:00.000Z"}} +{"payment_id":"PAY_001480","order_id":"ORD_001480","customer_id":"CUST_0144","amount":2834.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T21:00:00.000Z"}} +{"payment_id":"PAY_001481","order_id":"ORD_001481","customer_id":"CUST_0161","amount":315.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T02:00:00.000Z"}} +{"payment_id":"PAY_001482","order_id":"ORD_001482","customer_id":"CUST_0178","amount":1085.18,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T03:00:00.000Z"}} +{"payment_id":"PAY_001483","order_id":"ORD_001483","customer_id":"CUST_0195","amount":304.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T04:00:00.000Z"}} +{"payment_id":"PAY_001484","order_id":"ORD_001484","customer_id":"CUST_0012","amount":706.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T05:00:00.000Z"}} +{"payment_id":"PAY_001485","order_id":"ORD_001485","customer_id":"CUST_0029","amount":1383.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T06:00:00.000Z"}} +{"payment_id":"PAY_001486","order_id":"ORD_001486","customer_id":"CUST_0046","amount":147,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T07:00:00.000Z"}} +{"payment_id":"PAY_001487","order_id":"ORD_001487","customer_id":"CUST_0063","amount":595.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T08:00:00.000Z"}} +{"payment_id":"PAY_001488","order_id":"ORD_001488","customer_id":"CUST_0080","amount":1397.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T09:00:00.000Z"}} +{"payment_id":"PAY_001489","order_id":"ORD_001489","customer_id":"CUST_0097","amount":2067.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T10:00:00.000Z"}} +{"payment_id":"PAY_001490","order_id":"ORD_001490","customer_id":"CUST_0114","amount":2125.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T11:00:00.000Z"}} +{"payment_id":"PAY_001491","order_id":"ORD_001491","customer_id":"CUST_0131","amount":353.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T12:00:00.000Z"}} +{"payment_id":"PAY_001492","order_id":"ORD_001492","customer_id":"CUST_0148","amount":106.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T13:00:00.000Z"}} +{"payment_id":"PAY_001493","order_id":"ORD_001493","customer_id":"CUST_0165","amount":503.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T14:00:00.000Z"}} +{"payment_id":"PAY_001494","order_id":"ORD_001494","customer_id":"CUST_0182","amount":954.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T15:00:00.000Z"}} +{"payment_id":"PAY_001495","order_id":"ORD_001495","customer_id":"CUST_0199","amount":1705.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T16:00:00.000Z"}} +{"payment_id":"PAY_001496","order_id":"ORD_001496","customer_id":"CUST_0016","amount":184.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T17:00:00.000Z"}} +{"payment_id":"PAY_001497","order_id":"ORD_001497","customer_id":"CUST_0033","amount":704.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T18:00:00.000Z"}} +{"payment_id":"PAY_001498","order_id":"ORD_001498","customer_id":"CUST_0050","amount":1596.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T19:00:00.000Z"}} +{"payment_id":"PAY_001499","order_id":"ORD_001499","customer_id":"CUST_0067","amount":2315.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T20:00:00.000Z"}} +{"payment_id":"PAY_001500","order_id":"ORD_001500","customer_id":"CUST_0084","amount":1323.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T21:00:00.000Z"}} +{"payment_id":"PAY_001501","order_id":"ORD_001501","customer_id":"CUST_0101","amount":15.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T02:00:00.000Z"}} +{"payment_id":"PAY_001502","order_id":"ORD_001502","customer_id":"CUST_0118","amount":215.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T03:00:00.000Z"}} +{"payment_id":"PAY_001503","order_id":"ORD_001503","customer_id":"CUST_0135","amount":701.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T04:00:00.000Z"}} +{"payment_id":"PAY_001504","order_id":"ORD_001504","customer_id":"CUST_0152","amount":1201.57,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T05:00:00.000Z"}} +{"payment_id":"PAY_001505","order_id":"ORD_001505","customer_id":"CUST_0169","amount":2028.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T06:00:00.000Z"}} +{"payment_id":"PAY_001506","order_id":"ORD_001506","customer_id":"CUST_0186","amount":222,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T07:00:00.000Z"}} +{"payment_id":"PAY_001507","order_id":"ORD_001507","customer_id":"CUST_0003","amount":813.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T08:00:00.000Z"}} +{"payment_id":"PAY_001508","order_id":"ORD_001508","customer_id":"CUST_0020","amount":1794.97,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T09:00:00.000Z"}} +{"payment_id":"PAY_001509","order_id":"ORD_001509","customer_id":"CUST_0037","amount":1062.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T10:00:00.000Z"}} +{"payment_id":"PAY_001510","order_id":"ORD_001510","customer_id":"CUST_0054","amount":895.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T11:00:00.000Z"}} +{"payment_id":"PAY_001511","order_id":"ORD_001511","customer_id":"CUST_0071","amount":53.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"payment_id":"PAY_001512","order_id":"ORD_001512","customer_id":"CUST_0088","amount":323.93,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T13:00:00.000Z"}} +{"payment_id":"PAY_001513","order_id":"ORD_001513","customer_id":"CUST_0105","amount":900.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T14:00:00.000Z"}} +{"payment_id":"PAY_001514","order_id":"ORD_001514","customer_id":"CUST_0122","amount":1449.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T15:00:00.000Z"}} +{"payment_id":"PAY_001515","order_id":"ORD_001515","customer_id":"CUST_0139","amount":2350.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T16:00:00.000Z"}} +{"payment_id":"PAY_001516","order_id":"ORD_001516","customer_id":"CUST_0156","amount":259.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T17:00:00.000Z"}} +{"payment_id":"PAY_001517","order_id":"ORD_001517","customer_id":"CUST_0173","amount":922.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T18:00:00.000Z"}} +{"payment_id":"PAY_001518","order_id":"ORD_001518","customer_id":"CUST_0190","amount":1037.48,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T19:00:00.000Z"}} +{"payment_id":"PAY_001519","order_id":"ORD_001519","customer_id":"CUST_0007","amount":672.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T20:00:00.000Z"}} +{"payment_id":"PAY_001520","order_id":"ORD_001520","customer_id":"CUST_0024","amount":899.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T21:00:00.000Z"}} +{"payment_id":"PAY_001521","order_id":"ORD_001521","customer_id":"CUST_0041","amount":90.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T02:00:00.000Z"}} +{"payment_id":"PAY_001522","order_id":"ORD_001522","customer_id":"CUST_0058","amount":432.68,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T03:00:00.000Z"}} +{"payment_id":"PAY_001523","order_id":"ORD_001523","customer_id":"CUST_0075","amount":1099.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T04:00:00.000Z"}} +{"payment_id":"PAY_001524","order_id":"ORD_001524","customer_id":"CUST_0092","amount":1696.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T05:00:00.000Z"}} +{"payment_id":"PAY_001525","order_id":"ORD_001525","customer_id":"CUST_0109","amount":2673.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T06:00:00.000Z"}} +{"payment_id":"PAY_001526","order_id":"ORD_001526","customer_id":"CUST_0126","amount":297,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T07:00:00.000Z"}} +{"payment_id":"PAY_001527","order_id":"ORD_001527","customer_id":"CUST_0143","amount":1030.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T08:00:00.000Z"}} +{"payment_id":"PAY_001528","order_id":"ORD_001528","customer_id":"CUST_0160","amount":561.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T09:00:00.000Z"}} +{"payment_id":"PAY_001529","order_id":"ORD_001529","customer_id":"CUST_0177","amount":582.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T10:00:00.000Z"}} +{"payment_id":"PAY_001530","order_id":"ORD_001530","customer_id":"CUST_0194","amount":1222.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T11:00:00.000Z"}} +{"payment_id":"PAY_001531","order_id":"ORD_001531","customer_id":"CUST_0011","amount":128.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T12:00:00.000Z"}} +{"payment_id":"PAY_001532","order_id":"ORD_001532","customer_id":"CUST_0028","amount":541.42,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T13:00:00.000Z"}} +{"payment_id":"PAY_001533","order_id":"ORD_001533","customer_id":"CUST_0045","amount":1298.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T14:00:00.000Z"}} +{"payment_id":"PAY_001534","order_id":"ORD_001534","customer_id":"CUST_0062","amount":1944.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T15:00:00.000Z"}} +{"payment_id":"PAY_001535","order_id":"ORD_001535","customer_id":"CUST_0079","amount":2320.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T16:00:00.000Z"}} +{"payment_id":"PAY_001536","order_id":"ORD_001536","customer_id":"CUST_0096","amount":334.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T17:00:00.000Z"}} +{"payment_id":"PAY_001537","order_id":"ORD_001537","customer_id":"CUST_0113","amount":427.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T18:00:00.000Z"}} +{"payment_id":"PAY_001538","order_id":"ORD_001538","customer_id":"CUST_0130","amount":403.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T19:00:00.000Z"}} +{"payment_id":"PAY_001539","order_id":"ORD_001539","customer_id":"CUST_0147","amount":830.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T20:00:00.000Z"}} +{"payment_id":"PAY_001540","order_id":"ORD_001540","customer_id":"CUST_0164","amount":1544.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T21:00:00.000Z"}} +{"payment_id":"PAY_001541","order_id":"ORD_001541","customer_id":"CUST_0181","amount":165.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T02:00:00.000Z"}} +{"payment_id":"PAY_001542","order_id":"ORD_001542","customer_id":"CUST_0198","amount":650.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T03:00:00.000Z"}} +{"payment_id":"PAY_001543","order_id":"ORD_001543","customer_id":"CUST_0015","amount":1496.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T04:00:00.000Z"}} +{"payment_id":"PAY_001544","order_id":"ORD_001544","customer_id":"CUST_0032","amount":2191.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T05:00:00.000Z"}} +{"payment_id":"PAY_001545","order_id":"ORD_001545","customer_id":"CUST_0049","amount":2287.02,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T06:00:00.000Z"}} +{"payment_id":"PAY_001546","order_id":"ORD_001546","customer_id":"CUST_0066","amount":372,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T07:00:00.000Z"}} +{"payment_id":"PAY_001547","order_id":"ORD_001547","customer_id":"CUST_0083","amount":160.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T08:00:00.000Z"}} +{"payment_id":"PAY_001548","order_id":"ORD_001548","customer_id":"CUST_0100","amount":602.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T09:00:00.000Z"}} +{"payment_id":"PAY_001549","order_id":"ORD_001549","customer_id":"CUST_0117","amount":1077.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T10:00:00.000Z"}} +{"payment_id":"PAY_001550","order_id":"ORD_001550","customer_id":"CUST_0134","amount":1867.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T11:00:00.000Z"}} +{"payment_id":"PAY_001551","order_id":"ORD_001551","customer_id":"CUST_0151","amount":203.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T12:00:00.000Z"}} +{"payment_id":"PAY_001552","order_id":"ORD_001552","customer_id":"CUST_0168","amount":758.92,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T13:00:00.000Z"}} +{"payment_id":"PAY_001553","order_id":"ORD_001553","customer_id":"CUST_0185","amount":1695.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T14:00:00.000Z"}} +{"payment_id":"PAY_001554","order_id":"ORD_001554","customer_id":"CUST_0002","amount":2064.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T15:00:00.000Z"}} +{"payment_id":"PAY_001555","order_id":"ORD_001555","customer_id":"CUST_0019","amount":734.51,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T16:00:00.000Z"}} +{"payment_id":"PAY_001556","order_id":"ORD_001556","customer_id":"CUST_0036","amount":34.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T17:00:00.000Z"}} +{"payment_id":"PAY_001557","order_id":"ORD_001557","customer_id":"CUST_0053","amount":269.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T18:00:00.000Z"}} +{"payment_id":"PAY_001558","order_id":"ORD_001558","customer_id":"CUST_0070","amount":801.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T19:00:00.000Z"}} +{"payment_id":"PAY_001559","order_id":"ORD_001559","customer_id":"CUST_0087","amount":1325.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T20:00:00.000Z"}} +{"payment_id":"PAY_001560","order_id":"ORD_001560","customer_id":"CUST_0104","amount":2189.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T21:00:00.000Z"}} +{"payment_id":"PAY_001561","order_id":"ORD_001561","customer_id":"CUST_0121","amount":240.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T02:00:00.000Z"}} +{"payment_id":"PAY_001562","order_id":"ORD_001562","customer_id":"CUST_0138","amount":867.67,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T03:00:00.000Z"}} +{"payment_id":"PAY_001563","order_id":"ORD_001563","customer_id":"CUST_0155","amount":1894.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T04:00:00.000Z"}} +{"payment_id":"PAY_001564","order_id":"ORD_001564","customer_id":"CUST_0172","amount":549.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T05:00:00.000Z"}} +{"payment_id":"PAY_001565","order_id":"ORD_001565","customer_id":"CUST_0189","amount":738.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T06:00:00.000Z"}} +{"payment_id":"PAY_001566","order_id":"ORD_001566","customer_id":"CUST_0006","amount":72,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T07:00:00.000Z"}} +{"payment_id":"PAY_001567","order_id":"ORD_001567","customer_id":"CUST_0023","amount":378.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T08:00:00.000Z"}} +{"payment_id":"PAY_001568","order_id":"ORD_001568","customer_id":"CUST_0040","amount":999.98,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T09:00:00.000Z"}} +{"payment_id":"PAY_001569","order_id":"ORD_001569","customer_id":"CUST_0057","amount":1572.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T10:00:00.000Z"}} +{"payment_id":"PAY_001570","order_id":"ORD_001570","customer_id":"CUST_0074","amount":2512.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T11:00:00.000Z"}} +{"payment_id":"PAY_001571","order_id":"ORD_001571","customer_id":"CUST_0091","amount":278.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T12:00:00.000Z"}} +{"payment_id":"PAY_001572","order_id":"ORD_001572","customer_id":"CUST_0108","amount":976.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T13:00:00.000Z"}} +{"payment_id":"PAY_001573","order_id":"ORD_001573","customer_id":"CUST_0125","amount":1136.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T14:00:00.000Z"}} +{"payment_id":"PAY_001574","order_id":"ORD_001574","customer_id":"CUST_0142","amount":459.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T15:00:00.000Z"}} +{"payment_id":"PAY_001575","order_id":"ORD_001575","customer_id":"CUST_0159","amount":1060.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T16:00:00.000Z"}} +{"payment_id":"PAY_001576","order_id":"ORD_001576","customer_id":"CUST_0176","amount":109.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T17:00:00.000Z"}} +{"payment_id":"PAY_001577","order_id":"ORD_001577","customer_id":"CUST_0193","amount":487.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T18:00:00.000Z"}} +{"payment_id":"PAY_001578","order_id":"ORD_001578","customer_id":"CUST_0010","amount":1198.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T19:00:00.000Z"}} +{"payment_id":"PAY_001579","order_id":"ORD_001579","customer_id":"CUST_0027","amount":1820.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T20:00:00.000Z"}} +{"payment_id":"PAY_001580","order_id":"ORD_001580","customer_id":"CUST_0044","amount":2834.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T21:00:00.000Z"}} +{"payment_id":"PAY_001581","order_id":"ORD_001581","customer_id":"CUST_0061","amount":315.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T02:00:00.000Z"}} +{"payment_id":"PAY_001582","order_id":"ORD_001582","customer_id":"CUST_0078","amount":1085.18,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T03:00:00.000Z"}} +{"payment_id":"PAY_001583","order_id":"ORD_001583","customer_id":"CUST_0095","amount":304.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T04:00:00.000Z"}} +{"payment_id":"PAY_001584","order_id":"ORD_001584","customer_id":"CUST_0112","amount":706.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T05:00:00.000Z"}} +{"payment_id":"PAY_001585","order_id":"ORD_001585","customer_id":"CUST_0129","amount":1383.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T06:00:00.000Z"}} +{"payment_id":"PAY_001586","order_id":"ORD_001586","customer_id":"CUST_0146","amount":147,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T07:00:00.000Z"}} +{"payment_id":"PAY_001587","order_id":"ORD_001587","customer_id":"CUST_0163","amount":595.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T08:00:00.000Z"}} +{"payment_id":"PAY_001588","order_id":"ORD_001588","customer_id":"CUST_0180","amount":1397.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T09:00:00.000Z"}} +{"payment_id":"PAY_001589","order_id":"ORD_001589","customer_id":"CUST_0197","amount":2067.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T10:00:00.000Z"}} +{"payment_id":"PAY_001590","order_id":"ORD_001590","customer_id":"CUST_0014","amount":2125.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T11:00:00.000Z"}} +{"payment_id":"PAY_001591","order_id":"ORD_001591","customer_id":"CUST_0031","amount":353.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"payment_id":"PAY_001592","order_id":"ORD_001592","customer_id":"CUST_0048","amount":106.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T13:00:00.000Z"}} +{"payment_id":"PAY_001593","order_id":"ORD_001593","customer_id":"CUST_0065","amount":503.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T14:00:00.000Z"}} +{"payment_id":"PAY_001594","order_id":"ORD_001594","customer_id":"CUST_0082","amount":954.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T15:00:00.000Z"}} +{"payment_id":"PAY_001595","order_id":"ORD_001595","customer_id":"CUST_0099","amount":1705.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T16:00:00.000Z"}} +{"payment_id":"PAY_001596","order_id":"ORD_001596","customer_id":"CUST_0116","amount":184.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T17:00:00.000Z"}} +{"payment_id":"PAY_001597","order_id":"ORD_001597","customer_id":"CUST_0133","amount":704.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T18:00:00.000Z"}} +{"payment_id":"PAY_001598","order_id":"ORD_001598","customer_id":"CUST_0150","amount":1596.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T19:00:00.000Z"}} +{"payment_id":"PAY_001599","order_id":"ORD_001599","customer_id":"CUST_0167","amount":2315.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T20:00:00.000Z"}} +{"payment_id":"PAY_001600","order_id":"ORD_001600","customer_id":"CUST_0184","amount":1323.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T21:00:00.000Z"}} +{"payment_id":"PAY_001601","order_id":"ORD_001601","customer_id":"CUST_0001","amount":15.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T02:00:00.000Z"}} +{"payment_id":"PAY_001602","order_id":"ORD_001602","customer_id":"CUST_0018","amount":215.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T03:00:00.000Z"}} +{"payment_id":"PAY_001603","order_id":"ORD_001603","customer_id":"CUST_0035","amount":701.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T04:00:00.000Z"}} +{"payment_id":"PAY_001604","order_id":"ORD_001604","customer_id":"CUST_0052","amount":1201.57,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T05:00:00.000Z"}} +{"payment_id":"PAY_001605","order_id":"ORD_001605","customer_id":"CUST_0069","amount":2028.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T06:00:00.000Z"}} +{"payment_id":"PAY_001606","order_id":"ORD_001606","customer_id":"CUST_0086","amount":222,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T07:00:00.000Z"}} +{"payment_id":"PAY_001607","order_id":"ORD_001607","customer_id":"CUST_0103","amount":813.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T08:00:00.000Z"}} +{"payment_id":"PAY_001608","order_id":"ORD_001608","customer_id":"CUST_0120","amount":1794.97,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T09:00:00.000Z"}} +{"payment_id":"PAY_001609","order_id":"ORD_001609","customer_id":"CUST_0137","amount":1062.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T10:00:00.000Z"}} +{"payment_id":"PAY_001610","order_id":"ORD_001610","customer_id":"CUST_0154","amount":895.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T11:00:00.000Z"}} +{"payment_id":"PAY_001611","order_id":"ORD_001611","customer_id":"CUST_0171","amount":53.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"payment_id":"PAY_001612","order_id":"ORD_001612","customer_id":"CUST_0188","amount":323.93,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T13:00:00.000Z"}} +{"payment_id":"PAY_001613","order_id":"ORD_001613","customer_id":"CUST_0005","amount":900.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T14:00:00.000Z"}} +{"payment_id":"PAY_001614","order_id":"ORD_001614","customer_id":"CUST_0022","amount":1449.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T15:00:00.000Z"}} +{"payment_id":"PAY_001615","order_id":"ORD_001615","customer_id":"CUST_0039","amount":2350.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T16:00:00.000Z"}} +{"payment_id":"PAY_001616","order_id":"ORD_001616","customer_id":"CUST_0056","amount":259.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T17:00:00.000Z"}} +{"payment_id":"PAY_001617","order_id":"ORD_001617","customer_id":"CUST_0073","amount":922.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T18:00:00.000Z"}} +{"payment_id":"PAY_001618","order_id":"ORD_001618","customer_id":"CUST_0090","amount":1037.48,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T19:00:00.000Z"}} +{"payment_id":"PAY_001619","order_id":"ORD_001619","customer_id":"CUST_0107","amount":672.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T20:00:00.000Z"}} +{"payment_id":"PAY_001620","order_id":"ORD_001620","customer_id":"CUST_0124","amount":899.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T21:00:00.000Z"}} +{"payment_id":"PAY_001621","order_id":"ORD_001621","customer_id":"CUST_0141","amount":90.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_001622","order_id":"ORD_001622","customer_id":"CUST_0158","amount":432.68,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_001623","order_id":"ORD_001623","customer_id":"CUST_0175","amount":1099.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_001624","order_id":"ORD_001624","customer_id":"CUST_0192","amount":1696.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_001625","order_id":"ORD_001625","customer_id":"CUST_0009","amount":2673.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_001626","order_id":"ORD_001626","customer_id":"CUST_0026","amount":297,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_001627","order_id":"ORD_001627","customer_id":"CUST_0043","amount":1030.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_001628","order_id":"ORD_001628","customer_id":"CUST_0060","amount":561.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_001629","order_id":"ORD_001629","customer_id":"CUST_0077","amount":582.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_001630","order_id":"ORD_001630","customer_id":"CUST_0094","amount":1222.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_001631","order_id":"ORD_001631","customer_id":"CUST_0111","amount":128.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_001632","order_id":"ORD_001632","customer_id":"CUST_0128","amount":541.42,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_001633","order_id":"ORD_001633","customer_id":"CUST_0145","amount":1298.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_001634","order_id":"ORD_001634","customer_id":"CUST_0162","amount":1944.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_001635","order_id":"ORD_001635","customer_id":"CUST_0179","amount":2320.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_001636","order_id":"ORD_001636","customer_id":"CUST_0196","amount":334.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_001637","order_id":"ORD_001637","customer_id":"CUST_0013","amount":427.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_001638","order_id":"ORD_001638","customer_id":"CUST_0030","amount":403.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_001639","order_id":"ORD_001639","customer_id":"CUST_0047","amount":830.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_001640","order_id":"ORD_001640","customer_id":"CUST_0064","amount":1544.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} +{"payment_id":"PAY_001641","order_id":"ORD_001641","customer_id":"CUST_0081","amount":165.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T02:00:00.000Z"}} +{"payment_id":"PAY_001642","order_id":"ORD_001642","customer_id":"CUST_0098","amount":650.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T03:00:00.000Z"}} +{"payment_id":"PAY_001643","order_id":"ORD_001643","customer_id":"CUST_0115","amount":1496.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T04:00:00.000Z"}} +{"payment_id":"PAY_001644","order_id":"ORD_001644","customer_id":"CUST_0132","amount":2191.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T05:00:00.000Z"}} +{"payment_id":"PAY_001645","order_id":"ORD_001645","customer_id":"CUST_0149","amount":2287.02,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T06:00:00.000Z"}} +{"payment_id":"PAY_001646","order_id":"ORD_001646","customer_id":"CUST_0166","amount":372,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T07:00:00.000Z"}} +{"payment_id":"PAY_001647","order_id":"ORD_001647","customer_id":"CUST_0183","amount":160.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T08:00:00.000Z"}} +{"payment_id":"PAY_001648","order_id":"ORD_001648","customer_id":"CUST_0200","amount":602.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T09:00:00.000Z"}} +{"payment_id":"PAY_001649","order_id":"ORD_001649","customer_id":"CUST_0017","amount":1077.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T10:00:00.000Z"}} +{"payment_id":"PAY_001650","order_id":"ORD_001650","customer_id":"CUST_0034","amount":1867.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T11:00:00.000Z"}} +{"payment_id":"PAY_001651","order_id":"ORD_001651","customer_id":"CUST_0051","amount":203.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T12:00:00.000Z"}} +{"payment_id":"PAY_001652","order_id":"ORD_001652","customer_id":"CUST_0068","amount":758.92,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T13:00:00.000Z"}} +{"payment_id":"PAY_001653","order_id":"ORD_001653","customer_id":"CUST_0085","amount":1695.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T14:00:00.000Z"}} +{"payment_id":"PAY_001654","order_id":"ORD_001654","customer_id":"CUST_0102","amount":2064.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T15:00:00.000Z"}} +{"payment_id":"PAY_001655","order_id":"ORD_001655","customer_id":"CUST_0119","amount":734.51,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T16:00:00.000Z"}} +{"payment_id":"PAY_001656","order_id":"ORD_001656","customer_id":"CUST_0136","amount":34.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T17:00:00.000Z"}} +{"payment_id":"PAY_001657","order_id":"ORD_001657","customer_id":"CUST_0153","amount":269.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T18:00:00.000Z"}} +{"payment_id":"PAY_001658","order_id":"ORD_001658","customer_id":"CUST_0170","amount":801.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T19:00:00.000Z"}} +{"payment_id":"PAY_001659","order_id":"ORD_001659","customer_id":"CUST_0187","amount":1325.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T20:00:00.000Z"}} +{"payment_id":"PAY_001660","order_id":"ORD_001660","customer_id":"CUST_0004","amount":2189.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T21:00:00.000Z"}} +{"payment_id":"PAY_001661","order_id":"ORD_001661","customer_id":"CUST_0021","amount":240.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T02:00:00.000Z"}} +{"payment_id":"PAY_001662","order_id":"ORD_001662","customer_id":"CUST_0038","amount":867.67,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T03:00:00.000Z"}} +{"payment_id":"PAY_001663","order_id":"ORD_001663","customer_id":"CUST_0055","amount":1894.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T04:00:00.000Z"}} +{"payment_id":"PAY_001664","order_id":"ORD_001664","customer_id":"CUST_0072","amount":549.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T05:00:00.000Z"}} +{"payment_id":"PAY_001665","order_id":"ORD_001665","customer_id":"CUST_0089","amount":738.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T06:00:00.000Z"}} +{"payment_id":"PAY_001666","order_id":"ORD_001666","customer_id":"CUST_0106","amount":72,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T07:00:00.000Z"}} +{"payment_id":"PAY_001667","order_id":"ORD_001667","customer_id":"CUST_0123","amount":378.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T08:00:00.000Z"}} +{"payment_id":"PAY_001668","order_id":"ORD_001668","customer_id":"CUST_0140","amount":999.98,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T09:00:00.000Z"}} +{"payment_id":"PAY_001669","order_id":"ORD_001669","customer_id":"CUST_0157","amount":1572.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T10:00:00.000Z"}} +{"payment_id":"PAY_001670","order_id":"ORD_001670","customer_id":"CUST_0174","amount":2512.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T11:00:00.000Z"}} +{"payment_id":"PAY_001671","order_id":"ORD_001671","customer_id":"CUST_0191","amount":278.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T12:00:00.000Z"}} +{"payment_id":"PAY_001672","order_id":"ORD_001672","customer_id":"CUST_0008","amount":976.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T13:00:00.000Z"}} +{"payment_id":"PAY_001673","order_id":"ORD_001673","customer_id":"CUST_0025","amount":1136.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T14:00:00.000Z"}} +{"payment_id":"PAY_001674","order_id":"ORD_001674","customer_id":"CUST_0042","amount":459.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T15:00:00.000Z"}} +{"payment_id":"PAY_001675","order_id":"ORD_001675","customer_id":"CUST_0059","amount":1060.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T16:00:00.000Z"}} +{"payment_id":"PAY_001676","order_id":"ORD_001676","customer_id":"CUST_0076","amount":109.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T17:00:00.000Z"}} +{"payment_id":"PAY_001677","order_id":"ORD_001677","customer_id":"CUST_0093","amount":487.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T18:00:00.000Z"}} +{"payment_id":"PAY_001678","order_id":"ORD_001678","customer_id":"CUST_0110","amount":1198.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T19:00:00.000Z"}} +{"payment_id":"PAY_001679","order_id":"ORD_001679","customer_id":"CUST_0127","amount":1820.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T20:00:00.000Z"}} +{"payment_id":"PAY_001680","order_id":"ORD_001680","customer_id":"CUST_0144","amount":2834.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T21:00:00.000Z"}} +{"payment_id":"PAY_001681","order_id":"ORD_001681","customer_id":"CUST_0161","amount":315.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T02:00:00.000Z"}} +{"payment_id":"PAY_001682","order_id":"ORD_001682","customer_id":"CUST_0178","amount":1085.18,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T03:00:00.000Z"}} +{"payment_id":"PAY_001683","order_id":"ORD_001683","customer_id":"CUST_0195","amount":304.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T04:00:00.000Z"}} +{"payment_id":"PAY_001684","order_id":"ORD_001684","customer_id":"CUST_0012","amount":706.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T05:00:00.000Z"}} +{"payment_id":"PAY_001685","order_id":"ORD_001685","customer_id":"CUST_0029","amount":1383.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T06:00:00.000Z"}} +{"payment_id":"PAY_001686","order_id":"ORD_001686","customer_id":"CUST_0046","amount":147,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T07:00:00.000Z"}} +{"payment_id":"PAY_001687","order_id":"ORD_001687","customer_id":"CUST_0063","amount":595.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T08:00:00.000Z"}} +{"payment_id":"PAY_001688","order_id":"ORD_001688","customer_id":"CUST_0080","amount":1397.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T09:00:00.000Z"}} +{"payment_id":"PAY_001689","order_id":"ORD_001689","customer_id":"CUST_0097","amount":2067.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T10:00:00.000Z"}} +{"payment_id":"PAY_001690","order_id":"ORD_001690","customer_id":"CUST_0114","amount":2125.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T11:00:00.000Z"}} +{"payment_id":"PAY_001691","order_id":"ORD_001691","customer_id":"CUST_0131","amount":353.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"payment_id":"PAY_001692","order_id":"ORD_001692","customer_id":"CUST_0148","amount":106.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T13:00:00.000Z"}} +{"payment_id":"PAY_001693","order_id":"ORD_001693","customer_id":"CUST_0165","amount":503.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T14:00:00.000Z"}} +{"payment_id":"PAY_001694","order_id":"ORD_001694","customer_id":"CUST_0182","amount":954.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T15:00:00.000Z"}} +{"payment_id":"PAY_001695","order_id":"ORD_001695","customer_id":"CUST_0199","amount":1705.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T16:00:00.000Z"}} +{"payment_id":"PAY_001696","order_id":"ORD_001696","customer_id":"CUST_0016","amount":184.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T17:00:00.000Z"}} +{"payment_id":"PAY_001697","order_id":"ORD_001697","customer_id":"CUST_0033","amount":704.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T18:00:00.000Z"}} +{"payment_id":"PAY_001698","order_id":"ORD_001698","customer_id":"CUST_0050","amount":1596.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T19:00:00.000Z"}} +{"payment_id":"PAY_001699","order_id":"ORD_001699","customer_id":"CUST_0067","amount":2315.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T20:00:00.000Z"}} +{"payment_id":"PAY_001700","order_id":"ORD_001700","customer_id":"CUST_0084","amount":1323.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T21:00:00.000Z"}} +{"payment_id":"PAY_001701","order_id":"ORD_001701","customer_id":"CUST_0101","amount":15.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T02:00:00.000Z"}} +{"payment_id":"PAY_001702","order_id":"ORD_001702","customer_id":"CUST_0118","amount":215.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T03:00:00.000Z"}} +{"payment_id":"PAY_001703","order_id":"ORD_001703","customer_id":"CUST_0135","amount":701.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T04:00:00.000Z"}} +{"payment_id":"PAY_001704","order_id":"ORD_001704","customer_id":"CUST_0152","amount":1201.57,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T05:00:00.000Z"}} +{"payment_id":"PAY_001705","order_id":"ORD_001705","customer_id":"CUST_0169","amount":2028.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T06:00:00.000Z"}} +{"payment_id":"PAY_001706","order_id":"ORD_001706","customer_id":"CUST_0186","amount":222,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T07:00:00.000Z"}} +{"payment_id":"PAY_001707","order_id":"ORD_001707","customer_id":"CUST_0003","amount":813.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T08:00:00.000Z"}} +{"payment_id":"PAY_001708","order_id":"ORD_001708","customer_id":"CUST_0020","amount":1794.97,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T09:00:00.000Z"}} +{"payment_id":"PAY_001709","order_id":"ORD_001709","customer_id":"CUST_0037","amount":1062.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T10:00:00.000Z"}} +{"payment_id":"PAY_001710","order_id":"ORD_001710","customer_id":"CUST_0054","amount":895.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T11:00:00.000Z"}} +{"payment_id":"PAY_001711","order_id":"ORD_001711","customer_id":"CUST_0071","amount":53.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T12:00:00.000Z"}} +{"payment_id":"PAY_001712","order_id":"ORD_001712","customer_id":"CUST_0088","amount":323.93,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T13:00:00.000Z"}} +{"payment_id":"PAY_001713","order_id":"ORD_001713","customer_id":"CUST_0105","amount":900.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T14:00:00.000Z"}} +{"payment_id":"PAY_001714","order_id":"ORD_001714","customer_id":"CUST_0122","amount":1449.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T15:00:00.000Z"}} +{"payment_id":"PAY_001715","order_id":"ORD_001715","customer_id":"CUST_0139","amount":2350.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T16:00:00.000Z"}} +{"payment_id":"PAY_001716","order_id":"ORD_001716","customer_id":"CUST_0156","amount":259.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T17:00:00.000Z"}} +{"payment_id":"PAY_001717","order_id":"ORD_001717","customer_id":"CUST_0173","amount":922.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T18:00:00.000Z"}} +{"payment_id":"PAY_001718","order_id":"ORD_001718","customer_id":"CUST_0190","amount":1037.48,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T19:00:00.000Z"}} +{"payment_id":"PAY_001719","order_id":"ORD_001719","customer_id":"CUST_0007","amount":672.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T20:00:00.000Z"}} +{"payment_id":"PAY_001720","order_id":"ORD_001720","customer_id":"CUST_0024","amount":899.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T21:00:00.000Z"}} +{"payment_id":"PAY_001721","order_id":"ORD_001721","customer_id":"CUST_0041","amount":90.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T02:00:00.000Z"}} +{"payment_id":"PAY_001722","order_id":"ORD_001722","customer_id":"CUST_0058","amount":432.68,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T03:00:00.000Z"}} +{"payment_id":"PAY_001723","order_id":"ORD_001723","customer_id":"CUST_0075","amount":1099.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T04:00:00.000Z"}} +{"payment_id":"PAY_001724","order_id":"ORD_001724","customer_id":"CUST_0092","amount":1696.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T05:00:00.000Z"}} +{"payment_id":"PAY_001725","order_id":"ORD_001725","customer_id":"CUST_0109","amount":2673.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T06:00:00.000Z"}} +{"payment_id":"PAY_001726","order_id":"ORD_001726","customer_id":"CUST_0126","amount":297,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T07:00:00.000Z"}} +{"payment_id":"PAY_001727","order_id":"ORD_001727","customer_id":"CUST_0143","amount":1030.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T08:00:00.000Z"}} +{"payment_id":"PAY_001728","order_id":"ORD_001728","customer_id":"CUST_0160","amount":561.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T09:00:00.000Z"}} +{"payment_id":"PAY_001729","order_id":"ORD_001729","customer_id":"CUST_0177","amount":582.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T10:00:00.000Z"}} +{"payment_id":"PAY_001730","order_id":"ORD_001730","customer_id":"CUST_0194","amount":1222.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T11:00:00.000Z"}} +{"payment_id":"PAY_001731","order_id":"ORD_001731","customer_id":"CUST_0011","amount":128.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T12:00:00.000Z"}} +{"payment_id":"PAY_001732","order_id":"ORD_001732","customer_id":"CUST_0028","amount":541.42,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T13:00:00.000Z"}} +{"payment_id":"PAY_001733","order_id":"ORD_001733","customer_id":"CUST_0045","amount":1298.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T14:00:00.000Z"}} +{"payment_id":"PAY_001734","order_id":"ORD_001734","customer_id":"CUST_0062","amount":1944.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T15:00:00.000Z"}} +{"payment_id":"PAY_001735","order_id":"ORD_001735","customer_id":"CUST_0079","amount":2320.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T16:00:00.000Z"}} +{"payment_id":"PAY_001736","order_id":"ORD_001736","customer_id":"CUST_0096","amount":334.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T17:00:00.000Z"}} +{"payment_id":"PAY_001737","order_id":"ORD_001737","customer_id":"CUST_0113","amount":427.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T18:00:00.000Z"}} +{"payment_id":"PAY_001738","order_id":"ORD_001738","customer_id":"CUST_0130","amount":403.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T19:00:00.000Z"}} +{"payment_id":"PAY_001739","order_id":"ORD_001739","customer_id":"CUST_0147","amount":830.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T20:00:00.000Z"}} +{"payment_id":"PAY_001740","order_id":"ORD_001740","customer_id":"CUST_0164","amount":1544.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T21:00:00.000Z"}} +{"payment_id":"PAY_001741","order_id":"ORD_001741","customer_id":"CUST_0181","amount":165.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T02:00:00.000Z"}} +{"payment_id":"PAY_001742","order_id":"ORD_001742","customer_id":"CUST_0198","amount":650.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T03:00:00.000Z"}} +{"payment_id":"PAY_001743","order_id":"ORD_001743","customer_id":"CUST_0015","amount":1496.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T04:00:00.000Z"}} +{"payment_id":"PAY_001744","order_id":"ORD_001744","customer_id":"CUST_0032","amount":2191.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T05:00:00.000Z"}} +{"payment_id":"PAY_001745","order_id":"ORD_001745","customer_id":"CUST_0049","amount":2287.02,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T06:00:00.000Z"}} +{"payment_id":"PAY_001746","order_id":"ORD_001746","customer_id":"CUST_0066","amount":372,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T07:00:00.000Z"}} +{"payment_id":"PAY_001747","order_id":"ORD_001747","customer_id":"CUST_0083","amount":160.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T08:00:00.000Z"}} +{"payment_id":"PAY_001748","order_id":"ORD_001748","customer_id":"CUST_0100","amount":602.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T09:00:00.000Z"}} +{"payment_id":"PAY_001749","order_id":"ORD_001749","customer_id":"CUST_0117","amount":1077.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T10:00:00.000Z"}} +{"payment_id":"PAY_001750","order_id":"ORD_001750","customer_id":"CUST_0134","amount":1867.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T11:00:00.000Z"}} +{"payment_id":"PAY_001751","order_id":"ORD_001751","customer_id":"CUST_0151","amount":203.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T12:00:00.000Z"}} +{"payment_id":"PAY_001752","order_id":"ORD_001752","customer_id":"CUST_0168","amount":758.92,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T13:00:00.000Z"}} +{"payment_id":"PAY_001753","order_id":"ORD_001753","customer_id":"CUST_0185","amount":1695.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T14:00:00.000Z"}} +{"payment_id":"PAY_001754","order_id":"ORD_001754","customer_id":"CUST_0002","amount":2064.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T15:00:00.000Z"}} +{"payment_id":"PAY_001755","order_id":"ORD_001755","customer_id":"CUST_0019","amount":734.51,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T16:00:00.000Z"}} +{"payment_id":"PAY_001756","order_id":"ORD_001756","customer_id":"CUST_0036","amount":34.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T17:00:00.000Z"}} +{"payment_id":"PAY_001757","order_id":"ORD_001757","customer_id":"CUST_0053","amount":269.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T18:00:00.000Z"}} +{"payment_id":"PAY_001758","order_id":"ORD_001758","customer_id":"CUST_0070","amount":801.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T19:00:00.000Z"}} +{"payment_id":"PAY_001759","order_id":"ORD_001759","customer_id":"CUST_0087","amount":1325.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T20:00:00.000Z"}} +{"payment_id":"PAY_001760","order_id":"ORD_001760","customer_id":"CUST_0104","amount":2189.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T21:00:00.000Z"}} +{"payment_id":"PAY_001761","order_id":"ORD_001761","customer_id":"CUST_0121","amount":240.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T02:00:00.000Z"}} +{"payment_id":"PAY_001762","order_id":"ORD_001762","customer_id":"CUST_0138","amount":867.67,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T03:00:00.000Z"}} +{"payment_id":"PAY_001763","order_id":"ORD_001763","customer_id":"CUST_0155","amount":1894.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T04:00:00.000Z"}} +{"payment_id":"PAY_001764","order_id":"ORD_001764","customer_id":"CUST_0172","amount":549.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T05:00:00.000Z"}} +{"payment_id":"PAY_001765","order_id":"ORD_001765","customer_id":"CUST_0189","amount":738.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T06:00:00.000Z"}} +{"payment_id":"PAY_001766","order_id":"ORD_001766","customer_id":"CUST_0006","amount":72,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T07:00:00.000Z"}} +{"payment_id":"PAY_001767","order_id":"ORD_001767","customer_id":"CUST_0023","amount":378.3,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T08:00:00.000Z"}} +{"payment_id":"PAY_001768","order_id":"ORD_001768","customer_id":"CUST_0040","amount":999.98,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T09:00:00.000Z"}} +{"payment_id":"PAY_001769","order_id":"ORD_001769","customer_id":"CUST_0057","amount":1572.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T10:00:00.000Z"}} +{"payment_id":"PAY_001770","order_id":"ORD_001770","customer_id":"CUST_0074","amount":2512.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T11:00:00.000Z"}} +{"payment_id":"PAY_001771","order_id":"ORD_001771","customer_id":"CUST_0091","amount":278.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"payment_id":"PAY_001772","order_id":"ORD_001772","customer_id":"CUST_0108","amount":976.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T13:00:00.000Z"}} +{"payment_id":"PAY_001773","order_id":"ORD_001773","customer_id":"CUST_0125","amount":1136.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T14:00:00.000Z"}} +{"payment_id":"PAY_001774","order_id":"ORD_001774","customer_id":"CUST_0142","amount":459.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T15:00:00.000Z"}} +{"payment_id":"PAY_001775","order_id":"ORD_001775","customer_id":"CUST_0159","amount":1060.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T16:00:00.000Z"}} +{"payment_id":"PAY_001776","order_id":"ORD_001776","customer_id":"CUST_0176","amount":109.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T17:00:00.000Z"}} +{"payment_id":"PAY_001777","order_id":"ORD_001777","customer_id":"CUST_0193","amount":487.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T18:00:00.000Z"}} +{"payment_id":"PAY_001778","order_id":"ORD_001778","customer_id":"CUST_0010","amount":1198.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T19:00:00.000Z"}} +{"payment_id":"PAY_001779","order_id":"ORD_001779","customer_id":"CUST_0027","amount":1820.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T20:00:00.000Z"}} +{"payment_id":"PAY_001780","order_id":"ORD_001780","customer_id":"CUST_0044","amount":2834.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T21:00:00.000Z"}} +{"payment_id":"PAY_001781","order_id":"ORD_001781","customer_id":"CUST_0061","amount":315.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T02:00:00.000Z"}} +{"payment_id":"PAY_001782","order_id":"ORD_001782","customer_id":"CUST_0078","amount":1085.18,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T03:00:00.000Z"}} +{"payment_id":"PAY_001783","order_id":"ORD_001783","customer_id":"CUST_0095","amount":304.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T04:00:00.000Z"}} +{"payment_id":"PAY_001784","order_id":"ORD_001784","customer_id":"CUST_0112","amount":706.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T05:00:00.000Z"}} +{"payment_id":"PAY_001785","order_id":"ORD_001785","customer_id":"CUST_0129","amount":1383.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T06:00:00.000Z"}} +{"payment_id":"PAY_001786","order_id":"ORD_001786","customer_id":"CUST_0146","amount":147,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T07:00:00.000Z"}} +{"payment_id":"PAY_001787","order_id":"ORD_001787","customer_id":"CUST_0163","amount":595.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T08:00:00.000Z"}} +{"payment_id":"PAY_001788","order_id":"ORD_001788","customer_id":"CUST_0180","amount":1397.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T09:00:00.000Z"}} +{"payment_id":"PAY_001789","order_id":"ORD_001789","customer_id":"CUST_0197","amount":2067.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T10:00:00.000Z"}} +{"payment_id":"PAY_001790","order_id":"ORD_001790","customer_id":"CUST_0014","amount":2125.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T11:00:00.000Z"}} +{"payment_id":"PAY_001791","order_id":"ORD_001791","customer_id":"CUST_0031","amount":353.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"payment_id":"PAY_001792","order_id":"ORD_001792","customer_id":"CUST_0048","amount":106.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T13:00:00.000Z"}} +{"payment_id":"PAY_001793","order_id":"ORD_001793","customer_id":"CUST_0065","amount":503.1,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T14:00:00.000Z"}} +{"payment_id":"PAY_001794","order_id":"ORD_001794","customer_id":"CUST_0082","amount":954.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T15:00:00.000Z"}} +{"payment_id":"PAY_001795","order_id":"ORD_001795","customer_id":"CUST_0099","amount":1705.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T16:00:00.000Z"}} +{"payment_id":"PAY_001796","order_id":"ORD_001796","customer_id":"CUST_0116","amount":184.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T17:00:00.000Z"}} +{"payment_id":"PAY_001797","order_id":"ORD_001797","customer_id":"CUST_0133","amount":704.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T18:00:00.000Z"}} +{"payment_id":"PAY_001798","order_id":"ORD_001798","customer_id":"CUST_0150","amount":1596.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T19:00:00.000Z"}} +{"payment_id":"PAY_001799","order_id":"ORD_001799","customer_id":"CUST_0167","amount":2315.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T20:00:00.000Z"}} +{"payment_id":"PAY_001800","order_id":"ORD_001800","customer_id":"CUST_0184","amount":1323.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T21:00:00.000Z"}} +{"payment_id":"PAY_001801","order_id":"ORD_001801","customer_id":"CUST_0001","amount":15.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_001802","order_id":"ORD_001802","customer_id":"CUST_0018","amount":215.17,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_001803","order_id":"ORD_001803","customer_id":"CUST_0035","amount":701.85,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_001804","order_id":"ORD_001804","customer_id":"CUST_0052","amount":1201.57,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_001805","order_id":"ORD_001805","customer_id":"CUST_0069","amount":2028.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_001806","order_id":"ORD_001806","customer_id":"CUST_0086","amount":222,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_001807","order_id":"ORD_001807","customer_id":"CUST_0103","amount":813.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_001808","order_id":"ORD_001808","customer_id":"CUST_0120","amount":1794.97,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_001809","order_id":"ORD_001809","customer_id":"CUST_0137","amount":1062.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_001810","order_id":"ORD_001810","customer_id":"CUST_0154","amount":895.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_001811","order_id":"ORD_001811","customer_id":"CUST_0171","amount":53.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_001812","order_id":"ORD_001812","customer_id":"CUST_0188","amount":323.93,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_001813","order_id":"ORD_001813","customer_id":"CUST_0005","amount":900.6,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_001814","order_id":"ORD_001814","customer_id":"CUST_0022","amount":1449.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_001815","order_id":"ORD_001815","customer_id":"CUST_0039","amount":2350.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_001816","order_id":"ORD_001816","customer_id":"CUST_0056","amount":259.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_001817","order_id":"ORD_001817","customer_id":"CUST_0073","amount":922.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_001818","order_id":"ORD_001818","customer_id":"CUST_0090","amount":1037.48,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_001819","order_id":"ORD_001819","customer_id":"CUST_0107","amount":672.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_001820","order_id":"ORD_001820","customer_id":"CUST_0124","amount":899.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} +{"payment_id":"PAY_001821","order_id":"ORD_001821","customer_id":"CUST_0141","amount":90.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T02:00:00.000Z"}} +{"payment_id":"PAY_001822","order_id":"ORD_001822","customer_id":"CUST_0158","amount":432.68,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T03:00:00.000Z"}} +{"payment_id":"PAY_001823","order_id":"ORD_001823","customer_id":"CUST_0175","amount":1099.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T04:00:00.000Z"}} +{"payment_id":"PAY_001824","order_id":"ORD_001824","customer_id":"CUST_0192","amount":1696.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T05:00:00.000Z"}} +{"payment_id":"PAY_001825","order_id":"ORD_001825","customer_id":"CUST_0009","amount":2673.26,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T06:00:00.000Z"}} +{"payment_id":"PAY_001826","order_id":"ORD_001826","customer_id":"CUST_0026","amount":297,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T07:00:00.000Z"}} +{"payment_id":"PAY_001827","order_id":"ORD_001827","customer_id":"CUST_0043","amount":1030.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T08:00:00.000Z"}} +{"payment_id":"PAY_001828","order_id":"ORD_001828","customer_id":"CUST_0060","amount":561.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T09:00:00.000Z"}} +{"payment_id":"PAY_001829","order_id":"ORD_001829","customer_id":"CUST_0077","amount":582.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T10:00:00.000Z"}} +{"payment_id":"PAY_001830","order_id":"ORD_001830","customer_id":"CUST_0094","amount":1222.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T11:00:00.000Z"}} +{"payment_id":"PAY_001831","order_id":"ORD_001831","customer_id":"CUST_0111","amount":128.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T12:00:00.000Z"}} +{"payment_id":"PAY_001832","order_id":"ORD_001832","customer_id":"CUST_0128","amount":541.42,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T13:00:00.000Z"}} +{"payment_id":"PAY_001833","order_id":"ORD_001833","customer_id":"CUST_0145","amount":1298.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T14:00:00.000Z"}} +{"payment_id":"PAY_001834","order_id":"ORD_001834","customer_id":"CUST_0162","amount":1944.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T15:00:00.000Z"}} +{"payment_id":"PAY_001835","order_id":"ORD_001835","customer_id":"CUST_0179","amount":2320.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T16:00:00.000Z"}} +{"payment_id":"PAY_001836","order_id":"ORD_001836","customer_id":"CUST_0196","amount":334.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T17:00:00.000Z"}} +{"payment_id":"PAY_001837","order_id":"ORD_001837","customer_id":"CUST_0013","amount":427.05,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T18:00:00.000Z"}} +{"payment_id":"PAY_001838","order_id":"ORD_001838","customer_id":"CUST_0030","amount":403.73,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T19:00:00.000Z"}} +{"payment_id":"PAY_001839","order_id":"ORD_001839","customer_id":"CUST_0047","amount":830.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T20:00:00.000Z"}} +{"payment_id":"PAY_001840","order_id":"ORD_001840","customer_id":"CUST_0064","amount":1544.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T21:00:00.000Z"}} +{"payment_id":"PAY_001841","order_id":"ORD_001841","customer_id":"CUST_0081","amount":165.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T02:00:00.000Z"}} +{"payment_id":"PAY_001842","order_id":"ORD_001842","customer_id":"CUST_0098","amount":650.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T03:00:00.000Z"}} +{"payment_id":"PAY_001843","order_id":"ORD_001843","customer_id":"CUST_0115","amount":1496.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T04:00:00.000Z"}} +{"payment_id":"PAY_001844","order_id":"ORD_001844","customer_id":"CUST_0132","amount":2191.58,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T05:00:00.000Z"}} +{"payment_id":"PAY_001845","order_id":"ORD_001845","customer_id":"CUST_0149","amount":2287.02,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T06:00:00.000Z"}} +{"payment_id":"PAY_001846","order_id":"ORD_001846","customer_id":"CUST_0166","amount":372,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T07:00:00.000Z"}} +{"payment_id":"PAY_001847","order_id":"ORD_001847","customer_id":"CUST_0183","amount":160.8,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T08:00:00.000Z"}} +{"payment_id":"PAY_001848","order_id":"ORD_001848","customer_id":"CUST_0200","amount":602.47,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T09:00:00.000Z"}} +{"payment_id":"PAY_001849","order_id":"ORD_001849","customer_id":"CUST_0017","amount":1077.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T10:00:00.000Z"}} +{"payment_id":"PAY_001850","order_id":"ORD_001850","customer_id":"CUST_0034","amount":1867.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T11:00:00.000Z"}} +{"payment_id":"PAY_001851","order_id":"ORD_001851","customer_id":"CUST_0051","amount":203.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T12:00:00.000Z"}} +{"payment_id":"PAY_001852","order_id":"ORD_001852","customer_id":"CUST_0068","amount":758.92,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T13:00:00.000Z"}} +{"payment_id":"PAY_001853","order_id":"ORD_001853","customer_id":"CUST_0085","amount":1695.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T14:00:00.000Z"}} +{"payment_id":"PAY_001854","order_id":"ORD_001854","customer_id":"CUST_0102","amount":2064.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T15:00:00.000Z"}} +{"payment_id":"PAY_001855","order_id":"ORD_001855","customer_id":"CUST_0119","amount":734.51,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T16:00:00.000Z"}} +{"payment_id":"PAY_001856","order_id":"ORD_001856","customer_id":"CUST_0136","amount":34.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T17:00:00.000Z"}} +{"payment_id":"PAY_001857","order_id":"ORD_001857","customer_id":"CUST_0153","amount":269.55,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T18:00:00.000Z"}} +{"payment_id":"PAY_001858","order_id":"ORD_001858","customer_id":"CUST_0170","amount":801.23,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T19:00:00.000Z"}} +{"payment_id":"PAY_001859","order_id":"ORD_001859","customer_id":"CUST_0187","amount":1325.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T20:00:00.000Z"}} +{"payment_id":"PAY_001860","order_id":"ORD_001860","customer_id":"CUST_0004","amount":2189.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T21:00:00.000Z"}} +{"payment_id":"PAY_001861","order_id":"ORD_001861","customer_id":"CUST_0021","amount":240.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T02:00:00.000Z"}} +{"payment_id":"PAY_001862","order_id":"ORD_001862","customer_id":"CUST_0038","amount":867.67,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T03:00:00.000Z"}} +{"payment_id":"PAY_001863","order_id":"ORD_001863","customer_id":"CUST_0055","amount":1894.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T04:00:00.000Z"}} +{"payment_id":"PAY_001864","order_id":"ORD_001864","customer_id":"CUST_0072","amount":549.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T05:00:00.000Z"}} +{"payment_id":"PAY_001865","order_id":"ORD_001865","customer_id":"CUST_0089","amount":738.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T06:00:00.000Z"}} +{"payment_id":"PAY_001866","order_id":"ORD_001866","customer_id":"CUST_0106","amount":72,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T07:00:00.000Z"}} +{"payment_id":"PAY_001867","order_id":"ORD_001867","customer_id":"CUST_0123","amount":378.3,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T08:00:00.000Z"}} +{"payment_id":"PAY_001868","order_id":"ORD_001868","customer_id":"CUST_0140","amount":999.98,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T09:00:00.000Z"}} +{"payment_id":"PAY_001869","order_id":"ORD_001869","customer_id":"CUST_0157","amount":1572.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T10:00:00.000Z"}} +{"payment_id":"PAY_001870","order_id":"ORD_001870","customer_id":"CUST_0174","amount":2512.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T11:00:00.000Z"}} +{"payment_id":"PAY_001871","order_id":"ORD_001871","customer_id":"CUST_0191","amount":278.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"payment_id":"PAY_001872","order_id":"ORD_001872","customer_id":"CUST_0008","amount":976.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T13:00:00.000Z"}} +{"payment_id":"PAY_001873","order_id":"ORD_001873","customer_id":"CUST_0025","amount":1136.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T14:00:00.000Z"}} +{"payment_id":"PAY_001874","order_id":"ORD_001874","customer_id":"CUST_0042","amount":459.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T15:00:00.000Z"}} +{"payment_id":"PAY_001875","order_id":"ORD_001875","customer_id":"CUST_0059","amount":1060.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T16:00:00.000Z"}} +{"payment_id":"PAY_001876","order_id":"ORD_001876","customer_id":"CUST_0076","amount":109.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T17:00:00.000Z"}} +{"payment_id":"PAY_001877","order_id":"ORD_001877","customer_id":"CUST_0093","amount":487.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T18:00:00.000Z"}} +{"payment_id":"PAY_001878","order_id":"ORD_001878","customer_id":"CUST_0110","amount":1198.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T19:00:00.000Z"}} +{"payment_id":"PAY_001879","order_id":"ORD_001879","customer_id":"CUST_0127","amount":1820.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T20:00:00.000Z"}} +{"payment_id":"PAY_001880","order_id":"ORD_001880","customer_id":"CUST_0144","amount":2834.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T21:00:00.000Z"}} +{"payment_id":"PAY_001881","order_id":"ORD_001881","customer_id":"CUST_0161","amount":315.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T02:00:00.000Z"}} +{"payment_id":"PAY_001882","order_id":"ORD_001882","customer_id":"CUST_0178","amount":1085.18,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T03:00:00.000Z"}} +{"payment_id":"PAY_001883","order_id":"ORD_001883","customer_id":"CUST_0195","amount":304.35,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T04:00:00.000Z"}} +{"payment_id":"PAY_001884","order_id":"ORD_001884","customer_id":"CUST_0012","amount":706.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T05:00:00.000Z"}} +{"payment_id":"PAY_001885","order_id":"ORD_001885","customer_id":"CUST_0029","amount":1383.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T06:00:00.000Z"}} +{"payment_id":"PAY_001886","order_id":"ORD_001886","customer_id":"CUST_0046","amount":147,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T07:00:00.000Z"}} +{"payment_id":"PAY_001887","order_id":"ORD_001887","customer_id":"CUST_0063","amount":595.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T08:00:00.000Z"}} +{"payment_id":"PAY_001888","order_id":"ORD_001888","customer_id":"CUST_0080","amount":1397.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T09:00:00.000Z"}} +{"payment_id":"PAY_001889","order_id":"ORD_001889","customer_id":"CUST_0097","amount":2067.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T10:00:00.000Z"}} +{"payment_id":"PAY_001890","order_id":"ORD_001890","customer_id":"CUST_0114","amount":2125.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T11:00:00.000Z"}} +{"payment_id":"PAY_001891","order_id":"ORD_001891","customer_id":"CUST_0131","amount":353.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T12:00:00.000Z"}} +{"payment_id":"PAY_001892","order_id":"ORD_001892","customer_id":"CUST_0148","amount":106.43,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T13:00:00.000Z"}} +{"payment_id":"PAY_001893","order_id":"ORD_001893","customer_id":"CUST_0165","amount":503.1,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T14:00:00.000Z"}} +{"payment_id":"PAY_001894","order_id":"ORD_001894","customer_id":"CUST_0182","amount":954.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T15:00:00.000Z"}} +{"payment_id":"PAY_001895","order_id":"ORD_001895","customer_id":"CUST_0199","amount":1705.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T16:00:00.000Z"}} +{"payment_id":"PAY_001896","order_id":"ORD_001896","customer_id":"CUST_0016","amount":184.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T17:00:00.000Z"}} +{"payment_id":"PAY_001897","order_id":"ORD_001897","customer_id":"CUST_0033","amount":704.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T18:00:00.000Z"}} +{"payment_id":"PAY_001898","order_id":"ORD_001898","customer_id":"CUST_0050","amount":1596.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T19:00:00.000Z"}} +{"payment_id":"PAY_001899","order_id":"ORD_001899","customer_id":"CUST_0067","amount":2315.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T20:00:00.000Z"}} +{"payment_id":"PAY_001900","order_id":"ORD_001900","customer_id":"CUST_0084","amount":1323.27,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T21:00:00.000Z"}} +{"payment_id":"PAY_001901","order_id":"ORD_001901","customer_id":"CUST_0101","amount":15.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T02:00:00.000Z"}} +{"payment_id":"PAY_001902","order_id":"ORD_001902","customer_id":"CUST_0118","amount":215.17,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T03:00:00.000Z"}} +{"payment_id":"PAY_001903","order_id":"ORD_001903","customer_id":"CUST_0135","amount":701.85,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T04:00:00.000Z"}} +{"payment_id":"PAY_001904","order_id":"ORD_001904","customer_id":"CUST_0152","amount":1201.57,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T05:00:00.000Z"}} +{"payment_id":"PAY_001905","order_id":"ORD_001905","customer_id":"CUST_0169","amount":2028.26,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T06:00:00.000Z"}} +{"payment_id":"PAY_001906","order_id":"ORD_001906","customer_id":"CUST_0186","amount":222,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T07:00:00.000Z"}} +{"payment_id":"PAY_001907","order_id":"ORD_001907","customer_id":"CUST_0003","amount":813.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T08:00:00.000Z"}} +{"payment_id":"PAY_001908","order_id":"ORD_001908","customer_id":"CUST_0020","amount":1794.97,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T09:00:00.000Z"}} +{"payment_id":"PAY_001909","order_id":"ORD_001909","customer_id":"CUST_0037","amount":1062.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T10:00:00.000Z"}} +{"payment_id":"PAY_001910","order_id":"ORD_001910","customer_id":"CUST_0054","amount":895.76,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T11:00:00.000Z"}} +{"payment_id":"PAY_001911","order_id":"ORD_001911","customer_id":"CUST_0071","amount":53.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-21T12:00:00.000Z"}} +{"payment_id":"PAY_001912","order_id":"ORD_001912","customer_id":"CUST_0088","amount":323.93,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-22T13:00:00.000Z"}} +{"payment_id":"PAY_001913","order_id":"ORD_001913","customer_id":"CUST_0105","amount":900.6,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-23T14:00:00.000Z"}} +{"payment_id":"PAY_001914","order_id":"ORD_001914","customer_id":"CUST_0122","amount":1449.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-24T15:00:00.000Z"}} +{"payment_id":"PAY_001915","order_id":"ORD_001915","customer_id":"CUST_0139","amount":2350.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-25T16:00:00.000Z"}} +{"payment_id":"PAY_001916","order_id":"ORD_001916","customer_id":"CUST_0156","amount":259.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-26T17:00:00.000Z"}} +{"payment_id":"PAY_001917","order_id":"ORD_001917","customer_id":"CUST_0173","amount":922.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-27T18:00:00.000Z"}} +{"payment_id":"PAY_001918","order_id":"ORD_001918","customer_id":"CUST_0190","amount":1037.48,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-28T19:00:00.000Z"}} +{"payment_id":"PAY_001919","order_id":"ORD_001919","customer_id":"CUST_0007","amount":672.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-29T20:00:00.000Z"}} +{"payment_id":"PAY_001920","order_id":"ORD_001920","customer_id":"CUST_0024","amount":899.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-30T21:00:00.000Z"}} +{"payment_id":"PAY_001921","order_id":"ORD_001921","customer_id":"CUST_0041","amount":90.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-31T02:00:00.000Z"}} +{"payment_id":"PAY_001922","order_id":"ORD_001922","customer_id":"CUST_0058","amount":432.68,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-01T03:00:00.000Z"}} +{"payment_id":"PAY_001923","order_id":"ORD_001923","customer_id":"CUST_0075","amount":1099.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-02T04:00:00.000Z"}} +{"payment_id":"PAY_001924","order_id":"ORD_001924","customer_id":"CUST_0092","amount":1696.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-03T05:00:00.000Z"}} +{"payment_id":"PAY_001925","order_id":"ORD_001925","customer_id":"CUST_0109","amount":2673.26,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-04T06:00:00.000Z"}} +{"payment_id":"PAY_001926","order_id":"ORD_001926","customer_id":"CUST_0126","amount":297,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-05T07:00:00.000Z"}} +{"payment_id":"PAY_001927","order_id":"ORD_001927","customer_id":"CUST_0143","amount":1030.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-06T08:00:00.000Z"}} +{"payment_id":"PAY_001928","order_id":"ORD_001928","customer_id":"CUST_0160","amount":561.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-07T09:00:00.000Z"}} +{"payment_id":"PAY_001929","order_id":"ORD_001929","customer_id":"CUST_0177","amount":582.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-08T10:00:00.000Z"}} +{"payment_id":"PAY_001930","order_id":"ORD_001930","customer_id":"CUST_0194","amount":1222.01,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-09T11:00:00.000Z"}} +{"payment_id":"PAY_001931","order_id":"ORD_001931","customer_id":"CUST_0011","amount":128.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-10T12:00:00.000Z"}} +{"payment_id":"PAY_001932","order_id":"ORD_001932","customer_id":"CUST_0028","amount":541.42,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-11T13:00:00.000Z"}} +{"payment_id":"PAY_001933","order_id":"ORD_001933","customer_id":"CUST_0045","amount":1298.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-12T14:00:00.000Z"}} +{"payment_id":"PAY_001934","order_id":"ORD_001934","customer_id":"CUST_0062","amount":1944.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-13T15:00:00.000Z"}} +{"payment_id":"PAY_001935","order_id":"ORD_001935","customer_id":"CUST_0079","amount":2320.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-02-14T16:00:00.000Z"}} +{"payment_id":"PAY_001936","order_id":"ORD_001936","customer_id":"CUST_0096","amount":334.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-15T17:00:00.000Z"}} +{"payment_id":"PAY_001937","order_id":"ORD_001937","customer_id":"CUST_0113","amount":427.05,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-16T18:00:00.000Z"}} +{"payment_id":"PAY_001938","order_id":"ORD_001938","customer_id":"CUST_0130","amount":403.73,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-17T19:00:00.000Z"}} +{"payment_id":"PAY_001939","order_id":"ORD_001939","customer_id":"CUST_0147","amount":830.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-18T20:00:00.000Z"}} +{"payment_id":"PAY_001940","order_id":"ORD_001940","customer_id":"CUST_0164","amount":1544.52,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-02-19T21:00:00.000Z"}} +{"payment_id":"PAY_001941","order_id":"ORD_001941","customer_id":"CUST_0181","amount":165.75,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-20T02:00:00.000Z"}} +{"payment_id":"PAY_001942","order_id":"ORD_001942","customer_id":"CUST_0198","amount":650.17,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-21T03:00:00.000Z"}} +{"payment_id":"PAY_001943","order_id":"ORD_001943","customer_id":"CUST_0015","amount":1496.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-22T04:00:00.000Z"}} +{"payment_id":"PAY_001944","order_id":"ORD_001944","customer_id":"CUST_0032","amount":2191.58,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-23T05:00:00.000Z"}} +{"payment_id":"PAY_001945","order_id":"ORD_001945","customer_id":"CUST_0049","amount":2287.02,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-02-24T06:00:00.000Z"}} +{"payment_id":"PAY_001946","order_id":"ORD_001946","customer_id":"CUST_0066","amount":372,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-25T07:00:00.000Z"}} +{"payment_id":"PAY_001947","order_id":"ORD_001947","customer_id":"CUST_0083","amount":160.8,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-02-26T08:00:00.000Z"}} +{"payment_id":"PAY_001948","order_id":"ORD_001948","customer_id":"CUST_0100","amount":602.47,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-02-27T09:00:00.000Z"}} +{"payment_id":"PAY_001949","order_id":"ORD_001949","customer_id":"CUST_0117","amount":1077.83,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-02-28T10:00:00.000Z"}} +{"payment_id":"PAY_001950","order_id":"ORD_001950","customer_id":"CUST_0134","amount":1867.01,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-01T11:00:00.000Z"}} +{"payment_id":"PAY_001951","order_id":"ORD_001951","customer_id":"CUST_0151","amount":203.25,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"payment_id":"PAY_001952","order_id":"ORD_001952","customer_id":"CUST_0168","amount":758.92,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-03T13:00:00.000Z"}} +{"payment_id":"PAY_001953","order_id":"ORD_001953","customer_id":"CUST_0185","amount":1695.6,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-04T14:00:00.000Z"}} +{"payment_id":"PAY_001954","order_id":"ORD_001954","customer_id":"CUST_0002","amount":2064.08,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-05T15:00:00.000Z"}} +{"payment_id":"PAY_001955","order_id":"ORD_001955","customer_id":"CUST_0019","amount":734.51,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-06T16:00:00.000Z"}} +{"payment_id":"PAY_001956","order_id":"ORD_001956","customer_id":"CUST_0036","amount":34.5,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-07T17:00:00.000Z"}} +{"payment_id":"PAY_001957","order_id":"ORD_001957","customer_id":"CUST_0053","amount":269.55,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-08T18:00:00.000Z"}} +{"payment_id":"PAY_001958","order_id":"ORD_001958","customer_id":"CUST_0070","amount":801.23,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-09T19:00:00.000Z"}} +{"payment_id":"PAY_001959","order_id":"ORD_001959","customer_id":"CUST_0087","amount":1325.33,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-10T20:00:00.000Z"}} +{"payment_id":"PAY_001960","order_id":"ORD_001960","customer_id":"CUST_0104","amount":2189.52,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-11T21:00:00.000Z"}} +{"payment_id":"PAY_001961","order_id":"ORD_001961","customer_id":"CUST_0121","amount":240.75,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-12T02:00:00.000Z"}} +{"payment_id":"PAY_001962","order_id":"ORD_001962","customer_id":"CUST_0138","amount":867.67,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-13T03:00:00.000Z"}} +{"payment_id":"PAY_001963","order_id":"ORD_001963","customer_id":"CUST_0155","amount":1894.35,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-14T04:00:00.000Z"}} +{"payment_id":"PAY_001964","order_id":"ORD_001964","customer_id":"CUST_0172","amount":549.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-15T05:00:00.000Z"}} +{"payment_id":"PAY_001965","order_id":"ORD_001965","customer_id":"CUST_0189","amount":738.27,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-16T06:00:00.000Z"}} +{"payment_id":"PAY_001966","order_id":"ORD_001966","customer_id":"CUST_0006","amount":72,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-17T07:00:00.000Z"}} +{"payment_id":"PAY_001967","order_id":"ORD_001967","customer_id":"CUST_0023","amount":378.3,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-18T08:00:00.000Z"}} +{"payment_id":"PAY_001968","order_id":"ORD_001968","customer_id":"CUST_0040","amount":999.98,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-19T09:00:00.000Z"}} +{"payment_id":"PAY_001969","order_id":"ORD_001969","customer_id":"CUST_0057","amount":1572.83,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-20T10:00:00.000Z"}} +{"payment_id":"PAY_001970","order_id":"ORD_001970","customer_id":"CUST_0074","amount":2512.01,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-03-21T11:00:00.000Z"}} +{"payment_id":"PAY_001971","order_id":"ORD_001971","customer_id":"CUST_0091","amount":278.25,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"payment_id":"PAY_001972","order_id":"ORD_001972","customer_id":"CUST_0108","amount":976.43,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-23T13:00:00.000Z"}} +{"payment_id":"PAY_001973","order_id":"ORD_001973","customer_id":"CUST_0125","amount":1136.85,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-24T14:00:00.000Z"}} +{"payment_id":"PAY_001974","order_id":"ORD_001974","customer_id":"CUST_0142","amount":459.08,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-25T15:00:00.000Z"}} +{"payment_id":"PAY_001975","order_id":"ORD_001975","customer_id":"CUST_0159","amount":1060.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-03-26T16:00:00.000Z"}} +{"payment_id":"PAY_001976","order_id":"ORD_001976","customer_id":"CUST_0176","amount":109.5,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-27T17:00:00.000Z"}} +{"payment_id":"PAY_001977","order_id":"ORD_001977","customer_id":"CUST_0193","amount":487.05,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-03-28T18:00:00.000Z"}} +{"payment_id":"PAY_001978","order_id":"ORD_001978","customer_id":"CUST_0010","amount":1198.73,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-03-29T19:00:00.000Z"}} +{"payment_id":"PAY_001979","order_id":"ORD_001979","customer_id":"CUST_0027","amount":1820.33,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-03-30T20:00:00.000Z"}} +{"payment_id":"PAY_001980","order_id":"ORD_001980","customer_id":"CUST_0044","amount":2834.52,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-03-31T21:00:00.000Z"}} +{"payment_id":"PAY_001981","order_id":"ORD_001981","customer_id":"CUST_0061","amount":315.75,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-01T02:00:00.000Z"}} +{"payment_id":"PAY_001982","order_id":"ORD_001982","customer_id":"CUST_0078","amount":1085.18,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-02T03:00:00.000Z"}} +{"payment_id":"PAY_001983","order_id":"ORD_001983","customer_id":"CUST_0095","amount":304.35,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-03T04:00:00.000Z"}} +{"payment_id":"PAY_001984","order_id":"ORD_001984","customer_id":"CUST_0112","amount":706.58,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-04T05:00:00.000Z"}} +{"payment_id":"PAY_001985","order_id":"ORD_001985","customer_id":"CUST_0129","amount":1383.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-05T06:00:00.000Z"}} +{"payment_id":"PAY_001986","order_id":"ORD_001986","customer_id":"CUST_0146","amount":147,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-06T07:00:00.000Z"}} +{"payment_id":"PAY_001987","order_id":"ORD_001987","customer_id":"CUST_0163","amount":595.8,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-07T08:00:00.000Z"}} +{"payment_id":"PAY_001988","order_id":"ORD_001988","customer_id":"CUST_0180","amount":1397.47,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-08T09:00:00.000Z"}} +{"payment_id":"PAY_001989","order_id":"ORD_001989","customer_id":"CUST_0197","amount":2067.83,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-09T10:00:00.000Z"}} +{"payment_id":"PAY_001990","order_id":"ORD_001990","customer_id":"CUST_0014","amount":2125.76,"currency":"USD","method":"card","status":"reversed","processed_at":{"$date":"2025-01-10T11:00:00.000Z"}} +{"payment_id":"PAY_001991","order_id":"ORD_001991","customer_id":"CUST_0031","amount":353.25,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-11T12:00:00.000Z"}} +{"payment_id":"PAY_001992","order_id":"ORD_001992","customer_id":"CUST_0048","amount":106.43,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-12T13:00:00.000Z"}} +{"payment_id":"PAY_001993","order_id":"ORD_001993","customer_id":"CUST_0065","amount":503.1,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-13T14:00:00.000Z"}} +{"payment_id":"PAY_001994","order_id":"ORD_001994","customer_id":"CUST_0082","amount":954.08,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-14T15:00:00.000Z"}} +{"payment_id":"PAY_001995","order_id":"ORD_001995","customer_id":"CUST_0099","amount":1705.76,"currency":"USD","method":"wallet","status":"reversed","processed_at":{"$date":"2025-01-15T16:00:00.000Z"}} +{"payment_id":"PAY_001996","order_id":"ORD_001996","customer_id":"CUST_0116","amount":184.5,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-16T17:00:00.000Z"}} +{"payment_id":"PAY_001997","order_id":"ORD_001997","customer_id":"CUST_0133","amount":704.55,"currency":"USD","method":"bank_transfer","status":"captured","processed_at":{"$date":"2025-01-17T18:00:00.000Z"}} +{"payment_id":"PAY_001998","order_id":"ORD_001998","customer_id":"CUST_0150","amount":1596.23,"currency":"USD","method":"wallet","status":"captured","processed_at":{"$date":"2025-01-18T19:00:00.000Z"}} +{"payment_id":"PAY_001999","order_id":"ORD_001999","customer_id":"CUST_0167","amount":2315.33,"currency":"USD","method":"card","status":"captured","processed_at":{"$date":"2025-01-19T20:00:00.000Z"}} +{"payment_id":"PAY_002000","order_id":"ORD_002000","customer_id":"CUST_0184","amount":1323.27,"currency":"USD","method":"bank_transfer","status":"reversed","processed_at":{"$date":"2025-01-20T21:00:00.000Z"}} diff --git a/scenarios/ecommerce-advanced/data/collections/products.jsonl b/scenarios/ecommerce-advanced/data/collections/products.jsonl new file mode 100644 index 0000000..3fc0d08 --- /dev/null +++ b/scenarios/ecommerce-advanced/data/collections/products.jsonl @@ -0,0 +1,100 @@ +{"product_id":"PROD_0001","name":"Product 1","category":"electronics","brand":"Northwind","price":15.75,"cost":6.61,"active":false,"tags":["electronics","featured","seasonal"],"attributes":{"color":"black","size":"small","weight_kg":0.25},"ratings":{"average":3.2,"count":15},"created_at":{"$date":"2024-07-05T00:00:00.000Z"}} +{"product_id":"PROD_0002","name":"Product 2","category":"home","brand":"Contoso","price":19.5,"cost":9.36,"active":true,"tags":["home","standard","evergreen"],"attributes":{"color":"blue","size":"medium","weight_kg":0.43},"ratings":{"average":3.3,"count":52},"created_at":{"$date":"2024-07-04T00:00:00.000Z"}} +{"product_id":"PROD_0003","name":"Product 3","category":"sports","brand":"Fabrikam","price":23.25,"cost":12.56,"active":true,"tags":["sports","featured","evergreen"],"attributes":{"color":"green","size":"large","weight_kg":0.61},"ratings":{"average":3.4,"count":89},"created_at":{"$date":"2024-07-03T00:00:00.000Z"}} +{"product_id":"PROD_0004","name":"Product 4","category":"books","brand":"Adventure","price":27,"cost":16.2,"active":true,"tags":["books","standard","evergreen"],"attributes":{"color":"red","size":"small","weight_kg":0.79},"ratings":{"average":3.5,"count":126},"created_at":{"$date":"2024-07-02T00:00:00.000Z"}} +{"product_id":"PROD_0005","name":"Product 5","category":"outdoor","brand":"Litware","price":30.75,"cost":12.92,"active":true,"tags":["outdoor","featured","evergreen"],"attributes":{"color":"black","size":"medium","weight_kg":0.97},"ratings":{"average":3.6,"count":163},"created_at":{"$date":"2024-07-01T00:00:00.000Z"}} +{"product_id":"PROD_0006","name":"Product 6","category":"electronics","brand":"Northwind","price":34.5,"cost":16.56,"active":true,"tags":["electronics","standard","evergreen"],"attributes":{"color":"blue","size":"large","weight_kg":1.15},"ratings":{"average":3.7,"count":200},"created_at":{"$date":"2024-06-30T00:00:00.000Z"}} +{"product_id":"PROD_0007","name":"Product 7","category":"home","brand":"Contoso","price":38.25,"cost":20.66,"active":true,"tags":["home","featured","evergreen"],"attributes":{"color":"green","size":"small","weight_kg":1.33},"ratings":{"average":3.8,"count":237},"created_at":{"$date":"2024-06-29T00:00:00.000Z"}} +{"product_id":"PROD_0008","name":"Product 8","category":"sports","brand":"Fabrikam","price":42,"cost":25.2,"active":true,"tags":["sports","standard","seasonal"],"attributes":{"color":"red","size":"medium","weight_kg":1.51},"ratings":{"average":3.9,"count":274},"created_at":{"$date":"2024-06-28T00:00:00.000Z"}} +{"product_id":"PROD_0009","name":"Product 9","category":"books","brand":"Adventure","price":45.75,"cost":19.22,"active":true,"tags":["books","featured","evergreen"],"attributes":{"color":"black","size":"large","weight_kg":1.69},"ratings":{"average":4,"count":311},"created_at":{"$date":"2024-06-27T00:00:00.000Z"}} +{"product_id":"PROD_0010","name":"Product 10","category":"outdoor","brand":"Litware","price":49.5,"cost":23.76,"active":true,"tags":["outdoor","standard","evergreen"],"attributes":{"color":"blue","size":"small","weight_kg":1.87},"ratings":{"average":4.1,"count":348},"created_at":{"$date":"2024-06-26T00:00:00.000Z"}} +{"product_id":"PROD_0011","name":"Product 11","category":"electronics","brand":"Northwind","price":53.25,"cost":28.76,"active":true,"tags":["electronics","featured","evergreen"],"attributes":{"color":"green","size":"medium","weight_kg":2.05},"ratings":{"average":4.2,"count":385},"created_at":{"$date":"2024-06-25T00:00:00.000Z"}} +{"product_id":"PROD_0012","name":"Product 12","category":"home","brand":"Contoso","price":57,"cost":34.2,"active":true,"tags":["home","standard","evergreen"],"attributes":{"color":"red","size":"large","weight_kg":2.23},"ratings":{"average":4.3,"count":422},"created_at":{"$date":"2024-06-24T00:00:00.000Z"}} +{"product_id":"PROD_0013","name":"Product 13","category":"sports","brand":"Fabrikam","price":60.75,"cost":25.52,"active":true,"tags":["sports","featured","evergreen"],"attributes":{"color":"black","size":"small","weight_kg":0.25},"ratings":{"average":4.4,"count":459},"created_at":{"$date":"2024-06-23T00:00:00.000Z"}} +{"product_id":"PROD_0014","name":"Product 14","category":"books","brand":"Adventure","price":64.5,"cost":30.96,"active":true,"tags":["books","standard","evergreen"],"attributes":{"color":"blue","size":"medium","weight_kg":0.43},"ratings":{"average":4.5,"count":16},"created_at":{"$date":"2024-06-22T00:00:00.000Z"}} +{"product_id":"PROD_0015","name":"Product 15","category":"outdoor","brand":"Litware","price":68.25,"cost":36.86,"active":true,"tags":["outdoor","featured","seasonal"],"attributes":{"color":"green","size":"large","weight_kg":0.61},"ratings":{"average":4.6,"count":53},"created_at":{"$date":"2024-06-21T00:00:00.000Z"}} +{"product_id":"PROD_0016","name":"Product 16","category":"electronics","brand":"Northwind","price":72,"cost":43.2,"active":true,"tags":["electronics","standard","evergreen"],"attributes":{"color":"red","size":"small","weight_kg":0.79},"ratings":{"average":4.7,"count":90},"created_at":{"$date":"2024-06-20T00:00:00.000Z"}} +{"product_id":"PROD_0017","name":"Product 17","category":"home","brand":"Contoso","price":75.75,"cost":31.82,"active":true,"tags":["home","featured","evergreen"],"attributes":{"color":"black","size":"medium","weight_kg":0.97},"ratings":{"average":4.8,"count":127},"created_at":{"$date":"2024-06-19T00:00:00.000Z"}} +{"product_id":"PROD_0018","name":"Product 18","category":"sports","brand":"Fabrikam","price":79.5,"cost":38.16,"active":false,"tags":["sports","standard","evergreen"],"attributes":{"color":"blue","size":"large","weight_kg":1.15},"ratings":{"average":4.9,"count":164},"created_at":{"$date":"2024-06-18T00:00:00.000Z"}} +{"product_id":"PROD_0019","name":"Product 19","category":"books","brand":"Adventure","price":83.25,"cost":44.96,"active":true,"tags":["books","featured","evergreen"],"attributes":{"color":"green","size":"small","weight_kg":1.33},"ratings":{"average":3.2,"count":201},"created_at":{"$date":"2024-06-17T00:00:00.000Z"}} +{"product_id":"PROD_0020","name":"Product 20","category":"outdoor","brand":"Litware","price":87,"cost":52.2,"active":true,"tags":["outdoor","standard","evergreen"],"attributes":{"color":"red","size":"medium","weight_kg":1.51},"ratings":{"average":3.3,"count":238},"created_at":{"$date":"2024-06-16T00:00:00.000Z"}} +{"product_id":"PROD_0021","name":"Product 21","category":"electronics","brand":"Northwind","price":90.75,"cost":38.12,"active":true,"tags":["electronics","featured","evergreen"],"attributes":{"color":"black","size":"large","weight_kg":1.69},"ratings":{"average":3.4,"count":275},"created_at":{"$date":"2024-06-15T00:00:00.000Z"}} +{"product_id":"PROD_0022","name":"Product 22","category":"home","brand":"Contoso","price":94.5,"cost":45.36,"active":true,"tags":["home","standard","seasonal"],"attributes":{"color":"blue","size":"small","weight_kg":1.87},"ratings":{"average":3.5,"count":312},"created_at":{"$date":"2024-06-14T00:00:00.000Z"}} +{"product_id":"PROD_0023","name":"Product 23","category":"sports","brand":"Fabrikam","price":98.25,"cost":53.06,"active":true,"tags":["sports","featured","evergreen"],"attributes":{"color":"green","size":"medium","weight_kg":2.05},"ratings":{"average":3.6,"count":349},"created_at":{"$date":"2024-06-13T00:00:00.000Z"}} +{"product_id":"PROD_0024","name":"Product 24","category":"books","brand":"Adventure","price":102,"cost":61.2,"active":true,"tags":["books","standard","evergreen"],"attributes":{"color":"red","size":"large","weight_kg":2.23},"ratings":{"average":3.7,"count":386},"created_at":{"$date":"2024-06-12T00:00:00.000Z"}} +{"product_id":"PROD_0025","name":"Product 25","category":"outdoor","brand":"Litware","price":105.75,"cost":44.42,"active":true,"tags":["outdoor","featured","evergreen"],"attributes":{"color":"black","size":"small","weight_kg":0.25},"ratings":{"average":3.8,"count":423},"created_at":{"$date":"2024-06-11T00:00:00.000Z"}} +{"product_id":"PROD_0026","name":"Product 26","category":"electronics","brand":"Northwind","price":109.5,"cost":52.56,"active":true,"tags":["electronics","standard","evergreen"],"attributes":{"color":"blue","size":"medium","weight_kg":0.43},"ratings":{"average":3.9,"count":460},"created_at":{"$date":"2024-06-10T00:00:00.000Z"}} +{"product_id":"PROD_0027","name":"Product 27","category":"home","brand":"Contoso","price":113.25,"cost":61.16,"active":true,"tags":["home","featured","evergreen"],"attributes":{"color":"green","size":"large","weight_kg":0.61},"ratings":{"average":4,"count":17},"created_at":{"$date":"2024-06-09T00:00:00.000Z"}} +{"product_id":"PROD_0028","name":"Product 28","category":"sports","brand":"Fabrikam","price":117,"cost":70.2,"active":true,"tags":["sports","standard","evergreen"],"attributes":{"color":"red","size":"small","weight_kg":0.79},"ratings":{"average":4.1,"count":54},"created_at":{"$date":"2024-06-08T00:00:00.000Z"}} +{"product_id":"PROD_0029","name":"Product 29","category":"books","brand":"Adventure","price":120.75,"cost":50.72,"active":true,"tags":["books","featured","seasonal"],"attributes":{"color":"black","size":"medium","weight_kg":0.97},"ratings":{"average":4.2,"count":91},"created_at":{"$date":"2024-06-07T00:00:00.000Z"}} +{"product_id":"PROD_0030","name":"Product 30","category":"outdoor","brand":"Litware","price":124.5,"cost":59.76,"active":true,"tags":["outdoor","standard","evergreen"],"attributes":{"color":"blue","size":"large","weight_kg":1.15},"ratings":{"average":4.3,"count":128},"created_at":{"$date":"2024-06-06T00:00:00.000Z"}} +{"product_id":"PROD_0031","name":"Product 31","category":"electronics","brand":"Northwind","price":128.25,"cost":69.26,"active":true,"tags":["electronics","featured","evergreen"],"attributes":{"color":"green","size":"small","weight_kg":1.33},"ratings":{"average":4.4,"count":165},"created_at":{"$date":"2024-06-05T00:00:00.000Z"}} +{"product_id":"PROD_0032","name":"Product 32","category":"home","brand":"Contoso","price":132,"cost":79.2,"active":true,"tags":["home","standard","evergreen"],"attributes":{"color":"red","size":"medium","weight_kg":1.51},"ratings":{"average":4.5,"count":202},"created_at":{"$date":"2024-06-04T00:00:00.000Z"}} +{"product_id":"PROD_0033","name":"Product 33","category":"sports","brand":"Fabrikam","price":135.75,"cost":57.02,"active":true,"tags":["sports","featured","evergreen"],"attributes":{"color":"black","size":"large","weight_kg":1.69},"ratings":{"average":4.6,"count":239},"created_at":{"$date":"2024-06-03T00:00:00.000Z"}} +{"product_id":"PROD_0034","name":"Product 34","category":"books","brand":"Adventure","price":139.5,"cost":66.96,"active":true,"tags":["books","standard","evergreen"],"attributes":{"color":"blue","size":"small","weight_kg":1.87},"ratings":{"average":4.7,"count":276},"created_at":{"$date":"2024-06-02T00:00:00.000Z"}} +{"product_id":"PROD_0035","name":"Product 35","category":"outdoor","brand":"Litware","price":143.25,"cost":77.36,"active":false,"tags":["outdoor","featured","evergreen"],"attributes":{"color":"green","size":"medium","weight_kg":2.05},"ratings":{"average":4.8,"count":313},"created_at":{"$date":"2024-06-01T00:00:00.000Z"}} +{"product_id":"PROD_0036","name":"Product 36","category":"electronics","brand":"Northwind","price":147,"cost":88.2,"active":true,"tags":["electronics","standard","seasonal"],"attributes":{"color":"red","size":"large","weight_kg":2.23},"ratings":{"average":4.9,"count":350},"created_at":{"$date":"2024-05-31T00:00:00.000Z"}} +{"product_id":"PROD_0037","name":"Product 37","category":"home","brand":"Contoso","price":150.75,"cost":63.32,"active":true,"tags":["home","featured","evergreen"],"attributes":{"color":"black","size":"small","weight_kg":0.25},"ratings":{"average":3.2,"count":387},"created_at":{"$date":"2024-05-30T00:00:00.000Z"}} +{"product_id":"PROD_0038","name":"Product 38","category":"sports","brand":"Fabrikam","price":154.5,"cost":74.16,"active":true,"tags":["sports","standard","evergreen"],"attributes":{"color":"blue","size":"medium","weight_kg":0.43},"ratings":{"average":3.3,"count":424},"created_at":{"$date":"2024-05-29T00:00:00.000Z"}} +{"product_id":"PROD_0039","name":"Product 39","category":"books","brand":"Adventure","price":158.25,"cost":85.46,"active":true,"tags":["books","featured","evergreen"],"attributes":{"color":"green","size":"large","weight_kg":0.61},"ratings":{"average":3.4,"count":461},"created_at":{"$date":"2024-05-28T00:00:00.000Z"}} +{"product_id":"PROD_0040","name":"Product 40","category":"outdoor","brand":"Litware","price":162,"cost":97.2,"active":true,"tags":["outdoor","standard","evergreen"],"attributes":{"color":"red","size":"small","weight_kg":0.79},"ratings":{"average":3.5,"count":18},"created_at":{"$date":"2024-05-27T00:00:00.000Z"}} +{"product_id":"PROD_0041","name":"Product 41","category":"electronics","brand":"Northwind","price":165.75,"cost":69.61,"active":true,"tags":["electronics","featured","evergreen"],"attributes":{"color":"black","size":"medium","weight_kg":0.97},"ratings":{"average":3.6,"count":55},"created_at":{"$date":"2024-05-26T00:00:00.000Z"}} +{"product_id":"PROD_0042","name":"Product 42","category":"home","brand":"Contoso","price":169.5,"cost":81.36,"active":true,"tags":["home","standard","evergreen"],"attributes":{"color":"blue","size":"large","weight_kg":1.15},"ratings":{"average":3.7,"count":92},"created_at":{"$date":"2024-05-25T00:00:00.000Z"}} +{"product_id":"PROD_0043","name":"Product 43","category":"sports","brand":"Fabrikam","price":173.25,"cost":93.56,"active":true,"tags":["sports","featured","seasonal"],"attributes":{"color":"green","size":"small","weight_kg":1.33},"ratings":{"average":3.8,"count":129},"created_at":{"$date":"2024-05-24T00:00:00.000Z"}} +{"product_id":"PROD_0044","name":"Product 44","category":"books","brand":"Adventure","price":177,"cost":106.2,"active":true,"tags":["books","standard","evergreen"],"attributes":{"color":"red","size":"medium","weight_kg":1.51},"ratings":{"average":3.9,"count":166},"created_at":{"$date":"2024-05-23T00:00:00.000Z"}} +{"product_id":"PROD_0045","name":"Product 45","category":"outdoor","brand":"Litware","price":180.75,"cost":75.91,"active":true,"tags":["outdoor","featured","evergreen"],"attributes":{"color":"black","size":"large","weight_kg":1.69},"ratings":{"average":4,"count":203},"created_at":{"$date":"2024-05-22T00:00:00.000Z"}} +{"product_id":"PROD_0046","name":"Product 46","category":"electronics","brand":"Northwind","price":184.5,"cost":88.56,"active":true,"tags":["electronics","standard","evergreen"],"attributes":{"color":"blue","size":"small","weight_kg":1.87},"ratings":{"average":4.1,"count":240},"created_at":{"$date":"2024-05-21T00:00:00.000Z"}} +{"product_id":"PROD_0047","name":"Product 47","category":"home","brand":"Contoso","price":188.25,"cost":101.66,"active":true,"tags":["home","featured","evergreen"],"attributes":{"color":"green","size":"medium","weight_kg":2.05},"ratings":{"average":4.2,"count":277},"created_at":{"$date":"2024-05-20T00:00:00.000Z"}} +{"product_id":"PROD_0048","name":"Product 48","category":"sports","brand":"Fabrikam","price":192,"cost":115.2,"active":true,"tags":["sports","standard","evergreen"],"attributes":{"color":"red","size":"large","weight_kg":2.23},"ratings":{"average":4.3,"count":314},"created_at":{"$date":"2024-05-19T00:00:00.000Z"}} +{"product_id":"PROD_0049","name":"Product 49","category":"books","brand":"Adventure","price":195.75,"cost":82.22,"active":true,"tags":["books","featured","evergreen"],"attributes":{"color":"black","size":"small","weight_kg":0.25},"ratings":{"average":4.4,"count":351},"created_at":{"$date":"2024-05-18T00:00:00.000Z"}} +{"product_id":"PROD_0050","name":"Product 50","category":"outdoor","brand":"Litware","price":199.5,"cost":95.76,"active":true,"tags":["outdoor","standard","seasonal"],"attributes":{"color":"blue","size":"medium","weight_kg":0.43},"ratings":{"average":4.5,"count":388},"created_at":{"$date":"2024-05-17T00:00:00.000Z"}} +{"product_id":"PROD_0051","name":"Product 51","category":"electronics","brand":"Northwind","price":203.25,"cost":109.76,"active":true,"tags":["electronics","featured","evergreen"],"attributes":{"color":"green","size":"large","weight_kg":0.61},"ratings":{"average":4.6,"count":425},"created_at":{"$date":"2024-05-16T00:00:00.000Z"}} +{"product_id":"PROD_0052","name":"Product 52","category":"home","brand":"Contoso","price":207,"cost":124.2,"active":false,"tags":["home","standard","evergreen"],"attributes":{"color":"red","size":"small","weight_kg":0.79},"ratings":{"average":4.7,"count":462},"created_at":{"$date":"2024-05-15T00:00:00.000Z"}} +{"product_id":"PROD_0053","name":"Product 53","category":"sports","brand":"Fabrikam","price":210.75,"cost":88.52,"active":true,"tags":["sports","featured","evergreen"],"attributes":{"color":"black","size":"medium","weight_kg":0.97},"ratings":{"average":4.8,"count":19},"created_at":{"$date":"2024-05-14T00:00:00.000Z"}} +{"product_id":"PROD_0054","name":"Product 54","category":"books","brand":"Adventure","price":214.5,"cost":102.96,"active":true,"tags":["books","standard","evergreen"],"attributes":{"color":"blue","size":"large","weight_kg":1.15},"ratings":{"average":4.9,"count":56},"created_at":{"$date":"2024-05-13T00:00:00.000Z"}} +{"product_id":"PROD_0055","name":"Product 55","category":"outdoor","brand":"Litware","price":218.25,"cost":117.86,"active":true,"tags":["outdoor","featured","evergreen"],"attributes":{"color":"green","size":"small","weight_kg":1.33},"ratings":{"average":3.2,"count":93},"created_at":{"$date":"2024-05-12T00:00:00.000Z"}} +{"product_id":"PROD_0056","name":"Product 56","category":"electronics","brand":"Northwind","price":222,"cost":133.2,"active":true,"tags":["electronics","standard","evergreen"],"attributes":{"color":"red","size":"medium","weight_kg":1.51},"ratings":{"average":3.3,"count":130},"created_at":{"$date":"2024-05-11T00:00:00.000Z"}} +{"product_id":"PROD_0057","name":"Product 57","category":"home","brand":"Contoso","price":225.75,"cost":94.82,"active":true,"tags":["home","featured","seasonal"],"attributes":{"color":"black","size":"large","weight_kg":1.69},"ratings":{"average":3.4,"count":167},"created_at":{"$date":"2024-05-10T00:00:00.000Z"}} +{"product_id":"PROD_0058","name":"Product 58","category":"sports","brand":"Fabrikam","price":229.5,"cost":110.16,"active":true,"tags":["sports","standard","evergreen"],"attributes":{"color":"blue","size":"small","weight_kg":1.87},"ratings":{"average":3.5,"count":204},"created_at":{"$date":"2024-05-09T00:00:00.000Z"}} +{"product_id":"PROD_0059","name":"Product 59","category":"books","brand":"Adventure","price":233.25,"cost":125.96,"active":true,"tags":["books","featured","evergreen"],"attributes":{"color":"green","size":"medium","weight_kg":2.05},"ratings":{"average":3.6,"count":241},"created_at":{"$date":"2024-05-08T00:00:00.000Z"}} +{"product_id":"PROD_0060","name":"Product 60","category":"outdoor","brand":"Litware","price":237,"cost":142.2,"active":true,"tags":["outdoor","standard","evergreen"],"attributes":{"color":"red","size":"large","weight_kg":2.23},"ratings":{"average":3.7,"count":278},"created_at":{"$date":"2024-05-07T00:00:00.000Z"}} +{"product_id":"PROD_0061","name":"Product 61","category":"electronics","brand":"Northwind","price":240.75,"cost":101.12,"active":true,"tags":["electronics","featured","evergreen"],"attributes":{"color":"black","size":"small","weight_kg":0.25},"ratings":{"average":3.8,"count":315},"created_at":{"$date":"2024-05-06T00:00:00.000Z"}} +{"product_id":"PROD_0062","name":"Product 62","category":"home","brand":"Contoso","price":244.5,"cost":117.36,"active":true,"tags":["home","standard","evergreen"],"attributes":{"color":"blue","size":"medium","weight_kg":0.43},"ratings":{"average":3.9,"count":352},"created_at":{"$date":"2024-05-05T00:00:00.000Z"}} +{"product_id":"PROD_0063","name":"Product 63","category":"sports","brand":"Fabrikam","price":248.25,"cost":134.06,"active":true,"tags":["sports","featured","evergreen"],"attributes":{"color":"green","size":"large","weight_kg":0.61},"ratings":{"average":4,"count":389},"created_at":{"$date":"2024-05-04T00:00:00.000Z"}} +{"product_id":"PROD_0064","name":"Product 64","category":"books","brand":"Adventure","price":252,"cost":151.2,"active":true,"tags":["books","standard","seasonal"],"attributes":{"color":"red","size":"small","weight_kg":0.79},"ratings":{"average":4.1,"count":426},"created_at":{"$date":"2024-05-03T00:00:00.000Z"}} +{"product_id":"PROD_0065","name":"Product 65","category":"outdoor","brand":"Litware","price":255.75,"cost":107.42,"active":true,"tags":["outdoor","featured","evergreen"],"attributes":{"color":"black","size":"medium","weight_kg":0.97},"ratings":{"average":4.2,"count":463},"created_at":{"$date":"2024-05-02T00:00:00.000Z"}} +{"product_id":"PROD_0066","name":"Product 66","category":"electronics","brand":"Northwind","price":259.5,"cost":124.56,"active":true,"tags":["electronics","standard","evergreen"],"attributes":{"color":"blue","size":"large","weight_kg":1.15},"ratings":{"average":4.3,"count":20},"created_at":{"$date":"2024-05-01T00:00:00.000Z"}} +{"product_id":"PROD_0067","name":"Product 67","category":"home","brand":"Contoso","price":263.25,"cost":142.16,"active":true,"tags":["home","featured","evergreen"],"attributes":{"color":"green","size":"small","weight_kg":1.33},"ratings":{"average":4.4,"count":57},"created_at":{"$date":"2024-04-30T00:00:00.000Z"}} +{"product_id":"PROD_0068","name":"Product 68","category":"sports","brand":"Fabrikam","price":267,"cost":160.2,"active":true,"tags":["sports","standard","evergreen"],"attributes":{"color":"red","size":"medium","weight_kg":1.51},"ratings":{"average":4.5,"count":94},"created_at":{"$date":"2024-04-29T00:00:00.000Z"}} +{"product_id":"PROD_0069","name":"Product 69","category":"books","brand":"Adventure","price":270.75,"cost":113.71,"active":false,"tags":["books","featured","evergreen"],"attributes":{"color":"black","size":"large","weight_kg":1.69},"ratings":{"average":4.6,"count":131},"created_at":{"$date":"2024-04-28T00:00:00.000Z"}} +{"product_id":"PROD_0070","name":"Product 70","category":"outdoor","brand":"Litware","price":274.5,"cost":131.76,"active":true,"tags":["outdoor","standard","evergreen"],"attributes":{"color":"blue","size":"small","weight_kg":1.87},"ratings":{"average":4.7,"count":168},"created_at":{"$date":"2024-04-27T00:00:00.000Z"}} +{"product_id":"PROD_0071","name":"Product 71","category":"electronics","brand":"Northwind","price":278.25,"cost":150.26,"active":true,"tags":["electronics","featured","seasonal"],"attributes":{"color":"green","size":"medium","weight_kg":2.05},"ratings":{"average":4.8,"count":205},"created_at":{"$date":"2024-04-26T00:00:00.000Z"}} +{"product_id":"PROD_0072","name":"Product 72","category":"home","brand":"Contoso","price":282,"cost":169.2,"active":true,"tags":["home","standard","evergreen"],"attributes":{"color":"red","size":"large","weight_kg":2.23},"ratings":{"average":4.9,"count":242},"created_at":{"$date":"2024-04-25T00:00:00.000Z"}} +{"product_id":"PROD_0073","name":"Product 73","category":"sports","brand":"Fabrikam","price":285.75,"cost":120.02,"active":true,"tags":["sports","featured","evergreen"],"attributes":{"color":"black","size":"small","weight_kg":0.25},"ratings":{"average":3.2,"count":279},"created_at":{"$date":"2024-04-24T00:00:00.000Z"}} +{"product_id":"PROD_0074","name":"Product 74","category":"books","brand":"Adventure","price":289.5,"cost":138.96,"active":true,"tags":["books","standard","evergreen"],"attributes":{"color":"blue","size":"medium","weight_kg":0.43},"ratings":{"average":3.3,"count":316},"created_at":{"$date":"2024-04-23T00:00:00.000Z"}} +{"product_id":"PROD_0075","name":"Product 75","category":"outdoor","brand":"Litware","price":293.25,"cost":158.36,"active":true,"tags":["outdoor","featured","evergreen"],"attributes":{"color":"green","size":"large","weight_kg":0.61},"ratings":{"average":3.4,"count":353},"created_at":{"$date":"2024-04-22T00:00:00.000Z"}} +{"product_id":"PROD_0076","name":"Product 76","category":"electronics","brand":"Northwind","price":297,"cost":178.2,"active":true,"tags":["electronics","standard","evergreen"],"attributes":{"color":"red","size":"small","weight_kg":0.79},"ratings":{"average":3.5,"count":390},"created_at":{"$date":"2024-04-21T00:00:00.000Z"}} +{"product_id":"PROD_0077","name":"Product 77","category":"home","brand":"Contoso","price":300.75,"cost":126.32,"active":true,"tags":["home","featured","evergreen"],"attributes":{"color":"black","size":"medium","weight_kg":0.97},"ratings":{"average":3.6,"count":427},"created_at":{"$date":"2024-04-20T00:00:00.000Z"}} +{"product_id":"PROD_0078","name":"Product 78","category":"sports","brand":"Fabrikam","price":304.5,"cost":146.16,"active":true,"tags":["sports","standard","seasonal"],"attributes":{"color":"blue","size":"large","weight_kg":1.15},"ratings":{"average":3.7,"count":464},"created_at":{"$date":"2024-04-19T00:00:00.000Z"}} +{"product_id":"PROD_0079","name":"Product 79","category":"books","brand":"Adventure","price":308.25,"cost":166.46,"active":true,"tags":["books","featured","evergreen"],"attributes":{"color":"green","size":"small","weight_kg":1.33},"ratings":{"average":3.8,"count":21},"created_at":{"$date":"2024-04-18T00:00:00.000Z"}} +{"product_id":"PROD_0080","name":"Product 80","category":"outdoor","brand":"Litware","price":312,"cost":187.2,"active":true,"tags":["outdoor","standard","evergreen"],"attributes":{"color":"red","size":"medium","weight_kg":1.51},"ratings":{"average":3.9,"count":58},"created_at":{"$date":"2024-04-17T00:00:00.000Z"}} +{"product_id":"PROD_0081","name":"Product 81","category":"electronics","brand":"Northwind","price":315.75,"cost":132.62,"active":true,"tags":["electronics","featured","evergreen"],"attributes":{"color":"black","size":"large","weight_kg":1.69},"ratings":{"average":4,"count":95},"created_at":{"$date":"2024-04-16T00:00:00.000Z"}} +{"product_id":"PROD_0082","name":"Product 82","category":"home","brand":"Contoso","price":319.5,"cost":153.36,"active":true,"tags":["home","standard","evergreen"],"attributes":{"color":"blue","size":"small","weight_kg":1.87},"ratings":{"average":4.1,"count":132},"created_at":{"$date":"2024-04-15T00:00:00.000Z"}} +{"product_id":"PROD_0083","name":"Product 83","category":"sports","brand":"Fabrikam","price":323.25,"cost":174.56,"active":true,"tags":["sports","featured","evergreen"],"attributes":{"color":"green","size":"medium","weight_kg":2.05},"ratings":{"average":4.2,"count":169},"created_at":{"$date":"2024-04-14T00:00:00.000Z"}} +{"product_id":"PROD_0084","name":"Product 84","category":"books","brand":"Adventure","price":327,"cost":196.2,"active":true,"tags":["books","standard","evergreen"],"attributes":{"color":"red","size":"large","weight_kg":2.23},"ratings":{"average":4.3,"count":206},"created_at":{"$date":"2024-04-13T00:00:00.000Z"}} +{"product_id":"PROD_0085","name":"Product 85","category":"outdoor","brand":"Litware","price":330.75,"cost":138.92,"active":true,"tags":["outdoor","featured","seasonal"],"attributes":{"color":"black","size":"small","weight_kg":0.25},"ratings":{"average":4.4,"count":243},"created_at":{"$date":"2024-04-12T00:00:00.000Z"}} +{"product_id":"PROD_0086","name":"Product 86","category":"electronics","brand":"Northwind","price":334.5,"cost":160.56,"active":false,"tags":["electronics","standard","evergreen"],"attributes":{"color":"blue","size":"medium","weight_kg":0.43},"ratings":{"average":4.5,"count":280},"created_at":{"$date":"2024-04-11T00:00:00.000Z"}} +{"product_id":"PROD_0087","name":"Product 87","category":"home","brand":"Contoso","price":338.25,"cost":182.66,"active":true,"tags":["home","featured","evergreen"],"attributes":{"color":"green","size":"large","weight_kg":0.61},"ratings":{"average":4.6,"count":317},"created_at":{"$date":"2024-04-10T00:00:00.000Z"}} +{"product_id":"PROD_0088","name":"Product 88","category":"sports","brand":"Fabrikam","price":342,"cost":205.2,"active":true,"tags":["sports","standard","evergreen"],"attributes":{"color":"red","size":"small","weight_kg":0.79},"ratings":{"average":4.7,"count":354},"created_at":{"$date":"2024-04-09T00:00:00.000Z"}} +{"product_id":"PROD_0089","name":"Product 89","category":"books","brand":"Adventure","price":345.75,"cost":145.22,"active":true,"tags":["books","featured","evergreen"],"attributes":{"color":"black","size":"medium","weight_kg":0.97},"ratings":{"average":4.8,"count":391},"created_at":{"$date":"2024-04-08T00:00:00.000Z"}} +{"product_id":"PROD_0090","name":"Product 90","category":"outdoor","brand":"Litware","price":349.5,"cost":167.76,"active":true,"tags":["outdoor","standard","evergreen"],"attributes":{"color":"blue","size":"large","weight_kg":1.15},"ratings":{"average":4.9,"count":428},"created_at":{"$date":"2024-04-07T00:00:00.000Z"}} +{"product_id":"PROD_0091","name":"Product 91","category":"electronics","brand":"Northwind","price":353.25,"cost":190.76,"active":true,"tags":["electronics","featured","evergreen"],"attributes":{"color":"green","size":"small","weight_kg":1.33},"ratings":{"average":3.2,"count":465},"created_at":{"$date":"2024-04-06T00:00:00.000Z"}} +{"product_id":"PROD_0092","name":"Product 92","category":"home","brand":"Contoso","price":357,"cost":214.2,"active":true,"tags":["home","standard","seasonal"],"attributes":{"color":"red","size":"medium","weight_kg":1.51},"ratings":{"average":3.3,"count":22},"created_at":{"$date":"2024-04-05T00:00:00.000Z"}} +{"product_id":"PROD_0093","name":"Product 93","category":"sports","brand":"Fabrikam","price":360.75,"cost":151.51,"active":true,"tags":["sports","featured","evergreen"],"attributes":{"color":"black","size":"large","weight_kg":1.69},"ratings":{"average":3.4,"count":59},"created_at":{"$date":"2024-04-04T00:00:00.000Z"}} +{"product_id":"PROD_0094","name":"Product 94","category":"books","brand":"Adventure","price":364.5,"cost":174.96,"active":true,"tags":["books","standard","evergreen"],"attributes":{"color":"blue","size":"small","weight_kg":1.87},"ratings":{"average":3.5,"count":96},"created_at":{"$date":"2024-04-03T00:00:00.000Z"}} +{"product_id":"PROD_0095","name":"Product 95","category":"outdoor","brand":"Litware","price":368.25,"cost":198.86,"active":true,"tags":["outdoor","featured","evergreen"],"attributes":{"color":"green","size":"medium","weight_kg":2.05},"ratings":{"average":3.6,"count":133},"created_at":{"$date":"2024-04-02T00:00:00.000Z"}} +{"product_id":"PROD_0096","name":"Product 96","category":"electronics","brand":"Northwind","price":372,"cost":223.2,"active":true,"tags":["electronics","standard","evergreen"],"attributes":{"color":"red","size":"large","weight_kg":2.23},"ratings":{"average":3.7,"count":170},"created_at":{"$date":"2024-04-01T00:00:00.000Z"}} +{"product_id":"PROD_0097","name":"Product 97","category":"home","brand":"Contoso","price":375.75,"cost":157.82,"active":true,"tags":["home","featured","evergreen"],"attributes":{"color":"black","size":"small","weight_kg":0.25},"ratings":{"average":3.8,"count":207},"created_at":{"$date":"2024-03-31T00:00:00.000Z"}} +{"product_id":"PROD_0098","name":"Product 98","category":"sports","brand":"Fabrikam","price":379.5,"cost":182.16,"active":true,"tags":["sports","standard","evergreen"],"attributes":{"color":"blue","size":"medium","weight_kg":0.43},"ratings":{"average":3.9,"count":244},"created_at":{"$date":"2024-03-30T00:00:00.000Z"}} +{"product_id":"PROD_0099","name":"Product 99","category":"books","brand":"Adventure","price":383.25,"cost":206.96,"active":true,"tags":["books","featured","seasonal"],"attributes":{"color":"green","size":"large","weight_kg":0.61},"ratings":{"average":4,"count":281},"created_at":{"$date":"2024-03-29T00:00:00.000Z"}} +{"product_id":"PROD_0100","name":"Product 100","category":"outdoor","brand":"Litware","price":387,"cost":232.2,"active":true,"tags":["outdoor","standard","evergreen"],"attributes":{"color":"red","size":"small","weight_kg":0.79},"ratings":{"average":4.1,"count":318},"created_at":{"$date":"2024-03-28T00:00:00.000Z"}} diff --git a/scenarios/ecommerce-advanced/data/collections/returns.jsonl b/scenarios/ecommerce-advanced/data/collections/returns.jsonl new file mode 100644 index 0000000..c7521c9 --- /dev/null +++ b/scenarios/ecommerce-advanced/data/collections/returns.jsonl @@ -0,0 +1,120 @@ +{"return_id":"RET_00001","order_id":"ORD_000004","customer_id":"CUST_0052","product_id":"PROD_0034","amount":125.55,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"return_id":"RET_00002","order_id":"ORD_000009","customer_id":"CUST_0137","product_id":"PROD_0089","amount":311.18,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-03T12:00:00.000Z"}} +{"return_id":"RET_00003","order_id":"ORD_000014","customer_id":"CUST_0022","product_id":"PROD_0044","amount":159.3,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-04T12:00:00.000Z"}} +{"return_id":"RET_00004","order_id":"ORD_000019","customer_id":"CUST_0107","product_id":"PROD_0099","amount":344.93,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-05T12:00:00.000Z"}} +{"return_id":"RET_00005","order_id":"ORD_000024","customer_id":"CUST_0192","product_id":"PROD_0054","amount":193.05,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-06T12:00:00.000Z"}} +{"return_id":"RET_00006","order_id":"ORD_000029","customer_id":"CUST_0077","product_id":"PROD_0009","amount":41.18,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-07T12:00:00.000Z"}} +{"return_id":"RET_00007","order_id":"ORD_000034","customer_id":"CUST_0162","product_id":"PROD_0064","amount":226.8,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-08T12:00:00.000Z"}} +{"return_id":"RET_00008","order_id":"ORD_000039","customer_id":"CUST_0047","product_id":"PROD_0019","amount":74.93,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-09T12:00:00.000Z"}} +{"return_id":"RET_00009","order_id":"ORD_000044","customer_id":"CUST_0132","product_id":"PROD_0074","amount":260.55,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-10T12:00:00.000Z"}} +{"return_id":"RET_00010","order_id":"ORD_000049","customer_id":"CUST_0017","product_id":"PROD_0029","amount":108.68,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-11T12:00:00.000Z"}} +{"return_id":"RET_00011","order_id":"ORD_000054","customer_id":"CUST_0102","product_id":"PROD_0084","amount":294.3,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"return_id":"RET_00012","order_id":"ORD_000059","customer_id":"CUST_0187","product_id":"PROD_0039","amount":142.43,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-13T12:00:00.000Z"}} +{"return_id":"RET_00013","order_id":"ORD_000064","customer_id":"CUST_0072","product_id":"PROD_0094","amount":328.05,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-14T12:00:00.000Z"}} +{"return_id":"RET_00014","order_id":"ORD_000069","customer_id":"CUST_0157","product_id":"PROD_0049","amount":176.18,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-15T12:00:00.000Z"}} +{"return_id":"RET_00015","order_id":"ORD_000074","customer_id":"CUST_0042","product_id":"PROD_0004","amount":24.3,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-16T12:00:00.000Z"}} +{"return_id":"RET_00016","order_id":"ORD_000079","customer_id":"CUST_0127","product_id":"PROD_0059","amount":209.93,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-17T12:00:00.000Z"}} +{"return_id":"RET_00017","order_id":"ORD_000084","customer_id":"CUST_0012","product_id":"PROD_0014","amount":58.05,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-18T12:00:00.000Z"}} +{"return_id":"RET_00018","order_id":"ORD_000089","customer_id":"CUST_0097","product_id":"PROD_0069","amount":243.68,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-19T12:00:00.000Z"}} +{"return_id":"RET_00019","order_id":"ORD_000094","customer_id":"CUST_0182","product_id":"PROD_0024","amount":91.8,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-20T12:00:00.000Z"}} +{"return_id":"RET_00020","order_id":"ORD_000099","customer_id":"CUST_0067","product_id":"PROD_0079","amount":277.43,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-21T12:00:00.000Z"}} +{"return_id":"RET_00021","order_id":"ORD_000104","customer_id":"CUST_0152","product_id":"PROD_0034","amount":125.55,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"return_id":"RET_00022","order_id":"ORD_000109","customer_id":"CUST_0037","product_id":"PROD_0089","amount":311.18,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-23T12:00:00.000Z"}} +{"return_id":"RET_00023","order_id":"ORD_000114","customer_id":"CUST_0122","product_id":"PROD_0044","amount":159.3,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-24T12:00:00.000Z"}} +{"return_id":"RET_00024","order_id":"ORD_000119","customer_id":"CUST_0007","product_id":"PROD_0099","amount":344.93,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-25T12:00:00.000Z"}} +{"return_id":"RET_00025","order_id":"ORD_000124","customer_id":"CUST_0092","product_id":"PROD_0054","amount":193.05,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-26T12:00:00.000Z"}} +{"return_id":"RET_00026","order_id":"ORD_000129","customer_id":"CUST_0177","product_id":"PROD_0009","amount":41.18,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-27T12:00:00.000Z"}} +{"return_id":"RET_00027","order_id":"ORD_000134","customer_id":"CUST_0062","product_id":"PROD_0064","amount":226.8,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-28T12:00:00.000Z"}} +{"return_id":"RET_00028","order_id":"ORD_000139","customer_id":"CUST_0147","product_id":"PROD_0019","amount":74.93,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-29T12:00:00.000Z"}} +{"return_id":"RET_00029","order_id":"ORD_000144","customer_id":"CUST_0032","product_id":"PROD_0074","amount":260.55,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-30T12:00:00.000Z"}} +{"return_id":"RET_00030","order_id":"ORD_000149","customer_id":"CUST_0117","product_id":"PROD_0029","amount":108.68,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-31T12:00:00.000Z"}} +{"return_id":"RET_00031","order_id":"ORD_000154","customer_id":"CUST_0002","product_id":"PROD_0084","amount":294.3,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"return_id":"RET_00032","order_id":"ORD_000159","customer_id":"CUST_0087","product_id":"PROD_0039","amount":142.43,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-03T12:00:00.000Z"}} +{"return_id":"RET_00033","order_id":"ORD_000164","customer_id":"CUST_0172","product_id":"PROD_0094","amount":328.05,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-04T12:00:00.000Z"}} +{"return_id":"RET_00034","order_id":"ORD_000169","customer_id":"CUST_0057","product_id":"PROD_0049","amount":176.18,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-05T12:00:00.000Z"}} +{"return_id":"RET_00035","order_id":"ORD_000174","customer_id":"CUST_0142","product_id":"PROD_0004","amount":24.3,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-06T12:00:00.000Z"}} +{"return_id":"RET_00036","order_id":"ORD_000179","customer_id":"CUST_0027","product_id":"PROD_0059","amount":209.93,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-07T12:00:00.000Z"}} +{"return_id":"RET_00037","order_id":"ORD_000184","customer_id":"CUST_0112","product_id":"PROD_0014","amount":58.05,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-08T12:00:00.000Z"}} +{"return_id":"RET_00038","order_id":"ORD_000189","customer_id":"CUST_0197","product_id":"PROD_0069","amount":243.68,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-09T12:00:00.000Z"}} +{"return_id":"RET_00039","order_id":"ORD_000194","customer_id":"CUST_0082","product_id":"PROD_0024","amount":91.8,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-10T12:00:00.000Z"}} +{"return_id":"RET_00040","order_id":"ORD_000199","customer_id":"CUST_0167","product_id":"PROD_0079","amount":277.43,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-11T12:00:00.000Z"}} +{"return_id":"RET_00041","order_id":"ORD_000204","customer_id":"CUST_0052","product_id":"PROD_0034","amount":125.55,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"return_id":"RET_00042","order_id":"ORD_000209","customer_id":"CUST_0137","product_id":"PROD_0089","amount":311.18,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-13T12:00:00.000Z"}} +{"return_id":"RET_00043","order_id":"ORD_000214","customer_id":"CUST_0022","product_id":"PROD_0044","amount":159.3,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-14T12:00:00.000Z"}} +{"return_id":"RET_00044","order_id":"ORD_000219","customer_id":"CUST_0107","product_id":"PROD_0099","amount":344.93,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-15T12:00:00.000Z"}} +{"return_id":"RET_00045","order_id":"ORD_000224","customer_id":"CUST_0192","product_id":"PROD_0054","amount":193.05,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-16T12:00:00.000Z"}} +{"return_id":"RET_00046","order_id":"ORD_000229","customer_id":"CUST_0077","product_id":"PROD_0009","amount":41.18,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-17T12:00:00.000Z"}} +{"return_id":"RET_00047","order_id":"ORD_000234","customer_id":"CUST_0162","product_id":"PROD_0064","amount":226.8,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-18T12:00:00.000Z"}} +{"return_id":"RET_00048","order_id":"ORD_000239","customer_id":"CUST_0047","product_id":"PROD_0019","amount":74.93,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-19T12:00:00.000Z"}} +{"return_id":"RET_00049","order_id":"ORD_000244","customer_id":"CUST_0132","product_id":"PROD_0074","amount":260.55,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-20T12:00:00.000Z"}} +{"return_id":"RET_00050","order_id":"ORD_000249","customer_id":"CUST_0017","product_id":"PROD_0029","amount":108.68,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-21T12:00:00.000Z"}} +{"return_id":"RET_00051","order_id":"ORD_000254","customer_id":"CUST_0102","product_id":"PROD_0084","amount":294.3,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"return_id":"RET_00052","order_id":"ORD_000259","customer_id":"CUST_0187","product_id":"PROD_0039","amount":142.43,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-23T12:00:00.000Z"}} +{"return_id":"RET_00053","order_id":"ORD_000264","customer_id":"CUST_0072","product_id":"PROD_0094","amount":328.05,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-24T12:00:00.000Z"}} +{"return_id":"RET_00054","order_id":"ORD_000269","customer_id":"CUST_0157","product_id":"PROD_0049","amount":176.18,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-25T12:00:00.000Z"}} +{"return_id":"RET_00055","order_id":"ORD_000274","customer_id":"CUST_0042","product_id":"PROD_0004","amount":24.3,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-26T12:00:00.000Z"}} +{"return_id":"RET_00056","order_id":"ORD_000279","customer_id":"CUST_0127","product_id":"PROD_0059","amount":209.93,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-27T12:00:00.000Z"}} +{"return_id":"RET_00057","order_id":"ORD_000284","customer_id":"CUST_0012","product_id":"PROD_0014","amount":58.05,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-28T12:00:00.000Z"}} +{"return_id":"RET_00058","order_id":"ORD_000289","customer_id":"CUST_0097","product_id":"PROD_0069","amount":243.68,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-29T12:00:00.000Z"}} +{"return_id":"RET_00059","order_id":"ORD_000294","customer_id":"CUST_0182","product_id":"PROD_0024","amount":91.8,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-30T12:00:00.000Z"}} +{"return_id":"RET_00060","order_id":"ORD_000299","customer_id":"CUST_0067","product_id":"PROD_0079","amount":277.43,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-31T12:00:00.000Z"}} +{"return_id":"RET_00061","order_id":"ORD_000304","customer_id":"CUST_0152","product_id":"PROD_0034","amount":125.55,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"return_id":"RET_00062","order_id":"ORD_000309","customer_id":"CUST_0037","product_id":"PROD_0089","amount":311.18,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-03T12:00:00.000Z"}} +{"return_id":"RET_00063","order_id":"ORD_000314","customer_id":"CUST_0122","product_id":"PROD_0044","amount":159.3,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-04T12:00:00.000Z"}} +{"return_id":"RET_00064","order_id":"ORD_000319","customer_id":"CUST_0007","product_id":"PROD_0099","amount":344.93,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-05T12:00:00.000Z"}} +{"return_id":"RET_00065","order_id":"ORD_000324","customer_id":"CUST_0092","product_id":"PROD_0054","amount":193.05,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-06T12:00:00.000Z"}} +{"return_id":"RET_00066","order_id":"ORD_000329","customer_id":"CUST_0177","product_id":"PROD_0009","amount":41.18,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-07T12:00:00.000Z"}} +{"return_id":"RET_00067","order_id":"ORD_000334","customer_id":"CUST_0062","product_id":"PROD_0064","amount":226.8,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-08T12:00:00.000Z"}} +{"return_id":"RET_00068","order_id":"ORD_000339","customer_id":"CUST_0147","product_id":"PROD_0019","amount":74.93,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-09T12:00:00.000Z"}} +{"return_id":"RET_00069","order_id":"ORD_000344","customer_id":"CUST_0032","product_id":"PROD_0074","amount":260.55,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-10T12:00:00.000Z"}} +{"return_id":"RET_00070","order_id":"ORD_000349","customer_id":"CUST_0117","product_id":"PROD_0029","amount":108.68,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-11T12:00:00.000Z"}} +{"return_id":"RET_00071","order_id":"ORD_000354","customer_id":"CUST_0002","product_id":"PROD_0084","amount":294.3,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"return_id":"RET_00072","order_id":"ORD_000359","customer_id":"CUST_0087","product_id":"PROD_0039","amount":142.43,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-13T12:00:00.000Z"}} +{"return_id":"RET_00073","order_id":"ORD_000364","customer_id":"CUST_0172","product_id":"PROD_0094","amount":328.05,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-14T12:00:00.000Z"}} +{"return_id":"RET_00074","order_id":"ORD_000369","customer_id":"CUST_0057","product_id":"PROD_0049","amount":176.18,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-15T12:00:00.000Z"}} +{"return_id":"RET_00075","order_id":"ORD_000374","customer_id":"CUST_0142","product_id":"PROD_0004","amount":24.3,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-16T12:00:00.000Z"}} +{"return_id":"RET_00076","order_id":"ORD_000379","customer_id":"CUST_0027","product_id":"PROD_0059","amount":209.93,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-17T12:00:00.000Z"}} +{"return_id":"RET_00077","order_id":"ORD_000384","customer_id":"CUST_0112","product_id":"PROD_0014","amount":58.05,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-18T12:00:00.000Z"}} +{"return_id":"RET_00078","order_id":"ORD_000389","customer_id":"CUST_0197","product_id":"PROD_0069","amount":243.68,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-19T12:00:00.000Z"}} +{"return_id":"RET_00079","order_id":"ORD_000394","customer_id":"CUST_0082","product_id":"PROD_0024","amount":91.8,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-20T12:00:00.000Z"}} +{"return_id":"RET_00080","order_id":"ORD_000399","customer_id":"CUST_0167","product_id":"PROD_0079","amount":277.43,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-21T12:00:00.000Z"}} +{"return_id":"RET_00081","order_id":"ORD_000404","customer_id":"CUST_0052","product_id":"PROD_0034","amount":125.55,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"return_id":"RET_00082","order_id":"ORD_000409","customer_id":"CUST_0137","product_id":"PROD_0089","amount":311.18,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-23T12:00:00.000Z"}} +{"return_id":"RET_00083","order_id":"ORD_000414","customer_id":"CUST_0022","product_id":"PROD_0044","amount":159.3,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-24T12:00:00.000Z"}} +{"return_id":"RET_00084","order_id":"ORD_000419","customer_id":"CUST_0107","product_id":"PROD_0099","amount":344.93,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-25T12:00:00.000Z"}} +{"return_id":"RET_00085","order_id":"ORD_000424","customer_id":"CUST_0192","product_id":"PROD_0054","amount":193.05,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-26T12:00:00.000Z"}} +{"return_id":"RET_00086","order_id":"ORD_000429","customer_id":"CUST_0077","product_id":"PROD_0009","amount":41.18,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-27T12:00:00.000Z"}} +{"return_id":"RET_00087","order_id":"ORD_000434","customer_id":"CUST_0162","product_id":"PROD_0064","amount":226.8,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-28T12:00:00.000Z"}} +{"return_id":"RET_00088","order_id":"ORD_000439","customer_id":"CUST_0047","product_id":"PROD_0019","amount":74.93,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-29T12:00:00.000Z"}} +{"return_id":"RET_00089","order_id":"ORD_000444","customer_id":"CUST_0132","product_id":"PROD_0074","amount":260.55,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-30T12:00:00.000Z"}} +{"return_id":"RET_00090","order_id":"ORD_000449","customer_id":"CUST_0017","product_id":"PROD_0029","amount":108.68,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-31T12:00:00.000Z"}} +{"return_id":"RET_00091","order_id":"ORD_000454","customer_id":"CUST_0102","product_id":"PROD_0084","amount":294.3,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-02T12:00:00.000Z"}} +{"return_id":"RET_00092","order_id":"ORD_000459","customer_id":"CUST_0187","product_id":"PROD_0039","amount":142.43,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-03T12:00:00.000Z"}} +{"return_id":"RET_00093","order_id":"ORD_000464","customer_id":"CUST_0072","product_id":"PROD_0094","amount":328.05,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-04T12:00:00.000Z"}} +{"return_id":"RET_00094","order_id":"ORD_000469","customer_id":"CUST_0157","product_id":"PROD_0049","amount":176.18,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-05T12:00:00.000Z"}} +{"return_id":"RET_00095","order_id":"ORD_000474","customer_id":"CUST_0042","product_id":"PROD_0004","amount":24.3,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-06T12:00:00.000Z"}} +{"return_id":"RET_00096","order_id":"ORD_000479","customer_id":"CUST_0127","product_id":"PROD_0059","amount":209.93,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-07T12:00:00.000Z"}} +{"return_id":"RET_00097","order_id":"ORD_000484","customer_id":"CUST_0012","product_id":"PROD_0014","amount":58.05,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-08T12:00:00.000Z"}} +{"return_id":"RET_00098","order_id":"ORD_000489","customer_id":"CUST_0097","product_id":"PROD_0069","amount":243.68,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-09T12:00:00.000Z"}} +{"return_id":"RET_00099","order_id":"ORD_000494","customer_id":"CUST_0182","product_id":"PROD_0024","amount":91.8,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-10T12:00:00.000Z"}} +{"return_id":"RET_00100","order_id":"ORD_000499","customer_id":"CUST_0067","product_id":"PROD_0079","amount":277.43,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-11T12:00:00.000Z"}} +{"return_id":"RET_00101","order_id":"ORD_000504","customer_id":"CUST_0152","product_id":"PROD_0034","amount":125.55,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-12T12:00:00.000Z"}} +{"return_id":"RET_00102","order_id":"ORD_000509","customer_id":"CUST_0037","product_id":"PROD_0089","amount":311.18,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-13T12:00:00.000Z"}} +{"return_id":"RET_00103","order_id":"ORD_000514","customer_id":"CUST_0122","product_id":"PROD_0044","amount":159.3,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-14T12:00:00.000Z"}} +{"return_id":"RET_00104","order_id":"ORD_000519","customer_id":"CUST_0007","product_id":"PROD_0099","amount":344.93,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-15T12:00:00.000Z"}} +{"return_id":"RET_00105","order_id":"ORD_000524","customer_id":"CUST_0092","product_id":"PROD_0054","amount":193.05,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-16T12:00:00.000Z"}} +{"return_id":"RET_00106","order_id":"ORD_000529","customer_id":"CUST_0177","product_id":"PROD_0009","amount":41.18,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-17T12:00:00.000Z"}} +{"return_id":"RET_00107","order_id":"ORD_000534","customer_id":"CUST_0062","product_id":"PROD_0064","amount":226.8,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-18T12:00:00.000Z"}} +{"return_id":"RET_00108","order_id":"ORD_000539","customer_id":"CUST_0147","product_id":"PROD_0019","amount":74.93,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-19T12:00:00.000Z"}} +{"return_id":"RET_00109","order_id":"ORD_000544","customer_id":"CUST_0032","product_id":"PROD_0074","amount":260.55,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-20T12:00:00.000Z"}} +{"return_id":"RET_00110","order_id":"ORD_000549","customer_id":"CUST_0117","product_id":"PROD_0029","amount":108.68,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-21T12:00:00.000Z"}} +{"return_id":"RET_00111","order_id":"ORD_000554","customer_id":"CUST_0002","product_id":"PROD_0084","amount":294.3,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-22T12:00:00.000Z"}} +{"return_id":"RET_00112","order_id":"ORD_000559","customer_id":"CUST_0087","product_id":"PROD_0039","amount":142.43,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-23T12:00:00.000Z"}} +{"return_id":"RET_00113","order_id":"ORD_000564","customer_id":"CUST_0172","product_id":"PROD_0094","amount":328.05,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-24T12:00:00.000Z"}} +{"return_id":"RET_00114","order_id":"ORD_000569","customer_id":"CUST_0057","product_id":"PROD_0049","amount":176.18,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-25T12:00:00.000Z"}} +{"return_id":"RET_00115","order_id":"ORD_000574","customer_id":"CUST_0142","product_id":"PROD_0004","amount":24.3,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-26T12:00:00.000Z"}} +{"return_id":"RET_00116","order_id":"ORD_000579","customer_id":"CUST_0027","product_id":"PROD_0059","amount":209.93,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-27T12:00:00.000Z"}} +{"return_id":"RET_00117","order_id":"ORD_000584","customer_id":"CUST_0112","product_id":"PROD_0014","amount":58.05,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-28T12:00:00.000Z"}} +{"return_id":"RET_00118","order_id":"ORD_000589","customer_id":"CUST_0197","product_id":"PROD_0069","amount":243.68,"reason":"damaged","status":"requested","created_at":{"$date":"2025-03-29T12:00:00.000Z"}} +{"return_id":"RET_00119","order_id":"ORD_000594","customer_id":"CUST_0082","product_id":"PROD_0024","amount":91.8,"reason":"wrong_item","status":"approved","created_at":{"$date":"2025-03-30T12:00:00.000Z"}} +{"return_id":"RET_00120","order_id":"ORD_000599","customer_id":"CUST_0167","product_id":"PROD_0079","amount":277.43,"reason":"changed_mind","status":"refunded","created_at":{"$date":"2025-03-31T12:00:00.000Z"}} diff --git a/scenarios/ecommerce-advanced/data/collections/stream_orders.jsonl b/scenarios/ecommerce-advanced/data/collections/stream_orders.jsonl new file mode 100644 index 0000000..df68fd8 --- /dev/null +++ b/scenarios/ecommerce-advanced/data/collections/stream_orders.jsonl @@ -0,0 +1,2 @@ +{"order_id":"STREAM_BASE_001","customer_id":"CUST_0001","status":"pending","total_amount":25,"version":1,"updated_at":{"$date":"2025-03-31T20:00:00.000Z"}} +{"order_id":"STREAM_BASE_002","customer_id":"CUST_0002","status":"confirmed","total_amount":40,"version":1,"updated_at":{"$date":"2025-03-31T21:00:00.000Z"}} diff --git a/scenarios/ecommerce-advanced/data/indexes.json b/scenarios/ecommerce-advanced/data/indexes.json new file mode 100644 index 0000000..6775548 --- /dev/null +++ b/scenarios/ecommerce-advanced/data/indexes.json @@ -0,0 +1,138 @@ +{ + "customers": [ + { + "name": "customer_id_1", + "key": { + "customer_id": 1 + }, + "unique": true + }, + { + "name": "region_1_tier_1", + "key": { + "region": 1, + "tier": 1 + } + } + ], + "products": [ + { + "name": "product_id_1", + "key": { + "product_id": 1 + }, + "unique": true + }, + { + "name": "category_1_price_1", + "key": { + "category": 1, + "price": 1 + } + }, + { + "name": "tags_1", + "key": { + "tags": 1 + } + } + ], + "inventory": [ + { + "name": "product_id_1_warehouse_id_1", + "key": { + "product_id": 1, + "warehouse_id": 1 + }, + "unique": true + } + ], + "orders": [ + { + "name": "order_id_1", + "key": { + "order_id": 1 + }, + "unique": true + }, + { + "name": "customer_id_1_placed_at_-1", + "key": { + "customer_id": 1, + "placed_at": -1 + } + }, + { + "name": "status_1_placed_at_-1", + "key": { + "status": 1, + "placed_at": -1 + } + } + ], + "order_items": [ + { + "name": "order_id_1_line_number_1", + "key": { + "order_id": 1, + "line_number": 1 + }, + "unique": true + }, + { + "name": "product_id_1", + "key": { + "product_id": 1 + } + } + ], + "payments": [ + { + "name": "payment_id_1", + "key": { + "payment_id": 1 + }, + "unique": true + }, + { + "name": "order_id_1", + "key": { + "order_id": 1 + }, + "unique": true + } + ], + "returns": [ + { + "name": "return_id_1", + "key": { + "return_id": 1 + }, + "unique": true + }, + { + "name": "order_id_1", + "key": { + "order_id": 1 + } + } + ], + "daily_sales": [ + { + "name": "sales_date_1", + "key": { + "sales_date": 1 + }, + "unique": true + } + ], + "stream_orders": [ + { + "name": "order_id_1", + "key": { + "order_id": 1 + }, + "unique": true + } + ] +} diff --git a/scenarios/ecommerce-advanced/data/manifest.json b/scenarios/ecommerce-advanced/data/manifest.json new file mode 100644 index 0000000..361ac39 --- /dev/null +++ b/scenarios/ecommerce-advanced/data/manifest.json @@ -0,0 +1,132 @@ +{ + "dataset": "ecommerce-advanced", + "version": "1.0.0", + "generator": "scripts/generate.mjs", + "seed": 20260901, + "generated_at": "2026-09-01T00:00:00.000Z", + "data_epoch": "2025-01-01T00:00:00.000Z", + "date_encoding": "Extended JSON {$date: ISO-8601}", + "files": [ + { + "path": "cases/aggregations.json", + "records": 7, + "bytes": 1878, + "sha256": "bd809aa4546c0a01c0dfb55c2322fb05f993a03a66390c92e603aef13c7c3e24" + }, + { + "path": "cases/change-streams.json", + "records": 4, + "bytes": 1369, + "sha256": "0ff6ba30f62063a73d7e8356a2636c5f34f486eb52300bf8a819be456e017e73" + }, + { + "path": "cases/transactions.json", + "records": 4, + "bytes": 1548, + "sha256": "21bb20e9494a7ef7e53f32dc94fe7cd877ff23d8f3cf33efb0aee8ee5a020f9a" + }, + { + "path": "collections/customers.jsonl", + "records": 200, + "bytes": 53746, + "sha256": "d0246734a371912cba5659f1fbaa3e3f0710f339366cc321d54390e894f31b03" + }, + { + "path": "collections/daily_sales.jsonl", + "records": 84, + "bytes": 11451, + "sha256": "a0182d180a190188377233f9cd72bc08c3b2d47ccef70c44eacf111e0e3d1240" + }, + { + "path": "collections/inventory.jsonl", + "records": 300, + "bytes": 59262, + "sha256": "1749d8a85889ba668b3e78c8ae2fd33f5f7dc12c08dc7a98685b5cb95474b8d3" + }, + { + "path": "collections/order_items.jsonl", + "records": 6000, + "bytes": 1011660, + "sha256": "6f6ee312a1be47d0c155f62786904a19dc2e9243c27e00da2e6646c036221252" + }, + { + "path": "collections/orders.jsonl", + "records": 2000, + "bytes": 619892, + "sha256": "4587c12bade0e0f44ea961017cb2f7595fee1a2d2796bd9447f17c46c69545db" + }, + { + "path": "collections/payments.jsonl", + "records": 2000, + "bytes": 405495, + "sha256": "a8b6d8593db4dd58ccd8f892a82593bd43b36b70562f6902846672d32fed193f" + }, + { + "path": "collections/products.jsonl", + "records": 100, + "bytes": 31926, + "sha256": "49ac1414a7ec31c71e2dcce2a0be36a6b2e6dc28cf9bc7cabe9a0e3d2cbf45cd" + }, + { + "path": "collections/returns.jsonl", + "records": 120, + "bytes": 25020, + "sha256": "6da20ad66678f69926f1949bde34a51fbec5b71e135b2a53a645736ef4bc8173" + }, + { + "path": "collections/stream_orders.jsonl", + "records": 2, + "bytes": 314, + "sha256": "209cf10c6156021ecd8ba3415d1f921c42baae6a12a600f749767f87ae33fba4" + }, + { + "path": "indexes.json", + "records": 1, + "bytes": 2105, + "sha256": "43097d960dd1e70eac9374f05bd57b14ac089c056b29724bdcf8608004b18c60" + } + ], + "collection_counts": { + "customers": 200, + "products": 100, + "inventory": 300, + "orders": 2000, + "order_items": 6000, + "payments": 2000, + "returns": 120, + "daily_sales": 84, + "stream_orders": 2 + }, + "test_case_counts": { + "transactions": 4, + "change_streams": 4, + "aggregations": 7 + }, + "empty_output_collections": [ + "customer_summaries", + "stream_events" + ], + "transaction_fixture_products": { + "commit_purchase": "PROD_0001:WH_EAST", + "concurrent_last_unit": "PROD_0002:WH_EAST", + "insufficient_stock": "PROD_0003:WH_EAST", + "forced_rollback": "PROD_0004:WH_EAST" + }, + "daily_sales": { + "calendar_days": 90, + "stored_days": 84, + "missing_day_offsets": [ + 7, + 19, + 36, + 57, + 78, + 85 + ], + "null_revenue_day_offsets": [ + 14, + 43, + 69 + ] + } +} diff --git a/scenarios/ecommerce-advanced/package-lock.json b/scenarios/ecommerce-advanced/package-lock.json new file mode 100644 index 0000000..009f50c --- /dev/null +++ b/scenarios/ecommerce-advanced/package-lock.json @@ -0,0 +1,162 @@ +{ + "name": "documentdb-ecommerce-advanced-data", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "documentdb-ecommerce-advanced-data", + "version": "1.0.0", + "dependencies": { + "mongodb": "6.20.0" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.5.0.tgz", + "integrity": "sha512-Hk1SKJCMcCos38+vqDnZzlIo4XRj9yCGzYkjB4LcqpeXRIYfia1UWTz+VrueLxoU+uSRJzgkufxoRZg8gi52YA==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/bson": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", + "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT" + }, + "node_modules/mongodb": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.20.0.tgz", + "integrity": "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.3.0", + "bson": "^6.10.4", + "mongodb-connection-string-url": "^3.0.2" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.3.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^14.1.0 || ^13.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/scenarios/ecommerce-advanced/package.json b/scenarios/ecommerce-advanced/package.json new file mode 100644 index 0000000..7b4d419 --- /dev/null +++ b/scenarios/ecommerce-advanced/package.json @@ -0,0 +1,17 @@ +{ + "name": "documentdb-ecommerce-advanced-data", + "version": "1.0.0", + "private": true, + "description": "Deterministic ecommerce fixtures for transactions, change streams, and advanced MQL compatibility tests", + "type": "module", + "scripts": { + "generate": "node scripts/generate.mjs", + "validate": "node scripts/validate.mjs", + "check-determinism": "bash scripts/check-determinism.sh", + "load": "node scripts/load.mjs", + "test": "npm run validate && npm run check-determinism" + }, + "dependencies": { + "mongodb": "6.20.0" + } +} diff --git a/scenarios/ecommerce-advanced/scripts/check-determinism.sh b/scenarios/ecommerce-advanced/scripts/check-determinism.sh new file mode 100755 index 0000000..35ca60d --- /dev/null +++ b/scenarios/ecommerce-advanced/scripts/check-determinism.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# Generate the dataset twice in clean directories and require byte-identical +# output. A deterministic fixture that cannot reproduce itself is not a test +# fixture. + +set -euo pipefail + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT="$(cd "$HERE/.." && pwd)" +TMP="$ROOT/.tmp" + +rm -rf "$TMP" +mkdir -p "$TMP/one" "$TMP/two" +trap 'rm -rf "$TMP"' EXIT + +node "$HERE/generate.mjs" --output "$TMP/one" >/dev/null +node "$HERE/generate.mjs" --output "$TMP/two" >/dev/null + +diff -ru "$TMP/one" "$TMP/two" +echo "PASS: two clean generations are byte-identical" + diff --git a/scenarios/ecommerce-advanced/scripts/generate.mjs b/scenarios/ecommerce-advanced/scripts/generate.mjs new file mode 100644 index 0000000..53589b2 --- /dev/null +++ b/scenarios/ecommerce-advanced/scripts/generate.mjs @@ -0,0 +1,563 @@ +import { createHash } from "node:crypto"; +import { + mkdir, + readdir, + rm, + writeFile +} from "node:fs/promises"; +import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +const here = dirname(fileURLToPath(import.meta.url)); +const scenarioRoot = resolve(here, ".."); + +const outputArgument = process.argv.indexOf("--output"); +const outputRoot = + outputArgument >= 0 + ? resolve(process.argv[outputArgument + 1]) + : join(scenarioRoot, "data"); + +const DATASET_VERSION = "1.0.0"; +const SEED = 20260901; +const GENERATED_AT = "2026-09-01T00:00:00.000Z"; +const DATA_EPOCH = "2025-01-01T00:00:00.000Z"; +const DAY_MS = 86_400_000; + +const collectionsRoot = join(outputRoot, "collections"); +const casesRoot = join(outputRoot, "cases"); + +function dateValue(day, hour = 0) { + return { + $date: new Date( + Date.parse(DATA_EPOCH) + day * DAY_MS + hour * 3_600_000 + ).toISOString() + }; +} + +function round2(value) { + return Math.round((value + Number.EPSILON) * 100) / 100; +} + +function padded(prefix, value, width = 4) { + return `${prefix}_${String(value).padStart(width, "0")}`; +} + +function stableJson(value) { + return `${JSON.stringify(value, null, 2)}\n`; +} + +function jsonLine(value) { + return `${JSON.stringify(value)}\n`; +} + +function sha256(content) { + return createHash("sha256").update(content).digest("hex"); +} + +async function writeJsonl(relativePath, rows) { + const content = rows.map(jsonLine).join(""); + const path = join(outputRoot, relativePath); + await mkdir(dirname(path), { recursive: true }); + await writeFile(path, content); + return { + path: relativePath, + records: rows.length, + bytes: Buffer.byteLength(content), + sha256: sha256(content) + }; +} + +async function writeJson(relativePath, value) { + const content = stableJson(value); + const path = join(outputRoot, relativePath); + await mkdir(dirname(path), { recursive: true }); + await writeFile(path, content); + return { + path: relativePath, + records: Array.isArray(value) ? value.length : 1, + bytes: Buffer.byteLength(content), + sha256: sha256(content) + }; +} + +await rm(outputRoot, { recursive: true, force: true }); +await mkdir(collectionsRoot, { recursive: true }); +await mkdir(casesRoot, { recursive: true }); + +const regions = ["amer", "emea", "apac", "canada"]; +const cities = ["Seattle", "Portland", "Austin", "Toronto", "London", "Tokyo"]; +const tiers = ["bronze", "silver", "gold", "platinum"]; +const categories = ["electronics", "home", "sports", "books", "outdoor"]; +const brands = ["Northwind", "Contoso", "Fabrikam", "Adventure", "Litware"]; +const statuses = ["pending", "confirmed", "shipped", "delivered", "cancelled"]; +const channels = ["web", "mobile", "marketplace"]; +const paymentMethods = ["card", "bank_transfer", "wallet"]; +const warehouses = ["WH_EAST", "WH_WEST", "WH_CENTRAL"]; + +const customers = Array.from({ length: 200 }, (_, index) => { + const number = index + 1; + return { + customer_id: padded("CUST", number), + name: `Customer ${number}`, + email: `customer${number}@example.test`, + tier: tiers[index % tiers.length], + region: regions[index % regions.length], + address: { + city: cities[index % cities.length], + country: index % 7 === 0 ? "CA" : "US", + postal_code: String(10000 + ((index * 7919) % 89999)) + }, + segments: [ + index % 3 === 0 ? "frequent" : "standard", + index % 5 === 0 ? "promotion" : "full-price" + ], + created_at: dateValue(-(365 + (index % 730))) + }; +}); + +const products = Array.from({ length: 100 }, (_, index) => { + const number = index + 1; + const price = round2(12 + number * 3.75); + return { + product_id: padded("PROD", number), + name: `Product ${number}`, + category: categories[index % categories.length], + brand: brands[index % brands.length], + price, + cost: round2(price * (0.42 + (index % 4) * 0.06)), + active: index % 17 !== 0, + tags: [ + categories[index % categories.length], + index % 2 === 0 ? "featured" : "standard", + index % 7 === 0 ? "seasonal" : "evergreen" + ], + attributes: { + color: ["black", "blue", "green", "red"][index % 4], + size: ["small", "medium", "large"][index % 3], + weight_kg: round2(0.25 + (index % 12) * 0.18) + }, + ratings: { + average: round2(3.2 + (index % 18) / 10), + count: 15 + ((index * 37) % 480) + }, + created_at: dateValue(-(180 + (index % 365))) + }; +}); + +const inventory = []; +for (let productIndex = 0; productIndex < products.length; productIndex += 1) { + for (let warehouseIndex = 0; warehouseIndex < warehouses.length; warehouseIndex += 1) { + const productNumber = productIndex + 1; + let quantity = 20 + ((productNumber * 17 + warehouseIndex * 23) % 180); + + // Transaction edge cases all target WH_EAST. + if (warehouseIndex === 0 && productNumber === 1) quantity = 10; + if (warehouseIndex === 0 && productNumber === 2) quantity = 1; + if (warehouseIndex === 0 && productNumber === 3) quantity = 0; + if (warehouseIndex === 0 && productNumber === 4) quantity = 25; + + inventory.push({ + inventory_id: `${padded("PROD", productNumber)}:${warehouses[warehouseIndex]}`, + product_id: padded("PROD", productNumber), + warehouse_id: warehouses[warehouseIndex], + quantity, + reserved: quantity === 0 ? 0 : Math.min(quantity, (productNumber + warehouseIndex) % 6), + reorder_point: 12 + (productNumber % 18), + version: 1, + updated_at: dateValue(89, warehouseIndex) + }); + } +} + +const orders = []; +const orderItems = []; +const payments = []; + +for (let orderIndex = 0; orderIndex < 2000; orderIndex += 1) { + const orderNumber = orderIndex + 1; + const orderId = padded("ORD", orderNumber, 6); + const customerNumber = ((orderIndex * 17) % customers.length) + 1; + const itemCount = (orderIndex % 5) + 1; + let total = 0; + + for (let itemIndex = 0; itemIndex < itemCount; itemIndex += 1) { + const productNumber = + ((orderIndex * 11 + itemIndex * 7) % products.length) + 1; + const product = products[productNumber - 1]; + const quantity = (itemIndex % 3) + 1; + const discountRate = [0, 0, 0.05, 0.1, 0.15][ + (orderIndex + itemIndex) % 5 + ]; + const lineTotal = round2(product.price * quantity * (1 - discountRate)); + total = round2(total + lineTotal); + + orderItems.push({ + order_item_id: `${orderId}:${itemIndex + 1}`, + order_id: orderId, + line_number: itemIndex + 1, + product_id: product.product_id, + quantity, + unit_price: product.price, + discount_rate: discountRate, + line_total: lineTotal + }); + } + + const status = statuses[orderIndex % statuses.length]; + const placedDay = orderIndex % 90; + orders.push({ + order_id: orderId, + customer_id: padded("CUST", customerNumber), + status, + region: regions[orderIndex % regions.length], + channel: channels[orderIndex % channels.length], + currency: "USD", + item_count: itemCount, + total_amount: total, + placed_at: dateValue(placedDay, orderIndex % 20), + updated_at: dateValue(placedDay, (orderIndex % 20) + 1), + shipping: { + city: cities[orderIndex % cities.length], + method: ["standard", "express", "pickup"][orderIndex % 3] + } + }); + + payments.push({ + payment_id: padded("PAY", orderNumber, 6), + order_id: orderId, + customer_id: padded("CUST", customerNumber), + amount: total, + currency: "USD", + method: paymentMethods[orderIndex % paymentMethods.length], + status: status === "cancelled" ? "reversed" : "captured", + processed_at: dateValue(placedDay, (orderIndex % 20) + 2) + }); +} + +const deliveredOrders = orders.filter((order) => order.status === "delivered"); +const returns = deliveredOrders.slice(0, 120).map((order, index) => { + const firstItem = orderItems.find( + (item) => item.order_id === order.order_id && item.line_number === 1 + ); + return { + return_id: padded("RET", index + 1, 5), + order_id: order.order_id, + customer_id: order.customer_id, + product_id: firstItem.product_id, + amount: firstItem.line_total, + reason: ["damaged", "wrong_item", "changed_mind"][index % 3], + status: ["requested", "approved", "refunded"][index % 3], + created_at: dateValue(60 + (index % 30), 12) + }; +}); + +const missingSalesDays = new Set([7, 19, 36, 57, 78, 85]); +const nullRevenueDays = new Set([14, 43, 69]); +const dailySales = []; + +for (let day = 0; day < 90; day += 1) { + if (missingSalesDays.has(day)) continue; + // Revenue is formula-derived rather than queried, keeping generation + // independent of a database engine. + const revenue = round2( + orders + .filter((_, orderIndex) => orderIndex % 90 === day) + .reduce((sum, order) => sum + order.total_amount, 0) + ); + dailySales.push({ + sales_date: dateValue(day), + revenue: nullRevenueDays.has(day) ? null : revenue, + order_count: orders.filter((_, orderIndex) => orderIndex % 90 === day).length, + units: orderItems + .filter((item) => { + const orderNumber = Number(item.order_id.slice(4)); + return (orderNumber - 1) % 90 === day; + }) + .reduce((sum, item) => sum + item.quantity, 0), + promotion_active: day % 14 < 4, + note: nullRevenueDays.has(day) ? "intentional null for $fill" : null + }); +} + +const streamOrders = [ + { + order_id: "STREAM_BASE_001", + customer_id: "CUST_0001", + status: "pending", + total_amount: 25, + version: 1, + updated_at: dateValue(89, 20) + }, + { + order_id: "STREAM_BASE_002", + customer_id: "CUST_0002", + status: "confirmed", + total_amount: 40, + version: 1, + updated_at: dateValue(89, 21) + } +]; + +const transactionCases = [ + { + case_id: "commit-purchase", + description: "Insert order, item, and payment; decrement stock atomically.", + product_id: "PROD_0001", + warehouse_id: "WH_EAST", + quantity: 2, + initial_quantity: 10, + expected_quantity: 8, + order_id: "TXN_ORDER_COMMIT", + payment_id: "TXN_PAYMENT_COMMIT", + expected: "commit" + }, + { + case_id: "forced-rollback", + description: "Throw after payment insert; all writes and stock update roll back.", + product_id: "PROD_0004", + warehouse_id: "WH_EAST", + quantity: 3, + initial_quantity: 25, + expected_quantity: 25, + order_id: "TXN_ORDER_ROLLBACK", + payment_id: "TXN_PAYMENT_ROLLBACK", + failure_after: "payment_insert", + expected: "rollback" + }, + { + case_id: "insufficient-stock", + description: "Reject purchase and leave no order/payment when inventory is zero.", + product_id: "PROD_0003", + warehouse_id: "WH_EAST", + quantity: 1, + initial_quantity: 0, + expected_quantity: 0, + order_id: "TXN_ORDER_NO_STOCK", + payment_id: "TXN_PAYMENT_NO_STOCK", + expected: "rollback" + }, + { + case_id: "concurrent-last-unit", + description: "Two concurrent purchases target the last unit; exactly one commits.", + product_id: "PROD_0002", + warehouse_id: "WH_EAST", + quantity: 1, + initial_quantity: 1, + expected_quantity: 0, + competing_order_ids: ["TXN_ORDER_RACE_A", "TXN_ORDER_RACE_B"], + expected_commits: 1 + } +]; + +const changeStreamCases = [ + { + sequence: 1, + operation: "insert", + collection: "stream_orders", + document: { + order_id: "STREAM_NEW_001", + customer_id: "CUST_0003", + status: "pending", + total_amount: 55, + version: 1, + updated_at: dateValue(89, 22) + }, + expected_operation_type: "insert" + }, + { + sequence: 2, + operation: "update", + collection: "stream_orders", + filter: { order_id: "STREAM_BASE_001" }, + update: { + $set: { + status: "shipped", + version: 2, + updated_at: dateValue(89, 23) + } + }, + expected_operation_type: "update" + }, + { + sequence: 3, + operation: "replace", + collection: "stream_orders", + filter: { order_id: "STREAM_BASE_002" }, + replacement: { + order_id: "STREAM_BASE_002", + customer_id: "CUST_0002", + status: "delivered", + total_amount: 40, + version: 2, + updated_at: dateValue(89, 23) + }, + expected_operation_type: "replace" + }, + { + sequence: 4, + operation: "delete", + collection: "stream_orders", + filter: { order_id: "STREAM_NEW_001" }, + expected_operation_type: "delete" + } +]; + +const aggregationCases = [ + { + case_id: "facet-order-dashboard", + purpose: "$facet with status counts, revenue totals, and top customers.", + collections: ["orders"], + stages: ["$match", "$facet", "$group", "$sort", "$limit"] + }, + { + case_id: "pipeline-lookup-order-items", + purpose: "Correlated $lookup using let and $expr.", + collections: ["orders", "order_items"], + stages: ["$match", "$lookup", "$expr", "$project"] + }, + { + case_id: "window-customer-running-total", + purpose: "$setWindowFields partitioned by customer and sorted by date.", + collections: ["orders"], + stages: ["$setWindowFields", "$sum", "$documentNumber"] + }, + { + case_id: "daily-sales-densify-fill", + purpose: "$densify missing days and $fill intentional null revenue values.", + collections: ["daily_sales"], + stages: ["$densify", "$fill", "$dateTrunc"] + }, + { + case_id: "order-return-union", + purpose: "$unionWith orders and returns into one activity stream.", + collections: ["orders", "returns"], + stages: ["$unionWith", "$project", "$sort", "$limit"] + }, + { + case_id: "product-price-buckets", + purpose: "$bucket price bands and aggregate product tag arrays.", + collections: ["products"], + stages: ["$bucket", "$map", "$filter", "$reduce", "$sortArray"] + }, + { + case_id: "materialize-customer-summary", + purpose: "$merge a repeatable customer summary into a target collection.", + collections: ["orders", "customer_summaries"], + stages: ["$group", "$set", "$merge"] + } +]; + +const indexes = { + customers: [ + { name: "customer_id_1", key: { customer_id: 1 }, unique: true }, + { name: "region_1_tier_1", key: { region: 1, tier: 1 } } + ], + products: [ + { name: "product_id_1", key: { product_id: 1 }, unique: true }, + { name: "category_1_price_1", key: { category: 1, price: 1 } }, + { name: "tags_1", key: { tags: 1 } } + ], + inventory: [ + { + name: "product_id_1_warehouse_id_1", + key: { product_id: 1, warehouse_id: 1 }, + unique: true + } + ], + orders: [ + { name: "order_id_1", key: { order_id: 1 }, unique: true }, + { + name: "customer_id_1_placed_at_-1", + key: { customer_id: 1, placed_at: -1 } + }, + { name: "status_1_placed_at_-1", key: { status: 1, placed_at: -1 } } + ], + order_items: [ + { + name: "order_id_1_line_number_1", + key: { order_id: 1, line_number: 1 }, + unique: true + }, + { name: "product_id_1", key: { product_id: 1 } } + ], + payments: [ + { name: "payment_id_1", key: { payment_id: 1 }, unique: true }, + { name: "order_id_1", key: { order_id: 1 }, unique: true } + ], + returns: [ + { name: "return_id_1", key: { return_id: 1 }, unique: true }, + { name: "order_id_1", key: { order_id: 1 } } + ], + daily_sales: [{ name: "sales_date_1", key: { sales_date: 1 }, unique: true }], + stream_orders: [ + { name: "order_id_1", key: { order_id: 1 }, unique: true } + ] +}; + +const files = []; +files.push(await writeJsonl("collections/customers.jsonl", customers)); +files.push(await writeJsonl("collections/products.jsonl", products)); +files.push(await writeJsonl("collections/inventory.jsonl", inventory)); +files.push(await writeJsonl("collections/orders.jsonl", orders)); +files.push(await writeJsonl("collections/order_items.jsonl", orderItems)); +files.push(await writeJsonl("collections/payments.jsonl", payments)); +files.push(await writeJsonl("collections/returns.jsonl", returns)); +files.push(await writeJsonl("collections/daily_sales.jsonl", dailySales)); +files.push(await writeJsonl("collections/stream_orders.jsonl", streamOrders)); +files.push(await writeJson("cases/transactions.json", transactionCases)); +files.push(await writeJson("cases/change-streams.json", changeStreamCases)); +files.push(await writeJson("cases/aggregations.json", aggregationCases)); +files.push(await writeJson("indexes.json", indexes)); + +const manifest = { + dataset: "ecommerce-advanced", + version: DATASET_VERSION, + generator: "scripts/generate.mjs", + seed: SEED, + generated_at: GENERATED_AT, + data_epoch: DATA_EPOCH, + date_encoding: "Extended JSON {$date: ISO-8601}", + files: files.sort((left, right) => left.path.localeCompare(right.path)), + collection_counts: { + customers: customers.length, + products: products.length, + inventory: inventory.length, + orders: orders.length, + order_items: orderItems.length, + payments: payments.length, + returns: returns.length, + daily_sales: dailySales.length, + stream_orders: streamOrders.length + }, + test_case_counts: { + transactions: transactionCases.length, + change_streams: changeStreamCases.length, + aggregations: aggregationCases.length + }, + empty_output_collections: ["customer_summaries", "stream_events"], + transaction_fixture_products: { + commit_purchase: "PROD_0001:WH_EAST", + concurrent_last_unit: "PROD_0002:WH_EAST", + insufficient_stock: "PROD_0003:WH_EAST", + forced_rollback: "PROD_0004:WH_EAST" + }, + daily_sales: { + calendar_days: 90, + stored_days: dailySales.length, + missing_day_offsets: [...missingSalesDays], + null_revenue_day_offsets: [...nullRevenueDays] + } +}; + +await writeFile(join(outputRoot, "manifest.json"), stableJson(manifest)); + +const totalBytes = manifest.files.reduce((sum, file) => sum + file.bytes, 0); +console.log( + JSON.stringify({ + output: outputRoot, + collections: manifest.collection_counts, + test_cases: manifest.test_case_counts, + files: manifest.files.length, + bytes: totalBytes + }) +); diff --git a/scenarios/ecommerce-advanced/scripts/load.mjs b/scenarios/ecommerce-advanced/scripts/load.mjs new file mode 100644 index 0000000..6ac97c0 --- /dev/null +++ b/scenarios/ecommerce-advanced/scripts/load.mjs @@ -0,0 +1,101 @@ +import { readFile } from "node:fs/promises"; +import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { MongoClient } from "mongodb"; + +const uri = process.env.MONGODB_URI; +if (!uri) throw new Error("MONGODB_URI is required"); + +const databaseName = process.env.MONGODB_DATABASE || "ecommerce_advanced"; +const here = dirname(fileURLToPath(import.meta.url)); +const dataRoot = resolve(here, "..", "data"); + +function reviveExtendedJson(value) { + if (Array.isArray(value)) return value.map(reviveExtendedJson); + if (value && typeof value === "object") { + if ( + Object.keys(value).length === 1 && + typeof value.$date === "string" + ) { + return new Date(value.$date); + } + return Object.fromEntries( + Object.entries(value).map(([key, nested]) => [ + key, + reviveExtendedJson(nested) + ]) + ); + } + return value; +} + +async function readJson(relativePath) { + return JSON.parse(await readFile(join(dataRoot, relativePath), "utf8")); +} + +async function readJsonl(relativePath) { + const content = await readFile(join(dataRoot, relativePath), "utf8"); + return content + .split("\n") + .filter(Boolean) + .map((line) => reviveExtendedJson(JSON.parse(line))); +} + +const manifest = await readJson("manifest.json"); +const indexes = await readJson("indexes.json"); +const client = new MongoClient(uri, { + serverSelectionTimeoutMS: 10_000, + connectTimeoutMS: 10_000, + socketTimeoutMS: 60_000, + maxPoolSize: 10 +}); + +await client.connect(); +try { + const db = client.db(databaseName); + + // Remove write-producing test outputs from earlier runs. Dataset loading must + // restore a clean baseline, not leave $merge or change-stream artifacts. + for (const collectionName of manifest.empty_output_collections || []) { + await db.collection(collectionName).drop().catch((error) => { + if (error.codeName !== "NamespaceNotFound") throw error; + }); + } + + for (const [collectionName, count] of Object.entries( + manifest.collection_counts + )) { + await db.collection(collectionName).drop().catch((error) => { + if (error.codeName !== "NamespaceNotFound") throw error; + }); + const collection = db.collection(collectionName); + const rows = await readJsonl(`collections/${collectionName}.jsonl`); + if (rows.length) { + await collection.insertMany(rows, { ordered: true }); + } + + for (const index of indexes[collectionName] || []) { + const { key, ...options } = index; + await collection.createIndex(key, options); + } + + const actual = await collection.countDocuments(); + if (actual !== count) { + throw new Error( + `${collectionName}: loaded ${actual} records, expected ${count}` + ); + } + console.log(`${collectionName}: ${actual}`); + } + + console.log( + JSON.stringify({ + status: "PASS", + database: databaseName, + dataset: manifest.dataset, + version: manifest.version + }) + ); +} finally { + await client.close(); +} diff --git a/scenarios/ecommerce-advanced/scripts/validate.mjs b/scenarios/ecommerce-advanced/scripts/validate.mjs new file mode 100644 index 0000000..d276d2e --- /dev/null +++ b/scenarios/ecommerce-advanced/scripts/validate.mjs @@ -0,0 +1,276 @@ +import { createHash } from "node:crypto"; +import { readFile } from "node:fs/promises"; +import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +const here = dirname(fileURLToPath(import.meta.url)); +const scenarioRoot = resolve(here, ".."); +const dataRoot = resolve(process.argv[2] || join(scenarioRoot, "data")); + +function sha256(content) { + return createHash("sha256").update(content).digest("hex"); +} + +async function readJson(relativePath) { + return JSON.parse(await readFile(join(dataRoot, relativePath), "utf8")); +} + +async function readJsonl(relativePath) { + const content = await readFile(join(dataRoot, relativePath), "utf8"); + return content + .split("\n") + .filter(Boolean) + .map((line, index) => { + try { + return JSON.parse(line); + } catch (error) { + throw new Error(`${relativePath}:${index + 1}: ${error.message}`); + } + }); +} + +function assert(condition, message) { + if (!condition) throw new Error(message); +} + +function unique(rows, field, collection) { + const values = rows.map((row) => row[field]); + assert( + new Set(values).size === values.length, + `${collection}.${field} contains duplicates` + ); +} + +function asDate(value, path) { + assert(value && typeof value.$date === "string", `${path} is not Extended JSON date`); + const milliseconds = Date.parse(value.$date); + assert(Number.isFinite(milliseconds), `${path} is not a valid ISO-8601 date`); + return milliseconds; +} + +const manifest = await readJson("manifest.json"); +assert( + JSON.stringify(manifest.empty_output_collections) === + JSON.stringify(["customer_summaries", "stream_events"]), + "clean output collection list changed" +); + +for (const file of manifest.files) { + const content = await readFile(join(dataRoot, file.path)); + assert(content.length === file.bytes, `${file.path}: byte count changed`); + assert(sha256(content) === file.sha256, `${file.path}: SHA-256 changed`); +} + +const customers = await readJsonl("collections/customers.jsonl"); +const products = await readJsonl("collections/products.jsonl"); +const inventory = await readJsonl("collections/inventory.jsonl"); +const orders = await readJsonl("collections/orders.jsonl"); +const orderItems = await readJsonl("collections/order_items.jsonl"); +const payments = await readJsonl("collections/payments.jsonl"); +const returns = await readJsonl("collections/returns.jsonl"); +const dailySales = await readJsonl("collections/daily_sales.jsonl"); +const streamOrders = await readJsonl("collections/stream_orders.jsonl"); +const transactionCases = await readJson("cases/transactions.json"); +const changeStreamCases = await readJson("cases/change-streams.json"); +const aggregationCases = await readJson("cases/aggregations.json"); +const indexes = await readJson("indexes.json"); + +const collections = { + customers, + products, + inventory, + orders, + order_items: orderItems, + payments, + returns, + daily_sales: dailySales, + stream_orders: streamOrders +}; + +for (const [name, expected] of Object.entries(manifest.collection_counts)) { + assert(collections[name].length === expected, `${name}: expected ${expected} records`); +} + +unique(customers, "customer_id", "customers"); +unique(products, "product_id", "products"); +unique(inventory, "inventory_id", "inventory"); +unique(orders, "order_id", "orders"); +unique(orderItems, "order_item_id", "order_items"); +unique(payments, "payment_id", "payments"); +unique(returns, "return_id", "returns"); +unique(streamOrders, "order_id", "stream_orders"); + +const customerIds = new Set(customers.map((row) => row.customer_id)); +const productIds = new Set(products.map((row) => row.product_id)); +const orderIds = new Set(orders.map((row) => row.order_id)); + +for (const order of orders) { + assert(customerIds.has(order.customer_id), `orders: missing customer ${order.customer_id}`); + asDate(order.placed_at, `${order.order_id}.placed_at`); + asDate(order.updated_at, `${order.order_id}.updated_at`); +} + +for (const item of orderItems) { + assert(orderIds.has(item.order_id), `order_items: missing order ${item.order_id}`); + assert(productIds.has(item.product_id), `order_items: missing product ${item.product_id}`); +} + +for (const payment of payments) { + assert(orderIds.has(payment.order_id), `payments: missing order ${payment.order_id}`); + assert( + customerIds.has(payment.customer_id), + `payments: missing customer ${payment.customer_id}` + ); +} + +for (const returnRow of returns) { + assert(orderIds.has(returnRow.order_id), `returns: missing order ${returnRow.order_id}`); + assert( + customerIds.has(returnRow.customer_id), + `returns: missing customer ${returnRow.customer_id}` + ); + assert( + productIds.has(returnRow.product_id), + `returns: missing product ${returnRow.product_id}` + ); +} + +for (const row of inventory) { + assert(productIds.has(row.product_id), `inventory: missing product ${row.product_id}`); + assert(row.quantity >= 0 && row.reserved >= 0, `${row.inventory_id}: negative stock`); + assert(row.reserved <= row.quantity, `${row.inventory_id}: reserved exceeds quantity`); +} + +const itemsByOrder = new Map(); +for (const item of orderItems) { + const items = itemsByOrder.get(item.order_id) || []; + items.push(item); + itemsByOrder.set(item.order_id, items); +} + +const paymentsByOrder = new Map(payments.map((payment) => [payment.order_id, payment])); +for (const order of orders) { + const items = itemsByOrder.get(order.order_id) || []; + const itemTotal = Math.round( + items.reduce((sum, item) => sum + item.line_total, 0) * 100 + ) / 100; + assert(items.length === order.item_count, `${order.order_id}: item_count mismatch`); + assert(itemTotal === order.total_amount, `${order.order_id}: total mismatch`); + assert( + paymentsByOrder.get(order.order_id)?.amount === order.total_amount, + `${order.order_id}: payment amount mismatch` + ); +} + +const inventoryById = new Map(inventory.map((row) => [row.inventory_id, row])); +for (const testCase of transactionCases) { + const key = `${testCase.product_id}:${testCase.warehouse_id}`; + const row = inventoryById.get(key); + assert(row, `${testCase.case_id}: inventory fixture ${key} missing`); + assert( + row.quantity === testCase.initial_quantity, + `${testCase.case_id}: expected initial quantity ${testCase.initial_quantity}, got ${row.quantity}` + ); +} + +assert( + transactionCases.find((testCase) => testCase.case_id === "concurrent-last-unit") + ?.expected_commits === 1, + "concurrent transaction case must require exactly one commit" +); + +assert(changeStreamCases.length === 4, "expected four change-stream operations"); +assert( + changeStreamCases.map((testCase) => testCase.operation).join(",") === + "insert,update,replace,delete", + "change-stream operation sequence changed" +); + +const salesDates = dailySales.map((row, index) => + asDate(row.sales_date, `daily_sales[${index}].sales_date`) +); +assert(new Set(salesDates).size === salesDates.length, "daily_sales dates are not unique"); +const dataEpoch = Date.parse(manifest.data_epoch); +const storedDayOffsets = new Set( + salesDates.map((date) => Math.round((date - dataEpoch) / 86_400_000)) +); +const actualMissingDayOffsets = Array.from( + { length: manifest.daily_sales.calendar_days }, + (_, day) => day +).filter((day) => !storedDayOffsets.has(day)); +assert( + JSON.stringify(actualMissingDayOffsets) === + JSON.stringify(manifest.daily_sales.missing_day_offsets), + "daily_sales missing-day offsets changed" +); +const actualNullRevenueOffsets = dailySales + .filter((row) => row.revenue === null) + .map((row) => + Math.round((Date.parse(row.sales_date.$date) - dataEpoch) / 86_400_000) + ); +assert( + JSON.stringify(actualNullRevenueOffsets) === + JSON.stringify(manifest.daily_sales.null_revenue_day_offsets), + "daily_sales null-revenue offsets changed" +); +assert( + dailySales.filter((row) => row.revenue === null).length === + manifest.daily_sales.null_revenue_day_offsets.length, + "daily_sales null-revenue fixture count changed" +); +assert( + manifest.daily_sales.calendar_days - dailySales.length === + manifest.daily_sales.missing_day_offsets.length, + "daily_sales missing-day fixture count changed" +); + +const requiredAdvancedStages = new Set([ + "$facet", + "$lookup", + "$expr", + "$setWindowFields", + "$densify", + "$fill", + "$unionWith", + "$bucket", + "$sortArray", + "$merge" +]); +const documentedStages = new Set( + aggregationCases.flatMap((testCase) => testCase.stages) +); +for (const stage of requiredAdvancedStages) { + assert(documentedStages.has(stage), `advanced aggregation case missing ${stage}`); +} + +for (const collection of Object.keys(collections)) { + assert(indexes[collection], `indexes.json has no entry for ${collection}`); +} + +assert( + manifest.test_case_counts.transactions === transactionCases.length && + manifest.test_case_counts.change_streams === changeStreamCases.length && + manifest.test_case_counts.aggregations === aggregationCases.length, + "test case counts changed" +); + +console.log( + JSON.stringify({ + status: "PASS", + dataset: manifest.dataset, + version: manifest.version, + files_verified: manifest.files.length + 1, + collection_counts: manifest.collection_counts, + test_case_counts: manifest.test_case_counts, + invariants: { + foreign_keys: "PASS", + order_totals: "PASS", + payment_totals: "PASS", + time_series_gaps: "PASS", + transaction_fixtures: "PASS", + change_stream_sequence: "PASS", + advanced_aggregation_coverage: "PASS", + hashes: "PASS" + } + }) +); diff --git a/scenarios/ecommerce/README.md b/scenarios/ecommerce/README.md index 90d5324..d0f4b89 100644 --- a/scenarios/ecommerce/README.md +++ b/scenarios/ecommerce/README.md @@ -11,6 +11,7 @@ the diagnostic toolbox: `perf-advisor.sh`, `index-redundancy-finder.sh`, and |------|-----------| | `seed.sh` | Self-contained seeder (embeds the data-generation script; ~50K orders, ~150K order_items). | | [`../../compat/`](../../compat/QUICKSTART.md) | MongoDB-compatible Node.js workload running end-to-end on DocumentDB, including three `$lookup` queries and exact-result verification. | +| [`../ecommerce-advanced/`](../ecommerce-advanced/README.md) | Deterministic committed data for transactions, change streams, and advanced aggregation compatibility tests. | ## Run diff --git a/testing/pytest.ini b/testing/pytest.ini index c557418..5894db4 100644 --- a/testing/pytest.ini +++ b/testing/pytest.ini @@ -20,3 +20,4 @@ markers = benchmarkmetrics: Loop C — MSBench cost-metric harvester (no container needed) benchmarkconfig: Loop C — MSBench benchmark structure and registration (no container) routeefficiency: text-skills vs diagnostic-scripts route comparison (no container) + advanceddata: committed ecommerce-advanced dataset generation and invariant checks diff --git a/testing/scenarios/ecommerce-advanced-data/conftest.py b/testing/scenarios/ecommerce-advanced-data/conftest.py new file mode 100644 index 0000000..347a253 --- /dev/null +++ b/testing/scenarios/ecommerce-advanced-data/conftest.py @@ -0,0 +1,9 @@ +"""This scenario validates committed files and needs no database container.""" + +import pytest + + +@pytest.fixture(scope="session", autouse=True) +def require_container(): + return None + diff --git a/testing/scenarios/ecommerce-advanced-data/tests/test_dataset.py b/testing/scenarios/ecommerce-advanced-data/tests/test_dataset.py new file mode 100644 index 0000000..60056ac --- /dev/null +++ b/testing/scenarios/ecommerce-advanced-data/tests/test_dataset.py @@ -0,0 +1,80 @@ +"""Regression guards for the committed ecommerce-advanced dataset.""" + +import hashlib +import json +import shutil +import subprocess +from pathlib import Path + +import pytest + +import kit + + +pytestmark = pytest.mark.advanceddata + +SCENARIO = kit.REPO_DIR / "scenarios" / "ecommerce-advanced" +DATA = SCENARIO / "data" + + +def read_json(path): + return json.loads(path.read_text()) + + +def read_jsonl(path): + return [json.loads(line) for line in path.read_text().splitlines() if line] + + +def test_committed_files_match_manifest(): + manifest = read_json(DATA / "manifest.json") + + assert manifest["seed"] == 20260901 + assert manifest["generated_at"] == "2026-09-01T00:00:00.000Z" + assert manifest["data_epoch"] == "2025-01-01T00:00:00.000Z" + assert manifest["collection_counts"] == { + "customers": 200, + "products": 100, + "inventory": 300, + "orders": 2000, + "order_items": 6000, + "payments": 2000, + "returns": 120, + "daily_sales": 84, + "stream_orders": 2, + } + + for spec in manifest["files"]: + content = (DATA / spec["path"]).read_bytes() + assert len(content) == spec["bytes"], spec["path"] + assert hashlib.sha256(content).hexdigest() == spec["sha256"], spec["path"] + + +def test_transaction_and_time_series_edge_cases_are_present(): + cases = read_json(DATA / "cases" / "transactions.json") + by_id = {case["case_id"]: case for case in cases} + + assert by_id["commit-purchase"]["initial_quantity"] == 10 + assert by_id["commit-purchase"]["expected_quantity"] == 8 + assert by_id["concurrent-last-unit"]["initial_quantity"] == 1 + assert by_id["concurrent-last-unit"]["expected_commits"] == 1 + assert by_id["insufficient-stock"]["initial_quantity"] == 0 + assert by_id["forced-rollback"]["failure_after"] == "payment_insert" + + daily_sales = read_jsonl(DATA / "collections" / "daily_sales.jsonl") + assert len(daily_sales) == 84 + assert sum(row["revenue"] is None for row in daily_sales) == 3 + + +def test_generator_reproduces_byte_identical_output(): + if not shutil.which("node"): + pytest.skip("Node.js is required to run the deterministic generator") + + result = subprocess.run( + ["bash", "scripts/check-determinism.sh"], + cwd=SCENARIO, + capture_output=True, + text=True, + timeout=120, + ) + assert result.returncode == 0, result.stderr + assert "byte-identical" in result.stdout From 31a65b0b50b511b50712488821315a80ab4a0f42 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 15 Sep 2026 21:56:04 +0000 Subject: [PATCH 42/52] cross-platform compatibility for scripts --- .gitattributes | 1 + .github/workflows/loop-a-tests.yml | 23 +- CHANGELOG.md | 14 + README.md | 25 +- .../run-comparison.sh | 0 .../shared/arms/install-arm.sh | 0 benchmarks/documentdb-sdk-skills/build.sh | 0 .../controls/naive-python/build.sh | 0 .../controls/naive-python/run.sh | 0 .../shared/base/vendor-wheels.sh | 0 .../environment/reference/build.sh | 0 .../environment/reference/run.sh | 0 .../tasks/orders-api-python/solution/solve.sh | 0 .../tasks/orders-api-python/tests/test.sh | 0 .../documentdb-sdk-skills/verify-controls.sh | 0 compat/QUICKSTART.md | 3 - docs/DIAGNOSTICS.md | 19 + install.sh | 0 knowledge-base/kb-route.sh | 0 .../contoso/scaling-benchmark/scale-bench2.sh | 0 .../scaling-benchmark/toast-index-bench.sh | 0 scenarios/contoso/seed.sh | 0 scenarios/ecommerce-advanced/README.md | 3 +- scenarios/ecommerce/seed.sh | 0 scenarios/index-redundancy/seed.sh | 0 scripts/data-integrity-check.ps1 | 4 + scripts/data-integrity-check.py | 5 + scripts/data-integrity-check.sh | 5 +- scripts/db-config-advisor.ps1 | 4 + scripts/db-config-advisor.py | 5 + scripts/db-config-advisor.sh | 5 +- scripts/diagnostic-runtime.sh | 19 + scripts/document-bloat-advisor.ps1 | 4 + scripts/document-bloat-advisor.py | 5 + scripts/document-bloat-advisor.sh | 7 +- scripts/index-redundancy-finder.ps1 | 4 + scripts/index-redundancy-finder.py | 5 + scripts/index-redundancy-finder.sh | 5 +- scripts/index-redundancy-render.py | 35 +- scripts/index_redundancy_render.py | 15 + scripts/invoke-diagnostic.ps1 | 31 ++ scripts/perf-advisor.ps1 | 4 + scripts/perf-advisor.py | 5 + scripts/perf-advisor.sh | 11 +- scripts/portable_diagnostic.py | 278 +++++++++++++ scripts/toast-split-advisor-render.py | 381 ++++++++++++------ scripts/toast-split-advisor.ps1 | 4 + scripts/toast-split-advisor.py | 5 + scripts/toast-split-advisor.sh | 10 +- scripts/toast_split_advisor_render.py | 15 + testing/README.md | 16 +- testing/harness/kit.py | 16 +- testing/pytest.ini | 1 + testing/run.sh | 0 .../json-contract/expected-findings.yaml | 3 + .../json-contract/tests/test_json_contract.py | 26 ++ testing/scenarios/portable-cli/conftest.py | 8 + .../portable-cli/tests/test_portable_cli.py | 82 ++++ 58 files changed, 937 insertions(+), 174 deletions(-) create mode 100644 .gitattributes mode change 100644 => 100755 benchmarks/documentdb-route-efficiency/run-comparison.sh mode change 100644 => 100755 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/verify-controls.sh mode change 100644 => 100755 install.sh mode change 100644 => 100755 knowledge-base/kb-route.sh mode change 100644 => 100755 scenarios/contoso/scaling-benchmark/scale-bench2.sh mode change 100644 => 100755 scenarios/contoso/scaling-benchmark/toast-index-bench.sh mode change 100644 => 100755 scenarios/contoso/seed.sh mode change 100644 => 100755 scenarios/ecommerce/seed.sh mode change 100644 => 100755 scenarios/index-redundancy/seed.sh create mode 100644 scripts/data-integrity-check.ps1 create mode 100644 scripts/data-integrity-check.py mode change 100644 => 100755 scripts/data-integrity-check.sh create mode 100644 scripts/db-config-advisor.ps1 create mode 100644 scripts/db-config-advisor.py mode change 100644 => 100755 scripts/db-config-advisor.sh create mode 100644 scripts/diagnostic-runtime.sh create mode 100644 scripts/document-bloat-advisor.ps1 create mode 100644 scripts/document-bloat-advisor.py mode change 100644 => 100755 scripts/document-bloat-advisor.sh create mode 100644 scripts/index-redundancy-finder.ps1 create mode 100644 scripts/index-redundancy-finder.py mode change 100644 => 100755 scripts/index-redundancy-finder.sh create mode 100644 scripts/index_redundancy_render.py create mode 100644 scripts/invoke-diagnostic.ps1 create mode 100644 scripts/perf-advisor.ps1 create mode 100644 scripts/perf-advisor.py mode change 100644 => 100755 scripts/perf-advisor.sh create mode 100644 scripts/portable_diagnostic.py create mode 100644 scripts/toast-split-advisor.ps1 create mode 100644 scripts/toast-split-advisor.py mode change 100644 => 100755 scripts/toast-split-advisor.sh create mode 100644 scripts/toast_split_advisor_render.py mode change 100644 => 100755 testing/run.sh create mode 100644 testing/scenarios/portable-cli/conftest.py create mode 100644 testing/scenarios/portable-cli/tests/test_portable_cli.py diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfdb8b7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.sh text eol=lf diff --git a/.github/workflows/loop-a-tests.yml b/.github/workflows/loop-a-tests.yml index 531fcfd..ab8bbd6 100644 --- a/.github/workflows/loop-a-tests.yml +++ b/.github/workflows/loop-a-tests.yml @@ -43,7 +43,28 @@ jobs: working-directory: testing # These scenarios override the container fixture with a no-op, so they # run with no Docker, no credentials and no network. - run: python -m pytest -ra scenarios/token-accounting scenarios/evals-config + run: python -m pytest -ra scenarios/token-accounting scenarios/evals-config scenarios/portable-cli + + windows: + name: Windows portable CLI contracts + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install test deps + run: pip install -r testing/requirements.txt + + - name: Validate Python and PowerShell launchers + working-directory: testing + run: python -m pytest -ra scenarios/portable-cli + + - name: Execute a PowerShell launcher + shell: pwsh + run: .\scripts\perf-advisor.ps1 --help # ------------------------------------------------------------------------- # The full scenario suite against a live container. diff --git a/CHANGELOG.md b/CHANGELOG.md index a28f0b4..234cf52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## 2026-09-15 — Portable diagnostic launchers for Windows + +Added native Python entry points and PowerShell wrappers for all six read-only +diagnostics. Windows users now need only Python 3.10+ and Docker Desktop; Git +Bash and WSL are not required. The portable launcher copies the selected Bash +diagnostic into the Linux DocumentDB container and runs the established logic +there through a direct-command transport, preserving the existing flags and +JSON contracts. + +Loop A now invokes the portable Python entry points on Linux as well, includes +Bash-versus-portable JSON-shape parity checks, covers the TOAST split advisor's +JSON shape, and runs infrastructure-free launcher contracts on +`windows-latest`. + ## 2026-05-27 — Mark project as Public Preview Add a Public Preview status badge to `README.md` and a top-of-document diff --git a/README.md b/README.md index 074bc0b..8d3b8cc 100644 --- a/README.md +++ b/README.md @@ -29,13 +29,14 @@ All are **read-only** (they never modify data) and **cross-layer** (MongoDB API PostgreSQL engine). Each takes `--db `; add `--json` for a compact machine-readable result (what the router consumes). -| Script | Answers | `--json` | +| Diagnostic | Answers | `--json` | |--------|---------|:--:| -| `document-bloat-advisor.sh` | Which collections have large text TOASTed and detoasted on every scan; which field to split out. | ✅ | -| `index-redundancy-finder.sh` | Redundant (prefix/duplicate/reverse) or unused indexes safe to drop. | ✅ | -| `db-config-advisor.sh` | Working set vs cache, TOAST share, cache-hit ratios — evidence-based config review. | ✅ | -| `perf-advisor.sh` | Overall health: collection-scan audit, query timing, PG I/O / locks / config. | ✅ | -| `data-integrity-check.sh` | Orphaned foreign-key references and mixed-type fields (hard structural integrity). | ✅ | +| `document-bloat-advisor` | Which collections have large text TOASTed and detoasted on every scan; which field to split out. | ✅ | +| `toast-split-advisor` | Which large fields can move to a side collection and the projected hot-document size. | ✅ | +| `index-redundancy-finder` | Redundant (prefix/duplicate/reverse) or unused indexes safe to drop. | ✅ | +| `db-config-advisor` | Working set vs cache, TOAST share, cache-hit ratios — evidence-based config review. | ✅ | +| `perf-advisor` | Overall health: collection-scan audit, query timing, PG I/O / locks / config. | ✅ | +| `data-integrity-check` | Orphaned foreign-key references and mixed-type fields (hard structural integrity). | ✅ | Common flags: `--container NAME`, `--password PASS`, `--port`, `--pg-port`; env vars `DB_USER` / `DB_PASSWORD` / `PORT` / `PG_PORT` are also honored. **No password @@ -62,6 +63,18 @@ bash scripts/index-redundancy-finder.sh --db ecommerce bash knowledge-base/kb-route.sh --db contoso "why are my aggregations slow even though I have indexes" ``` +The diagnostics also have host-portable Python and PowerShell entry points. +They require Python 3.10+ and Docker Desktop, but do not require Bash or WSL: + +```powershell +python scripts\document-bloat-advisor.py --db contoso +.\scripts\index-redundancy-finder.ps1 --db ecommerce --json +``` + +The Python launcher executes the same read-only diagnostic logic inside the +Linux DocumentDB container, so Linux, macOS, and Windows share one behavior +contract. + Demo datasets are seeders under [`scenarios/`](scenarios/) (they plant the problems the tools find). The kit is guarded by **two test loops** — deterministic script tests in [`testing/`](testing/README.md) and cross-model skill evals in diff --git a/benchmarks/documentdb-route-efficiency/run-comparison.sh b/benchmarks/documentdb-route-efficiency/run-comparison.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh b/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/build.sh b/benchmarks/documentdb-sdk-skills/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh b/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/verify-controls.sh b/benchmarks/documentdb-sdk-skills/verify-controls.sh old mode 100644 new mode 100755 diff --git a/compat/QUICKSTART.md b/compat/QUICKSTART.md index 5c388fe..11fda75 100644 --- a/compat/QUICKSTART.md +++ b/compat/QUICKSTART.md @@ -77,13 +77,10 @@ string and do not enable `tlsAllowInvalidCertificates`. ## Result -Measured on 2026-08-31: - ```text {"database":"ecommerce_compat","counts":{"customers":12,"products":16,"orders":48,"order_items":96,"inventory":32}} {"status":"PASS","checks":4,"query_shapes":{"find":1,"lookup_aggregations":3}} ELAPSED_SECONDS=12.22 -c6d56dddb823ada7db9d2b47fbba97adb890dbed7dee2bff0c2d0a75f1dbad30 results/documentdb.json ``` The elapsed time is one local functional run started as soon as the gateway diff --git a/docs/DIAGNOSTICS.md b/docs/DIAGNOSTICS.md index 5a5efa7..46e967e 100644 --- a/docs/DIAGNOSTICS.md +++ b/docs/DIAGNOSTICS.md @@ -69,6 +69,25 @@ bash scripts/perf-advisor.sh --db ecommerce bash scripts/data-integrity-check.sh --db ecommerce ``` +### Windows + +Each diagnostic has a Python entry point and a PowerShell convenience wrapper: + +```powershell +python scripts\document-bloat-advisor.py --db contoso +python scripts\toast-split-advisor.py --db contoso +.\scripts\index-redundancy-finder.ps1 --db ecommerce +.\scripts\db-config-advisor.ps1 --db contoso +.\scripts\perf-advisor.ps1 --db ecommerce +.\scripts\data-integrity-check.ps1 --db ecommerce +``` + +Prerequisites are Python 3.10+ and Docker Desktop with the target Linux +DocumentDB container running. Git Bash and WSL are not required. The portable +launcher copies the selected read-only script into the container and runs it +there, preserving the same CLI flags and JSON output contract as the Bash entry +point. + Add `--json` to any of them for a compact machine-readable result (what the router and agents consume): diff --git a/install.sh b/install.sh old mode 100644 new mode 100755 diff --git a/knowledge-base/kb-route.sh b/knowledge-base/kb-route.sh old mode 100644 new mode 100755 diff --git a/scenarios/contoso/scaling-benchmark/scale-bench2.sh b/scenarios/contoso/scaling-benchmark/scale-bench2.sh old mode 100644 new mode 100755 diff --git a/scenarios/contoso/scaling-benchmark/toast-index-bench.sh b/scenarios/contoso/scaling-benchmark/toast-index-bench.sh old mode 100644 new mode 100755 diff --git a/scenarios/contoso/seed.sh b/scenarios/contoso/seed.sh old mode 100644 new mode 100755 diff --git a/scenarios/ecommerce-advanced/README.md b/scenarios/ecommerce-advanced/README.md index bf4aefc..1792483 100644 --- a/scenarios/ecommerce-advanced/README.md +++ b/scenarios/ecommerce-advanced/README.md @@ -11,8 +11,7 @@ The dataset is generated from source, validated without a database, and committed as JSONL so the exact same bytes can later be loaded into MongoDB and DocumentDB. -> Azure DocumentDB and this agent kit are in public preview. These fixtures are -> for compatibility testing, not production sample data. +> These fixtures are for compatibility testing, not production sample data. ## Dataset diff --git a/scenarios/ecommerce/seed.sh b/scenarios/ecommerce/seed.sh old mode 100644 new mode 100755 diff --git a/scenarios/index-redundancy/seed.sh b/scenarios/index-redundancy/seed.sh old mode 100644 new mode 100755 diff --git a/scripts/data-integrity-check.ps1 b/scripts/data-integrity-check.ps1 new file mode 100644 index 0000000..e1c9a1a --- /dev/null +++ b/scripts/data-integrity-check.ps1 @@ -0,0 +1,4 @@ +$ErrorActionPreference = "Stop" +& (Join-Path $PSScriptRoot "invoke-diagnostic.ps1") ` + -Diagnostic "data-integrity-check" @args +exit $LASTEXITCODE diff --git a/scripts/data-integrity-check.py b/scripts/data-integrity-check.py new file mode 100644 index 0000000..bd9ff1b --- /dev/null +++ b/scripts/data-integrity-check.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 +from portable_diagnostic import main + +if __name__ == "__main__": + raise SystemExit(main("data-integrity-check")) diff --git a/scripts/data-integrity-check.sh b/scripts/data-integrity-check.sh old mode 100644 new mode 100755 index 7a2f3b1..40ba1fc --- a/scripts/data-integrity-check.sh +++ b/scripts/data-integrity-check.sh @@ -22,6 +22,9 @@ # an agent/router can consume the verdict without the full human report. set -uo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/diagnostic-runtime.sh" + CONTAINER_NAME="${CONTAINER_NAME:-documentdb-local}" PORT="${PORT:-10260}" USER="${DB_USER:-docdbadmin}" @@ -56,7 +59,7 @@ done [[ -z "$PASSWORD" ]] && { echo "Error: no password. Set DB_PASSWORD or pass --password (local demo: export DB_PASSWORD=Test1234)." >&2; exit 1; } run_mongosh() { - docker exec -u documentdb "$CONTAINER_NAME" mongosh \ + docdb_exec_as documentdb mongosh \ "localhost:${PORT}/${DB}" -u "$USER" -p "$PASSWORD" \ --authenticationMechanism SCRAM-SHA-256 --tls --tlsAllowInvalidCertificates \ --quiet --eval "$1" 2>/dev/null diff --git a/scripts/db-config-advisor.ps1 b/scripts/db-config-advisor.ps1 new file mode 100644 index 0000000..7bcb3ce --- /dev/null +++ b/scripts/db-config-advisor.ps1 @@ -0,0 +1,4 @@ +$ErrorActionPreference = "Stop" +& (Join-Path $PSScriptRoot "invoke-diagnostic.ps1") ` + -Diagnostic "db-config-advisor" @args +exit $LASTEXITCODE diff --git a/scripts/db-config-advisor.py b/scripts/db-config-advisor.py new file mode 100644 index 0000000..1c9d16e --- /dev/null +++ b/scripts/db-config-advisor.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 +from portable_diagnostic import main + +if __name__ == "__main__": + raise SystemExit(main("db-config-advisor")) diff --git a/scripts/db-config-advisor.sh b/scripts/db-config-advisor.sh old mode 100644 new mode 100755 index 2aa5314..bb3eb6a --- a/scripts/db-config-advisor.sh +++ b/scripts/db-config-advisor.sh @@ -24,6 +24,9 @@ # "SELECT pg_stat_reset()"), run your workload, then re-run this tool. set -uo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/diagnostic-runtime.sh" + CONTAINER_NAME="${CONTAINER_NAME:-documentdb-local}" PG_PORT="${PG_PORT:-9712}" PG_USER="${PG_USER:-documentdb}" @@ -44,7 +47,7 @@ done [[ -z "$DB" ]] && { echo "Error: --db is required" >&2; exit 1; } run_psql() { - docker exec "$CONTAINER_NAME" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ + docdb_exec_as "" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ -t --no-align -F $'\t' -c "$1" 2>/dev/null | grep -vE '^SET$' } diff --git a/scripts/diagnostic-runtime.sh b/scripts/diagnostic-runtime.sh new file mode 100644 index 0000000..f1d3670 --- /dev/null +++ b/scripts/diagnostic-runtime.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +# Shared command transport for DocumentDB diagnostics. +# +# Normal Linux invocation runs Docker from the host. The portable Python +# launcher copies the script into the DocumentDB container and sets +# DOCDB_DIRECT=1, so the same diagnostic logic calls mongosh/psql directly. + +docdb_exec_as() { + local user="$1" + shift + if [[ "${DOCDB_DIRECT:-0}" == "1" ]]; then + "$@" + elif [[ -n "$user" ]]; then + docker exec -u "$user" "$CONTAINER_NAME" "$@" + else + docker exec "$CONTAINER_NAME" "$@" + fi +} diff --git a/scripts/document-bloat-advisor.ps1 b/scripts/document-bloat-advisor.ps1 new file mode 100644 index 0000000..e42e7dd --- /dev/null +++ b/scripts/document-bloat-advisor.ps1 @@ -0,0 +1,4 @@ +$ErrorActionPreference = "Stop" +& (Join-Path $PSScriptRoot "invoke-diagnostic.ps1") ` + -Diagnostic "document-bloat-advisor" @args +exit $LASTEXITCODE diff --git a/scripts/document-bloat-advisor.py b/scripts/document-bloat-advisor.py new file mode 100644 index 0000000..f665c18 --- /dev/null +++ b/scripts/document-bloat-advisor.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 +from portable_diagnostic import main + +if __name__ == "__main__": + raise SystemExit(main("document-bloat-advisor")) diff --git a/scripts/document-bloat-advisor.sh b/scripts/document-bloat-advisor.sh old mode 100644 new mode 100755 index 2f031d0..868a1ad --- a/scripts/document-bloat-advisor.sh +++ b/scripts/document-bloat-advisor.sh @@ -26,6 +26,9 @@ # [--min-total-kb 256] ignore collections smaller than this set -uo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/diagnostic-runtime.sh" + CONTAINER_NAME="${CONTAINER_NAME:-documentdb-local}" PORT="${PORT:-10260}" PG_PORT="${PG_PORT:-9712}" @@ -56,12 +59,12 @@ done [[ -z "$PASSWORD" ]] && { echo "Error: no password. Set DB_PASSWORD or pass --password (local demo: export DB_PASSWORD=Test1234)." >&2; exit 1; } run_mongosh() { - docker exec "$CONTAINER_NAME" mongosh "localhost:${PORT}/${DB}" \ + docdb_exec_as "" mongosh "localhost:${PORT}/${DB}" \ -u "$DB_USER_" -p "$PASSWORD" --authenticationMechanism SCRAM-SHA-256 \ --tls --tlsAllowInvalidCertificates --quiet --eval "$1" 2>/dev/null } run_psql() { - docker exec "$CONTAINER_NAME" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ + docdb_exec_as "" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ -t --no-align -F $'\t' -c "$1" 2>/dev/null | grep -vE '^(SET|)$' } diff --git a/scripts/index-redundancy-finder.ps1 b/scripts/index-redundancy-finder.ps1 new file mode 100644 index 0000000..e00f418 --- /dev/null +++ b/scripts/index-redundancy-finder.ps1 @@ -0,0 +1,4 @@ +$ErrorActionPreference = "Stop" +& (Join-Path $PSScriptRoot "invoke-diagnostic.ps1") ` + -Diagnostic "index-redundancy-finder" @args +exit $LASTEXITCODE diff --git a/scripts/index-redundancy-finder.py b/scripts/index-redundancy-finder.py new file mode 100644 index 0000000..b880f7f --- /dev/null +++ b/scripts/index-redundancy-finder.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 +from portable_diagnostic import main + +if __name__ == "__main__": + raise SystemExit(main("index-redundancy-finder")) diff --git a/scripts/index-redundancy-finder.sh b/scripts/index-redundancy-finder.sh old mode 100644 new mode 100755 index 8b4a714..1f2af1d --- a/scripts/index-redundancy-finder.sh +++ b/scripts/index-redundancy-finder.sh @@ -24,6 +24,7 @@ set -uo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/diagnostic-runtime.sh" CONTAINER_NAME="${CONTAINER_NAME:-documentdb-local}" PORT="${PORT:-10260}" @@ -79,14 +80,14 @@ done # ── Helpers ─────────────────────────────────────────────────────────── run_mongosh() { local target_db="${2:-$DB}" - docker exec -u documentdb "$CONTAINER_NAME" mongosh \ + docdb_exec_as documentdb mongosh \ "localhost:${PORT}/${target_db}" -u "$USER" -p "$PASSWORD" \ --authenticationMechanism SCRAM-SHA-256 --tls --tlsAllowInvalidCertificates \ --quiet --eval "$1" 2>/dev/null } run_psql() { - docker exec "$CONTAINER_NAME" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ + docdb_exec_as "" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ -t -A -F $'\t' -c "$1" 2>/dev/null | grep -v "^SET$" } diff --git a/scripts/index-redundancy-render.py b/scripts/index-redundancy-render.py index 489d40c..0428260 100644 --- a/scripts/index-redundancy-render.py +++ b/scripts/index-redundancy-render.py @@ -10,15 +10,15 @@ import json import sys from collections import defaultdict +from typing import TextIO SEV_ORDER = {"HIGH": 0, "MEDIUM": 1, "LOW": 2} SEV_ICON = {"HIGH": "🔴", "MEDIUM": "🟡", "LOW": "🔵"} -def main(): - data = json.load(sys.stdin) +def render(data: list[dict], output: TextIO = sys.stdout): if not data: - print(" ✅ No redundant or unused indexes found") + print(" ✅ No redundant or unused indexes found", file=output) return data.sort(key=lambda f: (SEV_ORDER.get(f["severity"], 3), f["collection"], f["rule"])) @@ -31,17 +31,30 @@ def main(): for f in data: counts[f["severity"]] = counts.get(f["severity"], 0) + 1 - print(f' Found {len(data)} finding(s): {counts["HIGH"]} HIGH, ' - f'{counts["MEDIUM"]} MEDIUM, {counts["LOW"]} LOW') - print() + print( + f' Found {len(data)} finding(s): {counts["HIGH"]} HIGH, ' + f'{counts["MEDIUM"]} MEDIUM, {counts["LOW"]} LOW', + file=output, + ) + print(file=output) for coll in sorted(by_coll): - print(f" ── {coll} ──") + print(f" ── {coll} ──", file=output) for f in by_coll[coll]: icon = SEV_ICON.get(f["severity"], " ") - print(f' {icon} [{f["severity"]}] {f["rule"]:18s} {f["index"]}') - print(f' → {f["reason"]}') - print(f' 💡 db.{coll}.dropIndex("{f["index"]}")') - print() + print( + f' {icon} [{f["severity"]}] {f["rule"]:18s} {f["index"]}', + file=output, + ) + print(f' → {f["reason"]}', file=output) + print( + f' 💡 db.{coll}.dropIndex("{f["index"]}")', + file=output, + ) + print(file=output) + + +def main(): + render(json.load(sys.stdin)) if __name__ == "__main__": diff --git a/scripts/index_redundancy_render.py b/scripts/index_redundancy_render.py new file mode 100644 index 0000000..0a26e8c --- /dev/null +++ b/scripts/index_redundancy_render.py @@ -0,0 +1,15 @@ +"""Importable renderer shim for the hyphenated CLI module.""" + +from __future__ import annotations + +import importlib.util +from pathlib import Path + +_PATH = Path(__file__).with_name("index-redundancy-render.py") +_SPEC = importlib.util.spec_from_file_location("index_redundancy_renderer", _PATH) +if _SPEC is None or _SPEC.loader is None: + raise ImportError(f"cannot load renderer: {_PATH}") +_MODULE = importlib.util.module_from_spec(_SPEC) +_SPEC.loader.exec_module(_MODULE) + +render = _MODULE.render diff --git a/scripts/invoke-diagnostic.ps1 b/scripts/invoke-diagnostic.ps1 new file mode 100644 index 0000000..d317cdf --- /dev/null +++ b/scripts/invoke-diagnostic.ps1 @@ -0,0 +1,31 @@ +param( + [Parameter(Mandatory = $true)] + [string]$Diagnostic, + + [Parameter(ValueFromRemainingArguments = $true)] + [string[]]$DiagnosticArgs +) + +$ErrorActionPreference = "Stop" +$ScriptPath = Join-Path $PSScriptRoot "$Diagnostic.py" + +$PyLauncher = Get-Command py -ErrorAction SilentlyContinue +if ($PyLauncher) { + & $PyLauncher.Source -3 -c "import sys; raise SystemExit(sys.version_info < (3, 10))" + if ($LASTEXITCODE -eq 0) { + & $PyLauncher.Source -3 $ScriptPath @DiagnosticArgs + exit $LASTEXITCODE + } +} + +$Python = Get-Command python -ErrorAction SilentlyContinue +if ($Python) { + & $Python.Source -c "import sys; raise SystemExit(sys.version_info < (3, 10))" + if ($LASTEXITCODE -eq 0) { + & $Python.Source $ScriptPath @DiagnosticArgs + exit $LASTEXITCODE + } +} + +Write-Error "Python 3.10 or newer is required. Install Python and ensure 'py' or 'python' is on PATH." +exit 1 diff --git a/scripts/perf-advisor.ps1 b/scripts/perf-advisor.ps1 new file mode 100644 index 0000000..76d7c9f --- /dev/null +++ b/scripts/perf-advisor.ps1 @@ -0,0 +1,4 @@ +$ErrorActionPreference = "Stop" +& (Join-Path $PSScriptRoot "invoke-diagnostic.ps1") ` + -Diagnostic "perf-advisor" @args +exit $LASTEXITCODE diff --git a/scripts/perf-advisor.py b/scripts/perf-advisor.py new file mode 100644 index 0000000..b81695c --- /dev/null +++ b/scripts/perf-advisor.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 +from portable_diagnostic import main + +if __name__ == "__main__": + raise SystemExit(main("perf-advisor")) diff --git a/scripts/perf-advisor.sh b/scripts/perf-advisor.sh old mode 100644 new mode 100755 index e4b7036..439c4f7 --- a/scripts/perf-advisor.sh +++ b/scripts/perf-advisor.sh @@ -32,6 +32,9 @@ # bash scripts/perf-advisor.sh --db myapp --all-dbs # scan all databases set -uo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/diagnostic-runtime.sh" + CONTAINER_NAME="${CONTAINER_NAME:-documentdb-local}" PORT="${PORT:-10260}" PG_PORT="${PG_PORT:-9712}" @@ -76,25 +79,25 @@ done # ── Helper functions ────────────────────────────────────────────────── run_mongosh() { local target_db="${2:-$DB}" - docker exec -u documentdb "$CONTAINER_NAME" mongosh \ + docdb_exec_as documentdb mongosh \ "localhost:${PORT}/${target_db}" -u "$USER" -p "$PASSWORD" \ --authenticationMechanism SCRAM-SHA-256 --tls --tlsAllowInvalidCertificates \ --quiet --eval "$1" 2>/dev/null } run_psql() { - docker exec "$CONTAINER_NAME" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ + docdb_exec_as "" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ -t --no-align -c "$1" 2>/dev/null } run_psql_pretty() { - docker exec "$CONTAINER_NAME" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ + docdb_exec_as "" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ -c "$1" 2>/dev/null | grep -v "^SET$" } # psql that returns a single scalar/line with no formatting (for JSON assembly) run_psql_raw() { - docker exec "$CONTAINER_NAME" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ + docdb_exec_as "" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ -t -A -c "$1" 2>/dev/null } diff --git a/scripts/portable_diagnostic.py b/scripts/portable_diagnostic.py new file mode 100644 index 0000000..95906b5 --- /dev/null +++ b/scripts/portable_diagnostic.py @@ -0,0 +1,278 @@ +#!/usr/bin/env python3 +"""Cross-platform launcher for the Bash-based DocumentDB diagnostics. + +Windows hosts do not need Bash, awk, sed, or grep. The launcher copies the +selected diagnostic and its shared runtime into the Linux DocumentDB container, +then executes the existing diagnostic logic there. Docker Desktop and Python +3.10+ are the only host requirements. +""" + +from __future__ import annotations + +import json +import os +import subprocess +import sys +import tempfile +import uuid +from collections import defaultdict +from datetime import datetime +from pathlib import Path +from typing import TextIO + +SCRIPT_DIR = Path(__file__).resolve().parent +SUPPORTED = { + "data-integrity-check", + "db-config-advisor", + "document-bloat-advisor", + "index-redundancy-finder", + "perf-advisor", + "toast-split-advisor", +} + + +class DiagnosticError(RuntimeError): + """A portable diagnostic could not be launched or completed.""" + + +def option_value(args: list[str], name: str, default: str) -> str: + try: + index = args.index(name) + except ValueError: + return default + if index + 1 >= len(args): + raise DiagnosticError(f"{name} requires a value") + return args[index + 1] + + +def container_name(args: list[str]) -> str: + return option_value( + args, + "--container", + os.environ.get("CONTAINER_NAME") + or os.environ.get("CONTAINER") + or "documentdb-local", + ) + + +def docker_environment() -> dict[str, str]: + names = ( + "DB_PASSWORD", + "DB_USER", + "PORT", + "PG_PORT", + "PG_USER", + "PG_DB", + "DEBUG", + ) + return {name: os.environ[name] for name in names if name in os.environ} + + +def docker_exec_command( + container: str, + remote_script: str, + args: list[str], + extra_env: dict[str, str] | None = None, +) -> list[str]: + environment = {"DOCDB_DIRECT": "1", **docker_environment(), **(extra_env or {})} + command = ["docker", "exec", "-i", "-u", "documentdb"] + for name, value in environment.items(): + command.extend(["-e", f"{name}={value}"]) + command.extend([container, "/bin/bash", remote_script, *args]) + return command + + +def _run(command: list[str], **kwargs) -> subprocess.CompletedProcess[str]: + try: + return subprocess.run( + command, text=True, encoding="utf-8", errors="replace", **kwargs + ) + except FileNotFoundError as error: + raise DiagnosticError( + "Docker CLI was not found. Install Docker Desktop and ensure " + "'docker' is available on PATH." + ) from error + + +def _copy(container: str, source: Path, destination: str) -> None: + result = _run( + ["docker", "cp", str(source), f"{container}:{destination}"], + capture_output=True, + ) + if result.returncode != 0: + raise DiagnosticError(result.stderr.strip() or f"docker cp failed: {source}") + + +def normalized_shell_copy(source: Path, directory: Path) -> Path: + """Create an LF-only copy so Git-for-Windows CRLF checkout is harmless.""" + target = directory / source.name + content = source.read_text(encoding="utf-8").replace("\r\n", "\n").replace( + "\r", "\n" + ) + target.write_text(content, encoding="utf-8", newline="\n") + return target + + +def _render_index_findings( + payload: str, args: list[str], container: str, output: TextIO +) -> None: + from index_redundancy_render import render + + findings = json.loads(payload) + by_database: dict[str, list[dict]] = defaultdict(list) + for finding in findings: + by_database[finding.get("db", "")].append(finding) + + target = option_value(args, "--db", "ALL") if "--all-dbs" not in args else "ALL" + print("╔" + "═" * 66 + "╗", file=output) + print("║ DocumentDB Index Redundancy Finder".ljust(67) + "║", file=output) + print(f"║ Database: {target}".ljust(67) + "║", file=output) + print(f"║ Container: {container}".ljust(67) + "║", file=output) + timestamp = datetime.now().strftime("%Y%m%d%H%M%S") + print(f"║ Timestamp: {timestamp}".ljust(67) + "║", file=output) + print("╚" + "═" * 66 + "╝", file=output) + print(file=output) + + databases = sorted(by_database) or ([target] if target != "ALL" else []) + for database in databases: + print("┌" + "─" * 62 + "┐", file=output) + print(f"│ Database: {database}".ljust(63) + "│", file=output) + print("└" + "─" * 62 + "┘", file=output) + print(file=output) + render(by_database.get(database, []), output) + + print(file=output) + print("═" * 67, file=output) + print(" Legend:", file=output) + print(" 🔴 HIGH — Safe to drop (validated by index spec / catalog)", file=output) + print(" 🟡 MEDIUM — Likely safe (zero usage validated at both layers)", file=output) + print(" 🔵 LOW — Review query patterns before dropping", file=output) + print("═" * 67, file=output) + + +def _render_toast_report(payload: str, args: list[str], output: TextIO) -> None: + from toast_split_advisor_render import render + + render( + data=payload, + json_mode="--json" in args, + db_name=option_value(args, "--db", ""), + field_min=int(option_value(args, "--field-min-bytes", "1024")), + inline_threshold=2000, + toast_ratio=float(option_value(args, "--toast-ratio", "0.5")), + min_kb=option_value(args, "--min-total-kb", "256"), + output=output, + ) + + +def run_named( + name: str, + args: list[str], + *, + stdout: TextIO = sys.stdout, + stderr: TextIO = sys.stderr, +) -> int: + if name not in SUPPORTED: + raise DiagnosticError(f"unsupported diagnostic: {name}") + + if any(arg in ("-h", "--help") for arg in args): + print( + f"Usage: python {name}.py [the same options as {name}.sh]\n" + "Runs the diagnostic through Docker without requiring Bash on the host.", + file=stdout, + ) + return 0 + + container = container_name(args) + remote_dir = f"/tmp/documentdb-agent-kit-{uuid.uuid4().hex}" + remote_script = f"{remote_dir}/{name}.sh" + script = SCRIPT_DIR / f"{name}.sh" + runtime = SCRIPT_DIR / "diagnostic-runtime.sh" + + create = _run( + ["docker", "exec", "-u", "root", container, "mkdir", "-p", remote_dir], + capture_output=True, + ) + if create.returncode != 0: + raise DiagnosticError( + create.stderr.strip() + or f"cannot prepare portable diagnostic in container '{container}'" + ) + + try: + with tempfile.TemporaryDirectory(prefix="documentdb-agent-kit-") as temp: + temp_dir = Path(temp) + _copy( + container, + normalized_shell_copy(runtime, temp_dir), + f"{remote_dir}/diagnostic-runtime.sh", + ) + _copy( + container, + normalized_shell_copy(script, temp_dir), + remote_script, + ) + + inner_args = list(args) + extra_env: dict[str, str] = {} + render = None + if name == "index-redundancy-finder" and "--json" not in inner_args: + inner_args.append("--json") + render = lambda payload, stream: _render_index_findings( + payload, args, container, stream + ) + elif name == "toast-split-advisor": + extra_env["DOCDB_PORTABLE_RAW"] = "1" + render = lambda payload, stream: _render_toast_report( + payload, args, stream + ) + + result = _run( + docker_exec_command( + container, remote_script, inner_args, extra_env + ), + capture_output=True, + ) + if result.stderr: + stderr.write(result.stderr) + if result.returncode != 0: + if result.stdout: + stdout.write(result.stdout) + return result.returncode + + if render is None: + stdout.write(result.stdout) + else: + render(result.stdout, stdout) + return 0 + finally: + _run( + ["docker", "exec", "-u", "root", container, "rm", "-rf", remote_dir], + capture_output=True, + ) + + +def main(name: str | None = None) -> int: + for stream in (sys.stdout, sys.stderr): + reconfigure = getattr(stream, "reconfigure", None) + if reconfigure is not None: + reconfigure(encoding="utf-8") + selected = name + args = sys.argv[1:] + if selected is None: + if not args: + print( + "Usage: python portable_diagnostic.py [options]", + file=sys.stderr, + ) + return 2 + selected, args = args[0], args[1:] + try: + return run_named(selected, args) + except (DiagnosticError, json.JSONDecodeError, ValueError) as error: + print(f"Error: {error}", file=sys.stderr) + return 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/toast-split-advisor-render.py b/scripts/toast-split-advisor-render.py index 95105c1..a0a837f 100644 --- a/scripts/toast-split-advisor-render.py +++ b/scripts/toast-split-advisor-render.py @@ -11,138 +11,253 @@ TOAST_RATIO, MIN_KB. """ -import os import json +import os +import sys +from typing import TextIO + +def render( + *, + data: str, + json_mode: bool, + db_name: str, + field_min: int, + inline_threshold: int, + toast_ratio: float, + min_kb: str, + output: TextIO = sys.stdout, +) -> None: + findings = [] + clean = [] + + for line in data.splitlines(): + if not line.strip(): + continue + parts = line.split("\t", 4) + if len(parts) < 5: + continue + coll, heap, toast, total, tail = parts + heap, toast, total = int(heap), int(toast), int(total) + ratio = (toast / (heap + toast)) if (heap + toast) > 0 else 0.0 + + if tail == "CLEAN": + clean.append( + { + "collection": coll, + "heap_bytes": heap, + "toast_bytes": toast, + "toast_ratio": round(ratio, 4), + } + ) + continue + + field_data = json.loads(tail) + avg = field_data.get("avg_obj_size", 0) or 0 + fields = field_data.get("fields", []) + candidates = [f for f in fields if f.get("b", 0) >= field_min] + largest_only = (not candidates) and fields + show = candidates if candidates else (fields[:1] if fields else []) + moved_bytes = sum(f["b"] for f in candidates) + projected_hot = max(avg - moved_bytes, 0) + + findings.append( + { + "collection": coll, + "heap_bytes": heap, + "toast_bytes": toast, + "total_bytes": total, + "toast_ratio": round(ratio, 4), + "avg_obj_size": avg, + "sampled_docs": field_data.get("sampled", 0), + "split_candidates": [ + { + "field": f["f"], + "avg_bytes": f["b"], + "pct_of_doc": round(100.0 * f["b"] / avg, 1) + if avg > 0 + else 0.0, + } + for f in show + ], + "candidate_threshold_bytes": field_min, + "no_field_over_threshold": bool(largest_only), + "projected_hot_avg_bytes": projected_hot, + "projected_stays_inline": projected_hot < inline_threshold, + "recommended_side_collection": coll + "_ext", + "side_collection_key": "_id", + "note": "ANALYSIS ONLY — no data moved. Apply the split yourself.", + } + ) + + if json_mode: + print( + json.dumps( + { + "db": db_name, + "flagged": len(findings), + "findings": findings, + "clean": clean, + "analysis_only": True, + } + ), + file=output, + ) + return + + bar = "═" * 70 + print(bar, file=output) + print( + " DocumentDB TOAST Split Advisor (ANALYSIS ONLY — does not modify data)", + file=output, + ) + print( + f" Database: {db_name} flag TOAST ratio > {toast_ratio}, min {min_kb}KB, " + f"candidate field >= {field_min}B", + file=output, + ) + print(bar, file=output) + print(file=output) + + for finding in findings: + heap_kb = finding["heap_bytes"] // 1024 + toast_kb = finding["toast_bytes"] // 1024 + print(f" ⚠️ {finding['collection']}", file=output) + print( + f" heap={heap_kb}KB TOAST={toast_kb}KB " + f"(TOAST ratio {finding['toast_ratio']}) " + f"avgObjSize={finding['avg_obj_size']}B " + f"[sampled {finding['sampled_docs']} docs]", + file=output, + ) + if finding["no_field_over_threshold"]: + big = ( + finding["split_candidates"][0] + if finding["split_candidates"] + else None + ) + if big: + print( + f" no single field >= " + f"{finding['candidate_threshold_bytes']}B; largest is " + f"'{big['field']}' ({big['avg_bytes']}B, " + f"{big['pct_of_doc']}% of doc).", + file=output, + ) + print( + " Bloat is spread across fields — review the schema " + "rather than a single split.", + file=output, + ) + else: + print( + " split candidate field(s) to MOVE into a side collection:", + file=output, + ) + for candidate in finding["split_candidates"]: + print( + f" • {candidate['field']:<24} " + f"~{candidate['avg_bytes']}B/doc " + f"({candidate['pct_of_doc']}% of document)", + file=output, + ) + inline = ( + "stays INLINE (TOAST≈0) ✅" + if finding["projected_stays_inline"] + else "still large — consider moving more fields ⚠️" + ) + print( + f" after moving these, hot doc ≈ " + f"{finding['projected_hot_avg_bytes']}B → {inline}", + file=output, + ) + print( + f" → create '{finding['recommended_side_collection']}' " + f"keyed by '{finding['side_collection_key']}' holding those " + f"fields; keep '{finding['collection']}' scalar-only.", + file=output, + ) + print(file=output) + + for item in clean: + print( + f" ✅ {item['collection']} heap={item['heap_bytes']//1024}KB " + f"TOAST={item['toast_bytes']//1024}KB " + f"(ratio {item['toast_ratio']}) — no bloat", + file=output, + ) + + print(file=output) + print("─" * 70, file=output) + if not findings: + print( + " ✅ No large-document/TOAST bloat detected — nothing to split.", + file=output, + ) + return + + print( + f" Flagged {len(findings)} collection(s). " + "This tool ONLY reports guidance.", + file=output, + ) + print(file=output) + print( + " Applying the split safely (DO NOT run a naive bulk update on a large", + file=output, + ) + print( + " collection — it bursts WAL, holds locks, and leaves dead-tuple bloat):", + file=output, + ) + print( + " 1. Copy the candidate field(s) into the side collection, keyed by _id,", + file=output, + ) + print( + " in _id-range BATCHES (e.g. 10k docs) — copy BEFORE removing.", + file=output, + ) + print( + " 2. Verify per batch that the side collection has the row, THEN $unset", + file=output, + ) + print( + " the field(s) from the hot collection for that batch.", + file=output, + ) + print( + " 3. After migration, VACUUM (FULL, ANALYZE) the hot table to reclaim", + file=output, + ) + print( + " space (takes an exclusive lock + ~2x disk — schedule a window).", + file=output, + ) + print( + " 4. Update the application to read the field(s) from the side", + file=output, + ) + print( + " collection on demand (extra _id lookup) — split only wins when the", + file=output, + ) + print( + " big field is read far less often than the scalars are scanned.", + file=output, + ) + + +def main() -> None: + render( + data=os.environ.get("REPORT_DATA", ""), + json_mode=os.environ.get("JSON_MODE", "0") == "1", + db_name=os.environ.get("DB_NAME", ""), + field_min=int(os.environ.get("FIELD_MIN", "1024")), + inline_threshold=int(os.environ.get("INLINE_THR", "2000")), + toast_ratio=float(os.environ.get("TOAST_RATIO", "0.5")), + min_kb=os.environ.get("MIN_KB", "256"), + ) + -data = os.environ.get("REPORT_DATA", "") -json_mode = os.environ.get("JSON_MODE", "0") == "1" -db_name = os.environ.get("DB_NAME", "") -field_min = int(os.environ.get("FIELD_MIN", "1024")) -inline_thr = int(os.environ.get("INLINE_THR", "2000")) -toast_ratio= float(os.environ.get("TOAST_RATIO", "0.5")) -min_kb = os.environ.get("MIN_KB", "256") - -findings = [] # flagged collections with split guidance -clean = [] # collections with no TOAST bloat - -for line in data.splitlines(): - if not line.strip(): - continue - parts = line.split("\t", 4) - if len(parts) < 5: - continue - coll, heap, toast, total, tail = parts - heap, toast, total = int(heap), int(toast), int(total) - ratio = (toast / (heap + toast)) if (heap + toast) > 0 else 0.0 - - if tail == "CLEAN": - clean.append({"collection": coll, "heap_bytes": heap, "toast_bytes": toast, - "toast_ratio": round(ratio, 4)}) - continue - - fj = json.loads(tail) - avg = fj.get("avg_obj_size", 0) or 0 - fields = fj.get("fields", []) - - # Split candidates: the largest fields that individually exceed the threshold. - # These are what get pushed to TOAST and should move to a side collection. - candidates = [f for f in fields if f.get("b", 0) >= field_min] - # If nothing crosses the threshold, still surface the single largest field so - # the operator sees where the weight is (bloat may be spread across fields). - largest_only = (not candidates) and fields - show = candidates if candidates else (fields[:1] if fields else []) - - moved_bytes = sum(f["b"] for f in candidates) - projected_hot = max(avg - moved_bytes, 0) - stays_inline = projected_hot < inline_thr - - def pct(b): - return round(100.0 * b / avg, 1) if avg > 0 else 0.0 - - findings.append({ - "collection": coll, - "heap_bytes": heap, - "toast_bytes": toast, - "total_bytes": total, - "toast_ratio": round(ratio, 4), - "avg_obj_size": avg, - "sampled_docs": fj.get("sampled", 0), - "split_candidates": [ - {"field": f["f"], "avg_bytes": f["b"], "pct_of_doc": pct(f["b"])} - for f in show - ], - "candidate_threshold_bytes": field_min, - "no_field_over_threshold": bool(largest_only), - "projected_hot_avg_bytes": projected_hot, - "projected_stays_inline": stays_inline, - "recommended_side_collection": coll + "_ext", - "side_collection_key": "_id", - "note": "ANALYSIS ONLY — no data moved. Apply the split yourself.", - }) - -if json_mode: - print(json.dumps({ - "db": db_name, - "flagged": len(findings), - "findings": findings, - "clean": clean, - "analysis_only": True, - })) - raise SystemExit(0) - -# ── Human report ──────────────────────────────────────────────────────────── -bar = "═" * 70 -print(bar) -print(" DocumentDB TOAST Split Advisor (ANALYSIS ONLY — does not modify data)") -print(f" Database: {db_name} flag TOAST ratio > {toast_ratio}, min {min_kb}KB, " - f"candidate field >= {field_min}B") -print(bar) -print() - -for f in findings: - hk, tk = f["heap_bytes"] // 1024, f["toast_bytes"] // 1024 - print(f" ⚠️ {f['collection']}") - print(f" heap={hk}KB TOAST={tk}KB (TOAST ratio {f['toast_ratio']}) " - f"avgObjSize={f['avg_obj_size']}B [sampled {f['sampled_docs']} docs]") - if f["no_field_over_threshold"]: - big = f["split_candidates"][0] if f["split_candidates"] else None - if big: - print(f" no single field >= {f['candidate_threshold_bytes']}B; largest is " - f"'{big['field']}' ({big['avg_bytes']}B, {big['pct_of_doc']}% of doc).") - print(" Bloat is spread across fields — review the schema rather than a" - " single split.") - else: - print(f" split candidate field(s) to MOVE into a side collection:") - for c in f["split_candidates"]: - print(f" • {c['field']:<24} ~{c['avg_bytes']}B/doc " - f"({c['pct_of_doc']}% of document)") - inline = ("stays INLINE (TOAST≈0) ✅" if f["projected_stays_inline"] - else "still large — consider moving more fields ⚠️") - print(f" after moving these, hot doc ≈ {f['projected_hot_avg_bytes']}B → {inline}") - print(f" → create '{f['recommended_side_collection']}' keyed by " - f"'{f['side_collection_key']}' holding those fields; keep " - f"'{f['collection']}' scalar-only.") - print() - -for c in clean: - print(f" ✅ {c['collection']} heap={c['heap_bytes']//1024}KB " - f"TOAST={c['toast_bytes']//1024}KB (ratio {c['toast_ratio']}) — no bloat") - -print() -print("─" * 70) -if not findings: - print(" ✅ No large-document/TOAST bloat detected — nothing to split.") -else: - print(f" Flagged {len(findings)} collection(s). This tool ONLY reports guidance.") - print() - print(" Applying the split safely (DO NOT run a naive bulk update on a large") - print(" collection — it bursts WAL, holds locks, and leaves dead-tuple bloat):") - print(" 1. Copy the candidate field(s) into the side collection, keyed by _id,") - print(" in _id-range BATCHES (e.g. 10k docs) — copy BEFORE removing.") - print(" 2. Verify per batch that the side collection has the row, THEN $unset") - print(" the field(s) from the hot collection for that batch.") - print(" 3. After migration, VACUUM (FULL, ANALYZE) the hot table to reclaim") - print(" space (takes an exclusive lock + ~2x disk — schedule a window).") - print(" 4. Update the application to read the field(s) from the side") - print(" collection on demand (extra _id lookup) — split only wins when the") - print(" big field is read far less often than the scalars are scanned.") +if __name__ == "__main__": + main() diff --git a/scripts/toast-split-advisor.ps1 b/scripts/toast-split-advisor.ps1 new file mode 100644 index 0000000..7f17abd --- /dev/null +++ b/scripts/toast-split-advisor.ps1 @@ -0,0 +1,4 @@ +$ErrorActionPreference = "Stop" +& (Join-Path $PSScriptRoot "invoke-diagnostic.ps1") ` + -Diagnostic "toast-split-advisor" @args +exit $LASTEXITCODE diff --git a/scripts/toast-split-advisor.py b/scripts/toast-split-advisor.py new file mode 100644 index 0000000..53e0173 --- /dev/null +++ b/scripts/toast-split-advisor.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 +from portable_diagnostic import main + +if __name__ == "__main__": + raise SystemExit(main("toast-split-advisor")) diff --git a/scripts/toast-split-advisor.sh b/scripts/toast-split-advisor.sh old mode 100644 new mode 100755 index 46fc3bd..46fc1d2 --- a/scripts/toast-split-advisor.sh +++ b/scripts/toast-split-advisor.sh @@ -32,6 +32,7 @@ set -uo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$SCRIPT_DIR/diagnostic-runtime.sh" CONTAINER_NAME="${CONTAINER_NAME:-documentdb-local}" PORT="${PORT:-10260}" @@ -70,12 +71,12 @@ done [[ -z "$PASSWORD" ]] && { echo "Error: no password. Set DB_PASSWORD or pass --password (local demo: export DB_PASSWORD=Test1234)." >&2; exit 1; } run_mongosh() { - docker exec "$CONTAINER_NAME" mongosh "localhost:${PORT}/${DB}" \ + docdb_exec_as "" mongosh "localhost:${PORT}/${DB}" \ -u "$DB_USER_" -p "$PASSWORD" --authenticationMechanism SCRAM-SHA-256 \ --tls --tlsAllowInvalidCertificates --quiet --eval "$1" 2>/dev/null } run_psql() { - docker exec "$CONTAINER_NAME" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ + docdb_exec_as "" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ -t --no-align -F $'\t' -c "$1" 2>/dev/null | grep -vE '^(SET|)$' } @@ -148,6 +149,11 @@ if [[ "${DEBUG:-0}" == "1" ]]; then echo "── DEBUG: BUFFER ──"; printf '%s' "$BUFFER" | cat -A; } >&2 fi +if [[ "${DOCDB_PORTABLE_RAW:-0}" == "1" ]]; then + printf '%s' "$BUFFER" + exit 0 +fi + # ── Build the report in Python (robust JSON assembly + float math) ────────── REPORT_DATA="$BUFFER" JSON_MODE="$JSON" DB_NAME="$DB" \ FIELD_MIN="$FIELD_MIN_BYTES" INLINE_THR="$TOAST_INLINE_THRESHOLD" \ diff --git a/scripts/toast_split_advisor_render.py b/scripts/toast_split_advisor_render.py new file mode 100644 index 0000000..0c4bf8e --- /dev/null +++ b/scripts/toast_split_advisor_render.py @@ -0,0 +1,15 @@ +"""Importable renderer shim for the hyphenated CLI module.""" + +from __future__ import annotations + +import importlib.util +from pathlib import Path + +_PATH = Path(__file__).with_name("toast-split-advisor-render.py") +_SPEC = importlib.util.spec_from_file_location("toast_split_advisor_renderer", _PATH) +if _SPEC is None or _SPEC.loader is None: + raise ImportError(f"cannot load renderer: {_PATH}") +_MODULE = importlib.util.module_from_spec(_SPEC) +_SPEC.loader.exec_module(_MODULE) + +render = _MODULE.render diff --git a/testing/README.md b/testing/README.md index 18eda1c..cf42e40 100644 --- a/testing/README.md +++ b/testing/README.md @@ -26,7 +26,7 @@ testing free-form LLM output. ``` seed fixture (known issues) ──► run kit script ──► assert vs contract - fixture.js scripts/*.sh expected-findings.yaml + fixture.js scripts/*.py or *.sh expected-findings.yaml ``` ## Layout @@ -84,11 +84,23 @@ cd testing && ../testing-venv/bin/python -m pytest scenarios/ecommerce-redundant cd testing && ../testing-venv/bin/python -m pytest --container my-docdb --keep-db ``` +On Windows, use Python or the matching PowerShell launcher: + +```powershell +python scripts\perf-advisor.py --db ecommerce --json +.\scripts\perf-advisor.ps1 --db ecommerce --json +``` + +The portable launcher requires Python 3.10+ and Docker Desktop, but does not +require Git Bash or WSL. It executes the existing diagnostic logic inside the +Linux DocumentDB container. Loop A uses these Python launchers on every +platform. + If the container isn't running, the whole suite **skips** (it does not fail). ## The regression loop (for skill/script changes) -1. Edit a skill rule or a `scripts/*.sh` diagnostic. +1. Edit a skill rule or a diagnostic under `scripts/` (`.sh`, `.py`, or `.ps1`). 2. Run `pytest`. Green = behavior preserved. 3. A red test means the change altered detection behavior. Either: - it's a **bug** → fix the script, or diff --git a/testing/harness/kit.py b/testing/harness/kit.py index 1e42efa..16e2877 100644 --- a/testing/harness/kit.py +++ b/testing/harness/kit.py @@ -18,6 +18,7 @@ import json import os import subprocess +import sys from dataclasses import dataclass, field from pathlib import Path @@ -152,17 +153,24 @@ def drop_db(db, container=CONTAINER): # --- Running agent-kit scripts -------------------------------------------- -def run_script(name, *args, want_json=False, timeout=300): - """Run scripts/ with args. If want_json, parse stdout as JSON. +def run_script(name, *args, want_json=False, timeout=300, portable=True): + """Run a diagnostic with args. If want_json, parse stdout as JSON. Passes the harness connection config to the script via environment (the scripts read DB_PASSWORD / DB_USER / CONTAINER_NAME / PORT / PG_PORT), so no - credentials are baked into either the scripts or this harness. + credentials are baked into either the scripts or this harness. Prefer the + portable Python entry point so Linux CI exercises the same host-side code + used by Windows and PowerShell. """ script = SCRIPTS_DIR / name if not script.exists(): raise FileNotFoundError(f"script not found: {script}") - cmd = ["bash", str(script), *args] + portable_script = script.with_suffix(".py") + cmd = ( + [sys.executable, str(portable_script), *args] + if portable and portable_script.exists() + else ["bash", str(script), *args] + ) env = { **os.environ, "DB_PASSWORD": DB_PASSWORD, diff --git a/testing/pytest.ini b/testing/pytest.ini index 5894db4..1056e73 100644 --- a/testing/pytest.ini +++ b/testing/pytest.ini @@ -21,3 +21,4 @@ markers = benchmarkconfig: Loop C — MSBench benchmark structure and registration (no container) routeefficiency: text-skills vs diagnostic-scripts route comparison (no container) advanceddata: committed ecommerce-advanced dataset generation and invariant checks + portable: cross-platform diagnostic launcher contracts (no container) diff --git a/testing/run.sh b/testing/run.sh old mode 100644 new mode 100755 diff --git a/testing/scenarios/json-contract/expected-findings.yaml b/testing/scenarios/json-contract/expected-findings.yaml index fb794a2..0e6d267 100644 --- a/testing/scenarios/json-contract/expected-findings.yaml +++ b/testing/scenarios/json-contract/expected-findings.yaml @@ -10,6 +10,9 @@ database: test_json_contract shape: document-bloat-advisor.sh: type: list + toast-split-advisor.sh: + type: object + keys: [db, flagged, findings, clean, analysis_only] index-redundancy-finder.sh: type: list db-config-advisor.sh: diff --git a/testing/scenarios/json-contract/tests/test_json_contract.py b/testing/scenarios/json-contract/tests/test_json_contract.py index b3c177d..6704cc9 100644 --- a/testing/scenarios/json-contract/tests/test_json_contract.py +++ b/testing/scenarios/json-contract/tests/test_json_contract.py @@ -61,6 +61,32 @@ def test_json_stdout_is_pure_json(json_outputs): ) +@pytest.mark.jsoncontract +@pytest.mark.parametrize("script", list(SHAPE)) +def test_bash_and_portable_entry_points_have_same_json_shape( + json_outputs, seeded_db, script +): + portable = json_outputs[script] + bash = kit.run_script( + script, + "--db", + seeded_db, + "--json", + want_json=True, + portable=False, + ) + assert bash.returncode == 0, ( + f"{script} Bash entry point failed (rc={bash.returncode})\n" + f"{bash.stderr[:400]}" + ) + assert bash.json is not None, ( + f"{script} Bash entry point emitted invalid JSON:\n{bash.stdout[:400]}" + ) + assert type(bash.json) is type(portable.json) + if isinstance(portable.json, dict): + assert set(bash.json) == set(portable.json) + + @pytest.mark.jsoncontract def test_perf_advisor_nested_shape(json_outputs): d = json_outputs["perf-advisor.sh"].json diff --git a/testing/scenarios/portable-cli/conftest.py b/testing/scenarios/portable-cli/conftest.py new file mode 100644 index 0000000..85f45f1 --- /dev/null +++ b/testing/scenarios/portable-cli/conftest.py @@ -0,0 +1,8 @@ +"""Portable CLI tests need no live database.""" + +import pytest + + +@pytest.fixture(scope="session", autouse=True) +def require_container(): + return None diff --git a/testing/scenarios/portable-cli/tests/test_portable_cli.py b/testing/scenarios/portable-cli/tests/test_portable_cli.py new file mode 100644 index 0000000..c42a254 --- /dev/null +++ b/testing/scenarios/portable-cli/tests/test_portable_cli.py @@ -0,0 +1,82 @@ +from __future__ import annotations + +import io +import subprocess +import sys +from pathlib import Path + +import pytest + +SCRIPTS = Path(__file__).resolve().parents[4] / "scripts" +sys.path.insert(0, str(SCRIPTS)) + +import portable_diagnostic as portable # noqa: E402 + + +def test_every_diagnostic_has_python_and_powershell_entry_points(): + for name in sorted(portable.SUPPORTED): + assert (SCRIPTS / f"{name}.sh").is_file() + assert (SCRIPTS / f"{name}.py").is_file() + assert (SCRIPTS / f"{name}.ps1").is_file() + + +def test_container_option_overrides_environment(monkeypatch): + monkeypatch.setenv("CONTAINER_NAME", "from-env") + assert portable.container_name(["--container", "from-cli"]) == "from-cli" + assert portable.container_name([]) == "from-env" + + +def test_docker_command_uses_argument_list_and_direct_mode(monkeypatch): + monkeypatch.setenv("DB_PASSWORD", "secret with spaces") + command = portable.docker_exec_command( + "docdb", + "/tmp/kit/perf-advisor.sh", + ["--db", "sales data", "--json"], + ) + assert command[:6] == [ + "docker", + "exec", + "-i", + "-u", + "documentdb", + "-e", + ] + assert "DOCDB_DIRECT=1" in command + assert "DB_PASSWORD=secret with spaces" in command + assert command[-3:] == ["--db", "sales data", "--json"] + + +def test_help_does_not_require_docker(): + output = io.StringIO() + assert portable.run_named("perf-advisor", ["--help"], stdout=output) == 0 + assert "without requiring Bash on the host" in output.getvalue() + + +def test_missing_docker_has_actionable_error(monkeypatch): + def missing(*args, **kwargs): + raise FileNotFoundError + + monkeypatch.setattr(subprocess, "run", missing) + with pytest.raises(portable.DiagnosticError, match="Docker CLI was not found"): + portable.run_named("perf-advisor", ["--db", "sales", "--json"]) + + +def test_powershell_wrappers_forward_all_arguments(): + for name in sorted(portable.SUPPORTED): + text = (SCRIPTS / f"{name}.ps1").read_text() + assert f'-Diagnostic "{name}"' in text + assert "@args" in text + assert "exit $LASTEXITCODE" in text + + +def test_crlf_shell_checkout_is_normalized(tmp_path): + source = tmp_path / "diagnostic.sh" + source.write_bytes(b"#!/usr/bin/env bash\r\nset -uo pipefail\r\necho ok\r\n") + output_dir = tmp_path / "normalized" + output_dir.mkdir() + + normalized = portable.normalized_shell_copy(source, output_dir) + + assert normalized.read_bytes() == ( + b"#!/usr/bin/env bash\nset -uo pipefail\necho ok\n" + ) From e0d06f8dd021e8972573929a7e7253814597a189 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 15 Sep 2026 14:57:19 -0700 Subject: [PATCH 43/52] cross-platform compatibility Add ps1 scripts and use python for routing --- benchmarks/documentdb-route-efficiency/run-comparison.sh | 0 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh | 0 benchmarks/documentdb-sdk-skills/build.sh | 0 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh | 0 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh | 0 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh | 0 .../tasks/orders-api-python/environment/reference/build.sh | 0 .../tasks/orders-api-python/environment/reference/run.sh | 0 .../tasks/orders-api-python/solution/solve.sh | 0 .../documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh | 0 benchmarks/documentdb-sdk-skills/verify-controls.sh | 0 install.sh | 0 knowledge-base/kb-route.sh | 0 scenarios/contoso/scaling-benchmark/scale-bench2.sh | 0 scenarios/contoso/scaling-benchmark/toast-index-bench.sh | 0 scenarios/contoso/seed.sh | 0 scenarios/ecommerce-advanced/scripts/check-determinism.sh | 0 scenarios/ecommerce/seed.sh | 0 scenarios/index-redundancy/seed.sh | 0 scripts/data-integrity-check.sh | 0 scripts/db-config-advisor.sh | 0 scripts/document-bloat-advisor.sh | 0 scripts/index-redundancy-finder.sh | 0 scripts/perf-advisor.sh | 0 scripts/toast-split-advisor.sh | 0 testing/run.sh | 0 26 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 benchmarks/documentdb-route-efficiency/run-comparison.sh mode change 100755 => 100644 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh mode change 100755 => 100644 benchmarks/documentdb-sdk-skills/verify-controls.sh mode change 100755 => 100644 install.sh mode change 100755 => 100644 knowledge-base/kb-route.sh mode change 100755 => 100644 scenarios/contoso/scaling-benchmark/scale-bench2.sh mode change 100755 => 100644 scenarios/contoso/scaling-benchmark/toast-index-bench.sh mode change 100755 => 100644 scenarios/contoso/seed.sh mode change 100755 => 100644 scenarios/ecommerce-advanced/scripts/check-determinism.sh mode change 100755 => 100644 scenarios/ecommerce/seed.sh mode change 100755 => 100644 scenarios/index-redundancy/seed.sh mode change 100755 => 100644 scripts/data-integrity-check.sh mode change 100755 => 100644 scripts/db-config-advisor.sh mode change 100755 => 100644 scripts/document-bloat-advisor.sh mode change 100755 => 100644 scripts/index-redundancy-finder.sh mode change 100755 => 100644 scripts/perf-advisor.sh mode change 100755 => 100644 scripts/toast-split-advisor.sh mode change 100755 => 100644 testing/run.sh diff --git a/benchmarks/documentdb-route-efficiency/run-comparison.sh b/benchmarks/documentdb-route-efficiency/run-comparison.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh b/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/build.sh b/benchmarks/documentdb-sdk-skills/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh b/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh old mode 100755 new mode 100644 diff --git a/benchmarks/documentdb-sdk-skills/verify-controls.sh b/benchmarks/documentdb-sdk-skills/verify-controls.sh old mode 100755 new mode 100644 diff --git a/install.sh b/install.sh old mode 100755 new mode 100644 diff --git a/knowledge-base/kb-route.sh b/knowledge-base/kb-route.sh old mode 100755 new mode 100644 diff --git a/scenarios/contoso/scaling-benchmark/scale-bench2.sh b/scenarios/contoso/scaling-benchmark/scale-bench2.sh old mode 100755 new mode 100644 diff --git a/scenarios/contoso/scaling-benchmark/toast-index-bench.sh b/scenarios/contoso/scaling-benchmark/toast-index-bench.sh old mode 100755 new mode 100644 diff --git a/scenarios/contoso/seed.sh b/scenarios/contoso/seed.sh old mode 100755 new mode 100644 diff --git a/scenarios/ecommerce-advanced/scripts/check-determinism.sh b/scenarios/ecommerce-advanced/scripts/check-determinism.sh old mode 100755 new mode 100644 diff --git a/scenarios/ecommerce/seed.sh b/scenarios/ecommerce/seed.sh old mode 100755 new mode 100644 diff --git a/scenarios/index-redundancy/seed.sh b/scenarios/index-redundancy/seed.sh old mode 100755 new mode 100644 diff --git a/scripts/data-integrity-check.sh b/scripts/data-integrity-check.sh old mode 100755 new mode 100644 diff --git a/scripts/db-config-advisor.sh b/scripts/db-config-advisor.sh old mode 100755 new mode 100644 diff --git a/scripts/document-bloat-advisor.sh b/scripts/document-bloat-advisor.sh old mode 100755 new mode 100644 diff --git a/scripts/index-redundancy-finder.sh b/scripts/index-redundancy-finder.sh old mode 100755 new mode 100644 diff --git a/scripts/perf-advisor.sh b/scripts/perf-advisor.sh old mode 100755 new mode 100644 diff --git a/scripts/toast-split-advisor.sh b/scripts/toast-split-advisor.sh old mode 100755 new mode 100644 diff --git a/testing/run.sh b/testing/run.sh old mode 100755 new mode 100644 From 5285d4e9ec2b6c19f4733dfe69d074cc094a9fb3 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 21 Sep 2026 18:06:41 +0000 Subject: [PATCH 44/52] adding missing files for testing framework --- ...-a-tests.yml => diagnostic-regression.yml} | 12 +-- ...hmark.yml => skill-efficacy-benchmark.yml} | 42 ++++------ ...loop-b-evals.yml => skill-evaluations.yml} | 10 +-- CHANGELOG.md | 8 +- README.md | 23 +++++- .../documentdb-route-efficiency/README.md | 2 +- .../run-comparison.sh | 0 .../shared/arms/install-arm.sh | 0 benchmarks/documentdb-sdk-skills/README.md | 2 +- benchmarks/documentdb-sdk-skills/build.sh | 0 .../controls/naive-python/build.sh | 0 .../controls/naive-python/run.sh | 0 .../documentdb-sdk-skills/docs/REPORT.md | 27 ++++--- .../shared/base/vendor-wheels.sh | 0 .../environment/reference/build.sh | 0 .../environment/reference/run.sh | 0 .../tasks/orders-api-python/solution/solve.sh | 0 .../tasks/orders-api-python/tests/test.sh | 0 .../documentdb-sdk-skills/verify-controls.sh | 0 docs/TESTING.md | 80 +++++++++---------- evals/README.md | 23 +++--- evals/documentdb-quality/quality-eval.yaml | 8 +- evals/documentdb-skills.experiment.yaml | 2 +- evals/documentdb-skills/eval.yaml | 2 +- evals/harness/token_usage.py | 14 ++-- evals/package.json | 2 +- install.sh | 0 knowledge-base/kb-route.sh | 0 .../contoso/scaling-benchmark/scale-bench2.sh | 0 .../scaling-benchmark/toast-index-bench.sh | 0 scenarios/contoso/seed.sh | 0 .../scripts/check-determinism.sh | 0 scenarios/ecommerce/seed.sh | 0 scenarios/index-redundancy/seed.sh | 0 scripts/data-integrity-check.sh | 0 scripts/db-config-advisor.sh | 0 scripts/document-bloat-advisor.sh | 0 scripts/index-redundancy-finder.sh | 0 scripts/perf-advisor.sh | 0 scripts/toast-split-advisor.sh | 0 testing/README.md | 11 +-- testing/harness/canonicalise.py | 2 +- testing/run.sh | 0 .../tests/test_benchmark_config.py | 37 ++++++++- .../tests/test_harvest_metrics.py | 25 +++--- testing/scenarios/determinism/SCENARIO.md | 2 +- .../determinism/expected-findings.yaml | 2 +- .../determinism/tests/test_determinism.py | 2 +- .../evals-config/tests/test_evals_config.py | 7 +- .../scenarios/remediation-effect/SCENARIO.md | 6 +- .../tests/test_remediation_effect.py | 2 +- .../scenarios/token-accounting/SCENARIO.md | 10 ++- .../scenarios/token-accounting/conftest.py | 4 +- .../tests/test_token_usage.py | 2 +- 54 files changed, 208 insertions(+), 161 deletions(-) rename .github/workflows/{loop-a-tests.yml => diagnostic-regression.yml} (91%) rename .github/workflows/{loop-c-benchmark.yml => skill-efficacy-benchmark.yml} (80%) rename .github/workflows/{loop-b-evals.yml => skill-evaluations.yml} (94%) mode change 100644 => 100755 benchmarks/documentdb-route-efficiency/run-comparison.sh mode change 100644 => 100755 benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/verify-controls.sh mode change 100644 => 100755 install.sh mode change 100644 => 100755 knowledge-base/kb-route.sh mode change 100644 => 100755 scenarios/contoso/scaling-benchmark/scale-bench2.sh mode change 100644 => 100755 scenarios/contoso/scaling-benchmark/toast-index-bench.sh mode change 100644 => 100755 scenarios/contoso/seed.sh mode change 100644 => 100755 scenarios/ecommerce-advanced/scripts/check-determinism.sh mode change 100644 => 100755 scenarios/ecommerce/seed.sh mode change 100644 => 100755 scenarios/index-redundancy/seed.sh mode change 100644 => 100755 scripts/data-integrity-check.sh mode change 100644 => 100755 scripts/db-config-advisor.sh mode change 100644 => 100755 scripts/document-bloat-advisor.sh mode change 100644 => 100755 scripts/index-redundancy-finder.sh mode change 100644 => 100755 scripts/perf-advisor.sh mode change 100644 => 100755 scripts/toast-split-advisor.sh mode change 100644 => 100755 testing/run.sh diff --git a/.github/workflows/loop-a-tests.yml b/.github/workflows/diagnostic-regression.yml similarity index 91% rename from .github/workflows/loop-a-tests.yml rename to .github/workflows/diagnostic-regression.yml index ab8bbd6..97c6482 100644 --- a/.github/workflows/loop-a-tests.yml +++ b/.github/workflows/diagnostic-regression.yml @@ -1,11 +1,11 @@ -name: Loop A — deterministic tests +name: Diagnostic Regression Suite -# Loop A is the deterministic half of the kit's testing: the diagnostic scripts -# are TOOLS, not agents, so given the same database state they must return the -# same answer every time. It is fast, free and runs on every PR. +# The Diagnostic Regression Suite is the deterministic half of the kit's +# testing. Diagnostic scripts are tools, not agents, so the same database state +# must return the same answer every time. It is fast, free and runs on every PR. # -# Loop B (cross-model skill evals) is deliberately NOT here — it costs AI -# credits. See loop-b-evals.yml, which is dispatch/schedule only. +# Cross-Model Skill Evaluations are deliberately NOT here — they cost AI +# credits. See skill-evaluations.yml, which is dispatch/schedule only. on: push: diff --git a/.github/workflows/loop-c-benchmark.yml b/.github/workflows/skill-efficacy-benchmark.yml similarity index 80% rename from .github/workflows/loop-c-benchmark.yml rename to .github/workflows/skill-efficacy-benchmark.yml index c301d2d..1403f84 100644 --- a/.github/workflows/loop-c-benchmark.yml +++ b/.github/workflows/skill-efficacy-benchmark.yml @@ -1,7 +1,8 @@ -name: Loop C — MSBench benchmark +name: MSBench Skill-Efficacy Benchmark -# Loop C is the PUBLICATION loop: a hermetic, externally-citable pass@k for the -# DocumentDB agent kit, run on Microsoft's MSBench platform. +# The MSBench Skill-Efficacy Benchmark is the publication layer: a hermetic, +# externally-citable pass@k for the DocumentDB agent kit, run on Microsoft's +# MSBench platform. # # Split by what each job needs: # @@ -82,37 +83,26 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Build the base image + - name: Stage inputs and build benchmark images working-directory: benchmarks/documentdb-sdk-skills - run: docker build -f shared/base/Dockerfile -t documentdb-orders-base:latest . - - - name: Build the task image - working-directory: benchmarks/documentdb-sdk-skills/tasks/orders-api-python - run: docker build -f environment/Dockerfile -t documentdb-orders-api-python:latest . + # build.sh stages the ignored .skills/ and .wheels/ build inputs before + # invoking Docker. Calling either Dockerfile directly fails in a clean + # checkout because those generated directories do not exist. + run: bash build.sh - name: Oracle must score 1 # The positive control. If this fails, the grader is impossible to # satisfy and every measured score is meaningless. - run: | - docker run --rm --name oracle documentdb-orders-api-python:latest \ - bash -c '/solution/solve.sh && /tests/test.sh; cat /logs/verifier/reward.txt' \ - | tee /tmp/oracle.log - grep -qx "1" <(tail -1 /tmp/oracle.log) || { - echo "::error::Oracle did not score 1 — the grader cannot be satisfied." - exit 1 - } + working-directory: benchmarks/documentdb-sdk-skills + # The image intentionally does not bake /solution or /tests. The + # control runner mounts them read-only and asserts the reward. + run: bash verify-controls.sh --only oracle - name: Empty submission must score 0 # The negative control. A grader that never fails is worthless, and this # is the cheapest possible proof that it can. - run: | - docker run --rm --name empty documentdb-orders-api-python:latest \ - bash -c '/tests/test.sh; cat /logs/verifier/reward.txt' \ - | tee /tmp/empty.log - if grep -qx "1" <(tail -1 /tmp/empty.log); then - echo "::error::An EMPTY /app scored 1. The grader does not discriminate." - exit 1 - fi + working-directory: benchmarks/documentdb-sdk-skills + run: bash verify-controls.sh --only empty # ------------------------------------------------------------------------- publish: @@ -166,7 +156,7 @@ jobs: if: always() run: | { - echo "## Loop C — MSBench" + echo "## MSBench Skill-Efficacy Benchmark" echo echo "Report the **delta** between \`documentdb-sdk-skills\` (kit" echo "installed, never mentioned) and \`documentdb-sdk-skills-noskills\`" diff --git a/.github/workflows/loop-b-evals.yml b/.github/workflows/skill-evaluations.yml similarity index 94% rename from .github/workflows/loop-b-evals.yml rename to .github/workflows/skill-evaluations.yml index 39a1203..c148f5f 100644 --- a/.github/workflows/loop-b-evals.yml +++ b/.github/workflows/skill-evaluations.yml @@ -1,7 +1,7 @@ -name: Loop B — cross-model skill evals +name: Cross-Model Skill Evaluations -# Loop B measures the text skills against real models: does the kit change what -# an agent does, and what does it cost? +# Cross-Model Skill Evaluations measure the text skills against real models: +# does the kit change what an agent does, and what does it cost? # # NEVER runs on push or pull_request. Every execution spends AI credits, and the # full matrix is 3 models x 2 arms x 5 runs = 30 trials PER STIMULUS. It is @@ -101,7 +101,7 @@ jobs: TOKEN: ${{ secrets.COPILOT_SDK_AUTH_TOKEN }} run: | if [ -z "$TOKEN" ]; then - echo "::error::COPILOT_SDK_AUTH_TOKEN is not configured. Loop B "\ + echo "::error::COPILOT_SDK_AUTH_TOKEN is not configured. Cross-Model Skill Evaluations "\ "cannot run real models without it. Add the secret, or use "\ "dry_run to validate the matrix for free." exit 1 @@ -146,7 +146,7 @@ jobs: if: always() run: | { - echo "## Loop B — cross-model results" + echo "## Cross-Model Skill Evaluation results" echo echo "Matrix: 3 models x {kit, control}. **Read the deltas, not the" echo "absolute scores** — an absolute pass-rate is uninterpretable" diff --git a/CHANGELOG.md b/CHANGELOG.md index 234cf52..8f0d5ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,10 +9,10 @@ diagnostic into the Linux DocumentDB container and runs the established logic there through a direct-command transport, preserving the existing flags and JSON contracts. -Loop A now invokes the portable Python entry points on Linux as well, includes -Bash-versus-portable JSON-shape parity checks, covers the TOAST split advisor's -JSON shape, and runs infrastructure-free launcher contracts on -`windows-latest`. +The Diagnostic Regression Suite now invokes the portable Python entry points +on Linux as well, includes Bash-versus-portable JSON-shape parity checks, +covers the TOAST split advisor's JSON shape, and runs infrastructure-free +launcher contracts on `windows-latest`. ## 2026-05-27 — Mark project as Public Preview diff --git a/README.md b/README.md index 8d3b8cc..a79123b 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,21 @@ Skills follow the [Agent Skills](https://agentskills.io/) format and the kit shi 👉 **Capabilities and skill catalog:** [`docs/SKILLS.md`](docs/SKILLS.md) +👉 **GEO strategy:** [`docs/GEO.md`](docs/GEO.md) — offline knowledge, +online/RAG retrieval, and Azure DocumentDB name disambiguation. + +👉 **Telemetry diagnosis plan:** [`docs/TELEMETRY-DIAGNOSTICS.md`](docs/TELEMETRY-DIAGNOSTICS.md) +— open-source telemetry, anomaly detection, and the Azure extension path. + +👉 **MongoDB migration plan:** [`docs/MONGODB-MIGRATION.md`](docs/MONGODB-MIGRATION.md) +— minimal, non-interactive, fail-closed migration with validation and rollback. + +👉 **Migration agent harness:** [`docs/MIGRATION-HARNESS.md`](docs/MIGRATION-HARNESS.md) +— one typed workflow for local/open-source and Azure cloud migration providers. + +👉 **Migration quick plan:** [`docs/MIGRATION-QUICK-PLAN.md`](docs/MIGRATION-QUICK-PLAN.md) +— concise scenario-to-technique matrix and harness summary. + ## Diagnostic Toolbox — Quickstart Beyond the text skills, the kit ships **deterministic diagnostic scripts** and a @@ -100,10 +115,10 @@ scripts/ # diagnostic toolbox — read-only analyzers + seeders knowledge-base/ # NL → script router (kb.json + kb_route.py) + demo scenarios/contoso/ # ready-to-run TOAST demo dataset (+ optional scaling-benchmark/) compat/ # MongoDB-compatible ecommerce project on DocumentDB -testing/ # Loop A — deterministic tests for the scripts (pytest) -evals/ # Loop B — cross-model skill evals (Vally) + cost accounting -benchmarks/ # Loop C — MSBench skill-efficacy benchmark + route-cost study -docs/ # SKILLS.md (catalog), DIAGNOSTICS.md (toolbox), TESTING.md +testing/ # Diagnostic Regression Suite — deterministic diagnostics (pytest) +evals/ # Cross-Model Skill Evaluations — routing, quality, and cost (Vally) +benchmarks/ # MSBench Skill-Efficacy Benchmark + route-cost study +docs/ # Skills, diagnostics, testing, installation, and GEO guidance ``` ## Installation diff --git a/benchmarks/documentdb-route-efficiency/README.md b/benchmarks/documentdb-route-efficiency/README.md index e8abe9c..84635fa 100644 --- a/benchmarks/documentdb-route-efficiency/README.md +++ b/benchmarks/documentdb-route-efficiency/README.md @@ -34,7 +34,7 @@ reset. This is the part most easily got wrong. | **Conversation history** | a second run could answer from the first run's reasoning | one fresh agent session per run; no multi-turn reuse across runs | | **Prompt cache** | a warm cache makes the same payload cost far less | arm order is **randomised per iteration**, so warmth cannot systematically favour one arm | | **Database state** | `$indexStats` / `idx_scan` counters accumulate; `index-redundancy-finder`'s *unused* findings depend on them | **a fresh database per run**, uniquely named, seeded from the same deterministic fixture | -| **Planner statistics** | stale stats flip query plans (this caused a real 2-in-7 flake in Loop A) | `ANALYZE` after every seed | +| **Planner statistics** | stale stats flip query plans (this caused a real 2-in-7 flake in Diagnostic Regression Suite) | `ANALYZE` after every seed | | **Filesystem** | a leftover script or `SKILL.md` silently converts one arm into the other | the arm installer **deletes the other route** and asserts it is gone | | **Answer file** | a stale `/output/finding.json` would be graded as this run's answer | removed before each run | diff --git a/benchmarks/documentdb-route-efficiency/run-comparison.sh b/benchmarks/documentdb-route-efficiency/run-comparison.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh b/benchmarks/documentdb-route-efficiency/shared/arms/install-arm.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/README.md b/benchmarks/documentdb-sdk-skills/README.md index 480fd31..86f3f9d 100644 --- a/benchmarks/documentdb-sdk-skills/README.md +++ b/benchmarks/documentdb-sdk-skills/README.md @@ -258,7 +258,7 @@ Verified by running, not by inspection: | Registration matches the live platform schema | ✅ read from the central repo; asserted by tests | | Task follows the Harbor layout | ✅ asserted by tests | | Instruction contains no hints | ✅ asserted (mutation-verified) | -| Cost metrics agree with the Loop B module | ✅ asserted (mutation-verified) | +| Cost metrics agree with the Cross-Model Skill Evaluations module | ✅ asserted (mutation-verified) | | Verifier parses as Python 3.10 (the image's interpreter) | ✅ asserted in CI | | Images build | ✅ base + task, offline from vendored wheels | | **Oracle scores 1** | ✅ **REWARD=1, 31 checks passed** | diff --git a/benchmarks/documentdb-sdk-skills/build.sh b/benchmarks/documentdb-sdk-skills/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh b/benchmarks/documentdb-sdk-skills/controls/naive-python/run.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/docs/REPORT.md b/benchmarks/documentdb-sdk-skills/docs/REPORT.md index c897435..a50a553 100644 --- a/benchmarks/documentdb-sdk-skills/docs/REPORT.md +++ b/benchmarks/documentdb-sdk-skills/docs/REPORT.md @@ -188,7 +188,7 @@ cat /tmp/out/custom_metrics.json | What does a task cost with vs without the kit? | ⬜ **unknown** | | Which check categories does the kit move? | ⬜ **unknown** | | `pass@k` reliability across attempts | ⬜ **unknown** | -| Does it hold across models? | ⬜ out of scope here (that is Loop B) | +| Does it hold across models? | ⬜ out of scope here (that is Cross-Model Skill Evaluations) | Blocking work, in order: @@ -281,7 +281,7 @@ solutions."* Three blind spots: Not here. The verifier runs offline in a task container with no model access, and the reward is binary, so a judge would fit badly. Qualitative assessment -belongs in **Loop B**, which drives real models and has native support for +belongs in **Cross-Model Skill Evaluations**, which drives real models and has native support for `panel` / prompt graders. **Status: built** — [`evals/documentdb-quality/quality-eval.yaml`](../../../evals/documentdb-quality/quality-eval.yaml) @@ -293,10 +293,10 @@ So the division of labour across the kit is now: | Claim | Evidence | Where | |---|---|---| -| "the scripts are reproducible" | byte-identical output | Loop A | -| "the right skill fires" | `skill-invocation`, binary | Loop B, `eval.yaml` | -| **"the guidance is better"** | **blinded judge panel** | **Loop B, `quality-eval.yaml`** | -| "the produced code follows best practice" | 30 deterministic checks | Loop C, this benchmark | +| "the scripts are reproducible" | byte-identical output | Diagnostic Regression Suite | +| "the right skill fires" | `skill-invocation`, binary | Cross-Model Skill Evaluations, `eval.yaml` | +| **"the guidance is better"** | **blinded judge panel** | **Cross-Model Skill Evaluations, `quality-eval.yaml`** | +| "the produced code follows best practice" | 30 deterministic checks | MSBench Skill-Efficacy Benchmark, this benchmark | This benchmark still cannot speak to guidance quality — that is not its job, and the quality eval now covers it. @@ -501,10 +501,10 @@ The per-instance token metrics travel inside those exports: the verifier writes --- -### Stage 7 — Guidance quality (Loop B, not MSBench) +### Stage 7 — Guidance quality (Cross-Model Skill Evaluations, not MSBench) MSBench grades produced code against a fixed rubric. It cannot say whether the -*advice* was good — that lives in Loop B: +*advice* was good — that lives in Cross-Model Skill Evaluations: ```bash cd evals && npm ci @@ -522,7 +522,8 @@ cd testing && pytest scenarios/benchmark-config scenarios/benchmark-metrics Validates the registration files, the Harbor layout, that `instruction.md` leaks no hints, that the verifier parses as Python 3.10 (the image's -interpreter), and that the cost metrics agree with Loop B's — all with no +interpreter), and that the cost metrics agree with the Cross-Model Skill +Evaluation cost module — all with no Docker, credentials or network. --- @@ -594,16 +595,16 @@ docker run --rm -v "$PWD/tests:/tests:ro" -v "$PWD/solution:/solution:ro" \ python3 benchmarks/documentdb-sdk-skills/shared/verifier/harvest_metrics.py \ --store ~/.copilot/session-store.db --output-dir /tmp/out && cat /tmp/out/custom_metrics.json -# the Loop B equivalent (same cost definitions, pinned equal by test) +# the Cross-Model Skill Evaluations equivalent (same cost definitions, pinned equal by test) python3 evals/harness/token_usage.py sessions --limit 10 # the guards on all of the above cd testing && pytest scenarios/benchmark-metrics scenarios/benchmark-config ``` -The two cost implementations (`harvest_metrics.py` for Loop C, -`evals/harness/token_usage.py` for Loop B) cannot share an import — the +The two cost implementations (`harvest_metrics.py` for MSBench Skill-Efficacy Benchmark, +`evals/harness/token_usage.py` for Cross-Model Skill Evaluations) cannot share an import — the harvester must run inside a minimal task container — so -`test_harvester_agrees_with_the_loop_b_cost_module` pins them to identical +`test_harvester_agrees_with_the_skill_evaluation_cost_module` pins them to identical output instead. If they ever diverge, that test fails rather than the two publishing different costs for the same run. diff --git a/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh b/benchmarks/documentdb-sdk-skills/shared/base/vendor-wheels.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/build.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/environment/reference/run.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/solution/solve.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh b/benchmarks/documentdb-sdk-skills/tasks/orders-api-python/tests/test.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/verify-controls.sh b/benchmarks/documentdb-sdk-skills/verify-controls.sh old mode 100644 new mode 100755 diff --git a/docs/TESTING.md b/docs/TESTING.md index a90ee4a..988ebc7 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -1,22 +1,21 @@ # Testing the agent kit -The kit is tested in **three loops**. The first two have opposite success -criteria — conflating them is the main design mistake to avoid — and the third -is the publication layer. - -| | **Loop A — deterministic** | **Loop B — non-deterministic** | -|---|---|---| -| Subject | `scripts/*.sh`, `knowledge-base/kb-route.sh` | the text skills (`skills/**`) driving an agent | -| Question | "Is the answer **stable and repeatable**?" | "Is the output **good**, and what did it **cost**?" | -| Success | identical canonicalised `--json` across N runs | beats its own control arm, at N≈5 | -| Runtime | ~2 min, **free** | minutes to hours, **costs AI credits** | -| Home | [`testing/`](../testing/) | [`evals/`](../evals/) | -| CI | every PR | dispatch / monthly only | - -Plus **Loop C — MSBench** ([`benchmarks/`](../benchmarks/documentdb-sdk-skills/README.md)): -a hermetic, externally-citable `pass@k` on Microsoft's benchmark platform. Slow, -gated, and the only one that produces a number for external publication. Loops A -and B are for iteration; Loop C is for citation. +The kit is tested in **three complementary suites**. The first two have +opposite success criteria — conflating them is the main design mistake to avoid +— and the third is the publication layer. + +| | **Diagnostic Regression Suite** | **Cross-Model Skill Evaluations** | **MSBench Skill-Efficacy Benchmark** | +|---|---|---|---| +| Subject | diagnostic scripts and router | text skills driving an agent | code produced by an agent | +| Question | "Is the answer stable and repeatable?" | "Is the output good, and what did it cost?" | "Does the produced application satisfy the fixed rubric?" | +| Success | identical canonicalised JSON and exact contracts | beats its control arm over repeated model runs | treatment/control `pass@k` delta | +| Runtime | ~2 min, free | minutes to hours, costs AI credits | slow, Docker/gated platform access | +| Home | [`testing/`](../testing/) | [`evals/`](../evals/) | [`benchmarks/`](../benchmarks/documentdb-sdk-skills/README.md) | +| CI | every PR | dispatch/monthly | PR validation, manual publication | + +The Diagnostic Regression Suite and Cross-Model Skill Evaluations support +iteration. The MSBench Skill-Efficacy Benchmark produces the externally +citable result. A diagnostic script is a **tool**: the same database must give the same answer every time. An agent is not: it must be measured as a distribution against a @@ -26,8 +25,8 @@ control. Applying either standard to the other produces nonsense. ## Prerequisites -Loop A's `static` scenarios need **nothing at all**. Everything else needs a -running container. +The `static` scenarios in the Diagnostic Regression Suite need **nothing at +all**. Everything else needs a running container. ```bash # 1. Start DocumentDB Local @@ -68,7 +67,7 @@ docker inspect documentdb-local \ --- -## Loop A — deterministic tests +## Diagnostic Regression Suite ```bash bash testing/run.sh # everything (~2 min) -> 86 passed @@ -86,7 +85,7 @@ cd testing && pytest scenarios/token-accounting scenarios/evals-config ``` They override the container fixture with a no-op. Use them for a fast check that -the cost metrics and the Loop B configs are still sane. +the cost metrics and the Cross-Model Skill Evaluations configs are still sane. ### Individual scenarios @@ -136,7 +135,7 @@ banner and measured latencies by design. --- -## Loop B — cross-model skill evals +## Cross-Model Skill Evaluations Runs on [Vally](https://microsoft.github.io/vally/). **Everything below the `lint`/`plan` line costs AI credits.** @@ -145,10 +144,10 @@ Runs on [Vally](https://microsoft.github.io/vally/). **Everything below the cd evals && npm ci ``` -Loop B has **two** evals: `documentdb-skills/eval.yaml` asks whether the right -skill fires (binary, reproducible), and `documentdb-quality/quality-eval.yaml` -asks whether the guidance is any good (blinded cross-model judge panel, not -reproducible by construction). +The suite has **two** evals: `documentdb-skills/eval.yaml` asks whether the +right skill fires (binary, reproducible), and +`documentdb-quality/quality-eval.yaml` asks whether the guidance is any good +(blinded cross-model judge panel, not reproducible by construction). ### Free — always do these first @@ -193,7 +192,7 @@ the agent to read; the treatment has them on disk but is **never told to use them**. For cost, that makes the input-token delta the literal price of the kit being available and used. -### Two rules for reading Loop B results +### Two rules for reading Cross-Model Skill Evaluations results 1. **Only deltas are publishable.** An absolute pass-rate is uninterpretable — "90% passed" means nothing without knowing what a bare agent scores on the @@ -234,7 +233,7 @@ Three things this table is built to stop you getting wrong: --- -## Loop C — MSBench benchmark +## MSBench Skill-Efficacy Benchmark The publication layer. See [`benchmarks/documentdb-sdk-skills/README.md`](../benchmarks/documentdb-sdk-skills/README.md). @@ -246,7 +245,8 @@ cd testing && pytest scenarios/benchmark-config scenarios/benchmark-metrics ``` Validates the registration files, the Harbor task layout, that the instruction -contains **no solution hints**, and that the cost metrics agree with Loop B's. +contains **no solution hints**, and that the cost metrics agree with the +Cross-Model Skill Evaluation cost module. No Docker, no MSBench access, no network. ### Local — needs Docker @@ -323,8 +323,8 @@ reproducible and hardest to satisfy accidentally. This is about fit, not about avoiding judges. LLM-as-a-judge is a normal grader and the right tool for qualities that are genuinely matters of degree (is the -explanation clear? is the guidance well-targeted?), which is why Loop B uses -one. It just cannot serve a scenario whose purpose is to prove **repeatability**, +explanation clear? is the guidance well-targeted?), which is why Cross-Model Skill Evaluations use one. It just cannot serve a +scenario whose purpose is to prove **repeatability**, because the same input can score differently across runs. Where an outcome is measurable in the system, measure it; where it is a judgement, judge it. @@ -348,15 +348,15 @@ everything" fails, and asserts the result set is unchanged. | Workflow | Trigger | Cost | |---|---|---| -| [`loop-a-tests.yml`](../.github/workflows/loop-a-tests.yml) | push, PR, dispatch | free | -| [`loop-b-evals.yml`](../.github/workflows/loop-b-evals.yml) | dispatch, monthly | credits | -| [`loop-c-benchmark.yml`](../.github/workflows/loop-c-benchmark.yml) | PR (validate only), dispatch | free / Docker / gated | - -Loop B's `validate` job (static guards + `vally lint` + matrix resolve) always -runs and is free, so a broken skill path is caught **before** any credits are -spent. That matters: `vally --dry-run` validates matrix structure but **not** -skill paths, and a treatment arm whose skills fail to load is silently just a -second control arm. +| [`diagnostic-regression.yml`](../.github/workflows/diagnostic-regression.yml) | push, PR, dispatch | free | +| [`skill-evaluations.yml`](../.github/workflows/skill-evaluations.yml) | dispatch, monthly | credits | +| [`skill-efficacy-benchmark.yml`](../.github/workflows/skill-efficacy-benchmark.yml) | PR (validate only), dispatch | free / Docker / gated | + +The `validate` job in Cross-Model Skill Evaluations (static guards + +`vally lint` + matrix resolution) always runs and is free, so a broken skill +path is caught **before** any credits are spent. That matters: +`vally --dry-run` validates matrix structure but **not** skill paths, and a +treatment arm whose skills fail to load is silently just a second control arm. Use the `dry_run` input to validate the matrix from CI for free. diff --git a/evals/README.md b/evals/README.md index d2eb395..c8272e0 100644 --- a/evals/README.md +++ b/evals/README.md @@ -1,17 +1,17 @@ -# `evals/` — Loop B: skill-efficacy evaluation +# Cross-Model Skill Evaluations > **Two folders, two questions.** This repo tests two fundamentally different > things, and conflating them is the mistake to avoid: > -> | Folder | Loop | Question | Success looks like | +> | Folder | Suite | Question | Success looks like | > |---|---|---|---| -> | [`../testing/`](../testing/) | **A — deterministic** | Do the **diagnostic scripts** return the *same* answer every time? | byte-identical `--json` across 3 runs | -> | **`evals/`** (here) | **B — non-deterministic** | Do the **text skills** make an agent produce *better* output, and at what cost? | higher quality / lower cost than a control run | +> | [`../testing/`](../testing/) | **Diagnostic Regression Suite** | Do the **diagnostic scripts** return the *same* answer every time? | byte-identical `--json` across 3 runs | +> | **`evals/`** (here) | **Cross-Model Skill Evaluations** | Do the **text skills** make an agent produce *better* output, and at what cost? | higher quality / lower cost than a control run | > -> Loop A is free, fast, and runs on every PR. Loop B costs AI credits and is run -> deliberately. +> The Diagnostic Regression Suite is free, fast, and runs on every PR. +> Cross-Model Skill Evaluations cost AI credits and are run deliberately. -Loop B is built on **[Vally](https://aka.ms/vally)** (`@microsoft/vally-cli`, +Cross-Model Skill Evaluations are built on **[Vally](https://aka.ms/vally)** (`@microsoft/vally-cli`, MIT, pinned in [`package.json`](package.json)) — Microsoft's evaluation platform for AI agents. Vally gives us, natively: multi-model runs, skills on/off variants, an objective **`skill-invocation`** grader, real token/AI-credit @@ -129,15 +129,16 @@ criterion, so style can never outvote accuracy. ## Grading policy — match the grader to the claim -LLM-as-a-judge is a legitimate and widely used grader, and Loop B relies on one -for the qualitative dimensions no assertion can capture. The ordering below is +LLM-as-a-judge is a legitimate and widely used grader, and Cross-Model Skill +Evaluations rely on one for the qualitative dimensions no assertion can +capture. The ordering below is about **fit**: prefer a criterion that is reproducible and hard to satisfy by accident, and reach for a judge when the thing being graded is genuinely a matter of degree rather than a fact about the system. Prefer, in order: -1. deterministic / exact match → `../testing/` (Loop A) +1. deterministic / exact match → `../testing/` (Diagnostic Regression Suite) 2. **measured before/after delta** → apply the advice, re-measure (`run-command`) 3. structural assertion on the artifact → `program`, `file-matches` 4. semantic equivalence vs a golden output @@ -161,4 +162,4 @@ identifier) **by default**. Always export `VALLY_TELEMETRY_OPTOUT=1` / skills vs control, `--runs 5` (`vally experiment` + `vally compare`) - Before/after graders that apply a recommended index and re-measure `explain()`, paired with `index-redundancy-finder.sh --json` as an anti-gaming guard -- CI: Loop A every PR; Loop B on dispatch/schedule +- CI: Diagnostic Regression Suite every PR; Cross-Model Skill Evaluations on dispatch/schedule diff --git a/evals/documentdb-quality/quality-eval.yaml b/evals/documentdb-quality/quality-eval.yaml index 3a7ab71..c5003e5 100644 --- a/evals/documentdb-quality/quality-eval.yaml +++ b/evals/documentdb-quality/quality-eval.yaml @@ -1,12 +1,12 @@ -# quality-eval.yaml — Loop B: is the GUIDANCE any good? +# quality-eval.yaml — Cross-Model Skill Evaluations: is the GUIDANCE any good? # # WHY THIS FILE EXISTS # -------------------- # Everything else the kit measures is conformance: # -# Loop A (testing/) do the scripts return a stable answer? -# Loop B (eval.yaml) does the RIGHT SKILL FIRE for a given phrasing? -# Loop C (benchmarks/) does the produced code satisfy 30 fixed checks? +# Diagnostic Regression Suite (testing/) do the scripts return a stable answer? +# Cross-Model Skill Evaluations (eval.yaml) does the RIGHT SKILL FIRE for a given phrasing? +# MSBench Skill-Efficacy Benchmark (benchmarks/) does the produced code satisfy 30 fixed checks? # # None of those can tell you whether the advice was actually GOOD. A skill can # trigger perfectly and give poor guidance; code can satisfy every rule in our diff --git a/evals/documentdb-skills.experiment.yaml b/evals/documentdb-skills.experiment.yaml index 034ddc0..188bddf 100644 --- a/evals/documentdb-skills.experiment.yaml +++ b/evals/documentdb-skills.experiment.yaml @@ -1,4 +1,4 @@ -# documentdb-skills.experiment.yaml — Loop B cross-model matrix +# documentdb-skills.experiment.yaml — Cross-Model Skill Evaluations cross-model matrix # # THE QUESTION THIS ANSWERS # ------------------------- diff --git a/evals/documentdb-skills/eval.yaml b/evals/documentdb-skills/eval.yaml index 9eebadf..63728df 100644 --- a/evals/documentdb-skills/eval.yaml +++ b/evals/documentdb-skills/eval.yaml @@ -1,4 +1,4 @@ -# eval.yaml — DocumentDB skill-efficacy eval (Loop B) +# eval.yaml — DocumentDB skill-efficacy eval (Cross-Model Skill Evaluations) # # Phase 1 scope: does the RIGHT skill activate for a given phrasing, and — just # as important — does NO DocumentDB skill activate for an unrelated question? diff --git a/evals/harness/token_usage.py b/evals/harness/token_usage.py index bf1442d..c2581bd 100644 --- a/evals/harness/token_usage.py +++ b/evals/harness/token_usage.py @@ -1,13 +1,13 @@ #!/usr/bin/env python3 -"""Task-level token / AI-credit accounting for Loop B. +"""Task-level token / AI-credit accounting for Cross-Model Skill Evaluations. WHY THIS EXISTS --------------- -Loop B asks two questions about the text skills: *is the output good* and *what -did it cost*. Vally answers both, but only when a real model executor is -available. This module answers the cost half from data the Copilot CLI already -writes locally, so cost can be measured today and cross-checked against Vally -later. It is stdlib-only and read-only. +Cross-Model Skill Evaluations ask two questions about the text skills: *is the +output good* and *what did it cost*. Vally answers both, but only when a real +model executor is available. This module answers the cost half from data the +Copilot CLI already writes locally, so cost can be measured today and +cross-checked against Vally later. It is stdlib-only and read-only. Source: ``~/.copilot/session-store.db`` (SQLite), table ``assistant_usage_events`` — one row per model request: @@ -308,7 +308,7 @@ def render_table(comparison: dict) -> str: # -------------------------------------------------------------------------- def main(argv=None) -> int: p = argparse.ArgumentParser( - description="Task-level token / AI-credit accounting for Loop B." + description="Task-level token / AI-credit accounting for Cross-Model Skill Evaluations." ) p.add_argument("--db", type=Path, default=DEFAULT_DB, help=f"session store path (default: {DEFAULT_DB})") diff --git a/evals/package.json b/evals/package.json index ea4a90b..c81a00e 100644 --- a/evals/package.json +++ b/evals/package.json @@ -1,7 +1,7 @@ { "name": "documentdb-agent-kit-evals", "private": true, - "description": "Loop B \u2014 skill-efficacy evals for the DocumentDB agent kit, run with Vally", + "description": "Cross-Model Skill Evaluations \u2014 skill-efficacy evals for the DocumentDB agent kit, run with Vally", "scripts": { "lint": "vally lint -e documentdb-skills/eval.yaml", "eval:mock": "vally eval -e documentdb-skills/eval.yaml --executor mock", diff --git a/install.sh b/install.sh old mode 100644 new mode 100755 diff --git a/knowledge-base/kb-route.sh b/knowledge-base/kb-route.sh old mode 100644 new mode 100755 diff --git a/scenarios/contoso/scaling-benchmark/scale-bench2.sh b/scenarios/contoso/scaling-benchmark/scale-bench2.sh old mode 100644 new mode 100755 diff --git a/scenarios/contoso/scaling-benchmark/toast-index-bench.sh b/scenarios/contoso/scaling-benchmark/toast-index-bench.sh old mode 100644 new mode 100755 diff --git a/scenarios/contoso/seed.sh b/scenarios/contoso/seed.sh old mode 100644 new mode 100755 diff --git a/scenarios/ecommerce-advanced/scripts/check-determinism.sh b/scenarios/ecommerce-advanced/scripts/check-determinism.sh old mode 100644 new mode 100755 diff --git a/scenarios/ecommerce/seed.sh b/scenarios/ecommerce/seed.sh old mode 100644 new mode 100755 diff --git a/scenarios/index-redundancy/seed.sh b/scenarios/index-redundancy/seed.sh old mode 100644 new mode 100755 diff --git a/scripts/data-integrity-check.sh b/scripts/data-integrity-check.sh old mode 100644 new mode 100755 diff --git a/scripts/db-config-advisor.sh b/scripts/db-config-advisor.sh old mode 100644 new mode 100755 diff --git a/scripts/document-bloat-advisor.sh b/scripts/document-bloat-advisor.sh old mode 100644 new mode 100755 diff --git a/scripts/index-redundancy-finder.sh b/scripts/index-redundancy-finder.sh old mode 100644 new mode 100755 diff --git a/scripts/perf-advisor.sh b/scripts/perf-advisor.sh old mode 100644 new mode 100755 diff --git a/scripts/toast-split-advisor.sh b/scripts/toast-split-advisor.sh old mode 100644 new mode 100755 diff --git a/testing/README.md b/testing/README.md index cf42e40..2154630 100644 --- a/testing/README.md +++ b/testing/README.md @@ -1,10 +1,11 @@ -# DocumentDB Agent-Kit — Regression Test Framework +# Diagnostic Regression Suite -> **This is Loop A — the deterministic half.** The kit tests two different +> **This is the Diagnostic Regression Suite — the deterministic half.** The kit tests two different > things: `testing/` (here) proves the **diagnostic scripts** return the *same* > answer every time, while [`../evals/`](../evals/) measures whether the **text > skills** make an agent produce *better* output, and at what token cost. -> Loop A is free and runs on every PR; Loop B costs AI credits. +> The Diagnostic Regression Suite is free and runs on every PR; +> Cross-Model Skill Evaluations cost AI credits. > See [`scenarios/determinism/`](scenarios/determinism/) for the repeatability > contract. @@ -93,8 +94,8 @@ python scripts\perf-advisor.py --db ecommerce --json The portable launcher requires Python 3.10+ and Docker Desktop, but does not require Git Bash or WSL. It executes the existing diagnostic logic inside the -Linux DocumentDB container. Loop A uses these Python launchers on every -platform. +Linux DocumentDB container. The Diagnostic Regression Suite uses these Python +launchers on every platform. If the container isn't running, the whole suite **skips** (it does not fail). diff --git a/testing/harness/canonicalise.py b/testing/harness/canonicalise.py index d684faa..5e21e29 100644 --- a/testing/harness/canonicalise.py +++ b/testing/harness/canonicalise.py @@ -1,4 +1,4 @@ -"""Canonicalisation helpers for the determinism loop (Loop A). +"""Canonicalisation helpers for the Diagnostic Regression Suite. A diagnostic script is "deterministic" when the SAME database state yields the SAME `--json` result. Two kinds of legitimate drift must be normalised away diff --git a/testing/run.sh b/testing/run.sh old mode 100644 new mode 100755 diff --git a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py index bd133af..eb34ec2 100644 --- a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py +++ b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py @@ -1,4 +1,4 @@ -"""Static validation of the MSBench benchmark (Loop C). +"""Static validation of the MSBench benchmark (MSBench Skill-Efficacy Benchmark). WHY THIS EXISTS --------------- @@ -32,6 +32,9 @@ REG = BENCH / "msbench-registration" TREATMENT = "documentdb-sdk-skills" CONTROL = "documentdb-sdk-skills-noskills" +BENCHMARK_WORKFLOW = ( + kit.REPO_DIR / ".github" / "workflows" / "skill-efficacy-benchmark.yml" +) # The keys the live platform's registry.json files carry. Cosmos' registration # has none of this — it predates the requirement — which is exactly why it is @@ -494,6 +497,38 @@ def test_verify_controls_script_checks_both_directions(): assert "exit 1" in script, "the script must fail the build when a control deviates" +def test_oracle_workflow_uses_the_supported_build_entrypoint(): + """A clean checkout has no generated .skills/ or .wheels/ directories. + + The base Dockerfile copies both, so invoking `docker build` directly from + the workflow fails before the oracle runs. `build.sh` is the single + supported entry point because it stages both inputs and copies the wheels + into the task-image context. + """ + workflow = BENCHMARK_WORKFLOW.read_text() + build_step = workflow.index("run: bash build.sh") + oracle_step = workflow.index("- name: Oracle must score 1") + + assert build_step < oracle_step + assert "docker build -f shared/base/Dockerfile" not in workflow + assert "docker build -f environment/Dockerfile" not in workflow + assert "run: bash verify-controls.sh --only oracle" in workflow + assert "run: bash verify-controls.sh --only empty" in workflow + assert "docker run --rm --name oracle" not in workflow + assert "docker run --rm --name empty" not in workflow + + +def test_build_entrypoint_stages_every_generated_docker_input(): + dockerfile = (BENCH / "shared" / "base" / "Dockerfile").read_text() + build = (BENCH / "build.sh").read_text() + + assert "COPY .wheels " in dockerfile + assert "COPY .skills " in dockerfile + assert 'bash shared/base/vendor-wheels.sh .wheels' in build + assert 'cp -r "$REPO/skills/." .skills/' in build + assert 'cp -r .wheels tasks/orders-api-python/.wheels' in build + + # --------------------------------------------------------------------------- # committed results # diff --git a/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py b/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py index 9a27404..5129720 100644 --- a/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py +++ b/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py @@ -1,4 +1,4 @@ -"""Contract tests for the MSBench cost-metric harvester (Loop C). +"""Contract tests for the MSBench cost-metric harvester (MSBench Skill-Efficacy Benchmark). WHY THIS SCENARIO EXISTS ------------------------ @@ -10,12 +10,13 @@ Two failure modes make those numbers dangerous rather than merely absent, and both are pinned here: -1. **Silent divergence from the Loop B cost module.** We now have two places - that compute "what did the agent cost" — `evals/harness/token_usage.py` - (Loop B) and `benchmarks/.../harvest_metrics.py` (Loop C). They must agree, - or we will publish two different cost figures for the same run. They cannot - share an import (the harvester has to run inside a minimal task container), - so consistency is pinned by TEST instead of by import path. +1. **Silent divergence from the Cross-Model Skill Evaluation cost module.** + We now have two places that compute "what did the agent cost" — + `evals/harness/token_usage.py` (Cross-Model Skill Evaluations) and + `benchmarks/.../harvest_metrics.py` (MSBench Skill-Efficacy Benchmark). + They must agree, or we will publish two different cost figures for the same + run. They cannot share an import (the harvester has to run inside a minimal + task container), so consistency is pinned by TEST instead of by import path. 2. **A zero that means "not measured".** If harvesting fails, a missing metric is honest; a silent 0 corrupts every average computed over it. @@ -109,7 +110,7 @@ def _reward(tmp_path, value) -> Path: # --------------------------------------------------------------------------- # THE consistency guarantee # --------------------------------------------------------------------------- -def test_harvester_agrees_with_the_loop_b_cost_module(store): +def test_harvester_agrees_with_the_skill_evaluation_cost_module(store): """The two cost implementations must produce identical numbers. They deliberately do not share code — the harvester must be self-contained @@ -120,7 +121,7 @@ def test_harvester_agrees_with_the_loop_b_cost_module(store): conn, tmp = tu._open_readonly(store) try: - loop_b = tu._derive(dict(conn.execute( + skill_evaluation = tu._derive(dict(conn.execute( tu._ROLLUP_SQL.replace("WHERE session_id = ?", "") ).fetchone())) finally: @@ -136,9 +137,9 @@ def test_harvester_agrees_with_the_loop_b_cost_module(store): ("agent_turns", "turns"), ("agent_requests", "requests"), ]: - assert harvested[hkey] == pytest.approx(loop_b[tkey]), ( + assert harvested[hkey] == pytest.approx(skill_evaluation[tkey]), ( f"cost definitions have drifted: harvest_metrics.{hkey}=" - f"{harvested[hkey]} but token_usage.{tkey}={loop_b[tkey]}" + f"{harvested[hkey]} but token_usage.{tkey}={skill_evaluation[tkey]}" ) @@ -295,7 +296,7 @@ def test_reader_does_not_mutate_the_session_store(store): # --------------------------------------------------------------------------- -# report generator (Loop C effectiveness report) +# report generator (MSBench Skill-Efficacy Benchmark effectiveness report) # --------------------------------------------------------------------------- import importlib.util as _ilu from pathlib import Path as _Path diff --git a/testing/scenarios/determinism/SCENARIO.md b/testing/scenarios/determinism/SCENARIO.md index a3e2e8e..4c8b7d9 100644 --- a/testing/scenarios/determinism/SCENARIO.md +++ b/testing/scenarios/determinism/SCENARIO.md @@ -1,4 +1,4 @@ -# Scenario: Determinism (Loop A) +# Scenario: Determinism (Diagnostic Regression Suite) > **The deterministic half of the kit's testing.** The diagnostic scripts are > *tools*, not agents: given the same database state they must return the same diff --git a/testing/scenarios/determinism/expected-findings.yaml b/testing/scenarios/determinism/expected-findings.yaml index f25060c..69d3e1a 100644 --- a/testing/scenarios/determinism/expected-findings.yaml +++ b/testing/scenarios/determinism/expected-findings.yaml @@ -1,4 +1,4 @@ -# expected-findings.yaml — determinism (Loop A) +# expected-findings.yaml — determinism (Diagnostic Regression Suite) # # Contract: every diagnostic script, given the SAME database state, must return # the SAME `--json` result on repeated runs. diff --git a/testing/scenarios/determinism/tests/test_determinism.py b/testing/scenarios/determinism/tests/test_determinism.py index 8e3a4f4..e15b132 100644 --- a/testing/scenarios/determinism/tests/test_determinism.py +++ b/testing/scenarios/determinism/tests/test_determinism.py @@ -1,4 +1,4 @@ -"""Determinism contract (Loop A) — the deterministic half of the kit's testing. +"""Determinism contract (Diagnostic Regression Suite) — the deterministic half of the kit's testing. The diagnostic scripts are *tools*, not agents: given the same database state they must return the same answer every time. This scenario runs each script diff --git a/testing/scenarios/evals-config/tests/test_evals_config.py b/testing/scenarios/evals-config/tests/test_evals_config.py index 24fba34..ebd20f9 100644 --- a/testing/scenarios/evals-config/tests/test_evals_config.py +++ b/testing/scenarios/evals-config/tests/test_evals_config.py @@ -1,4 +1,4 @@ -"""Static validation of the Loop B eval + experiment configs. +"""Static validation of the Cross-Model Skill Evaluations eval + experiment configs. WHY THIS EXISTS --------------- @@ -191,8 +191,9 @@ def test_every_stimulus_has_a_grader(spec): def test_graders_are_objective(spec): """Phase 1 stimuli should be graded reproducibly. - Not a prohibition on LLM judges — they are a normal grader and Loop B is - expected to use one for qualitative dimensions. But the Phase 1 stimuli are + Not a prohibition on LLM judges — they are a normal grader and + Cross-Model Skill Evaluations are expected to use one for qualitative + dimensions. But the Phase 1 stimuli are all skill-TRIGGERING checks, which have a definite right answer, so a reproducible grader is the correct fit and a judge here would add cost and variance for nothing. diff --git a/testing/scenarios/remediation-effect/SCENARIO.md b/testing/scenarios/remediation-effect/SCENARIO.md index 275c5d9..b73843c 100644 --- a/testing/scenarios/remediation-effect/SCENARIO.md +++ b/testing/scenarios/remediation-effect/SCENARIO.md @@ -1,12 +1,12 @@ # Scenario: remediation effect (before/after grading) -**Loop:** A (deterministic) +**Suite:** Diagnostic Regression Suite **Grading rung:** *measured before/after delta* — chosen because this scenario's job is to prove determinism, which a judge cannot do. ## The idea -LLM-as-a-judge is a normal and useful grader, and this kit uses it in Loop B for +LLM-as-a-judge is a normal and useful grader, and this kit uses it in Cross-Model Skill Evaluations for things that are genuinely a matter of degree — is the explanation clear, is the guidance well-targeted. What it cannot give us is **repeatability**: the same input can score differently across runs, so a judge is the wrong instrument for @@ -24,7 +24,7 @@ The rule of thumb across the kit is to pick the strongest criterion the scenario |---|---| | The outcome is measurable in the system (plans, counters, result sets) | measure it — this scenario | | The outcome is structural (an index exists, a key order) | assert it | -| The outcome is irreducibly qualitative (was the advice well explained?) | LLM-as-a-judge, blinded and cross-model (Loop B) | +| The outcome is irreducibly qualitative (was the advice well explained?) | LLM-as-a-judge, blinded and cross-model (Cross-Model Skill Evaluations) | Judges are used where they are the right tool; here a measurement was available, and a measurement is what a determinism proof needs. diff --git a/testing/scenarios/remediation-effect/tests/test_remediation_effect.py b/testing/scenarios/remediation-effect/tests/test_remediation_effect.py index 67d1f60..e284af7 100644 --- a/testing/scenarios/remediation-effect/tests/test_remediation_effect.py +++ b/testing/scenarios/remediation-effect/tests/test_remediation_effect.py @@ -4,7 +4,7 @@ ------------------------ "Did the skill help?" is often answered by asking a model to judge the answer, and that is a reasonable grader for qualities that are matters of degree. This -kit uses one in Loop B for exactly that. +kit uses one in Cross-Model Skill Evaluations for exactly that. It is the wrong instrument HERE, though, for a specific reason: this suite lives in the deterministic loop, and its job is to show the diagnostic scripts return diff --git a/testing/scenarios/token-accounting/SCENARIO.md b/testing/scenarios/token-accounting/SCENARIO.md index 86961bf..3ac3bbb 100644 --- a/testing/scenarios/token-accounting/SCENARIO.md +++ b/testing/scenarios/token-accounting/SCENARIO.md @@ -1,6 +1,7 @@ # Scenario: token accounting -**Loop:** A (deterministic) — but it guards a **Loop B** component. +**Suite:** Diagnostic Regression Suite — guarding a Cross-Model Skill +Evaluations component. **Infrastructure:** none. No container, no credentials, no network. ## What it guards @@ -31,9 +32,10 @@ Two further properties are asserted because they were easy to get wrong: ## Why it lives in `testing/` and not `evals/` -The module belongs to Loop B (it measures agent cost), but it is pure stdlib -arithmetic over a synthetic SQLite file — perfectly deterministic. Loop A is -where deterministic things are proven, so that is where its contract lives. +The module belongs to Cross-Model Skill Evaluations (it measures agent cost), +but it is pure stdlib arithmetic over a synthetic SQLite file — perfectly +deterministic. The Diagnostic Regression Suite is where deterministic things +are proven, so that is where its contract lives. The scenario's `conftest.py` overrides the root `require_container` fixture with a no-op, which is what makes it infrastructure-free. That is deliberate: it lets diff --git a/testing/scenarios/token-accounting/conftest.py b/testing/scenarios/token-accounting/conftest.py index 9c5bf50..acfccd9 100644 --- a/testing/scenarios/token-accounting/conftest.py +++ b/testing/scenarios/token-accounting/conftest.py @@ -14,8 +14,8 @@ import pytest -# The module under test lives in the Loop B folder (it measures agent cost), but -# it is plain stdlib Python, so Loop A can and should regression-test it. +# The module under test lives in the Cross-Model Skill Evaluations folder (it measures agent cost), but +# it is plain stdlib Python, so Diagnostic Regression Suite can and should regression-test it. HARNESS = Path(__file__).resolve().parents[3] / "evals" / "harness" sys.path.insert(0, str(HARNESS)) diff --git a/testing/scenarios/token-accounting/tests/test_token_usage.py b/testing/scenarios/token-accounting/tests/test_token_usage.py index 659e06e..4c1db72 100644 --- a/testing/scenarios/token-accounting/tests/test_token_usage.py +++ b/testing/scenarios/token-accounting/tests/test_token_usage.py @@ -1,4 +1,4 @@ -"""Contract tests for evals/harness/token_usage.py (Loop B cost accounting). +"""Contract tests for evals/harness/token_usage.py (Cross-Model Skill Evaluations cost accounting). These tests exist because the cost numbers are the ones that will end up in a GTM claim, and a quietly wrong denominator is the easiest way to publish a false From 19c69f81e1655f7060e0b6e2daa1db34a6bd59f7 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 21 Sep 2026 18:34:41 +0000 Subject: [PATCH 45/52] use commit hash in yml --- .github/workflows/skill-efficacy-benchmark.yml | 2 +- .../benchmark-config/tests/test_benchmark_config.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/skill-efficacy-benchmark.yml b/.github/workflows/skill-efficacy-benchmark.yml index 1403f84..d6d20b0 100644 --- a/.github/workflows/skill-efficacy-benchmark.yml +++ b/.github/workflows/skill-efficacy-benchmark.yml @@ -119,7 +119,7 @@ jobs: python-version: "3.12" - name: Azure login - uses: azure/login@v2 + uses: azure/login@7184910d9eb2b1c5e48f7073824a90609bb9b6d6 # v2.3.1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} diff --git a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py index eb34ec2..3bd6116 100644 --- a/testing/scenarios/benchmark-config/tests/test_benchmark_config.py +++ b/testing/scenarios/benchmark-config/tests/test_benchmark_config.py @@ -19,6 +19,7 @@ from __future__ import annotations import json +import re import tomllib from pathlib import Path @@ -518,6 +519,18 @@ def test_oracle_workflow_uses_the_supported_build_entrypoint(): assert "docker run --rm --name empty" not in workflow +def test_azure_login_action_is_pinned_to_an_immutable_commit(): + workflow = BENCHMARK_WORKFLOW.read_text() + match = re.search(r"uses:\s*azure/login@([0-9a-f]{40})(?:\s+#\s*(\S+))?", workflow) + + assert match, ( + "azure/login must be pinned to a full 40-character commit SHA, not a " + "mutable major-version tag" + ) + assert match.group(1) == "7184910d9eb2b1c5e48f7073824a90609bb9b6d6" + assert match.group(2) == "v2.3.1" + + def test_build_entrypoint_stages_every_generated_docker_input(): dockerfile = (BENCH / "shared" / "base" / "Dockerfile").read_text() build = (BENCH / "build.sh").read_text() From 226677d53fbffa5031d23d8864efc743cf625eb0 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Mon, 21 Sep 2026 18:43:55 +0000 Subject: [PATCH 46/52] consolidate doc --- README.md | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/README.md b/README.md index a79123b..cfd66ef 100644 --- a/README.md +++ b/README.md @@ -15,21 +15,6 @@ Skills follow the [Agent Skills](https://agentskills.io/) format and the kit shi 👉 **Capabilities and skill catalog:** [`docs/SKILLS.md`](docs/SKILLS.md) -👉 **GEO strategy:** [`docs/GEO.md`](docs/GEO.md) — offline knowledge, -online/RAG retrieval, and Azure DocumentDB name disambiguation. - -👉 **Telemetry diagnosis plan:** [`docs/TELEMETRY-DIAGNOSTICS.md`](docs/TELEMETRY-DIAGNOSTICS.md) -— open-source telemetry, anomaly detection, and the Azure extension path. - -👉 **MongoDB migration plan:** [`docs/MONGODB-MIGRATION.md`](docs/MONGODB-MIGRATION.md) -— minimal, non-interactive, fail-closed migration with validation and rollback. - -👉 **Migration agent harness:** [`docs/MIGRATION-HARNESS.md`](docs/MIGRATION-HARNESS.md) -— one typed workflow for local/open-source and Azure cloud migration providers. - -👉 **Migration quick plan:** [`docs/MIGRATION-QUICK-PLAN.md`](docs/MIGRATION-QUICK-PLAN.md) -— concise scenario-to-technique matrix and harness summary. - ## Diagnostic Toolbox — Quickstart Beyond the text skills, the kit ships **deterministic diagnostic scripts** and a @@ -118,7 +103,7 @@ compat/ # MongoDB-compatible ecommerce project on DocumentDB testing/ # Diagnostic Regression Suite — deterministic diagnostics (pytest) evals/ # Cross-Model Skill Evaluations — routing, quality, and cost (Vally) benchmarks/ # MSBench Skill-Efficacy Benchmark + route-cost study -docs/ # Skills, diagnostics, testing, installation, and GEO guidance +docs/ # Skills, diagnostics, testing, and installation guidance ``` ## Installation From de79c89d5cf3e798b76fa83c37222e2b87aea2ed Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 22 Sep 2026 06:16:00 +0000 Subject: [PATCH 47/52] sort out mongosh installation with a check --- .github/workflows/diagnostic-regression.yml | 15 ++++-- .../shared/base/Dockerfile | 15 ++++-- .../portable-cli/tests/test_portable_cli.py | 47 +++++++++++++++++++ 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/.github/workflows/diagnostic-regression.yml b/.github/workflows/diagnostic-regression.yml index 97c6482..7354317 100644 --- a/.github/workflows/diagnostic-regression.yml +++ b/.github/workflows/diagnostic-regression.yml @@ -19,6 +19,8 @@ permissions: env: MONGOSH_VERSION: "2.3.8" + MONGOSH_SHA256: "23edb768189663aaa9732a2340a25b5fc05a314940538809a7840be7f2ce221f" + DOCUMENTDB_LOCAL_IMAGE: "ghcr.io/microsoft/documentdb/documentdb-local@sha256:0fcf634531c1917ad0855ff9f4354aca0a5c5d8e435f08250568deb37eeb0ad5" jobs: # ------------------------------------------------------------------------- @@ -90,7 +92,7 @@ jobs: docker run -d --name documentdb-local \ -p 10260:10260 -p 9712:9712 \ -e USERNAME=docdbadmin -e PASSWORD="$DOCDB_PASSWORD" \ - ghcr.io/microsoft/documentdb/documentdb-local:latest + "$DOCUMENTDB_LOCAL_IMAGE" - name: Install mongosh into the container # NOT optional. The documentdb-local image ships psql but NO mongosh @@ -101,14 +103,21 @@ jobs: # dependency. run: | MV="${MONGOSH_VERSION}" - curl -sSL "https://downloads.mongodb.com/compass/mongosh-${MV}-linux-x64.tgz" \ + curl -fsSL "https://downloads.mongodb.com/compass/mongosh-${MV}-linux-x64.tgz" \ -o /tmp/mongosh.tgz + echo "${MONGOSH_SHA256} /tmp/mongosh.tgz" | sha256sum -c - tar xzf /tmp/mongosh.tgz -C /tmp docker cp "/tmp/mongosh-${MV}-linux-x64/bin/mongosh" \ documentdb-local:/usr/local/bin/mongosh docker cp "/tmp/mongosh-${MV}-linux-x64/bin/mongosh_crypt_v1.so" \ documentdb-local:/usr/local/lib/ || true - docker exec documentdb-local mongosh --version + INSTALLED_VERSION="$(docker exec documentdb-local mongosh --version | tr -d '\r')" + if [ "$INSTALLED_VERSION" != "$MV" ]; then + echo "::error::Expected mongosh $MV, installed $INSTALLED_VERSION" + exit 1 + fi + echo "Installed compatible mongosh $INSTALLED_VERSION" + rm -rf /tmp/mongosh.tgz "/tmp/mongosh-${MV}-linux-x64" - name: Wait for the gateway run: | diff --git a/benchmarks/documentdb-sdk-skills/shared/base/Dockerfile b/benchmarks/documentdb-sdk-skills/shared/base/Dockerfile index e4a140e..ac4692f 100644 --- a/benchmarks/documentdb-sdk-skills/shared/base/Dockerfile +++ b/benchmarks/documentdb-sdk-skills/shared/base/Dockerfile @@ -19,7 +19,10 @@ # layer is PUBLIC — so anyone can reproduce this image even though the MSBench # harness itself is Microsoft-internal. -FROM ghcr.io/microsoft/documentdb/documentdb-local:latest +# Pinned from ghcr.io/microsoft/documentdb/documentdb-local:latest on +# 2026-09-22. Update deliberately and rerun the benchmark controls when the +# base changes; a mutable tag would silently change the published environment. +FROM ghcr.io/microsoft/documentdb/documentdb-local@sha256:0fcf634531c1917ad0855ff9f4354aca0a5c5d8e435f08250568deb37eeb0ad5 USER root WORKDIR / @@ -31,6 +34,7 @@ ENTRYPOINT [] CMD ["/bin/bash"] ARG MONGOSH_VERSION=2.3.8 +ARG MONGOSH_SHA256=23edb768189663aaa9732a2340a25b5fc05a314940538809a7840be7f2ce221f RUN set -eux; \ apt-get update; \ @@ -51,15 +55,20 @@ RUN set -eux; \ # tooling talk to the database through it. Without this the whole benchmark # fails with "executable file not found", which reads like a broken task # rather than a missing dependency. +# +# Download directly from MongoDB's official distribution endpoint. The binary +# is not stored in this repository. Both version and archive digest are pinned +# so a changed upstream file cannot silently alter the benchmark image. # --------------------------------------------------------------------------- RUN set -eux; \ - curl -sSL "https://downloads.mongodb.com/compass/mongosh-${MONGOSH_VERSION}-linux-x64.tgz" \ + curl -fsSL "https://downloads.mongodb.com/compass/mongosh-${MONGOSH_VERSION}-linux-x64.tgz" \ -o /tmp/mongosh.tgz; \ + echo "${MONGOSH_SHA256} /tmp/mongosh.tgz" | sha256sum -c -; \ tar xzf /tmp/mongosh.tgz -C /tmp; \ cp "/tmp/mongosh-${MONGOSH_VERSION}-linux-x64/bin/mongosh" /usr/local/bin/mongosh; \ cp "/tmp/mongosh-${MONGOSH_VERSION}-linux-x64/bin/mongosh_crypt_v1.so" /usr/local/lib/ || true; \ rm -rf /tmp/mongosh.tgz "/tmp/mongosh-${MONGOSH_VERSION}-linux-x64"; \ - mongosh --version + test "$(mongosh --version | tr -d '\r')" = "${MONGOSH_VERSION}" # --------------------------------------------------------------------------- # Verifier dependencies, installed from VENDORED WHEELS with no network. diff --git a/testing/scenarios/portable-cli/tests/test_portable_cli.py b/testing/scenarios/portable-cli/tests/test_portable_cli.py index c42a254..352b1fe 100644 --- a/testing/scenarios/portable-cli/tests/test_portable_cli.py +++ b/testing/scenarios/portable-cli/tests/test_portable_cli.py @@ -8,6 +8,7 @@ import pytest SCRIPTS = Path(__file__).resolve().parents[4] / "scripts" +REPO = SCRIPTS.parent sys.path.insert(0, str(SCRIPTS)) import portable_diagnostic as portable # noqa: E402 @@ -80,3 +81,49 @@ def test_crlf_shell_checkout_is_normalized(tmp_path): assert normalized.read_bytes() == ( b"#!/usr/bin/env bash\nset -uo pipefail\necho ok\n" ) + + +def test_ci_and_benchmark_pin_the_same_mongosh_version(): + workflow = ( + REPO / ".github" / "workflows" / "diagnostic-regression.yml" + ).read_text() + dockerfile = ( + REPO + / "benchmarks" + / "documentdb-sdk-skills" + / "shared" + / "base" + / "Dockerfile" + ).read_text() + + assert 'MONGOSH_VERSION: "2.3.8"' in workflow + assert "ARG MONGOSH_VERSION=2.3.8" in dockerfile + digest = "23edb768189663aaa9732a2340a25b5fc05a314940538809a7840be7f2ce221f" + assert f'MONGOSH_SHA256: "{digest}"' in workflow + assert f"ARG MONGOSH_SHA256={digest}" in dockerfile + assert "sha256sum -c -" in workflow + assert "sha256sum -c -" in dockerfile + assert "INSTALLED_VERSION=" in workflow + assert 'Expected mongosh $MV' in workflow + + +def test_ci_and_benchmark_pin_documentdb_image_digest(): + workflow = ( + REPO / ".github" / "workflows" / "diagnostic-regression.yml" + ).read_text() + dockerfile = ( + REPO + / "benchmarks" + / "documentdb-sdk-skills" + / "shared" + / "base" + / "Dockerfile" + ).read_text() + image = ( + "ghcr.io/microsoft/documentdb/documentdb-local" + "@sha256:0fcf634531c1917ad0855ff9f4354aca0a5c5d8e435f08250568deb37eeb0ad5" + ) + + assert f'DOCUMENTDB_LOCAL_IMAGE: "{image}"' in workflow + assert f"FROM {image}" in dockerfile + assert "documentdb-local:latest" not in workflow From 400325b3f40333c3ea7434200d5259daa380183c Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 22 Sep 2026 06:34:22 +0000 Subject: [PATCH 48/52] permission to 755 --- .../shared/base/start-documentdb.sh | 0 .../documentdb-sdk-skills/shared/ces/runner.sh | 0 .../shared/verifier/runner.sh | 0 examples/azure-deployment/deploy.sh | 0 scripts/diagnostic-runtime.sh | 0 .../portable-cli/tests/test_portable_cli.py | 18 ++++++++++++++++++ 6 files changed, 18 insertions(+) mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/shared/ces/runner.sh mode change 100644 => 100755 benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh mode change 100644 => 100755 examples/azure-deployment/deploy.sh mode change 100644 => 100755 scripts/diagnostic-runtime.sh diff --git a/benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh b/benchmarks/documentdb-sdk-skills/shared/base/start-documentdb.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/shared/ces/runner.sh b/benchmarks/documentdb-sdk-skills/shared/ces/runner.sh old mode 100644 new mode 100755 diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh b/benchmarks/documentdb-sdk-skills/shared/verifier/runner.sh old mode 100644 new mode 100755 diff --git a/examples/azure-deployment/deploy.sh b/examples/azure-deployment/deploy.sh old mode 100644 new mode 100755 diff --git a/scripts/diagnostic-runtime.sh b/scripts/diagnostic-runtime.sh old mode 100644 new mode 100755 diff --git a/testing/scenarios/portable-cli/tests/test_portable_cli.py b/testing/scenarios/portable-cli/tests/test_portable_cli.py index 352b1fe..03c4bd6 100644 --- a/testing/scenarios/portable-cli/tests/test_portable_cli.py +++ b/testing/scenarios/portable-cli/tests/test_portable_cli.py @@ -1,6 +1,7 @@ from __future__ import annotations import io +import os import subprocess import sys from pathlib import Path @@ -21,6 +22,23 @@ def test_every_diagnostic_has_python_and_powershell_entry_points(): assert (SCRIPTS / f"{name}.ps1").is_file() +@pytest.mark.skipif(os.name == "nt", reason="Windows does not expose Unix mode bits") +def test_all_tracked_shell_files_are_executable(): + result = subprocess.run( + ["git", "ls-files", "*.sh"], + cwd=REPO, + capture_output=True, + text=True, + check=True, + ) + missing = [] + for relative in result.stdout.splitlines(): + path = REPO / relative + if path.stat().st_mode & 0o111 == 0: + missing.append(relative) + assert not missing, f"shell files missing executable mode: {missing}" + + def test_container_option_overrides_environment(monkeypatch): monkeypatch.setenv("CONTAINER_NAME", "from-env") assert portable.container_name(["--container", "from-cli"]) == "from-cli" From 17f50cd3698e65be608da83197a05e49ea66ce5e Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 22 Sep 2026 07:04:28 +0000 Subject: [PATCH 49/52] addressed model selection issue --- .../workflows/skill-efficacy-benchmark.yml | 5 +- benchmarks/documentdb-sdk-skills/README.md | 15 +++ .../documentdb-sdk-skills/docs/REPORT.md | 1 + benchmarks/documentdb-sdk-skills/report.py | 87 ++++++++++++++ .../shared/verifier/harvest_metrics.py | 76 ++++++++++++- .../tests/test_harvest_metrics.py | 107 ++++++++++++++++++ 6 files changed, 289 insertions(+), 2 deletions(-) diff --git a/.github/workflows/skill-efficacy-benchmark.yml b/.github/workflows/skill-efficacy-benchmark.yml index d6d20b0..2021049 100644 --- a/.github/workflows/skill-efficacy-benchmark.yml +++ b/.github/workflows/skill-efficacy-benchmark.yml @@ -162,6 +162,9 @@ jobs: echo "installed, never mentioned) and \`documentdb-sdk-skills-noskills\`" echo "(control). An absolute pass@k on either arm alone is not a result." echo - echo "Per-instance token cost is in \`custom_metrics.json\`; export it with" + echo "Per-instance token cost and observed model provenance are in" + echo "\`custom_metrics.json\`; export them with" echo '`msbench-cli report --run_id --output report.json`.' + echo "The report generator refuses comparisons with missing or different" + echo "model identifiers between treatment and control." } >> "$GITHUB_STEP_SUMMARY" diff --git a/benchmarks/documentdb-sdk-skills/README.md b/benchmarks/documentdb-sdk-skills/README.md index 86f3f9d..44215ed 100644 --- a/benchmarks/documentdb-sdk-skills/README.md +++ b/benchmarks/documentdb-sdk-skills/README.md @@ -80,6 +80,21 @@ An agent can fake the source. It cannot fake the engine's own statistics. Our `check_source.py` is ~130 lines, not 520, because almost everything moved to a stronger rung. +### Model provenance + +The current MSBench command surface used here does not configure a model in the +benchmark invocation. To prevent an undocumented platform model change from +looking like a skill regression or improvement, each instance reads the actual +model identifier from the Copilot CLI session store. The verifier losslessly +encodes the model set, API endpoint, reasoning effort, agent identity, and +observable Copilot CLI version into numeric `custom_metrics.json` fields. + +`report.py` refuses to publish a treatment/control comparison if any instance +lacks model provenance, if instances within an arm used inconsistent model +sets, or if the two arms used different model identifiers. If MSBench adds a +supported explicit model option, the workflow should pin it as well as retaining +the observed-value check. + ### The metric: scan amplification `totalDocsExamined / nReturned`. diff --git a/benchmarks/documentdb-sdk-skills/docs/REPORT.md b/benchmarks/documentdb-sdk-skills/docs/REPORT.md index a50a553..388ce4f 100644 --- a/benchmarks/documentdb-sdk-skills/docs/REPORT.md +++ b/benchmarks/documentdb-sdk-skills/docs/REPORT.md @@ -578,6 +578,7 @@ so a single lucky or unlucky attempt does not become the headline. | per-check results | `pytest --ctrf` → `/logs/verifier/ctrf.json` | `harvest_metrics.py` | | `checks__*` | `harvest_metrics.py: read_ctrf()` | `report.py` | | token counts, `ai_credits` | `harvest_metrics.py: read_usage()`, from the Copilot CLI session store | `report.py` | +| observed model, endpoint, reasoning effort, agent and CLI version | `harvest_metrics.py`, losslessly encoded as numeric custom metrics | `report.py`, which rejects missing/mismatched model provenance | | `custom_metrics.json` | `harvest_metrics.py: main()` → `$OUTPUT_DIR` | `msbench-cli report` | | `resolved`, `pass_at_k_status` | MSBench | `report.py: summarise()` | | the tables above | `report.py: render()` | you | diff --git a/benchmarks/documentdb-sdk-skills/report.py b/benchmarks/documentdb-sdk-skills/report.py index 729a1e1..bb881b2 100644 --- a/benchmarks/documentdb-sdk-skills/report.py +++ b/benchmarks/documentdb-sdk-skills/report.py @@ -62,6 +62,7 @@ ] CHECK_CATEGORIES = ["api", "behavior", "documentdb", "engine", "source", "skills"] +TEXT_CHUNK_BYTES = 6 def load(path: Path) -> dict: @@ -97,6 +98,26 @@ def _metrics(report: dict, benchmark: str) -> dict: return cm[keys[0]] if len(keys) == 1 else {} +def decode_text_metrics(values: dict, prefix: str) -> str | None: + """Reconstruct a string encoded as exact numeric custom metrics.""" + if not values.get(f"{prefix}_available"): + return None + length = int(values.get(f"{prefix}_utf8_len", 0)) + count = int(values.get(f"{prefix}_chunk_count", 0)) + data = bytearray() + for index in range(count): + key = f"{prefix}_chunk_{index:03d}" + if key not in values: + return None + remaining = length - len(data) + width = min(TEXT_CHUNK_BYTES, remaining) + data.extend(int(values[key]).to_bytes(width, "big")) + try: + return bytes(data).decode("utf-8") + except UnicodeDecodeError: + return None + + def summarise(report: dict, benchmark: str) -> dict: """Reduce one arm to pass rate + mean cost, per instance and overall.""" instances = _instances(report, benchmark) @@ -110,6 +131,14 @@ def summarise(report: dict, benchmark: str) -> dict: collected: dict[str, list[float]] = {k: [] for k, _, _ in COST_METRICS} checks: dict[str, list[float]] = {} missing_tokens = 0 + provenance = { + "model_ids": set(), + "api_endpoints": set(), + "reasoning_efforts": set(), + "agent_identity": set(), + "copilot_cli_version": set(), + } + missing_model_data = 0 for inst in attempted: values = ((metrics.get(inst) or {}).get("values")) or {} @@ -122,6 +151,12 @@ def summarise(report: dict, benchmark: str) -> dict: p, t = values.get(f"checks_{cat}_passed"), values.get(f"checks_{cat}_total") if p is not None and t: checks.setdefault(cat, []).append(float(p) / float(t)) + for prefix in provenance: + value = decode_text_metrics(values, prefix) + if value: + provenance[prefix].add(value) + if not decode_text_metrics(values, "model_ids"): + missing_model_data += 1 return { "benchmark": benchmark, @@ -132,10 +167,35 @@ def summarise(report: dict, benchmark: str) -> dict: "cost_n": {k: len(v) for k, v in collected.items()}, "check_rates": {c: statistics.mean(v) for c, v in checks.items()}, "missing_token_data": missing_tokens, + "missing_model_data": missing_model_data, + "provenance": {key: sorted(values) for key, values in provenance.items()}, "pass_at_k": report.get("pass_at_k_status") or {}, } +def require_comparable_model_provenance(treatment: dict, control: dict) -> str: + """Fail publication unless both arms observed one identical model set.""" + for arm in (treatment, control): + if arm["missing_model_data"]: + raise SystemExit( + f"{arm['benchmark']} is missing observed model provenance for " + f"{arm['missing_model_data']} instance(s)" + ) + identities = arm["provenance"]["model_ids"] + if len(identities) != 1: + raise SystemExit( + f"{arm['benchmark']} used inconsistent model identities: {identities}" + ) + treatment_model = treatment["provenance"]["model_ids"][0] + control_model = control["provenance"]["model_ids"][0] + if treatment_model != control_model: + raise SystemExit( + "treatment and control used different models: " + f"{treatment_model!r} vs {control_model!r}" + ) + return treatment_model + + def _pct(x): return "—" if x is None else f"{x:.0%}" @@ -156,6 +216,27 @@ def render(t: dict, c: dict) -> str: "agent, container, verifier — is identical between the two arms, so any " "difference is attributable to the kit.") A("") + models = t.get("provenance", {}).get("model_ids") or [] + if len(models) == 1: + shown_models = "`, `".join(models[0].splitlines()) + A( + f"- **Observed model identifier(s):** `{shown_models}` " + "(from the Copilot session store)" + ) + endpoints = t.get("provenance", {}).get("api_endpoints") or [] + if len(endpoints) == 1: + shown_endpoints = "`, `".join(endpoints[0].splitlines()) + A(f"- **Observed API endpoint(s):** `{shown_endpoints}`") + efforts = t.get("provenance", {}).get("reasoning_efforts") or [] + if len(efforts) == 1: + shown_efforts = "`, `".join(efforts[0].splitlines()) + A(f"- **Observed reasoning effort(s):** `{shown_efforts}`") + agent_ids = t.get("provenance", {}).get("agent_identity") or [] + if len(agent_ids) == 1: + A(f"- **Agent:** `{agent_ids[0]}`") + cli_versions = t.get("provenance", {}).get("copilot_cli_version") or [] + if len(cli_versions) == 1: + A(f"- **Observed Copilot CLI version:** `{cli_versions[0]}`") A(f"- **Treatment** (`{t['benchmark']}`): skills installed in the agent's " f"skills directory, and **never mentioned in the prompt** — this measures " f"whether an agent that merely *has* the kit applies it.") @@ -242,6 +323,11 @@ def render(t: dict, c: dict) -> str: f"`{arm['benchmark']}` has only {arm['instances']} instance(s); " f"agent runs are non-deterministic, so treat this as indicative " f"rather than a measurement.") + if arm["missing_model_data"]: + warnings.append( + f"{arm['missing_model_data']}/{arm['instances']} instances in " + f"`{arm['benchmark']}` had no observed model provenance." + ) if warnings: A("## Caveats") A("") @@ -273,6 +359,7 @@ def main(argv=None) -> int: t = summarise(load(args.treatment), args.treatment_benchmark) c = summarise(load(args.control), args.control_benchmark) + require_comparable_model_provenance(t, c) if args.json: out = json.dumps({"treatment": t, "control": c}, indent=2, default=str) diff --git a/benchmarks/documentdb-sdk-skills/shared/verifier/harvest_metrics.py b/benchmarks/documentdb-sdk-skills/shared/verifier/harvest_metrics.py index 9ead3b6..f61f819 100644 --- a/benchmarks/documentdb-sdk-skills/shared/verifier/harvest_metrics.py +++ b/benchmarks/documentdb-sdk-skills/shared/verifier/harvest_metrics.py @@ -36,6 +36,10 @@ All emitted values are NUMERIC. MSBench infers a `numeric` schema from the values, and a string would produce an inconsistent schema across instances. +Model identifiers, API endpoints, reasoning effort, agent identity, and the +observable Copilot CLI version are encoded losslessly into six-byte integer +chunks. `report.py` reconstructs them and refuses to publish a treatment/control +comparison when model provenance is missing or differs. This is intentionally self-contained (stdlib only, no imports from the kit): it has to run inside a minimal task container. `testing/scenarios/benchmark-metrics/` @@ -49,11 +53,14 @@ import os import shutil import sqlite3 +import subprocess import sys import tempfile from pathlib import Path NANO_AIU_PER_CREDIT = 1_000_000_000 +TEXT_CHUNK_BYTES = 6 +AGENT_IDENTITY = "msbench-agent-github-copilot-cli" # Where the Copilot CLI keeps its session store. The agent may run as root or # as another user depending on how the runner invokes it, so try each. @@ -79,6 +86,59 @@ """ +def encode_text_metrics(prefix: str, value: str) -> dict[str, int]: + """Encode UTF-8 losslessly as JSON-safe integers. + + MSBench custom metrics are numeric-only. Six bytes fit below 2^48, so every + chunk remains exactly representable by both JSON numbers and IEEE-754 + doubles while still allowing the report to reconstruct the exact string. + """ + data = value.encode("utf-8") + metrics = { + f"{prefix}_available": 1 if data else 0, + f"{prefix}_utf8_len": len(data), + f"{prefix}_chunk_count": (len(data) + TEXT_CHUNK_BYTES - 1) + // TEXT_CHUNK_BYTES, + } + for index in range(0, len(data), TEXT_CHUNK_BYTES): + chunk = data[index : index + TEXT_CHUNK_BYTES] + metrics[f"{prefix}_chunk_{index // TEXT_CHUNK_BYTES:03d}"] = int.from_bytes( + chunk, "big" + ) + return metrics + + +def observed_values(conn: sqlite3.Connection, column: str) -> list[str]: + allowed = {"model", "api_endpoint", "reasoning_effort"} + if column not in allowed: + raise ValueError(f"unsupported provenance column: {column}") + try: + rows = conn.execute( + f"SELECT DISTINCT {column} FROM assistant_usage_events " + f"WHERE {column} IS NOT NULL AND {column} <> '' ORDER BY {column}" + ) + except sqlite3.OperationalError: + return [] + return [str(row[0]) for row in rows] + + +def copilot_cli_version() -> str: + executable = shutil.which("copilot") + if not executable: + return "" + try: + result = subprocess.run( + [executable, "--version"], + capture_output=True, + text=True, + timeout=10, + check=False, + ) + except (OSError, subprocess.TimeoutExpired): + return "" + return (result.stdout or result.stderr).strip().splitlines()[0] + + def find_store(explicit: str | None = None) -> Path | None: if explicit: p = Path(explicit).expanduser() @@ -117,6 +177,9 @@ def read_usage(db_path: Path) -> dict: if "assistant_usage_events" not in tables: return {} row = dict(conn.execute(ROLLUP_SQL).fetchone() or {}) + model_ids = observed_values(conn, "model") + api_endpoints = observed_values(conn, "api_endpoint") + reasoning_efforts = observed_values(conn, "reasoning_effort") finally: conn.close() finally: @@ -128,7 +191,7 @@ def read_usage(db_path: Path) -> dict: inp = int(row["input_tokens"]) cache = int(row["cache_read_tokens"]) fresh = max(inp - cache, 0) - return { + metrics = { "agent_requests": int(row["requests"]), "agent_turns": int(row["turns"]), "tokens_input": inp, @@ -142,7 +205,18 @@ def read_usage(db_path: Path) -> dict: "cache_read_share_pct": round(100.0 * cache / inp, 2) if inp else 0.0, "ai_credits": round(int(row["nano_aiu"]) / NANO_AIU_PER_CREDIT, 4), "agent_wall_secs": round(int(row["duration_ms"]) / 1000.0, 1), + "model_count": len(model_ids), + "api_endpoint_count": len(api_endpoints), + "reasoning_effort_count": len(reasoning_efforts), } + metrics.update(encode_text_metrics("model_ids", "\n".join(model_ids))) + metrics.update(encode_text_metrics("api_endpoints", "\n".join(api_endpoints))) + metrics.update( + encode_text_metrics("reasoning_efforts", "\n".join(reasoning_efforts)) + ) + metrics.update(encode_text_metrics("agent_identity", AGENT_IDENTITY)) + metrics.update(encode_text_metrics("copilot_cli_version", copilot_cli_version())) + return metrics def read_ctrf(path: Path) -> dict: diff --git a/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py b/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py index 5129720..019171f 100644 --- a/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py +++ b/testing/scenarios/benchmark-metrics/tests/test_harvest_metrics.py @@ -160,6 +160,36 @@ def test_turns_counts_distinct_turns_not_requests(store): assert m["agent_turns"] == 2 +def test_model_identity_is_captured_as_numeric_metrics(store): + metrics = hm.read_usage(store) + assert metrics["model_count"] == 1 + encoded = { + key: value for key, value in metrics.items() if key.startswith("model_ids_") + } + assert encoded["model_ids_available"] == 1 + assert all( + isinstance(value, (int, float)) and not isinstance(value, bool) + for value in encoded.values() + ) + assert all( + value < 2**53 + for key, value in encoded.items() + if "_chunk_" in key + ) + + +def test_multiple_models_are_recorded_not_silently_merged(tmp_path): + mixed = _make_store( + tmp_path, + [ + _row(turn_index=0, model="model-a"), + _row(turn_index=1, model="model-b"), + ], + ) + metrics = hm.read_usage(mixed) + assert metrics["model_count"] == 2 + + # --------------------------------------------------------------------------- # missing data must not read as zero cost # --------------------------------------------------------------------------- @@ -324,6 +354,10 @@ def _msbench_report(benchmark, resolved, values_by_instance): } +def _model_values(model="m1"): + return hm.encode_text_metrics("model_ids", model) + + def test_report_counts_only_true_as_a_pass(): """`resolved` values may be bool OR the string "error". Counting "error" as anything but a failure would silently inflate the published pass rate.""" @@ -364,6 +398,76 @@ def test_report_requires_both_arms(): m.main(["--treatment", str(_REPORT_PY)]) # no --control +def test_report_decodes_the_exact_observed_model(): + m = _report_mod() + values = _model_values("claude-opus-5") + assert m.decode_text_metrics(values, "model_ids") == "claude-opus-5" + + +def test_report_rejects_missing_model_provenance(): + m = _report_mod() + treatment = m.summarise( + _msbench_report( + "documentdb-sdk-skills", + {"a": True}, + {"a": {"tokens_available": 1}}, + ), + "documentdb-sdk-skills", + ) + control_values = {"tokens_available": 1, **_model_values("m1")} + control = m.summarise( + _msbench_report( + "documentdb-sdk-skills-noskills", + {"a": True}, + {"a": control_values}, + ), + "documentdb-sdk-skills-noskills", + ) + with pytest.raises(SystemExit, match="missing observed model provenance"): + m.require_comparable_model_provenance(treatment, control) + + +def test_report_rejects_different_models_between_arms(): + m = _report_mod() + treatment = m.summarise( + _msbench_report( + "documentdb-sdk-skills", + {"a": True}, + {"a": {"tokens_available": 1, **_model_values("model-a")}}, + ), + "documentdb-sdk-skills", + ) + control = m.summarise( + _msbench_report( + "documentdb-sdk-skills-noskills", + {"a": True}, + {"a": {"tokens_available": 1, **_model_values("model-b")}}, + ), + "documentdb-sdk-skills-noskills", + ) + with pytest.raises(SystemExit, match="different models"): + m.require_comparable_model_provenance(treatment, control) + + +def test_report_accepts_the_same_observed_model(): + m = _report_mod() + values = {"tokens_available": 1, **_model_values("gpt-5.6-sol")} + treatment = m.summarise( + _msbench_report("documentdb-sdk-skills", {"a": True}, {"a": values}), + "documentdb-sdk-skills", + ) + control = m.summarise( + _msbench_report( + "documentdb-sdk-skills-noskills", {"a": True}, {"a": values} + ), + "documentdb-sdk-skills-noskills", + ) + assert ( + m.require_comparable_model_provenance(treatment, control) + == "gpt-5.6-sol" + ) + + def test_credits_per_passing_result_charges_failures_to_successes(tmp_path): """5 runs at 100 credits with 1 pass costs 500 per success, not 100.""" m = _report_mod() @@ -387,16 +491,19 @@ def test_report_renders_the_headline_and_category_tables(): t = m.summarise(_msbench_report( "documentdb-sdk-skills", {"a": True}, {"a": {"tokens_available": 1, "ai_credits": 5.0, + **_model_values("m1"), "checks_engine_passed": 4, "checks_engine_total": 4}}), "documentdb-sdk-skills") c = m.summarise(_msbench_report( "documentdb-sdk-skills-noskills", {"a": False}, {"a": {"tokens_available": 1, "ai_credits": 4.0, + **_model_values("m1"), "checks_engine_passed": 0, "checks_engine_total": 4}}), "documentdb-sdk-skills-noskills") out = m.render(t, c) assert "Pass rate" in out assert "`engine`" in out assert "Credits per passing result" in out + assert "Observed model identifier" in out # the reader must be steered away from raw input tokens assert "fresh" in out.lower() From 65ac7fbbfc1de506948ad23f82eb0d00b4c466e0 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 22 Sep 2026 07:30:43 +0000 Subject: [PATCH 50/52] fix invalid json in perf-advisor.sh --- scripts/perf-advisor.sh | 30 ++++++++++++++----- .../expected-findings.yaml | 1 + .../ecommerce-missing-index/fixture.js | 18 ++++++++++- .../tests/test_perf_contract.py | 22 ++++++++++++++ 4 files changed, 62 insertions(+), 9 deletions(-) diff --git a/scripts/perf-advisor.sh b/scripts/perf-advisor.sh index 439c4f7..3c0e920 100755 --- a/scripts/perf-advisor.sh +++ b/scripts/perf-advisor.sh @@ -181,9 +181,17 @@ colls.forEach(function(c) { var indexedFields={}; db[c].getIndexes().forEach(function(ix){var k=Object.keys(ix.key||{}); if(k.length)indexedFields[k[0]]=true;}); Object.keys(sample).filter(function(k){return k!=="_id";}).forEach(function(field){ var val=sample[field]; - if (typeof val==="string" && val.length<100) testQuery(c,field,"find {"+field+":\"...\"}", JSON.parse("{\""+field+"\":\""+val+"\"}"), indexedFields); - else if (typeof val==="number") testQuery(c,field,"find {"+field+":{$gt:...}}", JSON.parse("{\""+field+"\":{\"$gt\":"+(val/2)+"}}"), indexedFields); - else if (typeof val==="boolean") testQuery(c,field,"find {"+field+":"+val+"}", JSON.parse("{\""+field+"\":"+val+"}"), indexedFields); + var filter={}; + if (typeof val==="string" && val.length<100) { + filter[field]=val; + testQuery(c,field,"find {"+field+":\"...\"}",filter,indexedFields); + } else if (typeof val==="number") { + filter[field]={$gt:val/2}; + testQuery(c,field,"find {"+field+":{$gt:...}}",filter,indexedFields); + } else if (typeof val==="boolean") { + filter[field]=val; + testQuery(c,field,"find {"+field+":"+val+"}",filter,indexedFields); + } }); }); @@ -215,7 +223,8 @@ colls.forEach(function(c){ var sf=Object.keys(sample).filter(function(k){return k!=="_id";}).sort() .find(function(f){return typeof sample[f]==="string"&&sample[f].length<50;}); if (sf){ var v=sample[sf]; - timeQuery(c,"find({"+sf+":...})",function(){return db[c].find(JSON.parse("{\""+sf+"\":\""+v+"\"}")).count();}); + var filter={}; filter[sf]=v; + timeQuery(c,"find({"+sf+":...})",function(){return db[c].find(filter).count();}); timeQuery(c,"aggregate $group by "+sf,function(){return db[c].aggregate([{$group:{_id:"$"+sf,n:{$sum:1}}}]).toArray().length;}); } }); @@ -447,12 +456,16 @@ colls.forEach(function(c) { // Test equality/range filter on each top-level string/number field fields.forEach(function(field) { var val = sample[field]; + var filter = {}; if (typeof val === "string" && val.length < 100) { - testQuery(c, field, "find {" + field + ":\"...\"}", JSON.parse("{\"" + field + "\":\"" + val + "\"}"), null, indexedFields); + filter[field] = val; + testQuery(c, field, "find {" + field + ":\"...\"}", filter, null, indexedFields); } else if (typeof val === "number") { - testQuery(c, field, "find {" + field + ":{$gt:...}}", JSON.parse("{\"" + field + "\":{\"$gt\":" + (val/2) + "}}"), null, indexedFields); + filter[field] = {$gt: val/2}; + testQuery(c, field, "find {" + field + ":{$gt:...}}", filter, null, indexedFields); } else if (typeof val === "boolean") { - testQuery(c, field, "find {" + field + ":" + val + "}", JSON.parse("{\"" + field + "\":" + val + "}"), null, indexedFields); + filter[field] = val; + testQuery(c, field, "find {" + field + ":" + val + "}", filter, null, indexedFields); } }); // NOTE: a full-collection $group aggregation always scans every document by @@ -503,8 +516,9 @@ colls.forEach(function(c) { var strField = fields.find(function(f) { return typeof sample[f] === "string" && sample[f].length < 50; }); if (strField) { var val = sample[strField]; + var filter = {}; filter[strField] = val; timeQuery(c, "find({" + strField + ":\"" + val.substring(0,20) + "...\"})", function() { - return db[c].find(JSON.parse("{\"" + strField + "\":\"" + val + "\"}")).count(); + return db[c].find(filter).count(); }); } diff --git a/testing/scenarios/ecommerce-missing-index/expected-findings.yaml b/testing/scenarios/ecommerce-missing-index/expected-findings.yaml index 095125d..6249de1 100644 --- a/testing/scenarios/ecommerce-missing-index/expected-findings.yaml +++ b/testing/scenarios/ecommerce-missing-index/expected-findings.yaml @@ -5,4 +5,5 @@ database: test_ecom_missing_index script: perf-advisor.sh unindexed_collection: events +escaped_collection: escaped_values min_collscan_patterns: 1 diff --git a/testing/scenarios/ecommerce-missing-index/fixture.js b/testing/scenarios/ecommerce-missing-index/fixture.js index 47629f6..b4f8c59 100644 --- a/testing/scenarios/ecommerce-missing-index/fixture.js +++ b/testing/scenarios/ecommerce-missing-index/fixture.js @@ -6,7 +6,7 @@ // Planted issue (answer key — see expected-findings.yaml): // events.event_type / events.device_id : no supporting index -> COLLSCAN -["events", "products"].forEach(function (c) { +["events", "products", "escaped_values"].forEach(function (c) { try { db[c].drop(); } catch (e) {} }); @@ -37,8 +37,24 @@ db.products.createIndex({ sku: 1 }); db.products.createIndex({ category: 1 }); db.products.createIndex({ price: 1 }); +// ---- escaped_values: prove probe filters do not concatenate JSON strings ---- +// Both the field name and sampled value contain JSON-significant characters. +// Building `JSON.parse("{\"" + field + ... )` throws before testQuery runs and +// used to make perf-advisor silently lose every Mongo-layer finding. +bulk = []; +for (var i = 1; i <= 20; i++) { + var doc = { _id: i }; + doc['path"key\\segment'] = + i === 1 ? 'say "hello" \\ root' : "ordinary-" + i; + bulk.push(doc); +} +db.escaped_values.insertMany(bulk); +// (intentionally NO secondary indexes) + print("FIXTURE_READY missing-index"); print(" events: " + db.events.countDocuments() + " docs, " + db.events.getIndexes().length + " indexes"); print(" products: " + db.products.countDocuments() + " docs, " + db.products.getIndexes().length + " indexes"); +print(" escaped_values: " + db.escaped_values.countDocuments() + " docs, " + + db.escaped_values.getIndexes().length + " indexes"); diff --git a/testing/scenarios/ecommerce-missing-index/tests/test_perf_contract.py b/testing/scenarios/ecommerce-missing-index/tests/test_perf_contract.py index 9d74eaf..b00ac93 100644 --- a/testing/scenarios/ecommerce-missing-index/tests/test_perf_contract.py +++ b/testing/scenarios/ecommerce-missing-index/tests/test_perf_contract.py @@ -18,6 +18,16 @@ def report(seeded_db): return res.stdout + res.stderr +@pytest.fixture(scope="session") +def json_report(seeded_db): + res = kit.run_script( + "perf-advisor.sh", "--db", seeded_db, "--json", want_json=True + ) + assert res.returncode == 0, f"script failed (rc={res.returncode})\n{res.stderr}" + assert res.json is not None, f"invalid JSON output:\n{res.stdout[:400]}" + return res.json + + @pytest.mark.perf def test_collscan_reported(report, expected): assert "COLLSCAN" in report, "expected at least one COLLSCAN marker" @@ -34,3 +44,15 @@ def test_unindexed_collection_flagged(report, expected): assert re.search(rf"COLLSCAN:\s*{re.escape(coll)}\b", report), ( f"expected a COLLSCAN against the unindexed '{coll}' collection" ) + + +def test_json_significant_field_and_value_do_not_abort_audit( + report, json_report, expected +): + coll = expected["escaped_collection"] + assert re.search(rf"COLLSCAN:\s*{re.escape(coll)}\b", report) + database = json_report["mongo"][0] + assert any(item["collection"] == coll for item in database["collscans"]), ( + "a quote/backslash in the sampled field or value must not erase Mongo " + "findings from JSON mode" + ) From f3408d2b0a827af2336c04180e0500edde597564 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 22 Sep 2026 07:35:11 +0000 Subject: [PATCH 51/52] fix conftest.py to add a gate --- testing/conftest.py | 12 +++++++----- testing/harness/conftest_base.py | 3 ++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/testing/conftest.py b/testing/conftest.py index 6c1f3d4..ebf31b8 100644 --- a/testing/conftest.py +++ b/testing/conftest.py @@ -28,12 +28,13 @@ def container_name(request): return request.config.getoption("--container") or kit.CONTAINER -@pytest.fixture(scope="session", autouse=True) +@pytest.fixture(scope="session") def require_container(container_name): - """Skip everything if the DocumentDB container isn't running or no password - is configured (credentials are never baked in — set DOCDB_PASSWORD or - DB_PASSWORD). If a password IS set but wrong, fail fast with a clear - message instead of ~30 cryptic seed failures.""" + """Validate DocumentDB access for fixtures that explicitly depend on it. + + Container-independent tests must not request this fixture. Credentials are + never baked in; set DOCDB_PASSWORD or DB_PASSWORD for live scenarios. + """ if not kit.DB_PASSWORD: pytest.skip("No DB password configured — set DOCDB_PASSWORD or DB_PASSWORD " "(e.g. export DB_PASSWORD='')") @@ -59,6 +60,7 @@ def require_container(container_name): " Or recreate the container with a password you choose.", returncode=2, ) + return container_name @pytest.fixture diff --git a/testing/harness/conftest_base.py b/testing/harness/conftest_base.py index 5c79888..fc0487b 100644 --- a/testing/harness/conftest_base.py +++ b/testing/harness/conftest_base.py @@ -26,7 +26,8 @@ def make_seeded_db_fixture(db_name, scenario_dir, fixture_filename="fixture.js") fixture = Path(scenario_dir) / fixture_filename @pytest.fixture(scope="session") - def seeded_db(request, container_name): + def seeded_db(request, require_container): + container_name = require_container if not fixture.exists(): raise FileNotFoundError(f"fixture not found: {fixture}") kit.drop_db(db_name, container=container_name) From bff3d6a768091bcae36be56e888607ddac3b6f04 Mon Sep 17 00:00:00 2001 From: Lei Jiang Date: Tue, 22 Sep 2026 08:13:53 +0000 Subject: [PATCH 52/52] fix coll concat in several shell scripts --- scripts/diagnostic-runtime.sh | 12 ++++ scripts/document-bloat-advisor.sh | 66 ++++++++++++++----- scripts/toast-split-advisor.sh | 46 +++++++++---- testing/scenarios/json-contract/fixture.js | 15 ++++- .../json-contract/tests/test_json_contract.py | 65 ++++++++++++++++++ 5 files changed, 173 insertions(+), 31 deletions(-) diff --git a/scripts/diagnostic-runtime.sh b/scripts/diagnostic-runtime.sh index f1d3670..4690bc0 100755 --- a/scripts/diagnostic-runtime.sh +++ b/scripts/diagnostic-runtime.sh @@ -17,3 +17,15 @@ docdb_exec_as() { docker exec "$CONTAINER_NAME" "$@" fi } + +docdb_exec_stdin_as() { + local user="$1" + shift + if [[ "${DOCDB_DIRECT:-0}" == "1" ]]; then + "$@" + elif [[ -n "$user" ]]; then + docker exec -i -u "$user" "$CONTAINER_NAME" "$@" + else + docker exec -i "$CONTAINER_NAME" "$@" + fi +} diff --git a/scripts/document-bloat-advisor.sh b/scripts/document-bloat-advisor.sh index 868a1ad..fc812dd 100755 --- a/scripts/document-bloat-advisor.sh +++ b/scripts/document-bloat-advisor.sh @@ -57,15 +57,24 @@ while [[ $# -gt 0 ]]; do done [[ -z "$DB" ]] && { echo "Error: --db is required" >&2; exit 1; } [[ -z "$PASSWORD" ]] && { echo "Error: no password. Set DB_PASSWORD or pass --password (local demo: export DB_PASSWORD=Test1234)." >&2; exit 1; } +[[ "$MIN_TOTAL_KB" =~ ^[0-9]+$ ]] || { echo "Error: --min-total-kb must be a non-negative integer" >&2; exit 2; } +[[ "$TOAST_RATIO" =~ ^[0-9]+([.][0-9]+)?$ ]] || { echo "Error: --toast-ratio must be a non-negative number" >&2; exit 2; } run_mongosh() { - docdb_exec_as "" mongosh "localhost:${PORT}/${DB}" \ + local program="$1" + shift + docdb_exec_as "" env "$@" mongosh "localhost:${PORT}/${DB}" \ -u "$DB_USER_" -p "$PASSWORD" --authenticationMechanism SCRAM-SHA-256 \ - --tls --tlsAllowInvalidCertificates --quiet --eval "$1" 2>/dev/null + --tls --tlsAllowInvalidCertificates --quiet --eval "$program" 2>/dev/null } run_psql() { - docdb_exec_as "" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ - -t --no-align -F $'\t' -c "$1" 2>/dev/null | grep -vE '^(SET|)$' + local query="$1" + shift + printf '%s\n' "$query" | + docdb_exec_stdin_as "" psql -h localhost -p "$PG_PORT" -U "$PG_USER" \ + -d "$PG_DB" -v ON_ERROR_STOP=1 -t --no-align -F $'\t' "$@" \ + 2>/dev/null | + grep -vE '^(SET|)$' } # ── Per-collection heap/TOAST from PostgreSQL (measured facts) ────────────── @@ -77,9 +86,9 @@ SELECT c.collection_name, pg_total_relation_size(t.oid) FROM documentdb_api_catalog.collections c JOIN pg_class t ON t.oid = ('documentdb_data.documents_' || c.collection_id)::regclass -WHERE c.database_name = '${DB}' +WHERE c.database_name = :'db_name' ORDER BY pg_total_relation_size(t.oid) DESC; -") +" --set=db_name="$DB") if [[ -z "$SIZES" ]]; then echo "No collections found for database '${DB}' (is it seeded? is the container up?)" >&2 @@ -102,7 +111,6 @@ total_toast=0 while IFS=$'\t' read -r coll heap toast total; do [[ -z "$coll" ]] && continue - total_kb=$(( total / 1024 )) (( total < MIN_TOTAL_KB * 1024 )) && continue # toast ratio via awk (float) ratio=$(awk -v t="$toast" -v h="$heap" 'BEGIN{ d=t+h; if(d<=0){print 0}else{printf "%.3f", t/d} }') @@ -118,11 +126,11 @@ while IFS=$'\t' read -r coll heap toast total; do # a random subset made the reported average field sizes wobble between # runs (measured: "title:13B" vs "title:12B" on an unchanged database), # which made the advisor's output impossible to diff. - FIELDS=$(run_mongosh ' - function detSample(coll, size) { + if ! FIELDS=$(run_mongosh ' + function detSample(collection, size) { var half = Math.ceil(size / 2); - var head = db[coll].find().sort({ _id: 1 }).limit(half).toArray(); - var tail = db[coll].find().sort({ _id: -1 }).limit(size - half).toArray(); + var head = collection.find().sort({ _id: 1 }).limit(half).toArray(); + var tail = collection.find().sort({ _id: -1 }).limit(size - half).toArray(); var seen = {}, picked = []; head.concat(tail).forEach(function (d) { var k = String(d._id); @@ -132,9 +140,11 @@ while IFS=$'\t' read -r coll heap toast total; do }); return picked; } - var s = db.'"$coll"'.stats(); + var coll = process.env.DOCDB_COLLECTION; + var collection = db.getCollection(coll); + var s = collection.stats(); var avg = s.avgObjSize || 0; - var docs = detSample("'"$coll"'", 20); + var docs = detSample(collection, 20); var acc = {}; docs.forEach(function(doc){ Object.keys(doc).forEach(function(k){ @@ -151,10 +161,33 @@ while IFS=$'\t' read -r coll heap toast total; do arr.sort(function(a,b){ return (b.avg - a.avg) || (a.f < b.f ? -1 : a.f > b.f ? 1 : 0); }); print("AVG " + avg); arr.slice(0,3).forEach(function(x){ print("FLD " + x.f + " " + x.avg); }); - ') - avgobj=$(echo "$FIELDS" | awk '/^AVG/{print $2}') + var top = arr.length ? arr[0].f : ""; + var dominant = arr.slice(0,3).map(function(x) { + return x.f + ":" + x.avg + "B"; + }).join(","); + print("FINDING " + JSON.stringify({ + collection: coll, + heap_bytes: Number(process.env.DOCDB_HEAP_BYTES), + toast_bytes: Number(process.env.DOCDB_TOAST_BYTES), + toast_ratio: Number(process.env.DOCDB_TOAST_RATIO), + avg_obj_size: avg, + dominant_fields: dominant, + recommended_split_field: top, + fix: "move large text to side collection " + coll + "_text keyed by _id" + })); + ' "DOCDB_COLLECTION=$coll" "DOCDB_HEAP_BYTES=$heap" \ + "DOCDB_TOAST_BYTES=$toast" "DOCDB_TOAST_RATIO=$ratio"); then + echo "Failed to sample collection '$coll'" >&2 + exit 1 + fi + avgobj=$(echo "$FIELDS" | awk '/^AVG/{print $2; exit}') bigfields=$(echo "$FIELDS" | awk '/^FLD/{print $2":"$3"B"}' | paste -sd, -) topfield=$(echo "$FIELDS" | awk '/^FLD/{print $2; exit}') + finding_json=$(printf '%s\n' "$FIELDS" | sed -n 's/^FINDING //p' | tail -n 1) + if [[ -z "$finding_json" ]]; then + echo "Failed to serialize finding for collection '$coll'" >&2 + exit 1 + fi emit_human " ⚠️ ${coll}" emit_human " heap=${heap_kb}KB TOAST=${toast_kb}KB (TOAST ratio ${ratio}) avgObjSize=${avgobj}B" @@ -168,8 +201,7 @@ while IFS=$'\t' read -r coll heap toast total; do # JSON finding [[ $first -eq 0 ]] && FINDINGS_JSON+="," first=0 - FINDINGS_JSON+=$(printf '{"collection":"%s","heap_bytes":%s,"toast_bytes":%s,"toast_ratio":%s,"avg_obj_size":%s,"dominant_fields":"%s","recommended_split_field":"%s","fix":"move large text to side collection %s_text keyed by _id"}' \ - "$coll" "$heap" "$toast" "$ratio" "${avgobj:-0}" "$bigfields" "$topfield" "$coll") + FINDINGS_JSON+="$finding_json" else emit_human " ✅ ${coll} heap=${heap_kb}KB TOAST=${toast_kb}KB (ratio ${ratio}) — no bloat" fi diff --git a/scripts/toast-split-advisor.sh b/scripts/toast-split-advisor.sh index 46fc1d2..d565a25 100755 --- a/scripts/toast-split-advisor.sh +++ b/scripts/toast-split-advisor.sh @@ -69,21 +69,30 @@ while [[ $# -gt 0 ]]; do done [[ -z "$DB" ]] && { echo "Error: --db is required" >&2; exit 1; } [[ -z "$PASSWORD" ]] && { echo "Error: no password. Set DB_PASSWORD or pass --password (local demo: export DB_PASSWORD=Test1234)." >&2; exit 1; } +[[ "$SAMPLE" =~ ^[1-9][0-9]*$ ]] || { echo "Error: --sample must be a positive integer" >&2; exit 2; } +[[ "$MIN_TOTAL_KB" =~ ^[0-9]+$ ]] || { echo "Error: --min-total-kb must be a non-negative integer" >&2; exit 2; } +[[ "$FIELD_MIN_BYTES" =~ ^[0-9]+$ ]] || { echo "Error: --field-min-bytes must be a non-negative integer" >&2; exit 2; } +[[ "$TOAST_RATIO" =~ ^[0-9]+([.][0-9]+)?$ ]] || { echo "Error: --toast-ratio must be a non-negative number" >&2; exit 2; } run_mongosh() { - docdb_exec_as "" mongosh "localhost:${PORT}/${DB}" \ + local program="$1" + shift + docdb_exec_as "" env "$@" mongosh "localhost:${PORT}/${DB}" \ -u "$DB_USER_" -p "$PASSWORD" --authenticationMechanism SCRAM-SHA-256 \ - --tls --tlsAllowInvalidCertificates --quiet --eval "$1" 2>/dev/null + --tls --tlsAllowInvalidCertificates --quiet --eval "$program" 2>/dev/null } run_psql() { - docdb_exec_as "" psql -h localhost -p "$PG_PORT" -U "$PG_USER" -d "$PG_DB" \ - -t --no-align -F $'\t' -c "$1" 2>/dev/null | grep -vE '^(SET|)$' + local query="$1" + shift + printf '%s\n' "$query" | + docdb_exec_stdin_as "" psql -h localhost -p "$PG_PORT" -U "$PG_USER" \ + -d "$PG_DB" -v ON_ERROR_STOP=1 -t --no-align -F $'\t' "$@" \ + 2>/dev/null | + grep -vE '^(SET|)$' } # ── Per-collection heap/TOAST from PostgreSQL (measured facts) ────────────── # tab-separated: collectionheap_bytestoast_bytestotal_bytes -COLL_FILTER="" -[[ -n "$ONE_COLL" ]] && COLL_FILTER="AND c.collection_name = '${ONE_COLL}'" SIZES=$(run_psql " SELECT c.collection_name, pg_relation_size(t.oid), @@ -91,9 +100,11 @@ SELECT c.collection_name, pg_total_relation_size(t.oid) FROM documentdb_api_catalog.collections c JOIN pg_class t ON t.oid = ('documentdb_data.documents_' || c.collection_id)::regclass -WHERE c.database_name = '${DB}' ${COLL_FILTER} +WHERE c.database_name = :'db_name' + AND (NULLIF(:'collection_name', '') IS NULL + OR c.collection_name = :'collection_name') ORDER BY pg_total_relation_size(t.oid) DESC; -") +" --set=db_name="$DB" --set=collection_name="$ONE_COLL") if [[ -z "$SIZES" ]]; then echo "No collections found for database '${DB}' (is it seeded? is the container up?)" >&2 @@ -107,9 +118,15 @@ fi field_json() { local coll="$1" run_mongosh ' - var s = db.'"$coll"'.stats(); + var coll = process.env.DOCDB_COLLECTION; + var sample = Number(process.env.DOCDB_SAMPLE); + if (!Number.isSafeInteger(sample) || sample < 1) { + throw new Error("invalid sample size"); + } + var collection = db.getCollection(coll); + var s = collection.stats(); var avg = s.avgObjSize || 0; - var docs = db.'"$coll"'.aggregate([{$sample:{size:'"$SAMPLE"'}}]).toArray(); + var docs = collection.aggregate([{$sample:{size:sample}}]).toArray(); var acc = {}, n = docs.length || 1; docs.forEach(function(doc){ Object.keys(doc).forEach(function(k){ @@ -121,7 +138,8 @@ field_json() { var fields = Object.keys(acc).map(function(k){ return {f:k, b:Math.round(acc[k]/n)}; }); fields.sort(function(a,b){ return b.b - a.b; }); print("FIELDJSON " + JSON.stringify({avg_obj_size: avg, sampled: n, fields: fields})); - ' | sed -n 's/^FIELDJSON //p' + ' "DOCDB_COLLECTION=$coll" "DOCDB_SAMPLE=$SAMPLE" | + sed -n 's/^FIELDJSON //p' } # ── Collect one record per collection into a buffer for a single Python pass ─ @@ -136,8 +154,10 @@ while IFS=$'\t' read -r coll heap toast total; do ratio=$(awk -v t="$toast" -v h="$heap" 'BEGIN{ d=t+h; if(d<=0){print 0}else{printf "%.4f", t/d} }') over=$(awk -v r="$ratio" -v thr="$TOAST_RATIO" 'BEGIN{ print (r>thr)?1:0 }') if [[ "$over" == "1" ]]; then - fj=$(field_json "$coll") - [[ -z "$fj" ]] && fj='{"avg_obj_size":0,"sampled":0,"fields":[]}' + if ! fj=$(field_json "$coll") || [[ -z "$fj" ]]; then + echo "Failed to sample collection '$coll'" >&2 + exit 1 + fi BUFFER+="${coll}"$'\t'"${heap}"$'\t'"${toast}"$'\t'"${total}"$'\t'"${fj}"$'\n' else BUFFER+="${coll}"$'\t'"${heap}"$'\t'"${toast}"$'\t'"${total}"$'\t'"CLEAN"$'\n' diff --git a/testing/scenarios/json-contract/fixture.js b/testing/scenarios/json-contract/fixture.js index 4f8a038..5a28dbc 100644 --- a/testing/scenarios/json-contract/fixture.js +++ b/testing/scenarios/json-contract/fixture.js @@ -11,7 +11,17 @@ // This is a SHAPE fixture: the tests assert JSON validity + structure, never // specific finding counts, so the data does not need to be deterministic. -["customers", "orders", "documents"].forEach(function (c) { +var ADVERSARIAL_COLLECTION = + "safe;db.getCollection('diagnostic_sentinel').drop();db.safe"; + +[ + "customers", + "orders", + "documents", + "safe", + "diagnostic_sentinel", + ADVERSARIAL_COLLECTION +].forEach(function (c) { try { db[c].drop(); } catch (e) {} }); @@ -47,6 +57,9 @@ for (var i = 1; i <= 120; i++) { bulk.push({ _id: i, kind: "note", amount: i * 10, blob: txt(6000) }); } db.documents.insertMany(bulk); +db.safe.insertOne({ _id: 1, marker: "safe" }); +db.diagnostic_sentinel.insertOne({ _id: 1, marker: "must-survive" }); +db.getCollection(ADVERSARIAL_COLLECTION).insertMany(bulk); print("FIXTURE_READY json-contract"); db.getCollectionNames().sort().forEach(function (c) { diff --git a/testing/scenarios/json-contract/tests/test_json_contract.py b/testing/scenarios/json-contract/tests/test_json_contract.py index 6704cc9..0ef1364 100644 --- a/testing/scenarios/json-contract/tests/test_json_contract.py +++ b/testing/scenarios/json-contract/tests/test_json_contract.py @@ -18,6 +18,9 @@ ) SHAPE = _SPEC["shape"] TYPEMAP = {"list": list, "object": dict} +ADVERSARIAL_COLLECTION = ( + "safe;db.getCollection('diagnostic_sentinel').drop();db.safe" +) @pytest.fixture(scope="session") @@ -30,6 +33,17 @@ def json_outputs(seeded_db): return out +@pytest.fixture(scope="session") +def quoted_database(request, require_container): + name = "test_json_'contract" + fixture = Path(__file__).resolve().parents[1] / "fixture.js" + kit.drop_db(name, container=require_container) + kit.seed(name, fixture, container=require_container) + yield name + if not request.config.getoption("--keep-db"): + kit.drop_db(name, container=require_container) + + @pytest.mark.jsoncontract @pytest.mark.parametrize("script", list(SHAPE)) def test_emits_valid_json_of_expected_shape(json_outputs, script): @@ -87,6 +101,57 @@ def test_bash_and_portable_entry_points_have_same_json_shape( assert set(bash.json) == set(portable.json) +@pytest.mark.jsoncontract +@pytest.mark.parametrize( + ("script", "extra_args"), + [ + ("document-bloat-advisor.sh", []), + ( + "toast-split-advisor.sh", + ["--collection", ADVERSARIAL_COLLECTION, "--sample", "5"], + ), + ], +) +def test_catalog_names_are_passed_as_data(quoted_database, script, extra_args): + result = kit.run_script( + script, + "--db", + quoted_database, + "--min-total-kb", + "0", + "--toast-ratio", + "0", + *extra_args, + "--json", + want_json=True, + portable=False, + ) + assert result.returncode == 0, ( + f"{script} failed for a quoted collection name:\n{result.stderr[:400]}" + ) + assert result.json is not None, result.stdout[:400] + findings = ( + result.json + if script == "document-bloat-advisor.sh" + else result.json["findings"] + ) + quoted = [ + finding for finding in findings + if finding["collection"] == ADVERSARIAL_COLLECTION + ] + assert quoted, f"{script} did not preserve the exact collection name" + assert quoted[0]["avg_obj_size"] > 0, ( + f"{script} did not sample the quoted collection" + ) + sentinel = kit.mongosh_eval( + quoted_database, + 'db.getCollection("diagnostic_sentinel").countDocuments({})', + ) + assert "1" in sentinel.split(), ( + f"{script} executed JavaScript embedded in the collection name" + ) + + @pytest.mark.jsoncontract def test_perf_advisor_nested_shape(json_outputs): d = json_outputs["perf-advisor.sh"].json